@satelliteoflove/godot-mcp 3.15.0 → 3.16.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.
@@ -28,7 +28,8 @@ func watch_start(params: Dictionary) -> Dictionary:
28
28
  var specs: Array = params.get("specs", [])
29
29
  var hz: int = params.get("hz", 20)
30
30
  var duration_ms: int = params.get("duration_ms", 1000)
31
- var result = await _send_and_wait("watch_start", [specs, hz, duration_ms])
31
+ var sigs: Array = params.get("signals", [])
32
+ var result = await _send_and_wait("watch_start", [specs, hz, duration_ms, sigs])
32
33
  if result == null:
33
34
  return _last_error
34
35
  if result is Dictionary:
@@ -1063,23 +1063,26 @@ func _handle_watch_start(data: Array) -> void:
1063
1063
  var specs: Array = data[0] if data.size() > 0 else []
1064
1064
  var hz: int = data[1] if data.size() > 1 else 20
1065
1065
  var duration_ms: int = data[2] if data.size() > 2 else 1000
1066
- var start_result := _sampler.start(specs, hz, duration_ms)
1066
+ var signal_specs: Array = data[3] if data.size() > 3 else []
1067
+ var start_result := _sampler.start(specs, hz, duration_ms, signal_specs)
1067
1068
  EngineDebugger.send_message("godot_mcp:game_response", ["watch_start", {
1068
1069
  "started": true,
1069
1070
  "resolved_fields": start_result.get("resolved_fields", 0),
1071
+ "connected_signals": start_result.get("connected_signals", 0),
1072
+ "unresolved_signals": start_result.get("unresolved_signals", []),
1070
1073
  }])
1071
1074
 
1072
1075
 
1073
1076
  func _handle_watch_collect() -> void:
1074
1077
  if _sampler == null:
1075
- EngineDebugger.send_message("godot_mcp:game_response", ["watch_collect", {"window_ms": 0, "sample_count": 0, "fields": {}}])
1078
+ EngineDebugger.send_message("godot_mcp:game_response", ["watch_collect", {"window_ms": 0, "sample_count": 0, "fields": {}, "events": [], "events_truncated": false}])
1076
1079
  return
1077
1080
  EngineDebugger.send_message("godot_mcp:game_response", ["watch_collect", _sampler.collect()])
1078
1081
 
1079
1082
 
1080
1083
  func _handle_watch_stop() -> void:
1081
1084
  if _sampler == null:
1082
- EngineDebugger.send_message("godot_mcp:game_response", ["watch_stop", {"window_ms": 0, "sample_count": 0, "fields": {}}])
1085
+ EngineDebugger.send_message("godot_mcp:game_response", ["watch_stop", {"window_ms": 0, "sample_count": 0, "fields": {}, "events": [], "events_truncated": false}])
1083
1086
  return
1084
1087
  EngineDebugger.send_message("godot_mcp:game_response", ["watch_stop", _sampler.stop()])
1085
1088
 
@@ -3,6 +3,11 @@ class_name MCPRuntimeStateSampler
3
3
 
4
4
  const MAX_FIELDS := 32
5
5
  const MAX_SAMPLES_PER_FIELD := 200
6
+ const MAX_SIGNALS := 16
7
+ const MAX_EVENTS := 200
8
+ const MAX_ARGS_CHARS := 100 # total stringified-args cap per event
9
+ const MAX_ARG_CHARS := 40 # per-arg cap before joining
10
+ const MAX_SIGNAL_ARITY := 5
6
11
 
7
12
  var _active: bool = false
8
13
  var _specs: Array = [] # [{node, fields: [{key, resolver}]}]
@@ -13,11 +18,17 @@ var _stop_time: int = 0 # set on auto-stop or manual stop; 0 = still runnin
13
18
  var _frame_index: int = 0
14
19
  var _sample_interval: int = 1 # sample every N frames
15
20
  var _samples: Dictionary = {} # field_key -> Array of {t_ms, value}
21
+ var _events: Array = [] # [{t_ms, source, signal, args?}] -- signal emissions this window
22
+ var _events_truncated: bool = false
23
+ var _connections: Array = [] # [{node, sig_name, callable}] -- live connections to tear down
16
24
 
17
25
 
18
- func start(specs: Array, hz: int, duration_ms: int) -> Dictionary:
26
+ func start(specs: Array, hz: int, duration_ms: int, signal_specs: Array = []) -> Dictionary:
27
+ _disconnect_all() # a restart while connections are live must tear the old ones down
19
28
  _specs = []
20
29
  _samples = {}
30
+ _events = []
31
+ _events_truncated = false
21
32
  _hz = clampi(hz, 1, 60)
22
33
  _duration_ms = clampi(duration_ms, 100, 5000)
23
34
  _start_time = Time.get_ticks_msec()
@@ -52,7 +63,128 @@ func start(specs: Array, hz: int, duration_ms: int) -> Dictionary:
52
63
  _stop_time = 0
53
64
  _active = true
54
65
  set_process(true)
55
- return {"resolved_fields": field_count}
66
+
67
+ var connected := 0
68
+ var unresolved: Array = []
69
+ var seen := {}
70
+ for sig_spec in signal_specs:
71
+ if not sig_spec is Dictionary:
72
+ continue
73
+ var sig_path: String = str(sig_spec.get("path", ""))
74
+ var sig_name: String = str(sig_spec.get("signal", ""))
75
+ if sig_path.is_empty() or sig_name.is_empty():
76
+ continue
77
+ var emitter := _resolve_node(sig_path)
78
+ if emitter == null:
79
+ unresolved.append({"path": sig_path, "signal": sig_name, "reason": "node_not_found"})
80
+ continue
81
+ # Dedupe on the RESOLVED node, not the path string: two spellings of the
82
+ # same node ("/root/Scene/Child" vs "Child") would otherwise both
83
+ # connect (our lambdas are distinct Callables, so connect() would not
84
+ # reject the second one) and double-record every emission.
85
+ var dedupe_key := str(emitter.get_instance_id()) + "\n" + sig_name
86
+ if seen.has(dedupe_key):
87
+ unresolved.append({"path": sig_path, "signal": sig_name, "reason": "duplicate"})
88
+ continue
89
+ seen[dedupe_key] = true
90
+ if connected >= MAX_SIGNALS:
91
+ unresolved.append({"path": sig_path, "signal": sig_name, "reason": "signal_cap"})
92
+ continue
93
+ var arg_count := _signal_arg_count(emitter, sig_name)
94
+ if arg_count < 0:
95
+ unresolved.append({"path": sig_path, "signal": sig_name, "reason": "signal_not_found"})
96
+ continue
97
+ if arg_count > MAX_SIGNAL_ARITY:
98
+ unresolved.append({"path": sig_path, "signal": sig_name, "reason": "unsupported_arity"})
99
+ continue
100
+ var cb := _make_recorder(sig_path, sig_name, arg_count)
101
+ # Immediate (not deferred) connect: emission-time recording, and the
102
+ # recorder only appends to an Array -- safe inside main-thread physics
103
+ # callbacks. NOT safe for signals emitted off the main thread (worker
104
+ # threads, run_on_separate_thread physics): the append races collect().
105
+ # Deferred connect would fix that but quantizes t_ms to frame
106
+ # boundaries, destroying the exact-timing property -- documented as a
107
+ # main-thread-emission limitation instead.
108
+ if emitter.connect(StringName(sig_name), cb) != OK:
109
+ unresolved.append({"path": sig_path, "signal": sig_name, "reason": "connect_failed"})
110
+ continue
111
+ _connections.append({"node": emitter, "sig_name": sig_name, "callable": cb})
112
+ connected += 1
113
+
114
+ return {
115
+ "resolved_fields": field_count,
116
+ "connected_signals": connected,
117
+ "unresolved_signals": unresolved,
118
+ }
119
+
120
+
121
+ func _signal_arg_count(node: Node, sig_name: String) -> int:
122
+ # Covers script signals AND built-ins (body_entered etc.). -1 = not found.
123
+ for info in node.get_signal_list():
124
+ if str(info.get("name", "")) == sig_name:
125
+ return (info.get("args", []) as Array).size()
126
+ return -1
127
+
128
+
129
+ func _make_recorder(path: String, sig_name: String, arg_count: int) -> Callable:
130
+ # connect() requires the Callable arity to match the signal's; lambdas capture
131
+ # path/sig_name by value so no get_path() happens at record time.
132
+ match arg_count:
133
+ 0: return func() -> void: _record_event(path, sig_name, [])
134
+ 1: return func(a1) -> void: _record_event(path, sig_name, [a1])
135
+ 2: return func(a1, a2) -> void: _record_event(path, sig_name, [a1, a2])
136
+ 3: return func(a1, a2, a3) -> void: _record_event(path, sig_name, [a1, a2, a3])
137
+ 4: return func(a1, a2, a3, a4) -> void: _record_event(path, sig_name, [a1, a2, a3, a4])
138
+ _: return func(a1, a2, a3, a4, a5) -> void: _record_event(path, sig_name, [a1, a2, a3, a4, a5])
139
+
140
+
141
+ func _record_event(source: String, sig_name: String, args: Array) -> void:
142
+ if not _active:
143
+ return
144
+ if _events.size() >= MAX_EVENTS:
145
+ _events_truncated = true
146
+ return
147
+ var ev := {
148
+ "t_ms": Time.get_ticks_msec() - _start_time,
149
+ "source": source,
150
+ "signal": sig_name,
151
+ }
152
+ if not args.is_empty():
153
+ # Stringify AT RECORD TIME -- an arg object may be freed before collect().
154
+ # str() on an Object invokes its _to_string(); a _to_string() that mutates
155
+ # the tree is the game's bug, not ours.
156
+ ev["args"] = _stringify_args(args)
157
+ _events.append(ev)
158
+
159
+
160
+ func _stringify_args(args: Array) -> String:
161
+ var parts: PackedStringArray = []
162
+ for a in args:
163
+ var s := str(a)
164
+ if s.length() > MAX_ARG_CHARS:
165
+ s = s.substr(0, MAX_ARG_CHARS) + "..."
166
+ parts.append(s)
167
+ var joined := "[" + ", ".join(parts) + "]"
168
+ if joined.length() > MAX_ARGS_CHARS:
169
+ joined = joined.substr(0, MAX_ARGS_CHARS) + "..."
170
+ return joined
171
+
172
+
173
+ func _disconnect_all() -> void:
174
+ for c in _connections:
175
+ # UNTYPED on purpose: assigning a freed instance to a typed Node var is
176
+ # itself a script error that would abort this loop before
177
+ # is_instance_valid ever ran, leaving stale entries behind. Freed
178
+ # emitters drop their connections with the object; disconnecting a dead
179
+ # entry would error too, hence both guards.
180
+ var node = c.node
181
+ if is_instance_valid(node) and node.is_connected(StringName(c.sig_name), c.callable):
182
+ node.disconnect(StringName(c.sig_name), c.callable)
183
+ _connections.clear()
184
+
185
+
186
+ func _exit_tree() -> void:
187
+ _disconnect_all()
56
188
 
