breakpoint-mcp 1.86.0 → 1.88.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (67) hide show
  1. package/README.md +1 -1
  2. package/addon/breakpoint_mcp/bridge_secret.gd +82 -0
  3. package/addon/breakpoint_mcp/error_remedies.gd +3 -0
  4. package/addon/breakpoint_mcp/operations.gd +1 -1
  5. package/addon/breakpoint_mcp/plugin.cfg +1 -1
  6. package/addon/breakpoint_mcp/plugin.gd +17 -2
  7. package/addon/breakpoint_mcp/runtime_bridge.gd +104 -2
  8. package/dist/annotations.js +3 -3
  9. package/dist/annotations.js.map +1 -1
  10. package/dist/capabilities.js +1 -1
  11. package/dist/cli/doctor.js +1 -1
  12. package/dist/cli/init.js +1 -1
  13. package/dist/cli/tools.js +2 -2
  14. package/dist/index.js +5 -5
  15. package/dist/mutation-guard.js +1 -1
  16. package/dist/mutation-guard.js.map +1 -1
  17. package/dist/recipes.js +1 -1
  18. package/dist/schemas.js +3 -0
  19. package/dist/schemas.js.map +1 -1
  20. package/dist/spawn-guard.js +10 -0
  21. package/dist/spawn-guard.js.map +1 -1
  22. package/dist/tool-census.js +2 -2
  23. package/dist/tools/assetgen.js +4 -4
  24. package/dist/tools/assetgen.js.map +1 -1
  25. package/dist/tools/backend.js +4 -4
  26. package/dist/tools/backend.js.map +1 -1
  27. package/dist/tools/cli.js +3 -1
  28. package/dist/tools/cli.js.map +1 -1
  29. package/dist/tools/dap.js +20 -25
  30. package/dist/tools/dap.js.map +1 -1
  31. package/dist/tools/editor/animation.js +1 -1
  32. package/dist/tools/editor/animation.js.map +1 -1
  33. package/dist/tools/editor/audio.js +4 -4
  34. package/dist/tools/editor/audio.js.map +1 -1
  35. package/dist/tools/editor/core.js +1 -1
  36. package/dist/tools/editor/core.js.map +1 -1
  37. package/dist/tools/editor/filesystem.js +1 -1
  38. package/dist/tools/editor/filesystem.js.map +1 -1
  39. package/dist/tools/editor/node.js +2 -2
  40. package/dist/tools/editor/node.js.map +1 -1
  41. package/dist/tools/editor/physics.js +1 -1
  42. package/dist/tools/editor/physics.js.map +1 -1
  43. package/dist/tools/editor/project_input_test.js +7 -7
  44. package/dist/tools/editor/project_input_test.js.map +1 -1
  45. package/dist/tools/editor/resource.js +5 -5
  46. package/dist/tools/editor/resource.js.map +1 -1
  47. package/dist/tools/editor/scene.js +5 -5
  48. package/dist/tools/editor/scene.js.map +1 -1
  49. package/dist/tools/editor/shader.js +2 -2
  50. package/dist/tools/editor/shader.js.map +1 -1
  51. package/dist/tools/editor/signal.js +1 -1
  52. package/dist/tools/editor/signal.js.map +1 -1
  53. package/dist/tools/editor/spatial.js +3 -3
  54. package/dist/tools/editor/spatial.js.map +1 -1
  55. package/dist/tools/editor/tiles.js +4 -4
  56. package/dist/tools/editor/tiles.js.map +1 -1
  57. package/dist/tools/editor/ui.js +5 -5
  58. package/dist/tools/editor/ui.js.map +1 -1
  59. package/dist/tools/netcode.js +4 -4
  60. package/dist/tools/netcode.js.map +1 -1
  61. package/dist/tools/processes.js +5 -3
  62. package/dist/tools/processes.js.map +1 -1
  63. package/dist/tools/runtime.js +28 -19
  64. package/dist/tools/runtime.js.map +1 -1
  65. package/dist/tools/tabletop.js +6 -6
  66. package/dist/tools/tabletop.js.map +1 -1
  67. package/package.json +3 -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. **293 tools
