flockbay 0.10.15 → 0.10.16
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/codex/flockbayMcpStdioBridge.cjs +339 -0
- package/dist/codex/flockbayMcpStdioBridge.mjs +339 -0
- package/dist/{index--o4BPz5o.cjs → index-Cau-_Qvn.cjs} +2683 -609
- package/dist/{index-CUp3juDS.mjs → index-DtmFQzXY.mjs} +2684 -611
- package/dist/index.cjs +3 -5
- package/dist/index.mjs +3 -5
- package/dist/lib.cjs +7 -9
- package/dist/lib.d.cts +219 -531
- package/dist/lib.d.mts +219 -531
- package/dist/lib.mjs +7 -9
- package/dist/{runCodex-o6PCbHQ7.mjs → runCodex-Di9eHddq.mjs} +263 -42
- package/dist/{runCodex-D3eT-TvB.cjs → runCodex-DzP3VUa-.cjs} +264 -43
- package/dist/{runGemini-Bt0oEj_g.mjs → runGemini-BS6sBU_V.mjs} +63 -28
- package/dist/{runGemini-CBxZp6I7.cjs → runGemini-CpmehDQ2.cjs} +64 -29
- package/dist/{types-DGd6ea2Z.mjs → types-CwzNqYEx.mjs} +465 -1142
- package/dist/{types-C-jnUdn_.cjs → types-SUAKq-K0.cjs} +466 -1146
- package/package.json +1 -1
- package/tools/unreal-mcp/upstream/MCPGameProject/Plugins/UnrealMCP/Source/UnrealMCP/Private/Commands/UnrealMCPBlueprintCommands.cpp +195 -6
- package/tools/unreal-mcp/upstream/MCPGameProject/Plugins/UnrealMCP/Source/UnrealMCP/Private/Commands/UnrealMCPBlueprintNodeCommands.cpp +376 -5
- package/tools/unreal-mcp/upstream/MCPGameProject/Plugins/UnrealMCP/Source/UnrealMCP/Private/Commands/UnrealMCPCommandSchema.cpp +731 -0
- package/tools/unreal-mcp/upstream/MCPGameProject/Plugins/UnrealMCP/Source/UnrealMCP/Private/Commands/UnrealMCPCommonUtils.cpp +476 -8
- package/tools/unreal-mcp/upstream/MCPGameProject/Plugins/UnrealMCP/Source/UnrealMCP/Private/Commands/UnrealMCPEditorCommands.cpp +1518 -94
- package/tools/unreal-mcp/upstream/MCPGameProject/Plugins/UnrealMCP/Source/UnrealMCP/Private/MCPServerRunnable.cpp +7 -4
- package/tools/unreal-mcp/upstream/MCPGameProject/Plugins/UnrealMCP/Source/UnrealMCP/Private/UnrealMCPBridge.cpp +150 -112
- package/tools/unreal-mcp/upstream/MCPGameProject/Plugins/UnrealMCP/Source/UnrealMCP/Public/Commands/UnrealMCPBlueprintCommands.h +2 -1
- package/tools/unreal-mcp/upstream/MCPGameProject/Plugins/UnrealMCP/Source/UnrealMCP/Public/Commands/UnrealMCPBlueprintNodeCommands.h +4 -1
- package/tools/unreal-mcp/upstream/MCPGameProject/Plugins/UnrealMCP/Source/UnrealMCP/Public/Commands/UnrealMCPCommandSchema.h +42 -0
- package/tools/unreal-mcp/upstream/MCPGameProject/Plugins/UnrealMCP/Source/UnrealMCP/Public/Commands/UnrealMCPEditorCommands.h +21 -0
- package/tools/unreal-mcp/upstream/MCPGameProject/Plugins/UnrealMCP/Source/UnrealMCP/UnrealMCP.Build.cs +4 -1
- package/dist/flockbayScreenshotGate-DJX3Is5d.mjs +0 -136
- package/dist/flockbayScreenshotGate-DkxU24cR.cjs +0 -138
|
@@ -94,6 +94,22 @@ async function main() {
|
|
|
94
94
|
"Read Images",
|
|
95
95
|
"Read one or more local PNG images by path and return a `{ views: [...] }` payload for the UI."
|
|
96
96
|
);
|
|
97
|
+
forwardTool(
|
|
98
|
+
"evidence_list",
|
|
99
|
+
{
|
|
100
|
+
limit: z.number().int().positive().optional().describe("Max items to return (default 50).")
|
|
101
|
+
},
|
|
102
|
+
"Evidence List",
|
|
103
|
+
"List server-stored evidence manifests for this chat session (uploaded by tools like fast preview and headless screenshots)."
|
|
104
|
+
);
|
|
105
|
+
forwardTool(
|
|
106
|
+
"evidence_get",
|
|
107
|
+
{
|
|
108
|
+
evidenceArtifactId: z.string().describe("Evidence id (e.g. ea_...).")
|
|
109
|
+
},
|
|
110
|
+
"Evidence Get",
|
|
111
|
+
"Fetch one server-stored evidence manifest by id."
|
|
112
|
+
);
|
|
97
113
|
forwardTool(
|
|
98
114
|
"ask_user_question",
|
|
99
115
|
{
|
|
@@ -293,6 +309,19 @@ async function main() {
|
|
|
293
309
|
"Latest Unreal Screenshots",
|
|
294
310
|
"Fetch the latest PNG screenshots from Saved/Screenshots/Flockbay and return views for the UI to display."
|
|
295
311
|
);
|
|
312
|
+
forwardTool(
|
|
313
|
+
"unreal_build_project",
|
|
314
|
+
{
|
|
315
|
+
uprojectPath: z.string().describe("Absolute path to the .uproject file."),
|
|
316
|
+
engineRoot: z.string().optional().describe("Optional Unreal Engine install root. Defaults to ENGINE_ROOT / UE_ENGINE_ROOT, or inferred from EngineAssociation when possible."),
|
|
317
|
+
configuration: z.enum(["Debug", "DebugGame", "Development", "Shipping"]).optional().describe("Build configuration (default Development)."),
|
|
318
|
+
target: z.enum(["Editor", "Game"]).optional().describe("Build target (default Editor)."),
|
|
319
|
+
timeoutMs: z.number().int().positive().optional().describe("Timeout in ms (default 20m)."),
|
|
320
|
+
issuesLimit: z.number().int().positive().optional().describe("Max issues to return (default 250, max 2000).")
|
|
321
|
+
},
|
|
322
|
+
"Unreal Build Project (UBT)",
|
|
323
|
+
"Build the project via Unreal Build Tool (via Engine/Build/BatchFiles/Build.*). Returns structured errors (file/line) and a log path."
|
|
324
|
+
);
|
|
296
325
|
forwardTool(
|
|
297
326
|
"unreal_mcp_command",
|
|
298
327
|
{
|
|
@@ -303,6 +332,226 @@ async function main() {
|
|
|
303
332
|
"Unreal Editor Command (UnrealMCP)",
|
|
304
333
|
"Send a single UnrealMCP command to the running Unreal Editor (engine plugin) and return the JSON response."
|
|
305
334
|
);
|
|
335
|
+
forwardTool(
|
|
336
|
+
"unreal_mcp_search_assets",
|
|
337
|
+
{
|
|
338
|
+
query: z.string().optional().describe("Fuzzy search string (name/path)."),
|
|
339
|
+
class: z.union([z.string(), z.array(z.string())]).optional().describe('Optional asset class filter (e.g. "StaticMesh", "Blueprint", "Material").'),
|
|
340
|
+
root: z.string().optional().describe('Root path to search (default "/Game/").'),
|
|
341
|
+
limit: z.number().int().positive().optional().describe("Max results (default 25, max 200)."),
|
|
342
|
+
timeoutMs: z.number().int().positive().optional().describe("Socket timeout in ms (default 5000).")
|
|
343
|
+
},
|
|
344
|
+
"Unreal Search Assets (UnrealMCP)",
|
|
345
|
+
"Search for assets in the current Unreal project via the UnrealMCP engine plugin (AssetRegistry-backed)."
|
|
346
|
+
);
|
|
347
|
+
forwardTool(
|
|
348
|
+
"unreal_mcp_get_asset_info",
|
|
349
|
+
{
|
|
350
|
+
objectPath: z.string().describe('Unreal asset object path (e.g. "/Game/MyPack/MyMesh.MyMesh").'),
|
|
351
|
+
includeDependencies: z.boolean().optional().describe("Include package dependencies (default false)."),
|
|
352
|
+
timeoutMs: z.number().int().positive().optional().describe("Socket timeout in ms (default 5000).")
|
|
353
|
+
},
|
|
354
|
+
"Unreal Asset Info (UnrealMCP)",
|
|
355
|
+
"Get metadata for a single Unreal asset (class/path + optional dependencies) via the UnrealMCP engine plugin."
|
|
356
|
+
);
|
|
357
|
+
forwardTool(
|
|
358
|
+
"unreal_mcp_list_asset_packs",
|
|
359
|
+
{
|
|
360
|
+
limit: z.number().int().positive().optional().describe("Max number of packs (default 200)."),
|
|
361
|
+
timeoutMs: z.number().int().positive().optional().describe("Socket timeout in ms (default 5000).")
|
|
362
|
+
},
|
|
363
|
+
"Unreal List Asset Packs (UnrealMCP)",
|
|
364
|
+
'List top-level /Game content folders (best-effort "asset packs") via the UnrealMCP engine plugin.'
|
|
365
|
+
);
|
|
366
|
+
forwardTool(
|
|
367
|
+
"unreal_mcp_place_asset",
|
|
368
|
+
{
|
|
369
|
+
objectPath: z.string().describe('Unreal asset object path (e.g. "/Game/MyPack/MyMesh.MyMesh").'),
|
|
370
|
+
name: z.string().optional().describe("Optional actor name (default: derived from asset name)."),
|
|
371
|
+
location: z.array(z.number()).length(3).optional().describe("Spawn location [X,Y,Z] in cm."),
|
|
372
|
+
rotation: z.array(z.number()).length(3).optional().describe("Spawn rotation [Pitch,Yaw,Roll] in degrees."),
|
|
373
|
+
scale: z.array(z.number()).length(3).optional().describe("Spawn scale [X,Y,Z]."),
|
|
374
|
+
timeoutMs: z.number().int().positive().optional().describe("Socket timeout in ms (default 5000).")
|
|
375
|
+
},
|
|
376
|
+
"Unreal Place Asset (UnrealMCP)",
|
|
377
|
+
"Place an asset into the current Unreal level by object path (StaticMesh/Blueprint). Fails if PIE is running."
|
|
378
|
+
);
|
|
379
|
+
forwardTool(
|
|
380
|
+
"unreal_mcp_get_editor_context",
|
|
381
|
+
{
|
|
382
|
+
timeoutMs: z.number().int().positive().optional().describe("Socket timeout in ms (default 5000).")
|
|
383
|
+
},
|
|
384
|
+
"Unreal Editor Context (UnrealMCP)",
|
|
385
|
+
"Return a compact snapshot of editor context: map, selection, and active viewport camera."
|
|
386
|
+
);
|
|
387
|
+
forwardTool(
|
|
388
|
+
"unreal_mcp_get_player_context",
|
|
389
|
+
{
|
|
390
|
+
timeoutMs: z.number().int().positive().optional().describe("Socket timeout in ms (default 5000).")
|
|
391
|
+
},
|
|
392
|
+
"Unreal Player Context (PIE)",
|
|
393
|
+
"Return a compact snapshot of runtime player context (PIE): pawn transform and camera transform."
|
|
394
|
+
);
|
|
395
|
+
forwardTool(
|
|
396
|
+
"unreal_mcp_raycast_from_camera",
|
|
397
|
+
{
|
|
398
|
+
source: z.enum(["editor", "pie"]).optional().describe("Camera source (default editor)."),
|
|
399
|
+
maxDistance: z.number().positive().optional().describe("Max distance in cm (default 10000)."),
|
|
400
|
+
ignoreActors: z.array(z.string()).optional().describe("Actor names/labels to ignore (best-effort)."),
|
|
401
|
+
timeoutMs: z.number().int().positive().optional().describe("Socket timeout in ms (default 5000).")
|
|
402
|
+
},
|
|
403
|
+
"Unreal Raycast From Camera (Editor/PIE)",
|
|
404
|
+
"Raycast from the editor viewport camera or the PIE player camera and return hit location + normal."
|
|
405
|
+
);
|
|
406
|
+
forwardTool(
|
|
407
|
+
"unreal_mcp_raycast_down",
|
|
408
|
+
{
|
|
409
|
+
source: z.enum(["editor", "pie"]).optional().describe("World source (default editor)."),
|
|
410
|
+
startLocation: z.array(z.number()).length(3).describe("Start location [X,Y,Z] in cm."),
|
|
411
|
+
maxDistance: z.number().positive().optional().describe("Max distance in cm (default 100000)."),
|
|
412
|
+
timeoutMs: z.number().int().positive().optional().describe("Socket timeout in ms (default 5000).")
|
|
413
|
+
},
|
|
414
|
+
"Unreal Raycast Down (Drop To Ground)",
|
|
415
|
+
"Raycast straight down from a given startLocation."
|
|
416
|
+
);
|
|
417
|
+
forwardTool(
|
|
418
|
+
"unreal_mcp_get_actor_transform",
|
|
419
|
+
{
|
|
420
|
+
name: z.string().describe("Actor name or label."),
|
|
421
|
+
source: z.enum(["editor", "pie"]).optional().describe("World source (default editor)."),
|
|
422
|
+
timeoutMs: z.number().int().positive().optional().describe("Socket timeout in ms (default 5000).")
|
|
423
|
+
},
|
|
424
|
+
"Unreal Actor Transform (UnrealMCP)",
|
|
425
|
+
"Get a single actor transform (location/rotation/scale) by actor name or label."
|
|
426
|
+
);
|
|
427
|
+
forwardTool(
|
|
428
|
+
"unreal_mcp_get_actor_bounds",
|
|
429
|
+
{
|
|
430
|
+
name: z.string().describe("Actor name or label."),
|
|
431
|
+
source: z.enum(["editor", "pie"]).optional().describe("World source (default editor)."),
|
|
432
|
+
timeoutMs: z.number().int().positive().optional().describe("Socket timeout in ms (default 5000).")
|
|
433
|
+
},
|
|
434
|
+
"Unreal Actor Bounds (UnrealMCP)",
|
|
435
|
+
"Get a single actor bounds (origin/extent + min/max) by actor name or label."
|
|
436
|
+
);
|
|
437
|
+
forwardTool(
|
|
438
|
+
"unreal_mcp_map_check",
|
|
439
|
+
{
|
|
440
|
+
includeWarnings: z.boolean().optional().describe("Include warnings in the issues list (default true)."),
|
|
441
|
+
limit: z.number().int().positive().optional().describe("Max number of issues to return (default 200, max 1000)."),
|
|
442
|
+
timeoutMs: z.number().int().positive().optional().describe("Socket timeout in ms (default 15000).")
|
|
443
|
+
},
|
|
444
|
+
"Unreal Map Check (UnrealMCP)",
|
|
445
|
+
"Run Unreal Map Check and return structured issues. Fails if PIE is running."
|
|
446
|
+
);
|
|
447
|
+
forwardTool(
|
|
448
|
+
"unreal_mcp_compile_blueprints_all",
|
|
449
|
+
{
|
|
450
|
+
paths: z.array(z.string()).optional().describe('Root content paths to search (default ["/Game"]).'),
|
|
451
|
+
includeWarnings: z.boolean().optional().describe("Include warnings in the per-blueprint messages list (default true)."),
|
|
452
|
+
limit: z.number().int().positive().optional().describe("Max number of blueprints to compile (default 500, max 10000)."),
|
|
453
|
+
timeoutMs: z.number().int().positive().optional().describe("Socket timeout in ms (default 60000).")
|
|
454
|
+
},
|
|
455
|
+
"Unreal Compile All Blueprints (UnrealMCP)",
|
|
456
|
+
"Compile all Blueprints and return a structured list of compile messages. Fails if PIE is running."
|
|
457
|
+
);
|
|
458
|
+
forwardTool(
|
|
459
|
+
"unreal_mcp_save_all",
|
|
460
|
+
{
|
|
461
|
+
timeoutMs: z.number().int().positive().optional().describe("Socket timeout in ms (default 60000).")
|
|
462
|
+
},
|
|
463
|
+
"Unreal Save All (UnrealMCP)",
|
|
464
|
+
"Save all dirty packages (maps + content) in the running Unreal Editor without prompting. Fails if PIE is running."
|
|
465
|
+
);
|
|
466
|
+
forwardTool(
|
|
467
|
+
"unreal_mcp_create_landscape",
|
|
468
|
+
{
|
|
469
|
+
name: z.string().describe("New landscape actor name (must be unique)."),
|
|
470
|
+
componentCountX: z.number().int().positive().optional().describe("Number of components in X (default 8)."),
|
|
471
|
+
componentCountY: z.number().int().positive().optional().describe("Number of components in Y (default 8)."),
|
|
472
|
+
sectionsPerComponent: z.number().int().optional().describe("Sections per component (1 or 2, default 1)."),
|
|
473
|
+
quadsPerSection: z.number().int().positive().optional().describe("Quads per section (default 63)."),
|
|
474
|
+
location: z.array(z.number()).length(3).optional().describe("Center location [X,Y,Z] in cm (default [0,0,0])."),
|
|
475
|
+
rotation: z.array(z.number()).length(3).optional().describe("Rotation [Pitch,Yaw,Roll] in degrees (default [0,0,0])."),
|
|
476
|
+
scale: z.array(z.number()).length(3).optional().describe("Scale [X,Y,Z] (default [100,100,100])."),
|
|
477
|
+
materialPath: z.string().optional().describe('Optional landscape material object path (e.g. "/Game/\u2026/M_Landscape.M_Landscape").'),
|
|
478
|
+
timeoutMs: z.number().int().positive().optional().describe("Socket timeout in ms (default 30000).")
|
|
479
|
+
},
|
|
480
|
+
"Unreal Create Landscape (UnrealMCP)",
|
|
481
|
+
"Create a new Landscape in the current editor level via the UnrealMCP engine plugin. Fails if PIE is running."
|
|
482
|
+
);
|
|
483
|
+
forwardTool(
|
|
484
|
+
"unreal_mcp_list_capabilities",
|
|
485
|
+
{
|
|
486
|
+
timeoutMs: z.number().int().positive().optional().describe("Socket timeout in ms (default 2000).")
|
|
487
|
+
},
|
|
488
|
+
"Unreal MCP: Capabilities",
|
|
489
|
+
"Query the running UnrealMCP plugin for build info, supported commands, and capability flags."
|
|
490
|
+
);
|
|
491
|
+
forwardTool(
|
|
492
|
+
"unreal_mcp_get_command_schema",
|
|
493
|
+
{
|
|
494
|
+
command: z.string().optional().describe('Command type to fetch schema for (e.g. "create_blueprint").'),
|
|
495
|
+
timeoutMs: z.number().int().positive().optional().describe("Socket timeout in ms (default 2000).")
|
|
496
|
+
},
|
|
497
|
+
"Unreal MCP: Command Schema",
|
|
498
|
+
"Fetch per-command schema (required params, aliases, examples) from the running UnrealMCP plugin."
|
|
499
|
+
);
|
|
500
|
+
forwardTool(
|
|
501
|
+
"unreal_mcp_search_blueprint_functions",
|
|
502
|
+
{
|
|
503
|
+
query: z.string().describe('Substring to search for (e.g. "MakeVector").'),
|
|
504
|
+
target: z.string().optional().describe('Optional target class constraint (e.g. "KismetMathLibrary").'),
|
|
505
|
+
limit: z.number().int().positive().optional().describe("Max results (default 25)."),
|
|
506
|
+
timeoutMs: z.number().int().positive().optional().describe("Socket timeout in ms (default 5000).")
|
|
507
|
+
},
|
|
508
|
+
"Unreal MCP: Search Blueprint Functions",
|
|
509
|
+
"Search for Blueprint-callable functions and return candidates (owner class path + signature hints)."
|
|
510
|
+
);
|
|
511
|
+
forwardTool(
|
|
512
|
+
"unreal_mcp_resolve_blueprint_function",
|
|
513
|
+
{
|
|
514
|
+
functionName: z.string().describe('Function name to resolve (e.g. "MakeVector").'),
|
|
515
|
+
target: z.string().optional().describe("Optional target class constraint."),
|
|
516
|
+
timeoutMs: z.number().int().positive().optional().describe("Socket timeout in ms (default 5000).")
|
|
517
|
+
},
|
|
518
|
+
"Unreal MCP: Resolve Blueprint Function",
|
|
519
|
+
"Resolve a Blueprint-callable function to an explicit owner class path usable with add_blueprint_function_node."
|
|
520
|
+
);
|
|
521
|
+
forwardTool(
|
|
522
|
+
"unreal_place_asset_relative",
|
|
523
|
+
{
|
|
524
|
+
objectPath: z.string().describe('Unreal asset object path (e.g. "/Game/MyPack/MyMesh.MyMesh").'),
|
|
525
|
+
name: z.string().optional().describe("Optional actor name (default: derived from asset name)."),
|
|
526
|
+
anchor: z.enum(["selection", "editor_camera", "player", "player_camera", "hit_result", "actor"]).describe("Reference anchor for placement."),
|
|
527
|
+
actorName: z.string().optional().describe('When anchor="actor", the actor name/label to anchor to.'),
|
|
528
|
+
offset: z.array(z.number()).length(3).optional().describe("Offset in anchor local axes [forwardCm, rightCm, upCm] (default [200,0,0])."),
|
|
529
|
+
alignToSurface: z.boolean().optional().describe("Align actor up to hit normal when available (default false)."),
|
|
530
|
+
dropToGround: z.boolean().optional().describe("Raycast down and snap to hit location (default false)."),
|
|
531
|
+
raySource: z.enum(["editor", "pie"]).optional().describe('When anchor="hit_result", which camera to raycast from (default editor).'),
|
|
532
|
+
maxDistance: z.number().positive().optional().describe("Raycast max distance in cm (default 10000)."),
|
|
533
|
+
timeoutMs: z.number().int().positive().optional().describe("Socket timeout in ms (default 8000).")
|
|
534
|
+
},
|
|
535
|
+
"Unreal Place Asset Relative (Context-Aware)",
|
|
536
|
+
"Place an asset relative to selection/camera/player/hit result, with optional surface alignment and drop-to-ground."
|
|
537
|
+
);
|
|
538
|
+
forwardTool(
|
|
539
|
+
"unreal_spawn_actor_relative",
|
|
540
|
+
{
|
|
541
|
+
type: z.string().describe('Actor class/type (e.g. "PointLight", "CameraActor").'),
|
|
542
|
+
name: z.string().describe("Actor name."),
|
|
543
|
+
anchor: z.enum(["selection", "editor_camera", "player", "player_camera", "hit_result", "actor"]).describe("Reference anchor for placement."),
|
|
544
|
+
actorName: z.string().optional().describe('When anchor="actor", the actor name/label to anchor to.'),
|
|
545
|
+
offset: z.array(z.number()).length(3).optional().describe("Offset in anchor local axes [forwardCm, rightCm, upCm] (default [200,0,0])."),
|
|
546
|
+
alignToSurface: z.boolean().optional().describe("Align actor up to hit normal when available (default false)."),
|
|
547
|
+
dropToGround: z.boolean().optional().describe("Raycast down and snap to hit location (default false)."),
|
|
548
|
+
raySource: z.enum(["editor", "pie"]).optional().describe('When anchor="hit_result", which camera to raycast from (default editor).'),
|
|
549
|
+
maxDistance: z.number().positive().optional().describe("Raycast max distance in cm (default 10000)."),
|
|
550
|
+
timeoutMs: z.number().int().positive().optional().describe("Socket timeout in ms (default 8000).")
|
|
551
|
+
},
|
|
552
|
+
"Unreal Spawn Actor Relative (Context-Aware)",
|
|
553
|
+
"Spawn an actor relative to selection/camera/player/hit result, with optional surface alignment and drop-to-ground."
|
|
554
|
+
);
|
|
306
555
|
forwardTool(
|
|
307
556
|
"unreal_mcp_get_actors_in_level",
|
|
308
557
|
{
|
|
@@ -351,6 +600,96 @@ async function main() {
|
|
|
351
600
|
"Unreal Stop Play In Editor",
|
|
352
601
|
"Stop a running Play-In-Editor session via the UnrealMCP engine plugin."
|
|
353
602
|
);
|
|
603
|
+
forwardTool(
|
|
604
|
+
"unreal_editor_launch",
|
|
605
|
+
{
|
|
606
|
+
uprojectPath: z.string().describe("Absolute path to the .uproject file."),
|
|
607
|
+
engineRoot: z.string().optional().describe(
|
|
608
|
+
"Optional Unreal Engine install root. Defaults to ENGINE_ROOT / UE_ENGINE_ROOT, or inferred from EngineAssociation when possible."
|
|
609
|
+
),
|
|
610
|
+
extraArgs: z.array(z.string()).optional().describe("Additional UnrealEditor command-line args (advanced).")
|
|
611
|
+
},
|
|
612
|
+
"Unreal Editor: Launch Project",
|
|
613
|
+
"Launch Unreal Editor for a given .uproject (no auto-restart). If the editor later crashes or becomes unreachable, Flockbay will abort the current agent run and report it in the chat."
|
|
614
|
+
);
|
|
615
|
+
forwardTool(
|
|
616
|
+
"unreal_headless_screenshot",
|
|
617
|
+
{
|
|
618
|
+
uprojectPath: z.string().describe("Absolute path to the .uproject file."),
|
|
619
|
+
engineRoot: z.string().optional().describe(
|
|
620
|
+
"Unreal Engine install root (e.g. /Users/Shared/Epic Games/UE_5.x). Defaults to UE_ENGINE_ROOT / ENGINE_ROOT env vars."
|
|
621
|
+
),
|
|
622
|
+
mode: z.enum(["auto", "choose", "sandbox"]).optional().describe("Screenshot mode: auto (project default map), choose (explicit map), sandbox (Flockbay seed sandbox)."),
|
|
623
|
+
map: z.string().optional().describe('Map for choose/auto override (e.g. "/Game/Maps/MyMap" or "/abs/.../Content/Maps/MyMap.umap").'),
|
|
624
|
+
fast: z.boolean().optional().describe("Enable fast screenshot mode (-FlockbayScreenshotFast)."),
|
|
625
|
+
focus: z.string().optional().describe('Focus point "x;y;z" (or "x,y,z"), forwarded as -FlockbayScreenshotFocus=...'),
|
|
626
|
+
timeoutMs: z.number().int().positive().optional().describe("Timeout in ms (default 600000).")
|
|
627
|
+
},
|
|
628
|
+
"Unreal Headless Screenshot",
|
|
629
|
+
"Run the project-local headless screenshots script (Tools/run-headless-screenshots.mjs) and upload the resulting views to the current session."
|
|
630
|
+
);
|
|
631
|
+
forwardTool(
|
|
632
|
+
"unreal_fast_preview",
|
|
633
|
+
{
|
|
634
|
+
uprojectPath: z.string().describe("Absolute path to the .uproject file."),
|
|
635
|
+
engineRoot: z.string().optional().describe(
|
|
636
|
+
"Unreal Engine install root (e.g. /Users/Shared/Epic Games/UE_5.x). Defaults to UE_ENGINE_ROOT / ENGINE_ROOT env vars."
|
|
637
|
+
),
|
|
638
|
+
map: z.string().optional().describe(
|
|
639
|
+
'Optional explicit map to run (e.g. "/Game/Maps/MyMap" or "/abs/.../Content/Maps/MyMap.umap"). Default: use the project default map (Config/DefaultEngine.ini).'
|
|
640
|
+
),
|
|
641
|
+
resX: z.number().int().positive().optional().describe("Output resolution width (default 800)."),
|
|
642
|
+
resY: z.number().int().positive().optional().describe("Output resolution height (default 450)."),
|
|
643
|
+
fast: z.boolean().optional().describe("Enable fast screenshot mode (-FlockbayScreenshotFast). Default true."),
|
|
644
|
+
focus: z.string().optional().describe('Focus point "x;y;z" (or "x,y,z"), forwarded as -FlockbayScreenshotFocus=...'),
|
|
645
|
+
extraArgs: z.array(z.string()).optional().describe("Additional Unreal command-line args (advanced)."),
|
|
646
|
+
timeoutMs: z.number().int().positive().optional().describe("Timeout in ms (default 600000)."),
|
|
647
|
+
expectedViews: z.array(z.string()).optional().describe('If provided, fail unless these view IDs exist (e.g. ["spawn_overview"]).'),
|
|
648
|
+
mode: z.enum(["auto", "preview_only", "bake_and_preview"]).optional().describe(
|
|
649
|
+
"auto=try preview, then bake+preview if preview fails. preview_only=never bake. bake_and_preview=always bake first. Default auto."
|
|
650
|
+
),
|
|
651
|
+
bakeTimeoutMs: z.number().int().positive().optional().describe("Timeout in ms for bake step (default 1800000)."),
|
|
652
|
+
bakeMap: z.string().optional().describe("Map asset path used for baking. Required if running bake without a module config."),
|
|
653
|
+
configRelPath: z.string().optional().describe(
|
|
654
|
+
"Optional module config path relative to project root (e.g. Config/GameConfig.json). Required for bake/perf-budget module features."
|
|
655
|
+
),
|
|
656
|
+
reuseIfUnchanged: z.boolean().optional().describe(
|
|
657
|
+
"If inputs match the last successful run, reuse prior artifacts (upload existing screenshots) instead of rerunning Unreal. Default true."
|
|
658
|
+
),
|
|
659
|
+
requireScatterBudget: z.boolean().optional().describe("Fail unless world.scatterBudget exists (prelaunch safety gate). Default false."),
|
|
660
|
+
baselineKey: z.string().optional().describe(
|
|
661
|
+
'Baseline key for compare/pin (stored under .flockbay/baselines/fast-preview/<baselineKey>). Default "default".'
|
|
662
|
+
),
|
|
663
|
+
baselineAction: z.enum(["none", "compare", "set"]).optional().describe("compare=report differences vs baseline. set=overwrite baseline with this run. Default none."),
|
|
664
|
+
failOnBaselineDiff: z.boolean().optional().describe("When baselineAction=compare, fail if screenshots differ from baseline. Default false."),
|
|
665
|
+
applyAssetKits: z.boolean().optional().describe("Apply .flockbay asset kit adapters (TileMeshLibrary/ScatterCategoryRegistry/LayoutPropRegistry) to Config/DefaultGame.ini before preview. Default false (non-mutating)."),
|
|
666
|
+
kitIds: z.array(z.string()).optional().describe("When applyAssetKits=true, limit to these kitIds. Default: all kits in .flockbay/assets/kits.json."),
|
|
667
|
+
contentLint: z.boolean().optional().describe("Fail-hard if config/DefaultGame.ini reference missing /Game assets on disk. Default false."),
|
|
668
|
+
previewDurationBudgetMs: z.number().int().positive().optional().describe("Fail-hard if the final preview run exceeds this duration (ms). Optional."),
|
|
669
|
+
perfBudgetLint: z.boolean().optional().describe("Run Tools/run-perf-budget-lint.mjs (scatter budgets + perf budgets file sanity). Module-only (requires configRelPath). Default false."),
|
|
670
|
+
perfCapture: z.boolean().optional().describe("Run headless perf capture (memreport + frame stats), then validate against Config/PerfBudgets.json. Default false."),
|
|
671
|
+
perfBudgetsRelPath: z.string().optional().describe("Perf budgets path relative to project root (default Config/PerfBudgets.json)."),
|
|
672
|
+
perfBaselineKey: z.string().optional().describe('Perf baseline key stored under .flockbay/baselines/perf/<perfBaselineKey>. Default "default".'),
|
|
673
|
+
perfBaselineAction: z.enum(["none", "compare", "set"]).optional().describe(
|
|
674
|
+
"none=skip perf baseline. compare=diff vs baseline report. set=overwrite baseline report. Default compare when perfCapture=true; otherwise none."
|
|
675
|
+
),
|
|
676
|
+
perfFailOnBaselineDiff: z.boolean().optional().describe("When perfBaselineAction=compare, fail if perf metrics differ from baseline. Default false."),
|
|
677
|
+
perfCaptureTimeoutMs: z.number().int().positive().optional().describe("Timeout in ms for perf capture (default timeoutMs).")
|
|
678
|
+
},
|
|
679
|
+
"Unreal Fast Preview (Evidence First)",
|
|
680
|
+
"Run a fast headless Unreal preview and attach stable screenshot evidence + a run manifest to the session. Includes optional bake planning, caching, and baseline comparisons."
|
|
681
|
+
);
|
|
682
|
+
forwardTool(
|
|
683
|
+
"unreal_smoke_test",
|
|
684
|
+
{
|
|
685
|
+
uprojectPath: z.string().describe("Absolute path to the .uproject file."),
|
|
686
|
+
stabilizeMs: z.number().int().positive().optional().describe("Time to wait before taking screenshot (default 1500)."),
|
|
687
|
+
timeoutMs: z.number().int().positive().optional().describe("Socket timeout in ms for each step (default 30000)."),
|
|
688
|
+
stopIfPlaying: z.boolean().optional().describe("If PIE is already running, stop it first (default true).")
|
|
689
|
+
},
|
|
690
|
+
"Unreal Smoke Test (PIE + Screenshot Proof)",
|
|
691
|
+
"Starts PIE (windowed), captures a screenshot, stops PIE, and uploads the screenshot to the current session."
|
|
692
|
+
);
|
|
354
693
|
forwardTool(
|
|
355
694
|
"unreal_mechanic_run",
|
|
356
695
|
{
|