agent-scenario-loop 0.1.2 → 0.1.3

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 (63) hide show
  1. package/README.md +9 -9
  2. package/app/profile-session.ts +98 -4
  3. package/dist/core/agent-summary.d.ts +3 -2
  4. package/dist/core/agent-summary.js +44 -2
  5. package/dist/core/artifact-contract.d.ts +22 -4
  6. package/dist/core/artifact-contract.js +512 -11
  7. package/dist/core/comparison.d.ts +57 -3
  8. package/dist/core/comparison.js +113 -1
  9. package/dist/core/planner.d.ts +32 -1
  10. package/dist/core/planner.js +144 -0
  11. package/dist/core/run-index.d.ts +4 -0
  12. package/dist/core/run-index.js +55 -1
  13. package/dist/core/schema-validator.d.ts +1 -0
  14. package/dist/core/schema-validator.js +1 -0
  15. package/dist/runner/compare-latest.d.ts +8 -4
  16. package/dist/runner/compare-latest.js +24 -5
  17. package/dist/runner/example-android-live.d.ts +10 -1
  18. package/dist/runner/example-android-live.js +55 -0
  19. package/dist/runner/example-ios-live.d.ts +10 -1
  20. package/dist/runner/example-ios-live.js +55 -0
  21. package/dist/runner/ios-simctl.d.ts +5 -0
  22. package/dist/runner/ios-simctl.js +6 -0
  23. package/dist/runner/live-comparison.d.ts +2 -2
  24. package/dist/runner/live-comparison.js +2 -1
  25. package/dist/runner/live-proof-summary.d.ts +5 -4
  26. package/dist/runner/live-proof-summary.js +12 -2
  27. package/dist/runner/live-proof.d.ts +3 -2
  28. package/dist/runner/live-proof.js +9 -2
  29. package/dist/runner/profile-android.d.ts +5 -0
  30. package/dist/runner/profile-android.js +148 -24
  31. package/dist/runner/profile-ios.d.ts +11 -1
  32. package/dist/runner/profile-ios.js +128 -9
  33. package/dist/runner/profile-mobile.d.ts +8 -0
  34. package/dist/runner/profile-mobile.js +267 -28
  35. package/docs/adapters.md +4 -0
  36. package/docs/architecture.md +90 -0
  37. package/docs/authoring.md +5 -1
  38. package/docs/concepts.md +3 -24
  39. package/docs/consumer-rehearsal.md +4 -0
  40. package/docs/contracts.md +30 -100
  41. package/docs/external-adapter-protocol.md +219 -0
  42. package/docs/live-proofs.md +83 -2
  43. package/docs/principles.md +9 -15
  44. package/examples/mobile-app/README.md +12 -0
  45. package/examples/mobile-app/runner-manifests/primary-runner.json +1 -0
  46. package/examples/runners/README.md +1 -0
  47. package/examples/runners/adb-android.json +1 -0
  48. package/examples/runners/agent-device-android.json +1 -0
  49. package/examples/runners/agent-device-ios.json +1 -0
  50. package/examples/runners/argent-android.json +1 -0
  51. package/examples/runners/argent-ios.json +1 -0
  52. package/examples/runners/xcodebuildmcp-ios.json +1 -0
  53. package/package.json +2 -1
  54. package/schemas/causal-run.schema.json +85 -2
  55. package/schemas/comparison.schema.json +130 -2
  56. package/schemas/external-adapter-message.schema.json +693 -0
  57. package/schemas/health.schema.json +72 -0
  58. package/schemas/live-proof-set.schema.json +1 -1
  59. package/schemas/live-proof.schema.json +14 -6
  60. package/schemas/manifest.schema.json +442 -1
  61. package/schemas/runner-capabilities.schema.json +20 -0
  62. package/schemas/scenario.schema.json +16 -0
  63. package/templates/primary-runner.json +1 -0