6
+ editor, Godot's own LSP + DAP, and a runtime bridge inside the running game. **294 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).
@@ -18,6 +18,17 @@ extends RefCounted
18
18
  ## addon. Defense-in-depth, not a remote-RCE fix (loopback already blocks the net).
19
19
 
20
20
  const SECRET_PATH := "res://.godot/breakpoint_mcp.secret"
21
+ ## The shortest BREAKPOINT_RUNTIME_SECRET an opted-in debug export accepts (see
22
+ ## runtime_listen_policy). The minted secret is 64 hex characters.
23
+ const EXPORT_SECRET_MIN_LEN := 32
24
+ ## 🆕 BP-0037 — the project setting that turns strict mode on (default false, opt-in through
25
+ ## 1.x). Under it the plugin registers no autoload, the game attaches runtime_bridge.gd
26
+ ## itself from its own debug-only code, and the bridge listens only with the switch.
27
+ const STRICT_SETTING := "breakpoint_mcp/runtime/strict"
28
+ ## 🆕 BP-0037 — the developer switch: this environment variable set to 1/true, or this user
29
+ ## argument after `--` on the game's command line.
30
+ const SWITCH_ENV := "BREAKPOINT_RUNTIME"
31
+ const SWITCH_ARG := "--breakpoint-runtime"
21
32
 
22
33
 
23
34
  ## Return the shared secret, minting + persisting a fresh one if none exists.
@@ -45,6 +56,77 @@ static func load_or_mint() -> String:
45
56
  return hex
46
57
 
47
58
 
