@satelliteoflove/godot-mcp 3.6.1 → 3.7.1
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/README.md +1 -0
- package/addon/commands/screenshot_commands.gd +32 -49
- package/addon/game_bridge/mcp_game_bridge.gd +194 -27
- package/addon/game_bridge/onscreen.gd +50 -0
- package/addon/plugin.cfg +1 -1
- package/dist/__tests__/tools/runtime-state.test.js +25 -0
- package/dist/__tests__/tools/runtime-state.test.js.map +1 -1
- package/dist/tools/runtime-state.d.ts +2 -0
- package/dist/tools/runtime-state.d.ts.map +1 -1
- package/dist/tools/runtime-state.js +14 -2
- package/dist/tools/runtime-state.js.map +1 -1
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -44,6 +44,7 @@ They don't overlap much, and they don't conflict. Run them side by side for the
|
|
|
44
44
|
|
|
45
45
|
- [Installation Guide](INSTALL.md) - MCP client configs for Claude Desktop, Claude Code, VSCode/Copilot, and more
|
|
46
46
|
- [Claude Code Setup Guide](../docs/claude-code-setup.md) - CLAUDE.md template for Godot projects
|
|
47
|
+
- [Runtime State Guide](../docs/runtime-state-guide.md) - Expose game state to agents via the `mcp_watch` group and `_mcp_state()`
|
|
47
48
|
- [Tools Reference](../docs/tools/README.md) - All 12 tools with full API docs
|
|
48
49
|
- [Resources Reference](../docs/resources.md) - MCP resources for reading project data
|
|
49
50
|
- [Contributing](../CONTRIBUTING.md) - Dev setup, adding tools, release process
|
|
@@ -68,12 +68,13 @@ func capture_editor_screenshot(params: Dictionary) -> Dictionary:
|
|
|
68
68
|
|
|
69
69
|
var viewport: SubViewport = null
|
|
70
70
|
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
71
|
+
match viewport_type:
|
|
72
|
+
"2d":
|
|
73
|
+
viewport = EditorInterface.get_editor_viewport_2d()
|
|
74
|
+
"3d":
|
|
75
|
+
viewport = EditorInterface.get_editor_viewport_3d(0)
|
|
76
|
+
_:
|
|
77
|
+
viewport = _find_active_viewport()
|
|
77
78
|
|
|
78
79
|
if viewport == null:
|
|
79
80
|
return _error("NO_VIEWPORT", "Could not find editor viewport")
|
|
@@ -101,47 +102,29 @@ func _process_and_encode_image(image: Image, max_width: int, quality: float = 0.
|
|
|
101
102
|
})
|
|
102
103
|
|
|
103
104
|
|
|
105
|
+
# Returns the SubViewport of whichever main-screen tab (2D or 3D) is currently
|
|
106
|
+
# active. EditorInterface always hands back both viewports regardless of the
|
|
107
|
+
# active tab, so we pick the one whose editor panel is actually on screen. When
|
|
108
|
+
# neither is active (e.g. the Script or AssetLib tab is selected) we fall back to
|
|
109
|
+
# the 2D canvas so the call still returns an image rather than erroring.
|
|
104
110
|
func _find_active_viewport() -> SubViewport:
|
|
105
|
-
var
|
|
106
|
-
if
|
|
107
|
-
return
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
return
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
if
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
# This prevents returning the wrong SubViewport when multiple exist.
|
|
126
|
-
var matches_hint := true
|
|
127
|
-
if not hint.is_empty():
|
|
128
|
-
matches_hint = false
|
|
129
|
-
var ancestor := node.get_parent()
|
|
130
|
-
while ancestor != null:
|
|
131
|
-
if ancestor.name.containsn(hint):
|
|
132
|
-
matches_hint = true
|
|
133
|
-
break
|
|
134
|
-
ancestor = ancestor.get_parent()
|
|
135
|
-
|
|
136
|
-
if matches_hint:
|
|
137
|
-
var container := node as SubViewportContainer
|
|
138
|
-
for child in container.get_children():
|
|
139
|
-
if child is SubViewport:
|
|
140
|
-
return child as SubViewport
|
|
141
|
-
|
|
142
|
-
for child in node.get_children():
|
|
143
|
-
var result := _find_viewport_in_tree(child, hint)
|
|
144
|
-
if result:
|
|
145
|
-
return result
|
|
146
|
-
|
|
147
|
-
return null
|
|
111
|
+
var v2d := EditorInterface.get_editor_viewport_2d()
|
|
112
|
+
if v2d and _viewport_on_active_tab(v2d):
|
|
113
|
+
return v2d
|
|
114
|
+
|
|
115
|
+
var v3d := EditorInterface.get_editor_viewport_3d(0)
|
|
116
|
+
if v3d and _viewport_on_active_tab(v3d):
|
|
117
|
+
return v3d
|
|
118
|
+
|
|
119
|
+
return v2d if v2d else v3d
|
|
120
|
+
|
|
121
|
+
|
|
122
|
+
# A main-screen editor panel (and the viewport nested inside it) is hidden when
|
|
123
|
+
# its tab is not the selected one. is_visible_in_tree() on the viewport's
|
|
124
|
+
# container is true only when every ancestor is visible, i.e. this is the active
|
|
125
|
+
# tab.
|
|
126
|
+
func _viewport_on_active_tab(viewport: SubViewport) -> bool:
|
|
127
|
+
var container := viewport.get_parent()
|
|
128
|
+
if container is CanvasItem:
|
|
129
|
+
return (container as CanvasItem).is_visible_in_tree()
|
|
130
|
+
return true
|
|
@@ -3,6 +3,7 @@ class_name MCPGameBridge
|
|
|
3
3
|
|
|
4
4
|
const DEFAULT_MAX_WIDTH := 1024
|
|
5
5
|
const DEFAULT_JPEG_QUALITY := 0.75
|
|
6
|
+
const Onscreen := preload("onscreen.gd")
|
|
6
7
|
|
|
7
8
|
var _logger: _MCPGameLogger
|
|
8
9
|
var _profiler: MCPFrameProfiler
|
|
@@ -10,6 +11,13 @@ var _sampler: MCPRuntimeStateSampler
|
|
|
10
11
|
|
|
11
12
|
|
|
12
13
|
func _ready() -> void:
|
|
14
|
+
# The bridge must keep processing while the scene tree is paused. Input
|
|
15
|
+
# sequences are driven from _process, so without this a press that toggles
|
|
16
|
+
# `paused = true` freezes the runner mid-sequence: the paired release never
|
|
17
|
+
# fires and the editor-side wait times out (~30s) — pause menus, a primary
|
|
18
|
+
# injection target, become undrivable. The bridge answers to the debugger,
|
|
19
|
+
# not the game's pause state. Children (the sampler) inherit this mode.
|
|
20
|
+
process_mode = Node.PROCESS_MODE_ALWAYS
|
|
13
21
|
if not EngineDebugger.is_active():
|
|
14
22
|
return
|
|
15
23
|
_logger = _MCPGameLogger.new()
|
|
@@ -23,6 +31,9 @@ func _ready() -> void:
|
|
|
23
31
|
|
|
24
32
|
|
|
25
33
|
func _exit_tree() -> void:
|
|
34
|
+
# Guaranteed cleanup: never leave an action latched when the bridge node
|
|
35
|
+
# leaves the tree (game shutdown / scene change). Safe if nothing is held.
|
|
36
|
+
_release_held_actions()
|
|
26
37
|
if EngineDebugger.is_active():
|
|
27
38
|
EngineDebugger.unregister_message_capture("godot_mcp")
|
|
28
39
|
if _profiler:
|
|
@@ -42,7 +53,10 @@ func _process(_delta: float) -> void:
|
|
|
42
53
|
input_event.pressed = seq_event.is_press
|
|
43
54
|
input_event.strength = 1.0 if seq_event.is_press else 0.0
|
|
44
55
|
Input.parse_input_event(input_event)
|
|
45
|
-
if
|
|
56
|
+
if seq_event.is_press:
|
|
57
|
+
_held_actions[seq_event.action] = true
|
|
58
|
+
else:
|
|
59
|
+
_held_actions.erase(seq_event.action)
|
|
46
60
|
_actions_completed += 1
|
|
47
61
|
|
|
48
62
|
if _sequence_events.is_empty():
|
|
@@ -59,6 +73,29 @@ var _sequence_start_time: int = 0
|
|
|
59
73
|
var _sequence_running: bool = false
|
|
60
74
|
var _actions_completed: int = 0
|
|
61
75
|
var _actions_total: int = 0
|
|
76
|
+
# Actions whose press has been injected but whose paired release has not yet
|
|
77
|
+
# fired. Used to guarantee a release even if the queue is cleared mid-flight
|
|
78
|
+
# (new sequence) or the node leaves the tree — otherwise the dropped release
|
|
79
|
+
# latches the action "pressed" in the Input singleton (the stuck-held bug).
|
|
80
|
+
var _held_actions: Dictionary = {}
|
|
81
|
+
|
|
82
|
+
|
|
83
|
+
# Release any action still held from an interrupted sequence. A release here is a
|
|
84
|
+
# guaranteed cleanup, never a queued step that a clear could drop. Safe to call
|
|
85
|
+
# when nothing is held.
|
|
86
|
+
func _release_held_actions() -> void:
|
|
87
|
+
if _held_actions.is_empty():
|
|
88
|
+
return
|
|
89
|
+
for action in _held_actions.keys():
|
|
90
|
+
var release := InputEventAction.new()
|
|
91
|
+
release.action = action
|
|
92
|
+
release.pressed = false
|
|
93
|
+
release.strength = 0.0
|
|
94
|
+
Input.parse_input_event(release)
|
|
95
|
+
# Flush so the release takes effect immediately — _exit_tree may not get
|
|
96
|
+
# another frame, and a cleanup should be deterministic, not deferred.
|
|
97
|
+
Input.flush_buffered_events()
|
|
98
|
+
_held_actions.clear()
|
|
62
99
|
|
|
63
100
|
|
|
64
101
|
func _on_debugger_message(message: String, data: Array) -> bool:
|
|
@@ -414,11 +451,11 @@ func _handle_get_runtime_state(data: Array) -> void:
|
|
|
414
451
|
var include_fields: Array = params.get("include", [])
|
|
415
452
|
max_nodes = clampi(max_nodes, 1, 200)
|
|
416
453
|
|
|
417
|
-
# Resolve camera for
|
|
454
|
+
# Resolve a 2D camera for the optional camera entity. On-screen checks no
|
|
455
|
+
# longer use this — they resolve the camera per-node from the node's own
|
|
456
|
+
# viewport (see Onscreen.compute), which is what makes SubViewport cameras
|
|
457
|
+
# work correctly.
|
|
418
458
|
var camera_2d: Camera2D = _find_camera_2d()
|
|
419
|
-
var camera_viewport_rect := Rect2()
|
|
420
|
-
if camera_2d:
|
|
421
|
-
camera_viewport_rect = camera_2d.get_viewport_rect()
|
|
422
459
|
|
|
423
460
|
# Determine which selection tier to use
|
|
424
461
|
var actual_selection: String = select_mode
|
|
@@ -430,23 +467,49 @@ func _handle_get_runtime_state(data: Array) -> void:
|
|
|
430
467
|
else:
|
|
431
468
|
actual_selection = "fallback"
|
|
432
469
|
|
|
433
|
-
# Collect entities
|
|
470
|
+
# Collect entities (skipped entirely when select="none" — explicit paths only)
|
|
434
471
|
var entities: Array = []
|
|
435
|
-
|
|
436
|
-
|
|
437
|
-
|
|
472
|
+
if actual_selection != "none":
|
|
473
|
+
_collect_runtime_state(scene_root, scene_root, actual_selection, group_name,
|
|
474
|
+
name_filter, type_filter, include_fields,
|
|
475
|
+
max_nodes, entities)
|
|
476
|
+
|
|
477
|
+
# Explicit paths: include nodes the scene walk cannot reach (e.g. autoload
|
|
478
|
+
# singletons under /root). For each, return _mcp_state() if present, else a
|
|
479
|
+
# snapshot of the node's script variables (scalars/arrays, capped). Deduped
|
|
480
|
+
# against tier-selected entities and each other by absolute path.
|
|
481
|
+
var explicit_paths: Array = params.get("paths", [])
|
|
482
|
+
var unresolved_paths: Array = []
|
|
483
|
+
if not explicit_paths.is_empty():
|
|
484
|
+
var seen_paths := {}
|
|
485
|
+
for e in entities:
|
|
486
|
+
seen_paths[str(e.get("path", ""))] = true
|
|
487
|
+
for p in explicit_paths:
|
|
488
|
+
var pstr: String = str(p)
|
|
489
|
+
var n := _resolve_node_abs(pstr)
|
|
490
|
+
if n == null:
|
|
491
|
+
unresolved_paths.append(pstr)
|
|
492
|
+
continue
|
|
493
|
+
var abs_path := str(n.get_path())
|
|
494
|
+
if seen_paths.has(abs_path):
|
|
495
|
+
continue
|
|
496
|
+
seen_paths[abs_path] = true
|
|
497
|
+
var ent := _extract_node_state(n, scene_root, include_fields, true)
|
|
498
|
+
ent["path"] = abs_path
|
|
499
|
+
entities.append(ent)
|
|
438
500
|
|
|
439
501
|
# Extract camera entity separately if present
|
|
440
502
|
var camera_entity = null
|
|
441
|
-
|
|
442
|
-
if cam_node:
|
|
503
|
+
if camera_2d:
|
|
443
504
|
camera_entity = {
|
|
444
505
|
"type": "Camera2D",
|
|
445
|
-
"pos": {"x": snapped(
|
|
446
|
-
"zoom": {"x": snapped(
|
|
506
|
+
"pos": {"x": snapped(camera_2d.global_position.x, 0.01), "y": snapped(camera_2d.global_position.y, 0.01)},
|
|
507
|
+
"zoom": {"x": snapped(camera_2d.zoom.x, 0.01), "y": snapped(camera_2d.zoom.y, 0.01)},
|
|
447
508
|
"camera": true,
|
|
448
509
|
}
|
|
449
510
|
|
|
511
|
+
var autoloads := _list_autoload_paths(scene_root)
|
|
512
|
+
|
|
450
513
|
var hint := ""
|
|
451
514
|
if actual_selection == "fallback":
|
|
452
515
|
hint = ("No nodes found in group '%s' and no _mcp_state() methods detected. " +
|
|
@@ -455,6 +518,11 @@ func _handle_get_runtime_state(data: Array) -> void:
|
|
|
455
518
|
"In _mcp_state(), include both live runtime values (position, health, score) " +
|
|
456
519
|
"AND static definition context (puzzle clues, level config, item data) — " +
|
|
457
520
|
"an agent needs both to understand and verify game state.") % [group_name, group_name]
|
|
521
|
+
if not autoloads.is_empty():
|
|
522
|
+
hint += (" Global game state often lives in autoload singletons (see " +
|
|
523
|
+
"available_autoloads), which this scene walk does not reach — read them " +
|
|
524
|
+
"with select=\"none\" and paths: [...]; each returns _mcp_state() if " +
|
|
525
|
+
"present, else a snapshot of its script variables.")
|
|
458
526
|
|
|
459
527
|
var result: Dictionary = {
|
|
460
528
|
"scene": scene_root.scene_file_path,
|
|
@@ -462,10 +530,14 @@ func _handle_get_runtime_state(data: Array) -> void:
|
|
|
462
530
|
"entity_count": entities.size(),
|
|
463
531
|
"entities": entities,
|
|
464
532
|
}
|
|
533
|
+
if not autoloads.is_empty():
|
|
534
|
+
result["available_autoloads"] = autoloads
|
|
465
535
|
if camera_entity:
|
|
466
536
|
result["camera"] = camera_entity
|
|
467
537
|
if not hint.is_empty():
|
|
468
538
|
result["hint"] = hint
|
|
539
|
+
if not unresolved_paths.is_empty():
|
|
540
|
+
result["unresolved_paths"] = unresolved_paths
|
|
469
541
|
|
|
470
542
|
EngineDebugger.send_message("godot_mcp:game_response", ["get_runtime_state", result])
|
|
471
543
|
|
|
@@ -488,7 +560,6 @@ func _has_mcp_state_nodes(node: Node) -> bool:
|
|
|
488
560
|
|
|
489
561
|
func _collect_runtime_state(node: Node, scene_root: Node, selection: String, group_name: String,
|
|
490
562
|
name_filter: String, type_filter: String, include_fields: Array,
|
|
491
|
-
camera_2d: Camera2D, viewport_rect: Rect2,
|
|
492
563
|
max_nodes: int, results: Array) -> void:
|
|
493
564
|
if results.size() >= max_nodes:
|
|
494
565
|
return
|
|
@@ -509,7 +580,7 @@ func _collect_runtime_state(node: Node, scene_root: Node, selection: String, gro
|
|
|
509
580
|
include_node = false
|
|
510
581
|
|
|
511
582
|
if include_node:
|
|
512
|
-
var entity := _extract_node_state(node, scene_root, include_fields
|
|
583
|
+
var entity := _extract_node_state(node, scene_root, include_fields)
|
|
513
584
|
if entity != null:
|
|
514
585
|
results.append(entity)
|
|
515
586
|
|
|
@@ -517,7 +588,7 @@ func _collect_runtime_state(node: Node, scene_root: Node, selection: String, gro
|
|
|
517
588
|
if results.size() >= max_nodes:
|
|
518
589
|
return
|
|
519
590
|
_collect_runtime_state(child, scene_root, selection, group_name,
|
|
520
|
-
name_filter, type_filter, include_fields,
|
|
591
|
+
name_filter, type_filter, include_fields,
|
|
521
592
|
max_nodes, results)
|
|
522
593
|
|
|
523
594
|
|
|
@@ -529,7 +600,7 @@ func _collect_runtime_state(node: Node, scene_root: Node, selection: String, gro
|
|
|
529
600
|
# Error handling: _mcp_state() runtime errors are non-fatal in GDScript (Godot prints them
|
|
530
601
|
# and the call returns null); the `is Dictionary` check below handles that silently.
|
|
531
602
|
func _extract_node_state(node: Node, scene_root: Node, include_fields: Array,
|
|
532
|
-
|
|
603
|
+
allow_var_snapshot: bool = false) -> Dictionary:
|
|
533
604
|
var want := include_fields.is_empty()
|
|
534
605
|
var want_transform := want or include_fields.has("transform")
|
|
535
606
|
var want_velocity := want or include_fields.has("velocity")
|
|
@@ -596,16 +667,25 @@ func _extract_node_state(node: Node, scene_root: Node, include_fields: Array,
|
|
|
596
667
|
entity["anim"] = asp.animation
|
|
597
668
|
entity["anim_frame"] = asp.frame
|
|
598
669
|
|
|
599
|
-
if want_onscreen
|
|
600
|
-
|
|
601
|
-
|
|
602
|
-
|
|
603
|
-
|
|
604
|
-
|
|
605
|
-
|
|
606
|
-
|
|
607
|
-
|
|
608
|
-
|
|
670
|
+
if want_onscreen:
|
|
671
|
+
# Resolve the camera from the node's own viewport (handles SubViewport
|
|
672
|
+
# cameras) and use the correct geometry per dimension — 3D frustum, 2D
|
|
673
|
+
# visible world rect. Returns null when undeterminable; omit the field.
|
|
674
|
+
var onscreen = Onscreen.compute(node)
|
|
675
|
+
if onscreen != null:
|
|
676
|
+
entity["onscreen"] = onscreen
|
|
677
|
+
|
|
678
|
+
if want_state:
|
|
679
|
+
if node.has_method("_mcp_state"):
|
|
680
|
+
var raw_state = node._mcp_state()
|
|
681
|
+
if raw_state is Dictionary:
|
|
682
|
+
var serialized := _serialize_mcp_state(raw_state)
|
|
683
|
+
if not serialized.is_empty():
|
|
684
|
+
entity["state"] = serialized
|
|
685
|
+
elif allow_var_snapshot:
|
|
686
|
+
var snap := _snapshot_script_vars(node)
|
|
687
|
+
if not snap.is_empty():
|
|
688
|
+
entity["state"] = snap
|
|
609
689
|
|
|
610
690
|
return entity
|
|
611
691
|
|
|
@@ -640,6 +720,89 @@ func _serialize_mcp_state(state: Dictionary) -> Dictionary:
|
|
|
640
720
|
return result
|
|
641
721
|
|
|
642
722
|
|
|
723
|
+
# Snapshot a node's own script variables (PROPERTY_USAGE_SCRIPT_VARIABLE) as
|
|
724
|
+
# JSON-able scalars/arrays. Used for explicitly-requested nodes (e.g. autoload
|
|
725
|
+
# singletons) that do not implement _mcp_state(). Private vars (leading "_") are
|
|
726
|
+
# skipped; dictionaries/objects/non-serializable values are dropped; total size
|
|
727
|
+
# is capped like _serialize_mcp_state.
|
|
728
|
+
func _snapshot_script_vars(node: Node) -> Dictionary:
|
|
729
|
+
var result: Dictionary = {}
|
|
730
|
+
for prop in node.get_property_list():
|
|
731
|
+
if not (int(prop.get("usage", 0)) & PROPERTY_USAGE_SCRIPT_VARIABLE):
|
|
732
|
+
continue
|
|
733
|
+
var key: String = str(prop.get("name", ""))
|
|
734
|
+
if key.is_empty() or key.begins_with("_"):
|
|
735
|
+
continue
|
|
736
|
+
var serializable = _to_serializable_scalar(node.get(key))
|
|
737
|
+
if serializable == null:
|
|
738
|
+
continue
|
|
739
|
+
result[key] = serializable
|
|
740
|
+
if JSON.stringify(result).length() > _MCP_STATE_MAX_BYTES:
|
|
741
|
+
result.erase(key)
|
|
742
|
+
result["_truncated"] = true
|
|
743
|
+
break
|
|
744
|
+
return result
|
|
745
|
+
|
|
746
|
+
|
|
747
|
+
# Convert a value to a JSON-able scalar (or array of scalars). Returns null to
|
|
748
|
+
# signal "skip" — dictionaries, objects, vectors, and arrays containing any of
|
|
749
|
+
# those are intentionally dropped to keep the snapshot small and safe.
|
|
750
|
+
func _to_serializable_scalar(val) -> Variant:
|
|
751
|
+
match typeof(val):
|
|
752
|
+
TYPE_BOOL, TYPE_STRING:
|
|
753
|
+
return val
|
|
754
|
+
TYPE_STRING_NAME:
|
|
755
|
+
return str(val)
|
|
756
|
+
TYPE_INT:
|
|
757
|
+
return int(val)
|
|
758
|
+
TYPE_FLOAT:
|
|
759
|
+
return snapped(float(val), 0.01)
|
|
760
|
+
TYPE_ARRAY:
|
|
761
|
+
var arr: Array = []
|
|
762
|
+
for e in val:
|
|
763
|
+
var s = _to_serializable_scalar(e)
|
|
764
|
+
if s == null:
|
|
765
|
+
return null
|
|
766
|
+
arr.append(s)
|
|
767
|
+
return arr
|
|
768
|
+
return null
|
|
769
|
+
|
|
770
|
+
|
|
771
|
+
# Resolve an absolute ("/root/Name/...") or scene-relative node path. Unlike the
|
|
772
|
+
# digest tree walk (rooted at current_scene), this reaches autoload singletons
|
|
773
|
+
# and anything else under the SceneTree root.
|
|
774
|
+
func _resolve_node_abs(path: String) -> Node:
|
|
775
|
+
var tree := get_tree()
|
|
776
|
+
if tree == null:
|
|
777
|
+
return null
|
|
778
|
+
var root := tree.root
|
|
779
|
+
if root == null:
|
|
780
|
+
return null
|
|
781
|
+
if path == "/root" or path == "/root/":
|
|
782
|
+
return root
|
|
783
|
+
if path.begins_with("/root/"):
|
|
784
|
+
return root.get_node_or_null(path.substr(6))
|
|
785
|
+
if path.begins_with("/"):
|
|
786
|
+
return root.get_node_or_null(path.substr(1))
|
|
787
|
+
var scene_root := tree.current_scene
|
|
788
|
+
return scene_root.get_node_or_null(path) if scene_root else null
|
|
789
|
+
|
|
790
|
+
|
|
791
|
+
# List autoload singleton paths (direct children of /root, excluding the current
|
|
792
|
+
# scene and this bridge node). Used to guide callers to global state the scene
|
|
793
|
+
# walk cannot reach.
|
|
794
|
+
func _list_autoload_paths(scene_root: Node) -> Array:
|
|
795
|
+
var out: Array = []
|
|
796
|
+
var tree := get_tree()
|
|
797
|
+
if tree == null or tree.root == null:
|
|
798
|
+
return out
|
|
799
|
+
for child in tree.root.get_children():
|
|
800
|
+
if child == scene_root or child == self:
|
|
801
|
+
continue
|
|
802
|
+
out.append("/root/" + str(child.name))
|
|
803
|
+
return out
|
|
804
|
+
|
|
805
|
+
|
|
643
806
|
func _find_camera_2d() -> Camera2D:
|
|
644
807
|
var viewport := get_viewport()
|
|
645
808
|
if viewport == null:
|
|
@@ -763,6 +926,10 @@ func _handle_execute_input_sequence(data: Array) -> void:
|
|
|
763
926
|
}])
|
|
764
927
|
return
|
|
765
928
|
|
|
929
|
+
# Release anything still held from a prior, interrupted sequence BEFORE
|
|
930
|
+
# clearing the queue — otherwise that sequence's unfired releases are dropped
|
|
931
|
+
# and its actions stay latched (stuck-held bug).
|
|
932
|
+
_release_held_actions()
|
|
766
933
|
_sequence_events.clear()
|
|
767
934
|
_actions_completed = 0
|
|
768
935
|
_actions_total = inputs.size()
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
extends RefCounted
|
|
2
|
+
|
|
3
|
+
## On-screen / in-frustum detection for the runtime-state digest.
|
|
4
|
+
##
|
|
5
|
+
## Each entity in a `digest` can carry an `onscreen` bool. Getting that geometry
|
|
6
|
+
## right across 2D, 3D and SubViewport cameras is the fiddly part, so it lives
|
|
7
|
+
## here as pure, side-effect-free static helpers shared by MCPGameBridge and the
|
|
8
|
+
## headless test (test/onscreen_headless_test.gd).
|
|
9
|
+
##
|
|
10
|
+
## The camera is always resolved from the NODE'S OWN viewport, so a node that
|
|
11
|
+
## lives inside a SubViewport is tested against that SubViewport's camera rather
|
|
12
|
+
## than the main window camera.
|
|
13
|
+
|
|
14
|
+
# Visible world-space Rect2 for a 2D viewport. Maps the viewport's screen rect
|
|
15
|
+
# back through the inverse canvas transform, so camera offset, zoom, position
|
|
16
|
+
# and drag margins are all accounted for. (Under a rotated camera this is the
|
|
17
|
+
# axis-aligned bounds of the visible region, which is the right approximation
|
|
18
|
+
# for a coarse on-screen flag.)
|
|
19
|
+
static func visible_world_rect_2d(viewport: Viewport) -> Rect2:
|
|
20
|
+
return viewport.get_canvas_transform().affine_inverse() * viewport.get_visible_rect()
|
|
21
|
+
|
|
22
|
+
# Whether `node` is on screen. Returns a bool when it can be decided, or null
|
|
23
|
+
# when it cannot (no camera of the matching dimension, or the node is neither
|
|
24
|
+
# 2D nor 3D) so the caller can omit the field rather than report a guess.
|
|
25
|
+
static func compute(node: Node) -> Variant:
|
|
26
|
+
var viewport := node.get_viewport()
|
|
27
|
+
if viewport == null:
|
|
28
|
+
return null
|
|
29
|
+
|
|
30
|
+
# 3D: the engine's frustum test is authoritative (handles perspective and
|
|
31
|
+
# orthographic projections plus the near/far planes).
|
|
32
|
+
if node is Node3D:
|
|
33
|
+
var cam3d := viewport.get_camera_3d()
|
|
34
|
+
if cam3d == null or not cam3d.is_inside_tree():
|
|
35
|
+
return null
|
|
36
|
+
return cam3d.is_position_in_frustum((node as Node3D).global_position)
|
|
37
|
+
|
|
38
|
+
# 2D: an opted-in notifier is the most accurate signal when the game has one.
|
|
39
|
+
if node is VisibleOnScreenNotifier2D:
|
|
40
|
+
return (node as VisibleOnScreenNotifier2D).is_on_screen()
|
|
41
|
+
|
|
42
|
+
# 2D fallback: test the world position against the camera's visible world
|
|
43
|
+
# rect. Requires an active Camera2D; without one "on screen" is ambiguous so
|
|
44
|
+
# we omit the field.
|
|
45
|
+
if node is Node2D:
|
|
46
|
+
if viewport.get_camera_2d() == null:
|
|
47
|
+
return null
|
|
48
|
+
return visible_world_rect_2d(viewport).has_point((node as Node2D).global_position)
|
|
49
|
+
|
|
50
|
+
return null
|
package/addon/plugin.cfg
CHANGED
|
@@ -16,6 +16,7 @@ describe('runtimeState tool', () => {
|
|
|
16
16
|
action: 'digest',
|
|
17
17
|
select: 'group',
|
|
18
18
|
group: 'my_watch',
|
|
19
|
+
paths: ['/root/GameState', '/root/SimulationClock'],
|
|
19
20
|
name: 'Player*',
|
|
20
21
|
type: 'CharacterBody2D',
|
|
21
22
|
max_nodes: 10,
|
|
@@ -25,6 +26,9 @@ describe('runtimeState tool', () => {
|
|
|
25
26
|
it('rejects digest with invalid select value', () => {
|
|
26
27
|
expect(runtimeState.schema.safeParse({ action: 'digest', select: 'invalid' }).success).toBe(false);
|
|
27
28
|
});
|
|
29
|
+
it('accepts select="none" with explicit paths', () => {
|
|
30
|
+
expect(runtimeState.schema.safeParse({ action: 'digest', select: 'none', paths: ['/root/GameState'] }).success).toBe(true);
|
|
31
|
+
});
|
|
28
32
|
it('rejects digest with max_nodes out of range', () => {
|
|
29
33
|
expect(runtimeState.schema.safeParse({ action: 'digest', max_nodes: 0 }).success).toBe(false);
|
|
30
34
|
expect(runtimeState.schema.safeParse({ action: 'digest', max_nodes: 201 }).success).toBe(false);
|
|
@@ -82,6 +86,7 @@ describe('runtimeState tool', () => {
|
|
|
82
86
|
action: 'digest',
|
|
83
87
|
select: 'group',
|
|
84
88
|
group: 'my_watch',
|
|
89
|
+
paths: ['/root/GameState'],
|
|
85
90
|
name: 'Player',
|
|
86
91
|
type: 'CharacterBody2D',
|
|
87
92
|
max_nodes: 10,
|
|
@@ -90,11 +95,31 @@ describe('runtimeState tool', () => {
|
|
|
90
95
|
const params = mock.calls[0].params;
|
|
91
96
|
expect(params.select).toBe('group');
|
|
92
97
|
expect(params.group).toBe('my_watch');
|
|
98
|
+
expect(params.paths).toEqual(['/root/GameState']);
|
|
93
99
|
expect(params.name).toBe('Player');
|
|
94
100
|
expect(params.type).toBe('CharacterBody2D');
|
|
95
101
|
expect(params.max_nodes).toBe(10);
|
|
96
102
|
expect(params.include).toEqual(['transform', 'velocity']);
|
|
97
103
|
});
|
|
104
|
+
it('passes through state snapshot, available_autoloads, and unresolved_paths', async () => {
|
|
105
|
+
const response = {
|
|
106
|
+
scene: 'res://scenes/main.tscn',
|
|
107
|
+
selection: 'none',
|
|
108
|
+
entity_count: 1,
|
|
109
|
+
entities: [
|
|
110
|
+
{ path: '/root/GameState', type: 'Node', state: { cash: 25000, tick_count: 8 } },
|
|
111
|
+
],
|
|
112
|
+
available_autoloads: ['/root/GameState', '/root/SimulationClock'],
|
|
113
|
+
unresolved_paths: ['/root/Nope'],
|
|
114
|
+
};
|
|
115
|
+
mock.mockResponse(response);
|
|
116
|
+
const ctx = createToolContext(mock);
|
|
117
|
+
const result = await runtimeState.execute({ action: 'digest', select: 'none', paths: ['/root/GameState', '/root/Nope'] }, ctx);
|
|
118
|
+
const data = structuredOf(result);
|
|
119
|
+
expect(data.entities[0].state).toEqual({ cash: 25000, tick_count: 8 });
|
|
120
|
+
expect(data.available_autoloads).toEqual(['/root/GameState', '/root/SimulationClock']);
|
|
121
|
+
expect(data.unresolved_paths).toEqual(['/root/Nope']);
|
|
122
|
+
});
|
|
98
123
|
it('includes hint field in fallback selection result', async () => {
|
|
99
124
|
const response = {
|
|
100
125
|
scene: 'res://main.tscn',
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"runtime-state.test.js","sourceRoot":"","sources":["../../../src/__tests__/tools/runtime-state.test.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"runtime-state.test.js","sourceRoot":"","sources":["../../../src/__tests__/tools/runtime-state.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -33,10 +33,12 @@ export declare const runtimeState: import("../core/types.js").ToolDefinition<z.Z
|
|
|
33
33
|
action: z.ZodLiteral<"digest">;
|
|
34
34
|
select: z.ZodOptional<z.ZodEnum<{
|
|
35
35
|
method: "method";
|
|
36
|
+
none: "none";
|
|
36
37
|
group: "group";
|
|
37
38
|
auto: "auto";
|
|
38
39
|
}>>;
|
|
39
40
|
group: z.ZodOptional<z.ZodString>;
|
|
41
|
+
paths: z.ZodOptional<z.ZodArray<z.ZodString>>;
|
|
40
42
|
name: z.ZodOptional<z.ZodString>;
|
|
41
43
|
type: z.ZodOptional<z.ZodString>;
|
|
42
44
|
max_nodes: z.ZodOptional<z.ZodNumber>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"runtime-state.d.ts","sourceRoot":"","sources":["../../src/tools/runtime-state.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAGxB,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAC;
|
|
1
|
+
{"version":3,"file":"runtime-state.d.ts","sourceRoot":"","sources":["../../src/tools/runtime-state.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAGxB,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAC;AAkC1D,UAAU,cAAc;IACtB,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,GAAG,MAAM,CAAC;CACxB;AAUD,MAAM,WAAW,mBAAmB;IAClC,KAAK,EAAE,MAAM,CAAC;IACd,GAAG,EAAE,MAAM,CAAC;IACZ,GAAG,EAAE,MAAM,CAAC;IACZ,GAAG,EAAE,MAAM,CAAC;IACZ,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAC;QAAC,EAAE,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,aAAa,GAAG,YAAY,CAAA;KAAE,CAAC,CAAC;CAC/F;AAED,MAAM,WAAW,kBAAkB;IACjC,KAAK,EAAE,MAAM,CAAC;IACd,GAAG,EAAE,MAAM,CAAC;IACZ,OAAO,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAC;QAAC,EAAE,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;CAC5D;AAED,wBAAgB,qBAAqB,CACnC,OAAO,EAAE,cAAc,EAAE,EACzB,QAAQ,EAAE,MAAM,GACf,mBAAmB,CAyBrB;AAED,wBAAgB,oBAAoB,CAAC,OAAO,EAAE,cAAc,EAAE,GAAG,kBAAkB,CAkBlF;AAuID,eAAO,MAAM,YAAY;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8BAwDvB,CAAC;AAEH,eAAO,MAAM,iBAAiB,EAAqB,iBAAiB,EAAE,CAAC"}
|
|
@@ -71,14 +71,24 @@ const RuntimeStateSchema = z.discriminatedUnion('action', [
|
|
|
71
71
|
'geometry for renderable nodes (bounds, sizes, offsets) to enable programmatic layout ' +
|
|
72
72
|
'checks without a screenshot.'),
|
|
73
73
|
select: z
|
|
74
|
-
.enum(['group', 'method', 'auto'])
|
|
74
|
+
.enum(['group', 'method', 'auto', 'none'])
|
|
75
75
|
.optional()
|
|
76
76
|
.describe('Selection tier: "group" = nodes in mcp_watch group, "method" = nodes with _mcp_state(), ' +
|
|
77
|
-
'"auto" = best available (default: auto picks group → method → visible CanvasItems)'
|
|
77
|
+
'"auto" = best available (default: auto picks group → method → visible CanvasItems), ' +
|
|
78
|
+
'"none" = no automatic selection; return only the nodes named in paths'),
|
|
78
79
|
group: z
|
|
79
80
|
.string()
|
|
80
81
|
.optional()
|
|
81
82
|
.describe('Group name to use when select="group" or "auto" (default: "mcp_watch")'),
|
|
83
|
+
paths: z
|
|
84
|
+
.array(z.string())
|
|
85
|
+
.optional()
|
|
86
|
+
.describe('Explicit absolute node paths to include in addition to tier selection, e.g. ' +
|
|
87
|
+
'["/root/GameState"]. The digest walks the current scene only, so autoload ' +
|
|
88
|
+
'singletons — where global game state often lives (cash, score, settings) — are ' +
|
|
89
|
+
'otherwise unreachable. Each path returns _mcp_state() if present, else a snapshot ' +
|
|
90
|
+
'of the node\'s script variables (scalars/arrays, ~1 KB cap). Paths that do not ' +
|
|
91
|
+
'resolve are returned in unresolved_paths.'),
|
|
82
92
|
name: z.string().optional().describe('Glob filter on node name (e.g. "Player*")'),
|
|
83
93
|
type: z.string().optional().describe('Class filter (e.g. "CharacterBody2D")'),
|
|
84
94
|
max_nodes: z
|
|
@@ -164,6 +174,8 @@ export const runtimeState = defineTool({
|
|
|
164
174
|
params.select = args.select;
|
|
165
175
|
if (args.group !== undefined)
|
|
166
176
|
params.group = args.group;
|
|
177
|
+
if (args.paths !== undefined)
|
|
178
|
+
params.paths = args.paths;
|
|
167
179
|
if (args.name !== undefined)
|
|
168
180
|
params.name = args.name;
|
|
169
181
|
if (args.type !== undefined)
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"runtime-state.js","sourceRoot":"","sources":["../../src/tools/runtime-state.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,UAAU,EAAE,MAAM,wBAAwB,CAAC;AACpD,OAAO,EAAE,UAAU,EAAE,MAAM,uBAAuB,CAAC;
|
|
1
|
+
{"version":3,"file":"runtime-state.js","sourceRoot":"","sources":["../../src/tools/runtime-state.ts"],"names":[],"mappings":"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"}
|