57
189
 
58
190
  func _process(_delta: float) -> void:
@@ -65,6 +197,10 @@ func _process(_delta: float) -> void:
65
197
  _active = false
66
198
  _stop_time = Time.get_ticks_msec()
67
199
  set_process(false)
200
+ # Window over: stop recording signal emissions too. An emission landing
201
+ # between duration_ms elapsing and this frame is recorded with t_ms
202
+ # slightly past the window -- harmless and honest.
203
+ _disconnect_all()
68
204
  return
69
205
 
70
206
  _frame_index += 1
@@ -72,7 +208,9 @@ func _process(_delta: float) -> void:
72
208
  return
73
209
 
74
210
  for spec in _specs:
75
- var node: Node = spec.node
211
+ # Untyped: a typed assignment of a freed instance is a script error that
212
+ # would abort the whole sampling pass (same hazard as _disconnect_all).
213
+ var node = spec.node
76
214
  if not is_instance_valid(node):
77
215
  # node was freed — mark all fields and skip
78
216
  for field_info in spec.fields:
@@ -105,13 +243,21 @@ func collect() -> Dictionary:
105
243
  "window_ms": elapsed,
106
244
  "sample_count": total_samples,
107
245
  "fields": _samples.duplicate(true),
246
+ # duplicate: a mid-window collect leaves recording live, so the caller's
247
+ # copy must not alias the still-growing array.
248
+ "events": _events.duplicate(true),
249
+ "events_truncated": _events_truncated,
108
250
  }
109
251
 
110
252
 
111
253
  func stop() -> Dictionary:
112
254
  _active = false
113
- _stop_time = Time.get_ticks_msec()
255
+ # Don't clobber an auto-stop's timestamp: a late manual stop would inflate
256
+ # window_ms to the call time instead of the actual window end.
257
+ if _stop_time == 0:
258
+ _stop_time = Time.get_ticks_msec()
114
259
  set_process(false)
260
+ _disconnect_all()
115
261
  return collect()
116
262
 
117
263
 
@@ -124,10 +270,24 @@ func _resolve_node(path: String) -> Node:
124
270
  if tree == null:
125
271
  return null
126
272
  var scene_root := tree.current_scene
273
+
274
+ # "/" means the scene root, NOT the root Window -- keep ahead of the absolute
275
+ # attempt or a bare-/ NodePath would return the Window.
276
+ if path == "/":
277
+ return scene_root
278
+
279
+ # Absolute paths resolve from /root regardless of current_scene -- this is
280
+ # what makes autoloads (/root/G) watchable, including during scene
281
+ # transitions when current_scene is null.
282
+ if path.begins_with("/") and tree.root != null:
283
+ var abs_hit := tree.root.get_node_or_null(NodePath(path))
284
+ if abs_hit != null:
285
+ return abs_hit
286
+
127
287
  if scene_root == null:
128
288
  return null
129
289
 
130
- if path == "/root/" + scene_root.name or path == "/":
290
+ if path == "/root/" + scene_root.name:
131
291
  return scene_root
132
292
 
133
293
  if path.begins_with("/root/"):
@@ -190,6 +350,13 @@ func _read_field(node: Node, key: String) -> Variant:
190
350
  return (node as AnimationPlayer).current_animation
191
351
  if node is AnimatedSprite2D:
192
352
  return (node as AnimatedSprite2D).animation
353
+ if node is AnimationTree:
354
+ # Only state-machine roots expose parameters/playback; BlendTree
355
+ # and other roots fall through to null (silent skip, matching the
356
+ # other inapplicable-field arms).
357
+ var playback = node.get("parameters/playback")
358
+ if playback is AnimationNodeStateMachinePlayback:
359
+ return String(playback.get_current_node())
193
360
  "anim_frame":
194
361
  if node is AnimatedSprite2D:
195
362
  return (node as AnimatedSprite2D).frame
package/addon/plugin.cfg CHANGED
@@ -3,6 +3,6 @@
3
3
  name="Godot MCP"
4
4
  description="Model Context Protocol server for AI assistant integration"
5
5
  author="godot-mcp"
6
- version="3.15.0"
6
+ version="3.16.0"
7
7
  script="plugin.gd"
8
8
  godot_version_min="4.5"
@@ -1,6 +1,6 @@
1
1
  import { describe, it, expect, beforeEach } from 'vitest';
2
2
  import { createMockGodot, createToolContext, structuredOf, } from '../helpers/mock-godot.js';