59
+ ## 🔴 325 (BP-0023) — WHETHER THE RUNTIME BRIDGE MAY LISTEN AT ALL, decided before any
60
+ ## socket is opened or any file is touched. The plugin registers runtime_bridge.gd as an
61
+ ## autoload, and an autoload ships inside every export: a game built with this addon
62
+ ## switched on opened 127.0.0.1:9081 on every launch. Measured on macOS against the
63
+ ## official 4.7 release template (325): from an app bundle the game cannot write to — a
64
+ ## quarantined download, an App Store or administrator install — the mint fails and the
65
+ ## bridge ran with NO authentication, answering `runtime.call_method`; from a bundle it
66
+ ## can write to, it minted a secret INTO Contents/Resources/.godot/, a file written inside
67
+ ## the player's copy of a shipped app.
68
+ ##
69
+ ## The rule: listen only in a development run — a game started by an EDITOR build (the
70
+ ## editor's Run buttons, Breakpoint's own launchers, CI): see is_development_build for why
71
+ ## that is "editor" AND NOT "template". An exported DEBUG build may opt in with
72
+ ## BREAKPOINT_RUNTIME_EXPORTED=1, and only with its secret supplied in
73
+ ## BREAKPOINT_RUNTIME_SECRET (the same variable the host reads): an export never mints, so
74
+ ## it never writes into its own install and never runs open. A RELEASE export never
75
+ ## listens, whatever its environment says.
76
+ ##
77
+ ## Pure — no OS calls, no files — so the decision is unit-tested headless; the caller
78
+ ## passes the four facts in. `warn` is true only when someone ASKED for an exported
79
+ ## bridge and is being refused; a plain shipped game stays silent.
80
+ ##
81
+ ## 🆕 BP-0037 — TWO MORE FACTS, AND ONE TEST MOVED TO THE FRONT. `debug_build` is now read
82
+ ## FIRST, ahead of every other test: a build where OS.is_debug_build() is false never
83
+ ## listens, whatever else is true of it (the only such build that reaches here is a release
84
+ ## export, which already never listened, so nothing changes for a project that does not
85
+ ## opt in). `strict` is the project setting `breakpoint_mcp/runtime/strict` (STRICT_SETTING,
86
+ ## default false); when it is true the bridge listens only with the developer switch —
87
+ ## BREAKPOINT_RUNTIME=1 in the environment or `--breakpoint-runtime` after `--` — which
88
+ ## Breakpoint's own game launchers set (runtime_switch_on). Strict is opt-in through 1.x.
89
+ static func runtime_listen_policy(editor_build: bool, debug_build: bool, exported_optin: String, env_secret: String, strict: bool = false, switch_on: bool = false) -> Dictionary:
90
+ var optin := exported_optin.strip_edges().to_lower()
91
+ var asked := optin == "1" or optin == "true" or (strict and switch_on)
92
+ if not debug_build:
93
+ return {"listen": false, "secret_source": "", "warn": asked, "reason": "not a debug build (OS.is_debug_build() is false): the runtime bridge never listens in a release build, whatever its environment says"}
94
+ if strict and not switch_on:
95
+ return {"listen": false, "secret_source": "", "warn": optin == "1" or optin == "true", "reason": "strict mode (%s=true): the runtime bridge listens only with BREAKPOINT_RUNTIME=1 or --breakpoint-runtime" % STRICT_SETTING}
96
+ if editor_build:
97
+ return {"listen": true, "secret_source": "project", "warn": false, "reason": "development run (editor build)"}
98
+ if not (optin == "1" or optin == "true"):
99
+ return {"listen": false, "secret_source": "", "warn": false, "reason": "exported build: the runtime bridge listens only in development runs"}
100
+ if env_secret.strip_edges().length() < EXPORT_SECRET_MIN_LEN:
101
+ return {"listen": false, "secret_source": "", "warn": true, "reason": "BREAKPOINT_RUNTIME_EXPORTED=1 needs BREAKPOINT_RUNTIME_SECRET of at least %d characters; an exported build never mints its own" % EXPORT_SECRET_MIN_LEN}
102
+ # The validated secret travels IN the decision, so nothing downstream re-reads the
103
+ # environment and could see a different value from the one checked here.
104
+ return {"listen": true, "secret_source": "env", "secret": env_secret.strip_edges(), "warn": false, "reason": "debug export, opted in with BREAKPOINT_RUNTIME_EXPORTED"}
105
+
106
+
107
+ ## 🆕 BP-0037 — whether the developer switch is set. Pure, like the policy: the caller passes
108
+ ## OS.get_environment(SWITCH_ENV) and OS.get_cmdline_user_args().
109
+ static func runtime_switch_on(env_value: String, user_args: PackedStringArray) -> bool:
110
+ var v := env_value.strip_edges().to_lower()
111
+ return v == "1" or v == "true" or user_args.has(SWITCH_ARG)
112
+
113
+
114
+ ## 🆕 BP-0037 — whether this project is in strict mode. Strict only on a real `true`: a
115
+ ## missing setting, or any other value, is the 1.x default (not strict).
116
+ static func runtime_strict(setting_value: Variant) -> bool:
117
+ return typeof(setting_value) == TYPE_BOOL and bool(setting_value)
118
+
119
+
120
+ ## A development run is an EDITOR build that is NOT an export TEMPLATE. Both are compiled-in
121
+ ## feature tags, and the second condition is what makes the first trustworthy: custom
122
+ ## features — an export preset's list, or `_custom_features` in an override.cfg, which the
123
+ ## official templates read from beside the game by default — can ADD "editor" to a
124
+ ## template's tags but can never remove "template" (325, review finding 1). Pure, so both
125
+ ## halves are unit-tested; runtime_bridge.gd passes OS.has_feature() for each.
126
+ static func is_development_build(has_editor: bool, has_template: bool) -> bool:
127
+ return has_editor and not has_template
128
+
129
+
48
130
  ## Constant-time equality over the UTF-8 bytes of two strings. Folds any length
49
131
  ## difference into the result and always scans the longer input, so it never
50
132
  ## short-circuits on the first differing byte (no timing side channel on the
