unreal-engine-mcp-server 0.5.0 → 0.5.2

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 (188) hide show
  1. package/.env.example +1 -1
  2. package/.github/release-drafter-config.yml +51 -0
  3. package/.github/workflows/greetings.yml +5 -1
  4. package/.github/workflows/labeler.yml +2 -1
  5. package/.github/workflows/publish-mcp.yml +2 -4
  6. package/.github/workflows/release-drafter.yml +3 -2
  7. package/.github/workflows/release.yml +3 -3
  8. package/CHANGELOG.md +109 -0
  9. package/CONTRIBUTING.md +1 -1
  10. package/GEMINI.md +115 -0
  11. package/Public/Plugin_setup_guide.mp4 +0 -0
  12. package/README.md +166 -200
  13. package/dist/automation/bridge.d.ts +1 -2
  14. package/dist/automation/bridge.js +24 -23
  15. package/dist/automation/connection-manager.d.ts +1 -0
  16. package/dist/automation/connection-manager.js +10 -0
  17. package/dist/automation/message-handler.js +5 -4
  18. package/dist/automation/request-tracker.d.ts +4 -0
  19. package/dist/automation/request-tracker.js +11 -3
  20. package/dist/config.d.ts +0 -1
  21. package/dist/config.js +0 -1
  22. package/dist/constants.d.ts +4 -0
  23. package/dist/constants.js +4 -0
  24. package/dist/graphql/loaders.d.ts +64 -0
  25. package/dist/graphql/loaders.js +117 -0
  26. package/dist/graphql/resolvers.d.ts +3 -3
  27. package/dist/graphql/resolvers.js +33 -30
  28. package/dist/graphql/server.js +3 -1
  29. package/dist/graphql/types.d.ts +2 -0
  30. package/dist/index.d.ts +2 -0
  31. package/dist/index.js +13 -2
  32. package/dist/server-setup.d.ts +0 -1
  33. package/dist/server-setup.js +0 -40
  34. package/dist/tools/actors.d.ts +58 -24
  35. package/dist/tools/actors.js +22 -6
  36. package/dist/tools/assets.d.ts +19 -71
  37. package/dist/tools/assets.js +28 -22
  38. package/dist/tools/base-tool.d.ts +4 -4
  39. package/dist/tools/base-tool.js +1 -1
  40. package/dist/tools/blueprint.d.ts +45 -61
  41. package/dist/tools/blueprint.js +43 -14
  42. package/dist/tools/consolidated-tool-definitions.js +2 -1
  43. package/dist/tools/consolidated-tool-handlers.js +96 -110
  44. package/dist/tools/dynamic-handler-registry.d.ts +11 -9
  45. package/dist/tools/dynamic-handler-registry.js +17 -95
  46. package/dist/tools/editor.d.ts +19 -193
  47. package/dist/tools/editor.js +11 -2
  48. package/dist/tools/environment.d.ts +8 -14
  49. package/dist/tools/foliage.d.ts +18 -143
  50. package/dist/tools/foliage.js +4 -2
  51. package/dist/tools/handlers/actor-handlers.d.ts +1 -1
  52. package/dist/tools/handlers/actor-handlers.js +14 -13
  53. package/dist/tools/handlers/asset-handlers.js +454 -454
  54. package/dist/tools/handlers/sequence-handlers.d.ts +1 -1
  55. package/dist/tools/handlers/sequence-handlers.js +24 -13
  56. package/dist/tools/introspection.d.ts +1 -1
  57. package/dist/tools/introspection.js +1 -1
  58. package/dist/tools/landscape.d.ts +16 -116
  59. package/dist/tools/landscape.js +7 -3
  60. package/dist/tools/level.d.ts +22 -103
  61. package/dist/tools/level.js +26 -18
  62. package/dist/tools/lighting.d.ts +54 -7
  63. package/dist/tools/lighting.js +9 -5
  64. package/dist/tools/materials.d.ts +1 -1
  65. package/dist/tools/materials.js +5 -1
  66. package/dist/tools/niagara.js +37 -2
  67. package/dist/tools/performance.d.ts +0 -1
  68. package/dist/tools/performance.js +0 -1
  69. package/dist/tools/physics.js +5 -1
  70. package/dist/tools/sequence.d.ts +24 -24
  71. package/dist/tools/sequence.js +13 -0
  72. package/dist/tools/ui.d.ts +0 -2
  73. package/dist/types/automation-responses.d.ts +115 -0
  74. package/dist/types/automation-responses.js +2 -0
  75. package/dist/types/responses.d.ts +249 -0
  76. package/dist/types/responses.js +2 -0
  77. package/dist/types/tool-interfaces.d.ts +135 -135
  78. package/dist/types/tool-types.d.ts +2 -0
  79. package/dist/unreal-bridge.js +4 -4
  80. package/dist/utils/command-validator.js +7 -5
  81. package/dist/utils/error-handler.d.ts +24 -2
  82. package/dist/utils/error-handler.js +58 -23
  83. package/dist/utils/normalize.d.ts +7 -4
  84. package/dist/utils/normalize.js +12 -10
  85. package/dist/utils/path-security.d.ts +2 -0
  86. package/dist/utils/path-security.js +24 -0
  87. package/dist/utils/response-factory.d.ts +4 -4
  88. package/dist/utils/response-factory.js +15 -21
  89. package/dist/utils/response-validator.js +88 -73
  90. package/dist/utils/unreal-command-queue.d.ts +2 -0
  91. package/dist/utils/unreal-command-queue.js +8 -1
  92. package/docs/Migration-Guide-v0.5.0.md +1 -9
  93. package/docs/handler-mapping.md +4 -2
  94. package/docs/testing-guide.md +2 -2
  95. package/package.json +12 -6
  96. package/plugins/McpAutomationBridge/Source/McpAutomationBridge/Private/McpAutomationBridgeSubsystem.cpp +298 -33
  97. package/plugins/McpAutomationBridge/Source/McpAutomationBridge/Private/McpAutomationBridge_AnimationHandlers.cpp +7 -8
  98. package/plugins/McpAutomationBridge/Source/McpAutomationBridge/Private/McpAutomationBridge_BlueprintGraphHandlers.cpp +229 -319
  99. package/plugins/McpAutomationBridge/Source/McpAutomationBridge/Private/McpAutomationBridge_BlueprintHandlers.cpp +98 -0
  100. package/plugins/McpAutomationBridge/Source/McpAutomationBridge/Private/McpAutomationBridge_EffectHandlers.cpp +24 -0
  101. package/plugins/McpAutomationBridge/Source/McpAutomationBridge/Private/McpAutomationBridge_EnvironmentHandlers.cpp +96 -0
  102. package/plugins/McpAutomationBridge/Source/McpAutomationBridge/Private/McpAutomationBridge_LightingHandlers.cpp +52 -5
  103. package/plugins/McpAutomationBridge/Source/McpAutomationBridge/Private/McpAutomationBridge_ProcessRequest.cpp +5 -268
  104. package/plugins/McpAutomationBridge/Source/McpAutomationBridge/Private/McpAutomationBridge_SequenceHandlers.cpp +57 -2
  105. package/plugins/McpAutomationBridge/Source/McpAutomationBridge/Private/McpConnectionManager.cpp +0 -1
  106. package/scripts/run-all-tests.mjs +25 -20
  107. package/server.json +3 -2
  108. package/src/automation/bridge.ts +27 -25
  109. package/src/automation/connection-manager.ts +18 -0
  110. package/src/automation/message-handler.ts +33 -8
  111. package/src/automation/request-tracker.ts +39 -7
  112. package/src/config.ts +1 -1
  113. package/src/constants.ts +7 -0
  114. package/src/graphql/loaders.ts +244 -0
  115. package/src/graphql/resolvers.ts +47 -49
  116. package/src/graphql/server.ts +3 -1
  117. package/src/graphql/types.ts +3 -0
  118. package/src/index.ts +15 -2
  119. package/src/resources/assets.ts +5 -4
  120. package/src/server/tool-registry.ts +3 -3
  121. package/src/server-setup.ts +3 -37
  122. package/src/tools/actors.ts +77 -44
  123. package/src/tools/animation.ts +1 -0
  124. package/src/tools/assets.ts +76 -65
  125. package/src/tools/base-tool.ts +3 -3
  126. package/src/tools/blueprint.ts +170 -104
  127. package/src/tools/consolidated-tool-definitions.ts +2 -1
  128. package/src/tools/consolidated-tool-handlers.ts +129 -150
  129. package/src/tools/dynamic-handler-registry.ts +22 -140
  130. package/src/tools/editor.ts +43 -29
  131. package/src/tools/environment.ts +21 -27
  132. package/src/tools/foliage.ts +28 -25
  133. package/src/tools/handlers/actor-handlers.ts +16 -17
  134. package/src/tools/handlers/asset-handlers.ts +484 -484
  135. package/src/tools/handlers/sequence-handlers.ts +85 -62
  136. package/src/tools/introspection.ts +7 -7
  137. package/src/tools/landscape.ts +34 -28
  138. package/src/tools/level.ts +100 -80
  139. package/src/tools/lighting.ts +25 -20
  140. package/src/tools/materials.ts +9 -3
  141. package/src/tools/niagara.ts +44 -2
  142. package/src/tools/performance.ts +1 -2
  143. package/src/tools/physics.ts +7 -1
  144. package/src/tools/sequence.ts +42 -26
  145. package/src/tools/ui.ts +1 -3
  146. package/src/types/automation-responses.ts +119 -0
  147. package/src/types/responses.ts +355 -0
  148. package/src/types/tool-interfaces.ts +135 -135
  149. package/src/types/tool-types.ts +4 -0
  150. package/src/unreal-bridge.ts +71 -26
  151. package/src/utils/command-validator.ts +47 -5
  152. package/src/utils/error-handler.ts +128 -45
  153. package/src/utils/normalize.test.ts +162 -0
  154. package/src/utils/normalize.ts +38 -16
  155. package/src/utils/path-security.ts +43 -0
  156. package/src/utils/response-factory.ts +29 -24
  157. package/src/utils/response-validator.ts +103 -87
  158. package/src/utils/safe-json.test.ts +90 -0
  159. package/src/utils/unreal-command-queue.ts +13 -1
  160. package/src/utils/validation.test.ts +184 -0
  161. package/tests/test-animation.mjs +358 -33
  162. package/tests/test-asset-graph.mjs +311 -0
  163. package/tests/test-audio.mjs +314 -116
  164. package/tests/test-behavior-tree.mjs +327 -144
  165. package/tests/test-blueprint-graph.mjs +343 -12
  166. package/tests/test-control-editor.mjs +85 -53
  167. package/tests/test-graphql.mjs +58 -8
  168. package/tests/test-input.mjs +349 -0
  169. package/tests/test-inspect.mjs +291 -61
  170. package/tests/test-landscape.mjs +304 -48
  171. package/tests/test-lighting.mjs +428 -0
  172. package/tests/test-manage-level.mjs +70 -51
  173. package/tests/test-performance.mjs +539 -0
  174. package/tests/test-sequence.mjs +82 -46
  175. package/tests/test-system.mjs +72 -33
  176. package/tests/test-wasm.mjs +98 -8
  177. package/vitest.config.ts +35 -0
  178. package/.github/release-drafter.yml +0 -148
  179. package/dist/prompts/index.d.ts +0 -21
  180. package/dist/prompts/index.js +0 -217
  181. package/dist/tools/blueprint/helpers.d.ts +0 -29
  182. package/dist/tools/blueprint/helpers.js +0 -182
  183. package/src/prompts/index.ts +0 -249
  184. package/src/tools/blueprint/helpers.ts +0 -189
  185. package/tests/test-blueprint-events.mjs +0 -35
  186. package/tests/test-extra-tools.mjs +0 -38
  187. package/tests/test-render.mjs +0 -33
  188. package/tests/test-search-assets.mjs +0 -66
