@hasna/recordings 0.4.0 → 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 (58) hide show
  1. package/README.md +56 -6
  2. package/contracts/v1/fixtures.json +1206 -0
  3. package/dist/cli/index.js +28 -7
  4. package/dist/contracts/hosted-v1.d.ts +105 -0
  5. package/dist/contracts/hosted-v1.d.ts.map +1 -0
  6. package/dist/contracts/hosted-v1.js +41 -0
  7. package/dist/contracts/stream-v1.d.ts +117 -0
  8. package/dist/contracts/stream-v1.d.ts.map +1 -0
  9. package/dist/contracts/stream-v1.js +35 -0
  10. package/dist/hosted/index.d.ts +58 -0
  11. package/dist/hosted/index.d.ts.map +1 -0
  12. package/dist/hosted/index.js +266 -0
  13. package/dist/hosted/transport.d.ts +36 -0
  14. package/dist/hosted/transport.d.ts.map +1 -0
  15. package/dist/hosted-v1-aavn7ktb.js +4114 -0
  16. package/dist/hosted-v1-gdr9extc.js +84 -0
  17. package/dist/index.js +27 -6
  18. package/dist/mcp/index.js +27 -6
  19. package/dist/server/index.js +27 -6
  20. package/dist/storage.js +27 -6
  21. package/docs/hosted-sdk.md +71 -0
  22. package/docs/wire-contracts.md +24 -0
  23. package/package.json +27 -6
  24. package/scripts/ci-linux-suite.ts +23 -13
  25. package/scripts/macos_artifact.ts +40 -33
  26. package/scripts/native/prebuilds/darwin-universal/recordings_fs_guard.node +0 -0
  27. package/scripts/native/recordings_fs_guard.c +36 -4
  28. package/scripts/native-core-receipt.py +171 -0
  29. package/scripts/native_fs_guard.ts +2 -0
  30. package/scripts/release-suite-gate.ts +227 -150
  31. package/scripts/resolve_tailscale_cli.sh +24 -3
  32. package/src/native/Recordings/RecordingsLib/BlockingOperation.swift +29 -0
  33. package/src/native/Recordings/RecordingsLib/Info.plist +2 -2
  34. package/src/native/Recordings/RecordingsLib/ProjectStore.swift +4 -4
  35. package/src/native/Recordings/RecordingsLib/RecordingEngine.swift +228 -60
  36. package/src/native/Recordings/RecordingsLib/RecordingPasteTarget.swift +114 -0
  37. package/src/native/Recordings/RecordingsLib/RecordingProvider.swift +13 -3
  38. package/src/native/Recordings/RecordingsTests/BlockingOperationTests.swift +85 -0
  39. package/src/native/Recordings/RecordingsTests/CLIRunnerTests.swift +441 -72
  40. package/src/native/Recordings/RecordingsTests/PipeClosureFixture.swift +215 -0
  41. package/src/native/Recordings/RecordingsTests/ProjectStoreTests.swift +10 -10
  42. package/src/native/Recordings/RecordingsTests/RecordingEngineDeliveryTests.swift +1 -1
  43. package/src/native/Recordings/RecordingsTests/RecordingFrozenPasteTargetTests.swift +50 -0
  44. package/src/native/Recordings/RecordingsTests/RecordingPasteTargetTrackerTests.swift +48 -0
  45. package/src/native/Recordings/RecordingsTests/RecordingProviderTests.swift +115 -2
  46. package/src/native/Recordings/RecordingsTests/RecordingStartTimingTests.swift +93 -21
  47. package/src/native/Recordings/RecordingsTests/TestHomeDirectory.swift +5 -1
  48. package/src/native/Recordings/build.sh +2 -1
  49. package/dist/__tests__/helpers/installer-guard-execution.d.ts +0 -22
  50. package/dist/__tests__/helpers/installer-guard-execution.d.ts.map +0 -1
  51. package/dist/__tests__/helpers/installer-preflight.d.ts +0 -22
  52. package/dist/__tests__/helpers/installer-preflight.d.ts.map +0 -1
  53. package/dist/__tests__/helpers/native-fs-guard.d.ts +0 -2
  54. package/dist/__tests__/helpers/native-fs-guard.d.ts.map +0 -1
  55. package/dist/__tests__/helpers/source-assertions.d.ts +0 -171
  56. package/dist/__tests__/helpers/source-assertions.d.ts.map +0 -1
  57. package/dist/__tests__/preload.d.ts +0 -2
  58. package/dist/__tests__/preload.d.ts.map +0 -1
