breakpoint-mcp 1.88.0 → 1.89.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +1 -1
- package/addon/breakpoint_mcp/error_remedies.gd +2 -1
- package/addon/breakpoint_mcp/operations.gd +1 -1
- package/addon/breakpoint_mcp/plugin.cfg +1 -1
- package/addon/breakpoint_mcp/runtime_bridge.gd +231 -5
- package/dist/annotations.js +2 -2
- package/dist/annotations.js.map +1 -1
- package/dist/capabilities.js +1 -1
- package/dist/cli/doctor.js +1 -1
- package/dist/cli/init.js +1 -1
- package/dist/cli/tools.js +2 -2
- package/dist/index.js +5 -5
- package/dist/paths.js +4 -1
- package/dist/paths.js.map +1 -1
- package/dist/recipes.js +3 -3
- package/dist/recipes.js.map +1 -1
- package/dist/schemas.js +24 -1
- package/dist/schemas.js.map +1 -1
- package/dist/tool-census.js +2 -2
- package/dist/tools/runtime.js +99 -5
- package/dist/tools/runtime.js.map +1 -1
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
The MCP **host** for [Breakpoint MCP](https://github.com/jlivingston-Cipher/godot-breakpoint-mcp) —
|
|
4
4
|
a [Model Context Protocol](https://modelcontextprotocol.io) server that exposes the
|
|
5
5
|
Godot game engine to AI coding assistants across four planes: headless CLI, the live
|
|
6
|
-
editor, Godot's own LSP + DAP, and a runtime bridge inside the running game. **
|
|
6
|
+
editor, Godot's own LSP + DAP, and a runtime bridge inside the running game. **295 tools
|
|
7
7
|
+ 6 MCP resources**, built against the stable `@modelcontextprotocol/sdk` 1.x API.
|
|
8
8
|
Developed and tested with **Claude**; because MCP is an open protocol, other clients can
|
|
9
9
|
connect too (currently untested — reports welcome).
|
|
@@ -93,8 +93,9 @@ const RUNTIME_REMEDIES := {
|
|
|
93
93
|
"emit_failed": "Check the argument count and types against the signal's declaration, then emit again.",
|
|
94
94
|
"bad_action": "Call `inputmap_list` for the actions the project declares before injecting one.",
|
|
95
95
|
"bad_kind": "Pass one of the kinds the message lists to `runtime_inject_input`.",
|
|
96
|
+
"bad_event": "Pass the fields the message names for that kind to `runtime_inject_input`; a pointer's x and y are pixels of the frame `runtime_screenshot` returns.",
|
|
96
97
|
"bad_regex": "Simplify the pattern and call again — it did not compile as a Godot RegEx.",
|
|
97
|
-
"bad_reference": "Pass a reference image the project can load — `
|
|
98
|
+
"bad_reference": "Pass a reference image the project can load — `runtime_screenshot_save` writes one you can diff against later.",
|
|
98
99
|
"not_animation_player": "Call `runtime_get_tree` and pass the path of an AnimationPlayer node.",
|
|
99
100
|
"no_animation": "Call `runtime_anim_get_state` for the animations the player actually holds.",
|
|
100
101
|
"bad_scene": "Pass a res:// .tscn path that loads in the running project; `scene_get_dependencies` reports what a scene needs.",
|
|
@@ -8,7 +8,7 @@ extends RefCounted
|
|
|
8
8
|
|
|
9
9
|
const Codec := preload("res://addons/breakpoint_mcp/variant_json.gd")
|
|
10
10
|
const Remedies := preload("res://addons/breakpoint_mcp/error_remedies.gd")
|
|
11
|
-
const ADDON_VERSION := "1.
|
|
11
|
+
const ADDON_VERSION := "1.19.0"
|
|
12
12
|
|
|
13
13
|
var _plugin: EditorPlugin
|
|
14
14
|
|
|
@@ -3,5 +3,5 @@
|
|
|
3
3
|
name="Breakpoint MCP"
|
|
4
4
|
description="Exposes the live Godot editor and the running game to an MCP host so an AI assistant can drive them: scene/node/resource CRUD with full undo/redo, project settings, ClassDB, editor + in-game screenshots, and an in-game runtime bridge (live SceneTree, property get/set, method calls, signals, input injection, Performance monitors). Pairs with the breakpoint-mcp MCP host."
|
|
5
5
|
author="James Livingston"
|
|
6
|
-
version="1.
|
|
6
|
+
version="1.19.0"
|
|
7
7
|
script="plugin.gd"
|
|
@@ -36,7 +36,7 @@ extends Node
|
|
|
36
36
|
## and the process that is already running keeps the addon it loaded. Held in lockstep
|
|
37
37
|
## with `plugin.cfg` and with `operations.gd`'s copy by contract_check check 14, which
|
|
38
38
|
## exists because two of those literals disagreed for two releases.
|
|
39
|
-
const ADDON_VERSION := "1.
|
|
39
|
+
const ADDON_VERSION := "1.19.0"
|
|
40
40
|
const Codec := preload("res://addons/breakpoint_mcp/variant_json.gd")
|
|
41
41
|
const Remedies := preload("res://addons/breakpoint_mcp/error_remedies.gd")
|
|
42
42
|
const DEFAULT_PORT := 9081
|
|
@@ -87,6 +87,14 @@ const BridgeSecret := preload("res://addons/breakpoint_mcp/bridge_secret.gd")
|
|
|
87
87
|
const PauseLatch := preload("res://addons/breakpoint_mcp/pause_latch.gd")
|
|
88
88
|
# F4: methods dispatched on the async lane (they await frames); see _handle_line / _dispatch_async.
|
|
89
89
|
const ASYNC_METHODS := ["runtime.step_frames"]
|
|
90
|
+
# 🆕 BP-0041 (1.19.0): the input kinds runtime.inject_input answers, in the order the
|
|
91
|
+
# refusal lists them. `pointer` alone rides the async lane (a tap or drag spans frames).
|
|
92
|
+
const INPUT_KINDS := ["action", "key", "mouse_button", "mouse_motion", "joypad_button", "joypad_motion", "pointer"]
|
|
93
|
+
const POINTER_ACTIONS := ["press", "move", "release", "tap", "drag"]
|
|
94
|
+
# The pointer's `button` is a MouseButton index, as on mouse_button: 1 left, 2 right, 3 middle.
|
|
95
|
+
const POINTER_MASKS := {MOUSE_BUTTON_LEFT: MOUSE_BUTTON_MASK_LEFT, MOUSE_BUTTON_RIGHT: MOUSE_BUTTON_MASK_RIGHT, MOUSE_BUTTON_MIDDLE: MOUSE_BUTTON_MASK_MIDDLE}
|
|
96
|
+
const STRETCH_MODES := ["disabled", "canvas_items", "viewport"]
|
|
97
|
+
const STRETCH_ASPECTS := ["ignore", "keep", "keep_width", "keep_height", "expand"]
|
|
90
98
|
# F4: default salient fields captured by runtime.state_digest when no explicit list is given.
|
|
91
99
|
const _DIGEST_DEFAULT_FIELDS := ["position", "global_position", "rotation", "scale", "visible", "modulate"]
|
|
92
100
|
|
|
@@ -107,6 +115,11 @@ var _in_capture: bool = false
|
|
|
107
115
|
## 🔴 325 (BP-0023): the listen decision, taken first in _ready (bridge_secret.gd's
|
|
108
116
|
## runtime_listen_policy). Read by _setup_auth for where the secret comes from.
|
|
109
117
|
var _policy: Dictionary = {}
|
|
118
|
+
## 🆕 BP-0041: where the injected pointer last was and which buttons it holds, so a
|
|
119
|
+
## `press`, `move` and `release` sent as three calls carry the relative motion and the
|
|
120
|
+
## button_mask one real gesture would.
|
|
121
|
+
var _pointer_at := Vector2.ZERO
|
|
122
|
+
var _pointer_mask: int = 0
|
|
110
123
|
|
|
111
124
|
|
|
112
125
|
## The facts the listen policy is decided on. A method and not inline so the
|
|
@@ -308,7 +321,7 @@ func _handle_line(c: Dictionary, line: String) -> void:
|
|
|
308
321
|
# F4: async lane — methods that await frames can't use the synchronous dispatch (which sends
|
|
309
322
|
# its response immediately). Start a coroutine that sends the id'd response when done; the host
|
|
310
323
|
# correlates responses by id, so an out-of-order async response is fine.
|
|
311
|
-
if method in ASYNC_METHODS:
|
|
324
|
+
if method in ASYNC_METHODS or _is_pointer(method, params):
|
|
312
325
|
_dispatch_async(c, id, method, params)
|
|
313
326
|
return
|
|
314
327
|
# D1a: the engine-error echo. The ring already receives every push_error /
|
|
@@ -730,32 +743,242 @@ func _inject_input(params: Dictionary) -> Dictionary:
|
|
|
730
743
|
Input.action_release(action)
|
|
731
744
|
return _ok({"injected": true, "kind": kind})
|
|
732
745
|
"key":
|
|
746
|
+
# 🆕 BP-0041: keys bound in the editor's Input Map are stored by PHYSICAL key (the
|
|
747
|
+
# dialog's default), and an event carrying only `keycode` never matches one — so
|
|
748
|
+
# today's key kind reached `_input` but not the actions. A key with none of the
|
|
749
|
+
# three codes is KEY_NONE, which matches nothing, so it is refused, not injected.
|
|
750
|
+
if not (ev.has("keycode") or ev.has("physical_keycode") or ev.has("key_label")):
|
|
751
|
+
return _err("bad_event", "A key event needs at least one of event.keycode, event.physical_keycode or event.key_label; with none it is KEY_NONE and matches no key and no action.")
|
|
733
752
|
var k := InputEventKey.new()
|
|
734
753
|
k.keycode = int(ev.get("keycode", 0))
|
|
754
|
+
k.physical_keycode = int(ev.get("physical_keycode", 0))
|
|
755
|
+
k.key_label = int(ev.get("key_label", 0))
|
|
756
|
+
k.unicode = int(ev.get("unicode", 0))
|
|
757
|
+
k.echo = bool(ev.get("echo", false))
|
|
735
758
|
k.pressed = bool(ev.get("pressed", true))
|
|
759
|
+
_apply_modifiers(k, ev)
|
|
736
760
|
Input.parse_input_event(k)
|
|
737
761
|
return _ok({"injected": true, "kind": kind})
|
|
738
762
|
"mouse_button":
|
|
739
763
|
var mb := InputEventMouseButton.new()
|
|
740
764
|
mb.button_index = int(ev.get("button", 1))
|
|
741
765
|
mb.pressed = bool(ev.get("pressed", true))
|
|
742
|
-
|
|
766
|
+
mb.double_click = bool(ev.get("double_click", false))
|
|
767
|
+
var in_frame := String(ev.get("space", "window")) == "frame"
|
|
768
|
+
var pos_err := _apply_vector2(ev, "position", func(v: Vector2) -> void: mb.position = _frame_to_window(v) if in_frame else v)
|
|
743
769
|
if not pos_err.is_empty():
|
|
744
770
|
return pos_err
|
|
771
|
+
mb.global_position = mb.position
|
|
772
|
+
_apply_modifiers(mb, ev)
|
|
745
773
|
Input.parse_input_event(mb)
|
|
746
774
|
return _ok({"injected": true, "kind": kind})
|
|
747
775
|
"mouse_motion":
|
|
748
776
|
var mm := InputEventMouseMotion.new()
|
|
749
|
-
var
|
|
777
|
+
var m_in_frame := String(ev.get("space", "window")) == "frame"
|
|
778
|
+
var mpos_err := _apply_vector2(ev, "position", func(v: Vector2) -> void: mm.position = _frame_to_window(v) if m_in_frame else v)
|
|
750
779
|
if not mpos_err.is_empty():
|
|
751
780
|
return mpos_err
|
|
752
781
|
var rel_err := _apply_vector2(ev, "relative", func(v: Vector2) -> void: mm.relative = v)
|
|
753
782
|
if not rel_err.is_empty():
|
|
754
783
|
return rel_err
|
|
784
|
+
mm.global_position = mm.position
|
|
785
|
+
mm.button_mask = int(ev.get("button_mask", 0))
|
|
786
|
+
_apply_modifiers(mm, ev)
|
|
755
787
|
Input.parse_input_event(mm)
|
|
756
788
|
return _ok({"injected": true, "kind": kind})
|
|
789
|
+
"joypad_button":
|
|
790
|
+
if not ev.has("button"):
|
|
791
|
+
return _err("bad_event", "A joypad_button event needs event.button, Godot's JoyButton index (0 is the bottom face button).")
|
|
792
|
+
var jb := InputEventJoypadButton.new()
|
|
793
|
+
jb.device = int(ev.get("device", 0))
|
|
794
|
+
jb.button_index = int(ev.get("button"))
|
|
795
|
+
jb.pressed = bool(ev.get("pressed", true))
|
|
796
|
+
jb.pressure = float(ev.get("pressure", 1.0 if jb.pressed else 0.0))
|
|
797
|
+
Input.parse_input_event(jb)
|
|
798
|
+
return _ok({"injected": true, "kind": kind})
|
|
799
|
+
"joypad_motion":
|
|
800
|
+
if not ev.has("axis"):
|
|
801
|
+
return _err("bad_event", "A joypad_motion event needs event.axis, Godot's JoyAxis index (0 to 5), and event.value from -1 to 1.")
|
|
802
|
+
var jm := InputEventJoypadMotion.new()
|
|
803
|
+
jm.device = int(ev.get("device", 0))
|
|
804
|
+
jm.axis = int(ev.get("axis"))
|
|
805
|
+
jm.axis_value = clampf(float(ev.get("value", 0.0)), -1.0, 1.0)
|
|
806
|
+
Input.parse_input_event(jm)
|
|
807
|
+
return _ok({"injected": true, "kind": kind})
|
|
808
|
+
"pointer":
|
|
809
|
+
# Reached only from a caller that bypassed _handle_line's routing; the lane is async.
|
|
810
|
+
return _err("async_only", "runtime.inject_input with kind pointer is dispatched on the async lane")
|
|
757
811
|
_:
|
|
758
|
-
return _err("bad_kind", "Unknown input kind: %s" % kind)
|
|
812
|
+
return _err("bad_kind", "Unknown input kind: %s. The kinds are %s." % [kind, ", ".join(INPUT_KINDS)])
|
|
813
|
+
|
|
814
|
+
|
|
815
|
+
## 🆕 BP-0041 — the four modifier flags, on any event that carries them.
|
|
816
|
+
func _apply_modifiers(e: InputEventWithModifiers, ev: Dictionary) -> void:
|
|
817
|
+
e.shift_pressed = bool(ev.get("shift", false))
|
|
818
|
+
e.ctrl_pressed = bool(ev.get("ctrl", false))
|
|
819
|
+
e.alt_pressed = bool(ev.get("alt", false))
|
|
820
|
+
e.meta_pressed = bool(ev.get("meta", false))
|
|
821
|
+
|
|
822
|
+
|
|
823
|
+
## 🆕 BP-0041 — true when this call is a `pointer` gesture, which awaits frames and so
|
|
824
|
+
## rides the async lane like runtime.step_frames.
|
|
825
|
+
static func _is_pointer(method: String, params: Dictionary) -> bool:
|
|
826
|
+
if method != "runtime.inject_input":
|
|
827
|
+
return false
|
|
828
|
+
var ev: Variant = params.get("event")
|
|
829
|
+
return typeof(ev) == TYPE_DICTIONARY and String((ev as Dictionary).get("kind", "")) == "pointer"
|
|
830
|
+
|
|
831
|
+
|
|
832
|
+
## 🆕 BP-0041 — the geometry that relates `runtime.screenshot`'s frame to the window.
|
|
833
|
+
## `texture` is the frame's own pixel size (the image's, NOT `ViewportTexture.get_size()`:
|
|
834
|
+
## measured windowed on 4.7 under canvas_items, that answered 685x386 for an 888x500 frame); `visible_rect` is the viewport's coordinate
|
|
835
|
+
## space (what input events and Controls use); `window` is the OS window's client size;
|
|
836
|
+
## the stretch fields are the root window's content scale settings.
|
|
837
|
+
func _viewport_block(vp: Viewport, frame_size: Vector2) -> Dictionary:
|
|
838
|
+
var tex_size := frame_size
|
|
839
|
+
var vis := vp.get_visible_rect()
|
|
840
|
+
var win: Window = vp as Window if vp is Window else vp.get_window()
|
|
841
|
+
var block := {
|
|
842
|
+
"texture": [tex_size.x, tex_size.y],
|
|
843
|
+
"visible_rect": [vis.position.x, vis.position.y, vis.size.x, vis.size.y],
|
|
844
|
+
"window": [vis.size.x, vis.size.y],
|
|
845
|
+
"stretch_mode": "disabled",
|
|
846
|
+
"stretch_aspect": "ignore",
|
|
847
|
+
"content_scale_factor": 1.0,
|
|
848
|
+
}
|
|
849
|
+
if win != null:
|
|
850
|
+
block["window"] = [float(win.size.x), float(win.size.y)]
|
|
851
|
+
block["stretch_mode"] = STRETCH_MODES[clampi(int(win.content_scale_mode), 0, STRETCH_MODES.size() - 1)]
|
|
852
|
+
block["stretch_aspect"] = STRETCH_ASPECTS[clampi(int(win.content_scale_aspect), 0, STRETCH_ASPECTS.size() - 1)]
|
|
853
|
+
block["content_scale_factor"] = win.content_scale_factor
|
|
854
|
+
return block
|
|
855
|
+
|
|
856
|
+
|
|
857
|
+
## 🆕 BP-0041 — the transform that carries a pixel of the frame `runtime.screenshot`
|
|
858
|
+
## returns to a window pixel, in all three stretch modes.
|
|
859
|
+
##
|
|
860
|
+
## Godot's root window maps viewport coordinates to the window with
|
|
861
|
+
## `get_final_transform()` = window_transform * stretch_transform * global_canvas_transform
|
|
862
|
+
## (window.cpp, 4.3-4.7), and `Viewport._make_input_local` INVERTS exactly that for every
|
|
863
|
+
## event. The frame is the viewport's render target, whose pixels are viewport coordinates
|
|
864
|
+
## times the stretch scale — so frame -> window is `window_transform` alone: the letterbox
|
|
865
|
+
## offset under canvas_items, offset and upscale under viewport, identity when disabled.
|
|
866
|
+
## Measured windowed on the Mac (4.7, 1000x500 window, 1152x648 base, aspect keep): taps and
|
|
867
|
+
## drags at frame pixels landed on their targets under all three modes.
|
|
868
|
+
func _frame_transform() -> Transform2D:
|
|
869
|
+
var vp := get_viewport()
|
|
870
|
+
if vp == null:
|
|
871
|
+
return Transform2D.IDENTITY
|
|
872
|
+
if vp.has_method("get_stretch_transform"): # bound from Godot 4.4
|
|
873
|
+
var inner: Transform2D = vp.call("get_stretch_transform") * vp.global_canvas_transform
|
|
874
|
+
return vp.get_final_transform() * inner.affine_inverse()
|
|
875
|
+
# 4.2 / 4.3 bind no stretch accessor, so the frame's own size says the stretch scale.
|
|
876
|
+
var tex := vp.get_texture()
|
|
877
|
+
var img: Image = tex.get_image() if tex != null else null
|
|
878
|
+
if img == null or img.get_width() <= 0 or img.get_height() <= 0:
|
|
879
|
+
return Transform2D.IDENTITY
|
|
880
|
+
var vis := vp.get_visible_rect()
|
|
881
|
+
var to_local := Transform2D(0.0, vis.size / Vector2(img.get_width(), img.get_height()), 0.0, vis.position)
|
|
882
|
+
return vp.get_final_transform() * to_local
|
|
883
|
+
|
|
884
|
+
|
|
885
|
+
func _frame_to_window(f: Vector2) -> Vector2:
|
|
886
|
+
return _frame_transform() * f
|
|
887
|
+
|
|
888
|
+
|
|
889
|
+
## 🆕 BP-0041 — the pointer kind: press / move / release / tap / drag, at points given in
|
|
890
|
+
## the frame's pixels (`space` "frame", the default) or the window's (`space` "window").
|
|
891
|
+
## The reply carries the window points actually sent, so a miss is visible in the reply.
|
|
892
|
+
func _inject_pointer(ev_in: Variant) -> Dictionary:
|
|
893
|
+
if typeof(ev_in) != TYPE_DICTIONARY:
|
|
894
|
+
return _err("bad_event", "event must be an object.")
|
|
895
|
+
var ev: Dictionary = ev_in
|
|
896
|
+
var action := String(ev.get("action", ""))
|
|
897
|
+
if not action in POINTER_ACTIONS:
|
|
898
|
+
return _err("bad_event", "A pointer event needs event.action, one of %s; got %s." % [", ".join(POINTER_ACTIONS), JSON.stringify(action)])
|
|
899
|
+
if not (ev.has("x") and ev.has("y")):
|
|
900
|
+
return _err("bad_event", "A pointer event needs event.x and event.y, pixels of the frame runtime_screenshot returns.")
|
|
901
|
+
if action == "drag" and not (ev.has("to_x") and ev.has("to_y")):
|
|
902
|
+
return _err("bad_event", "A pointer drag needs event.to_x and event.to_y, where the button is released.")
|
|
903
|
+
var bname := int(ev.get("button", MOUSE_BUTTON_LEFT))
|
|
904
|
+
if not POINTER_MASKS.has(bname):
|
|
905
|
+
return _err("bad_event", "A pointer's event.button is a MouseButton index: 1 left, 2 right or 3 middle; got %s." % JSON.stringify(ev.get("button")))
|
|
906
|
+
var in_frame := String(ev.get("space", "frame")) != "window"
|
|
907
|
+
var warp := bool(ev.get("warp", false))
|
|
908
|
+
var per_step := clampi(int(ev.get("frames_per_step", 1)), 1, 10)
|
|
909
|
+
var xf := _frame_transform() if in_frame else Transform2D.IDENTITY
|
|
910
|
+
var start := xf * Vector2(float(ev.get("x")), float(ev.get("y")))
|
|
911
|
+
var points: Array = []
|
|
912
|
+
var frames := 0
|
|
913
|
+
match action:
|
|
914
|
+
"press":
|
|
915
|
+
_pointer_button(start, bname, true, warp)
|
|
916
|
+
points.append(start)
|
|
917
|
+
"release":
|
|
918
|
+
_pointer_button(start, bname, false, warp)
|
|
919
|
+
points.append(start)
|
|
920
|
+
"move":
|
|
921
|
+
_pointer_motion(start, warp)
|
|
922
|
+
points.append(start)
|
|
923
|
+
"tap":
|
|
924
|
+
_pointer_button(start, bname, true, warp)
|
|
925
|
+
points.append(start)
|
|
926
|
+
frames += await _pointer_wait(per_step)
|
|
927
|
+
_pointer_button(start, bname, false, warp)
|
|
928
|
+
points.append(start)
|
|
929
|
+
"drag":
|
|
930
|
+
var end := xf * Vector2(float(ev.get("to_x")), float(ev.get("to_y")))
|
|
931
|
+
var steps := clampi(int(ev.get("steps", 8)), 1, 60)
|
|
932
|
+
_pointer_button(start, bname, true, warp)
|
|
933
|
+
points.append(start)
|
|
934
|
+
for i in range(1, steps + 1):
|
|
935
|
+
frames += await _pointer_wait(per_step)
|
|
936
|
+
var p := start.lerp(end, float(i) / float(steps))
|
|
937
|
+
_pointer_motion(p, warp)
|
|
938
|
+
points.append(p)
|
|
939
|
+
frames += await _pointer_wait(per_step)
|
|
940
|
+
_pointer_button(end, bname, false, warp)
|
|
941
|
+
points.append(end)
|
|
942
|
+
var sent: Array = []
|
|
943
|
+
for p in points:
|
|
944
|
+
sent.append([(p as Vector2).x, (p as Vector2).y])
|
|
945
|
+
return _ok({"injected": true, "kind": "pointer", "window_points": sent, "frames": frames})
|
|
946
|
+
|
|
947
|
+
|
|
948
|
+
func _pointer_wait(n: int) -> int:
|
|
949
|
+
var tree := get_tree()
|
|
950
|
+
for _i in n:
|
|
951
|
+
await tree.process_frame
|
|
952
|
+
return n
|
|
953
|
+
|
|
954
|
+
|
|
955
|
+
func _pointer_button(at: Vector2, bname: int, pressed: bool, warp: bool) -> void:
|
|
956
|
+
if warp:
|
|
957
|
+
Input.warp_mouse(at)
|
|
958
|
+
if pressed:
|
|
959
|
+
_pointer_mask |= int(POINTER_MASKS[bname])
|
|
960
|
+
else:
|
|
961
|
+
_pointer_mask &= ~int(POINTER_MASKS[bname])
|
|
962
|
+
var mb := InputEventMouseButton.new()
|
|
963
|
+
mb.button_index = bname
|
|
964
|
+
mb.pressed = pressed
|
|
965
|
+
mb.position = at
|
|
966
|
+
mb.global_position = at
|
|
967
|
+
mb.button_mask = _pointer_mask
|
|
968
|
+
Input.parse_input_event(mb)
|
|
969
|
+
_pointer_at = at
|
|
970
|
+
|
|
971
|
+
|
|
972
|
+
func _pointer_motion(at: Vector2, warp: bool) -> void:
|
|
973
|
+
if warp:
|
|
974
|
+
Input.warp_mouse(at)
|
|
975
|
+
var mm := InputEventMouseMotion.new()
|
|
976
|
+
mm.position = at
|
|
977
|
+
mm.global_position = at
|
|
978
|
+
mm.relative = at - _pointer_at
|
|
979
|
+
mm.button_mask = _pointer_mask
|
|
980
|
+
Input.parse_input_event(mm)
|
|
981
|
+
_pointer_at = at
|
|
759
982
|
|
|
760
983
|
|
|
761
984
|
## Apply an OPTIONAL Vector2 field of a synthetic input event, or say why not.
|
|
@@ -841,6 +1064,7 @@ func _screenshot() -> Dictionary:
|
|
|
841
1064
|
"base64": Marshalls.raw_to_base64(buf),
|
|
842
1065
|
"width": img.get_width(),
|
|
843
1066
|
"height": img.get_height(),
|
|
1067
|
+
"viewport": _viewport_block(vp, Vector2(img.get_width(), img.get_height())),
|
|
844
1068
|
})
|
|
845
1069
|
|
|
846
1070
|
|
|
@@ -1314,6 +1538,8 @@ func _dispatch_async(c: Dictionary, id: Variant, method: String, params: Diction
|
|
|
1314
1538
|
match method:
|
|
1315
1539
|
"runtime.step_frames":
|
|
1316
1540
|
result = await _step_frames(params)
|
|
1541
|
+
"runtime.inject_input":
|
|
1542
|
+
result = await _inject_pointer(params.get("event", {}))
|
|
1317
1543
|
_:
|
|
1318
1544
|
result = _err("async_only", "not an async method: %s" % method)
|
|
1319
1545
|
var peer: StreamPeerTCP = c.get("peer")
|
package/dist/annotations.js
CHANGED
|
@@ -86,7 +86,7 @@ const IDEMPOTENT = [
|
|
|
86
86
|
"runtime_anim_stop", "runtime_assert_node_state", "runtime_assert_perf", "runtime_assert_scene_structure",
|
|
87
87
|
"runtime_assert_screen_text", "runtime_await_condition", "runtime_get_log", "runtime_get_monitors",
|
|
88
88
|
"runtime_get_property", "runtime_get_tree", "runtime_node_remove", "runtime_peer_stop", "runtime_peers_digest", "runtime_read_state",
|
|
89
|
-
"runtime_screenshot", "runtime_screenshot_diff", "runtime_seed_rng", "runtime_set_property",
|
|
89
|
+
"runtime_screenshot", "runtime_screenshot_diff", "runtime_screenshot_save", "runtime_seed_rng", "runtime_set_property",
|
|
90
90
|
"runtime_state_digest", "runtime_time_scale", "scene_get_dependencies", "scene_get_tree", "scene_list_open", "scene_new", "scene_open",
|
|
91
91
|
"scene_pack", "scene_reload", "scene_save", "scene_save_as", "screenshot_editor", "selection_get",
|
|
92
92
|
"selection_set", "shader_create", "shader_set_code", "shadermaterial_create", "shadermaterial_set_param",
|
|
@@ -157,7 +157,7 @@ export const ALL_ANNOTATED = [
|
|
|
157
157
|
"runtime_assert_scene_structure", "runtime_assert_screen_text", "runtime_await_condition", "runtime_call_method",
|
|
158
158
|
"runtime_emit_signal", "runtime_get_log", "runtime_get_monitors", "runtime_get_property", "runtime_get_tree",
|
|
159
159
|
"runtime_inject_input", "runtime_node_add", "runtime_node_remove", "runtime_peer_stop", "runtime_peers_digest", "runtime_read_state",
|
|
160
|
-
"runtime_screenshot", "runtime_screenshot_diff", "runtime_seed_rng", "runtime_set_property",
|
|
160
|
+
"runtime_screenshot", "runtime_screenshot_diff", "runtime_screenshot_save", "runtime_seed_rng", "runtime_set_property",
|
|
161
161
|
"runtime_spawn_peers", "runtime_state_digest", "runtime_step_frames", "runtime_time_scale", "scene_close",
|
|
162
162
|
"scene_get_dependencies", "scene_get_tree",
|
|
163
163
|
"scene_list_open", "scene_new", "scene_open", "scene_pack", "scene_reload", "scene_save", "scene_save_as",
|
package/dist/annotations.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"annotations.js","sourceRoot":"","sources":["../src/annotations.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"annotations.js","sourceRoot":"","sources":["../src/annotations.ts"],"names":[],"mappings":"AA6DA,iCAAiC;AACjC,MAAM,SAAS,GAAsB;IACnC,qBAAqB,EAAE,WAAW,EAAE,gBAAgB,EAAE,mBAAmB,EAAE,kBAAkB,EAAE,iBAAiB,EAAE,mBAAmB,EAAE,gBAAgB;IACvJ,eAAe,EAAE,eAAe,EAAE,oBAAoB,EAAE,kBAAkB,EAAE,eAAe,EAAE,gBAAgB;IAC7G,qBAAqB,EAAE,UAAU,EAAE,eAAe,EAAE,mBAAmB,EAAE,sBAAsB,EAAE,YAAY;IAC7G,iBAAiB,EAAE,eAAe,EAAE,aAAa,EAAE,kBAAkB,EAAE,aAAa,EAAE,iBAAiB;IACvG,iBAAiB,EAAE,aAAa,EAAE,aAAa,EAAE,mBAAmB,EAAE,gBAAgB,EAAE,eAAe;IACvG,gBAAgB,EAAE,eAAe,EAAE,gBAAgB,EAAE,mBAAmB,EAAE,uBAAuB;IACjG,kBAAkB,EAAE,qBAAqB,EAAE,mBAAmB,EAAE,eAAe,EAAE,UAAU,EAAE,mBAAmB;IAChH,eAAe,EAAE,oBAAoB,EAAE,mBAAmB,EAAE,oBAAoB,EAAE,sBAAsB;IACxG,cAAc,EAAE,eAAe,EAAE,eAAe,EAAE,iBAAiB,EAAE,WAAW,EAAE,mBAAmB,EAAE,eAAe;IACtH,mBAAmB,EAAE,kBAAkB,EAAE,sBAAsB,EAAE,kBAAkB,EAAE,qBAAqB;IAC1G,uBAAuB,EAAE,gBAAgB,EAAE,8BAA8B,EAAE,uBAAuB;IAClG,eAAe,EAAE,wBAAwB,EAAE,2BAA2B,EAAE,qBAAqB;IAC7F,gCAAgC,EAAE,4BAA4B,EAAE,yBAAyB,EAAE,iBAAiB;IAC5G,sBAAsB,EAAE,sBAAsB,EAAE,kBAAkB,EAAE,oBAAoB;IACxF,sBAAsB,EAAE,oBAAoB,EAAE,yBAAyB,EAAE,sBAAsB,EAAE,wBAAwB;IACzH,gBAAgB,EAAE,iBAAiB,EAAE,mBAAmB,EAAE,eAAe,EAAE,aAAa;IACxF,yBAAyB,EAAE,aAAa,EAAE,WAAW,EAAE,kBAAkB,EAAE,WAAW,EAAE,iBAAiB;IACzG,UAAU,EAAE,SAAS,EAAE,UAAU,EAAE,YAAY;CAChD,CAAC;AAEF,2EAA2E;AAC3E,MAAM,WAAW,GAAsB;IACrC,aAAa,EAAE,iBAAiB,EAAE,qBAAqB,EAAE,gBAAgB,EAAE,iBAAiB;IAC5F,uBAAuB,EAAE,kBAAkB,EAAE,mBAAmB,EAAE,sBAAsB,EAAE,sBAAsB;IAChH,eAAe,EAAE,mBAAmB,EAAE,cAAc,EAAE,mBAAmB,EAAE,sBAAsB;IACjG,oBAAoB,EAAE,iBAAiB,EAAE,qBAAqB,EAAE,WAAW,EAAE,cAAc,EAAE,UAAU;IACvG,kBAAkB,EAAE,wBAAwB,EAAE,oBAAoB,EAAE,qBAAqB,EAAE,iBAAiB;IAC5G,WAAW,EAAE,2BAA2B,EAAE,YAAY,EAAE,qBAAqB,EAAE,uBAAuB;IACtG,wBAAwB,EAAE,yBAAyB,EAAE,sBAAsB,EAAE,mBAAmB;IAChG,oBAAoB,EAAE,sBAAsB,EAAE,aAAa,EAAE,kBAAkB,EAAE,kBAAkB;IACnG,aAAa,EAAE,wBAAwB,EAAE,qBAAqB,EAAE,uBAAuB,EAAE,uBAAuB;IAChH,sBAAsB,EAAE,yBAAyB,EAAE,wBAAwB,EAAE,qBAAqB;IAClG,iBAAiB,EAAE,oBAAoB,EAAE,eAAe,EAAE,8BAA8B;IACxF,uBAAuB,EAAE,mBAAmB,EAAE,mBAAmB,EAAE,qBAAqB,EAAE,qBAAqB;IAC/G,sBAAsB,EAAE,qBAAqB,EAAE,mBAAmB,EAAE,kBAAkB,EAAE,sBAAsB;IAC9G,qBAAqB,EAAE,oBAAoB,EAAE,aAAa,EAAE,WAAW,EAAE,YAAY,EAAE,cAAc,EAAE,eAAe,EAAE,eAAe;IACvI,iBAAiB,EAAE,uBAAuB,EAAE,0BAA0B,EAAE,2BAA2B;IACnG,mBAAmB,EAAE,aAAa,EAAE,cAAc,EAAE,iBAAiB,EAAE,oBAAoB,EAAE,gBAAgB;IAC7G,oBAAoB,EAAE,eAAe,EAAE,kBAAkB,EAAE,wBAAwB,EAAE,gBAAgB;IACrG,iFAAiF;IACjF,gFAAgF;IAChF,iFAAiF;IACjF,8EAA8E;IAC9E,iFAAiF;IACjF,8EAA8E;IAC9E,iFAAiF;IACjF,oEAAoE;IACpE,4BAA4B;IAC5B,aAAa,EAAE,WAAW;CAC3B,CAAC;AAEF,iFAAiF;AACjF,MAAM,UAAU,GAAsB;IACpC,aAAa,EAAE,aAAa,EAAE,qBAAqB,EAAE,iBAAiB,EAAE,WAAW,EAAE,iBAAiB;IACtG,eAAe,EAAE,6BAA6B,EAAE,kCAAkC,EAAE,oBAAoB;IACxG,kBAAkB,EAAE,qBAAqB,EAAE,qBAAqB,EAAE,uBAAuB;IACzF,sBAAsB,EAAE,sBAAsB,EAAE,kBAAkB,EAAE,eAAe,EAAE,mBAAmB;IACxG,gBAAgB,EAAE,cAAc,EAAE,aAAa,EAAE,mBAAmB,EAAE,kBAAkB;IACxF,0BAA0B,EAAE,yBAAyB,EAAE,2BAA2B,EAAE,mBAAmB,EAAE,kBAAkB,EAAE,sBAAsB;IACnJ,iBAAiB,EAAE,mBAAmB,EAAE,oBAAoB,EAAE,qBAAqB,EAAE,2BAA2B;IAChH,wBAAwB,EAAE,mBAAmB,EAAE,gBAAgB,EAAE,eAAe,EAAE,eAAe;IACjG,eAAe,EAAE,wBAAwB,EAAE,kCAAkC,EAAE,qBAAqB;IACpG,oBAAoB,EAAE,kBAAkB,EAAE,cAAc,EAAE,eAAe,EAAE,gBAAgB;IAC3F,qBAAqB,EAAE,UAAU,EAAE,eAAe,EAAE,WAAW,EAAE,mBAAmB,EAAE,sBAAsB;IAC5G,YAAY,EAAE,sBAAsB,EAAE,UAAU,EAAE,YAAY,EAAE,qBAAqB;IACrF,+BAA+B,EAAE,kBAAkB,EAAE,iBAAiB,EAAE,eAAe,EAAE,WAAW;IACpG,aAAa,EAAE,kBAAkB,EAAE,aAAa,EAAE,wBAAwB,EAAE,oBAAoB;IAChG,qBAAqB,EAAE,iBAAiB,EAAE,uBAAuB,EAAE,iBAAiB,EAAE,iBAAiB;IACvG,iBAAiB,EAAE,aAAa,EAAE,aAAa,EAAE,mBAAmB,EAAE,gBAAgB,EAAE,eAAe;IACvG,gBAAgB,EAAE,eAAe,EAAE,gBAAgB,EAAE,mBAAmB,EAAE,uBAAuB;IACjG,kBAAkB,EAAE,qBAAqB,EAAE,mBAAmB,EAAE,eAAe,EAAE,UAAU,EAAE,mBAAmB;IAChH,eAAe,EAAE,WAAW,EAAE,oBAAoB,EAAE,mBAAmB,EAAE,oBAAoB;IAC7F,sBAAsB,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,YAAY,EAAE,eAAe;IACrG,qBAAqB,EAAE,uBAAuB,EAAE,eAAe,EAAE,kBAAkB,EAAE,sBAAsB;IAC3G,iBAAiB,EAAE,iBAAiB,EAAE,2BAA2B,EAAE,mBAAmB,EAAE,kBAAkB,EAAE,oBAAoB;IAChI,sBAAsB,EAAE,aAAa,EAAE,mBAAmB,EAAE,kBAAkB,EAAE,aAAa,EAAE,WAAW;IAC1G,mBAAmB,EAAE,eAAe,EAAE,mBAAmB,EAAE,kBAAkB,EAAE,sBAAsB;IACrG,iBAAiB,EAAE,wBAAwB,EAAE,aAAa,EAAE,eAAe,EAAE,4BAA4B;IACzG,gBAAgB,EAAE,mBAAmB,EAAE,sBAAsB,EAAE,wBAAwB;IACvF,wBAAwB,EAAE,gCAAgC,EAAE,uBAAuB,EAAE,qBAAqB;IAC1G,uBAAuB,EAAE,uBAAuB,EAAE,sBAAsB,EAAE,kBAAkB;IAC5F,qBAAqB,EAAE,uBAAuB,EAAE,yBAAyB,EAAE,gBAAgB;IAC3F,wBAAwB,EAAE,qBAAqB,EAAE,iBAAiB,EAAE,oBAAoB;IACxF,8BAA8B,EAAE,uBAAuB,EAAE,eAAe,EAAE,eAAe;IACzF,8BAA8B,EAAE,uBAAuB,EAAE,0BAA0B,EAAE,wBAAwB;IAC7G,mBAAmB,EAAE,2BAA2B,EAAE,qBAAqB,EAAE,gCAAgC;IACzG,4BAA4B,EAAE,yBAAyB,EAAE,iBAAiB,EAAE,sBAAsB;IAClG,sBAAsB,EAAE,kBAAkB,EAAE,qBAAqB,EAAE,mBAAmB,EAAE,sBAAsB,EAAE,oBAAoB;IACpI,oBAAoB,EAAE,yBAAyB,EAAE,yBAAyB,EAAE,kBAAkB,EAAE,sBAAsB;IACtH,sBAAsB,EAAE,oBAAoB,EAAE,wBAAwB,EAAE,gBAAgB,EAAE,iBAAiB,EAAE,WAAW,EAAE,YAAY;IACtI,YAAY,EAAE,cAAc,EAAE,YAAY,EAAE,eAAe,EAAE,mBAAmB,EAAE,eAAe;IACjG,eAAe,EAAE,eAAe,EAAE,iBAAiB,EAAE,uBAAuB,EAAE,0BAA0B;IACxG,2BAA2B,EAAE,wBAAwB,EAAE,gBAAgB,EAAE,mBAAmB,EAAE,aAAa;IAC3G,yBAAyB,EAAE,aAAa,EAAE,WAAW,EAAE,cAAc,EAAE,iBAAiB,EAAE,oBAAoB;IAC9G,gBAAgB,EAAE,oBAAoB,EAAE,eAAe,EAAE,kBAAkB,EAAE,kBAAkB;IAC/F,wBAAwB,EAAE,kBAAkB,EAAE,gBAAgB,EAAE,SAAS,EAAE,WAAW,EAAE,iBAAiB;IACzG,UAAU,EAAE,SAAS,EAAE,aAAa,EAAE,UAAU,EAAE,YAAY,EAAE,YAAY;CAC7E,CAAC;AAEF;;;GAGG;AACH,MAAM,UAAU,GAAsB,EAAE,CAAC;AAEzC;;;;;;;;;GASG;AACH,MAAM,CAAC,MAAM,aAAa,GAAsB;IAC9C,gBAAgB,EAAE,aAAa,EAAE,aAAa,EAAE,qBAAqB,EAAE,iBAAiB,EAAE,WAAW;IACrG,oBAAoB,EAAE,iBAAiB,EAAE,iBAAiB,EAAE,eAAe,EAAE,6BAA6B;IAC1G,kCAAkC,EAAE,oBAAoB,EAAE,kBAAkB,EAAE,kBAAkB;IAChG,qBAAqB,EAAE,qBAAqB,EAAE,qBAAqB,EAAE,gBAAgB,EAAE,iBAAiB;IACxG,uBAAuB,EAAE,kBAAkB,EAAE,mBAAmB,EAAE,eAAe,EAAE,sBAAsB;IACzG,sBAAsB,EAAE,qBAAqB,EAAE,sBAAsB,EAAE,kBAAkB,EAAE,eAAe;IAC1G,mBAAmB,EAAE,gBAAgB,EAAE,cAAc,EAAE,aAAa,EAAE,mBAAmB,EAAE,kBAAkB;IAC7G,aAAa,EAAE,0BAA0B,EAAE,yBAAyB,EAAE,2BAA2B;IACjG,mBAAmB,EAAE,kBAAkB,EAAE,eAAe,EAAE,sBAAsB,EAAE,kBAAkB,EAAE,eAAe,EAAE,eAAe;IACtI,sBAAsB,EAAE,iBAAiB,EAAE,mBAAmB,EAAE,oBAAoB,EAAE,sBAAsB;IAC5G,oBAAoB,EAAE,qBAAqB,EAAE,gBAAgB,EAAE,qBAAqB;IACpF,2BAA2B,EAAE,wBAAwB,EAAE,mBAAmB,EAAE,gBAAgB,EAAE,eAAe;IAC7G,eAAe,EAAE,iBAAiB,EAAE,iBAAiB,EAAE,eAAe,EAAE,gBAAgB,EAAE,eAAe;IACzG,wBAAwB,EAAE,kCAAkC,EAAE,qBAAqB,EAAE,oBAAoB;IACzG,aAAa,EAAE,kBAAkB,EAAE,cAAc,EAAE,eAAe,EAAE,gBAAgB,EAAE,qBAAqB;IAC3G,UAAU,EAAE,eAAe,EAAE,WAAW,EAAE,mBAAmB,EAAE,sBAAsB,EAAE,YAAY;IACnG,YAAY,EAAE,cAAc,EAAE,sBAAsB,EAAE,cAAc,EAAE,UAAU,EAAE,YAAY,EAAE,aAAa;IAC7G,YAAY,EAAE,qBAAqB,EAAE,+BAA+B,EAAE,kBAAkB,EAAE,iBAAiB;IAC3G,UAAU,EAAE,eAAe,EAAE,WAAW,EAAE,aAAa,EAAE,kBAAkB,EAAE,aAAa,EAAE,aAAa;IACzG,aAAa,EAAE,wBAAwB,EAAE,oBAAoB,EAAE,qBAAqB,EAAE,iBAAiB;IACvG,uBAAuB,EAAE,iBAAiB,EAAE,iBAAiB,EAAE,iBAAiB,EAAE,aAAa,EAAE,aAAa;IAC9G,mBAAmB,EAAE,gBAAgB,EAAE,eAAe,EAAE,gBAAgB,EAAE,eAAe,EAAE,gBAAgB;IAC3G,mBAAmB,EAAE,uBAAuB,EAAE,kBAAkB,EAAE,qBAAqB,EAAE,mBAAmB;IAC5G,eAAe,EAAE,UAAU,EAAE,mBAAmB,EAAE,eAAe,EAAE,WAAW,EAAE,oBAAoB;IACpG,mBAAmB,EAAE,oBAAoB,EAAE,sBAAsB,EAAE,cAAc,EAAE,cAAc;IACjG,qBAAqB,EAAE,cAAc,EAAE,2BAA2B,EAAE,mBAAmB,EAAE,mBAAmB;IAC5G,YAAY,EAAE,eAAe,EAAE,qBAAqB,EAAE,oBAAoB,EAAE,uBAAuB;IACnG,eAAe,EAAE,wBAAwB,EAAE,yBAAyB,EAAE,cAAc,EAAE,kBAAkB;IACxG,sBAAsB,EAAE,cAAc,EAAE,iBAAiB,EAAE,iBAAiB,EAAE,2BAA2B,EAAE,qBAAqB,EAAE,gBAAgB;IAClJ,qBAAqB,EAAE,mBAAmB,EAAE,kBAAkB,EAAE,oBAAoB,EAAE,sBAAsB;IAC5G,aAAa,EAAE,oBAAoB,EAAE,kBAAkB,EAAE,UAAU,EAAE,mBAAmB,EAAE,kBAAkB;IAC5G,kBAAkB,EAAE,aAAa,EAAE,gBAAgB,EAAE,WAAW,EAAE,mBAAmB,EAAE,eAAe;IACtG,mBAAmB,EAAE,wBAAwB,EAAE,kBAAkB,EAAE,sBAAsB,EAAE,iBAAiB;IAC5G,wBAAwB,EAAE,aAAa,EAAE,eAAe,EAAE,4BAA4B,EAAE,gBAAgB;IACxG,mBAAmB,EAAE,kBAAkB,EAAE,sBAAsB,EAAE,wBAAwB;IACzF,wBAAwB,EAAE,gCAAgC,EAAE,uBAAuB,EAAE,qBAAqB;IAC1G,gBAAgB,EAAE,YAAY,EAAE,uBAAuB,EAAE,uBAAuB,EAAE,sBAAsB;IACxG,2BAA2B,EAAE,kBAAkB,EAAE,qBAAqB,EAAE,uBAAuB;IAC/F,yBAAyB,EAAE,gBAAgB,EAAE,wBAAwB,EAAE,qBAAqB,EAAE,iBAAiB;IAC/G,oBAAoB,EAAE,8BAA8B,EAAE,uBAAuB,EAAE,eAAe,EAAE,eAAe;IAC/G,8BAA8B,EAAE,uBAAuB,EAAE,0BAA0B,EAAE,wBAAwB;IAC7G,mBAAmB,EAAE,mBAAmB,EAAE,2BAA2B,EAAE,qBAAqB;IAC5F,gCAAgC,EAAE,4BAA4B,EAAE,yBAAyB,EAAE,qBAAqB;IAChH,qBAAqB,EAAE,iBAAiB,EAAE,sBAAsB,EAAE,sBAAsB,EAAE,kBAAkB;IAC5G,sBAAsB,EAAE,kBAAkB,EAAE,qBAAqB,EAAE,mBAAmB,EAAE,sBAAsB,EAAE,oBAAoB;IACpI,oBAAoB,EAAE,yBAAyB,EAAE,yBAAyB,EAAE,kBAAkB,EAAE,sBAAsB;IACtH,qBAAqB,EAAE,sBAAsB,EAAE,qBAAqB,EAAE,oBAAoB,EAAE,aAAa;IACzG,wBAAwB,EAAE,gBAAgB;IAC1C,iBAAiB,EAAE,WAAW,EAAE,YAAY,EAAE,YAAY,EAAE,cAAc,EAAE,YAAY,EAAE,eAAe;IACzG,mBAAmB,EAAE,eAAe,EAAE,eAAe,EAAE,eAAe,EAAE,iBAAiB;IACzF,uBAAuB,EAAE,0BAA0B,EAAE,2BAA2B,EAAE,wBAAwB;IAC1G,gBAAgB,EAAE,mBAAmB,EAAE,aAAa,EAAE,aAAa,EAAE,yBAAyB,EAAE,aAAa;IAC7G,WAAW,EAAE,cAAc,EAAE,iBAAiB,EAAE,oBAAoB,EAAE,gBAAgB,EAAE,oBAAoB;IAC5G,eAAe,EAAE,kBAAkB,EAAE,kBAAkB,EAAE,wBAAwB,EAAE,qBAAqB;IACxG,oBAAoB,EAAE,kBAAkB,EAAE,gBAAgB,EAAE,4BAA4B,EAAE,SAAS,EAAE,WAAW;IAChH,mBAAmB,EAAE,iBAAiB,EAAE,YAAY,EAAE,UAAU,EAAE,SAAS,EAAE,aAAa,EAAE,UAAU;IACtG,WAAW,EAAE,YAAY,EAAE,YAAY;CACxC,CAAC;AAEF,MAAM,QAAQ,GAAG,IAAI,GAAG,CAAC,SAAS,CAAC,CAAC;AACpC,MAAM,WAAW,GAAG,IAAI,GAAG,CAAC,WAAW,CAAC,CAAC;AACzC,MAAM,UAAU,GAAG,IAAI,GAAG,CAAC,UAAU,CAAC,CAAC;AACvC,MAAM,SAAS,GAAG,IAAI,GAAG,CAAC,UAAU,CAAC,CAAC;AAEtC;;;;;GAKG;AACH,CAAC;IACC,MAAM,MAAM,GAAG,IAAI,GAAG,CAAC,aAAa,CAAC,CAAC;IACtC,MAAM,OAAO,GAAG,CAAC,GAAG,IAAI,GAAG,CAAC,CAAC,GAAG,SAAS,EAAE,GAAG,WAAW,EAAE,GAAG,UAAU,EAAE,GAAG,UAAU,CAAC,CAAC,CAAC;SACvF,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;SAC7B,IAAI,EAAE,CAAC;IACV,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC;QACnB,MAAM,IAAI,KAAK,CAAC,yEAAyE,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACjH,CAAC;AACH,CAAC;AAGD,qFAAqF;AACrF,MAAM,CAAC,MAAM,eAAe,GAAsB,MAAM,CAAC,MAAM,CAAC,CAAC,GAAG,aAAa,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC;AAE3F;;;;GAIG;AACH,MAAM,UAAU,cAAc,CAAC,IAAY;IACzC,OAAO;QACL,YAAY,EAAE,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC;QAChC,eAAe,EAAE,WAAW,CAAC,GAAG,CAAC,IAAI,CAAC;QACtC,cAAc,EAAE,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC;QACpC,aAAa,EAAE,SAAS,CAAC,GAAG,CAAC,IAAI,CAAC;KACnC,CAAC;AACJ,CAAC;AAED;;;;;;;;GAQG;AACH,MAAM,UAAU,gBAAgB,CAAC,MAAiB;IAChD,MAAM,MAAM,GACV,CAAC,GAAiE,EAAE,EAAE,CACtE,CAAC,IAAY,EAAE,MAAe,EAAE,OAAgB,EAAE,EAAE;QAClD,MAAM,GAAG,GAAG,MAA6C,CAAC;QAC1D,IAAI,GAAG,IAAI,GAAG,CAAC,WAAW,KAAK,SAAS,EAAE,CAAC;YACzC,MAAM,GAAG,EAAE,GAAG,GAAG,EAAE,WAAW,EAAE,cAAc,CAAC,IAAI,CAAC,EAAE,CAAC;QACzD,CAAC;QACD,OAAO,GAAG,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,CAAC,CAAC;IACpC,CAAC,CAAC;IAEJ,MAAM,CAAC,GAAG,MAGT,CAAC;IAEF,CAAC,CAAC,YAAY,GAAG,MAAM,CAAC,CAAC,CAAC,YAAY,CAAC,IAAI,CAAC,MAAM,CAAU,CAAC,CAAC;IAE9D,gFAAgF;IAChF,2EAA2E;IAC3E,wDAAwD;IACxD,MAAM,KAAK,GAAG,CAAC,CAAC,YAAY,EAAE,KAAK,CAAC;IACpC,IAAI,KAAK,EAAE,gBAAgB,EAAE,CAAC;QAC5B,KAAK,CAAC,gBAAgB,GAAG,MAAM,CAAC,KAAK,CAAC,gBAAgB,CAAC,IAAI,CAAC,KAAK,CAAU,CAAC,CAAC;IAC/E,CAAC;AACH,CAAC"}
|
package/dist/capabilities.js
CHANGED
|
@@ -255,7 +255,7 @@ export function droppedToolMessage(name) {
|
|
|
255
255
|
* earlier would wrap nothing.
|
|
256
256
|
*
|
|
257
257
|
* 🔴 THIS DELIBERATELY DOES NOT REGISTER THE TOOL. Least-privilege by
|
|
258
|
-
* construction is the point of the drop: `tools/list` stays at
|
|
258
|
+
* construction is the point of the drop: `tools/list` stays at 282 and no
|
|
259
259
|
* withheld schema crosses the wire, so `wire_diff`, `token-cost` and every floor
|
|
260
260
|
* over the advertised surface are unmoved. The ONLY thing that changes is the
|
|
261
261
|
* sentence a caller gets back when it asks for one by name — which is the whole
|
package/dist/cli/doctor.js
CHANGED
|
@@ -356,7 +356,7 @@ export function checkCapabilities(config) {
|
|
|
356
356
|
status: "ok",
|
|
357
357
|
severity: "info",
|
|
358
358
|
detail: dropped.length === 0
|
|
359
|
-
? `${state} — full
|
|
359
|
+
? `${state} — full 295-tool surface`
|
|
360
360
|
: `${state} (secure default) — ${dropped.length} higher-trust tool(s) dropped from the surface`,
|
|
361
361
|
// The token list is DERIVED — `code-execution,network` was printed here
|
|
362
362
|
// for as long as the `network` group has been deleted, so the remedy
|
package/dist/cli/init.js
CHANGED
|
@@ -349,7 +349,7 @@ export async function runInit(argv, deps = {}) {
|
|
|
349
349
|
// Trust groups — surface the secure default so even a bare `init` teaches it.
|
|
350
350
|
say("");
|
|
351
351
|
if (privilegedGroups) {
|
|
352
|
-
say(`Higher-trust tool groups enabled: ${privilegedGroups} — the full
|
|
352
|
+
say(`Higher-trust tool groups enabled: ${privilegedGroups} — the full 295-tool surface loads.`);
|
|
353
353
|
}
|
|
354
354
|
else {
|
|
355
355
|
say("Higher-trust tool groups are OFF by default (the secure default). The assistant loads the");
|
package/dist/cli/tools.js
CHANGED
|
@@ -17,8 +17,8 @@
|
|
|
17
17
|
* container, and on a machine with no Godot installed.
|
|
18
18
|
*
|
|
19
19
|
* Two surfaces are reported, because the difference is the security story:
|
|
20
|
-
* • `full` — all
|
|
21
|
-
* • `secure-default` —
|
|
20
|
+
* • `full` — all 295 tools, what loads with BREAKPOINT_PRIVILEGED_GROUPS=all
|
|
21
|
+
* • `secure-default` — 282, what an untouched install actually advertises
|
|
22
22
|
* `--surface` picks which one populates `tools[]`; both counts are always in the
|
|
23
23
|
* header so a consumer cannot report one as the other by accident.
|
|
24
24
|
*/
|
package/dist/index.js
CHANGED
|
@@ -83,7 +83,7 @@ async function main() {
|
|
|
83
83
|
// below makes itself the OUTERMOST registerTool wrapper, so the earliest one
|
|
84
84
|
// installed is the LAST in the call chain and counts only what reached the SDK —
|
|
85
85
|
// after `applyCapabilities` dropped a privileged tool and after the toolset
|
|
86
|
-
// filter declined a whole group. Installed later it would count
|
|
86
|
+
// filter declined a whole group. Installed later it would count 295 attempts on
|
|
87
87
|
// every configuration and be wrong exactly on the default one. `applyWireDefaults`
|
|
88
88
|
// keeps its FIRST claim above: it wraps setRequestHandler, not registerTool.
|
|
89
89
|
const toolCensus = installToolCensus(server);
|
|
@@ -108,7 +108,7 @@ async function main() {
|
|
|
108
108
|
// Capability groups — a risk-based axis over the toolsets. `code-execution` is
|
|
109
109
|
// OFF by default; a disabled group's tools are DROPPED at
|
|
110
110
|
// registration (omitted from tools/list), so the secure-default surface is
|
|
111
|
-
//
|
|
111
|
+
// 295 − 13 = 282 tools. Enable via BREAKPOINT_PRIVILEGED_GROUPS. Wraps
|
|
112
112
|
// server.registerTool AFTER applyOutputSchemas (schema wrapper stays innermost).
|
|
113
113
|
const privilegedGroups = selectPrivilegedGroups(config.privilegedGroups, (unknown) => log(`ignoring unknown BREAKPOINT_PRIVILEGED_GROUPS token(s): ${unknown.join(", ")}`));
|
|
114
114
|
applyCapabilities(server, privilegedGroups);
|
|
@@ -127,7 +127,7 @@ async function main() {
|
|
|
127
127
|
// The A/B/C/D planes ARE the grouping. Build the ordered toolset registry
|
|
128
128
|
// (the single source of truth, shared with the registration tests) and
|
|
129
129
|
// register only the selected groups. Default (BREAKPOINT_TOOLSETS unset) =
|
|
130
|
-
// every group → the full
|
|
130
|
+
// every group → the full 295-tool surface, byte-identical to before. A filter
|
|
131
131
|
// lets a client that can't defer tools, or a user who wants a smaller default
|
|
132
132
|
// menu, load only the planes a project needs (GitHub-MCP `--toolsets` style).
|
|
133
133
|
let processes;
|
|
@@ -167,7 +167,7 @@ async function main() {
|
|
|
167
167
|
log(`toolsets enabled: ${[...enabled].sort().join(", ")} (${enabled.size}/${toolsets.length} groups)`);
|
|
168
168
|
}
|
|
169
169
|
// Recipes: a free, curated task-recipe layer exposed as MCP prompts (discoverable
|
|
170
|
-
// via prompts/list). Adds NO tools — the
|
|
170
|
+
// via prompts/list). Adds NO tools — the 295-tool count is unchanged — and drives
|
|
171
171
|
// the enforced tools above, so it's a skill-pack layer over typed/undoable tools.
|
|
172
172
|
registerRecipes(server);
|
|
173
173
|
// Always-on capability affordance — never behind a toolset or a privileged
|
|
@@ -180,7 +180,7 @@ async function main() {
|
|
|
180
180
|
// the SDK's `Tool <name> not found` — grammatical, accurate about the lookup,
|
|
181
181
|
// and wrong about the world. Must run AFTER every ts.run() above: the CallTool
|
|
182
182
|
// dispatcher does not exist until the first registerTool, and this wraps it.
|
|
183
|
-
// Advertises nothing new — tools/list is untouched at
|
|
183
|
+
// Advertises nothing new — tools/list is untouched at 282.
|
|
184
184
|
applyDroppedToolRefusal(server, privilegedGroups);
|
|
185
185
|
// 257 — the result-cost meter, off unless BREAKPOINT_RESULT_COST names a file.
|
|
186
186
|
// AFTER the refusal wrapper so a dropped tool's refusal is measured as the result
|
package/dist/paths.js
CHANGED
|
@@ -108,8 +108,11 @@ export function resolveWriteTarget(p, projectPath, opts = {}) {
|
|
|
108
108
|
const fsPath = resolveInsideProject(p, projectPath, label);
|
|
109
109
|
const exists = fs.existsSync(fsPath);
|
|
110
110
|
if (exists && !opts.overwrite) {
|
|
111
|
+
// 🆕 BP-0042 (1.89.0) — the closing sentence is a PARAMETER for a writer with no
|
|
112
|
+
// `overwrite` to offer: `runtime_screenshot_save` never replaces a file, so telling
|
|
113
|
+
// its caller to pass overwrite:true would name an argument the tool does not take.
|
|
111
114
|
refuse("exists", `Refusing to write ${label} ${JSON.stringify(p)}: ${fsPath} already exists. ` +
|
|
112
|
-
`Pass overwrite:true to replace it, or choose another path.`);
|
|
115
|
+
(opts.existsHint ?? `Pass overwrite:true to replace it, or choose another path.`));
|
|
113
116
|
}
|
|
114
117
|
return { fsPath, exists };
|
|
115
118
|
}
|
package/dist/paths.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"paths.js","sourceRoot":"","sources":["../src/paths.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"paths.js","sourceRoot":"","sources":["../src/paths.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,SAAS,CAAC;AACzB,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AAEzC;;;GAGG;AACH,MAAM,UAAU,QAAQ,CAAC,CAAS,EAAE,WAAmB;IACrD,IAAI,CAAC,CAAC,UAAU,CAAC,QAAQ,CAAC;QAAE,OAAO,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC,CAAC,KAAK,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC;IACpF,IAAI,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC;QAAE,OAAO,CAAC,CAAC;IACjC,OAAO,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC;AACnC,CAAC;AAED,0EAA0E;AAC1E,MAAM,UAAU,SAAS,CAAC,CAAS,EAAE,WAAmB;IACtD,OAAO,aAAa,CAAC,QAAQ,CAAC,CAAC,EAAE,WAAW,CAAC,CAAC,CAAC,IAAI,CAAC;AACtD,CAAC;AAED,qEAAqE;AACrE,MAAM,UAAU,YAAY,CAAC,OAAe;IAC1C,IAAI,CAAC;QACH,OAAO,EAAE,CAAC,YAAY,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;IAC1C,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,EAAE,CAAC;IACZ,CAAC;AACH,CAAC;AAwBD,SAAS,MAAM,CAAC,IAAY,EAAE,OAAe;IAC3C,qFAAqF;IACrF,sFAAsF;IACtF,mFAAmF;IACnF,sFAAsF;IACtF,qFAAqF;IACrF,eAAe;IACf,MAAM,OAAO,GAAgB,MAAM,CAAC,MAAM,CAAC,IAAI,KAAK,CAAC,OAAO,CAAC,EAAE,EAAE,OAAO,EAAE,IAAa,EAAE,IAAI,EAAE,CAAC,CAAC;IACjG,MAAM,OAAO,CAAC;AAChB,CAAC;AAED;;;;;;;;;;GAUG;AACH,MAAM,UAAU,cAAc,CAAC,MAAc,EAAE,IAAY;IACzD,OAAO,MAAM,KAAK,IAAI,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC;AAChE,CAAC;AAED;;;;;;;;GAQG;AACH,MAAM,UAAU,oBAAoB,CAAC,CAAS,EAAE,WAAmB,EAAE,KAAK,GAAG,MAAM;IACjF,MAAM,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,EAAE,WAAW,CAAC,CAAC,CAAC;IACtD,MAAM,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC;IACvC,IAAI,cAAc,CAAC,MAAM,EAAE,IAAI,CAAC,EAAE,CAAC;QACjC,MAAM,CACJ,sBAAsB,EACtB,YAAY,KAAK,IAAI,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,oBAAoB,MAAM,qBAAqB;YACrF,2BAA2B,IAAI,sDAAsD,CACtF,CAAC;IACJ,CAAC;IACD,OAAO,MAAM,CAAC;AAChB,CAAC;AAED;;;;;;;;;GASG;AACH,MAAM,UAAU,mBAAmB,CAAC,CAAS,EAAE,WAAmB,EAAE,KAAK,GAAG,MAAM;IAChF,MAAM,MAAM,GAAG,oBAAoB,CAAC,CAAC,EAAE,WAAW,EAAE,KAAK,CAAC,CAAC;IAC3D,IAAI,IAAc,CAAC;IACnB,IAAI,CAAC;QACH,IAAI,GAAG,EAAE,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;IAC7B,CAAC;IAAC,MAAM,CAAC;QACP,MAAM,CAAC,WAAW,EAAE,YAAY,KAAK,IAAI,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,mBAAmB,MAAM,IAAI,CAAC,CAAC;IAC3F,CAAC;IACD,IAAI,IAAI,CAAC,WAAW,EAAE,EAAE,CAAC;QACvB,MAAM,CACJ,YAAY,EACZ,YAAY,KAAK,IAAI,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,KAAK,MAAM,6BAA6B;YAC9E,GAAG,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,sDAAsD,CAAC,CAAC,CAAC,EAAE,GAAG,CAC7E,CAAC;IACJ,CAAC;IACD,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,EAAE,CAAC;QACnB,MAAM,CAAC,YAAY,EAAE,YAAY,KAAK,IAAI,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,KAAK,MAAM,yBAAyB,CAAC,CAAC;IACnG,CAAC;IACD,OAAO,MAAM,CAAC;AAChB,CAAC;AAED;;;;;;;GAOG;AACH,MAAM,UAAU,kBAAkB,CAChC,CAAS,EACT,WAAmB,EACnB,OAAqE,EAAE;IAEvE,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,IAAI,MAAM,CAAC;IACnC,MAAM,MAAM,GAAG,oBAAoB,CAAC,CAAC,EAAE,WAAW,EAAE,KAAK,CAAC,CAAC;IAC3D,MAAM,MAAM,GAAG,EAAE,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC;IACrC,IAAI,MAAM,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,CAAC;QAC9B,iFAAiF;QACjF,oFAAoF;QACpF,mFAAmF;QACnF,MAAM,CACJ,QAAQ,EACR,qBAAqB,KAAK,IAAI,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,KAAK,MAAM,mBAAmB;YAC7E,CAAC,IAAI,CAAC,UAAU,IAAI,4DAA4D,CAAC,CAClF,CAAC;IACJ,CAAC;IACD,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC;AAC5B,CAAC;AAgDD;;;;;;;;;GASG;AACH,MAAM,UAAU,iBAAiB,CAAC,CAAS,EAAE,WAAmB,EAAE,CAAe;IAC/E,MAAM,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,EAAE,WAAW,CAAC,CAAC,CAAC;IACtD,MAAM,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC;IACvC,MAAM,QAAQ,GAAG,CAAC,CAAC,CAAC,YAAY,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC;IACxD,IAAI,QAAQ,IAAI,cAAc,CAAC,MAAM,EAAE,IAAI,CAAC,EAAE,CAAC;QAC7C,MAAM,CACJ,sBAAsB,EACtB,YAAY,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,oBAAoB,MAAM,sBAAsB,CAAC,CAAC,IAAI,GAAG;YACtF,IAAI,IAAI,MAAM,CAAC,CAAC,UAAU,EAAE,CAC7B,CAAC;IACJ,CAAC;IACD,IAAI,IAAc,CAAC;IACnB,IAAI,CAAC;QACH,IAAI,GAAG,EAAE,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;IAC7B,CAAC;IAAC,MAAM,CAAC;QACP,MAAM,CAAC,gBAAgB,EAAE,YAAY,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,mBAAmB,MAAM,MAAM,CAAC,CAAC,WAAW,EAAE,CAAC,CAAC;IACxG,CAAC;IACD,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,EAAE,CAAC;QACnB,MAAM,CAAC,YAAY,EAAE,YAAY,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,KAAK,MAAM,iBAAiB,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;IACtH,CAAC;IACD,OAAO,MAAM,CAAC;AAChB,CAAC"}
|
package/dist/recipes.js
CHANGED
|
@@ -7,7 +7,7 @@
|
|
|
7
7
|
* it's **free** (MIT, shipped in the server), and it sits **over typed,
|
|
8
8
|
* schema-validated, undoable tools** — so the contract is executed by the
|
|
9
9
|
* server, not merely described in prose the model might misapply. Recipes are
|
|
10
|
-
* discoverable via MCP `prompts/list`; they add **no tools** (the
|
|
10
|
+
* discoverable via MCP `prompts/list`; they add **no tools** (the 295-tool
|
|
11
11
|
* count is unchanged) and cost nothing until a client pulls one.
|
|
12
12
|
*/
|
|
13
13
|
import { z } from "zod";
|
|
@@ -114,7 +114,7 @@ export function registerRecipes(server) {
|
|
|
114
114
|
return recipe("Golden-image regression check for a scene.", [
|
|
115
115
|
`Goal: lock a scene's look to a golden image at ${ref} and catch visual drift.`,
|
|
116
116
|
"",
|
|
117
|
-
`1. Establish the golden (first run only): godot_run_managed, drive the game to the state under test (runtime_inject_input / runtime_call_method), then
|
|
117
|
+
`1. Establish the golden (first run only): godot_run_managed, drive the game to the state under test (runtime_inject_input / runtime_call_method), then call runtime_screenshot_save {path: ${ref}} to write the frame. Commit it (vcs_add) so it's the reference, then godot_stop — this recipe runs the game more than once, and a game left running holds the runtime bridge port, so the next run is refused.`,
|
|
118
118
|
`2. Regression run (every time after): godot_run_managed, reproduce the same state, then runtime_screenshot_diff against ${ref} with tolerance ${tol} (pass a region to ignore volatile HUD areas). ok:true means no meaningful drift. godot_stop when the diff is in hand.`,
|
|
119
119
|
"3. On failure: the diff returns diff_ratio + differing_pixels — don't just eyeball it. runtime_get_tree / runtime_assert_node_state to find the node that changed, or dbg_* to break where the offending value is set. Update the golden deliberately (re-do step 1) only once you've confirmed the change is intended.",
|
|
120
120
|
"",
|
|
@@ -189,7 +189,7 @@ export function registerRecipes(server) {
|
|
|
189
189
|
`1. Boot + freeze: godot_run_project. runtime_time_scale{scale:0} to FREEZE the game (this pauses the SceneTree, so nothing advances on its own). If the run uses randomness, runtime_seed_rng{seed:...} first so the whole playtest is reproducible.`,
|
|
190
190
|
`2. Baseline: runtime_state_digest{root:"${root}"} to snapshot the frozen state (positions / visibility / modulate, stable-ordered) — this is your deterministic "before".`,
|
|
191
191
|
`3. Step: runtime_step_frames{frames:${frames}, kind:"physics"} to advance EXACTLY ${frames} frames while frozen (use kind:"both" to also tick _process each step). The game stays frozen afterwards, so your reads are stable.`,
|
|
192
|
-
`4. Assert: runtime_state_digest{root:"${root}"} (or runtime_assert_node_state) that the node reached the expected, frame-exact state, then runtime_screenshot_diff against ${ref} with tolerance ${tol} — because you stepped a fixed number of frames the frame is reproducible, so the diff is stable (establish ${ref} once with
|
|
192
|
+
`4. Assert: runtime_state_digest{root:"${root}"} (or runtime_assert_node_state) that the node reached the expected, frame-exact state, then runtime_screenshot_diff against ${ref} with tolerance ${tol} — because you stepped a fixed number of frames the frame is reproducible, so the diff is stable (establish ${ref} once with runtime_screenshot_save on the first green run, then vcs_add it).`,
|
|
193
193
|
`5. Iterate or thaw: repeat 3–4 to walk frame-by-frame (every step is deterministic), or runtime_time_scale{scale:1} to thaw and resume normal play. godot_stop when done. On a failed assert you are one dbg_set_breakpoints + dbg_launch away from the exact value that diverged.`,
|
|
194
194
|
"",
|
|
195
195
|
"Why this beats run-screenshot-guess: freezing plus fixed-frame stepping converts a timing-dependent check into a frame-exact, reproducible one the runtime_assert_* family can verify — the R tier of the W/R/E model, made deterministic.",
|
package/dist/recipes.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"recipes.js","sourceRoot":"","sources":["../src/recipes.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"recipes.js","sourceRoot":"","sources":["../src/recipes.ts"],"names":[],"mappings":"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"}
|