@@ -108,6 +108,9 @@ const RUNTIME_REMEDIES := {
108
108
  "set_ignored": "Check the property exists on this node with `runtime_get_property`, and that its setter accepts the value — nothing changed.",
109
109
  "bad_event_field": "Send the field tagged — `{\"__type__\": \"Vector2\", \"x\": .., \"y\": ..}` — or omit it and let the event land at its default position.",
110
110
  "bad_params": "Fix the parameter named above and call again — the message carries the accepted shape.",
111
+ "no_state_registry": "Set Engine metadata \"breakpoint_state\" to a Dictionary of name -> Callable from the game's own debug code, then call again.",
112
+ "unknown_state": "Call `runtime_read_state` without a name for the names the game registered, then pass one of them.",
113
+ "state_reader_gone": "Set the reader again from an object that is still alive, then call again.",
111
114
  }
112
115
 
113
116
 
@@ -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.16.0"
11
+ const ADDON_VERSION := "1.18.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.16.0"
6
+ version="1.18.0"
7
7
  script="plugin.gd"
@@ -14,6 +14,7 @@ extends EditorPlugin
14
14
  const BridgeServer := preload("res://addons/breakpoint_mcp/bridge_server.gd")
15
15
  const StatusDock := preload("res://addons/breakpoint_mcp/status_dock.gd")
16
16
  const PauseLatch := preload("res://addons/breakpoint_mcp/pause_latch.gd")
17
+ const BridgeSecret := preload("res://addons/breakpoint_mcp/bridge_secret.gd")
17
18
  const RUNTIME_AUTOLOAD := "BreakpointRuntimeBridge"
18
19
  const RUNTIME_SCRIPT := "res://addons/breakpoint_mcp/runtime_bridge.gd"
19
20
 
@@ -36,7 +37,15 @@ func _enter_tree() -> void:
36
37
  _dock = dock
37
38
  # Inject the runtime bridge into every run of the project so the runtime_*
38
39
  # tools work as soon as the game starts. Removed cleanly on disable.
39
- add_autoload_singleton(RUNTIME_AUTOLOAD, RUNTIME_SCRIPT)
40
+ # 🆕 BP-0037 — STRICT MODE (`breakpoint_mcp/runtime/strict=true`, opt-in through 1.x):
41
+ # the plugin neither adds nor removes the autoload. The game attaches the bridge itself,
42
+ # by path, from its own debug-only code (runtime_bridge.gd's header), so an export that
43
+ # leaves this folder out keeps no autoload entry pointing into it.
44
+ if _strict():
45
+ if ProjectSettings.has_setting("autoload/" + RUNTIME_AUTOLOAD):
46
+ push_warning("[breakpoint_mcp] strict mode is on but project.godot still registers the %s autoload; remove it (Project Settings > Globals > Autoload) and attach the bridge by path — strict mode never edits it" % RUNTIME_AUTOLOAD)
47
+ else:
48
+ add_autoload_singleton(RUNTIME_AUTOLOAD, RUNTIME_SCRIPT)
40
49
  # D3: emit resources/updated triggers. Selection + edited scene are reflected
41
50
  # in godot://editor-state; the edited tree in godot://scene-tree.
42
51
  _selection = EditorInterface.get_selection()
@@ -60,7 +69,8 @@ func _exit_tree() -> void:
60
69
  _selection = null
61
70
  if scene_changed.is_connected(_on_scene_changed):
62
71
  scene_changed.disconnect(_on_scene_changed)
63
- remove_autoload_singleton(RUNTIME_AUTOLOAD)
72
+ if not _strict():
73
+ remove_autoload_singleton(RUNTIME_AUTOLOAD)
64
74
  if _server:
65
75
  _server.shutdown()
66
76
  _server.queue_free()
@@ -70,6 +80,11 @@ func _exit_tree() -> void:
70
80
  print("[breakpoint_mcp] plugin disabled")
71
81
 
72
82
 
83
+ ## 🆕 BP-0037 — whether this project opted into strict mode (bridge_secret.gd).
84
+ func _strict() -> bool:
85
+ return BridgeSecret.runtime_strict(ProjectSettings.get_setting(BridgeSecret.STRICT_SETTING, false))
86
+
87
+
73
88
  ## D3: the editor selection changed — godot://editor-state reflects the selection.
74
89
  func _on_selection_changed() -> void:
75
90
  if _server:
@@ -2,7 +2,8 @@ extends Node
2
2
  ## Breakpoint Runtime Bridge — runs INSIDE the running game as an autoload.
