agent-scenario-loop 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (170) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +119 -0
  3. package/app/profile-session.ts +812 -0
  4. package/core/config-template.json +41 -0
  5. package/dist/core/agent-summary.d.ts +15 -0
  6. package/dist/core/agent-summary.js +177 -0
  7. package/dist/core/artifact-contract.d.ts +151 -0
  8. package/dist/core/artifact-contract.js +897 -0
  9. package/dist/core/artifact-layout.d.ts +56 -0
  10. package/dist/core/artifact-layout.js +61 -0
  11. package/dist/core/artifact-writer.d.ts +44 -0
  12. package/dist/core/artifact-writer.js +55 -0
  13. package/dist/core/comparison.d.ts +133 -0
  14. package/dist/core/comparison.js +294 -0
  15. package/dist/core/evidence-interpreter.d.ts +28 -0
  16. package/dist/core/evidence-interpreter.js +69 -0
  17. package/dist/core/execution-plan.d.ts +44 -0
  18. package/dist/core/execution-plan.js +95 -0
  19. package/dist/core/planner.d.ts +132 -0
  20. package/dist/core/planner.js +812 -0
  21. package/dist/core/ports.d.ts +198 -0
  22. package/dist/core/ports.js +146 -0
  23. package/dist/core/run-index.d.ts +62 -0
  24. package/dist/core/run-index.js +143 -0
  25. package/dist/core/schema-validator.d.ts +86 -0
  26. package/dist/core/schema-validator.js +407 -0
  27. package/dist/index.d.ts +11 -0
  28. package/dist/index.js +27 -0
  29. package/dist/runner/agent-device-driver.d.ts +126 -0
  30. package/dist/runner/agent-device-driver.js +168 -0
  31. package/dist/runner/agent-device.d.ts +295 -0
  32. package/dist/runner/agent-device.js +1271 -0
  33. package/dist/runner/android-adb-driver.d.ts +175 -0
  34. package/dist/runner/android-adb-driver.js +399 -0
  35. package/dist/runner/android-adb.d.ts +254 -0
  36. package/dist/runner/android-adb.js +1618 -0
  37. package/dist/runner/argent-driver.d.ts +183 -0
  38. package/dist/runner/argent-driver.js +297 -0
  39. package/dist/runner/argent.d.ts +349 -0
  40. package/dist/runner/argent.js +1211 -0
  41. package/dist/runner/check-plan.d.ts +45 -0
  42. package/dist/runner/check-plan.js +210 -0
  43. package/dist/runner/cli.d.ts +20 -0
  44. package/dist/runner/cli.js +23 -0
  45. package/dist/runner/compare-latest.d.ts +99 -0
  46. package/dist/runner/compare-latest.js +233 -0
  47. package/dist/runner/compare.d.ts +58 -0
  48. package/dist/runner/compare.js +157 -0
  49. package/dist/runner/demo-loop.d.ts +45 -0
  50. package/dist/runner/demo-loop.js +170 -0
  51. package/dist/runner/example-android-live.d.ts +137 -0
  52. package/dist/runner/example-android-live.js +454 -0
  53. package/dist/runner/example-ios-live.d.ts +137 -0
  54. package/dist/runner/example-ios-live.js +471 -0
  55. package/dist/runner/host-doctor.d.ts +131 -0
  56. package/dist/runner/host-doctor.js +628 -0
  57. package/dist/runner/init-project.d.ts +88 -0
  58. package/dist/runner/init-project.js +263 -0
  59. package/dist/runner/ios-simctl-driver.d.ts +69 -0
  60. package/dist/runner/ios-simctl-driver.js +97 -0
  61. package/dist/runner/ios-simctl.d.ts +254 -0
  62. package/dist/runner/ios-simctl.js +1415 -0
  63. package/dist/runner/live-android.d.ts +137 -0
  64. package/dist/runner/live-android.js +539 -0
  65. package/dist/runner/live-comparison.d.ts +67 -0
  66. package/dist/runner/live-comparison.js +147 -0
  67. package/dist/runner/live-ios.d.ts +137 -0
  68. package/dist/runner/live-ios.js +460 -0
  69. package/dist/runner/live-proof-summary.d.ts +263 -0
  70. package/dist/runner/live-proof-summary.js +465 -0
  71. package/dist/runner/live-proof.d.ts +467 -0
  72. package/dist/runner/live-proof.js +920 -0
  73. package/dist/runner/local-env.d.ts +64 -0
  74. package/dist/runner/local-env.js +155 -0
  75. package/dist/runner/profile-android.d.ts +82 -0
  76. package/dist/runner/profile-android.js +671 -0
  77. package/dist/runner/profile-ios.d.ts +108 -0
  78. package/dist/runner/profile-ios.js +532 -0
  79. package/dist/runner/profile-mobile.d.ts +254 -0
  80. package/dist/runner/profile-mobile.js +1307 -0
  81. package/dist/runner/validate-project.d.ts +273 -0
  82. package/dist/runner/validate-project.js +1501 -0
  83. package/docs/adapters.md +145 -0
  84. package/docs/api.md +94 -0
  85. package/docs/authoring.md +196 -0
  86. package/docs/concepts.md +136 -0
  87. package/docs/consumer-rehearsal.md +115 -0
  88. package/docs/contracts.md +267 -0
  89. package/docs/live-proofs.md +270 -0
  90. package/docs/principles.md +46 -0
  91. package/examples/event-logs/app-startup-baseline.log +4 -0
  92. package/examples/event-logs/app-startup-current.log +4 -0
  93. package/examples/minimal-app/README.md +70 -0
  94. package/examples/mobile-app/README.md +302 -0
  95. package/examples/mobile-app/app.json +22 -0
  96. package/examples/mobile-app/asl/package-scripts.json +32 -0
  97. package/examples/mobile-app/asl.config.json +37 -0
  98. package/examples/mobile-app/event-logs/android-app-startup.log +4 -0
  99. package/examples/mobile-app/event-logs/android-open-close-cycle.log +12 -0
  100. package/examples/mobile-app/event-logs/android-scroll-settle.log +12 -0
  101. package/examples/mobile-app/event-logs/app-startup.log +4 -0
  102. package/examples/mobile-app/event-logs/open-close-cycle.log +12 -0
  103. package/examples/mobile-app/event-logs/scroll-settle.log +12 -0
  104. package/examples/mobile-app/index.ts +20 -0
  105. package/examples/mobile-app/metro.config.js +20 -0
  106. package/examples/mobile-app/package.json +62 -0
  107. package/examples/mobile-app/patches/expo-modules-jsi@56.0.10.patch +19 -0
  108. package/examples/mobile-app/plugins/with-ios-build-compat.js +271 -0
  109. package/examples/mobile-app/pnpm-lock.yaml +4440 -0
  110. package/examples/mobile-app/runner-manifests/evidence-provider.json +79 -0
  111. package/examples/mobile-app/runner-manifests/primary-runner.json +19 -0
  112. package/examples/mobile-app/scenarios/android/app-startup-video.json +73 -0
  113. package/examples/mobile-app/scenarios/android/app-startup.json +44 -0
  114. package/examples/mobile-app/scenarios/android/open-close-cycle.json +54 -0
  115. package/examples/mobile-app/scenarios/android/scroll-settle.json +49 -0
  116. package/examples/mobile-app/scenarios/ios/app-startup.json +44 -0
  117. package/examples/mobile-app/scenarios/ios/open-close-cycle.json +54 -0
  118. package/examples/mobile-app/scenarios/ios/scroll-settle.json +49 -0
  119. package/examples/mobile-app/scenarios/mobile/app-startup.json +91 -0
  120. package/examples/mobile-app/scenarios/mobile/open-close-cycle.json +160 -0
  121. package/examples/mobile-app/scenarios/mobile/scroll-settle.json +148 -0
  122. package/examples/mobile-app/scripts/asl-capture-accessibility-provider.mjs +112 -0
  123. package/examples/mobile-app/scripts/asl-capture-profiler-provider.mjs +127 -0
  124. package/examples/mobile-app/src/devtools/profile-session.ts +7 -0
  125. package/examples/mobile-app/src/example-screen.tsx +322 -0
  126. package/examples/mobile-app/tsconfig.json +16 -0
  127. package/examples/mobile-app/tsconfig.typecheck.json +13 -0
  128. package/examples/runners/README.md +44 -0
  129. package/examples/runners/adb-android.json +25 -0
  130. package/examples/runners/agent-device-android.json +27 -0
  131. package/examples/runners/agent-device-ios.json +27 -0
  132. package/examples/runners/argent-android.json +32 -0
  133. package/examples/runners/argent-ios.json +32 -0
  134. package/examples/runners/argent-react-profiler-provider.json +15 -0
  135. package/examples/runners/axe-accessibility-provider.json +24 -0
  136. package/examples/runners/manual-log-ingest.json +9 -0
  137. package/examples/runners/rozenite-profiler-provider.json +9 -0
  138. package/examples/runners/script-accessibility-provider.json +24 -0
  139. package/examples/runners/script-memory-provider.json +24 -0
  140. package/examples/runners/script-network-provider.json +24 -0
  141. package/examples/runners/script-profiler-provider.json +30 -0
  142. package/examples/runners/xcodebuildmcp-ios.json +29 -0
  143. package/examples/scenarios/ios/app-startup.json +28 -0
  144. package/examples/scenarios/ios/open-close-cycle.json +35 -0
  145. package/examples/scenarios/mobile/app-startup.json +72 -0
  146. package/examples/scenarios/mobile/media-open-close.json +141 -0
  147. package/examples/scenarios/mobile/open-close-cycle.json +135 -0
  148. package/examples/scenarios/mobile/scroll-settle.json +106 -0
  149. package/package.json +240 -0
  150. package/schemas/budget-verdict.schema.json +115 -0
  151. package/schemas/causal-run.schema.json +279 -0
  152. package/schemas/comparison.schema.json +196 -0
  153. package/schemas/health.schema.json +108 -0
  154. package/schemas/live-proof-set.schema.json +195 -0
  155. package/schemas/live-proof.schema.json +413 -0
  156. package/schemas/manifest.schema.json +204 -0
  157. package/schemas/metrics.schema.json +137 -0
  158. package/schemas/project-validation.schema.json +343 -0
  159. package/schemas/runner-capabilities.schema.json +217 -0
  160. package/schemas/scenario.schema.json +400 -0
  161. package/schemas/verdict.schema.json +88 -0
  162. package/templates/evidence-provider.json +83 -0
  163. package/templates/gitignore-snippet +9 -0
  164. package/templates/integration-readme.md +125 -0
  165. package/templates/mobile-scenario.json +133 -0
  166. package/templates/package-scripts.json +32 -0
  167. package/templates/primary-runner.json +19 -0
  168. package/templates/project.config.json +37 -0
  169. package/templates/scripts/asl-capture-accessibility-provider.mjs +112 -0
  170. package/templates/scripts/asl-capture-profiler-provider.mjs +127 -0
