@roll-agent/relay-protocol 0.4.2 → 0.5.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 (35) hide show
  1. package/README.md +4 -0
  2. package/dist/control.d.ts +31 -0
  3. package/dist/control.js +6 -0
  4. package/dist/index.d.ts +1893 -2
  5. package/dist/index.js +92 -2
  6. package/dist/schema/roll-relay-protocol-v1.3.schema.json +4606 -0
  7. package/fixtures/v1.3/invalid-approval-projection-raw-input-leak.json +19 -0
  8. package/fixtures/v1.3/invalid-authentication-local-only.json +12 -0
  9. package/fixtures/v1.3/invalid-context-recovery-notes.json +22 -0
  10. package/fixtures/v1.3/invalid-file-picker-local-only.json +12 -0
  11. package/fixtures/v1.3/invalid-interaction-cancelled-reason-leak.json +10 -0
  12. package/fixtures/v1.3/invalid-interaction-resolved-result-leak.json +18 -0
  13. package/fixtures/v1.3/invalid-legacy-approval-candidate.json +7 -0
  14. package/fixtures/v1.3/invalid-legacy-approval-respond.json +7 -0
  15. package/fixtures/v1.3/invalid-n-minus-one-device-connect.json +6 -0
  16. package/fixtures/v1.3/invalid-non-normal-sensitivity.json +21 -0
  17. package/fixtures/v1.3/invalid-runtime-event-tool-input-leak.json +22 -0
  18. package/fixtures/v1.3/invalid-runtime-event-tool-output-leak.json +21 -0
  19. package/fixtures/v1.3/invalid-user-input-projection-secret-leak.json +22 -0
  20. package/fixtures/v1.3/manifest.json +489 -0
  21. package/fixtures/v1.3/valid-context-recovery.json +21 -0
  22. package/fixtures/v1.3/valid-device-connect.json +6 -0
  23. package/fixtures/v1.3/valid-interaction-cancelled.json +9 -0
  24. package/fixtures/v1.3/valid-interaction-candidate-user-input.json +25 -0
  25. package/fixtures/v1.3/valid-interaction-request-approval.json +17 -0
  26. package/fixtures/v1.3/valid-interaction-request-user-input.json +40 -0
  27. package/fixtures/v1.3/valid-interaction-resolved.json +9 -0
  28. package/fixtures/v1.3/valid-runtime-ack.json +5 -0
  29. package/fixtures/v1.3/valid-runtime-encrypted-interaction.json +10 -0
  30. package/fixtures/v1.3/valid-runtime-event-runtime-n-minus-one.json +16 -0
  31. package/fixtures/v1.3/valid-runtime-event.json +16 -0
  32. package/fixtures/v1.3/valid-runtime-gap.json +7 -0
  33. package/fixtures/v1.3/valid-runtime-request.json +10 -0
  34. package/fixtures/v1.3/valid-runtime-response.json +8 -0
  35. package/package.json +4 -3