3
3
  ##
4
4
  ## The editor plugin auto-registers this as an autoload singleton
5
- ## ("BreakpointRuntimeBridge"), so it is present whenever the project runs. It opens
5
+ ## ("BreakpointRuntimeBridge"), so it is present whenever the project runs. In a
6
+ ## development run — a game started by an editor build — it opens
6
7
  ## a loopback TCP server on 127.0.0.1:9081 (override BREAKPOINT_RUNTIME_PORT) speaking
7
8
  ## the SAME newline-delimited JSON protocol as the editor bridge, and exposes the
8
9
  ## live SceneTree: read/write properties, call methods, emit signals, inject
@@ -10,6 +11,21 @@ extends Node
10
11
  ##
11
12
  ## NOTE: this script is intentionally NOT @tool — it must run in the game, not
12
13
  ## the editor. All handlers run on the main thread (socket polled from _process).
14
+ ##
15
+ ## An EXPORTED game carries this autoload too, and there it stays closed: no socket, no
16
+ ## secret written, no logger hooked (325, BP-0023 — see bridge_secret.gd's
17
+ ## runtime_listen_policy for the one opt-in, debug exports only).
18
+ ##
19
+ ## STRICT MODE (BP-0037, opt-in through 1.x): a project that sets
20
+ ## `breakpoint_mcp/runtime/strict=true` gets no autoload from the plugin. The game attaches
21
+ ## this script itself, from its own debug-only code, by path — so an export preset that
22
+ ## leaves `addons/breakpoint_mcp/` out leaves no reference behind:
23
+ ## const BP := "res://addons/breakpoint_mcp/runtime_bridge.gd"
24
+ ## if OS.is_debug_build() and ResourceLoader.exists(BP):
25
+ ## var bridge: Node = load(BP).new()
26
+ ## bridge.name = "BreakpointRuntimeBridge"
27
+ ## get_tree().root.add_child.call_deferred(bridge)
28
+ ## and the bridge then listens only with BREAKPOINT_RUNTIME=1 or `--breakpoint-runtime`.
13
29
 
14
30
  ## The addon version this GAME is running, answered on `ping`.
15
31
  ##
@@ -20,7 +36,7 @@ extends Node
20
36
  ## and the process that is already running keeps the addon it loaded. Held in lockstep
21
37
  ## with `plugin.cfg` and with `operations.gd`'s copy by contract_check check 14, which
22
38
  ## exists because two of those literals disagreed for two releases.
23
- const ADDON_VERSION := "1.16.0"
39
+ const ADDON_VERSION := "1.18.0"
24
40
  const Codec := preload("res://addons/breakpoint_mcp/variant_json.gd")
25
41
  const Remedies := preload("res://addons/breakpoint_mcp/error_remedies.gd")
26
42
  const DEFAULT_PORT := 9081
@@ -88,9 +104,41 @@ var _tree_dirty: bool = false
88
104
  var _log_dirty: bool = false
89
105
  var _log_capture = null # registered Logger (Godot 4.5+) or null
90
106
  var _in_capture: bool = false
107
+ ## 🔴 325 (BP-0023): the listen decision, taken first in _ready (bridge_secret.gd's
108
+ ## runtime_listen_policy). Read by _setup_auth for where the secret comes from.
109
+ var _policy: Dictionary = {}
110
+
111
+
112
+ ## The facts the listen policy is decided on. A method and not inline so the
113
+ ## headless smoke can stand an exported build up inside an editor binary — the only
114
+ ## binary CI has — by overriding this one function and nothing else.
115
+ func _policy_facts() -> Dictionary:
116
+ return {
117
+ "editor_build": BridgeSecret.is_development_build(OS.has_feature("editor"), OS.has_feature("template")),
118
+ "debug_build": OS.is_debug_build(),
119
+ "exported_optin": OS.get_environment("BREAKPOINT_RUNTIME_EXPORTED"),
120
+ "env_secret": OS.get_environment("BREAKPOINT_RUNTIME_SECRET"),
121
+ # 🆕 BP-0037 — strict mode and its developer switch (bridge_secret.gd).
122
+ "strict": BridgeSecret.runtime_strict(ProjectSettings.get_setting(BridgeSecret.STRICT_SETTING, false)),
123
+ "switch": BridgeSecret.runtime_switch_on(OS.get_environment(BridgeSecret.SWITCH_ENV), OS.get_cmdline_user_args()),
124
+ }
91
125
 