@@ -0,0 +1,119 @@
1
+ /**
2
+ * Common type definitions for automation bridge responses
3
+ * Used to provide type safety for sendAutomationRequest calls
4
+ */
5
+
6
+ /**
7
+ * Base response structure from the Automation Bridge
8
+ * Most responses follow this pattern with optional additional fields
9
+ */
10
+ export interface AutomationResponse {
11
+ success: boolean;
12
+ message?: string;
13
+ error?: string | { message: string; code?: string };
14
+ result?: unknown;
15
+ // Common additional fields
16
+ warnings?: string[];
17
+ details?: unknown;
18
+ data?: unknown;
19
+ [key: string]: unknown;
20
+ }
21
+
22
+ /**
23
+ * Level-related response fields
24
+ */
25
+ export interface LevelResponse extends AutomationResponse {
26
+ levelPath?: string;
27
+ level?: string;
28
+ path?: string;
29
+ packagePath?: string;
30
+ objectPath?: string;
31
+ currentMap?: string;
32
+ currentMapPath?: string;
33
+ currentWorldLevels?: unknown[];
34
+ allMaps?: unknown[];
35
+ partitioned?: boolean;
36
+ streaming?: boolean;
37
+ loaded?: boolean;
38
+ visible?: boolean;
39
+ skipped?: boolean;
40
+ reason?: string;
41
+ }
42
+
43
+ /**
44
+ * Actor-related response fields
45
+ */
46
+ export interface ActorResponse extends AutomationResponse {
47
+ actorName?: string;
48
+ actorLabel?: string;
49
+ actorPath?: string;
50
+ actors?: unknown[];
51
+ components?: unknown[];
52
+ location?: { x: number; y: number; z: number };
53
+ rotation?: { pitch: number; yaw: number; roll: number };
54
+ scale?: { x: number; y: number; z: number };
55
+ transform?: unknown;
56
+ tags?: string[];
57
+ properties?: Record<string, unknown>;
58
+ deleted?: boolean;
59
+ deletedCount?: number;
60
+ }
61
+
62
+ /**
63
+ * Asset-related response fields
64
+ */
65
+ export interface AssetResponse extends AutomationResponse {
66
+ assetPath?: string;
67
+ asset?: string;
68
+ assets?: unknown[];
69
+ source?: string;
70
+ saved?: boolean;
71
+ metadata?: Record<string, unknown>;
72
+ tags?: string[];
73
+ graph?: Record<string, unknown[]>;
74
+ }
75
+
76
+ /**
77
+ * Editor-related response fields
78
+ */
79
+ export interface EditorResponse extends AutomationResponse {
80
+ viewMode?: string;
81
+ fov?: number;
82
+ location?: { x: number; y: number; z: number };
83
+ rotation?: { pitch: number; yaw: number; roll: number };
84
+ cameraSettings?: unknown;
85
+ camera?: { location?: unknown; rotation?: unknown };
86
+ resolution?: { width: number; height: number };
87
+ filename?: string;
88
+ filePath?: string;
89
+ isPlaying?: boolean;
90
+ isPaused?: boolean;
91
+ isInPIE?: boolean;
92
+ playSessionId?: string;
93
+ bookmarkName?: string;
94
+ bookmarks?: unknown[];
95
+ realtime?: boolean;
96
+ }
97
+
98
+ /**
99
+ * Sequence/Animation-related response fields
100
+ */
101
+ export interface SequenceResponse extends AutomationResponse {
102
+ sequencePath?: string;
103
+ sequence?: string;
104
+ bindingId?: string;
105
+ trackName?: string;
106
+ keyframe?: unknown;
107
+ frameNumber?: number;
108
+ length?: number;
109
+ playbackPosition?: number;
110
+ requestId?: string;
111
+ }
112
+
113
+ /**
114
+ * Console command response
115
+ */
116
+ export interface ConsoleResponse extends AutomationResponse {
117
+ output?: string;
118
+ command?: string;
119
+ }
@@ -0,0 +1,355 @@
1
+ /**
2
+ * Base Response Types for Unreal Engine MCP Server
3
+ *
4
+ * These interfaces provide type safety for tool responses.
5
+ * Use with BaseTool.sendRequest<T>() for typed responses.
6
+ */
7
+
8
+ // ============================================================================
9
+ // Base Types
10
+ // ============================================================================
11
+
12
+ export interface BaseResponse {
13
+ success: boolean;
14
+ message?: string;
15
+ error?: string;
16
+ /** Optional error code for programmatic handling */
17
+ errorCode?: string;
18
+ }
19
+
20
+ export interface Vector3 {
21
+ x: number;
22
+ y: number;
23
+ z: number;
24
+ }
25
+
26
+ export interface Rotator {
27
+ pitch: number;
28
+ yaw: number;
29
+ roll: number;
30
+ }
31
+
32
+ export interface Transform {
33
+ location?: Vector3;
34
+ rotation?: Rotator;
35
+ scale?: Vector3;
36
+ }
37
+
38
+ // ============================================================================
39
+ // Actor Responses
40
+ // ============================================================================
41
+
42
+ export interface SpawnActorResponse extends BaseResponse {
43
+ actorName?: string;
44
+ actorPath?: string;
45
+ /** Class path of the spawned actor */
46
+ classPath?: string;
47
+ }
48
+
49
+ export interface DeleteActorResponse extends BaseResponse {
50
+ deletedCount?: number;
51
+ deletedActors?: string[];
52
+ }
53
+
54
+ export interface GetTransformResponse extends BaseResponse {
55
+ location?: Vector3;
56
+ rotation?: Rotator;
57
+ scale?: Vector3;
58
+ }
59
+
60
+ export interface SetTransformResponse extends BaseResponse {
61
+ actorName?: string;
62
+ }
63
+
64
+ export interface FindActorsResponse extends BaseResponse {
65
+ actors?: Array<{
66
+ name: string;
67
+ label?: string;
68
+ class?: string;
69
+ path?: string;
70
+ }>;
71
+ count?: number;
72
+ }
73
+
74
+ export interface GetComponentsResponse extends BaseResponse {
75
+ components?: Array<{
76
+ name: string;
77
+ type: string;
78
+ properties?: Record<string, unknown>;
79
+ }>;
80
+ }
81
+
82
+ export interface ApplyForceResponse extends BaseResponse {
83
+ actorName?: string;
84
+ forceApplied?: Vector3;
85
+ }
86
+
87
+ // ============================================================================
88
+ // Asset Responses
89
+ // ============================================================================
90
+
91
+ export interface AssetInfo {
92
+ name: string;
93
+ path: string;
94
+ class?: string;
95
+ packagePath?: string;
96
+ size?: number;
97
+ }
98
+
99
+ export interface ListAssetsResponse extends BaseResponse {
100
+ assets?: AssetInfo[];
101
+ count?: number;
102
+ directory?: string;
103
+ }
104
+
105
+ export interface CreateAssetResponse extends BaseResponse {
106
+ assetPath?: string;
107
+ assetName?: string;
108
+ }
109
+
110
+ export interface DeleteAssetResponse extends BaseResponse {
111
+ deletedPath?: string;
112
+ deletedCount?: number;
113
+ }
114
+
115
+ export interface GetDependenciesResponse extends BaseResponse {
116
+ dependencies?: string[];
117
+ referencers?: string[];
118
+ count?: number;
119
+ }
120
+
121
+ export interface AssetExistsResponse extends BaseResponse {
122
+ exists?: boolean;
123
+ assetPath?: string;
124
+ }
125
+
126
+ // ============================================================================
127
+ // Blueprint Responses
128
+ // ============================================================================
129
+
130
+ export interface CreateBlueprintResponse extends BaseResponse {
131
+ blueprintPath?: string;
132
+ blueprintName?: string;
133
+ parentClass?: string;
134
+ }
135
+
136
+ export interface GetBlueprintResponse extends BaseResponse {
137
+ path?: string;
138
+ name?: string;
139
+ parentClass?: string;
140
+ variables?: Array<{
141
+ name: string;
142
+ type: string;
143
+ defaultValue?: unknown;
144
+ }>;
145
+ functions?: Array<{
146
+ name: string;
147
+ parameters?: Array<{ name: string; type: string }>;
148
+ returnType?: string;
149
+ }>;
150
+ components?: Array<{
151
+ name: string;
152
+ type: string;
153
+ properties?: Record<string, unknown>;
154
+ }>;
155
+ }
156
+
157
+ export interface AddVariableResponse extends BaseResponse {
158
+ variableName?: string;
159
+ variableType?: string;
160
+ }
161
+
162
+ export interface CreateNodeResponse extends BaseResponse {
163
+ nodeId?: string;
164
+ nodeName?: string;
165
+ }
166
+
167
+ export interface ConnectPinsResponse extends BaseResponse {
168
+ connected?: boolean;
169
+ fromNode?: string;
170
+ toNode?: string;
171
+ }
172
+
173
+ // ============================================================================
174
+ // Level Responses
175
+ // ============================================================================
176
+
177
+ export interface LoadLevelResponse extends BaseResponse {
178
+ levelPath?: string;
179
+ levelName?: string;
180
+ }
181
+
182
+ export interface SaveLevelResponse extends BaseResponse {
183
+ savedPath?: string;
184
+ }
185
+
186
+ export interface ListLevelsResponse extends BaseResponse {
187
+ levels?: Array<{
188
+ name: string;
189
+ path: string;
190
+ isLoaded?: boolean;
191
+ isVisible?: boolean;
192
+ }>;
193
+ }
194
+
195
+ export interface BuildLightingResponse extends BaseResponse {
196
+ quality?: string;
197
+ buildTime?: number;
198
+ }
199
+
200
+ // ============================================================================
201
+ // Editor Responses
202
+ // ============================================================================
203
+
204
+ export interface PlayInEditorResponse extends BaseResponse {
205
+ isPlaying?: boolean;
206
+ isPaused?: boolean;
207
+ }
208
+
209
+ export interface SetCameraResponse extends BaseResponse {
210
+ location?: Vector3;
211
+ rotation?: Rotator;
212
+ fov?: number;
213
+ }
214
+
215
+ export interface ScreenshotResponse extends BaseResponse {
216
+ filePath?: string;
217
+ width?: number;
218
+ height?: number;
219
+ }
220
+
221
+ export interface ViewModeResponse extends BaseResponse {
222
+ viewMode?: string;
223
+ }
224
+
225
+ // ============================================================================
226
+ // Sequence Responses
227
+ // ============================================================================
228
+
229
+ export interface CreateSequenceResponse extends BaseResponse {
230
+ sequencePath?: string;
231
+ sequenceName?: string;
232
+ }
233
+
234
+ export interface AddActorToSequenceResponse extends BaseResponse {
235
+ bindingId?: string;
236
+ actorName?: string;
237
+ }
238
+
239
+ export interface AddKeyframeResponse extends BaseResponse {
240
+ frameNumber?: number;
241
+ property?: string;
242
+ value?: unknown;
243
+ }
244
+
245
+ // ============================================================================
246
+ // Audio Responses
247
+ // ============================================================================
248
+
249
+ export interface PlaySoundResponse extends BaseResponse {
250
+ soundPath?: string;
251
+ audioComponentId?: string;
252
+ }
253
+
254
+ export interface CreateSoundCueResponse extends BaseResponse {
255
+ cuePath?: string;
256
+ cueName?: string;
257
+ }
258
+
259
+ // ============================================================================
260
+ // Effect Responses
261
+ // ============================================================================
262
+
263
+ export interface SpawnEffectResponse extends BaseResponse {
264
+ effectName?: string;
265
+ effectPath?: string;
266
+ location?: Vector3;
267
+ }
268
+
269
+ export interface CreateNiagaraSystemResponse extends BaseResponse {
270
+ systemPath?: string;
271
+ systemName?: string;
272
+ }
273
+
274
+ // ============================================================================
275
+ // Lighting Responses
276
+ // ============================================================================
277
+
278
+ export interface SpawnLightResponse extends BaseResponse {
279
+ lightName?: string;
280
+ lightType?: string;
281
+ location?: Vector3;
282
+ }
283
+
284
+ export interface SetupGIResponse extends BaseResponse {
285
+ method?: string;
286
+ bounces?: number;
287
+ }
288
+
289
+ // ============================================================================
290
+ // Animation Responses
291
+ // ============================================================================
292
+
293
+ export interface CreateAnimBlueprintResponse extends BaseResponse {
294
+ blueprintPath?: string;
295
+ skeletonPath?: string;
296
+ }
297
+
298
+ export interface PlayMontageResponse extends BaseResponse {
299
+ montagePath?: string;
300
+ playRate?: number;
301
+ }
302
+
303
+ // ============================================================================
304
+ // System Responses
305
+ // ============================================================================
306
+
307
+ export interface ConsoleCommandResponse extends BaseResponse {
308
+ command?: string;
309
+ output?: string;
310
+ }
311
+
312
+ export interface ProfileResponse extends BaseResponse {
313
+ profileType?: string;
314
+ enabled?: boolean;
315
+ }
316
+
317
+ export interface SetCVarResponse extends BaseResponse {
318
+ cvarName?: string;
319
+ value?: string;
320
+ }
321
+
322
+ // ============================================================================
323
+ // Inspect Responses
324
+ // ============================================================================
325
+
326
+ export interface InspectObjectResponse extends BaseResponse {
327
+ objectPath?: string;
328
+ className?: string;
329
+ properties?: Record<string, unknown>;
330
+ }
331
+
332
+ export interface GetPropertyResponse extends BaseResponse {
333
+ propertyName?: string;
334
+ value?: unknown;
335
+ propertyType?: string;
336
+ }
337
+
338
+ export interface SetPropertyResponse extends BaseResponse {
339
+ propertyName?: string;
340
+ newValue?: unknown;
341
+ }
342
+
343
+ // ============================================================================
344
+ // Environment Responses
345
+ // ============================================================================
346
+
347
+ export interface CreateLandscapeResponse extends BaseResponse {
348
+ landscapeName?: string;
349
+ componentCount?: { x: number; y: number };
350
+ }
351
+
352
+ export interface AddFoliageResponse extends BaseResponse {
353
+ foliageType?: string;
354
+ instanceCount?: number;
355
+ }