@@ -0,0 +1,137 @@
1
+ {
2
+ "$schema": "https://json-schema.org/draft/2020-12/schema",
3
+ "$id": "https://agent-scenario-loop.dev/schemas/metrics.schema.json",
4
+ "title": "Agent Scenario Loop Profile Metrics",
5
+ "type": "object",
6
+ "additionalProperties": false,
7
+ "required": [
8
+ "scenario",
9
+ "runId",
10
+ "status",
11
+ "iterations",
12
+ "durationsMs",
13
+ "p50Ms",
14
+ "p95Ms",
15
+ "failures",
16
+ "timeouts",
17
+ "openDurationsMs",
18
+ "closeDurationsMs",
19
+ "incompleteIterations",
20
+ "artifacts"
21
+ ],
22
+ "properties": {
23
+ "scenario": {
24
+ "type": "string"
25
+ },
26
+ "runId": {
27
+ "type": "string"
28
+ },
29
+ "status": {
30
+ "type": "string",
31
+ "enum": ["passed", "failed"]
32
+ },
33
+ "iterations": {
34
+ "type": "integer",
35
+ "minimum": 1
36
+ },
37
+ "durationsMs": {
38
+ "type": "array",
39
+ "items": {
40
+ "type": "number",
41
+ "minimum": 0
42
+ }
43
+ },
44
+ "p50Ms": {
45
+ "type": ["number", "null"],
46
+ "minimum": 0
47
+ },
48
+ "p95Ms": {
49
+ "type": ["number", "null"],
50
+ "minimum": 0
51
+ },
52
+ "failures": {
53
+ "type": "integer",
54
+ "minimum": 0
55
+ },
56
+ "timeouts": {
57
+ "type": "integer",
58
+ "minimum": 0
59
+ },
60
+ "openDurationsMs": {
61
+ "type": "array",
62
+ "items": {
63
+ "type": "number",
64
+ "minimum": 0
65
+ }
66
+ },
67
+ "closeDurationsMs": {
68
+ "type": "array",
69
+ "items": {
70
+ "type": "number",
71
+ "minimum": 0
72
+ }
73
+ },
74
+ "incompleteIterations": {
75
+ "type": "array",
76
+ "uniqueItems": true,
77
+ "items": {
78
+ "type": "integer",
79
+ "minimum": 1
80
+ }
81
+ },
82
+ "artifacts": {
83
+ "type": "object",
84
+ "additionalProperties": true
85
+ },
86
+ "budgetEvaluation": {
87
+ "type": "object",
88
+ "additionalProperties": false,
89
+ "required": ["metric", "pass", "checks", "failedChecks"],
90
+ "properties": {
91
+ "metric": {
92
+ "type": "string"
93
+ },
94
+ "pass": {
95
+ "type": "boolean"
96
+ },
97
+ "checks": {
98
+ "type": "array",
99
+ "items": {
100
+ "$ref": "#/$defs/budgetCheck"
101
+ }
102
+ },
103
+ "failedChecks": {
104
+ "type": "array",
105
+ "items": {
106
+ "type": "string"
107
+ }
108
+ }
109
+ }
110
+ }
111
+ },
112
+ "$defs": {
113
+ "budgetCheck": {
114
+ "type": "object",
115
+ "additionalProperties": false,
116
+ "required": ["name", "actual", "limit", "pass", "unit"],
117
+ "properties": {
118
+ "name": {
119
+ "type": "string"
120
+ },
121
+ "actual": {
122
+ "type": ["number", "integer", "boolean", "null"]
123
+ },
124
+ "limit": {
125
+ "type": ["number", "integer", "boolean"]
126
+ },
127
+ "pass": {
128
+ "type": "boolean"
129
+ },
130
+ "unit": {
131
+ "type": "string",
132
+ "enum": ["ms", "count", "bytes", "percent", "boolean"]
133
+ }
134
+ }
135
+ }
136
+ }
137
+ }
@@ -0,0 +1,343 @@
1
+ {
2
+ "$schema": "https://json-schema.org/draft/2020-12/schema",
3
+ "$id": "https://agent-scenario-loop.dev/schemas/project-validation.schema.json",
4
+ "title": "Agent Scenario Loop Project Validation",
5
+ "type": "object",
6
+ "additionalProperties": false,
7
+ "required": [
8
+ "appHelper",
9
+ "config",
10
+ "configPath",
11
+ "errors",
12
+ "gitignore",
13
+ "nextActions",
14
+ "platform",
15
+ "plans",
16
+ "providerPaths",
17
+ "rootDir",
18
+ "runnerPath",
19
+ "scripts",
20
+ "scenarioCandidateDirectories",
21
+ "scenarioPaths",
22
+ "status",
23
+ "warnings"
24
+ ],
25
+ "properties": {
26
+ "appHelper": {
27
+ "$ref": "#/$defs/appHelper"
28
+ },
29
+ "config": {
30
+ "$ref": "#/$defs/config"
31
+ },
32
+ "configPath": {
33
+ "type": "string"
34
+ },
35
+ "errors": {
36
+ "type": "array",
37
+ "items": {
38
+ "type": "string"
39
+ }
40
+ },
41
+ "gitignore": {
42
+ "$ref": "#/$defs/gitignore"
43
+ },
44
+ "nextActions": {
45
+ "type": "array",
46
+ "items": {
47
+ "$ref": "#/$defs/nextAction"
48
+ }
49
+ },
50
+ "platform": {
51
+ "type": "string",
52
+ "enum": ["ios", "android", "all"]
53
+ },
54
+ "plans": {
55
+ "type": "array",
56
+ "items": {
57
+ "$ref": "#/$defs/plan"
58
+ }
59
+ },
60
+ "providerPaths": {
61
+ "type": "array",
62
+ "items": {
63
+ "type": "string"
64
+ }
65
+ },
66
+ "rootDir": {
67
+ "type": "string"
68
+ },
69
+ "runnerPath": {
70
+ "type": "string"
71
+ },
72
+ "scripts": {
73
+ "$ref": "#/$defs/scripts"
74
+ },
75
+ "scenarioCandidateDirectories": {
76
+ "type": "array",
77
+ "items": {
78
+ "type": "string"
79
+ }
80
+ },
81
+ "scenarioPaths": {
82
+ "type": "array",
83
+ "items": {
84
+ "type": "string"
85
+ }
86
+ },
87
+ "status": {
88
+ "type": "string",
89
+ "enum": ["passed", "failed"]
90
+ },
91
+ "warnings": {
92
+ "type": "array",
93
+ "items": {
94
+ "type": "string"
95
+ }
96
+ }
97
+ },
98
+ "$defs": {
99
+ "appHelper": {
100
+ "type": "object",
101
+ "additionalProperties": false,
102
+ "required": ["missingExports", "path", "status"],
103
+ "properties": {
104
+ "missingExports": {
105
+ "type": "array",
106
+ "items": {
107
+ "type": "string"
108
+ }
109
+ },
110
+ "path": {
111
+ "type": "string"
112
+ },
113
+ "status": {
114
+ "type": "string",
115
+ "enum": ["present", "missing", "incomplete"]
116
+ }
117
+ }
118
+ },
119
+ "gitignore": {
120
+ "type": "object",
121
+ "additionalProperties": false,
122
+ "required": ["missingPatterns", "path", "snippetPath", "status"],
123
+ "properties": {
124
+ "configArtifactPatterns": {
125
+ "type": "array",
126
+ "items": {
127
+ "type": "string"
128
+ }
129
+ },
130
+ "missingConfigArtifactPatterns": {
131
+ "type": "array",
132
+ "items": {
133
+ "type": "string"
134
+ }
135
+ },
136
+ "missingPatterns": {
137
+ "type": "array",
138
+ "items": {
139
+ "type": "string"
140
+ }
141
+ },
142
+ "path": {
143
+ "type": "string"
144
+ },
145
+ "requiredPatterns": {
146
+ "type": "array",
147
+ "items": {
148
+ "type": "string"
149
+ }
150
+ },
151
+ "snippetPath": {
152
+ "type": "string"
153
+ },
154
+ "status": {
155
+ "type": "string",
156
+ "enum": ["present", "missing", "incomplete"]
157
+ }
158
+ }
159
+ },
160
+ "config": {
161
+ "type": "object",
162
+ "additionalProperties": false,
163
+ "required": ["customDrivers", "externalTargetDrivers", "invalidFields", "missingFields", "missingSupportedDrivers", "packageSupportedDrivers", "path", "status", "supportedDrivers"],
164
+ "properties": {
165
+ "customDrivers": {
166
+ "type": "array",
167
+ "items": {
168
+ "type": "string"
169
+ }
170
+ },
171
+ "externalTargetDrivers": {
172
+ "type": "array",
173
+ "items": {
174
+ "type": "string"
175
+ }
176
+ },
177
+ "invalidFields": {
178
+ "type": "array",
179
+ "items": {
180
+ "type": "string"
181
+ }
182
+ },
183
+ "missingFields": {
184
+ "type": "array",
185
+ "items": {
186
+ "type": "string"
187
+ }
188
+ },
189
+ "missingSupportedDrivers": {
190
+ "type": "array",
191
+ "items": {
192
+ "type": "string"
193
+ }
194
+ },
195
+ "packageSupportedDrivers": {
196
+ "type": "array",
197
+ "items": {
198
+ "type": "string"
199
+ }
200
+ },
201
+ "path": {
202
+ "type": "string"
203
+ },
204
+ "status": {
205
+ "type": "string",
206
+ "enum": ["present", "missing", "incomplete"]
207
+ },
208
+ "supportedDrivers": {
209
+ "type": "array",
210
+ "items": {
211
+ "type": "string"
212
+ }
213
+ }
214
+ }
215
+ },
216
+ "nextAction": {
217
+ "type": "object",
218
+ "additionalProperties": false,
219
+ "required": ["code", "message", "severity", "target"],
220
+ "properties": {
221
+ "code": {
222
+ "type": "string"
223
+ },
224
+ "message": {
225
+ "type": "string"
226
+ },
227
+ "severity": {
228
+ "type": "string",
229
+ "enum": ["error", "warning"]
230
+ },
231
+ "target": {
232
+ "type": "string"
233
+ }
234
+ }
235
+ },
236
+ "plan": {
237
+ "type": "object",
238
+ "additionalProperties": false,
239
+ "required": ["healthStatus", "platform", "runId", "scenarioId", "scenarioPath"],
240
+ "properties": {
241
+ "healthStatus": {
242
+ "type": "string",
243
+ "enum": ["passed", "failed", "partial"]
244
+ },
245
+ "platform": {
246
+ "type": "string",
247
+ "enum": ["ios", "android"]
248
+ },
249
+ "runId": {
250
+ "type": "string"
251
+ },
252
+ "scenarioId": {
253
+ "type": "string"
254
+ },
255
+ "scenarioPath": {
256
+ "type": "string"
257
+ }
258
+ }
259
+ },
260
+ "scripts": {
261
+ "type": "object",
262
+ "additionalProperties": false,
263
+ "required": [
264
+ "invalidScripts",
265
+ "invalidPackageJsonScripts",
266
+ "missingPaths",
267
+ "missingPackageJsonScripts",
268
+ "mismatchedPackageJsonScripts",
269
+ "missingScripts",
270
+ "packageJsonPath",
271
+ "packageJsonStatus",
272
+ "path",
273
+ "scriptNames",
274
+ "status",
275
+ "unknownCommands"
276
+ ],
277
+ "properties": {
278
+ "invalidScripts": {
279
+ "type": "array",
280
+ "items": {
281
+ "type": "string"
282
+ }
283
+ },
284
+ "invalidPackageJsonScripts": {
285
+ "type": "array",
286
+ "items": {
287
+ "type": "string"
288
+ }
289
+ },
290
+ "missingPaths": {
291
+ "type": "array",
292
+ "items": {
293
+ "type": "string"
294
+ }
295
+ },
296
+ "missingPackageJsonScripts": {
297
+ "type": "array",
298
+ "items": {
299
+ "type": "string"
300
+ }
301
+ },
302
+ "mismatchedPackageJsonScripts": {
303
+ "type": "array",
304
+ "items": {
305
+ "type": "string"
306
+ }
307
+ },
308
+ "missingScripts": {
309
+ "type": "array",
310
+ "items": {
311
+ "type": "string"
312
+ }
313
+ },
314
+ "packageJsonPath": {
315
+ "type": "string"
316
+ },
317
+ "packageJsonStatus": {
318
+ "type": "string",
319
+ "enum": ["present", "missing", "incomplete"]
320
+ },
321
+ "path": {
322
+ "type": "string"
323
+ },
324
+ "scriptNames": {
325
+ "type": "array",
326
+ "items": {
327
+ "type": "string"
328
+ }
329
+ },
330
+ "status": {
331
+ "type": "string",
332
+ "enum": ["present", "missing", "incomplete"]
333
+ },
334
+ "unknownCommands": {
335
+ "type": "array",
336
+ "items": {
337
+ "type": "string"
338
+ }
339
+ }
340
+ }
341
+ }
342
+ }
343
+ }
@@ -0,0 +1,217 @@
1
+ {
2
+ "$schema": "https://json-schema.org/draft/2020-12/schema",
3
+ "$id": "https://agent-scenario-loop.dev/schemas/runner-capabilities.schema.json",
4
+ "title": "Agent Scenario Loop Runner Capabilities",
5
+ "type": "object",
6
+ "additionalProperties": false,
7
+ "required": ["schemaVersion", "runnerId", "kind", "platforms", "capabilities"],
8
+ "allOf": [
9
+ {
10
+ "if": {
11
+ "properties": {
12
+ "kind": {
13
+ "const": "primary"
14
+ }
15
+ },
16
+ "required": ["kind"]
17
+ },
18
+ "then": {
19
+ "not": {
20
+ "description": "Primary runner manifests cannot declare providerCommands; use an evidenceProvider manifest for command-backed evidence.",
21
+ "required": ["providerCommands"]
22
+ }
23
+ }
24
+ }
25
+ ],
26
+ "properties": {
27
+ "schemaVersion": {
28
+ "type": "string",
29
+ "pattern": "^1\\.0\\.0$"
30
+ },
31
+ "runnerId": {
32
+ "type": "string",
33
+ "pattern": "^[a-z0-9][a-z0-9-]*$"
34
+ },
35
+ "kind": {
36
+ "type": "string",
37
+ "enum": ["primary", "evidenceProvider"]
38
+ },
39
+ "platforms": {
40
+ "type": "array",
41
+ "minItems": 1,
42
+ "uniqueItems": true,
43
+ "items": {
44
+ "type": "string",
45
+ "enum": ["ios", "android"]
46
+ }
47
+ },
48
+ "capabilities": {
49
+ "type": "array",
50
+ "minItems": 1,
51
+ "uniqueItems": true,
52
+ "items": {
53
+ "$ref": "#/$defs/capability"
54
+ }
55
+ },
56
+ "driverActions": {
57
+ "type": "array",
58
+ "uniqueItems": true,
59
+ "items": {
60
+ "$ref": "#/$defs/driverAction"
61
+ }
62
+ },
63
+ "artifactOutputs": {
64
+ "type": "array",
65
+ "uniqueItems": true,
66
+ "items": {
67
+ "$ref": "#/$defs/artifactKind"
68
+ }
69
+ },
70
+ "lifecycle": {
71
+ "type": "array",
72
+ "uniqueItems": true,
73
+ "items": {
74
+ "type": "string",
75
+ "enum": [
76
+ "prepare",
77
+ "launch",
78
+ "startSession",
79
+ "executeStep",
80
+ "waitForTruthEvent",
81
+ "captureEvidence",
82
+ "stopSession",
83
+ "finalize",
84
+ "startWindow",
85
+ "capture",
86
+ "stopWindow"
87
+ ]
88
+ }
89
+ },
90
+ "adapterOptionsSchema": {
91
+ "type": "object",
92
+ "additionalProperties": true
93
+ },
94
+ "providerCommands": {
95
+ "type": "array",
96
+ "items": {
97
+ "$ref": "#/$defs/providerCommand"
98
+ }
99
+ }
100
+ },
101
+ "$defs": {
102
+ "capability": {
103
+ "type": "string",
104
+ "enum": [
105
+ "launch",
106
+ "sessionControl",
107
+ "command",
108
+ "logCapture",
109
+ "artifactWrite",
110
+ "screenshot",
111
+ "video",
112
+ "uiTree",
113
+ "memory",
114
+ "network",
115
+ "profiler",
116
+ "accessibility"
117
+ ]
118
+ },
119
+ "artifactKind": {
120
+ "type": "string",
121
+ "enum": [
122
+ "logs",
123
+ "screenshot",
124
+ "video",
125
+ "uiTree",
126
+ "memory",
127
+ "network",
128
+ "profiler",
129
+ "accessibility",
130
+ "signals"
131
+ ]
132
+ },
133
+ "driverAction": {
134
+ "type": "string",
135
+ "enum": [
136
+ "tap",
137
+ "scroll",
138
+ "assertVisible",
139
+ "inspectTree",
140
+ "screenshot",
141
+ "record",
142
+ "readLogs",
143
+ "collectPerfSignals"
144
+ ]
145
+ },
146
+ "providerCommand": {
147
+ "type": "object",
148
+ "additionalProperties": false,
149
+ "required": ["id", "phase", "command", "outputs"],
150
+ "properties": {
151
+ "id": {
152
+ "type": "string",
153
+ "pattern": "^[a-z0-9][a-z0-9-]*$"
154
+ },
155
+ "phase": {
156
+ "type": "string",
157
+ "enum": ["prepare", "startWindow", "capture", "stopWindow", "finalize"]
158
+ },
159
+ "command": {
160
+ "type": "string",
161
+ "minLength": 1
162
+ },
163
+ "args": {
164
+ "type": "array",
165
+ "items": {
166
+ "type": "string"
167
+ }
168
+ },
169
+ "cwd": {
170
+ "type": "string"
171
+ },
172
+ "env": {
173
+ "type": "object",
174
+ "additionalProperties": {
175
+ "type": "string"
176
+ }
177
+ },
178
+ "outputs": {
179
+ "type": "array",
180
+ "minItems": 1,
181
+ "items": {
182
+ "$ref": "#/$defs/providerCommandOutput"
183
+ }
184
+ }
185
+ }
186
+ },
187
+ "providerCommandOutput": {
188
+ "type": "object",
189
+ "additionalProperties": false,
190
+ "required": ["channel", "kind", "path"],
191
+ "properties": {
192
+ "channel": {
193
+ "type": "string",
194
+ "enum": ["capture", "provider", "signal"]
195
+ },
196
+ "kind": {
197
+ "type": "string",
198
+ "enum": [
199
+ "accessibility",
200
+ "js",
201
+ "logs",
202
+ "memory",
203
+ "network",
204
+ "profiler",
205
+ "screenshot",
206
+ "uiTree",
207
+ "video"
208
+ ]
209
+ },
210
+ "path": {
211
+ "type": "string",
212
+ "minLength": 1
213
+ }
214
+ }
215
+ }
216
+ }
217
+ }