92
126
 
93
127
  func _ready() -> void:
128
+ # 🔴 325 (BP-0023): an exported game must not open a control port. Decide before
129
+ # anything binds, mints, hooks the logger or connects to the tree; when the answer
130
+ # is no, this node stays in the tree inert — `push_log` still works for game code
131
+ # that calls it — and a shipped game prints nothing unless someone asked for the
132
+ # bridge and is being refused.
133
+ var f := _policy_facts()
134
+ _policy = BridgeSecret.runtime_listen_policy(bool(f["editor_build"]), bool(f["debug_build"]), String(f["exported_optin"]), String(f["env_secret"]), bool(f.get("strict", false)), bool(f.get("switch", false)))
135
+ if not bool(_policy["listen"]):
136
+ set_process(false)
137
+ if bool(_policy["warn"]):
138
+ push_warning("[breakpoint_runtime] not listening: %s" % _policy["reason"])
139
+ else:
140
+ print_verbose("[breakpoint_runtime] not listening: %s" % _policy["reason"])
141
+ return
94
142
  # Keep servicing requests even while the game is paused (e.g. at a breakpoint).
95
143
  process_mode = Node.PROCESS_MODE_ALWAYS
96
144
  var env_port := OS.get_environment("BREAKPOINT_RUNTIME_PORT")
@@ -119,6 +167,18 @@ func _ready() -> void:
119
167
  ## hatch). If the secret can't be persisted, run WITHOUT auth rather than
120
168
  ## bricking the bridge (a broken mint must not lock out the host).
121
169
  func _setup_auth() -> void:
170
+ # An opted-in debug export (325): the secret comes from the environment or not at all.
171
+ # Never minted — that would write into the game's own install — and never insecure:
172
+ # BREAKPOINT_BRIDGE_INSECURE is a development-run escape hatch only.
173
+ if String(_policy.get("secret_source", "")) == "env":
174
+ _secret = String(_policy.get("secret", ""))
175
+ _auth_required = true
176
+ if _secret.length() < BridgeSecret.EXPORT_SECRET_MIN_LEN:
177
+ # Unreachable through runtime_listen_policy, which never says listen without a
178
+ # valid secret — but if it ever did, fail CLOSED: a random secret nobody holds,
179
+ # never the empty string const_time_eq would match an empty `auth` against.
180
+ _secret = Crypto.new().generate_random_bytes(32).hex_encode()
181
+ return
122
182
  var insecure := OS.get_environment("BREAKPOINT_BRIDGE_INSECURE").to_lower()
123
183
  if insecure == "1" or insecure == "true":
124
184
  _auth_required = false
@@ -425,6 +485,8 @@ func _dispatch(method: String, params: Dictionary) -> Dictionary:
425
485
  return _state_digest(params)
426
486
  "runtime.seed_rng":
427
487
  return _seed_rng(params)
488
+ "runtime.read_state":
489
+ return _read_state(params)
428
490
  "runtime.step_frames":
429
491
  # Dispatched on the async lane (see _handle_line / _dispatch_async); this placeholder
430
492
  # keeps the static contract check (which scans _dispatch case labels) aware of the
@@ -1126,6 +1188,46 @@ func _anim_get_state(params: Dictionary) -> Dictionary:
1126
1188
  return _ok(_anim_state(ap))
1127
1189
 
1128
1190
 