@@ -0,0 +1,489 @@
1
+ {
2
+ "protocolVersion": "1.3",
3
+ "frames": [
4
+ {
5
+ "id": "device-connect-v11",
6
+ "fixture": "valid-device-connect.json",
7
+ "valid": true
8
+ },
9
+ {
10
+ "id": "runtime-request-v11",
11
+ "fixture": "valid-runtime-request.json",
12
+ "valid": true
13
+ },
14
+ {
15
+ "id": "interaction-candidate-user-input",
16
+ "fixture": "valid-interaction-candidate-user-input.json",
17
+ "valid": true
18
+ },
19
+ {
20
+ "id": "runtime-response-v11",
21
+ "fixture": "valid-runtime-response.json",
22
+ "valid": true
23
+ },
24
+ {
25
+ "id": "runtime-event-v11",
26
+ "fixture": "valid-runtime-event.json",
27
+ "valid": true
28
+ },
29
+ {
30
+ "id": "runtime-event-runtime-n-minus-one",
31
+ "fixture": "valid-runtime-event-runtime-n-minus-one.json",
32
+ "valid": true
33
+ },
34
+ {
35
+ "id": "runtime-ack-v11",
36
+ "fixture": "valid-runtime-ack.json",
37
+ "valid": true
38
+ },
39
+ {
40
+ "id": "runtime-gap-v11",
41
+ "fixture": "valid-runtime-gap.json",
42
+ "valid": true
43
+ },
44
+ {
45
+ "id": "runtime-encrypted-interaction-v11",
46
+ "fixture": "valid-runtime-encrypted-interaction.json",
47
+ "valid": true
48
+ },
49
+ {
50
+ "id": "interaction-request-approval",
51
+ "fixture": "valid-interaction-request-approval.json",
52
+ "valid": true
53
+ },
54
+ {
55
+ "id": "interaction-request-user-input",
56
+ "fixture": "valid-interaction-request-user-input.json",
57
+ "valid": true
58
+ },
59
+ {
60
+ "id": "interaction-resolved",
61
+ "fixture": "valid-interaction-resolved.json",
62
+ "valid": true
63
+ },
64
+ {
65
+ "id": "interaction-cancelled",
66
+ "fixture": "valid-interaction-cancelled.json",
67
+ "valid": true
68
+ },
69
+ {
70
+ "id": "n-minus-one-device-connect-rejected",
71
+ "fixture": "invalid-n-minus-one-device-connect.json",
72
+ "valid": false
73
+ },
74
+ {
75
+ "id": "legacy-approval-respond-rejected",
76
+ "fixture": "invalid-legacy-approval-respond.json",
77
+ "valid": false
78
+ },
79
+ {
80
+ "id": "legacy-approval-candidate-rejected",
81
+ "fixture": "invalid-legacy-approval-candidate.json",
82
+ "valid": false
83
+ },
84
+ {
85
+ "id": "approval-projection-raw-input-leak",
86
+ "fixture": "invalid-approval-projection-raw-input-leak.json",
87
+ "valid": false
88
+ },
89
+ {
90
+ "id": "user-input-projection-secret-leak",
91
+ "fixture": "invalid-user-input-projection-secret-leak.json",
92
+ "valid": false
93
+ },
94
+ {
95
+ "id": "non-normal-sensitivity-rejected",
96
+ "fixture": "invalid-non-normal-sensitivity.json",
97
+ "valid": false
98
+ },
99
+ {
100
+ "id": "authentication-local-only",
101
+ "fixture": "invalid-authentication-local-only.json",
102
+ "valid": false
103
+ },
104
+ {
105
+ "id": "file-picker-local-only",
106
+ "fixture": "invalid-file-picker-local-only.json",
107
+ "valid": false
108
+ },
109
+ {
110
+ "id": "interaction-resolved-result-leak",
111
+ "fixture": "invalid-interaction-resolved-result-leak.json",
112
+ "valid": false
113
+ },
114
+ {
115
+ "id": "interaction-cancelled-reason-leak",
116
+ "fixture": "invalid-interaction-cancelled-reason-leak.json",
117
+ "valid": false
118
+ },
119
+ {
120
+ "id": "runtime-event-tool-input-leak",
121
+ "fixture": "invalid-runtime-event-tool-input-leak.json",
122
+ "valid": false
123
+ },
124
+ {
125
+ "id": "runtime-event-tool-output-leak",
126
+ "fixture": "invalid-runtime-event-tool-output-leak.json",
127
+ "valid": false
128
+ },
129
+ {
130
+ "id": "context-recovery",
131
+ "fixture": "valid-context-recovery.json",
132
+ "valid": true
133
+ },
134
+ {
135
+ "id": "context-recovery-private-notes",
136
+ "fixture": "invalid-context-recovery-notes.json",
137
+ "valid": false
138
+ }
139
+ ],
140
+ "negotiation": [],
141
+ "methodRegistry": [],
142
+ "methods": [],
143
+ "replay": [
144
+ {
145
+ "id": "interaction-candidate-duplicate",
146
+ "existing": {
147
+ "type": "runtime.request",
148
+ "requestId": "00000000-0000-4000-8000-000000000509",
149
+ "workspaceId": "00000000-0000-4000-8000-000000000507",
150
+ "method": "interaction.candidate",
151
+ "params": {
152
+ "interactionId": "00000000-0000-4000-8000-000000000511",
153
+ "threadId": "00000000-0000-4000-8000-000000000502",
154
+ "turnId": "00000000-0000-4000-8000-000000000503",
155
+ "method": "userInput.request",
156
+ "candidate": {
157
+ "status": "submitted",
158
+ "values": [
159
+ {
160
+ "id": "region",
161
+ "value": "north"
162
+ },
163
+ {
164
+ "id": "workspace",
165
+ "value": "target-workspace"
166
+ }
167
+ ]
168
+ }
169
+ }
170
+ },
171
+ "candidate": {
172
+ "type": "runtime.request",
173
+ "requestId": "00000000-0000-4000-8000-000000000509",
174
+ "workspaceId": "00000000-0000-4000-8000-000000000507",
175
+ "method": "interaction.candidate",
176
+ "params": {
177
+ "turnId": "00000000-0000-4000-8000-000000000503",
178
+ "interactionId": "00000000-0000-4000-8000-000000000511",
179
+ "candidate": {
180
+ "values": [
181
+ {
182
+ "value": "north",
183
+ "id": "region"
184
+ },
185
+ {
186
+ "value": "target-workspace",
187
+ "id": "workspace"
188
+ }
189
+ ],
190
+ "status": "submitted"
191
+ },
192
+ "method": "userInput.request",
193
+ "threadId": "00000000-0000-4000-8000-000000000502"
194
+ }
195
+ },
196
+ "expected": {
197
+ "disposition": "replay"
198
+ }
199
+ },
200
+ {
201
+ "id": "interaction-candidate-conflict",
202
+ "existing": {
203
+ "type": "runtime.request",
204
+ "requestId": "00000000-0000-4000-8000-000000000509",
205
+ "workspaceId": "00000000-0000-4000-8000-000000000507",
206
+ "method": "interaction.candidate",
207
+ "params": {
208
+ "interactionId": "00000000-0000-4000-8000-000000000511",
209
+ "threadId": "00000000-0000-4000-8000-000000000502",
210
+ "turnId": "00000000-0000-4000-8000-000000000503",
211
+ "method": "userInput.request",
212
+ "candidate": {
213
+ "status": "submitted",
214
+ "values": [
215
+ {
216
+ "id": "region",
217
+ "value": "north"
218
+ },
219
+ {
220
+ "id": "workspace",
221
+ "value": "target-workspace"
222
+ }
223
+ ]
224
+ }
225
+ }
226
+ },
227
+ "candidate": {
228
+ "type": "runtime.request",
229
+ "requestId": "00000000-0000-4000-8000-000000000509",
230
+ "workspaceId": "00000000-0000-4000-8000-000000000507",
231
+ "method": "interaction.candidate",
232
+ "params": {
233
+ "interactionId": "00000000-0000-4000-8000-000000000512",
234
+ "threadId": "00000000-0000-4000-8000-000000000502",
235
+ "turnId": "00000000-0000-4000-8000-000000000503",
236
+ "method": "userInput.request",
237
+ "candidate": {
238
+ "status": "submitted",
239
+ "values": [
240
+ {
241
+ "id": "region",
242
+ "value": "north"
243
+ },
244
+ {
245
+ "id": "workspace",
246
+ "value": "target-workspace"
247
+ }
248
+ ]
249
+ }
250
+ }
251
+ },
252
+ "expected": {
253
+ "disposition": "conflict",
254
+ "errorCode": "RELAY_REQUEST_ID_CONFLICT"
255
+ }
256
+ },
257
+ {
258
+ "id": "interaction-candidate-different-request-id",
259
+ "existing": {
260
+ "type": "runtime.request",
261
+ "requestId": "00000000-0000-4000-8000-000000000509",
262
+ "workspaceId": "00000000-0000-4000-8000-000000000507",
263
+ "method": "interaction.candidate",
264
+ "params": {
265
+ "interactionId": "00000000-0000-4000-8000-000000000511",
266
+ "threadId": "00000000-0000-4000-8000-000000000502",
267
+ "turnId": "00000000-0000-4000-8000-000000000503",
268
+ "method": "userInput.request",
269
+ "candidate": {
270
+ "status": "submitted",
271
+ "values": [
272
+ {
273
+ "id": "region",
274
+ "value": "north"
275
+ },
276
+ {
277
+ "id": "workspace",
278
+ "value": "target-workspace"
279
+ }
280
+ ]
281
+ }
282
+ }
283
+ },
284
+ "candidate": {
285
+ "type": "runtime.request",
286
+ "requestId": "00000000-0000-4000-8000-000000000505",
287
+ "workspaceId": "00000000-0000-4000-8000-000000000507",
288
+ "method": "interaction.candidate",
289
+ "params": {
290
+ "interactionId": "00000000-0000-4000-8000-000000000511",
291
+ "threadId": "00000000-0000-4000-8000-000000000502",
292
+ "turnId": "00000000-0000-4000-8000-000000000503",
293
+ "method": "userInput.request",
294
+ "candidate": {
295
+ "status": "submitted",
296
+ "values": [
297
+ {
298
+ "id": "region",
299
+ "value": "north"
300
+ },
301
+ {
302
+ "id": "workspace",
303
+ "value": "target-workspace"
304
+ }
305
+ ]
306
+ }
307
+ }
308
+ },
309
+ "expected": {
310
+ "disposition": "new"
311
+ }
312
+ },
313
+ {
314
+ "id": "interaction-candidate-different-workspace",
315
+ "existing": {
316
+ "type": "runtime.request",
317
+ "requestId": "00000000-0000-4000-8000-000000000509",
318
+ "workspaceId": "00000000-0000-4000-8000-000000000507",
319
+ "method": "interaction.candidate",
320
+ "params": {
321
+ "interactionId": "00000000-0000-4000-8000-000000000511",
322
+ "threadId": "00000000-0000-4000-8000-000000000502",
323
+ "turnId": "00000000-0000-4000-8000-000000000503",
324
+ "method": "userInput.request",
325
+ "candidate": {
326
+ "status": "submitted",
327
+ "values": [
328
+ {
329
+ "id": "region",
330
+ "value": "north"
331
+ },
332
+ {
333
+ "id": "workspace",
334
+ "value": "target-workspace"
335
+ }
336
+ ]
337
+ }
338
+ }
339
+ },
340
+ "candidate": {
341
+ "type": "runtime.request",
342
+ "requestId": "00000000-0000-4000-8000-000000000509",
343
+ "workspaceId": "00000000-0000-4000-8000-000000000510",
344
+ "method": "interaction.candidate",
345
+ "params": {
346
+ "interactionId": "00000000-0000-4000-8000-000000000511",
347
+ "threadId": "00000000-0000-4000-8000-000000000502",
348
+ "turnId": "00000000-0000-4000-8000-000000000503",
349
+ "method": "userInput.request",
350
+ "candidate": {
351
+ "status": "submitted",
352
+ "values": [
353
+ {
354
+ "id": "region",
355
+ "value": "north"
356
+ },
357
+ {
358
+ "id": "workspace",
359
+ "value": "target-workspace"
360
+ }
361
+ ]
362
+ }
363
+ }
364
+ },
365
+ "expected": {
366
+ "disposition": "new"
367
+ }
368
+ }
369
+ ],
370
+ "ack": [
371
+ {
372
+ "id": "initial-advance",
373
+ "acknowledgedThrough": -1,
374
+ "advertisedThrough": 0,
375
+ "incomingThrough": 0,
376
+ "expected": "advance"
377
+ },
378
+ {
379
+ "id": "advance-contiguous-prefix",
380
+ "acknowledgedThrough": 0,
381
+ "advertisedThrough": 2,
382
+ "incomingThrough": 2,
383
+ "expected": "advance"
384
+ },
385
+ {
386
+ "id": "equal-duplicate-ack",
387
+ "acknowledgedThrough": 2,
388
+ "advertisedThrough": 2,
389
+ "incomingThrough": 2,
390
+ "expected": "duplicate"
391
+ },
392
+ {
393
+ "id": "stale-duplicate-ack",
394
+ "acknowledgedThrough": 2,
395
+ "advertisedThrough": 2,
396
+ "incomingThrough": 1,
397
+ "expected": "duplicate"
398
+ },
399
+ {
400
+ "id": "ack-beyond-advertised",
401
+ "acknowledgedThrough": 0,
402
+ "advertisedThrough": 1,
403
+ "incomingThrough": 2,
404
+ "expected": "invalid"
405
+ },
406
+ {
407
+ "id": "fractional-ack",
408
+ "acknowledgedThrough": 0,
409
+ "advertisedThrough": 1,
410
+ "incomingThrough": 0.5,
411
+ "expected": "invalid"
412
+ },
413
+ {
414
+ "id": "ack-below-sentinel",
415
+ "acknowledgedThrough": -2,
416
+ "advertisedThrough": 0,
417
+ "incomingThrough": 0,
418
+ "expected": "invalid"
419
+ }
420
+ ],
421
+ "errors": [
422
+ {
423
+ "id": "error-retryability-RELAY_PROTOCOL_VERSION_UNSUPPORTED",
424
+ "code": "RELAY_PROTOCOL_VERSION_UNSUPPORTED",
425
+ "retryable": false
426
+ },
427
+ {
428
+ "id": "error-retryability-RELAY_INVALID_FRAME",
429
+ "code": "RELAY_INVALID_FRAME",
430
+ "retryable": false
431
+ },
432
+ {
433
+ "id": "error-retryability-INVALID_PARAMS",
434
+ "code": "INVALID_PARAMS",
435
+ "retryable": false
436
+ },
437
+ {
438
+ "id": "error-retryability-RELAY_REQUEST_ID_CONFLICT",
439
+ "code": "RELAY_REQUEST_ID_CONFLICT",
440
+ "retryable": false
441
+ },
442
+ {
443
+ "id": "error-retryability-WORKSPACE_NOT_FOUND",
444
+ "code": "WORKSPACE_NOT_FOUND",
445
+ "retryable": false
446
+ },
447
+ {
448
+ "id": "error-retryability-RELAY_ENCRYPTION_REQUIRED",
449
+ "code": "RELAY_ENCRYPTION_REQUIRED",
450
+ "retryable": false
451
+ },
452
+ {
453
+ "id": "error-retryability-ENCRYPTED_PAYLOAD_INVALID",
454
+ "code": "ENCRYPTED_PAYLOAD_INVALID",
455
+ "retryable": false
456
+ },
457
+ {
458
+ "id": "error-retryability-LocalApprovalDeniedError",
459
+ "code": "LocalApprovalDeniedError",
460
+ "retryable": false
461
+ },
462
+ {
463
+ "id": "error-retryability-LocalConfirmationRequiredError",
464
+ "code": "LocalConfirmationRequiredError",
465
+ "retryable": false
466
+ },
467
+ {
468
+ "id": "error-retryability-COMPANION_ERROR",
469
+ "code": "COMPANION_ERROR",
470
+ "retryable": false
471
+ }
472
+ ],
473
+ "encryptedVisibleMetadataFields": [
474
+ "type",
475
+ "workspaceId",
476
+ "envelopeId",
477
+ "payloadKind",
478
+ "requestId",
479
+ "relaySequence",
480
+ "algorithm",
481
+ "nonce",
482
+ "ciphertext"
483
+ ],
484
+ "deferredBreakingRules": [
485
+ "runtime.response-result-xor-error",
486
+ "encrypted-payload-kind-required-metadata",
487
+ "gap-from-not-after-through"
488
+ ]
489
+ }
@@ -0,0 +1,21 @@
1
+ {
2
+ "type": "runtime.event",
3
+ "workspaceId": "00000000-0000-4000-8000-000000000002",
4
+ "relaySequence": 0,
5
+ "event": {
6
+ "protocolVersion": "1.1",
7
+ "runtimeInstanceId": "00000000-0000-4000-8000-000000000001",
8
+ "sequence": 0,
9
+ "timestamp": "2026-10-13T00:00:00.000Z",
10
+ "threadId": "00000000-0000-4000-8000-000000000002",
11
+ "event": {
12
+ "type": "context.recovery.changed",
13
+ "contextRecovery": {
14
+ "checkpointId": "00000000-0000-4000-8000-000000000003",
15
+ "required": true,
16
+ "unextracted": true,
17
+ "requiredItemCount": 24
18
+ }
19
+ }
20
+ }
21
+ }
@@ -0,0 +1,6 @@
1
+ {
2
+ "type": "device.connect",
3
+ "protocolVersion": "1.3",
4
+ "deviceId": "00000000-0000-4000-8000-000000000506",
5
+ "pairingToken": "pairing-token-with-sufficient-length"
6
+ }
@@ -0,0 +1,9 @@
1
+ {
2
+ "type": "interaction.cancelled",
3
+ "workspaceId": "00000000-0000-4000-8000-000000000507",
4
+ "relaySequence": 6,
5
+ "interactionId": "00000000-0000-4000-8000-000000000511",
6
+ "threadId": "00000000-0000-4000-8000-000000000502",
7
+ "turnId": "00000000-0000-4000-8000-000000000503",
8
+ "method": "approval.request"
9
+ }
@@ -0,0 +1,25 @@
1
+ {
2
+ "type": "runtime.request",
3
+ "requestId": "00000000-0000-4000-8000-000000000509",
4
+ "workspaceId": "00000000-0000-4000-8000-000000000507",
5
+ "method": "interaction.candidate",
6
+ "params": {
7
+ "interactionId": "00000000-0000-4000-8000-000000000511",
8
+ "threadId": "00000000-0000-4000-8000-000000000502",
9
+ "turnId": "00000000-0000-4000-8000-000000000503",
10
+ "method": "userInput.request",
11
+ "candidate": {
12
+ "status": "submitted",
13
+ "values": [
14
+ {
15
+ "id": "region",
16
+ "value": "north"
17
+ },
18
+ {
19
+ "id": "workspace",
20
+ "value": "target-workspace"
21
+ }
22
+ ]
23
+ }
24
+ }
25
+ }
@@ -0,0 +1,17 @@
1
+ {
2
+ "type": "interaction.request",
3
+ "workspaceId": "00000000-0000-4000-8000-000000000507",
4
+ "relaySequence": 3,
5
+ "interactionId": "00000000-0000-4000-8000-000000000511",
6
+ "threadId": "00000000-0000-4000-8000-000000000502",
7
+ "turnId": "00000000-0000-4000-8000-000000000503",
8
+ "expiresAt": "2026-08-04T00:05:00.000Z",
9
+ "sensitivity": "normal",
10
+ "method": "approval.request",
11
+ "projection": {
12
+ "approvalId": "00000000-0000-4000-8000-000000000504",
13
+ "agentName": "workspace-agent",
14
+ "toolName": "deploy",
15
+ "explanation": "部署前需要确认。"
16
+ }
17
+ }
@@ -0,0 +1,40 @@
1
+ {
2
+ "type": "interaction.request",
3
+ "workspaceId": "00000000-0000-4000-8000-000000000507",
4
+ "relaySequence": 4,
5
+ "interactionId": "00000000-0000-4000-8000-000000000511",
6
+ "threadId": "00000000-0000-4000-8000-000000000502",
7
+ "turnId": "00000000-0000-4000-8000-000000000503",
8
+ "expiresAt": "2026-08-04T00:05:00.000Z",
9
+ "sensitivity": "normal",
10
+ "method": "userInput.request",
11
+ "projection": {
12
+ "title": "部署配置",
13
+ "controls": [
14
+ {
15
+ "id": "region",
16
+ "type": "choice",
17
+ "label": "部署区域",
18
+ "required": true,
19
+ "multiple": false,
20
+ "options": [
21
+ {
22
+ "id": "north",
23
+ "label": "北区"
24
+ },
25
+ {
26
+ "id": "south",
27
+ "label": "南区"
28
+ }
29
+ ]
30
+ },
31
+ {
32
+ "id": "workspace",
33
+ "type": "text",
34
+ "label": "目标 Workspace",
35
+ "required": true,
36
+ "maxLength": 100
37
+ }
38
+ ]
39
+ }
40
+ }
@@ -0,0 +1,9 @@
1
+ {
2
+ "type": "interaction.resolved",
3
+ "workspaceId": "00000000-0000-4000-8000-000000000507",
4
+ "relaySequence": 5,
5
+ "interactionId": "00000000-0000-4000-8000-000000000511",
6
+ "threadId": "00000000-0000-4000-8000-000000000502",
7
+ "turnId": "00000000-0000-4000-8000-000000000503",
8
+ "method": "userInput.request"
9
+ }
@@ -0,0 +1,5 @@
1
+ {
2
+ "type": "runtime.ack",
3
+ "workspaceId": "00000000-0000-4000-8000-000000000507",
4
+ "throughRelaySequence": 1
5
+ }
@@ -0,0 +1,10 @@
1
+ {
2
+ "type": "runtime.encrypted",
3
+ "workspaceId": "00000000-0000-4000-8000-000000000507",
4
+ "envelopeId": "00000000-0000-4000-8000-000000000508",
5
+ "payloadKind": "interaction",
6
+ "relaySequence": 2,
7
+ "algorithm": "example-aead",
8
+ "nonce": "opaque-nonce",
9
+ "ciphertext": "opaque-ciphertext"
10
+ }
@@ -0,0 +1,16 @@
1
+ {
2
+ "type": "runtime.event",
3
+ "workspaceId": "00000000-0000-4000-8000-000000000507",
4
+ "relaySequence": 1,
5
+ "event": {
6
+ "protocolVersion": "1.0",
7
+ "runtimeInstanceId": "00000000-0000-4000-8000-000000000501",
8
+ "sequence": 1,
9
+ "timestamp": "2026-08-04T00:00:01.000Z",
10
+ "threadId": "00000000-0000-4000-8000-000000000502",
11
+ "turnId": "00000000-0000-4000-8000-000000000503",
12
+ "event": {
13
+ "type": "turn.completed"
14
+ }
15
+ }
16
+ }
@@ -0,0 +1,16 @@
1
+ {
2
+ "type": "runtime.event",
3
+ "workspaceId": "00000000-0000-4000-8000-000000000507",
4
+ "relaySequence": 0,
5
+ "event": {
6
+ "protocolVersion": "1.1",
7
+ "runtimeInstanceId": "00000000-0000-4000-8000-000000000501",
8
+ "sequence": 0,
9
+ "timestamp": "2026-08-04T00:00:00.000Z",
10
+ "threadId": "00000000-0000-4000-8000-000000000502",
11
+ "turnId": "00000000-0000-4000-8000-000000000503",
12
+ "event": {
13
+ "type": "turn.completed"
14
+ }
15
+ }
16
+ }
@@ -0,0 +1,7 @@
1
+ {
2
+ "type": "runtime.gap",
3
+ "workspaceId": "00000000-0000-4000-8000-000000000507",
4
+ "fromRelaySequence": 0,
5
+ "throughRelaySequence": 2,
6
+ "recovery": "thread.snapshot"
7
+ }