@kaeawc/auto-mobile 0.0.6 → 0.0.7
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +8 -15
- package/README.md.backup +11 -18
- package/dist/schemas/test-plan.schema.json +647 -0
- package/dist/schemas/tool-definitions.json +3532 -0
- package/dist/src/db/migrations/2025_12_28_000_initial_schema.ts +28 -0
- package/dist/src/db/migrations/2025_12_30_000_performance_thresholds.ts +83 -0
- package/dist/src/db/migrations/2025_12_30_001_navigation_graph.ts +200 -0
- package/dist/src/db/migrations/2025_12_31_000_accessibility_baselines.ts +33 -0
- package/dist/src/db/migrations/2025_12_31_001_memory_audit.ts +118 -0
- package/dist/src/db/migrations/2026_01_01_000_recomposition_metrics.ts +41 -0
- package/dist/src/db/migrations/2026_01_02_000_prediction_history.ts +84 -0
- package/dist/src/db/migrations/2026_01_03_000_feature_flags.ts +18 -0
- package/dist/src/db/migrations/2026_01_03_000_test_executions.ts +44 -0
- package/dist/src/db/migrations/2026_01_05_000_tool_calls.ts +30 -0
- package/dist/src/db/migrations/2026_01_08_000_test_coverage.ts +106 -0
- package/dist/src/db/migrations/2026_01_09_000_video_recordings.ts +62 -0
- package/dist/src/db/migrations/2026_01_10_000_device_snapshots.ts +51 -0
- package/dist/src/index.js +129163 -104043
- package/dist/src/index.js.map +628 -463
- package/package.json +23 -3
- package/schemas/test-plan.schema.json +733 -0
- package/schemas/tool-definitions.json +3967 -0
|
@@ -0,0 +1,647 @@
|
|
|
1
|
+
{
|
|
2
|
+
"$schema": "http://json-schema.org/draft-07/schema#",
|
|
3
|
+
"$id": "https://github.com/anthropics/auto-mobile/schemas/test-plan.schema.json",
|
|
4
|
+
"title": "AutoMobile Test Plan",
|
|
5
|
+
"description": "Schema for AutoMobile test plan YAML files used with executePlan and JUnit Runner",
|
|
6
|
+
"type": "object",
|
|
7
|
+
"required": ["name", "steps"],
|
|
8
|
+
"additionalProperties": false,
|
|
9
|
+
"properties": {
|
|
10
|
+
"name": {
|
|
11
|
+
"type": "string",
|
|
12
|
+
"description": "Unique identifier for the test plan",
|
|
13
|
+
"minLength": 1
|
|
14
|
+
},
|
|
15
|
+
"description": {
|
|
16
|
+
"type": "string",
|
|
17
|
+
"description": "Human-readable description of what this test plan does"
|
|
18
|
+
},
|
|
19
|
+
"devices": {
|
|
20
|
+
"type": "array",
|
|
21
|
+
"description": "List of device labels for multi-device test execution. Required when using device parameters or criticalSection.",
|
|
22
|
+
"items": {
|
|
23
|
+
"type": "string",
|
|
24
|
+
"minLength": 1
|
|
25
|
+
},
|
|
26
|
+
"minItems": 1,
|
|
27
|
+
"uniqueItems": true
|
|
28
|
+
},
|
|
29
|
+
"steps": {
|
|
30
|
+
"type": "array",
|
|
31
|
+
"description": "Ordered list of tool execution steps",
|
|
32
|
+
"minItems": 1,
|
|
33
|
+
"items": {
|
|
34
|
+
"$ref": "#/$defs/planStep"
|
|
35
|
+
}
|
|
36
|
+
},
|
|
37
|
+
"mcpVersion": {
|
|
38
|
+
"type": "string",
|
|
39
|
+
"description": "MCP server version this plan was created with",
|
|
40
|
+
"pattern": "^\\d+\\.\\d+\\.\\d+$"
|
|
41
|
+
},
|
|
42
|
+
"generated": {
|
|
43
|
+
"type": "string",
|
|
44
|
+
"description": "DEPRECATED: ISO 8601 timestamp (legacy field, use metadata.createdAt instead)",
|
|
45
|
+
"format": "date-time"
|
|
46
|
+
},
|
|
47
|
+
"appId": {
|
|
48
|
+
"type": "string",
|
|
49
|
+
"description": "DEPRECATED: Application bundle ID (legacy field, use metadata.appId instead)"
|
|
50
|
+
},
|
|
51
|
+
"parameters": {
|
|
52
|
+
"type": "object",
|
|
53
|
+
"description": "DEPRECATED: Plan parameters (legacy field)",
|
|
54
|
+
"additionalProperties": true
|
|
55
|
+
},
|
|
56
|
+
"metadata": {
|
|
57
|
+
"type": "object",
|
|
58
|
+
"description": "Additional metadata about the plan",
|
|
59
|
+
"properties": {
|
|
60
|
+
"createdAt": {
|
|
61
|
+
"type": "string",
|
|
62
|
+
"description": "ISO 8601 timestamp of plan creation",
|
|
63
|
+
"format": "date-time"
|
|
64
|
+
},
|
|
65
|
+
"version": {
|
|
66
|
+
"type": "string",
|
|
67
|
+
"description": "Plan format version",
|
|
68
|
+
"pattern": "^\\d+\\.\\d+\\.\\d+$"
|
|
69
|
+
},
|
|
70
|
+
"appId": {
|
|
71
|
+
"type": "string",
|
|
72
|
+
"description": "Application bundle ID or package name"
|
|
73
|
+
},
|
|
74
|
+
"sessionId": {
|
|
75
|
+
"type": "string",
|
|
76
|
+
"description": "Session identifier for plan execution"
|
|
77
|
+
},
|
|
78
|
+
"toolCallCount": {
|
|
79
|
+
"type": "integer",
|
|
80
|
+
"description": "Number of tool calls in original session",
|
|
81
|
+
"minimum": 0
|
|
82
|
+
},
|
|
83
|
+
"duration": {
|
|
84
|
+
"type": "number",
|
|
85
|
+
"description": "Duration of original session in milliseconds",
|
|
86
|
+
"minimum": 0
|
|
87
|
+
},
|
|
88
|
+
"generatedFromToolCalls": {
|
|
89
|
+
"type": "boolean",
|
|
90
|
+
"description": "Whether this plan was auto-generated from tool call logs"
|
|
91
|
+
},
|
|
92
|
+
"experiments": {
|
|
93
|
+
"type": "array",
|
|
94
|
+
"description": "Active experiments during plan creation",
|
|
95
|
+
"items": {
|
|
96
|
+
"type": "string"
|
|
97
|
+
}
|
|
98
|
+
},
|
|
99
|
+
"treatments": {
|
|
100
|
+
"type": "object",
|
|
101
|
+
"description": "Experiment treatment assignments",
|
|
102
|
+
"additionalProperties": {
|
|
103
|
+
"type": "string"
|
|
104
|
+
}
|
|
105
|
+
},
|
|
106
|
+
"featureFlags": {
|
|
107
|
+
"type": "object",
|
|
108
|
+
"description": "Feature flag values during plan creation",
|
|
109
|
+
"additionalProperties": true
|
|
110
|
+
}
|
|
111
|
+
},
|
|
112
|
+
"additionalProperties": true
|
|
113
|
+
}
|
|
114
|
+
},
|
|
115
|
+
"$defs": {
|
|
116
|
+
"planStep": {
|
|
117
|
+
"type": "object",
|
|
118
|
+
"required": ["tool"],
|
|
119
|
+
"additionalProperties": true,
|
|
120
|
+
"properties": {
|
|
121
|
+
"tool": {
|
|
122
|
+
"type": "string",
|
|
123
|
+
"description": "Name of the MCP tool to execute",
|
|
124
|
+
"minLength": 1
|
|
125
|
+
},
|
|
126
|
+
"params": {
|
|
127
|
+
"description": "Tool-specific parameters (can also be specified as top-level properties)"
|
|
128
|
+
},
|
|
129
|
+
"device": {
|
|
130
|
+
"type": "string",
|
|
131
|
+
"description": "Device label indicating which device this step runs on (required in multi-device plans for non-device-agnostic tools)",
|
|
132
|
+
"minLength": 1
|
|
133
|
+
},
|
|
134
|
+
"label": {
|
|
135
|
+
"type": "string",
|
|
136
|
+
"description": "Human-readable description of what this step does"
|
|
137
|
+
},
|
|
138
|
+
"description": {
|
|
139
|
+
"type": "string",
|
|
140
|
+
"description": "DEPRECATED: Use 'label' instead (legacy field)"
|
|
141
|
+
},
|
|
142
|
+
"expectations": {
|
|
143
|
+
"type": "array",
|
|
144
|
+
"description": "Assertions to validate after step execution",
|
|
145
|
+
"items": {
|
|
146
|
+
"$ref": "#/$defs/expectation"
|
|
147
|
+
}
|
|
148
|
+
}
|
|
149
|
+
},
|
|
150
|
+
"description": "A step can have tool-specific parameters either in a 'params' object or as top-level properties (e.g., 'selector', 'appId', 'text', 'direction', etc.)",
|
|
151
|
+
"allOf": [
|
|
152
|
+
{
|
|
153
|
+
"if": {
|
|
154
|
+
"properties": {
|
|
155
|
+
"tool": {
|
|
156
|
+
"const": "dragAndDrop"
|
|
157
|
+
}
|
|
158
|
+
},
|
|
159
|
+
"required": [
|
|
160
|
+
"tool"
|
|
161
|
+
]
|
|
162
|
+
},
|
|
163
|
+
"then": {
|
|
164
|
+
"properties": {
|
|
165
|
+
"params": {
|
|
166
|
+
"$ref": "#/$defs/dragAndDropParams"
|
|
167
|
+
},
|
|
168
|
+
"source": {
|
|
169
|
+
"$ref": "#/$defs/dragAndDropSelector"
|
|
170
|
+
},
|
|
171
|
+
"target": {
|
|
172
|
+
"$ref": "#/$defs/dragAndDropSelector"
|
|
173
|
+
},
|
|
174
|
+
"pressDurationMs": {
|
|
175
|
+
"type": "number",
|
|
176
|
+
"description": "Press duration ms (min: 600, max: 3000, default: 600)",
|
|
177
|
+
"minimum": 600,
|
|
178
|
+
"maximum": 3000
|
|
179
|
+
},
|
|
180
|
+
"dragDurationMs": {
|
|
181
|
+
"type": "number",
|
|
182
|
+
"description": "Drag duration ms (min: 300, max: 1000, default: 300)",
|
|
183
|
+
"minimum": 300,
|
|
184
|
+
"maximum": 1000
|
|
185
|
+
},
|
|
186
|
+
"holdDurationMs": {
|
|
187
|
+
"type": "number",
|
|
188
|
+
"description": "Hold duration ms (min: 100, max: 3000, default: 100)",
|
|
189
|
+
"minimum": 100,
|
|
190
|
+
"maximum": 3000
|
|
191
|
+
},
|
|
192
|
+
"platform": {
|
|
193
|
+
"type": "string",
|
|
194
|
+
"enum": [
|
|
195
|
+
"android",
|
|
196
|
+
"ios"
|
|
197
|
+
],
|
|
198
|
+
"description": "Platform"
|
|
199
|
+
},
|
|
200
|
+
"sessionUuid": {
|
|
201
|
+
"type": "string",
|
|
202
|
+
"description": "Session UUID for device targeting"
|
|
203
|
+
},
|
|
204
|
+
"keepScreenAwake": {
|
|
205
|
+
"type": "boolean",
|
|
206
|
+
"description": "Keep physical Android devices awake during the session (default: true)"
|
|
207
|
+
}
|
|
208
|
+
},
|
|
209
|
+
"allOf": [
|
|
210
|
+
{
|
|
211
|
+
"anyOf": [
|
|
212
|
+
{
|
|
213
|
+
"required": [
|
|
214
|
+
"source"
|
|
215
|
+
]
|
|
216
|
+
},
|
|
217
|
+
{
|
|
218
|
+
"properties": {
|
|
219
|
+
"params": {
|
|
220
|
+
"required": [
|
|
221
|
+
"source"
|
|
222
|
+
]
|
|
223
|
+
}
|
|
224
|
+
},
|
|
225
|
+
"required": [
|
|
226
|
+
"params"
|
|
227
|
+
]
|
|
228
|
+
}
|
|
229
|
+
]
|
|
230
|
+
},
|
|
231
|
+
{
|
|
232
|
+
"anyOf": [
|
|
233
|
+
{
|
|
234
|
+
"required": [
|
|
235
|
+
"target"
|
|
236
|
+
]
|
|
237
|
+
},
|
|
238
|
+
{
|
|
239
|
+
"properties": {
|
|
240
|
+
"params": {
|
|
241
|
+
"required": [
|
|
242
|
+
"target"
|
|
243
|
+
]
|
|
244
|
+
}
|
|
245
|
+
},
|
|
246
|
+
"required": [
|
|
247
|
+
"params"
|
|
248
|
+
]
|
|
249
|
+
}
|
|
250
|
+
]
|
|
251
|
+
}
|
|
252
|
+
]
|
|
253
|
+
}
|
|
254
|
+
},
|
|
255
|
+
{
|
|
256
|
+
"if": {
|
|
257
|
+
"properties": {
|
|
258
|
+
"tool": {
|
|
259
|
+
"const": "highlight"
|
|
260
|
+
}
|
|
261
|
+
},
|
|
262
|
+
"required": [
|
|
263
|
+
"tool"
|
|
264
|
+
]
|
|
265
|
+
},
|
|
266
|
+
"then": {
|
|
267
|
+
"properties": {
|
|
268
|
+
"params": {
|
|
269
|
+
"$ref": "#/$defs/highlightParams"
|
|
270
|
+
},
|
|
271
|
+
"action": {
|
|
272
|
+
"type": "string",
|
|
273
|
+
"enum": [
|
|
274
|
+
"add",
|
|
275
|
+
"remove",
|
|
276
|
+
"clear",
|
|
277
|
+
"list"
|
|
278
|
+
],
|
|
279
|
+
"description": "Highlight action"
|
|
280
|
+
},
|
|
281
|
+
"highlightId": {
|
|
282
|
+
"type": "string",
|
|
283
|
+
"description": "Highlight ID",
|
|
284
|
+
"minLength": 1
|
|
285
|
+
},
|
|
286
|
+
"shape": {
|
|
287
|
+
"$ref": "#/$defs/highlightShape"
|
|
288
|
+
},
|
|
289
|
+
"platform": {
|
|
290
|
+
"type": "string",
|
|
291
|
+
"enum": [
|
|
292
|
+
"android",
|
|
293
|
+
"ios"
|
|
294
|
+
],
|
|
295
|
+
"description": "Platform"
|
|
296
|
+
},
|
|
297
|
+
"timeoutMs": {
|
|
298
|
+
"type": "number",
|
|
299
|
+
"description": "Highlight request timeout ms (default: 5000)"
|
|
300
|
+
},
|
|
301
|
+
"sessionUuid": {
|
|
302
|
+
"type": "string",
|
|
303
|
+
"description": "Session UUID for device targeting"
|
|
304
|
+
},
|
|
305
|
+
"keepScreenAwake": {
|
|
306
|
+
"type": "boolean",
|
|
307
|
+
"description": "Keep physical Android devices awake during the session (default: true)"
|
|
308
|
+
}
|
|
309
|
+
},
|
|
310
|
+
"allOf": [
|
|
311
|
+
{
|
|
312
|
+
"anyOf": [
|
|
313
|
+
{
|
|
314
|
+
"required": [
|
|
315
|
+
"action"
|
|
316
|
+
]
|
|
317
|
+
},
|
|
318
|
+
{
|
|
319
|
+
"properties": {
|
|
320
|
+
"params": {
|
|
321
|
+
"required": [
|
|
322
|
+
"action"
|
|
323
|
+
]
|
|
324
|
+
}
|
|
325
|
+
},
|
|
326
|
+
"required": [
|
|
327
|
+
"params"
|
|
328
|
+
]
|
|
329
|
+
}
|
|
330
|
+
]
|
|
331
|
+
}
|
|
332
|
+
]
|
|
333
|
+
}
|
|
334
|
+
}
|
|
335
|
+
]
|
|
336
|
+
},
|
|
337
|
+
"dragAndDropSelector": {
|
|
338
|
+
"type": "object",
|
|
339
|
+
"properties": {
|
|
340
|
+
"text": {
|
|
341
|
+
"type": "string",
|
|
342
|
+
"description": "Element text",
|
|
343
|
+
"minLength": 1
|
|
344
|
+
},
|
|
345
|
+
"elementId": {
|
|
346
|
+
"type": "string",
|
|
347
|
+
"description": "Element ID",
|
|
348
|
+
"minLength": 1
|
|
349
|
+
}
|
|
350
|
+
},
|
|
351
|
+
"additionalProperties": false,
|
|
352
|
+
"description": "Selector for dragAndDrop elements",
|
|
353
|
+
"oneOf": [
|
|
354
|
+
{
|
|
355
|
+
"required": [
|
|
356
|
+
"text"
|
|
357
|
+
]
|
|
358
|
+
},
|
|
359
|
+
{
|
|
360
|
+
"required": [
|
|
361
|
+
"elementId"
|
|
362
|
+
]
|
|
363
|
+
}
|
|
364
|
+
]
|
|
365
|
+
},
|
|
366
|
+
"dragAndDropParams": {
|
|
367
|
+
"type": "object",
|
|
368
|
+
"properties": {
|
|
369
|
+
"source": {
|
|
370
|
+
"$ref": "#/$defs/dragAndDropSelector",
|
|
371
|
+
"description": "Source element"
|
|
372
|
+
},
|
|
373
|
+
"target": {
|
|
374
|
+
"$ref": "#/$defs/dragAndDropSelector",
|
|
375
|
+
"description": "Target element"
|
|
376
|
+
},
|
|
377
|
+
"pressDurationMs": {
|
|
378
|
+
"type": "number",
|
|
379
|
+
"description": "Press duration ms (min: 600, max: 3000, default: 600)",
|
|
380
|
+
"minimum": 600,
|
|
381
|
+
"maximum": 3000
|
|
382
|
+
},
|
|
383
|
+
"dragDurationMs": {
|
|
384
|
+
"type": "number",
|
|
385
|
+
"description": "Drag duration ms (min: 300, max: 1000, default: 300)",
|
|
386
|
+
"minimum": 300,
|
|
387
|
+
"maximum": 1000
|
|
388
|
+
},
|
|
389
|
+
"holdDurationMs": {
|
|
390
|
+
"type": "number",
|
|
391
|
+
"description": "Hold duration ms (min: 100, max: 3000, default: 100)",
|
|
392
|
+
"minimum": 100,
|
|
393
|
+
"maximum": 3000
|
|
394
|
+
},
|
|
395
|
+
"platform": {
|
|
396
|
+
"type": "string",
|
|
397
|
+
"enum": [
|
|
398
|
+
"android",
|
|
399
|
+
"ios"
|
|
400
|
+
],
|
|
401
|
+
"description": "Platform"
|
|
402
|
+
},
|
|
403
|
+
"sessionUuid": {
|
|
404
|
+
"type": "string",
|
|
405
|
+
"description": "Session UUID for device targeting"
|
|
406
|
+
},
|
|
407
|
+
"keepScreenAwake": {
|
|
408
|
+
"type": "boolean",
|
|
409
|
+
"description": "Keep physical Android devices awake during the session (default: true)"
|
|
410
|
+
},
|
|
411
|
+
"device": {
|
|
412
|
+
"type": "string",
|
|
413
|
+
"description": "Device label for multi-device plans (e.g., \"A\", \"B\")"
|
|
414
|
+
}
|
|
415
|
+
},
|
|
416
|
+
"additionalProperties": true,
|
|
417
|
+
"description": "Parameters for dragAndDrop"
|
|
418
|
+
},
|
|
419
|
+
"highlightBounds": {
|
|
420
|
+
"type": "object",
|
|
421
|
+
"properties": {
|
|
422
|
+
"x": {
|
|
423
|
+
"type": "number",
|
|
424
|
+
"description": "Bounds x-coordinate"
|
|
425
|
+
},
|
|
426
|
+
"y": {
|
|
427
|
+
"type": "number",
|
|
428
|
+
"description": "Bounds y-coordinate"
|
|
429
|
+
},
|
|
430
|
+
"width": {
|
|
431
|
+
"type": "number",
|
|
432
|
+
"exclusiveMinimum": 0,
|
|
433
|
+
"description": "Bounds width"
|
|
434
|
+
},
|
|
435
|
+
"height": {
|
|
436
|
+
"type": "number",
|
|
437
|
+
"exclusiveMinimum": 0,
|
|
438
|
+
"description": "Bounds height"
|
|
439
|
+
},
|
|
440
|
+
"sourceWidth": {
|
|
441
|
+
"type": [
|
|
442
|
+
"number",
|
|
443
|
+
"null"
|
|
444
|
+
],
|
|
445
|
+
"exclusiveMinimum": 0,
|
|
446
|
+
"description": "Optional source width for coordinate normalization"
|
|
447
|
+
},
|
|
448
|
+
"sourceHeight": {
|
|
449
|
+
"type": [
|
|
450
|
+
"number",
|
|
451
|
+
"null"
|
|
452
|
+
],
|
|
453
|
+
"exclusiveMinimum": 0,
|
|
454
|
+
"description": "Optional source height for coordinate normalization"
|
|
455
|
+
}
|
|
456
|
+
},
|
|
457
|
+
"required": [
|
|
458
|
+
"x",
|
|
459
|
+
"y",
|
|
460
|
+
"width",
|
|
461
|
+
"height"
|
|
462
|
+
],
|
|
463
|
+
"additionalProperties": false,
|
|
464
|
+
"description": "Highlight bounds"
|
|
465
|
+
},
|
|
466
|
+
"highlightStyle": {
|
|
467
|
+
"type": [
|
|
468
|
+
"object",
|
|
469
|
+
"null"
|
|
470
|
+
],
|
|
471
|
+
"properties": {
|
|
472
|
+
"strokeColor": {
|
|
473
|
+
"type": "string",
|
|
474
|
+
"description": "Stroke color (hex or CSS color)"
|
|
475
|
+
},
|
|
476
|
+
"strokeWidth": {
|
|
477
|
+
"type": "number",
|
|
478
|
+
"exclusiveMinimum": 0,
|
|
479
|
+
"description": "Stroke width"
|
|
480
|
+
},
|
|
481
|
+
"fillColor": {
|
|
482
|
+
"type": "string",
|
|
483
|
+
"description": "Fill color (hex or CSS color)"
|
|
484
|
+
},
|
|
485
|
+
"dashPattern": {
|
|
486
|
+
"type": "array",
|
|
487
|
+
"items": {
|
|
488
|
+
"type": "number"
|
|
489
|
+
},
|
|
490
|
+
"minItems": 1,
|
|
491
|
+
"description": "Dash pattern lengths"
|
|
492
|
+
}
|
|
493
|
+
},
|
|
494
|
+
"additionalProperties": false,
|
|
495
|
+
"description": "Highlight style"
|
|
496
|
+
},
|
|
497
|
+
"highlightShape": {
|
|
498
|
+
"type": "object",
|
|
499
|
+
"properties": {
|
|
500
|
+
"type": {
|
|
501
|
+
"type": "string",
|
|
502
|
+
"enum": [
|
|
503
|
+
"box",
|
|
504
|
+
"circle"
|
|
505
|
+
],
|
|
506
|
+
"description": "Highlight shape type"
|
|
507
|
+
},
|
|
508
|
+
"bounds": {
|
|
509
|
+
"$ref": "#/$defs/highlightBounds"
|
|
510
|
+
},
|
|
511
|
+
"style": {
|
|
512
|
+
"$ref": "#/$defs/highlightStyle"
|
|
513
|
+
}
|
|
514
|
+
},
|
|
515
|
+
"required": [
|
|
516
|
+
"type",
|
|
517
|
+
"bounds"
|
|
518
|
+
],
|
|
519
|
+
"additionalProperties": false,
|
|
520
|
+
"description": "Highlight shape definition"
|
|
521
|
+
},
|
|
522
|
+
"highlightParams": {
|
|
523
|
+
"type": "object",
|
|
524
|
+
"properties": {
|
|
525
|
+
"action": {
|
|
526
|
+
"type": "string",
|
|
527
|
+
"enum": [
|
|
528
|
+
"add",
|
|
529
|
+
"remove",
|
|
530
|
+
"clear",
|
|
531
|
+
"list"
|
|
532
|
+
],
|
|
533
|
+
"description": "Highlight action"
|
|
534
|
+
},
|
|
535
|
+
"highlightId": {
|
|
536
|
+
"type": "string",
|
|
537
|
+
"description": "Highlight ID",
|
|
538
|
+
"minLength": 1
|
|
539
|
+
},
|
|
540
|
+
"shape": {
|
|
541
|
+
"$ref": "#/$defs/highlightShape"
|
|
542
|
+
},
|
|
543
|
+
"platform": {
|
|
544
|
+
"type": "string",
|
|
545
|
+
"enum": [
|
|
546
|
+
"android",
|
|
547
|
+
"ios"
|
|
548
|
+
],
|
|
549
|
+
"description": "Platform"
|
|
550
|
+
},
|
|
551
|
+
"timeoutMs": {
|
|
552
|
+
"type": "number",
|
|
553
|
+
"description": "Highlight request timeout ms (default: 5000)"
|
|
554
|
+
},
|
|
555
|
+
"sessionUuid": {
|
|
556
|
+
"type": "string",
|
|
557
|
+
"description": "Session UUID for device targeting"
|
|
558
|
+
},
|
|
559
|
+
"keepScreenAwake": {
|
|
560
|
+
"type": "boolean",
|
|
561
|
+
"description": "Keep physical Android devices awake during the session (default: true)"
|
|
562
|
+
},
|
|
563
|
+
"device": {
|
|
564
|
+
"type": "string",
|
|
565
|
+
"description": "Device label for multi-device plans (e.g., \"A\", \"B\")"
|
|
566
|
+
},
|
|
567
|
+
"deviceId": {
|
|
568
|
+
"type": "string",
|
|
569
|
+
"description": "Device ID override"
|
|
570
|
+
}
|
|
571
|
+
},
|
|
572
|
+
"required": [
|
|
573
|
+
"action"
|
|
574
|
+
],
|
|
575
|
+
"additionalProperties": true,
|
|
576
|
+
"description": "Parameters for highlight"
|
|
577
|
+
},
|
|
578
|
+
"expectation": {
|
|
579
|
+
"type": "object",
|
|
580
|
+
"required": ["type"],
|
|
581
|
+
"additionalProperties": true,
|
|
582
|
+
"properties": {
|
|
583
|
+
"type": {
|
|
584
|
+
"type": "string",
|
|
585
|
+
"description": "Type of assertion to perform"
|
|
586
|
+
},
|
|
587
|
+
"selector": {
|
|
588
|
+
"type": "object",
|
|
589
|
+
"description": "Selector for the element to check",
|
|
590
|
+
"properties": {
|
|
591
|
+
"testTag": {
|
|
592
|
+
"type": "string"
|
|
593
|
+
},
|
|
594
|
+
"text": {
|
|
595
|
+
"type": "string"
|
|
596
|
+
},
|
|
597
|
+
"contentDescription": {
|
|
598
|
+
"type": "string"
|
|
599
|
+
},
|
|
600
|
+
"resourceId": {
|
|
601
|
+
"type": "string"
|
|
602
|
+
},
|
|
603
|
+
"className": {
|
|
604
|
+
"type": "string"
|
|
605
|
+
}
|
|
606
|
+
}
|
|
607
|
+
},
|
|
608
|
+
"text": {
|
|
609
|
+
"type": "string",
|
|
610
|
+
"description": "Text to check for presence/absence"
|
|
611
|
+
}
|
|
612
|
+
}
|
|
613
|
+
},
|
|
614
|
+
"criticalSectionParams": {
|
|
615
|
+
"type": "object",
|
|
616
|
+
"required": ["lock", "steps", "deviceCount"],
|
|
617
|
+
"additionalProperties": false,
|
|
618
|
+
"properties": {
|
|
619
|
+
"lock": {
|
|
620
|
+
"type": "string",
|
|
621
|
+
"description": "Global lock identifier for synchronization across devices",
|
|
622
|
+
"minLength": 1
|
|
623
|
+
},
|
|
624
|
+
"steps": {
|
|
625
|
+
"type": "array",
|
|
626
|
+
"description": "Steps to execute serially within the critical section",
|
|
627
|
+
"minItems": 1,
|
|
628
|
+
"items": {
|
|
629
|
+
"$ref": "#/$defs/planStep"
|
|
630
|
+
}
|
|
631
|
+
},
|
|
632
|
+
"deviceCount": {
|
|
633
|
+
"type": "integer",
|
|
634
|
+
"description": "Expected number of devices that must reach the barrier before execution proceeds",
|
|
635
|
+
"minimum": 1
|
|
636
|
+
},
|
|
637
|
+
"timeout": {
|
|
638
|
+
"type": "integer",
|
|
639
|
+
"description": "Barrier timeout in milliseconds (default: 30000ms)",
|
|
640
|
+
"minimum": 0,
|
|
641
|
+
"default": 30000
|
|
642
|
+
}
|
|
643
|
+
},
|
|
644
|
+
"description": "Parameters for criticalSection tool that provides barrier synchronization and mutex-based serial execution across multiple devices"
|
|
645
|
+
}
|
|
646
|
+
}
|
|
647
|
+
}
|