1191
+ # ------------------------------------------- BP-0037 D: state the game exposes ----
1192
+
1193
+ ## The Engine metadata key a game registers its state readers under. The game needs no
1194
+ ## reference to this folder or any class in it — it writes a Dictionary of
1195
+ ## name -> Callable to Engine metadata from its own debug-only code:
1196
+ ## if OS.is_debug_build():
1197
+ ## var reg: Dictionary = Engine.get_meta(&"breakpoint_state", {})
1198
+ ## reg["mixer"] = _debug_mixer_state
1199
+ ## Engine.set_meta(&"breakpoint_state", reg)
1200
+ ## so it compiles and runs unchanged in an export that leaves addons/breakpoint_mcp/ out.
1201
+ const STATE_META := &"breakpoint_state"
1202
+
1203
+
1204
+ ## runtime.read_state — read-only by construction: it reads the registry and calls only
1205
+ ## what the game chose to register there. No `name` lists the registered names.
1206
+ func _read_state(params: Dictionary) -> Dictionary:
1207
+ if not Engine.has_meta(STATE_META) or typeof(Engine.get_meta(STATE_META)) != TYPE_DICTIONARY:
1208
+ return _err("no_state_registry", "The game registered no state readers: Engine metadata \"breakpoint_state\" is not a Dictionary of name -> Callable.")
1209
+ var reg: Dictionary = Engine.get_meta(STATE_META)
1210
+ var names: Array = []
1211
+ var by_name := {}
1212
+ for k in reg.keys():
1213
+ names.append(String(k))
1214
+ by_name[String(k)] = reg[k]
1215
+ names.sort()
1216
+ var state_name := String(params.get("name", ""))
1217
+ if state_name == "":
1218
+ return _ok({"names": names})
1219
+ if not by_name.has(state_name):
1220
+ return _err("unknown_state", "No state reader named \"%s\". Registered: %s" % [state_name, ", ".join(PackedStringArray(names)) if not names.is_empty() else "(none)"])
1221
+ var reader: Variant = by_name[state_name]
1222
+ if typeof(reader) != TYPE_CALLABLE or not (reader as Callable).is_valid():
1223
+ return _err("state_reader_gone", "The reader registered as \"%s\" is no longer callable — the object behind it was freed." % state_name)
1224
+ var args: Array = []
1225
+ for a in params.get("args", []):
1226
+ args.append(Codec.decode(a))
1227
+ var value: Variant = (reader as Callable).callv(args)
1228
+ return _ok({"names": names, "name": state_name, "value": Codec.encode(value)})
1229
+
1230
+
1129
1231
  # ----------------------------------------------------- F8: node lifecycle ----
1130
1232
 
1131
1233
  func _node_add(params: Dictionary) -> Dictionary:
@@ -14,7 +14,7 @@ const READ_ONLY = [
14
14
  "resource_load", "runtime_anim_get_state", "runtime_assert_node_state", "runtime_assert_perf",
15
15
  "runtime_assert_scene_structure", "runtime_assert_screen_text", "runtime_await_condition", "runtime_get_log",
16
16
  "runtime_get_monitors", "runtime_get_property", "runtime_get_tree", "runtime_screenshot",
17
- "runtime_peers_digest", "runtime_screenshot_diff", "runtime_state_digest", "scene_get_dependencies",
17
+ "runtime_peers_digest", "runtime_read_state", "runtime_screenshot_diff", "runtime_state_digest", "scene_get_dependencies",
18
18
  "scene_get_tree", "scene_list_open", "screenshot_editor", "selection_get", "signal_list",
19
19
  "signal_list_connections", "test_detect", "test_list", "tilemap_get_cell", "vcs_blame", "vcs_branch_list",
20
20
  "vcs_diff", "vcs_log", "vcs_show", "vcs_status",
@@ -85,7 +85,7 @@ const IDEMPOTENT = [
85
85
  "resource_set_import_settings", "resource_set_property", "rigidbody_set_properties", "runtime_anim_get_state",
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
- "runtime_get_property", "runtime_get_tree", "runtime_node_remove", "runtime_peer_stop", "runtime_peers_digest",
88
+ "runtime_get_property", "runtime_get_tree", "runtime_node_remove", "runtime_peer_stop", "runtime_peers_digest", "runtime_read_state",
89
89
  "runtime_screenshot", "runtime_screenshot_diff", "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",
@@ -156,7 +156,7 @@ export const ALL_ANNOTATED = [
156
156
  "runtime_anim_play", "runtime_anim_stop", "runtime_assert_node_state", "runtime_assert_perf",
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
- "runtime_inject_input", "runtime_node_add", "runtime_node_remove", "runtime_peer_stop", "runtime_peers_digest",
159
+ "runtime_inject_input", "runtime_node_add", "runtime_node_remove", "runtime_peer_stop", "runtime_peers_digest", "runtime_read_state",
160
160
  "runtime_screenshot", "runtime_screenshot_diff", "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",
@@ -1 +1 @@
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,yBAAyB,EAAE,sBAAsB,EAAE,wBAAwB;IACnG,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;IAC9G,oBAAoB,EAAE,yBAAyB,EAAE,kBAAkB,EAAE,sBAAsB;IAC3F,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;IAC9G,oBAAoB,EAAE,yBAAyB,EAAE,kBAAkB,EAAE,sBAAsB;IAC3F,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"}
1
+ {"version":3,"file":"annotations.js","sourceRoot":"","sources":["../src/annotations.ts"],"names":[],"mappings":"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"}
@@ -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 280 and no
258
+ * construction is the point of the drop: `tools/list` stays at 281 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
@@ -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 293-tool surface`
359
+ ? `${state} — full 294-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 293-tool surface loads.`);
352
+ say(`Higher-trust tool groups enabled: ${privilegedGroups} — the full 294-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 293 tools, what loads with BREAKPOINT_PRIVILEGED_GROUPS=all
21
- * • `secure-default` — 280, what an untouched install actually advertises
20
+ * • `full` — all 294 tools, what loads with BREAKPOINT_PRIVILEGED_GROUPS=all
21
+ * • `secure-default` — 281, 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 293 attempts on
86
+ // filter declined a whole group. Installed later it would count 294 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
- // 293 − 13 = 280 tools. Enable via BREAKPOINT_PRIVILEGED_GROUPS. Wraps
111
+ // 294 − 13 = 281 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 293-tool surface, byte-identical to before. A filter
130
+ // every group → the full 294-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 293-tool count is unchanged — and drives
170
+ // via prompts/list). Adds NO tools — the 294-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 280.
183
+ // Advertises nothing new — tools/list is untouched at 281.
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
@@ -50,7 +50,7 @@ const CONFIRM_FIELD = {
50
50
  confirm: z
51
51
  .boolean()
52
52
  .optional()
53
- .describe("Auto-approve this destructive action (skip the confirmation prompt)"),
53
+ .describe("Skip the confirmation prompt (auto-approve)"),
54
54
  };
55
55
  /** Apply one `registerTool` wrapper to BOTH registration paths. */
56
56
  function wrapBothPaths(server, inject) {
@@ -1 +1 @@
1
- {"version":3,"file":"mutation-guard.js","sourceRoot":"","sources":["../src/mutation-guard.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"mutation-guard.js","sourceRoot":"","sources":["../src/mutation-guard.ts"],"names":[],"mappings":"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"}
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 293-tool
10
+ * discoverable via MCP `prompts/list`; they add **no tools** (the 294-tool
11
11
  * count is unchanged) and cost nothing until a client pulls one.
12
12
  */
13
13
  import { z } from "zod";
package/dist/schemas.js CHANGED
@@ -774,6 +774,9 @@ export const outputSchemas = {
774
774
  speed_scale: z.number(),
775
775
  animations: z.array(z.string()),
776
776
  },
777
+ // 🆕 BP-0037 D — `names` always (what the game registered, sorted); `name` and `value`
778
+ // only when a reader was called.
779
+ runtime_read_state: { ...engineLog, names: z.array(z.string()), name: z.string().optional(), value: encodedValue.optional() },
777
780
  runtime_node_add: { ...engineLog, ...addedNode, added: z.boolean(), type: z.string() },
778
781
  runtime_node_remove: { ...engineLog, removed: z.boolean(), path: z.string() },
779
782
  // F4 additions: deterministic playtesting (time control / frame stepping / state digest / RNG seed).