@@ -0,0 +1,1206 @@
1
+ {
2
+ "fixtureVersion": 1,
3
+ "cases": [
4
+ {
5
+ "parser": "recordingInputParser",
6
+ "name": "recording",
7
+ "valid": true,
8
+ "value": {
9
+ "id": "aaaaaaaa-aaaa-4aaa-8aaa-aaaaaaaaaaaa",
10
+ "title": "Fictional recording",
11
+ "transcript": "A blue notebook is on the desk.",
12
+ "durationMs": 1000
13
+ }
14
+ },
15
+ {
16
+ "parser": "recordingInputParser",
17
+ "name": "trim title",
18
+ "valid": true,
19
+ "value": {
20
+ "id": "aaaaaaaa-aaaa-4aaa-8aaa-aaaaaaaaaaaa",
21
+ "title": " Fictional title ",
22
+ "transcript": "A blue notebook is on the desk.",
23
+ "durationMs": 1000
24
+ }
25
+ },
26
+ {
27
+ "parser": "recordingInputParser",
28
+ "name": "unknown input",
29
+ "valid": false,
30
+ "value": {
31
+ "id": "aaaaaaaa-aaaa-4aaa-8aaa-aaaaaaaaaaaa",
32
+ "title": "Fictional recording",
33
+ "transcript": "A blue notebook is on the desk.",
34
+ "durationMs": 1000,
35
+ "extra": true
36
+ }
37
+ },
38
+ {
39
+ "parser": "recordingInputParser",
40
+ "name": "invalid UUID",
41
+ "valid": false,
42
+ "value": {
43
+ "id": "legacy-local-id",
44
+ "title": "Fictional recording",
45
+ "transcript": "A blue notebook is on the desk.",
46
+ "durationMs": 1000
47
+ }
48
+ },
49
+ {
50
+ "parser": "recordingInputParser",
51
+ "name": "negative duration",
52
+ "valid": false,
53
+ "value": {
54
+ "id": "aaaaaaaa-aaaa-4aaa-8aaa-aaaaaaaaaaaa",
55
+ "title": "Fictional recording",
56
+ "transcript": "A blue notebook is on the desk.",
57
+ "durationMs": -1
58
+ }
59
+ },
60
+ {
61
+ "parser": "recordingInputParser",
62
+ "name": "too long duration",
63
+ "valid": false,
64
+ "value": {
65
+ "id": "aaaaaaaa-aaaa-4aaa-8aaa-aaaaaaaaaaaa",
66
+ "title": "Fictional recording",
67
+ "transcript": "A blue notebook is on the desk.",
68
+ "durationMs": 1800001
69
+ }
70
+ },
71
+ {
72
+ "parser": "recordingInputParser",
73
+ "name": "empty title",
74
+ "valid": false,
75
+ "value": {
76
+ "id": "aaaaaaaa-aaaa-4aaa-8aaa-aaaaaaaaaaaa",
77
+ "title": " ",
78
+ "transcript": "A blue notebook is on the desk.",
79
+ "durationMs": 1000
80
+ }
81
+ },
82
+ {
83
+ "parser": "recordingResponseParser",
84
+ "name": "future nested response fields",
85
+ "valid": true,
86
+ "value": {
87
+ "recording": {
88
+ "id": "aaaaaaaa-aaaa-4aaa-8aaa-aaaaaaaaaaaa",
89
+ "title": "Fictional recording",
90
+ "transcript": "A blue notebook is on the desk.",
91
+ "durationMs": 1000,
92
+ "createdAt": "2026-01-02T03:04:05Z",
93
+ "updatedAt": "2026-01-02T03:04:05Z",
94
+ "future": {
95
+ "notes": [
96
+ "fictional",
97
+ null,
98
+ 3
99
+ ]
100
+ }
101
+ },
102
+ "nextContract": true
103
+ }
104
+ },
105
+ {
106
+ "parser": "recordingResponseParser",
107
+ "name": "missing timestamp",
108
+ "valid": false,
109
+ "value": {
110
+ "recording": {
111
+ "id": "aaaaaaaa-aaaa-4aaa-8aaa-aaaaaaaaaaaa",
112
+ "title": "Fictional recording",
113
+ "transcript": "A blue notebook is on the desk.",
114
+ "durationMs": 1000
115
+ }
116
+ }
117
+ },
118
+ {
119
+ "parser": "pasteInputParser",
120
+ "name": "UTC client report",
121
+ "valid": true,
122
+ "value": {
123
+ "id": "bbbbbbbb-bbbb-4bbb-8bbb-bbbbbbbbbbbb",
124
+ "recordingId": "aaaaaaaa-aaaa-4aaa-8aaa-aaaaaaaaaaaa",
125
+ "text": "Fictional text",
126
+ "status": "confirmed",
127
+ "occurredAt": "2026-01-02T03:04:05Z"
128
+ }
129
+ },
130
+ {
131
+ "parser": "pasteInputParser",
132
+ "name": "reject offset input",
133
+ "valid": false,
134
+ "value": {
135
+ "id": "bbbbbbbb-bbbb-4bbb-8bbb-bbbbbbbbbbbb",
136
+ "recordingId": "aaaaaaaa-aaaa-4aaa-8aaa-aaaaaaaaaaaa",
137
+ "text": "Fictional text",
138
+ "status": "confirmed",
139
+ "occurredAt": "2026-01-02T03:04:05+02:00"
140
+ }
141
+ },
142
+ {
143
+ "parser": "pasteInputParser",
144
+ "name": "reject claimed server evidence",
145
+ "valid": false,
146
+ "value": {
147
+ "id": "bbbbbbbb-bbbb-4bbb-8bbb-bbbbbbbbbbbb",
148
+ "recordingId": "aaaaaaaa-aaaa-4aaa-8aaa-aaaaaaaaaaaa",
149
+ "text": "Fictional text",
150
+ "status": "confirmed",
151
+ "occurredAt": "2026-01-02T03:04:05Z",
152
+ "evidenceSource": "server_verified"
153
+ }
154
+ },
155
+ {
156
+ "parser": "pasteReceiptParser",
157
+ "name": "offset response and client reported evidence",
158
+ "valid": true,
159
+ "value": {
160
+ "id": "bbbbbbbb-bbbb-4bbb-8bbb-bbbbbbbbbbbb",
161
+ "recordingId": "aaaaaaaa-aaaa-4aaa-8aaa-aaaaaaaaaaaa",
162
+ "text": "Fictional text",
163
+ "status": "confirmed",
164
+ "occurredAt": "2026-01-02T03:04:05+02:00",
165
+ "createdAt": "2026-01-02T03:04:05Z",
166
+ "updatedAt": "2026-01-02T03:04:05Z",
167
+ "evidenceSource": "client_reported",
168
+ "future": true
169
+ }
170
+ },
171
+ {
172
+ "parser": "pasteReceiptParser",
173
+ "name": "reject server verification claim",
174
+ "valid": false,
175
+ "value": {
176
+ "id": "bbbbbbbb-bbbb-4bbb-8bbb-bbbbbbbbbbbb",
177
+ "recordingId": "aaaaaaaa-aaaa-4aaa-8aaa-aaaaaaaaaaaa",
178
+ "text": "Fictional text",
179
+ "status": "confirmed",
180
+ "occurredAt": "2026-01-02T03:04:05Z",
181
+ "createdAt": "2026-01-02T03:04:05Z",
182
+ "updatedAt": "2026-01-02T03:04:05Z",
183
+ "evidenceSource": "server_verified"
184
+ }
185
+ },
186
+ {
187
+ "parser": "pageOptionsParser",
188
+ "name": "empty page",
189
+ "valid": true,
190
+ "value": {}
191
+ },
192
+ {
193
+ "parser": "pageOptionsParser",
194
+ "name": "paired cursor",
195
+ "valid": true,
196
+ "value": {
197
+ "before": "2026-01-02T03:04:05Z",
198
+ "beforeId": "aaaaaaaa-aaaa-4aaa-8aaa-aaaaaaaaaaaa"
199
+ }
200
+ },
201
+ {
202
+ "parser": "pageOptionsParser",
203
+ "name": "time only cursor",
204
+ "valid": false,
205
+ "value": {
206
+ "before": "2026-01-02T03:04:05Z"
207
+ }
208
+ },
209
+ {
210
+ "parser": "pageOptionsParser",
211
+ "name": "id alone cursor",
212
+ "valid": false,
213
+ "value": {
214
+ "beforeId": "aaaaaaaa-aaaa-4aaa-8aaa-aaaaaaaaaaaa"
215
+ }
216
+ },
217
+ {
218
+ "parser": "pageOptionsParser",
219
+ "name": "oversized page",
220
+ "valid": false,
221
+ "value": {
222
+ "limit": 101
223
+ }
224
+ },
225
+ {
226
+ "parser": "pageOptionsParser",
227
+ "name": "legacy offset is not hosted cursor",
228
+ "valid": false,
229
+ "value": {
230
+ "offset": 20
231
+ }
232
+ },
233
+ {
234
+ "parser": "accountResponseParser",
235
+ "name": "legacy account without metadata",
236
+ "valid": true,
237
+ "value": {
238
+ "account": {
239
+ "id": "aaaaaaaa-aaaa-4aaa-8aaa-aaaaaaaaaaaa",
240
+ "displayName": "Fictional account",
241
+ "email": "person@example.invalid",
242
+ "createdAt": "2026-01-02T03:04:05Z"
243
+ }
244
+ }
245
+ },
246
+ {
247
+ "parser": "accountResponseParser",
248
+ "name": "modern account",
249
+ "valid": true,
250
+ "value": {
251
+ "account": {
252
+ "id": "aaaaaaaa-aaaa-4aaa-8aaa-aaaaaaaaaaaa",
253
+ "displayName": "Fictional account",
254
+ "email": "person@example.invalid",
255
+ "createdAt": "2026-01-02T03:04:05Z"
256
+ },
257
+ "wireVersion": "1.0",
258
+ "capabilities": [
259
+ "version-negotiation",
260
+ "pcm-s16le-24000-mono",
261
+ "audio-ack",
262
+ "session-authorize"
263
+ ]
264
+ }
265
+ },
266
+ {
267
+ "parser": "versionResponseParser",
268
+ "name": "new compatible minor and capability",
269
+ "valid": true,
270
+ "value": {
271
+ "name": "recordings",
272
+ "version": "fictional",
273
+ "apiVersion": "v1",
274
+ "wireVersion": "1.12",
275
+ "capabilities": [
276
+ "version-negotiation",
277
+ "pcm-s16le-24000-mono",
278
+ "audio-ack",
279
+ "session-authorize",
280
+ "future-feature"
281
+ ]
282
+ }
283
+ },
284
+ {
285
+ "parser": "accountResponseParser",
286
+ "name": "partial metadata",
287
+ "valid": false,
288
+ "value": {
289
+ "account": {
290
+ "id": "aaaaaaaa-aaaa-4aaa-8aaa-aaaaaaaaaaaa",
291
+ "displayName": "Fictional account",
292
+ "email": "person@example.invalid",
293
+ "createdAt": "2026-01-02T03:04:05Z"
294
+ },
295
+ "wireVersion": "1.0"
296
+ }
297
+ },
298
+ {
299
+ "parser": "accountResponseParser",
300
+ "name": "missing required capability",
301
+ "valid": false,
302
+ "value": {
303
+ "account": {
304
+ "id": "aaaaaaaa-aaaa-4aaa-8aaa-aaaaaaaaaaaa",
305
+ "displayName": "Fictional account",
306
+ "email": "person@example.invalid",
307
+ "createdAt": "2026-01-02T03:04:05Z"
308
+ },
309
+ "wireVersion": "1.0",
310
+ "capabilities": [
311
+ "version-negotiation",
312
+ "pcm-s16le-24000-mono",
313
+ "audio-ack"
314
+ ]
315
+ }
316
+ },
317
+ {
318
+ "parser": "accountResponseParser",
319
+ "name": "duplicate capability",
320
+ "valid": false,
321
+ "value": {
322
+ "account": {
323
+ "id": "aaaaaaaa-aaaa-4aaa-8aaa-aaaaaaaaaaaa",
324
+ "displayName": "Fictional account",
325
+ "email": "person@example.invalid",
326
+ "createdAt": "2026-01-02T03:04:05Z"
327
+ },
328
+ "wireVersion": "1.0",
329
+ "capabilities": [
330
+ "version-negotiation",
331
+ "pcm-s16le-24000-mono",
332
+ "audio-ack",
333
+ "session-authorize",
334
+ "version-negotiation",
335
+ "pcm-s16le-24000-mono",
336
+ "audio-ack",
337
+ "session-authorize"
338
+ ]
339
+ }
340
+ },
341
+ {
342
+ "parser": "accountResponseParser",
343
+ "name": "bad capability",
344
+ "valid": false,
345
+ "value": {
346
+ "account": {
347
+ "id": "aaaaaaaa-aaaa-4aaa-8aaa-aaaaaaaaaaaa",
348
+ "displayName": "Fictional account",
349
+ "email": "person@example.invalid",
350
+ "createdAt": "2026-01-02T03:04:05Z"
351
+ },
352
+ "wireVersion": "1.0",
353
+ "capabilities": [
354
+ "version-negotiation",
355
+ "pcm-s16le-24000-mono",
356
+ "audio-ack",
357
+ "session-authorize",
358
+ "Not valid"
359
+ ]
360
+ }
361
+ },
362
+ {
363
+ "parser": "accountResponseParser",
364
+ "name": "unsupported major",
365
+ "valid": false,
366
+ "value": {
367
+ "account": {
368
+ "id": "aaaaaaaa-aaaa-4aaa-8aaa-aaaaaaaaaaaa",
369
+ "displayName": "Fictional account",
370
+ "email": "person@example.invalid",
371
+ "createdAt": "2026-01-02T03:04:05Z"
372
+ },
373
+ "wireVersion": "2.0",
374
+ "capabilities": [
375
+ "version-negotiation",
376
+ "pcm-s16le-24000-mono",
377
+ "audio-ack",
378
+ "session-authorize"
379
+ ]
380
+ }
381
+ },
382
+ {
383
+ "parser": "accountResponseParser",
384
+ "name": "trailing newline",
385
+ "valid": false,
386
+ "value": {
387
+ "account": {
388
+ "id": "aaaaaaaa-aaaa-4aaa-8aaa-aaaaaaaaaaaa",
389
+ "displayName": "Fictional account",
390
+ "email": "person@example.invalid",
391
+ "createdAt": "2026-01-02T03:04:05Z"
392
+ },
393
+ "wireVersion": "1.0\n",
394
+ "capabilities": [
395
+ "version-negotiation",
396
+ "pcm-s16le-24000-mono",
397
+ "audio-ack",
398
+ "session-authorize"
399
+ ]
400
+ }
401
+ },
402
+ {
403
+ "parser": "bootstrapInputParser",
404
+ "name": "empty bootstrap",
405
+ "valid": true,
406
+ "value": {}
407
+ },
408
+ {
409
+ "parser": "bootstrapInputParser",
410
+ "name": "no profile authority input",
411
+ "valid": false,
412
+ "value": {
413
+ "id": "aaaaaaaa-aaaa-4aaa-8aaa-aaaaaaaaaaaa"
414
+ }
415
+ },
416
+ {
417
+ "parser": "renameInputParser",
418
+ "name": "rename",
419
+ "valid": true,
420
+ "value": {
421
+ "title": "Fictional title"
422
+ }
423
+ },
424
+ {
425
+ "parser": "pendingDeletionParser",
426
+ "name": "pending cleanup with future metadata",
427
+ "valid": true,
428
+ "value": {
429
+ "audioCleanup": {
430
+ "state": "pending",
431
+ "future": true
432
+ }
433
+ }
434
+ },
435
+ {
436
+ "parser": "streamControlParser",
437
+ "name": "legacy session start",
438
+ "valid": true,
439
+ "value": {
440
+ "type": "session.start",
441
+ "sessionId": "aaaaaaaa-aaaa-4aaa-8aaa-aaaaaaaaaaaa"
442
+ }
443
+ },
444
+ {
445
+ "parser": "streamControlParser",
446
+ "name": "modern session start",
447
+ "valid": true,
448
+ "value": {
449
+ "type": "session.start",
450
+ "sessionId": "aaaaaaaa-aaaa-4aaa-8aaa-aaaaaaaaaaaa",
451
+ "wireVersion": "1.0",
452
+ "capabilities": [
453
+ "version-negotiation",
454
+ "pcm-s16le-24000-mono",
455
+ "audio-ack",
456
+ "session-authorize"
457
+ ],
458
+ "language": "en",
459
+ "model": "fictional-model"
460
+ }
461
+ },
462
+ {
463
+ "parser": "streamControlParser",
464
+ "name": "finish",
465
+ "valid": true,
466
+ "value": {
467
+ "type": "input.finish"
468
+ }
469
+ },
470
+ {
471
+ "parser": "streamControlParser",
472
+ "name": "cancel",
473
+ "valid": true,
474
+ "value": {
475
+ "type": "session.cancel"
476
+ }
477
+ },
478
+ {
479
+ "parser": "streamControlParser",
480
+ "name": "authorize",
481
+ "valid": true,
482
+ "value": {
483
+ "type": "session.authorize",
484
+ "accessToken": "fictional-bearer"
485
+ }
486
+ },
487
+ {
488
+ "parser": "streamControlParser",
489
+ "name": "start future key",
490
+ "valid": false,
491
+ "value": {
492
+ "type": "session.start",
493
+ "sessionId": "aaaaaaaa-aaaa-4aaa-8aaa-aaaaaaaaaaaa",
494
+ "future": true
495
+ }
496
+ },
497
+ {
498
+ "parser": "streamControlParser",
499
+ "name": "partial start metadata",
500
+ "valid": false,
501
+ "value": {
502
+ "type": "session.start",
503
+ "sessionId": "aaaaaaaa-aaaa-4aaa-8aaa-aaaaaaaaaaaa",
504
+ "wireVersion": "1.0"
505
+ }
506
+ },
507
+ {
508
+ "parser": "streamControlParser",
509
+ "name": "uppercase language",
510
+ "valid": false,
511
+ "value": {
512
+ "type": "session.start",
513
+ "sessionId": "aaaaaaaa-aaaa-4aaa-8aaa-aaaaaaaaaaaa",
514
+ "language": "EN"
515
+ }
516
+ },
517
+ {
518
+ "parser": "streamControlParser",
519
+ "name": "wrong major",
520
+ "valid": false,
521
+ "value": {
522
+ "type": "session.start",
523
+ "sessionId": "aaaaaaaa-aaaa-4aaa-8aaa-aaaaaaaaaaaa",
524
+ "wireVersion": "2.0",
525
+ "capabilities": [
526
+ "version-negotiation",
527
+ "pcm-s16le-24000-mono",
528
+ "audio-ack",
529
+ "session-authorize"
530
+ ]
531
+ }
532
+ },
533
+ {
534
+ "parser": "streamControlParser",
535
+ "name": "finish fields",
536
+ "valid": false,
537
+ "value": {
538
+ "type": "input.finish",
539
+ "sessionId": "aaaaaaaa-aaaa-4aaa-8aaa-aaaaaaaaaaaa"
540
+ }
541
+ },
542
+ {
543
+ "parser": "streamControlParser",
544
+ "name": "empty authorization",
545
+ "valid": false,
546
+ "value": {
547
+ "type": "session.authorize",
548
+ "accessToken": ""
549
+ }
550
+ },
551
+ {
552
+ "parser": "streamEventParser",
553
+ "name": "legacy ready",
554
+ "valid": true,
555
+ "value": {
556
+ "type": "session.ready",
557
+ "sessionId": "aaaaaaaa-aaaa-4aaa-8aaa-aaaaaaaaaaaa",
558
+ "format": {
559
+ "encoding": "pcm_s16le",
560
+ "sampleRateHz": 24000,
561
+ "channels": 1
562
+ },
563
+ "maxInFlightAudioBytes": 96000
564
+ }
565
+ },
566
+ {
567
+ "parser": "streamEventParser",
568
+ "name": "modern ready",
569
+ "valid": true,
570
+ "value": {
571
+ "type": "session.ready",
572
+ "sessionId": "aaaaaaaa-aaaa-4aaa-8aaa-aaaaaaaaaaaa",
573
+ "format": {
574
+ "encoding": "pcm_s16le",
575
+ "sampleRateHz": 24000,
576
+ "channels": 1
577
+ },
578
+ "maxInFlightAudioBytes": 96000,
579
+ "wireVersion": "1.0",
580
+ "capabilities": [
581
+ "version-negotiation",
582
+ "pcm-s16le-24000-mono",
583
+ "audio-ack",
584
+ "session-authorize"
585
+ ],
586
+ "future": {
587
+ "enabled": true
588
+ }
589
+ }
590
+ },
591
+ {
592
+ "parser": "streamEventParser",
593
+ "name": "future minor ready",
594
+ "valid": true,
595
+ "value": {
596
+ "type": "session.ready",
597
+ "sessionId": "aaaaaaaa-aaaa-4aaa-8aaa-aaaaaaaaaaaa",
598
+ "format": {
599
+ "encoding": "pcm_s16le",
600
+ "sampleRateHz": 24000,
601
+ "channels": 1
602
+ },
603
+ "maxInFlightAudioBytes": 96000,
604
+ "wireVersion": "1.1",
605
+ "capabilities": [
606
+ "version-negotiation",
607
+ "pcm-s16le-24000-mono",
608
+ "audio-ack",
609
+ "session-authorize"
610
+ ]
611
+ }
612
+ },
613
+ {
614
+ "parser": "streamEventParser",
615
+ "name": "audio accepted",
616
+ "valid": true,
617
+ "value": {
618
+ "type": "audio.accepted",
619
+ "sessionId": "aaaaaaaa-aaaa-4aaa-8aaa-aaaaaaaaaaaa",
620
+ "bytes": 4800,
621
+ "totalBytes": 9600
622
+ }
623
+ },
624
+ {
625
+ "parser": "streamEventParser",
626
+ "name": "authorized",
627
+ "valid": true,
628
+ "value": {
629
+ "type": "session.authorized",
630
+ "sessionId": "aaaaaaaa-aaaa-4aaa-8aaa-aaaaaaaaaaaa",
631
+ "expiresAt": 2000000000
632
+ }
633
+ },
634
+ {
635
+ "parser": "streamEventParser",
636
+ "name": "partial",
637
+ "valid": true,
638
+ "value": {
639
+ "type": "partial",
640
+ "sessionId": "aaaaaaaa-aaaa-4aaa-8aaa-aaaaaaaaaaaa",
641
+ "sequence": 1,
642
+ "segment": {
643
+ "id": "segment-1",
644
+ "text": "Fictional partial.",
645
+ "startSecond": 0,
646
+ "future": true
647
+ }
648
+ }
649
+ },
650
+ {
651
+ "parser": "streamEventParser",
652
+ "name": "committed",
653
+ "valid": true,
654
+ "value": {
655
+ "type": "committed",
656
+ "sessionId": "aaaaaaaa-aaaa-4aaa-8aaa-aaaaaaaaaaaa",
657
+ "sequence": 1,
658
+ "segment": {
659
+ "id": "segment-1",
660
+ "text": "Fictional partial.",
661
+ "startSecond": 0,
662
+ "future": true
663
+ }
664
+ }
665
+ },
666
+ {
667
+ "parser": "streamEventParser",
668
+ "name": "minimal legacy final",
669
+ "valid": true,
670
+ "value": {
671
+ "type": "final",
672
+ "sessionId": "aaaaaaaa-aaaa-4aaa-8aaa-aaaaaaaaaaaa",
673
+ "transcript": {
674
+ "sessionId": "aaaaaaaa-aaaa-4aaa-8aaa-aaaaaaaaaaaa",
675
+ "text": "Fictional final."
676
+ }
677
+ }
678
+ },
679
+ {
680
+ "parser": "streamEventParser",
681
+ "name": "final",
682
+ "valid": true,
683
+ "value": {
684
+ "type": "final",
685
+ "sessionId": "aaaaaaaa-aaaa-4aaa-8aaa-aaaaaaaaaaaa",
686
+ "sequence": 2,
687
+ "recordingId": "aaaaaaaa-aaaa-4aaa-8aaa-aaaaaaaaaaaa",
688
+ "transcript": {
689
+ "sessionId": "aaaaaaaa-aaaa-4aaa-8aaa-aaaaaaaaaaaa",
690
+ "text": "Fictional final transcript.",
691
+ "segments": [
692
+ {
693
+ "id": "segment-1",
694
+ "text": "Fictional final transcript."
695
+ }
696
+ ]
697
+ }
698
+ }
699
+ },
700
+ {
701
+ "parser": "streamEventParser",
702
+ "name": "future safe error code",
703
+ "valid": true,
704
+ "value": {
705
+ "type": "error",
706
+ "sessionId": "aaaaaaaa-aaaa-4aaa-8aaa-aaaaaaaaaaaa",
707
+ "code": "future_error",
708
+ "message": "Fictional refusal."
709
+ }
710
+ },
711
+ {
712
+ "parser": "streamEventParser",
713
+ "name": "wrong sample rate",
714
+ "valid": false,
715
+ "value": {
716
+ "type": "session.ready",
717
+ "sessionId": "aaaaaaaa-aaaa-4aaa-8aaa-aaaaaaaaaaaa",
718
+ "format": {
719
+ "encoding": "pcm_s16le",
720
+ "sampleRateHz": 48000,
721
+ "channels": 1
722
+ },
723
+ "maxInFlightAudioBytes": 96000
724
+ }
725
+ },
726
+ {
727
+ "parser": "streamEventParser",
728
+ "name": "oversized audio window",
729
+ "valid": false,
730
+ "value": {
731
+ "type": "session.ready",
732
+ "sessionId": "aaaaaaaa-aaaa-4aaa-8aaa-aaaaaaaaaaaa",
733
+ "format": {
734
+ "encoding": "pcm_s16le",
735
+ "sampleRateHz": 24000,
736
+ "channels": 1
737
+ },
738
+ "maxInFlightAudioBytes": 192001
739
+ }
740
+ },
741
+ {
742
+ "parser": "streamEventParser",
743
+ "name": "partial ready metadata",
744
+ "valid": false,
745
+ "value": {
746
+ "type": "session.ready",
747
+ "sessionId": "aaaaaaaa-aaaa-4aaa-8aaa-aaaaaaaaaaaa",
748
+ "format": {
749
+ "encoding": "pcm_s16le",
750
+ "sampleRateHz": 24000,
751
+ "channels": 1
752
+ },
753
+ "maxInFlightAudioBytes": 96000,
754
+ "wireVersion": "1.0"
755
+ }
756
+ },
757
+ {
758
+ "parser": "streamEventParser",
759
+ "name": "unsupported ready major",
760
+ "valid": false,
761
+ "value": {
762
+ "type": "session.ready",
763
+ "sessionId": "aaaaaaaa-aaaa-4aaa-8aaa-aaaaaaaaaaaa",
764
+ "format": {
765
+ "encoding": "pcm_s16le",
766
+ "sampleRateHz": 24000,
767
+ "channels": 1
768
+ },
769
+ "maxInFlightAudioBytes": 96000,
770
+ "wireVersion": "2.0",
771
+ "capabilities": [
772
+ "version-negotiation",
773
+ "pcm-s16le-24000-mono",
774
+ "audio-ack",
775
+ "session-authorize"
776
+ ]
777
+ }
778
+ },
779
+ {
780
+ "parser": "streamEventParser",
781
+ "name": "odd ack",
782
+ "valid": false,
783
+ "value": {
784
+ "type": "audio.accepted",
785
+ "sessionId": "aaaaaaaa-aaaa-4aaa-8aaa-aaaaaaaaaaaa",
786
+ "bytes": 3,
787
+ "totalBytes": 3
788
+ }
789
+ },
790
+ {
791
+ "parser": "streamEventParser",
792
+ "name": "ack exceeds total",
793
+ "valid": false,
794
+ "value": {
795
+ "type": "audio.accepted",
796
+ "sessionId": "aaaaaaaa-aaaa-4aaa-8aaa-aaaaaaaaaaaa",
797
+ "bytes": 4800,
798
+ "totalBytes": 2400
799
+ }
800
+ },
801
+ {
802
+ "parser": "streamEventParser",
803
+ "name": "negative sequence",
804
+ "valid": false,
805
+ "value": {
806
+ "type": "partial",
807
+ "sessionId": "aaaaaaaa-aaaa-4aaa-8aaa-aaaaaaaaaaaa",
808
+ "sequence": -1,
809
+ "segment": {
810
+ "id": "one",
811
+ "text": "Fictional"
812
+ }
813
+ }
814
+ },
815
+ {
816
+ "parser": "streamEventParser",
817
+ "name": "foreign final identity",
818
+ "valid": false,
819
+ "value": {
820
+ "type": "final",
821
+ "sessionId": "aaaaaaaa-aaaa-4aaa-8aaa-aaaaaaaaaaaa",
822
+ "sequence": 2,
823
+ "recordingId": "aaaaaaaa-aaaa-4aaa-8aaa-aaaaaaaaaaaa",
824
+ "transcript": {
825
+ "sessionId": "bbbbbbbb-bbbb-4bbb-8bbb-bbbbbbbbbbbb",
826
+ "text": "Fictional final transcript.",
827
+ "segments": [
828
+ {
829
+ "id": "segment-1",
830
+ "text": "Fictional final transcript."
831
+ }
832
+ ]
833
+ }
834
+ }
835
+ },
836
+ {
837
+ "parser": "streamEventParser",
838
+ "name": "foreign recording identity",
839
+ "valid": false,
840
+ "value": {
841
+ "type": "final",
842
+ "sessionId": "aaaaaaaa-aaaa-4aaa-8aaa-aaaaaaaaaaaa",
843
+ "sequence": 2,
844
+ "recordingId": "bbbbbbbb-bbbb-4bbb-8bbb-bbbbbbbbbbbb",
845
+ "transcript": {
846
+ "sessionId": "aaaaaaaa-aaaa-4aaa-8aaa-aaaaaaaaaaaa",
847
+ "text": "Fictional final transcript.",
848
+ "segments": [
849
+ {
850
+ "id": "segment-1",
851
+ "text": "Fictional final transcript."
852
+ }
853
+ ]
854
+ }
855
+ }
856
+ },
857
+ {
858
+ "parser": "streamEventParser",
859
+ "name": "empty final",
860
+ "valid": false,
861
+ "value": {
862
+ "type": "final",
863
+ "sessionId": "aaaaaaaa-aaaa-4aaa-8aaa-aaaaaaaaaaaa",
864
+ "sequence": 2,
865
+ "recordingId": "aaaaaaaa-aaaa-4aaa-8aaa-aaaaaaaaaaaa",
866
+ "transcript": {
867
+ "sessionId": "aaaaaaaa-aaaa-4aaa-8aaa-aaaaaaaaaaaa",
868
+ "text": " ",
869
+ "segments": [
870
+ {
871
+ "id": "segment-1",
872
+ "text": "Fictional final transcript."
873
+ }
874
+ ]
875
+ }
876
+ }
877
+ },
878
+ {
879
+ "parser": "streamEventParser",
880
+ "name": "unknown event kind",
881
+ "valid": false,
882
+ "value": {
883
+ "type": "unrecognized.event",
884
+ "sessionId": "aaaaaaaa-aaaa-4aaa-8aaa-aaaaaaaaaaaa"
885
+ }
886
+ },
887
+ {
888
+ "parser": "recordingIDParser",
889
+ "name": "UUID standard",
890
+ "value": "aaaaaaaa-aaaa-4aaa-8aaa-aaaaaaaaaaaa",
891
+ "valid": true
892
+ },
893
+ {
894
+ "parser": "recordingIDParser",
895
+ "name": "UUID uppercase standard",
896
+ "value": "AAAAAAAA-AAAA-4AAA-8AAA-AAAAAAAAAAAA",
897
+ "valid": true
898
+ },
899
+ {
900
+ "parser": "recordingIDParser",
901
+ "name": "UUID nil",
902
+ "value": "00000000-0000-0000-0000-000000000000",
903
+ "valid": true
904
+ },
905
+ {
906
+ "parser": "recordingIDParser",
907
+ "name": "UUID max",
908
+ "value": "ffffffff-ffff-ffff-ffff-ffffffffffff",
909
+ "valid": true
910
+ },
911
+ {
912
+ "parser": "recordingIDParser",
913
+ "name": "UUID uppercase max rejected",
914
+ "value": "FFFFFFFF-FFFF-FFFF-FFFF-FFFFFFFFFFFF",
915
+ "valid": false
916
+ },
917
+ {
918
+ "parser": "recordingIDParser",
919
+ "name": "UUID version zero rejected",
920
+ "value": "aaaaaaaa-aaaa-0aaa-8aaa-aaaaaaaaaaaa",
921
+ "valid": false
922
+ },
923
+ {
924
+ "parser": "recordingIDParser",
925
+ "name": "UUID newline rejected",
926
+ "value": "aaaaaaaa-aaaa-4aaa-8aaa-aaaaaaaaaaaa\n",
927
+ "valid": false
928
+ },
929
+ {
930
+ "parser": "pasteInputParser",
931
+ "name": "UTC qualified timestamp 2026-01-02T03:04Z",
932
+ "value": {
933
+ "id": "aaaaaaaa-aaaa-4aaa-8aaa-aaaaaaaaaaaa",
934
+ "text": "Fictional",
935
+ "status": "attempted",
936
+ "occurredAt": "2026-01-02T03:04Z"
937
+ },
938
+ "valid": false
939
+ },
940
+ {
941
+ "parser": "pageOptionsParser",
942
+ "name": "Cursor qualified timestamp 2026-01-02T03:04Z",
943
+ "value": {
944
+ "before": "2026-01-02T03:04Z",
945
+ "beforeId": "aaaaaaaa-aaaa-4aaa-8aaa-aaaaaaaaaaaa"
946
+ },
947
+ "valid": false
948
+ },
949
+ {
950
+ "parser": "pasteInputParser",
951
+ "name": "UTC qualified timestamp 2026-01-02T03:04:05Z",
952
+ "value": {
953
+ "id": "aaaaaaaa-aaaa-4aaa-8aaa-aaaaaaaaaaaa",
954
+ "text": "Fictional",
955
+ "status": "attempted",
956
+ "occurredAt": "2026-01-02T03:04:05Z"
957
+ },
958
+ "valid": true
959
+ },
960
+ {
961
+ "parser": "pageOptionsParser",
962
+ "name": "Cursor qualified timestamp 2026-01-02T03:04:05Z",
963
+ "value": {
964
+ "before": "2026-01-02T03:04:05Z",
965
+ "beforeId": "aaaaaaaa-aaaa-4aaa-8aaa-aaaaaaaaaaaa"
966
+ },
967
+ "valid": true
968
+ },
969
+ {
970
+ "parser": "pasteInputParser",
971
+ "name": "UTC qualified timestamp 2026-01-02T03:04:05.123Z",
972
+ "value": {
973
+ "id": "aaaaaaaa-aaaa-4aaa-8aaa-aaaaaaaaaaaa",
974
+ "text": "Fictional",
975
+ "status": "attempted",
976
+ "occurredAt": "2026-01-02T03:04:05.123Z"
977
+ },
978
+ "valid": true
979
+ },
980
+ {
981
+ "parser": "pageOptionsParser",
982
+ "name": "Cursor qualified timestamp 2026-01-02T03:04:05.123Z",
983
+ "value": {
984
+ "before": "2026-01-02T03:04:05.123Z",
985
+ "beforeId": "aaaaaaaa-aaaa-4aaa-8aaa-aaaaaaaaaaaa"
986
+ },
987
+ "valid": true
988
+ },
989
+ {
990
+ "parser": "pasteInputParser",
991
+ "name": "UTC qualified timestamp 2026-01-02T03:04:05+02:00",
992
+ "value": {
993
+ "id": "aaaaaaaa-aaaa-4aaa-8aaa-aaaaaaaaaaaa",
994
+ "text": "Fictional",
995
+ "status": "attempted",
996
+ "occurredAt": "2026-01-02T03:04:05+02:00"
997
+ },
998
+ "valid": false
999
+ },
1000
+ {
1001
+ "parser": "pageOptionsParser",
1002
+ "name": "Cursor qualified timestamp 2026-01-02T03:04:05+02:00",
1003
+ "value": {
1004
+ "before": "2026-01-02T03:04:05+02:00",
1005
+ "beforeId": "aaaaaaaa-aaaa-4aaa-8aaa-aaaaaaaaaaaa"
1006
+ },
1007
+ "valid": true
1008
+ },
1009
+ {
1010
+ "parser": "pasteInputParser",
1011
+ "name": "UTC qualified timestamp 2026-01-02T03:04:05+0200",
1012
+ "value": {
1013
+ "id": "aaaaaaaa-aaaa-4aaa-8aaa-aaaaaaaaaaaa",
1014
+ "text": "Fictional",
1015
+ "status": "attempted",
1016
+ "occurredAt": "2026-01-02T03:04:05+0200"
1017
+ },
1018
+ "valid": false
1019
+ },
1020
+ {
1021
+ "parser": "pageOptionsParser",
1022
+ "name": "Cursor qualified timestamp 2026-01-02T03:04:05+0200",
1023
+ "value": {
1024
+ "before": "2026-01-02T03:04:05+0200",
1025
+ "beforeId": "aaaaaaaa-aaaa-4aaa-8aaa-aaaaaaaaaaaa"
1026
+ },
1027
+ "valid": false
1028
+ },
1029
+ {
1030
+ "parser": "pasteInputParser",
1031
+ "name": "UTC qualified timestamp 2026-01-02T03:04:05+02",
1032
+ "value": {
1033
+ "id": "aaaaaaaa-aaaa-4aaa-8aaa-aaaaaaaaaaaa",
1034
+ "text": "Fictional",
1035
+ "status": "attempted",
1036
+ "occurredAt": "2026-01-02T03:04:05+02"
1037
+ },
1038
+ "valid": false
1039
+ },
1040
+ {
1041
+ "parser": "pageOptionsParser",
1042
+ "name": "Cursor qualified timestamp 2026-01-02T03:04:05+02",
1043
+ "value": {
1044
+ "before": "2026-01-02T03:04:05+02",
1045
+ "beforeId": "aaaaaaaa-aaaa-4aaa-8aaa-aaaaaaaaaaaa"
1046
+ },
1047
+ "valid": false
1048
+ },
1049
+ {
1050
+ "parser": "pasteInputParser",
1051
+ "name": "UTC qualified timestamp 2026-01-02T03:04:05+23:59",
1052
+ "value": {
1053
+ "id": "aaaaaaaa-aaaa-4aaa-8aaa-aaaaaaaaaaaa",
1054
+ "text": "Fictional",
1055
+ "status": "attempted",
1056
+ "occurredAt": "2026-01-02T03:04:05+23:59"
1057
+ },
1058
+ "valid": false
1059
+ },
1060
+ {
1061
+ "parser": "pageOptionsParser",
1062
+ "name": "Cursor qualified timestamp 2026-01-02T03:04:05+23:59",
1063
+ "value": {
1064
+ "before": "2026-01-02T03:04:05+23:59",
1065
+ "beforeId": "aaaaaaaa-aaaa-4aaa-8aaa-aaaaaaaaaaaa"
1066
+ },
1067
+ "valid": true
1068
+ },
1069
+ {
1070
+ "parser": "pasteInputParser",
1071
+ "name": "UTC qualified timestamp 2026-01-02T03:04:05+24:00",
1072
+ "value": {
1073
+ "id": "aaaaaaaa-aaaa-4aaa-8aaa-aaaaaaaaaaaa",
1074
+ "text": "Fictional",
1075
+ "status": "attempted",
1076
+ "occurredAt": "2026-01-02T03:04:05+24:00"
1077
+ },
1078
+ "valid": false
1079
+ },
1080
+ {
1081
+ "parser": "pageOptionsParser",
1082
+ "name": "Cursor qualified timestamp 2026-01-02T03:04:05+24:00",
1083
+ "value": {
1084
+ "before": "2026-01-02T03:04:05+24:00",
1085
+ "beforeId": "aaaaaaaa-aaaa-4aaa-8aaa-aaaaaaaaaaaa"
1086
+ },
1087
+ "valid": false
1088
+ },
1089
+ {
1090
+ "parser": "pasteInputParser",
1091
+ "name": "UTC qualified timestamp 2026-01-02T03:04:05+02:60",
1092
+ "value": {
1093
+ "id": "aaaaaaaa-aaaa-4aaa-8aaa-aaaaaaaaaaaa",
1094
+ "text": "Fictional",
1095
+ "status": "attempted",
1096
+ "occurredAt": "2026-01-02T03:04:05+02:60"
1097
+ },
1098
+ "valid": false
1099
+ },
1100
+ {
1101
+ "parser": "pageOptionsParser",
1102
+ "name": "Cursor qualified timestamp 2026-01-02T03:04:05+02:60",
1103
+ "value": {
1104
+ "before": "2026-01-02T03:04:05+02:60",
1105
+ "beforeId": "aaaaaaaa-aaaa-4aaa-8aaa-aaaaaaaaaaaa"
1106
+ },
1107
+ "valid": false
1108
+ },
1109
+ {
1110
+ "parser": "pasteInputParser",
1111
+ "name": "UTC qualified timestamp 2026-02-30T03:04:05Z",
1112
+ "value": {
1113
+ "id": "aaaaaaaa-aaaa-4aaa-8aaa-aaaaaaaaaaaa",
1114
+ "text": "Fictional",
1115
+ "status": "attempted",
1116
+ "occurredAt": "2026-02-30T03:04:05Z"
1117
+ },
1118
+ "valid": false
1119
+ },
1120
+ {
1121
+ "parser": "pageOptionsParser",
1122
+ "name": "Cursor qualified timestamp 2026-02-30T03:04:05Z",
1123
+ "value": {
1124
+ "before": "2026-02-30T03:04:05Z",
1125
+ "beforeId": "aaaaaaaa-aaaa-4aaa-8aaa-aaaaaaaaaaaa"
1126
+ },
1127
+ "valid": false
1128
+ },
1129
+ {
1130
+ "parser": "pasteInputParser",
1131
+ "name": "UTC qualified timestamp 2024-02-29T03:04:05Z",
1132
+ "value": {
1133
+ "id": "aaaaaaaa-aaaa-4aaa-8aaa-aaaaaaaaaaaa",
1134
+ "text": "Fictional",
1135
+ "status": "attempted",
1136
+ "occurredAt": "2024-02-29T03:04:05Z"
1137
+ },
1138
+ "valid": true
1139
+ },
1140
+ {
1141
+ "parser": "pageOptionsParser",
1142
+ "name": "Cursor qualified timestamp 2024-02-29T03:04:05Z",
1143
+ "value": {
1144
+ "before": "2024-02-29T03:04:05Z",
1145
+ "beforeId": "aaaaaaaa-aaaa-4aaa-8aaa-aaaaaaaaaaaa"
1146
+ },
1147
+ "valid": true
1148
+ },
1149
+ {
1150
+ "parser": "pasteInputParser",
1151
+ "name": "UTC qualified timestamp 2026-01-02T03:04:05Z [newline]",
1152
+ "value": {
1153
+ "id": "aaaaaaaa-aaaa-4aaa-8aaa-aaaaaaaaaaaa",
1154
+ "text": "Fictional",
1155
+ "status": "attempted",
1156
+ "occurredAt": "2026-01-02T03:04:05Z\n"
1157
+ },
1158
+ "valid": false
1159
+ },
1160
+ {
1161
+ "parser": "pageOptionsParser",
1162
+ "name": "Cursor qualified timestamp 2026-01-02T03:04:05Z [newline]",
1163
+ "value": {
1164
+ "before": "2026-01-02T03:04:05Z\n",
1165
+ "beforeId": "aaaaaaaa-aaaa-4aaa-8aaa-aaaaaaaaaaaa"
1166
+ },
1167
+ "valid": false
1168
+ },
1169
+ {
1170
+ "parser": "healthResponseParser",
1171
+ "name": "healthy status preserves future JSON",
1172
+ "valid": true,
1173
+ "value": {
1174
+ "status": "ok",
1175
+ "future": {
1176
+ "available": true
1177
+ }
1178
+ }
1179
+ },
1180
+ {
1181
+ "parser": "healthResponseParser",
1182
+ "name": "unknown health status refused",
1183
+ "valid": false,
1184
+ "value": {
1185
+ "status": "ready"
1186
+ }
1187
+ },
1188
+ {
1189
+ "parser": "readyResponseParser",
1190
+ "name": "ready status preserves future JSON",
1191
+ "valid": true,
1192
+ "value": {
1193
+ "status": "ready",
1194
+ "future": {
1195
+ "available": true
1196
+ }
1197
+ }
1198
+ },
1199
+ {
1200
+ "parser": "readyResponseParser",
1201
+ "name": "missing ready status refused",
1202
+ "valid": false,
1203
+ "value": {}
1204
+ }
1205
+ ]
1206
+ }