unity-open-mcp 1.4.0 → 1.6.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/capabilities/cost-hints.js +73 -0
- package/dist/capabilities/cost-hints.js.map +1 -1
- package/dist/capabilities/intent-groups.js +76 -4
- package/dist/capabilities/intent-groups.js.map +1 -1
- package/dist/capabilities/lifecycle.js +9 -0
- package/dist/capabilities/lifecycle.js.map +1 -1
- package/dist/capabilities/tool-groups.js +75 -17
- package/dist/capabilities/tool-groups.js.map +1 -1
- package/dist/compressible-router.d.ts +4 -1
- package/dist/compressible-router.js +27 -11
- package/dist/compressible-router.js.map +1 -1
- package/dist/constants.d.ts +2 -2
- package/dist/constants.js +2 -2
- package/dist/event-stream.d.ts +10 -0
- package/dist/event-stream.js +29 -0
- package/dist/event-stream.js.map +1 -1
- package/dist/game-view-settle.d.ts +18 -0
- package/dist/game-view-settle.js +81 -0
- package/dist/game-view-settle.js.map +1 -0
- package/dist/jobs/adapters.d.ts +59 -0
- package/dist/jobs/adapters.js +226 -0
- package/dist/jobs/adapters.js.map +1 -1
- package/dist/live-client.d.ts +17 -60
- package/dist/live-client.js +52 -87
- package/dist/live-client.js.map +1 -1
- package/dist/local-tools.js +3 -0
- package/dist/local-tools.js.map +1 -1
- package/dist/offline/api.d.ts +2 -0
- package/dist/offline/api.js +4 -2
- package/dist/offline/api.js.map +1 -1
- package/dist/offline/model.js +1 -1
- package/dist/offline/model.js.map +1 -1
- package/dist/offline/parse.d.ts +1 -1
- package/dist/offline/parse.js +20 -8
- package/dist/offline/parse.js.map +1 -1
- package/dist/playmode-routes.d.ts +17 -0
- package/dist/playmode-routes.js +50 -0
- package/dist/playmode-routes.js.map +1 -0
- package/dist/playtest/png.d.ts +27 -0
- package/dist/playtest/png.js +248 -0
- package/dist/playtest/png.js.map +1 -0
- package/dist/playtest/recorder.d.ts +203 -0
- package/dist/playtest/recorder.js +945 -0
- package/dist/playtest/recorder.js.map +1 -0
- package/dist/playtest/redact.d.ts +16 -0
- package/dist/playtest/redact.js +124 -0
- package/dist/playtest/redact.js.map +1 -0
- package/dist/playtest/report.d.ts +73 -0
- package/dist/playtest/report.js +477 -0
- package/dist/playtest/report.js.map +1 -0
- package/dist/playtest/session-store.d.ts +78 -0
- package/dist/playtest/session-store.js +224 -0
- package/dist/playtest/session-store.js.map +1 -0
- package/dist/skill/SKILL.md +22 -3
- package/dist/skill/references/senses-and-tests.md +3 -0
- package/dist/skill/references/yaml-and-offline-work.md +1 -1
- package/dist/tool-router.d.ts +44 -0
- package/dist/tool-router.js +249 -7
- package/dist/tool-router.js.map +1 -1
- package/dist/tools/batch-execute.js +5 -1
- package/dist/tools/batch-execute.js.map +1 -1
- package/dist/tools/capture-inline.js +30 -12
- package/dist/tools/capture-inline.js.map +1 -1
- package/dist/tools/capture-series.d.ts +46 -0
- package/dist/tools/capture-series.js +116 -0
- package/dist/tools/capture-series.js.map +1 -0
- package/dist/tools/game-view.d.ts +44 -0
- package/dist/tools/game-view.js +103 -0
- package/dist/tools/game-view.js.map +1 -0
- package/dist/tools/index.d.ts +1 -0
- package/dist/tools/index.js +34 -7
- package/dist/tools/index.js.map +1 -1
- package/dist/tools/inputsim-gesture.d.ts +46 -0
- package/dist/tools/inputsim-gesture.js +123 -0
- package/dist/tools/inputsim-gesture.js.map +1 -0
- package/dist/tools/inputsim-pointer.js +35 -2
- package/dist/tools/inputsim-pointer.js.map +1 -1
- package/dist/tools/inputsim-touch.js +42 -22
- package/dist/tools/inputsim-touch.js.map +1 -1
- package/dist/tools/jobs.js +1 -1
- package/dist/tools/jobs.js.map +1 -1
- package/dist/tools/player-state.d.ts +42 -0
- package/dist/tools/player-state.js +142 -0
- package/dist/tools/player-state.js.map +1 -0
- package/dist/tools/playtest-conditions.d.ts +334 -0
- package/dist/tools/playtest-conditions.js +99 -0
- package/dist/tools/playtest-conditions.js.map +1 -0
- package/dist/tools/playtest-session.d.ts +45 -0
- package/dist/tools/playtest-session.js +105 -0
- package/dist/tools/playtest-session.js.map +1 -0
- package/dist/tools/playtest-wait.d.ts +46 -0
- package/dist/tools/playtest-wait.js +86 -0
- package/dist/tools/playtest-wait.js.map +1 -0
- package/dist/tools/screenshot.js +31 -8
- package/dist/tools/screenshot.js.map +1 -1
- package/dist/tools/text-target.d.ts +22 -0
- package/dist/tools/text-target.js +39 -0
- package/dist/tools/text-target.js.map +1 -0
- package/dist/tools/ui-snapshot.d.ts +41 -0
- package/dist/tools/ui-snapshot.js +87 -0
- package/dist/tools/ui-snapshot.js.map +1 -0
- package/package.json +1 -1
|
@@ -0,0 +1,334 @@
|
|
|
1
|
+
export declare const OBJECT_STATES: readonly ["exists", "active", "inactive", "destroyed"];
|
|
2
|
+
export declare const LOG_LEVELS: readonly ["any", "log", "warning", "error", "exception"];
|
|
3
|
+
export declare const CONDITION_LEAVES: readonly ["log", "ui", "object", "project_command", "frames", "ms"];
|
|
4
|
+
export declare const CONDITION_MAX_CHILDREN = 16;
|
|
5
|
+
/** The condition object schema (leaf, or all / any over leaves). */
|
|
6
|
+
export declare function conditionSchema(description: string): {
|
|
7
|
+
readonly type: "object";
|
|
8
|
+
readonly description: string;
|
|
9
|
+
readonly properties: {
|
|
10
|
+
readonly all: {
|
|
11
|
+
readonly type: "array";
|
|
12
|
+
readonly minItems: 1;
|
|
13
|
+
readonly maxItems: 16;
|
|
14
|
+
readonly items: {
|
|
15
|
+
readonly type: "object";
|
|
16
|
+
readonly description: "Exactly one of log, ui, object, project_command, frames, ms.";
|
|
17
|
+
readonly properties: {
|
|
18
|
+
readonly log: {
|
|
19
|
+
readonly type: "object";
|
|
20
|
+
readonly required: readonly ["pattern"];
|
|
21
|
+
readonly description: "A console message logged after the wait started matches `pattern` (latched once seen; reports the frame it was logged in).";
|
|
22
|
+
readonly properties: {
|
|
23
|
+
readonly pattern: {
|
|
24
|
+
readonly type: "string";
|
|
25
|
+
readonly minLength: 1;
|
|
26
|
+
readonly description: ".NET regex, case-sensitive, matched against the message text.";
|
|
27
|
+
};
|
|
28
|
+
readonly level: {
|
|
29
|
+
readonly type: "string";
|
|
30
|
+
readonly enum: readonly ["any", "log", "warning", "error", "exception"];
|
|
31
|
+
readonly description: "any (default) | log | warning | error (Error, Exception, Assert) | exception.";
|
|
32
|
+
};
|
|
33
|
+
};
|
|
34
|
+
readonly additionalProperties: false;
|
|
35
|
+
};
|
|
36
|
+
readonly ui: {
|
|
37
|
+
readonly type: "object";
|
|
38
|
+
readonly description: string;
|
|
39
|
+
readonly properties: {
|
|
40
|
+
readonly text_contains: {
|
|
41
|
+
readonly type: "string";
|
|
42
|
+
readonly minLength: 1;
|
|
43
|
+
readonly description: "Node display text contains this (normalised, case-insensitive; a control's text is its label).";
|
|
44
|
+
};
|
|
45
|
+
readonly path: {
|
|
46
|
+
readonly type: "string";
|
|
47
|
+
readonly minLength: 1;
|
|
48
|
+
readonly description: "Node hierarchy path or trailing path suffix ('Popup/Title').";
|
|
49
|
+
};
|
|
50
|
+
readonly visible: {
|
|
51
|
+
readonly type: "boolean";
|
|
52
|
+
readonly description: "true (default) = count on-screen nodes only; false = count nodes that exist but are not visible.";
|
|
53
|
+
};
|
|
54
|
+
readonly matches: {
|
|
55
|
+
readonly type: "boolean";
|
|
56
|
+
readonly description: "true (default) = holds while at least one node matches; false = holds while none does (a popup closed).";
|
|
57
|
+
};
|
|
58
|
+
};
|
|
59
|
+
readonly additionalProperties: false;
|
|
60
|
+
};
|
|
61
|
+
readonly object: {
|
|
62
|
+
readonly type: "object";
|
|
63
|
+
readonly description: string;
|
|
64
|
+
readonly properties: {
|
|
65
|
+
readonly path: {
|
|
66
|
+
readonly type: "string";
|
|
67
|
+
readonly minLength: 1;
|
|
68
|
+
readonly description: "Hierarchy path (plain names, 'Root/Child') or a bare name (first match anywhere).";
|
|
69
|
+
};
|
|
70
|
+
readonly object_id: {
|
|
71
|
+
readonly type: "string";
|
|
72
|
+
readonly description: "Instance id (e.g. a ui_snapshot node id). Alternative to path.";
|
|
73
|
+
};
|
|
74
|
+
readonly state: {
|
|
75
|
+
readonly type: "string";
|
|
76
|
+
readonly enum: readonly ["exists", "active", "inactive", "destroyed"];
|
|
77
|
+
readonly description: "exists (default) | active (activeInHierarchy) | inactive | destroyed (absent).";
|
|
78
|
+
};
|
|
79
|
+
};
|
|
80
|
+
readonly additionalProperties: false;
|
|
81
|
+
};
|
|
82
|
+
readonly project_command: {
|
|
83
|
+
readonly type: "object";
|
|
84
|
+
readonly required: readonly ["id"];
|
|
85
|
+
readonly description: string;
|
|
86
|
+
readonly properties: {
|
|
87
|
+
readonly id: {
|
|
88
|
+
readonly type: "string";
|
|
89
|
+
readonly minLength: 1;
|
|
90
|
+
readonly description: "Project command id (project.<owner>.<command>).";
|
|
91
|
+
};
|
|
92
|
+
readonly args: {
|
|
93
|
+
readonly type: "object";
|
|
94
|
+
readonly description: "The command's typed arguments (validated against its schema once, at start).";
|
|
95
|
+
};
|
|
96
|
+
readonly field: {
|
|
97
|
+
readonly type: "string";
|
|
98
|
+
readonly minLength: 1;
|
|
99
|
+
readonly description: "Top-level field of the command's JSON object result that must be true.";
|
|
100
|
+
};
|
|
101
|
+
};
|
|
102
|
+
readonly additionalProperties: false;
|
|
103
|
+
};
|
|
104
|
+
readonly frames: {
|
|
105
|
+
readonly type: "integer";
|
|
106
|
+
readonly minimum: 0;
|
|
107
|
+
readonly maximum: 1000000;
|
|
108
|
+
readonly description: "Holds after this many frames have run since the start.";
|
|
109
|
+
};
|
|
110
|
+
readonly ms: {
|
|
111
|
+
readonly type: "number";
|
|
112
|
+
readonly minimum: 0;
|
|
113
|
+
readonly maximum: 3600000;
|
|
114
|
+
readonly description: "Holds after this many ms (the call's `time` base) since the start.";
|
|
115
|
+
};
|
|
116
|
+
};
|
|
117
|
+
readonly additionalProperties: false;
|
|
118
|
+
};
|
|
119
|
+
readonly description: "Holds when every leaf holds at the same poll (log leaves latch once seen).";
|
|
120
|
+
};
|
|
121
|
+
readonly any: {
|
|
122
|
+
readonly type: "array";
|
|
123
|
+
readonly minItems: 1;
|
|
124
|
+
readonly maxItems: 16;
|
|
125
|
+
readonly items: {
|
|
126
|
+
readonly type: "object";
|
|
127
|
+
readonly description: "Exactly one of log, ui, object, project_command, frames, ms.";
|
|
128
|
+
readonly properties: {
|
|
129
|
+
readonly log: {
|
|
130
|
+
readonly type: "object";
|
|
131
|
+
readonly required: readonly ["pattern"];
|
|
132
|
+
readonly description: "A console message logged after the wait started matches `pattern` (latched once seen; reports the frame it was logged in).";
|
|
133
|
+
readonly properties: {
|
|
134
|
+
readonly pattern: {
|
|
135
|
+
readonly type: "string";
|
|
136
|
+
readonly minLength: 1;
|
|
137
|
+
readonly description: ".NET regex, case-sensitive, matched against the message text.";
|
|
138
|
+
};
|
|
139
|
+
readonly level: {
|
|
140
|
+
readonly type: "string";
|
|
141
|
+
readonly enum: readonly ["any", "log", "warning", "error", "exception"];
|
|
142
|
+
readonly description: "any (default) | log | warning | error (Error, Exception, Assert) | exception.";
|
|
143
|
+
};
|
|
144
|
+
};
|
|
145
|
+
readonly additionalProperties: false;
|
|
146
|
+
};
|
|
147
|
+
readonly ui: {
|
|
148
|
+
readonly type: "object";
|
|
149
|
+
readonly description: string;
|
|
150
|
+
readonly properties: {
|
|
151
|
+
readonly text_contains: {
|
|
152
|
+
readonly type: "string";
|
|
153
|
+
readonly minLength: 1;
|
|
154
|
+
readonly description: "Node display text contains this (normalised, case-insensitive; a control's text is its label).";
|
|
155
|
+
};
|
|
156
|
+
readonly path: {
|
|
157
|
+
readonly type: "string";
|
|
158
|
+
readonly minLength: 1;
|
|
159
|
+
readonly description: "Node hierarchy path or trailing path suffix ('Popup/Title').";
|
|
160
|
+
};
|
|
161
|
+
readonly visible: {
|
|
162
|
+
readonly type: "boolean";
|
|
163
|
+
readonly description: "true (default) = count on-screen nodes only; false = count nodes that exist but are not visible.";
|
|
164
|
+
};
|
|
165
|
+
readonly matches: {
|
|
166
|
+
readonly type: "boolean";
|
|
167
|
+
readonly description: "true (default) = holds while at least one node matches; false = holds while none does (a popup closed).";
|
|
168
|
+
};
|
|
169
|
+
};
|
|
170
|
+
readonly additionalProperties: false;
|
|
171
|
+
};
|
|
172
|
+
readonly object: {
|
|
173
|
+
readonly type: "object";
|
|
174
|
+
readonly description: string;
|
|
175
|
+
readonly properties: {
|
|
176
|
+
readonly path: {
|
|
177
|
+
readonly type: "string";
|
|
178
|
+
readonly minLength: 1;
|
|
179
|
+
readonly description: "Hierarchy path (plain names, 'Root/Child') or a bare name (first match anywhere).";
|
|
180
|
+
};
|
|
181
|
+
readonly object_id: {
|
|
182
|
+
readonly type: "string";
|
|
183
|
+
readonly description: "Instance id (e.g. a ui_snapshot node id). Alternative to path.";
|
|
184
|
+
};
|
|
185
|
+
readonly state: {
|
|
186
|
+
readonly type: "string";
|
|
187
|
+
readonly enum: readonly ["exists", "active", "inactive", "destroyed"];
|
|
188
|
+
readonly description: "exists (default) | active (activeInHierarchy) | inactive | destroyed (absent).";
|
|
189
|
+
};
|
|
190
|
+
};
|
|
191
|
+
readonly additionalProperties: false;
|
|
192
|
+
};
|
|
193
|
+
readonly project_command: {
|
|
194
|
+
readonly type: "object";
|
|
195
|
+
readonly required: readonly ["id"];
|
|
196
|
+
readonly description: string;
|
|
197
|
+
readonly properties: {
|
|
198
|
+
readonly id: {
|
|
199
|
+
readonly type: "string";
|
|
200
|
+
readonly minLength: 1;
|
|
201
|
+
readonly description: "Project command id (project.<owner>.<command>).";
|
|
202
|
+
};
|
|
203
|
+
readonly args: {
|
|
204
|
+
readonly type: "object";
|
|
205
|
+
readonly description: "The command's typed arguments (validated against its schema once, at start).";
|
|
206
|
+
};
|
|
207
|
+
readonly field: {
|
|
208
|
+
readonly type: "string";
|
|
209
|
+
readonly minLength: 1;
|
|
210
|
+
readonly description: "Top-level field of the command's JSON object result that must be true.";
|
|
211
|
+
};
|
|
212
|
+
};
|
|
213
|
+
readonly additionalProperties: false;
|
|
214
|
+
};
|
|
215
|
+
readonly frames: {
|
|
216
|
+
readonly type: "integer";
|
|
217
|
+
readonly minimum: 0;
|
|
218
|
+
readonly maximum: 1000000;
|
|
219
|
+
readonly description: "Holds after this many frames have run since the start.";
|
|
220
|
+
};
|
|
221
|
+
readonly ms: {
|
|
222
|
+
readonly type: "number";
|
|
223
|
+
readonly minimum: 0;
|
|
224
|
+
readonly maximum: 3600000;
|
|
225
|
+
readonly description: "Holds after this many ms (the call's `time` base) since the start.";
|
|
226
|
+
};
|
|
227
|
+
};
|
|
228
|
+
readonly additionalProperties: false;
|
|
229
|
+
};
|
|
230
|
+
readonly description: "Holds when one leaf holds; the result names it (fired.path, e.g. condition.any[1]).";
|
|
231
|
+
};
|
|
232
|
+
readonly log: {
|
|
233
|
+
readonly type: "object";
|
|
234
|
+
readonly required: readonly ["pattern"];
|
|
235
|
+
readonly description: "A console message logged after the wait started matches `pattern` (latched once seen; reports the frame it was logged in).";
|
|
236
|
+
readonly properties: {
|
|
237
|
+
readonly pattern: {
|
|
238
|
+
readonly type: "string";
|
|
239
|
+
readonly minLength: 1;
|
|
240
|
+
readonly description: ".NET regex, case-sensitive, matched against the message text.";
|
|
241
|
+
};
|
|
242
|
+
readonly level: {
|
|
243
|
+
readonly type: "string";
|
|
244
|
+
readonly enum: readonly ["any", "log", "warning", "error", "exception"];
|
|
245
|
+
readonly description: "any (default) | log | warning | error (Error, Exception, Assert) | exception.";
|
|
246
|
+
};
|
|
247
|
+
};
|
|
248
|
+
readonly additionalProperties: false;
|
|
249
|
+
};
|
|
250
|
+
readonly ui: {
|
|
251
|
+
readonly type: "object";
|
|
252
|
+
readonly description: string;
|
|
253
|
+
readonly properties: {
|
|
254
|
+
readonly text_contains: {
|
|
255
|
+
readonly type: "string";
|
|
256
|
+
readonly minLength: 1;
|
|
257
|
+
readonly description: "Node display text contains this (normalised, case-insensitive; a control's text is its label).";
|
|
258
|
+
};
|
|
259
|
+
readonly path: {
|
|
260
|
+
readonly type: "string";
|
|
261
|
+
readonly minLength: 1;
|
|
262
|
+
readonly description: "Node hierarchy path or trailing path suffix ('Popup/Title').";
|
|
263
|
+
};
|
|
264
|
+
readonly visible: {
|
|
265
|
+
readonly type: "boolean";
|
|
266
|
+
readonly description: "true (default) = count on-screen nodes only; false = count nodes that exist but are not visible.";
|
|
267
|
+
};
|
|
268
|
+
readonly matches: {
|
|
269
|
+
readonly type: "boolean";
|
|
270
|
+
readonly description: "true (default) = holds while at least one node matches; false = holds while none does (a popup closed).";
|
|
271
|
+
};
|
|
272
|
+
};
|
|
273
|
+
readonly additionalProperties: false;
|
|
274
|
+
};
|
|
275
|
+
readonly object: {
|
|
276
|
+
readonly type: "object";
|
|
277
|
+
readonly description: string;
|
|
278
|
+
readonly properties: {
|
|
279
|
+
readonly path: {
|
|
280
|
+
readonly type: "string";
|
|
281
|
+
readonly minLength: 1;
|
|
282
|
+
readonly description: "Hierarchy path (plain names, 'Root/Child') or a bare name (first match anywhere).";
|
|
283
|
+
};
|
|
284
|
+
readonly object_id: {
|
|
285
|
+
readonly type: "string";
|
|
286
|
+
readonly description: "Instance id (e.g. a ui_snapshot node id). Alternative to path.";
|
|
287
|
+
};
|
|
288
|
+
readonly state: {
|
|
289
|
+
readonly type: "string";
|
|
290
|
+
readonly enum: readonly ["exists", "active", "inactive", "destroyed"];
|
|
291
|
+
readonly description: "exists (default) | active (activeInHierarchy) | inactive | destroyed (absent).";
|
|
292
|
+
};
|
|
293
|
+
};
|
|
294
|
+
readonly additionalProperties: false;
|
|
295
|
+
};
|
|
296
|
+
readonly project_command: {
|
|
297
|
+
readonly type: "object";
|
|
298
|
+
readonly required: readonly ["id"];
|
|
299
|
+
readonly description: string;
|
|
300
|
+
readonly properties: {
|
|
301
|
+
readonly id: {
|
|
302
|
+
readonly type: "string";
|
|
303
|
+
readonly minLength: 1;
|
|
304
|
+
readonly description: "Project command id (project.<owner>.<command>).";
|
|
305
|
+
};
|
|
306
|
+
readonly args: {
|
|
307
|
+
readonly type: "object";
|
|
308
|
+
readonly description: "The command's typed arguments (validated against its schema once, at start).";
|
|
309
|
+
};
|
|
310
|
+
readonly field: {
|
|
311
|
+
readonly type: "string";
|
|
312
|
+
readonly minLength: 1;
|
|
313
|
+
readonly description: "Top-level field of the command's JSON object result that must be true.";
|
|
314
|
+
};
|
|
315
|
+
};
|
|
316
|
+
readonly additionalProperties: false;
|
|
317
|
+
};
|
|
318
|
+
readonly frames: {
|
|
319
|
+
readonly type: "integer";
|
|
320
|
+
readonly minimum: 0;
|
|
321
|
+
readonly maximum: 1000000;
|
|
322
|
+
readonly description: "Holds after this many frames have run since the start.";
|
|
323
|
+
};
|
|
324
|
+
readonly ms: {
|
|
325
|
+
readonly type: "number";
|
|
326
|
+
readonly minimum: 0;
|
|
327
|
+
readonly maximum: 3600000;
|
|
328
|
+
readonly description: "Holds after this many ms (the call's `time` base) since the start.";
|
|
329
|
+
};
|
|
330
|
+
};
|
|
331
|
+
readonly additionalProperties: false;
|
|
332
|
+
};
|
|
333
|
+
/** True when a condition object has exactly one key (the bridge enforces the same rule). */
|
|
334
|
+
export declare function isSingleKeyCondition(value: unknown): boolean;
|
|
@@ -0,0 +1,99 @@
|
|
|
1
|
+
// Condition shapes shared by unity_open_mcp_playtest_wait (`condition`) and
|
|
2
|
+
// unity_senses_capture_series (`start_on`). A condition is an object with
|
|
3
|
+
// exactly one key: a leaf (log / ui / object / project_command / frames / ms)
|
|
4
|
+
// or `all` / `any` over leaves (one level deep). The bridge parses and
|
|
5
|
+
// enforces the one-key rule; the schema publishes the vocabulary.
|
|
6
|
+
export const OBJECT_STATES = ["exists", "active", "inactive", "destroyed"];
|
|
7
|
+
export const LOG_LEVELS = ["any", "log", "warning", "error", "exception"];
|
|
8
|
+
export const CONDITION_LEAVES = ["log", "ui", "object", "project_command", "frames", "ms"];
|
|
9
|
+
export const CONDITION_MAX_CHILDREN = 16;
|
|
10
|
+
const leafProperties = {
|
|
11
|
+
log: {
|
|
12
|
+
type: "object",
|
|
13
|
+
required: ["pattern"],
|
|
14
|
+
description: "A console message logged after the wait started matches `pattern` (latched once seen; reports the frame it was logged in).",
|
|
15
|
+
properties: {
|
|
16
|
+
pattern: { type: "string", minLength: 1, description: ".NET regex, case-sensitive, matched against the message text." },
|
|
17
|
+
level: {
|
|
18
|
+
type: "string",
|
|
19
|
+
enum: [...LOG_LEVELS],
|
|
20
|
+
description: "any (default) | log | warning | error (Error, Exception, Assert) | exception.",
|
|
21
|
+
},
|
|
22
|
+
},
|
|
23
|
+
additionalProperties: false,
|
|
24
|
+
},
|
|
25
|
+
ui: {
|
|
26
|
+
type: "object",
|
|
27
|
+
description: "A ui_snapshot query over the uGUI screen model matches (or, with matches:false, stops matching). " +
|
|
28
|
+
"Needs text_contains and/or path. Requires com.unity.ugui.",
|
|
29
|
+
properties: {
|
|
30
|
+
text_contains: { type: "string", minLength: 1, description: "Node display text contains this (normalised, case-insensitive; a control's text is its label)." },
|
|
31
|
+
path: { type: "string", minLength: 1, description: "Node hierarchy path or trailing path suffix ('Popup/Title')." },
|
|
32
|
+
visible: { type: "boolean", description: "true (default) = count on-screen nodes only; false = count nodes that exist but are not visible." },
|
|
33
|
+
matches: { type: "boolean", description: "true (default) = holds while at least one node matches; false = holds while none does (a popup closed)." },
|
|
34
|
+
},
|
|
35
|
+
additionalProperties: false,
|
|
36
|
+
},
|
|
37
|
+
object: {
|
|
38
|
+
type: "object",
|
|
39
|
+
description: "A GameObject (loaded scenes + DontDestroyOnLoad, inactive included) by path or object_id is in `state`. " +
|
|
40
|
+
"Once found it is tracked: destroyed means that object was destroyed.",
|
|
41
|
+
properties: {
|
|
42
|
+
path: { type: "string", minLength: 1, description: "Hierarchy path (plain names, 'Root/Child') or a bare name (first match anywhere)." },
|
|
43
|
+
object_id: { type: "string", description: "Instance id (e.g. a ui_snapshot node id). Alternative to path." },
|
|
44
|
+
state: { type: "string", enum: [...OBJECT_STATES], description: "exists (default) | active (activeInHierarchy) | inactive | destroyed (absent)." },
|
|
45
|
+
},
|
|
46
|
+
additionalProperties: false,
|
|
47
|
+
},
|
|
48
|
+
project_command: {
|
|
49
|
+
type: "object",
|
|
50
|
+
required: ["id"],
|
|
51
|
+
description: "The project's own predicate: a synchronous, read-only project command (unity_open_mcp_project_commands) " +
|
|
52
|
+
"called at each poll holds when it returns JSON true — or, with `field`, an object whose `field` is true. " +
|
|
53
|
+
"Mutating or async commands are refused (command_not_allowed); there is no arbitrary C# predicate.",
|
|
54
|
+
properties: {
|
|
55
|
+
id: { type: "string", minLength: 1, description: "Project command id (project.<owner>.<command>)." },
|
|
56
|
+
args: { type: "object", description: "The command's typed arguments (validated against its schema once, at start)." },
|
|
57
|
+
field: { type: "string", minLength: 1, description: "Top-level field of the command's JSON object result that must be true." },
|
|
58
|
+
},
|
|
59
|
+
additionalProperties: false,
|
|
60
|
+
},
|
|
61
|
+
frames: { type: "integer", minimum: 0, maximum: 1_000_000, description: "Holds after this many frames have run since the start." },
|
|
62
|
+
ms: { type: "number", minimum: 0, maximum: 3_600_000, description: "Holds after this many ms (the call's `time` base) since the start." },
|
|
63
|
+
};
|
|
64
|
+
const leafCondition = {
|
|
65
|
+
type: "object",
|
|
66
|
+
description: "Exactly one of log, ui, object, project_command, frames, ms.",
|
|
67
|
+
properties: leafProperties,
|
|
68
|
+
additionalProperties: false,
|
|
69
|
+
};
|
|
70
|
+
/** The condition object schema (leaf, or all / any over leaves). */
|
|
71
|
+
export function conditionSchema(description) {
|
|
72
|
+
return {
|
|
73
|
+
type: "object",
|
|
74
|
+
description,
|
|
75
|
+
properties: {
|
|
76
|
+
...leafProperties,
|
|
77
|
+
all: {
|
|
78
|
+
type: "array",
|
|
79
|
+
minItems: 1,
|
|
80
|
+
maxItems: CONDITION_MAX_CHILDREN,
|
|
81
|
+
items: leafCondition,
|
|
82
|
+
description: "Holds when every leaf holds at the same poll (log leaves latch once seen).",
|
|
83
|
+
},
|
|
84
|
+
any: {
|
|
85
|
+
type: "array",
|
|
86
|
+
minItems: 1,
|
|
87
|
+
maxItems: CONDITION_MAX_CHILDREN,
|
|
88
|
+
items: leafCondition,
|
|
89
|
+
description: "Holds when one leaf holds; the result names it (fired.path, e.g. condition.any[1]).",
|
|
90
|
+
},
|
|
91
|
+
},
|
|
92
|
+
additionalProperties: false,
|
|
93
|
+
};
|
|
94
|
+
}
|
|
95
|
+
/** True when a condition object has exactly one key (the bridge enforces the same rule). */
|
|
96
|
+
export function isSingleKeyCondition(value) {
|
|
97
|
+
return !!value && typeof value === "object" && !Array.isArray(value) && Object.keys(value).length === 1;
|
|
98
|
+
}
|
|
99
|
+
//# sourceMappingURL=playtest-conditions.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"playtest-conditions.js","sourceRoot":"","sources":["../../src/tools/playtest-conditions.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
export declare const PLAYTEST_SESSION_ACTIONS: readonly ["start", "mark", "status", "end", "resume", "list"];
|
|
2
|
+
export declare const PLAYTEST_VERDICTS: readonly ["ok", "bug", "suspicious"];
|
|
3
|
+
export declare const SESSION_ID_SCHEMA_PATTERN = "^[0-9]{8}-[0-9]{6}-[a-z0-9-]{1,40}$";
|
|
4
|
+
/** Which arguments each action accepts (anything else is invalid_arguments). */
|
|
5
|
+
export declare const PLAYTEST_SESSION_ACTION_KEYS: Record<(typeof PLAYTEST_SESSION_ACTIONS)[number], string[]>;
|
|
6
|
+
export declare const playtestSession: {
|
|
7
|
+
inputSchema: {
|
|
8
|
+
[x: string]: unknown;
|
|
9
|
+
type: "object";
|
|
10
|
+
properties?: {
|
|
11
|
+
[x: string]: object;
|
|
12
|
+
} | undefined;
|
|
13
|
+
required?: string[] | undefined;
|
|
14
|
+
};
|
|
15
|
+
name: string;
|
|
16
|
+
description?: string | undefined;
|
|
17
|
+
outputSchema?: {
|
|
18
|
+
[x: string]: unknown;
|
|
19
|
+
type: "object";
|
|
20
|
+
properties?: {
|
|
21
|
+
[x: string]: object;
|
|
22
|
+
} | undefined;
|
|
23
|
+
required?: string[] | undefined;
|
|
24
|
+
} | undefined;
|
|
25
|
+
annotations?: {
|
|
26
|
+
title?: string | undefined;
|
|
27
|
+
readOnlyHint?: boolean | undefined;
|
|
28
|
+
destructiveHint?: boolean | undefined;
|
|
29
|
+
idempotentHint?: boolean | undefined;
|
|
30
|
+
openWorldHint?: boolean | undefined;
|
|
31
|
+
} | undefined;
|
|
32
|
+
execution?: {
|
|
33
|
+
taskSupport?: "optional" | "required" | "forbidden" | undefined;
|
|
34
|
+
} | undefined;
|
|
35
|
+
_meta?: {
|
|
36
|
+
[x: string]: unknown;
|
|
37
|
+
} | undefined;
|
|
38
|
+
icons?: {
|
|
39
|
+
src: string;
|
|
40
|
+
mimeType?: string | undefined;
|
|
41
|
+
sizes?: string[] | undefined;
|
|
42
|
+
theme?: "light" | "dark" | undefined;
|
|
43
|
+
}[] | undefined;
|
|
44
|
+
title?: string | undefined;
|
|
45
|
+
};
|
|
@@ -0,0 +1,105 @@
|
|
|
1
|
+
// Playtest — session recorder (server-side; group `playtest`).
|
|
2
|
+
//
|
|
3
|
+
// start → mark … → end. While a session is open, the owner's input / wait /
|
|
4
|
+
// capture / project-command calls (and play-mode / Game view changes) are
|
|
5
|
+
// recorded automatically into an append-only log in the platform app-data
|
|
6
|
+
// folder; `end` writes report.md + frames + thumbnails next to it. Local
|
|
7
|
+
// route: the MCP server owns the log (it sees every call); the bridge only
|
|
8
|
+
// writes the frames. See src/playtest/recorder.ts.
|
|
9
|
+
import { makeTool } from "./schema-fragments.js";
|
|
10
|
+
export const PLAYTEST_SESSION_ACTIONS = ["start", "mark", "status", "end", "resume", "list"];
|
|
11
|
+
export const PLAYTEST_VERDICTS = ["ok", "bug", "suspicious"];
|
|
12
|
+
const SNAPSHOT_NAME_PATTERN = "^[A-Za-z0-9][A-Za-z0-9._-]{0,63}$";
|
|
13
|
+
export const SESSION_ID_SCHEMA_PATTERN = "^[0-9]{8}-[0-9]{6}-[a-z0-9-]{1,40}$";
|
|
14
|
+
/** Which arguments each action accepts (anything else is invalid_arguments). */
|
|
15
|
+
export const PLAYTEST_SESSION_ACTION_KEYS = {
|
|
16
|
+
start: ["name", "device", "snapshot", "use_snapshot"],
|
|
17
|
+
mark: ["label", "note", "verdict", "session"],
|
|
18
|
+
status: [],
|
|
19
|
+
end: ["note", "diff", "session"],
|
|
20
|
+
resume: ["session"],
|
|
21
|
+
list: ["limit"],
|
|
22
|
+
};
|
|
23
|
+
export const playtestSession = makeTool("unity_open_mcp_playtest_session", "Record a playtest so a human can review it: start → mark each step → end writes a report. While a session is " +
|
|
24
|
+
"open, YOUR input (inputsim_*), wait (playtest_wait), capture (screenshots, capture_inline, capture_series, " +
|
|
25
|
+
"visual_compare), project-command (project_commands invoke, project-command / play-mode jobs) and control " +
|
|
26
|
+
"(editor_set_state, game_view set_*) calls are recorded automatically: tool, arguments with secrets redacted, " +
|
|
27
|
+
"status, duration, the frames they wrote, and console errors / exceptions logged during them or right after " +
|
|
28
|
+
"(matched by time from the bridge event stream). Other agents' calls are never recorded into your session. " +
|
|
29
|
+
"ACTIONS: start {name, device (free-text summary; the Game view / Simulator state is read too), snapshot:true " +
|
|
30
|
+
"(take a player_state snapshot now and diff it at end) or use_snapshot:<existing name>} — one open session per " +
|
|
31
|
+
"agent, a second start answers session_already_open; mark {label, verdict ok|bug|suspicious (default ok), note} " +
|
|
32
|
+
"after each player-visible step — answers how many errors the step logged; status — your open session, plus " +
|
|
33
|
+
"orphaned ones; end {note, diff (default true)} — writes report.md + full frames + thumbnails (steps with " +
|
|
34
|
+
"verdicts, the error list with first occurrence and stack, the state diff) and returns its path and a compact " +
|
|
35
|
+
"summary: hand the path to the human. The log is appended to disk per call in the app-data folder " +
|
|
36
|
+
"(…/unity-open-mcp/playtest-sessions/<company>/<product>/<session>/), so it survives a domain reload and an MCP " +
|
|
37
|
+
"server restart: after a restart call end (or resume) with session:<id> — the report names any call that was " +
|
|
38
|
+
"in flight and lost (no_open_session lists orphaned sessions). list = this project's sessions. Bounded: 500 " +
|
|
39
|
+
"calls, 200 marks, 300 frames (512 MB), 60 thumbnails per session.", {
|
|
40
|
+
required: ["action"],
|
|
41
|
+
properties: {
|
|
42
|
+
action: {
|
|
43
|
+
type: "string",
|
|
44
|
+
enum: [...PLAYTEST_SESSION_ACTIONS],
|
|
45
|
+
description: "start: open a session (recording begins). mark: close a step with a verdict. status: your open session. " +
|
|
46
|
+
"end: write the report. resume: re-attach a session left open by a stopped MCP server process. list: this project's sessions.",
|
|
47
|
+
},
|
|
48
|
+
name: {
|
|
49
|
+
type: "string",
|
|
50
|
+
minLength: 1,
|
|
51
|
+
maxLength: 80,
|
|
52
|
+
description: "[start] What the playtest covers (default \"playtest\"); also part of the session folder name.",
|
|
53
|
+
},
|
|
54
|
+
device: {
|
|
55
|
+
type: "string",
|
|
56
|
+
maxLength: 200,
|
|
57
|
+
description: "[start] Device / resolution summary for the report (e.g. \"iPhone 13 portrait via Device Simulator\"). The " +
|
|
58
|
+
"current Game view / Simulator state is recorded as well.",
|
|
59
|
+
},
|
|
60
|
+
snapshot: {
|
|
61
|
+
type: "boolean",
|
|
62
|
+
description: "[start] Take a player_state snapshot now (named playtest-<session>) and put its diff against the state at " +
|
|
63
|
+
"end into the report. Fails the start (snapshot_failed) rather than run unisolated. Prefer the project's own " +
|
|
64
|
+
"playtest.begin / playtest.end hook when it has one.",
|
|
65
|
+
},
|
|
66
|
+
use_snapshot: {
|
|
67
|
+
type: "string",
|
|
68
|
+
pattern: SNAPSHOT_NAME_PATTERN,
|
|
69
|
+
description: "[start] Diff against this existing player_state snapshot at end instead of taking a new one.",
|
|
70
|
+
},
|
|
71
|
+
label: {
|
|
72
|
+
type: "string",
|
|
73
|
+
minLength: 1,
|
|
74
|
+
maxLength: 120,
|
|
75
|
+
description: "[mark] The step that just finished, as a tester would name it (\"Tap Start Wave\").",
|
|
76
|
+
},
|
|
77
|
+
verdict: {
|
|
78
|
+
type: "string",
|
|
79
|
+
enum: [...PLAYTEST_VERDICTS],
|
|
80
|
+
description: "[mark] ok (default) | bug (wrong behaviour seen) | suspicious (needs a human look).",
|
|
81
|
+
},
|
|
82
|
+
note: {
|
|
83
|
+
type: "string",
|
|
84
|
+
maxLength: 2000,
|
|
85
|
+
description: "[mark / end] Free text: what was seen, expected vs actual. Secrets are redacted.",
|
|
86
|
+
},
|
|
87
|
+
session: {
|
|
88
|
+
type: "string",
|
|
89
|
+
pattern: SESSION_ID_SCHEMA_PATTERN,
|
|
90
|
+
description: "[mark / end / resume] The session id start returned. Needed only after an MCP server restart, to adopt the " +
|
|
91
|
+
"session the stopped process left open.",
|
|
92
|
+
},
|
|
93
|
+
diff: {
|
|
94
|
+
type: "boolean",
|
|
95
|
+
description: "[end] Diff the session's player-state snapshot against the current state into the report (default true).",
|
|
96
|
+
},
|
|
97
|
+
limit: {
|
|
98
|
+
type: "integer",
|
|
99
|
+
minimum: 1,
|
|
100
|
+
maximum: 50,
|
|
101
|
+
description: "[list] Newest sessions to list (default 10).",
|
|
102
|
+
},
|
|
103
|
+
},
|
|
104
|
+
});
|
|
105
|
+
//# sourceMappingURL=playtest-session.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"playtest-session.js","sourceRoot":"","sources":["../../src/tools/playtest-session.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
/** Longest wait (timeout_ms) the direct call polls inline; longer ones become a job. */
|
|
2
|
+
export declare const PLAYTEST_WAIT_INLINE_LIMIT_MS = 40000;
|
|
3
|
+
export declare const PLAYTEST_WAIT_DEFAULT_TIMEOUT_MS = 30000;
|
|
4
|
+
/** Mirrors the bridge's PlaytestWaitTools.MaxTimeoutMs. */
|
|
5
|
+
export declare const PLAYTEST_WAIT_MAX_TIMEOUT_MS = 600000;
|
|
6
|
+
export declare const PLAYTEST_WAIT_MAX_POLL_EVERY_FRAMES = 600;
|
|
7
|
+
export declare const playtestWait: {
|
|
8
|
+
inputSchema: {
|
|
9
|
+
[x: string]: unknown;
|
|
10
|
+
type: "object";
|
|
11
|
+
properties?: {
|
|
12
|
+
[x: string]: object;
|
|
13
|
+
} | undefined;
|
|
14
|
+
required?: string[] | undefined;
|
|
15
|
+
};
|
|
16
|
+
name: string;
|
|
17
|
+
description?: string | undefined;
|
|
18
|
+
outputSchema?: {
|
|
19
|
+
[x: string]: unknown;
|
|
20
|
+
type: "object";
|
|
21
|
+
properties?: {
|
|
22
|
+
[x: string]: object;
|
|
23
|
+
} | undefined;
|
|
24
|
+
required?: string[] | undefined;
|
|
25
|
+
} | undefined;
|
|
26
|
+
annotations?: {
|
|
27
|
+
title?: string | undefined;
|
|
28
|
+
readOnlyHint?: boolean | undefined;
|
|
29
|
+
destructiveHint?: boolean | undefined;
|
|
30
|
+
idempotentHint?: boolean | undefined;
|
|
31
|
+
openWorldHint?: boolean | undefined;
|
|
32
|
+
} | undefined;
|
|
33
|
+
execution?: {
|
|
34
|
+
taskSupport?: "optional" | "required" | "forbidden" | undefined;
|
|
35
|
+
} | undefined;
|
|
36
|
+
_meta?: {
|
|
37
|
+
[x: string]: unknown;
|
|
38
|
+
} | undefined;
|
|
39
|
+
icons?: {
|
|
40
|
+
src: string;
|
|
41
|
+
mimeType?: string | undefined;
|
|
42
|
+
sizes?: string[] | undefined;
|
|
43
|
+
theme?: "light" | "dark" | undefined;
|
|
44
|
+
}[] | undefined;
|
|
45
|
+
title?: string | undefined;
|
|
46
|
+
};
|