3
- import { runtimeState, summarizeNumericField, summarizeStringField, } from '../../tools/runtime-state.js';
3
+ import { runtimeState, summarizeNumericField, summarizeStringField, buildTimeline, } from '../../tools/runtime-state.js';
4
4
  describe('runtimeState tool', () => {
5
5
  let mock;
6
6
  beforeEach(() => {
@@ -55,6 +55,34 @@ describe('runtimeState tool', () => {
55
55
  expect(runtimeState.schema.safeParse({ action: 'watch_collect' }).success).toBe(true);
56
56
  expect(runtimeState.schema.safeParse({ action: 'watch_stop' }).success).toBe(true);
57
57
  });
58
+ it('accepts a signals-only watch_start (no specs)', () => {
59
+ expect(runtimeState.schema.safeParse({
60
+ action: 'watch_start',
61
+ signals: [{ path: '/root/G', signal: 'wave_started' }],
62
+ }).success).toBe(true);
63
+ });
64
+ it('accepts watch_start with both specs and signals', () => {
65
+ expect(runtimeState.schema.safeParse({
66
+ action: 'watch_start',
67
+ specs: [{ path: '/root/Player', fields: ['pos.x'] }],
68
+ signals: [{ path: '/root/Player', signal: 'died' }],
69
+ }).success).toBe(true);
70
+ });
71
+ it('rejects watch_start with neither specs nor signals (incl. empty arrays)', () => {
72
+ expect(runtimeState.schema.safeParse({ action: 'watch_start' }).success).toBe(false);
73
+ expect(runtimeState.schema.safeParse({ action: 'watch_start', specs: [], signals: [] }).success).toBe(false);
74
+ });
75
+ it('rejects more than 16 signals', () => {
76
+ const signals = Array.from({ length: 17 }, (_, i) => ({ path: `/root/E${i}`, signal: 'fired' }));
77
+ expect(runtimeState.schema.safeParse({ action: 'watch_start', signals }).success).toBe(false);
78
+ });
79
+ it('rejects a signal entry missing the signal name', () => {
80
+ expect(runtimeState.schema.safeParse({ action: 'watch_start', signals: [{ path: '/root/G' }] }).success).toBe(false);
81
+ });
82
+ it('rejects blank signal paths and names (blank entries would skew the drop detection)', () => {
83
+ expect(runtimeState.schema.safeParse({ action: 'watch_start', signals: [{ path: '', signal: 'died' }] }).success).toBe(false);
84
+ expect(runtimeState.schema.safeParse({ action: 'watch_start', signals: [{ path: '/root/G', signal: '' }] }).success).toBe(false);
85
+ });
58
86
  });
59
87
  // ── digest ───────────────────────────────────────────────────────────────
60
88
  describe('digest', () => {
@@ -136,8 +164,8 @@ describe('runtimeState tool', () => {
136
164
  });
137
165
  // ── watch_start ──────────────────────────────────────────────────────────
138
166
  describe('watch_start', () => {
139
- it('calls watch_start with specs, hz, duration_ms and returns confirmation', async () => {
140
- mock.mockResponse({ started: true });
167
+ it('calls watch_start with specs, hz, duration_ms and returns a structured confirmation', async () => {
168
+ mock.mockResponse({ started: true, resolved_fields: 2 });
141
169
  const ctx = createToolContext(mock);
142
170
  const result = await runtimeState.execute({
143
171
  action: 'watch_start',
@@ -145,8 +173,11 @@ describe('runtimeState tool', () => {
145
173
  hz: 30,
146
174
  duration_ms: 500,
147
175
  }, ctx);
148
- expect(typeof result).toBe('string');
149
- expect(result).toContain('500');
176
+ const data = structuredOf(result);
177
+ expect(data.started).toBe(true);
178
+ expect(data.note).toContain('500');
179
+ expect(data.resolved_fields).toBe(2);
180
+ expect(data.warnings).toEqual([]);
150
181
  expect(mock.calls[0].command).toBe('watch_start');
151
182
  expect(mock.calls[0].params.hz).toBe(30);
152
183
  expect(mock.calls[0].params.duration_ms).toBe(500);
@@ -158,6 +189,101 @@ describe('runtimeState tool', () => {
158
189
  expect(mock.calls[0].params.hz).toBe(20);
159
190
  expect(mock.calls[0].params.duration_ms).toBe(1000);
160
191
  });
192
+ it('passes signals through and defaults them to [] when omitted', async () => {
193
+ mock.mockResponse({ started: true, resolved_fields: 1 });
194
+ const ctx = createToolContext(mock);
195
+ await runtimeState.execute({ action: 'watch_start', specs: [{ path: '/root/Player', fields: ['pos.x'] }] }, ctx);
196
+ expect(mock.calls[0].params.signals).toEqual([]);
197
+ mock.mockResponse({ started: true, connected_signals: 1, unresolved_signals: [] });
198
+ await runtimeState.execute({ action: 'watch_start', signals: [{ path: '/root/G', signal: 'wave_started' }] }, ctx);
199
+ expect(mock.calls[1].params.signals).toEqual([{ path: '/root/G', signal: 'wave_started' }]);
200
+ expect(mock.calls[1].params.specs).toEqual([]);
201
+ });
202
+ it('reports the connected signal count structurally', async () => {
203
+ mock.mockResponse({ started: true, resolved_fields: 0, connected_signals: 2, unresolved_signals: [] });
204
+ const ctx = createToolContext(mock);
205
+ const result = await runtimeState.execute({
206
+ action: 'watch_start',
207
+ signals: [
208
+ { path: '/root/G', signal: 'wave_started' },
209
+ { path: '/root/Player', signal: 'died' },
210
+ ],
211
+ }, ctx);
212
+ const data = structuredOf(result);
213
+ expect(data.connected_signals).toBe(2);
214
+ expect(data.unresolved_signals).toEqual([]);
215
+ expect(data.warnings).toEqual([]);
216
+ });
217
+ it('passes unresolved signals through structurally and names them in warnings', async () => {
218
+ mock.mockResponse({
219
+ started: true,
220
+ resolved_fields: 0,
221
+ connected_signals: 0,
222
+ unresolved_signals: [{ path: '/root/Bogus', signal: 'died', reason: 'node_not_found' }],
223
+ });
224
+ const ctx = createToolContext(mock);
225
+ const result = await runtimeState.execute({ action: 'watch_start', signals: [{ path: '/root/Bogus', signal: 'died' }] }, ctx);
226
+ const data = structuredOf(result);
227
+ expect(data.unresolved_signals).toEqual([{ path: '/root/Bogus', signal: 'died', reason: 'node_not_found' }]);
228
+ expect(data.warnings.some((w) => w.includes('/root/Bogus:died (node_not_found)'))).toBe(true);
229
+ });
230
+ it('does not warn about 0 fields on a signals-only watch', async () => {
231
+ mock.mockResponse({ started: true, resolved_fields: 0, connected_signals: 1, unresolved_signals: [] });
232
+ const ctx = createToolContext(mock);
233
+ const result = await runtimeState.execute({ action: 'watch_start', signals: [{ path: '/root/G', signal: 'wave_started' }] }, ctx);
234
+ expect(structuredOf(result).warnings).toEqual([]);
235
+ });
236
+ it('still warns when specs were requested but none resolved', async () => {
237
+ mock.mockResponse({ started: true, resolved_fields: 0 });
238
+ const ctx = createToolContext(mock);
239
+ const result = await runtimeState.execute({ action: 'watch_start', specs: [{ path: '/root/Nope', fields: ['pos.x'] }] }, ctx);
240
+ expect(structuredOf(result).warnings.some((w) => w.includes('0 fields resolved'))).toBe(true);
241
+ });
242
+ it('detects an addon that predates the timeline (signals silently ignored)', async () => {
243
+ // Old game bridge: response has no connected_signals key at all.
244
+ mock.mockResponse({ started: true, resolved_fields: 1 });
245
+ const ctx = createToolContext(mock);
246
+ const result = await runtimeState.execute({
247
+ action: 'watch_start',
248
+ specs: [{ path: '/root/Player', fields: ['pos.x'] }],
249
+ signals: [{ path: '/root/G', signal: 'wave_started' }],
250
+ }, ctx);
251
+ const data = structuredOf(result);
252
+ expect(data.warnings.some((w) => w.includes('update the godot-mcp addon'))).toBe(true);
253
+ });
254
+ it('detects a stale editor relay dropping signal specs in transit', async () => {
255
+ // New bridge (keys present) but fewer accounted-for signals than requested:
256
+ // the editor-loaded relay predates the 4th wire element.
257
+ mock.mockResponse({ started: true, resolved_fields: 0, connected_signals: 0, unresolved_signals: [] });
258
+ const ctx = createToolContext(mock);
259
+ const result = await runtimeState.execute({
260
+ action: 'watch_start',
261
+ signals: [
262
+ { path: '/root/G', signal: 'wave_started' },
263
+ { path: '/root/G', signal: 'score_changed' },
264
+ ],
265
+ }, ctx);
266
+ const data = structuredOf(result);
267
+ expect(data.warnings.some((w) => w.includes('restart the Godot editor'))).toBe(true);
268
+ });
269
+ it('raises no skew warning when every requested signal is accounted for', async () => {
270
+ mock.mockResponse({
271
+ started: true,
272
+ resolved_fields: 0,
273
+ connected_signals: 1,
274
+ unresolved_signals: [{ path: '/root/Bogus', signal: 'nope', reason: 'node_not_found' }],
275
+ });
276
+ const ctx = createToolContext(mock);
277
+ const result = await runtimeState.execute({
278
+ action: 'watch_start',
279
+ signals: [
280
+ { path: '/root/G', signal: 'wave_started' },
281
+ { path: '/root/Bogus', signal: 'nope' },
282
+ ],
283
+ }, ctx);
284
+ const data = structuredOf(result);
285
+ expect(data.warnings.some((w) => w.includes('restart') || w.includes('update'))).toBe(false);
286
+ });
161
287
  });
162
288
  // ── watch_collect ────────────────────────────────────────────────────────
163
289
  describe('watch_collect', () => {
@@ -209,6 +335,69 @@ describe('runtimeState tool', () => {
209
335
  expect(summary.changes).toHaveLength(1);
210
336
  expect(summary.changes[0]).toEqual({ t_ms: 350, from: 'idle', to: 'run' });
211
337
  });
338
+ it('merges signal events and string transitions into a time-sorted timeline', async () => {
339
+ const raw = {
340
+ window_ms: 1000,
341
+ sample_count: 4,
342
+ fields: {
343
+ '/root/Player:anim': [
344
+ { t_ms: 0, value: 'idle' },
345
+ { t_ms: 400, value: 'run' },
346
+ ],
347
+ '/root/Player:state': [
348
+ { t_ms: 0, value: 'alive' },
349
+ { t_ms: 900, value: 'dead' },
350
+ ],
351
+ // Numeric events (zero_cross here) must stay per-field only.
352
+ '/root/Player:vel.x': [
353
+ { t_ms: 0, value: 0 },
354
+ { t_ms: 600, value: 5 },
355
+ ],
356
+ },
357
+ events: [
358
+ { t_ms: 120, source: '/root/G', signal: 'wave_started', args: '[2]' },
359
+ { t_ms: 880, source: '/root/Player', signal: 'died' },
360
+ ],
361
+ events_truncated: false,
362
+ };
363
+ mock.mockResponse(raw);
364
+ const ctx = createToolContext(mock);
365
+ const result = await runtimeState.execute({ action: 'watch_collect' }, ctx);
366
+ const data = structuredOf(result);
367
+ expect(data.timeline.map((e) => [e.t_ms, e.kind])).toEqual([
368
+ [120, 'signal'],
369
+ [400, 'anim_transition'],
370
+ [880, 'signal'],
371
+ [900, 'field_change'],
372
+ ]);
373
+ expect(data.timeline[0].args).toBe('[2]');
374
+ expect(data.timeline[1]).toEqual({
375
+ t_ms: 400, kind: 'anim_transition', source: '/root/Player', from: 'idle', to: 'run',
376
+ });
377
+ expect(data.timeline[3].field).toBe('state');
378
+ expect(data.timeline_truncated).toBe(false);
379
+ // numeric zero_cross stayed per-field
380
+ expect(data.fields['/root/Player:vel.x'].events).toHaveLength(1);
381
+ });
382
+ it('keeps a stable shape against pre-timeline addons (no events key)', async () => {
383
+ mock.mockResponse({ window_ms: 500, sample_count: 0, fields: {} });
384
+ const ctx = createToolContext(mock);
385
+ const data = structuredOf(await runtimeState.execute({ action: 'watch_collect' }, ctx));
386
+ expect(data.timeline).toEqual([]);
387
+ expect(data.timeline_truncated).toBe(false);
388
+ });
389
+ it('surfaces event truncation as timeline_truncated', async () => {
390
+ mock.mockResponse({
391
+ window_ms: 500,
392
+ sample_count: 0,
393
+ fields: {},
394
+ events: [{ t_ms: 1, source: '/root/A', signal: 'spam' }],
395
+ events_truncated: true,
396
+ });
397
+ const ctx = createToolContext(mock);
398
+ const data = structuredOf(await runtimeState.execute({ action: 'watch_collect' }, ctx));
399
+ expect(data.timeline_truncated).toBe(true);
400
+ });
212
401
  });
213
402
  // ── watch_stop ───────────────────────────────────────────────────────────
214
403
  describe('watch_stop', () => {
@@ -234,6 +423,59 @@ describe('runtimeState tool', () => {
234
423
  });
235
424
  });
236
425
  });
426
+ // ── buildTimeline unit tests ─────────────────────────────────────────────────
427
+ describe('buildTimeline', () => {
428
+ it('returns [] for no events and no fields', () => {
429
+ expect(buildTimeline([], {})).toEqual([]);
430
+ });
431
+ it('omits args when the event carries none', () => {
432
+ const [entry] = buildTimeline([{ t_ms: 5, source: '/root/A', signal: 'fired' }], {});
433
+ expect(entry).toEqual({ t_ms: 5, kind: 'signal', source: '/root/A', name: 'fired' });
434
+ expect('args' in entry).toBe(false);
435
+ });
436
+ it('splits field keys on the LAST colon (paths may contain colons)', () => {
437
+ const fields = {
438
+ '/root/Player:anim': { start: 'a', end: 'b', changes: [{ t_ms: 10, from: 'a', to: 'b' }] },
439
+ };
440
+ const [entry] = buildTimeline([], fields);
441
+ expect(entry).toEqual({ t_ms: 10, kind: 'anim_transition', source: '/root/Player', from: 'a', to: 'b' });
442
+ });
443
+ it('orders t_ms ties deterministically: signal < anim_transition < field_change', () => {
444
+ const fields = {
445
+ '/root/P:state': { start: 'x', end: 'y', changes: [{ t_ms: 100, from: 'x', to: 'y' }] },
446
+ '/root/P:anim': { start: 'a', end: 'b', changes: [{ t_ms: 100, from: 'a', to: 'b' }] },
447
+ };
448
+ const events = [{ t_ms: 100, source: '/root/P', signal: 'tick' }];
449
+ expect(buildTimeline(events, fields).map((e) => e.kind)).toEqual([
450
+ 'signal',
451
+ 'anim_transition',
452
+ 'field_change',
453
+ ]);
454
+ });
455
+ it('preserves emission order for same-millisecond signal bursts (stable sort)', () => {
456
+ const events = [
457
+ { t_ms: 100, source: '/root/G', signal: 'score_changed', args: '[111]' },
458
+ { t_ms: 100, source: '/root/G', signal: 'wave_changed', args: '[2]' },
459
+ { t_ms: 100, source: '/root/G', signal: 'score_changed', args: '[222]' },
460
+ ];
461
+ // An alphabetical tiebreak would reorder to score, score, wave and destroy
462
+ // the real emission order — buffer order must survive the sort.
463
+ expect(buildTimeline(events, {}).map((e) => (e.kind === 'signal' ? e.args : ''))).toEqual([
464
+ '[111]',
465
+ '[2]',
466
+ '[222]',
467
+ ]);
468
+ });
469
+ it('ignores numeric field summaries entirely', () => {
470
+ const fields = {
471
+ '/root/P:vel.x': {
472
+ start: 0, end: 5, min: 0, max: 5, mean: 2.5, slope: 5,
473
+ events: [{ t_ms: 50, from: 0, to: 5, kind: 'zero_cross' }],
474
+ },
475
+ };
476
+ expect(buildTimeline([], fields)).toEqual([]);
477
+ });
478
+ });
237
479
  // ── summarizeNumericField unit tests ─────────────────────────────────────────
238
480
  describe('summarizeNumericField', () => {
239
481
  it('returns zeros for empty input', () => {
@@ -1 +1 @@
1
- {"version":3,"file":"runtime-state.test.js","sourceRoot":"","sources":["../../../src/__tests__/tools/runtime-state.test.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"runtime-state.test.js","sourceRoot":"","sources":["../../../src/__tests__/tools/runtime-state.test.ts"],"names":[],"mappings":"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"}
@@ -4,6 +4,12 @@ interface WatchRawSample {
4
4
  t_ms: number;
5
5
  value: number | string;
6
6
  }
7
+ interface WatchRawEvent {
8
+ t_ms: number;
9
+ source: string;
10
+ signal: string;
11
+ args?: string;
12
+ }
7
13
  export interface NumericFieldSummary {
8
14
  start: number;
9
15
  end: number;
@@ -29,6 +35,27 @@ export interface StringFieldSummary {
29
35
  }
30
36
  export declare function summarizeNumericField(samples: WatchRawSample[], windowMs: number): NumericFieldSummary;
31
37
  export declare function summarizeStringField(samples: WatchRawSample[]): StringFieldSummary;
38
+ export type TimelineEntry = {
39
+ t_ms: number;
40
+ kind: 'signal';
41
+ source: string;
42
+ name: string;
43
+ args?: string;
44
+ } | {
45
+ t_ms: number;
46
+ kind: 'anim_transition';
47
+ source: string;
48
+ from: string;
49
+ to: string;
50
+ } | {
51
+ t_ms: number;
52
+ kind: 'field_change';
53
+ source: string;
54
+ field: string;
55
+ from: string;
56
+ to: string;
57
+ };
58
+ export declare function buildTimeline(events: WatchRawEvent[], fields: Record<string, NumericFieldSummary | StringFieldSummary>): TimelineEntry[];
32
59
  export declare const runtimeState: import("../core/types.js").ToolDefinition<z.ZodDiscriminatedUnion<[z.ZodObject<{
33
60
  action: z.ZodLiteral<"digest">;
34
61
  select: z.ZodOptional<z.ZodEnum<{
@@ -44,18 +71,22 @@ export declare const runtimeState: import("../core/types.js").ToolDefinition<z.Z
44
71
  max_nodes: z.ZodOptional<z.ZodNumber>;
45
72
  include: z.ZodOptional<z.ZodArray<z.ZodEnum<{
46
73
  transform: "transform";
47
- velocity: "velocity";
48
74
  anim: "anim";
75
+ velocity: "velocity";
49
76
  groups: "groups";
50
77
  onscreen: "onscreen";
51
78
  state: "state";
52
79
  }>>>;
53
80
  }, z.core.$strip>, z.ZodObject<{
54
81
  action: z.ZodLiteral<"watch_start">;
55
- specs: z.ZodArray<z.ZodObject<{
82
+ specs: z.ZodOptional<z.ZodArray<z.ZodObject<{
56
83
  path: z.ZodString;
57
84
  fields: z.ZodArray<z.ZodString>;
58
- }, z.core.$strip>>;
85
+ }, z.core.$strip>>>;
86
+ signals: z.ZodOptional<z.ZodArray<z.ZodObject<{
87
+ path: z.ZodString;
88
+ signal: z.ZodString;
89
+ }, z.core.$strip>>>;
59
90
  hz: z.ZodOptional<z.ZodNumber>;
60
91
  duration_ms: z.ZodOptional<z.ZodNumber>;
61
92
  }, z.core.$strip>, z.ZodObject<{
@@ -1 +1 @@
1
- {"version":3,"file":"runtime-state.d.ts","sourceRoot":"","sources":["../../src/tools/runtime-state.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAGxB,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAC;AAkC1D,UAAU,cAAc;IACtB,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,GAAG,MAAM,CAAC;CACxB;AAUD,MAAM,WAAW,mBAAmB;IAClC,KAAK,EAAE,MAAM,CAAC;IACd,GAAG,EAAE,MAAM,CAAC;IACZ,GAAG,EAAE,MAAM,CAAC;IACZ,GAAG,EAAE,MAAM,CAAC;IACZ,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAC;QAAC,EAAE,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,aAAa,GAAG,YAAY,CAAA;KAAE,CAAC,CAAC;CAC/F;AAED,MAAM,WAAW,kBAAkB;IACjC,KAAK,EAAE,MAAM,CAAC;IACd,GAAG,EAAE,MAAM,CAAC;IACZ,OAAO,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAC;QAAC,EAAE,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;CAC5D;AAED,wBAAgB,qBAAqB,CACnC,OAAO,EAAE,cAAc,EAAE,EACzB,QAAQ,EAAE,MAAM,GACf,mBAAmB,CAyBrB;AAED,wBAAgB,oBAAoB,CAAC,OAAO,EAAE,cAAc,EAAE,GAAG,kBAAkB,CAkBlF;AAuID,eAAO,MAAM,YAAY;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8BAwDvB,CAAC;AAEH,eAAO,MAAM,iBAAiB,EAAqB,iBAAiB,EAAE,CAAC"}
1
+ {"version":3,"file":"runtime-state.d.ts","sourceRoot":"","sources":["../../src/tools/runtime-state.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAGxB,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAC;AAkC1D,UAAU,cAAc;IACtB,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,GAAG,MAAM,CAAC;CACxB;AAED,UAAU,aAAa;IACrB,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAaD,MAAM,WAAW,mBAAmB;IAClC,KAAK,EAAE,MAAM,CAAC;IACd,GAAG,EAAE,MAAM,CAAC;IACZ,GAAG,EAAE,MAAM,CAAC;IACZ,GAAG,EAAE,MAAM,CAAC;IACZ,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAC;QAAC,EAAE,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,aAAa,GAAG,YAAY,CAAA;KAAE,CAAC,CAAC;CAC/F;AAED,MAAM,WAAW,kBAAkB;IACjC,KAAK,EAAE,MAAM,CAAC;IACd,GAAG,EAAE,MAAM,CAAC;IACZ,OAAO,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAC;QAAC,EAAE,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;CAC5D;AAED,wBAAgB,qBAAqB,CACnC,OAAO,EAAE,cAAc,EAAE,EACzB,QAAQ,EAAE,MAAM,GACf,mBAAmB,CAyBrB;AAED,wBAAgB,oBAAoB,CAAC,OAAO,EAAE,cAAc,EAAE,GAAG,kBAAkB,CAkBlF;AAcD,MAAM,MAAM,aAAa,GACrB;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,QAAQ,CAAC;IAAC,MAAM,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC;IAAC,IAAI,CAAC,EAAE,MAAM,CAAA;CAAE,GAC7E;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,iBAAiB,CAAC;IAAC,MAAM,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC;IAAC,EAAE,EAAE,MAAM,CAAA;CAAE,GACnF;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,cAAc,CAAC;IAAC,MAAM,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC;IAAC,EAAE,EAAE,MAAM,CAAA;CAAE,CAAC;AAYpG,wBAAgB,aAAa,CAC3B,MAAM,EAAE,aAAa,EAAE,EACvB,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,mBAAmB,GAAG,kBAAkB,CAAC,GAC/D,aAAa,EAAE,CAsCjB;AA0KD,eAAO,MAAM,YAAY;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8BA0FvB,CAAC;AAEH,eAAO,MAAM,iBAAiB,EAAqB,iBAAiB,EAAE,CAAC"}
@@ -53,6 +53,62 @@ function summarizeWatchRaw(raw) {
53
53
  }
54
54
  return result;
55
55
  }
56
+ const TIMELINE_KIND_RANK = {
57
+ // PRESENTATION order for same-t_ms entries, not chronology: cross-kind order
58
+ // at a tie is unknowable (signal t_ms is emission time, sampled t_ms is
59
+ // detection time — the change may have happened earlier). Any fixed choice
60
+ // is fine; what matters is determinism.
61
+ signal: 0,
62
+ anim_transition: 1,
63
+ field_change: 2,
64
+ };
65
+ export function buildTimeline(events, fields) {
66
+ const timeline = [];
67
+ for (const e of events) {
68
+ timeline.push({
69
+ t_ms: e.t_ms,
70
+ kind: 'signal',
71
+ source: e.source,
72
+ name: e.signal,
73
+ ...(e.args !== undefined && { args: e.args }),
74
+ });
75
+ }
76
+ for (const [key, summary] of Object.entries(fields)) {
77
+ if (!('changes' in summary))
78
+ continue; // numeric events stay per-field only
79
+ // full_key is node_path + ":" + field_key; lastIndexOf guards colons in paths.
80
+ const sep = key.lastIndexOf(':');
81
+ const source = sep >= 0 ? key.slice(0, sep) : key;
82
+ const field = sep >= 0 ? key.slice(sep + 1) : key;
83
+ for (const change of summary.changes) {
84
+ timeline.push(field === 'anim'
85
+ ? { t_ms: change.t_ms, kind: 'anim_transition', source, from: change.from, to: change.to }
86
+ : { t_ms: change.t_ms, kind: 'field_change', source, field, from: change.from, to: change.to });
87
+ }
88
+ }
89
+ // No further tiebreakers on purpose: sort() is spec-stable (ES2019), so
90
+ // same-t_ms same-kind entries keep buffer order — which for signals IS
91
+ // emission order, real information a name/source tiebreak would destroy
92
+ // (sub-ms bursts land on one t_ms).
93
+ timeline.sort((a, b) => {
94
+ if (a.t_ms !== b.t_ms)
95
+ return a.t_ms - b.t_ms;
96
+ return TIMELINE_KIND_RANK[a.kind] - TIMELINE_KIND_RANK[b.kind];
97
+ });
98
+ return timeline;
99
+ }
100
+ function summarizeWatchResponse(raw) {
101
+ const fields = summarizeWatchRaw(raw);
102
+ return structured({
103
+ window_ms: raw.window_ms,
104
+ sample_count: raw.sample_count,
105
+ fields,
106
+ // Always present (empty array included) so the shape is stable for
107
+ // structured readers; `?? []` degrades gracefully against older addons.
108
+ timeline: buildTimeline(raw.events ?? [], fields),
109
+ timeline_truncated: raw.events_truncated ?? false,
110
+ });
111
+ }
56
112
  // ── Schema ───────────────────────────────────────────────────────────────────
57
113
  const INCLUDE_VALUES = ['transform', 'velocity', 'anim', 'groups', 'onscreen', 'state'];
58
114
  const RuntimeStateSchema = z.discriminatedUnion('action', [
@@ -123,7 +179,29 @@ const RuntimeStateSchema = z.discriminatedUnion('action', [
123
179
  .array(z.string())
124
180
  .describe('Field keys to sample (e.g. ["pos.x", "vel.x", "health"])'),
125
181
  }))
126
- .describe('Which nodes and fields to watch'),
182
+ .optional()
183
+ .describe('Which nodes and fields to watch. Optional when signals is provided.'),
184
+ signals: z
185
+ .array(z.object({
186
+ path: z
187
+ .string()
188
+ .min(1)
189
+ .describe('Node path; absolute /root/... paths reach autoloads (e.g. "/root/G")'),
190
+ signal: z
191
+ .string()
192
+ .min(1)
193
+ .describe('Signal name on that node — script or built-in (e.g. "body_entered")'),
194
+ }))
195
+ .max(16)
196
+ .optional()
197
+ .describe('Signals to record as discrete timeline events during the window. Each emission is ' +
198
+ 'buffered as {t_ms, source, signal, args} (max 200 events/window, then truncated with a ' +
199
+ 'flag; args stringified to ~100 chars). watch_collect merges these with string-field ' +
200
+ 'transitions into a time-sorted `timeline`. Signals with more than 5 parameters are ' +
201
+ 'skipped and reported in unresolved_signals, as are bad paths/names. Connections stay ' +
202
+ 'live until duration_ms elapses or watch_stop. Signals must be emitted on the main ' +
203
+ 'thread (worker-thread emissions are unsupported). At least one of specs/signals is ' +
204
+ 'required.'),
127
205
  hz: z
128
206
  .number()
129
207
  .int()
@@ -138,19 +216,27 @@ const RuntimeStateSchema = z.discriminatedUnion('action', [
138
216
  .max(5000)
139
217
  .optional()
140
218
  .describe('Auto-stop after this many milliseconds (default: 1000)'),
219
+ }).refine((v) => (v.specs?.length ?? 0) > 0 || (v.signals?.length ?? 0) > 0, {
220
+ message: 'watch_start requires at least one of specs or signals',
141
221
  }),
142
222
  z.object({
143
223
  action: z
144
224
  .literal('watch_collect')
145
- .describe('Collect the current sampler buffer and return a per-field summary: ' +
146
- 'start/end/min/max/mean/slope for numeric fields; transition events for string fields. ' +
147
- 'Safe to call before auto-stop returns whatever has been sampled so far.'),
225
+ .describe('Collect the current sampler buffer and return a per-field summary ' +
226
+ '(start/end/min/max/mean/slope for numeric fields; transition events for string fields) ' +
227
+ 'plus a time-sorted `timeline` merging watched signal emissions with string-field ' +
228
+ 'transitions (kinds: signal, anim_transition, field_change). TIMESTAMPS: signal t_ms is ' +
229
+ 'emission time (ms resolution); anim/field t_ms is DETECTION time at the sample rate — ' +
230
+ 'the change happened up to one sample interval earlier, so do not infer cross-kind ' +
231
+ 'ordering from nearby timestamps. ' +
232
+ 'Safe to call before auto-stop — returns whatever has been recorded so far; ' +
233
+ 'signal connections stay live until the window ends.'),
148
234
  }),
149
235
  z.object({
150
236
  action: z
151
237
  .literal('watch_stop')
152
- .describe('Stop the sampler early and return the final per-field summary. ' +
153
- 'Equivalent to watch_collect + stopping the sampler.'),
238
+ .describe('Stop the sampler early (disconnecting watched signals) and return the final ' +
239
+ 'per-field summary and merged `timeline`. Equivalent to watch_collect + stopping the sampler.'),
154
240
  }),
155
241
  ]);
156
242
  // ── Tool definition ──────────────────────────────────────────────────────────
@@ -189,25 +275,51 @@ export const runtimeState = defineTool({
189
275
  }
190
276
  case 'watch_start': {
191
277
  const watchResult = await godot.sendCommand('watch_start', {
192
- specs: args.specs,
278
+ specs: args.specs ?? [],
193
279
  hz: args.hz ?? 20,
194
280
  duration_ms: args.duration_ms ?? 1000,
281
+ signals: args.signals ?? [],
195
282
  });
196
- const base = `Sampler started. Call watch_collect after ~${args.duration_ms ?? 1000}ms to get results.`;
197
- if ((watchResult.resolved_fields ?? 1) === 0) {
198
- return base + ' Warning: 0 fields resolved — verify that all node paths in specs exist in the running scene.';
283
+ const wantFields = (args.specs?.length ?? 0) > 0;
284
+ const requestedSignals = args.signals?.length ?? 0;
285
+ const unresolved = watchResult.unresolved_signals ?? [];
286
+ const warnings = [];
287
+ if (wantFields && (watchResult.resolved_fields ?? 0) === 0) {
288
+ warnings.push('0 fields resolved — verify that all node paths in specs exist in the running scene.');
199
289
  }
200
- return `${base} Tracking ${watchResult.resolved_fields} field(s).`;
290
+ if (requestedSignals > 0) {
291
+ // Version-skew detection: without it, dropped signal specs read as
292
+ // "Connected 0 signal(s)" + an empty timeline, and the agent
293
+ // concludes the signals never fired — a confident lie about game
294
+ // behavior. Both stale layers are precisely distinguishable here.
295
+ if (watchResult.connected_signals === undefined) {
296
+ warnings.push('signals were IGNORED: the running addon predates the signal timeline feature — update the godot-mcp addon.');
297
+ }
298
+ else if (watchResult.connected_signals + unresolved.length < requestedSignals) {
299
+ warnings.push(`${requestedSignals - watchResult.connected_signals - unresolved.length} signal spec(s) were dropped in ` +
300
+ 'transit: the addon on disk is newer than what the editor has loaded — restart the Godot editor.');
301
+ }
302
+ if (unresolved.length > 0) {
303
+ warnings.push(`unresolved signals: ${unresolved.map((u) => `${u.path}:${u.signal} (${u.reason})`).join(', ')}.`);
304
+ }
305
+ }
306
+ // Structured with a stable shape (unresolved_signals/warnings always
307
+ // arrays): an agent must branch on unresolved reasons to retry
308
+ // correctly, which prose can't carry reliably.
309
+ return structured({
310
+ started: watchResult.started,
311
+ note: `Sampler started. Call watch_collect after ~${args.duration_ms ?? 1000}ms to get results.`,
312
+ resolved_fields: watchResult.resolved_fields ?? 0,
313
+ connected_signals: watchResult.connected_signals ?? 0,
314
+ unresolved_signals: unresolved,
315
+ warnings,
316
+ });
201
317
  }
202
318
  case 'watch_collect': {
203
- const raw = await godot.sendCommand('watch_collect');
204
- const fields = summarizeWatchRaw(raw);
205
- return structured({ window_ms: raw.window_ms, sample_count: raw.sample_count, fields });
319
+ return summarizeWatchResponse(await godot.sendCommand('watch_collect'));
206
320
  }
207
321
  case 'watch_stop': {
208
- const raw = await godot.sendCommand('watch_stop');
209
- const fields = summarizeWatchRaw(raw);
210
- return structured({ window_ms: raw.window_ms, sample_count: raw.sample_count, fields });
322
+ return summarizeWatchResponse(await godot.sendCommand('watch_stop'));
211
323
  }
212
324
  }
213
325
  },
@@ -1 +1 @@
1
- {"version":3,"file":"runtime-state.js","sourceRoot":"","sources":["../../src/tools/runtime-state.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"runtime-state.js","sourceRoot":"","sources":["../../src/tools/runtime-state.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,UAAU,EAAE,MAAM,wBAAwB,CAAC;AACpD,OAAO,EAAE,UAAU,EAAE,MAAM,uBAAuB,CAAC;AA0EnD,MAAM,UAAU,qBAAqB,CACnC,OAAyB,EACzB,QAAgB;IAEhB,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACzB,OAAO,EAAE,KAAK,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,MAAM,EAAE,EAAE,EAAE,CAAC;IAC7E,CAAC;IAED,MAAM,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,KAAe,CAAC,CAAC;IACrD,MAAM,KAAK,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC;IACxB,MAAM,IAAI,GAAG,MAAM,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;IACvC,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,MAAM,CAAC,CAAC;IAChC,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,MAAM,CAAC,CAAC;IAChC,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,GAAG,MAAM,CAAC,MAAM,CAAC,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC;IACzF,MAAM,KAAK,GAAG,QAAQ,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,GAAG,KAAK,CAAC,GAAG,CAAC,QAAQ,GAAG,IAAI,CAAC,CAAC,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;IAE9F,MAAM,MAAM,GAAkC,EAAE,CAAC;IACjD,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QACxC,MAAM,IAAI,GAAG,OAAO,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,KAAe,CAAC;QAC5C,MAAM,IAAI,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC,KAAe,CAAC;QACxC,IAAI,IAAI,KAAK,CAAC,IAAI,IAAI,KAAK,CAAC,EAAE,CAAC;YAC7B,MAAM,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,OAAO,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,YAAY,EAAE,CAAC,CAAC;QACnF,CAAC;aAAM,IAAI,CAAC,IAAI,GAAG,CAAC,IAAI,IAAI,GAAG,CAAC,CAAC,IAAI,CAAC,IAAI,GAAG,CAAC,IAAI,IAAI,GAAG,CAAC,CAAC,EAAE,CAAC;YAC5D,MAAM,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,OAAO,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,aAAa,EAAE,CAAC,CAAC;QACpF,CAAC;IACH,CAAC;IAED,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC;AACpE,CAAC;AAED,MAAM,UAAU,oBAAoB,CAAC,OAAyB;IAC5D,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACzB,OAAO,EAAE,KAAK,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,OAAO,EAAE,EAAE,EAAE,CAAC;IAC7C,CAAC;IAED,MAAM,KAAK,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC,KAAe,CAAC;IACzC,MAAM,IAAI,GAAG,OAAO,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,KAAe,CAAC;IACzD,MAAM,OAAO,GAAkC,EAAE,CAAC;IAElD,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QACxC,MAAM,IAAI,GAAG,OAAO,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,KAAe,CAAC;QAC5C,MAAM,IAAI,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC,KAAe,CAAC;QACxC,IAAI,IAAI,KAAK,IAAI,EAAE,CAAC;YAClB,OAAO,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,OAAO,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC;QAChE,CAAC;IACH,CAAC;IAED,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,GAAG,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC;AAC9C,CAAC;AAED,SAAS,iBAAiB,CAAC,GAAqB;IAC9C,MAAM,MAAM,GAA6D,EAAE,CAAC;IAC5E,KAAK,MAAM,CAAC,GAAG,EAAE,OAAO,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC;QACxD,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC;YAAE,SAAS;QACnC,MAAM,SAAS,GAAG,OAAO,OAAO,CAAC,CAAC,CAAC,CAAC,KAAK,KAAK,QAAQ,CAAC;QACvD,MAAM,CAAC,GAAG,CAAC,GAAG,SAAS;YACrB,CAAC,CAAC,qBAAqB,CAAC,OAAO,EAAE,GAAG,CAAC,SAAS,CAAC;YAC/C,CAAC,CAAC,oBAAoB,CAAC,OAAO,CAAC,CAAC;IACpC,CAAC;IACD,OAAO,MAAM,CAAC;AAChB,CAAC;AAOD,MAAM,kBAAkB,GAA0C;IAChE,6EAA6E;IAC7E,wEAAwE;IACxE,2EAA2E;IAC3E,wCAAwC;IACxC,MAAM,EAAE,CAAC;IACT,eAAe,EAAE,CAAC;IAClB,YAAY,EAAE,CAAC;CAChB,CAAC;AAEF,MAAM,UAAU,aAAa,CAC3B,MAAuB,EACvB,MAAgE;IAEhE,MAAM,QAAQ,GAAoB,EAAE,CAAC;IAErC,KAAK,MAAM,CAAC,IAAI,MAAM,EAAE,CAAC;QACvB,QAAQ,CAAC,IAAI,CAAC;YACZ,IAAI,EAAE,CAAC,CAAC,IAAI;YACZ,IAAI,EAAE,QAAQ;YACd,MAAM,EAAE,CAAC,CAAC,MAAM;YAChB,IAAI,EAAE,CAAC,CAAC,MAAM;YACd,GAAG,CAAC,CAAC,CAAC,IAAI,KAAK,SAAS,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC;SAC9C,CAAC,CAAC;IACL,CAAC;IAED,KAAK,MAAM,CAAC,GAAG,EAAE,OAAO,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC;QACpD,IAAI,CAAC,CAAC,SAAS,IAAI,OAAO,CAAC;YAAE,SAAS,CAAC,qCAAqC;QAC5E,+EAA+E;QAC/E,MAAM,GAAG,GAAG,GAAG,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC;QACjC,MAAM,MAAM,GAAG,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC;QAClD,MAAM,KAAK,GAAG,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC;QAClD,KAAK,MAAM,MAAM,IAAI,OAAO,CAAC,OAAO,EAAE,CAAC;YACrC,QAAQ,CAAC,IAAI,CACX,KAAK,KAAK,MAAM;gBACd,CAAC,CAAC,EAAE,IAAI,EAAE,MAAM,CAAC,IAAI,EAAE,IAAI,EAAE,iBAAiB,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,CAAC,IAAI,EAAE,EAAE,EAAE,MAAM,CAAC,EAAE,EAAE;gBAC1F,CAAC,CAAC,EAAE,IAAI,EAAE,MAAM,CAAC,IAAI,EAAE,IAAI,EAAE,cAAc,EAAE,MAAM,EAAE,KAAK,EAAE,IAAI,EAAE,MAAM,CAAC,IAAI,EAAE,EAAE,EAAE,MAAM,CAAC,EAAE,EAAE,CACjG,CAAC;QACJ,CAAC;IACH,CAAC;IAED,wEAAwE;IACxE,uEAAuE;IACvE,wEAAwE;IACxE,oCAAoC;IACpC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE;QACrB,IAAI,CAAC,CAAC,IAAI,KAAK,CAAC,CAAC,IAAI;YAAE,OAAO,CAAC,CAAC,IAAI,GAAG,CAAC,CAAC,IAAI,CAAC;QAC9C,OAAO,kBAAkB,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,kBAAkB,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;IACjE,CAAC,CAAC,CAAC;IAEH,OAAO,QAAQ,CAAC;AAClB,CAAC;AAED,SAAS,sBAAsB,CAAC,GAAqB;IACnD,MAAM,MAAM,GAAG,iBAAiB,CAAC,GAAG,CAAC,CAAC;IACtC,OAAO,UAAU,CAAC;QAChB,SAAS,EAAE,GAAG,CAAC,SAAS;QACxB,YAAY,EAAE,GAAG,CAAC,YAAY;QAC9B,MAAM;QACN,mEAAmE;QACnE,wEAAwE;QACxE,QAAQ,EAAE,aAAa,CAAC,GAAG,CAAC,MAAM,IAAI,EAAE,EAAE,MAAM,CAAC;QACjD,kBAAkB,EAAE,GAAG,CAAC,gBAAgB,IAAI,KAAK;KAClD,CAAC,CAAC;AACL,CAAC;AAED,gFAAgF;AAEhF,MAAM,cAAc,GAAG,CAAC,WAAW,EAAE,UAAU,EAAE,MAAM,EAAE,QAAQ,EAAE,UAAU,EAAE,OAAO,CAAU,CAAC;AAEjG,MAAM,kBAAkB,GAAG,CAAC,CAAC,kBAAkB,CAAC,QAAQ,EAAE;IACxD,CAAC,CAAC,MAAM,CAAC;QACP,MAAM,EAAE,CAAC;aACN,OAAO,CAAC,QAAQ,CAAC;aACjB,QAAQ,CACP,uFAAuF;YACvF,+FAA+F;YAC/F,mFAAmF;YACnF,4EAA4E;YAC5E,uFAAuF;YACvF,uFAAuF;YACvF,qFAAqF;YACrF,wFAAwF;YACxF,wFAAwF;YACxF,uFAAuF;YACvF,8BAA8B,CAC/B;QACH,MAAM,EAAE,CAAC;aACN,IAAI,CAAC,CAAC,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC;aACzC,QAAQ,EAAE;aACV,QAAQ,CACP,0FAA0F;YAC1F,sFAAsF;YACtF,uEAAuE,CACxE;QACH,KAAK,EAAE,CAAC;aACL,MAAM,EAAE;aACR,QAAQ,EAAE;aACV,QAAQ,CAAC,wEAAwE,CAAC;QACrF,KAAK,EAAE,CAAC;aACL,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC;aACjB,QAAQ,EAAE;aACV,QAAQ,CACP,8EAA8E;YAC9E,4EAA4E;YAC5E,iFAAiF;YACjF,oFAAoF;YACpF,iFAAiF;YACjF,2CAA2C,CAC5C;QACH,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,2CAA2C,CAAC;QACjF,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,uCAAuC,CAAC;QAC7E,SAAS,EAAE,CAAC;aACT,MAAM,EAAE;aACR,GAAG,EAAE;aACL,GAAG,CAAC,CAAC,CAAC;aACN,GAAG,CAAC,GAAG,CAAC;aACR,QAAQ,EAAE;aACV,QAAQ,CAAC,uCAAuC,CAAC;QACpD,OAAO,EAAE,CAAC;aACP,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;aAC7B,QAAQ,EAAE;aACV,QAAQ,CAAC,sDAAsD,CAAC;KACpE,CAAC;IACF,CAAC,CAAC,MAAM,CAAC;QACP,MAAM,EAAE,CAAC;aACN,OAAO,CAAC,aAAa,CAAC;aACtB,QAAQ,CACP,oFAAoF;YACpF,0FAA0F;YAC1F,0EAA0E;YAC1E,2EAA2E;YAC3E,qFAAqF;YACrF,kFAAkF;YAClF,qFAAqF;YACrF,yEAAyE;YACzE,oFAAoF;YACpF,yEAAyE,CAC1E;QACH,KAAK,EAAE,CAAC;aACL,KAAK,CACJ,CAAC,CAAC,MAAM,CAAC;YACP,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,4CAA4C,CAAC;YACvE,MAAM,EAAE,CAAC;iBACN,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC;iBACjB,QAAQ,CAAC,0DAA0D,CAAC;SACxE,CAAC,CACH;aACA,QAAQ,EAAE;aACV,QAAQ,CAAC,qEAAqE,CAAC;QAClF,OAAO,EAAE,CAAC;aACP,KAAK,CACJ,CAAC,CAAC,MAAM,CAAC;YACP,IAAI,EAAE,CAAC;iBACJ,MAAM,EAAE;iBACR,GAAG,CAAC,CAAC,CAAC;iBACN,QAAQ,CAAC,sEAAsE,CAAC;YACnF,MAAM,EAAE,CAAC;iBACN,MAAM,EAAE;iBACR,GAAG,CAAC,CAAC,CAAC;iBACN,QAAQ,CAAC,qEAAqE,CAAC;SACnF,CAAC,CACH;aACA,GAAG,CAAC,EAAE,CAAC;aACP,QAAQ,EAAE;aACV,QAAQ,CACP,oFAAoF;YACpF,yFAAyF;YACzF,sFAAsF;YACtF,qFAAqF;YACrF,uFAAuF;YACvF,oFAAoF;YACpF,qFAAqF;YACrF,WAAW,CACZ;QACH,EAAE,EAAE,CAAC;aACF,MAAM,EAAE;aACR,GAAG,EAAE;aACL,GAAG,CAAC,CAAC,CAAC;aACN,GAAG,CAAC,EAAE,CAAC;aACP,QAAQ,EAAE;aACV,QAAQ,CAAC,iCAAiC,CAAC;QAC9C,WAAW,EAAE,CAAC;aACX,MAAM,EAAE;aACR,GAAG,EAAE;aACL,GAAG,CAAC,GAAG,CAAC;aACR,GAAG,CAAC,IAAI,CAAC;aACT,QAAQ,EAAE;aACV,QAAQ,CAAC,wDAAwD,CAAC;KACtE,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,KAAK,EAAE,MAAM,IAAI,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,OAAO,EAAE,MAAM,IAAI,CAAC,CAAC,GAAG,CAAC,EAAE;QAC3E,OAAO,EAAE,uDAAuD;KACjE,CAAC;IACF,CAAC,CAAC,MAAM,CAAC;QACP,MAAM,EAAE,CAAC;aACN,OAAO,CAAC,eAAe,CAAC;aACxB,QAAQ,CACP,oEAAoE;YACpE,yFAAyF;YACzF,mFAAmF;YACnF,yFAAyF;YACzF,wFAAwF;YACxF,oFAAoF;YACpF,mCAAmC;YACnC,6EAA6E;YAC7E,qDAAqD,CACtD;KACJ,CAAC;IACF,CAAC,CAAC,MAAM,CAAC;QACP,MAAM,EAAE,CAAC;aACN,OAAO,CAAC,YAAY,CAAC;aACrB,QAAQ,CACP,8EAA8E;YAC9E,8FAA8F,CAC/F;KACJ,CAAC;CACH,CAAC,CAAC;AAIH,gFAAgF;AAEhF,MAAM,CAAC,MAAM,YAAY,GAAG,UAAU,CAAC;IACrC,IAAI,EAAE,qBAAqB;IAC3B,WAAW,EAAE;QACX,KAAK,EAAE,eAAe;QACtB,YAAY,EAAE,IAAI;QAClB,eAAe,EAAE,KAAK;QACtB,aAAa,EAAE,KAAK;KACrB;IACD,WAAW,EACT,8CAA8C;QAC9C,mFAAmF;QACnF,6EAA6E;IAC/E,MAAM,EAAE,kBAAkB;IAE1B,KAAK,CAAC,OAAO,CAAC,IAAsB,EAAE,EAAE,KAAK,EAAE;QAC7C,QAAQ,IAAI,CAAC,MAAM,EAAE,CAAC;YACpB,KAAK,QAAQ,CAAC,CAAC,CAAC;gBACd,MAAM,MAAM,GAA4B,EAAE,CAAC;gBAC3C,IAAI,IAAI,CAAC,MAAM,KAAK,SAAS;oBAAE,MAAM,CAAC,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC;gBAC3D,IAAI,IAAI,CAAC,KAAK,KAAK,SAAS;oBAAE,MAAM,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC;gBACxD,IAAI,IAAI,CAAC,KAAK,KAAK,SAAS;oBAAE,MAAM,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC;gBACxD,IAAI,IAAI,CAAC,IAAI,KAAK,SAAS;oBAAE,MAAM,CAAC,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC;gBACrD,IAAI,IAAI,CAAC,IAAI,KAAK,SAAS;oBAAE,MAAM,CAAC,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC;gBACrD,IAAI,IAAI,CAAC,SAAS,KAAK,SAAS;oBAAE,MAAM,CAAC,SAAS,GAAG,IAAI,CAAC,SAAS,CAAC;gBACpE,IAAI,IAAI,CAAC,OAAO,KAAK,SAAS;oBAAE,MAAM,CAAC,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC;gBAE9D,MAAM,MAAM,GAAG,MAAM,KAAK,CAAC,WAAW,CAAiB,mBAAmB,EAAE,MAAM,CAAC,CAAC;gBACpF,OAAO,UAAU,CAAC,MAAM,CAAC,CAAC;YAC5B,CAAC;YAED,KAAK,aAAa,CAAC,CAAC,CAAC;gBACnB,MAAM,WAAW,GAAG,MAAM,KAAK,CAAC,WAAW,CAKxC,aAAa,EAAE;oBAChB,KAAK,EAAE,IAAI,CAAC,KAAK,IAAI,EAAE;oBACvB,EAAE,EAAE,IAAI,CAAC,EAAE,IAAI,EAAE;oBACjB,WAAW,EAAE,IAAI,CAAC,WAAW,IAAI,IAAI;oBACrC,OAAO,EAAE,IAAI,CAAC,OAAO,IAAI,EAAE;iBAC5B,CAAC,CAAC;gBACH,MAAM,UAAU,GAAG,CAAC,IAAI,CAAC,KAAK,EAAE,MAAM,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC;gBACjD,MAAM,gBAAgB,GAAG,IAAI,CAAC,OAAO,EAAE,MAAM,IAAI,CAAC,CAAC;gBACnD,MAAM,UAAU,GAAG,WAAW,CAAC,kBAAkB,IAAI,EAAE,CAAC;gBACxD,MAAM,QAAQ,GAAa,EAAE,CAAC;gBAC9B,IAAI,UAAU,IAAI,CAAC,WAAW,CAAC,eAAe,IAAI,CAAC,CAAC,KAAK,CAAC,EAAE,CAAC;oBAC3D,QAAQ,CAAC,IAAI,CAAC,qFAAqF,CAAC,CAAC;gBACvG,CAAC;gBACD,IAAI,gBAAgB,GAAG,CAAC,EAAE,CAAC;oBACzB,mEAAmE;oBACnE,6DAA6D;oBAC7D,iEAAiE;oBACjE,kEAAkE;oBAClE,IAAI,WAAW,CAAC,iBAAiB,KAAK,SAAS,EAAE,CAAC;wBAChD,QAAQ,CAAC,IAAI,CACX,4GAA4G,CAC7G,CAAC;oBACJ,CAAC;yBAAM,IAAI,WAAW,CAAC,iBAAiB,GAAG,UAAU,CAAC,MAAM,GAAG,gBAAgB,EAAE,CAAC;wBAChF,QAAQ,CAAC,IAAI,CACX,GAAG,gBAAgB,GAAG,WAAW,CAAC,iBAAiB,GAAG,UAAU,CAAC,MAAM,kCAAkC;4BACzG,iGAAiG,CAClG,CAAC;oBACJ,CAAC;oBACD,IAAI,UAAU,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;wBAC1B,QAAQ,CAAC,IAAI,CAAC,uBAAuB,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC,MAAM,KAAK,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;oBACnH,CAAC;gBACH,CAAC;gBACD,qEAAqE;gBACrE,+DAA+D;gBAC/D,+CAA+C;gBAC/C,OAAO,UAAU,CAAC;oBAChB,OAAO,EAAE,WAAW,CAAC,OAAO;oBAC5B,IAAI,EAAE,8CAA8C,IAAI,CAAC,WAAW,IAAI,IAAI,oBAAoB;oBAChG,eAAe,EAAE,WAAW,CAAC,eAAe,IAAI,CAAC;oBACjD,iBAAiB,EAAE,WAAW,CAAC,iBAAiB,IAAI,CAAC;oBACrD,kBAAkB,EAAE,UAAU;oBAC9B,QAAQ;iBACT,CAAC,CAAC;YACL,CAAC;YAED,KAAK,eAAe,CAAC,CAAC,CAAC;gBACrB,OAAO,sBAAsB,CAAC,MAAM,KAAK,CAAC,WAAW,CAAmB,eAAe,CAAC,CAAC,CAAC;YAC5F,CAAC;YAED,KAAK,YAAY,CAAC,CAAC,CAAC;gBAClB,OAAO,sBAAsB,CAAC,MAAM,KAAK,CAAC,WAAW,CAAmB,YAAY,CAAC,CAAC,CAAC;YACzF,CAAC;QACH,CAAC;IACH,CAAC;CACF,CAAC,CAAC;AAEH,MAAM,CAAC,MAAM,iBAAiB,GAAG,CAAC,YAAY,CAAwB,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@satelliteoflove/godot-mcp",
3
- "version": "3.15.0",
3
+ "version": "3.16.0",
4
4
  "description": "MCP server for Godot Engine integration",
5
5
  "type": "module",
6
6
  "main": "dist/index.js",