@@ -0,0 +1,693 @@
1
+ {
2
+ "$schema": "https://json-schema.org/draft/2020-12/schema",
3
+ "$id": "https://agent-scenario-loop.dev/schemas/external-adapter-message.schema.json",
4
+ "title": "Agent Scenario Loop External Adapter Message",
5
+ "type": "object",
6
+ "additionalProperties": false,
7
+ "required": ["protocolVersion", "seq", "operationId", "kind", "type", "body"],
8
+ "allOf": [
9
+ {
10
+ "if": {
11
+ "properties": {
12
+ "kind": {
13
+ "const": "request"
14
+ }
15
+ },
16
+ "required": ["kind"]
17
+ },
18
+ "then": {
19
+ "properties": {
20
+ "type": {
21
+ "$ref": "#/$defs/requestType"
22
+ }
23
+ }
24
+ }
25
+ },
26
+ {
27
+ "if": {
28
+ "properties": {
29
+ "kind": {
30
+ "const": "response"
31
+ }
32
+ },
33
+ "required": ["kind"]
34
+ },
35
+ "then": {
36
+ "properties": {
37
+ "type": {
38
+ "$ref": "#/$defs/requestType"
39
+ },
40
+ "body": {
41
+ "$ref": "#/$defs/responseBody"
42
+ }
43
+ }
44
+ }
45
+ },
46
+ {
47
+ "if": {
48
+ "properties": {
49
+ "kind": {
50
+ "const": "event"
51
+ }
52
+ },
53
+ "required": ["kind"]
54
+ },
55
+ "then": {
56
+ "properties": {
57
+ "type": {
58
+ "$ref": "#/$defs/eventType"
59
+ }
60
+ }
61
+ }
62
+ },
63
+ {
64
+ "if": {
65
+ "properties": {
66
+ "kind": {
67
+ "const": "request"
68
+ },
69
+ "type": {
70
+ "const": "hello"
71
+ }
72
+ },
73
+ "required": ["kind", "type"]
74
+ },
75
+ "then": {
76
+ "properties": {
77
+ "body": {
78
+ "$ref": "#/$defs/helloRequestBody"
79
+ }
80
+ }
81
+ }
82
+ },
83
+ {
84
+ "if": {
85
+ "properties": {
86
+ "kind": {
87
+ "const": "request"
88
+ },
89
+ "type": {
90
+ "const": "prepare"
91
+ }
92
+ },
93
+ "required": ["kind", "type"]
94
+ },
95
+ "then": {
96
+ "properties": {
97
+ "runId": {
98
+ "type": "string",
99
+ "minLength": 1
100
+ },
101
+ "attemptId": {
102
+ "type": "string",
103
+ "minLength": 1
104
+ },
105
+ "deadline": {
106
+ "$ref": "#/$defs/timestamp"
107
+ },
108
+ "body": {
109
+ "$ref": "#/$defs/prepareRequestBody"
110
+ }
111
+ },
112
+ "required": ["runId", "attemptId", "deadline"]
113
+ }
114
+ },
115
+ {
116
+ "if": {
117
+ "properties": {
118
+ "kind": {
119
+ "const": "request"
120
+ },
121
+ "type": {
122
+ "const": "launch"
123
+ }
124
+ },
125
+ "required": ["kind", "type"]
126
+ },
127
+ "then": {
128
+ "properties": {
129
+ "runId": {
130
+ "type": "string",
131
+ "minLength": 1
132
+ },
133
+ "attemptId": {
134
+ "type": "string",
135
+ "minLength": 1
136
+ },
137
+ "deadline": {
138
+ "$ref": "#/$defs/timestamp"
139
+ },
140
+ "body": {
141
+ "$ref": "#/$defs/targetRequestBody"
142
+ }
143
+ },
144
+ "required": ["runId", "attemptId", "deadline"]
145
+ }
146
+ },
147
+ {
148
+ "if": {
149
+ "properties": {
150
+ "kind": {
151
+ "const": "request"
152
+ },
153
+ "type": {
154
+ "const": "executeAction"
155
+ }
156
+ },
157
+ "required": ["kind", "type"]
158
+ },
159
+ "then": {
160
+ "properties": {
161
+ "runId": {
162
+ "type": "string",
163
+ "minLength": 1
164
+ },
165
+ "attemptId": {
166
+ "type": "string",
167
+ "minLength": 1
168
+ },
169
+ "deadline": {
170
+ "$ref": "#/$defs/timestamp"
171
+ },
172
+ "body": {
173
+ "$ref": "#/$defs/executeActionRequestBody"
174
+ }
175
+ },
176
+ "required": ["runId", "attemptId", "deadline"]
177
+ }
178
+ },
179
+ {
180
+ "if": {
181
+ "properties": {
182
+ "kind": {
183
+ "const": "request"
184
+ },
185
+ "type": {
186
+ "const": "waitCondition"
187
+ }
188
+ },
189
+ "required": ["kind", "type"]
190
+ },
191
+ "then": {
192
+ "properties": {
193
+ "runId": {
194
+ "type": "string",
195
+ "minLength": 1
196
+ },
197
+ "attemptId": {
198
+ "type": "string",
199
+ "minLength": 1
200
+ },
201
+ "deadline": {
202
+ "$ref": "#/$defs/timestamp"
203
+ },
204
+ "body": {
205
+ "$ref": "#/$defs/waitConditionRequestBody"
206
+ }
207
+ },
208
+ "required": ["runId", "attemptId", "deadline"]
209
+ }
210
+ },
211
+ {
212
+ "if": {
213
+ "properties": {
214
+ "kind": {
215
+ "const": "request"
216
+ },
217
+ "type": {
218
+ "const": "captureEvidence"
219
+ }
220
+ },
221
+ "required": ["kind", "type"]
222
+ },
223
+ "then": {
224
+ "properties": {
225
+ "runId": {
226
+ "type": "string",
227
+ "minLength": 1
228
+ },
229
+ "attemptId": {
230
+ "type": "string",
231
+ "minLength": 1
232
+ },
233
+ "deadline": {
234
+ "$ref": "#/$defs/timestamp"
235
+ },
236
+ "body": {
237
+ "$ref": "#/$defs/captureEvidenceRequestBody"
238
+ }
239
+ },
240
+ "required": ["runId", "attemptId", "deadline"]
241
+ }
242
+ },
243
+ {
244
+ "if": {
245
+ "properties": {
246
+ "kind": {
247
+ "const": "request"
248
+ },
249
+ "type": {
250
+ "const": "cancel"
251
+ }
252
+ },
253
+ "required": ["kind", "type"]
254
+ },
255
+ "then": {
256
+ "properties": {
257
+ "runId": {
258
+ "type": "string",
259
+ "minLength": 1
260
+ },
261
+ "attemptId": {
262
+ "type": "string",
263
+ "minLength": 1
264
+ },
265
+ "deadline": {
266
+ "$ref": "#/$defs/timestamp"
267
+ },
268
+ "body": {
269
+ "$ref": "#/$defs/cancelRequestBody"
270
+ }
271
+ },
272
+ "required": ["runId", "attemptId", "deadline"]
273
+ }
274
+ },
275
+ {
276
+ "if": {
277
+ "properties": {
278
+ "kind": {
279
+ "const": "request"
280
+ },
281
+ "type": {
282
+ "enum": ["stop", "finalize"]
283
+ }
284
+ },
285
+ "required": ["kind", "type"]
286
+ },
287
+ "then": {
288
+ "properties": {
289
+ "runId": {
290
+ "type": "string",
291
+ "minLength": 1
292
+ },
293
+ "attemptId": {
294
+ "type": "string",
295
+ "minLength": 1
296
+ },
297
+ "deadline": {
298
+ "$ref": "#/$defs/timestamp"
299
+ },
300
+ "body": {
301
+ "type": "object",
302
+ "additionalProperties": false
303
+ }
304
+ },
305
+ "required": ["runId", "attemptId", "deadline"]
306
+ }
307
+ }
308
+ ],
309
+ "properties": {
310
+ "protocolVersion": {
311
+ "type": "string",
312
+ "pattern": "^1\\.0$"
313
+ },
314
+ "seq": {
315
+ "type": "integer",
316
+ "minimum": 1
317
+ },
318
+ "operationId": {
319
+ "type": "string",
320
+ "minLength": 1
321
+ },
322
+ "kind": {
323
+ "type": "string",
324
+ "enum": ["request", "response", "event"]
325
+ },
326
+ "type": {
327
+ "type": "string",
328
+ "minLength": 1
329
+ },
330
+ "runId": {
331
+ "type": "string",
332
+ "minLength": 1
333
+ },
334
+ "attemptId": {
335
+ "type": "string",
336
+ "minLength": 1
337
+ },
338
+ "deadline": {
339
+ "$ref": "#/$defs/timestamp"
340
+ },
341
+ "body": {
342
+ "type": "object",
343
+ "additionalProperties": true
344
+ }
345
+ },
346
+ "$defs": {
347
+ "requestType": {
348
+ "type": "string",
349
+ "enum": ["hello", "prepare", "launch", "executeAction", "waitCondition", "captureEvidence", "cancel", "stop", "finalize"]
350
+ },
351
+ "eventType": {
352
+ "type": "string",
353
+ "enum": ["truthEvent", "progress", "evidence"]
354
+ },
355
+ "timestamp": {
356
+ "type": "string",
357
+ "pattern": "^\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}:\\d{2}(?:\\.\\d{3})?Z$"
358
+ },
359
+ "platform": {
360
+ "type": "string",
361
+ "enum": ["android", "ios"]
362
+ },
363
+ "nonEmptyString": {
364
+ "type": "string",
365
+ "minLength": 1
366
+ },
367
+ "identity": {
368
+ "type": "object",
369
+ "additionalProperties": false,
370
+ "required": ["name", "version"],
371
+ "properties": {
372
+ "name": {
373
+ "$ref": "#/$defs/nonEmptyString"
374
+ },
375
+ "version": {
376
+ "$ref": "#/$defs/nonEmptyString"
377
+ }
378
+ }
379
+ },
380
+ "artifact": {
381
+ "type": "object",
382
+ "additionalProperties": false,
383
+ "required": ["kind", "path", "contentType"],
384
+ "properties": {
385
+ "kind": {
386
+ "$ref": "#/$defs/nonEmptyString"
387
+ },
388
+ "path": {
389
+ "$ref": "#/$defs/nonEmptyString"
390
+ },
391
+ "contentType": {
392
+ "$ref": "#/$defs/nonEmptyString"
393
+ },
394
+ "description": {
395
+ "$ref": "#/$defs/nonEmptyString"
396
+ },
397
+ "sha256": {
398
+ "type": "string",
399
+ "pattern": "^[a-f0-9]{64}$"
400
+ },
401
+ "sizeBytes": {
402
+ "type": "integer",
403
+ "minimum": 0
404
+ }
405
+ }
406
+ },
407
+ "artifactList": {
408
+ "type": "array",
409
+ "items": {
410
+ "$ref": "#/$defs/artifact"
411
+ }
412
+ },
413
+ "fileReference": {
414
+ "type": "object",
415
+ "additionalProperties": false,
416
+ "required": ["path", "contentType"],
417
+ "properties": {
418
+ "path": {
419
+ "$ref": "#/$defs/nonEmptyString"
420
+ },
421
+ "contentType": {
422
+ "$ref": "#/$defs/nonEmptyString"
423
+ },
424
+ "description": {
425
+ "$ref": "#/$defs/nonEmptyString"
426
+ },
427
+ "sha256": {
428
+ "type": "string",
429
+ "pattern": "^[a-f0-9]{64}$"
430
+ },
431
+ "sizeBytes": {
432
+ "type": "integer",
433
+ "minimum": 0
434
+ }
435
+ }
436
+ },
437
+ "target": {
438
+ "type": "object",
439
+ "additionalProperties": true,
440
+ "minProperties": 1
441
+ },
442
+ "selector": {
443
+ "type": "object",
444
+ "additionalProperties": true,
445
+ "minProperties": 1
446
+ },
447
+ "helloRequestBody": {
448
+ "type": "object",
449
+ "additionalProperties": false,
450
+ "required": ["host", "platform"],
451
+ "properties": {
452
+ "host": {
453
+ "$ref": "#/$defs/identity"
454
+ },
455
+ "platform": {
456
+ "$ref": "#/$defs/platform"
457
+ }
458
+ }
459
+ },
460
+ "prepareRequestBody": {
461
+ "type": "object",
462
+ "additionalProperties": true,
463
+ "required": ["platform", "target"],
464
+ "properties": {
465
+ "platform": {
466
+ "$ref": "#/$defs/platform"
467
+ },
468
+ "target": {
469
+ "$ref": "#/$defs/target"
470
+ },
471
+ "artifactsRoot": {
472
+ "$ref": "#/$defs/nonEmptyString"
473
+ }
474
+ }
475
+ },
476
+ "targetRequestBody": {
477
+ "type": "object",
478
+ "additionalProperties": true,
479
+ "required": ["platform", "target"],
480
+ "properties": {
481
+ "platform": {
482
+ "$ref": "#/$defs/platform"
483
+ },
484
+ "target": {
485
+ "$ref": "#/$defs/target"
486
+ }
487
+ }
488
+ },
489
+ "executeActionRequestBody": {
490
+ "type": "object",
491
+ "additionalProperties": true,
492
+ "required": ["driverAction"],
493
+ "properties": {
494
+ "driverAction": {
495
+ "$ref": "#/$defs/nonEmptyString"
496
+ },
497
+ "selector": {
498
+ "$ref": "#/$defs/selector"
499
+ }
500
+ }
501
+ },
502
+ "waitConditionRequestBody": {
503
+ "type": "object",
504
+ "additionalProperties": true,
505
+ "required": ["condition", "clockDomain"],
506
+ "properties": {
507
+ "condition": {
508
+ "type": "object",
509
+ "additionalProperties": true,
510
+ "minProperties": 1
511
+ },
512
+ "clockDomain": {
513
+ "$ref": "#/$defs/nonEmptyString"
514
+ }
515
+ }
516
+ },
517
+ "captureEvidenceRequestBody": {
518
+ "type": "object",
519
+ "additionalProperties": false,
520
+ "required": ["kinds"],
521
+ "properties": {
522
+ "kinds": {
523
+ "type": "array",
524
+ "minItems": 1,
525
+ "items": {
526
+ "$ref": "#/$defs/nonEmptyString"
527
+ }
528
+ }
529
+ }
530
+ },
531
+ "cancelRequestBody": {
532
+ "type": "object",
533
+ "additionalProperties": false,
534
+ "required": ["targetOperationId", "reason"],
535
+ "properties": {
536
+ "targetOperationId": {
537
+ "$ref": "#/$defs/nonEmptyString"
538
+ },
539
+ "reason": {
540
+ "$ref": "#/$defs/nonEmptyString"
541
+ }
542
+ }
543
+ },
544
+ "responseBody": {
545
+ "type": "object",
546
+ "additionalProperties": false,
547
+ "required": ["ok"],
548
+ "allOf": [
549
+ {
550
+ "if": {
551
+ "properties": {
552
+ "ok": {
553
+ "const": true
554
+ }
555
+ },
556
+ "required": ["ok"]
557
+ },
558
+ "then": {
559
+ "required": ["result"],
560
+ "properties": {
561
+ "result": {
562
+ "$ref": "#/$defs/responseResult"
563
+ }
564
+ }
565
+ }
566
+ },
567
+ {
568
+ "if": {
569
+ "properties": {
570
+ "ok": {
571
+ "const": false
572
+ }
573
+ },
574
+ "required": ["ok"]
575
+ },
576
+ "then": {
577
+ "required": ["failure"],
578
+ "properties": {
579
+ "failure": {
580
+ "$ref": "#/$defs/failure"
581
+ }
582
+ }
583
+ }
584
+ }
585
+ ],
586
+ "properties": {
587
+ "ok": {
588
+ "type": "boolean"
589
+ },
590
+ "result": {
591
+ "$ref": "#/$defs/responseResult"
592
+ },
593
+ "failure": {
594
+ "$ref": "#/$defs/failure"
595
+ }
596
+ }
597
+ },
598
+ "responseResult": {
599
+ "type": "object",
600
+ "additionalProperties": true,
601
+ "properties": {
602
+ "adapter": {
603
+ "$ref": "#/$defs/identity"
604
+ },
605
+ "acceptedProtocolVersion": {
606
+ "type": "string",
607
+ "pattern": "^1\\.0$"
608
+ },
609
+ "platforms": {
610
+ "type": "array",
611
+ "minItems": 1,
612
+ "uniqueItems": true,
613
+ "items": {
614
+ "$ref": "#/$defs/platform"
615
+ }
616
+ },
617
+ "capabilities": {
618
+ "type": "array",
619
+ "minItems": 1,
620
+ "uniqueItems": true,
621
+ "items": {
622
+ "$ref": "#/$defs/nonEmptyString"
623
+ }
624
+ },
625
+ "driverActions": {
626
+ "type": "array",
627
+ "uniqueItems": true,
628
+ "items": {
629
+ "$ref": "#/$defs/nonEmptyString"
630
+ }
631
+ },
632
+ "artifactOutputs": {
633
+ "type": "array",
634
+ "uniqueItems": true,
635
+ "items": {
636
+ "$ref": "#/$defs/nonEmptyString"
637
+ }
638
+ },
639
+ "clockDomains": {
640
+ "type": "array",
641
+ "minItems": 1,
642
+ "uniqueItems": true,
643
+ "items": {
644
+ "$ref": "#/$defs/nonEmptyString"
645
+ }
646
+ },
647
+ "artifacts": {
648
+ "$ref": "#/$defs/artifactList"
649
+ },
650
+ "raw": {
651
+ "$ref": "#/$defs/fileReference"
652
+ },
653
+ "truthEvent": {
654
+ "type": "object",
655
+ "additionalProperties": true,
656
+ "required": ["name", "observedAt"],
657
+ "properties": {
658
+ "name": {
659
+ "$ref": "#/$defs/nonEmptyString"
660
+ },
661
+ "observedAt": {
662
+ "$ref": "#/$defs/timestamp"
663
+ }
664
+ }
665
+ }
666
+ }
667
+ },
668
+ "failure": {
669
+ "type": "object",
670
+ "additionalProperties": false,
671
+ "required": ["code", "message", "retryable"],
672
+ "properties": {
673
+ "code": {
674
+ "$ref": "#/$defs/nonEmptyString"
675
+ },
676
+ "message": {
677
+ "$ref": "#/$defs/nonEmptyString"
678
+ },
679
+ "retryable": {
680
+ "type": "boolean"
681
+ },
682
+ "category": {
683
+ "type": "string",
684
+ "enum": ["adapter", "cancelled", "cleanup", "deadline", "environment", "protocol", "runner", "unsupported"]
685
+ },
686
+ "details": {
687
+ "type": "object",
688
+ "additionalProperties": true
689
+ }
690
+ }
691
+ }
692
+ }
693
+ }