@oneharness/sdk 0.6.5 → 0.6.7

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -90,7 +90,9 @@ export const HistoryEventLineSchema = z.union([
90
90
  .regex(new RegExp("^[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}$", "u"))
91
91
  .refine((value) => [...value].length <= 36, { message: "Too long: expected at most 36 characters" })
92
92
  .refine((value) => value !== undefined, { message: "Required" }),
93
- schema_version: z.literal("1.2").refine((value) => value !== undefined, { message: "Required" }),
93
+ schema_version: z
94
+ .union([z.literal("1.2"), z.literal("1.3")])
95
+ .refine((value) => value !== undefined, { message: "Required" }),
94
96
  variant: z.union([z.string(), z.null()]).optional(),
95
97
  }),
96
98
  z.looseObject({
@@ -138,7 +140,9 @@ export const HistoryLineSchema = z.union([
138
140
  .regex(new RegExp("^[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}$", "u"))
139
141
  .refine((value) => [...value].length <= 36, { message: "Too long: expected at most 36 characters" })
140
142
  .refine((value) => value !== undefined, { message: "Required" }),
141
- schema_version: z.literal("1.2").refine((value) => value !== undefined, { message: "Required" }),
143
+ schema_version: z
144
+ .union([z.literal("1.2"), z.literal("1.3")])
145
+ .refine((value) => value !== undefined, { message: "Required" }),
142
146
  type: z.literal("event").refine((value) => value !== undefined, { message: "Required" }),
143
147
  variant: z.union([z.string(), z.null()]).optional(),
144
148
  }),
@@ -163,12 +167,21 @@ export const HistoryLineSchema = z.union([
163
167
  variant: z.union([z.string(), z.null()]).optional(),
164
168
  }),
165
169
  ]),
166
- z.union([
170
+ z.intersection(z.union([
167
171
  z.looseObject({
168
172
  duration_ms: z
169
173
  .int()
170
174
  .gte(0)
171
175
  .refine((value) => value !== undefined, { message: "Required" }),
176
+ error: z
177
+ .union([
178
+ z
179
+ .string()
180
+ .min(1)
181
+ .refine((value) => [...value].length <= 2048, { message: "Too long: expected at most 2048 characters" }),
182
+ z.null(),
183
+ ])
184
+ .optional(),
172
185
  exit_code: z.union([z.int(), z.null()]).refine((value) => value !== undefined, { message: "Required" }),
173
186
  failure_kind: z
174
187
  .union([z.lazy(() => FailureKindSchema), z.null()])
@@ -196,7 +209,7 @@ export const HistoryLineSchema = z.union([
196
209
  project: z.string().refine((value) => value !== undefined, { message: "Required" }),
197
210
  prompt: z.string().refine((value) => value !== undefined, { message: "Required" }),
198
211
  schema_version: z
199
- .union([z.literal("1.0"), z.literal("1.1"), z.literal("1.2")])
212
+ .union([z.literal("1.0"), z.literal("1.1"), z.literal("1.2"), z.literal("1.3")])
200
213
  .refine((value) => value !== undefined, { message: "Required" }),
201
214
  session: z.string().refine((value) => value !== undefined, { message: "Required" }),
202
215
  session_id: z.union([z.string(), z.null()]).refine((value) => value !== undefined, { message: "Required" }),
@@ -224,6 +237,15 @@ export const HistoryLineSchema = z.union([
224
237
  .int()
225
238
  .gte(0)
226
239
  .refine((value) => value !== undefined, { message: "Required" }),
240
+ error: z
241
+ .union([
242
+ z
243
+ .string()
244
+ .min(1)
245
+ .refine((value) => [...value].length <= 2048, { message: "Too long: expected at most 2048 characters" }),
246
+ z.null(),
247
+ ])
248
+ .optional(),
227
249
  exit_code: z.union([z.int(), z.null()]).refine((value) => value !== undefined, { message: "Required" }),
228
250
  failure_kind: z
229
251
  .union([z.lazy(() => FailureKindSchema), z.null()])
@@ -251,7 +273,7 @@ export const HistoryLineSchema = z.union([
251
273
  project: z.string().refine((value) => value !== undefined, { message: "Required" }),
252
274
  prompt: z.string().refine((value) => value !== undefined, { message: "Required" }),
253
275
  schema_version: z
254
- .union([z.literal("1.0"), z.literal("1.1"), z.literal("1.2")])
276
+ .union([z.literal("1.0"), z.literal("1.1"), z.literal("1.2"), z.literal("1.3")])
255
277
  .refine((value) => value !== undefined, { message: "Required" }),
256
278
  session: z.string().refine((value) => value !== undefined, { message: "Required" }),
257
279
  session_id: z.union([z.string(), z.null()]).refine((value) => value !== undefined, { message: "Required" }),
@@ -279,6 +301,15 @@ export const HistoryLineSchema = z.union([
279
301
  .int()
280
302
  .gte(0)
281
303
  .refine((value) => value !== undefined, { message: "Required" }),
304
+ error: z
305
+ .union([
306
+ z
307
+ .string()
308
+ .min(1)
309
+ .refine((value) => [...value].length <= 2048, { message: "Too long: expected at most 2048 characters" }),
310
+ z.null(),
311
+ ])
312
+ .optional(),
282
313
  exit_code: z.union([z.int(), z.null()]).refine((value) => value !== undefined, { message: "Required" }),
283
314
  failure_kind: z
284
315
  .union([z.lazy(() => FailureKindSchema), z.null()])
@@ -305,7 +336,9 @@ export const HistoryLineSchema = z.union([
305
336
  .refine((value) => value !== undefined, { message: "Required" }),
306
337
  project: z.string().refine((value) => value !== undefined, { message: "Required" }),
307
338
  prompt: z.string().refine((value) => value !== undefined, { message: "Required" }),
308
- schema_version: z.literal("1.2").refine((value) => value !== undefined, { message: "Required" }),
339
+ schema_version: z
340
+ .union([z.literal("1.2"), z.literal("1.3")])
341
+ .refine((value) => value !== undefined, { message: "Required" }),
309
342
  session: z.string().refine((value) => value !== undefined, { message: "Required" }),
310
343
  session_id: z.union([z.string(), z.null()]).refine((value) => value !== undefined, { message: "Required" }),
311
344
  started_at: z.never().optional(),
@@ -320,7 +353,18 @@ export const HistoryLineSchema = z.union([
320
353
  variant: z.union([z.string(), z.null()]).optional(),
321
354
  }),
322
355
  z.looseObject({
323
- duration_ms: z.union([z.int().gte(0), z.null()]).refine((value) => value !== undefined, { message: "Required" }),
356
+ duration_ms: z
357
+ .union([z.int().gte(0), z.null()])
358
+ .refine((value) => value !== undefined, { message: "Required" }),
359
+ error: z
360
+ .union([
361
+ z
362
+ .string()
363
+ .min(1)
364
+ .refine((value) => [...value].length <= 2048, { message: "Too long: expected at most 2048 characters" }),
365
+ z.null(),
366
+ ])
367
+ .optional(),
324
368
  exit_code: z.union([z.int(), z.null()]).refine((value) => value !== undefined, { message: "Required" }),
325
369
  failure_kind: z
326
370
  .union([z.lazy(() => FailureKindSchema), z.null()])
@@ -345,12 +389,14 @@ export const HistoryLineSchema = z.union([
345
389
  project: z.string().refine((value) => value !== undefined, { message: "Required" }),
346
390
  prompt: z.string().refine((value) => value !== undefined, { message: "Required" }),
347
391
  schema_version: z
348
- .union([z.literal("1.0"), z.literal("1.1"), z.literal("1.2")])
392
+ .union([z.literal("1.0"), z.literal("1.1"), z.literal("1.2"), z.literal("1.3")])
349
393
  .refine((value) => value !== undefined, { message: "Required" }),
350
394
  session: z.string().refine((value) => value !== undefined, { message: "Required" }),
351
395
  session_id: z.union([z.string(), z.null()]).refine((value) => value !== undefined, { message: "Required" }),
352
396
  started_at: z.never().optional(),
353
- status: z.lazy(() => StatusSchema).refine((value) => value !== undefined, { message: "Required" }),
397
+ status: z
398
+ .union([z.literal("nonzero"), z.literal("timeout"), z.literal("spawn-error"), z.literal("skipped")])
399
+ .refine((value) => value !== undefined, { message: "Required" }),
354
400
  text: z.union([z.string(), z.null()]).refine((value) => value !== undefined, { message: "Required" }),
355
401
  text_source: z.union([z.string(), z.null()]).refine((value) => value !== undefined, { message: "Required" }),
356
402
  time_to_first_token_ms: z.never().optional(),
@@ -360,7 +406,134 @@ export const HistoryLineSchema = z.union([
360
406
  usage: z.lazy(() => UsageSchema).refine((value) => value !== undefined, { message: "Required" }),
361
407
  variant: z.union([z.string(), z.null()]).optional(),
362
408
  }),
363
- ]),
409
+ z.looseObject({
410
+ duration_ms: z
411
+ .int()
412
+ .gte(0)
413
+ .refine((value) => value !== undefined, { message: "Required" }),
414
+ error: z
415
+ .union([
416
+ z
417
+ .string()
418
+ .min(1)
419
+ .refine((value) => [...value].length <= 2048, { message: "Too long: expected at most 2048 characters" }),
420
+ z.null(),
421
+ ])
422
+ .optional(),
423
+ exit_code: z.union([z.int(), z.null()]).refine((value) => value !== undefined, { message: "Required" }),
424
+ failure_kind: z
425
+ .union([z.lazy(() => FailureKindSchema), z.null()])
426
+ .refine((value) => value !== undefined, { message: "Required" }),
427
+ finished_at: z.null().refine((value) => value !== undefined, { message: "Required" }),
428
+ harness: z.string().refine((value) => value !== undefined, { message: "Required" }),
429
+ harness_id: z.union([z.string(), z.null()]).optional(),
430
+ history_id: z
431
+ .string()
432
+ .min(36)
433
+ .regex(new RegExp("^[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}$", "u"))
434
+ .refine((value) => [...value].length <= 36, { message: "Too long: expected at most 36 characters" })
435
+ .refine((value) => value !== undefined, { message: "Required" }),
436
+ labels: z.lazy(() => HistoryLabelsSchema).optional(),
437
+ model: z.union([z.string(), z.null()]).refine((value) => value !== undefined, { message: "Required" }),
438
+ model_ms: z.never().optional(),
439
+ name: z.string().refine((value) => value !== undefined, { message: "Required" }),
440
+ observed_tool_ms: z.never().optional(),
441
+ permission_mode: z
442
+ .lazy(() => PermissionModeSchema)
443
+ .refine((value) => value !== undefined, { message: "Required" }),
444
+ project: z.string().refine((value) => value !== undefined, { message: "Required" }),
445
+ prompt: z.string().refine((value) => value !== undefined, { message: "Required" }),
446
+ schema_version: z.literal("1.3").refine((value) => value !== undefined, { message: "Required" }),
447
+ session: z.string().refine((value) => value !== undefined, { message: "Required" }),
448
+ session_id: z.union([z.string(), z.null()]).refine((value) => value !== undefined, { message: "Required" }),
449
+ started_at: z
450
+ .string()
451
+ .min(1)
452
+ .refine((value) => value !== undefined, { message: "Required" }),
453
+ status: z
454
+ .union([z.literal("nonzero"), z.literal("timeout"), z.literal("spawn-error"), z.literal("skipped")])
455
+ .refine((value) => value !== undefined, { message: "Required" }),
456
+ text: z.union([z.string(), z.null()]).refine((value) => value !== undefined, { message: "Required" }),
457
+ text_source: z.union([z.string(), z.null()]).refine((value) => value !== undefined, { message: "Required" }),
458
+ time_to_first_token_ms: z.union([z.int().gte(0), z.null()]).optional(),
459
+ timestamp: z.string().refine((value) => value !== undefined, { message: "Required" }),
460
+ tool_ms: z.never().optional(),
461
+ type: z.literal("run").refine((value) => value !== undefined, { message: "Required" }),
462
+ usage: z.lazy(() => UsageSchema).refine((value) => value !== undefined, { message: "Required" }),
463
+ variant: z.union([z.string(), z.null()]).optional(),
464
+ }),
465
+ z.looseObject({
466
+ duration_ms: z
467
+ .union([z.int().gte(0), z.null()])
468
+ .refine((value) => value !== undefined, { message: "Required" }),
469
+ error: z
470
+ .union([
471
+ z
472
+ .string()
473
+ .min(1)
474
+ .refine((value) => [...value].length <= 2048, { message: "Too long: expected at most 2048 characters" }),
475
+ z.null(),
476
+ ])
477
+ .optional(),
478
+ exit_code: z.union([z.int(), z.null()]).refine((value) => value !== undefined, { message: "Required" }),
479
+ failure_kind: z
480
+ .union([z.lazy(() => FailureKindSchema), z.null()])
481
+ .refine((value) => value !== undefined, { message: "Required" }),
482
+ finished_at: z.null().refine((value) => value !== undefined, { message: "Required" }),
483
+ harness: z.string().refine((value) => value !== undefined, { message: "Required" }),
484
+ harness_id: z.union([z.string(), z.null()]).optional(),
485
+ history_id: z
486
+ .string()
487
+ .min(36)
488
+ .regex(new RegExp("^[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}$", "u"))
489
+ .refine((value) => [...value].length <= 36, { message: "Too long: expected at most 36 characters" })
490
+ .refine((value) => value !== undefined, { message: "Required" }),
491
+ labels: z.lazy(() => HistoryLabelsSchema).optional(),
492
+ model: z.union([z.string(), z.null()]).refine((value) => value !== undefined, { message: "Required" }),
493
+ model_ms: z.never().optional(),
494
+ name: z.string().refine((value) => value !== undefined, { message: "Required" }),
495
+ observed_tool_ms: z.never().optional(),
496
+ permission_mode: z
497
+ .lazy(() => PermissionModeSchema)
498
+ .refine((value) => value !== undefined, { message: "Required" }),
499
+ project: z.string().refine((value) => value !== undefined, { message: "Required" }),
500
+ prompt: z.string().refine((value) => value !== undefined, { message: "Required" }),
501
+ schema_version: z
502
+ .union([z.literal("1.0"), z.literal("1.1"), z.literal("1.2"), z.literal("1.3")])
503
+ .refine((value) => value !== undefined, { message: "Required" }),
504
+ session: z.string().refine((value) => value !== undefined, { message: "Required" }),
505
+ session_id: z.union([z.string(), z.null()]).refine((value) => value !== undefined, { message: "Required" }),
506
+ started_at: z.never().optional(),
507
+ status: z
508
+ .union([z.literal("ok"), z.literal("planned")])
509
+ .refine((value) => value !== undefined, { message: "Required" }),
510
+ text: z.union([z.string(), z.null()]).refine((value) => value !== undefined, { message: "Required" }),
511
+ text_source: z.union([z.string(), z.null()]).refine((value) => value !== undefined, { message: "Required" }),
512
+ time_to_first_token_ms: z.never().optional(),
513
+ timestamp: z.string().refine((value) => value !== undefined, { message: "Required" }),
514
+ tool_ms: z.never().optional(),
515
+ type: z.literal("run").refine((value) => value !== undefined, { message: "Required" }),
516
+ usage: z.lazy(() => UsageSchema).refine((value) => value !== undefined, { message: "Required" }),
517
+ variant: z.union([z.string(), z.null()]).optional(),
518
+ }),
519
+ ]), z.union([
520
+ z.looseObject({
521
+ error: z.null().optional(),
522
+ }),
523
+ z.intersection(z.looseObject({
524
+ error: z.string().refine((value) => value !== undefined, { message: "Required" }),
525
+ schema_version: z.literal("1.3").optional(),
526
+ }), z.union([
527
+ z.looseObject({
528
+ status: z
529
+ .union([z.literal("nonzero"), z.literal("timeout"), z.literal("spawn-error"), z.literal("skipped")])
530
+ .optional(),
531
+ }),
532
+ z.looseObject({
533
+ failure_kind: z.literal("tool_deferred").refine((value) => value !== undefined, { message: "Required" }),
534
+ }),
535
+ ])),
536
+ ])),
364
537
  ]);
365
538
  export const HistoryListSchema = z.array(z.lazy(() => HistorySessionSummarySchema));
366
539
  export const HistoryListOptionsSchema = z.strictObject({
@@ -389,12 +562,21 @@ export const HistoryLookupBySessionSchema = z.strictObject({
389
562
  .min(1)
390
563
  .refine((value) => value !== undefined, { message: "Required" }),
391
564
  });
392
- export const HistoryRecordSchema = z.union([
565
+ export const HistoryRecordSchema = z.intersection(z.union([
393
566
  z.looseObject({
394
567
  duration_ms: z
395
568
  .int()
396
569
  .gte(0)
397
570
  .refine((value) => value !== undefined, { message: "Required" }),
571
+ error: z
572
+ .union([
573
+ z
574
+ .string()
575
+ .min(1)
576
+ .refine((value) => [...value].length <= 2048, { message: "Too long: expected at most 2048 characters" }),
577
+ z.null(),
578
+ ])
579
+ .optional(),
398
580
  events: z
399
581
  .union([
400
582
  z.array(z.union([
@@ -472,10 +654,14 @@ export const HistoryRecordSchema = z.union([
472
654
  .refine((value) => value !== undefined, { message: "Required" }),
473
655
  name: z.string().refine((value) => value !== undefined, { message: "Required" }),
474
656
  observed_tool_ms: z.never().optional(),
475
- permission_mode: z.lazy(() => PermissionModeSchema).refine((value) => value !== undefined, { message: "Required" }),
657
+ permission_mode: z
658
+ .lazy(() => PermissionModeSchema)
659
+ .refine((value) => value !== undefined, { message: "Required" }),
476
660
  project: z.string().refine((value) => value !== undefined, { message: "Required" }),
477
661
  prompt: z.string().refine((value) => value !== undefined, { message: "Required" }),
478
- schema_version: z.literal("1.2").refine((value) => value !== undefined, { message: "Required" }),
662
+ schema_version: z
663
+ .union([z.literal("1.2"), z.literal("1.3")])
664
+ .refine((value) => value !== undefined, { message: "Required" }),
479
665
  session: z.string().refine((value) => value !== undefined, { message: "Required" }),
480
666
  session_id: z.union([z.string(), z.null()]).refine((value) => value !== undefined, { message: "Required" }),
481
667
  started_at: z
@@ -499,6 +685,15 @@ export const HistoryRecordSchema = z.union([
499
685
  .int()
500
686
  .gte(0)
501
687
  .refine((value) => value !== undefined, { message: "Required" }),
688
+ error: z
689
+ .union([
690
+ z
691
+ .string()
692
+ .min(1)
693
+ .refine((value) => [...value].length <= 2048, { message: "Too long: expected at most 2048 characters" }),
694
+ z.null(),
695
+ ])
696
+ .optional(),
502
697
  events: z
503
698
  .union([
504
699
  z.array(z.intersection(z.union([
@@ -578,10 +773,14 @@ export const HistoryRecordSchema = z.union([
578
773
  .refine((value) => value !== undefined, { message: "Required" }),
579
774
  name: z.string().refine((value) => value !== undefined, { message: "Required" }),
580
775
  observed_tool_ms: z.never().optional(),
581
- permission_mode: z.lazy(() => PermissionModeSchema).refine((value) => value !== undefined, { message: "Required" }),
776
+ permission_mode: z
777
+ .lazy(() => PermissionModeSchema)
778
+ .refine((value) => value !== undefined, { message: "Required" }),
582
779
  project: z.string().refine((value) => value !== undefined, { message: "Required" }),
583
780
  prompt: z.string().refine((value) => value !== undefined, { message: "Required" }),
584
- schema_version: z.literal("1.1").refine((value) => value !== undefined, { message: "Required" }),
781
+ schema_version: z
782
+ .union([z.literal("1.0"), z.literal("1.1")])
783
+ .refine((value) => value !== undefined, { message: "Required" }),
585
784
  session: z.string().refine((value) => value !== undefined, { message: "Required" }),
586
785
  session_id: z.union([z.string(), z.null()]).refine((value) => value !== undefined, { message: "Required" }),
587
786
  started_at: z
@@ -600,76 +799,101 @@ export const HistoryRecordSchema = z.union([
600
799
  usage: z.lazy(() => UsageSchema).refine((value) => value !== undefined, { message: "Required" }),
601
800
  variant: z.union([z.string(), z.null()]).optional(),
602
801
  }),
802
+ z.looseObject({
803
+ duration_ms: z.union([z.int().gte(0), z.null()]).refine((value) => value !== undefined, { message: "Required" }),
804
+ error: z
805
+ .union([
806
+ z
807
+ .string()
808
+ .min(1)
809
+ .refine((value) => [...value].length <= 2048, { message: "Too long: expected at most 2048 characters" }),
810
+ z.null(),
811
+ ])
812
+ .optional(),
813
+ events: z
814
+ .union([
815
+ z.array(z.looseObject({
816
+ duration_ms: z.null().optional(),
817
+ finished_at: z.null().optional(),
818
+ index: z
819
+ .int()
820
+ .gte(0)
821
+ .refine((value) => value !== undefined, { message: "Required" }),
822
+ input: z.unknown().refine((value) => value !== undefined, { message: "Required" }),
823
+ kind: z.string().refine((value) => value !== undefined, { message: "Required" }),
824
+ name: z.union([z.string(), z.null()]).refine((value) => value !== undefined, { message: "Required" }),
825
+ output: z.union([z.string(), z.null()]).refine((value) => value !== undefined, { message: "Required" }),
826
+ started_at: z.null().optional(),
827
+ status: z.null().optional(),
828
+ tool_call_id: z.union([z.string(), z.null()]).optional(),
829
+ })),
830
+ z.null(),
831
+ ])
832
+ .refine((value) => value !== undefined, { message: "Required" }),
833
+ exit_code: z.union([z.int(), z.null()]).refine((value) => value !== undefined, { message: "Required" }),
834
+ failure_kind: z
835
+ .union([z.lazy(() => FailureKindSchema), z.null()])
836
+ .refine((value) => value !== undefined, { message: "Required" }),
837
+ finished_at: z.null().refine((value) => value !== undefined, { message: "Required" }),
838
+ harness: z.string().refine((value) => value !== undefined, { message: "Required" }),
839
+ harness_id: z.string().refine((value) => value !== undefined, { message: "Required" }),
840
+ history_id: z
841
+ .string()
842
+ .min(36)
843
+ .regex(new RegExp("^[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}$", "u"))
844
+ .refine((value) => [...value].length <= 36, { message: "Too long: expected at most 36 characters" })
845
+ .refine((value) => value !== undefined, { message: "Required" }),
846
+ labels: z.lazy(() => HistoryLabelsSchema).optional(),
847
+ model: z.union([z.string(), z.null()]).refine((value) => value !== undefined, { message: "Required" }),
848
+ model_ms: z.never().optional(),
849
+ name: z.string().refine((value) => value !== undefined, { message: "Required" }),
850
+ observed_tool_ms: z.never().optional(),
851
+ permission_mode: z
852
+ .lazy(() => PermissionModeSchema)
853
+ .refine((value) => value !== undefined, { message: "Required" }),
854
+ project: z.string().refine((value) => value !== undefined, { message: "Required" }),
855
+ prompt: z.string().refine((value) => value !== undefined, { message: "Required" }),
856
+ schema_version: z
857
+ .union([z.literal("1.2"), z.literal("1.3")])
858
+ .refine((value) => value !== undefined, { message: "Required" }),
859
+ session: z.string().refine((value) => value !== undefined, { message: "Required" }),
860
+ session_id: z.union([z.string(), z.null()]).refine((value) => value !== undefined, { message: "Required" }),
861
+ started_at: z.never().optional(),
862
+ status: z
863
+ .union([z.literal("ok"), z.literal("planned")])
864
+ .refine((value) => value !== undefined, { message: "Required" }),
865
+ text: z.union([z.string(), z.null()]).refine((value) => value !== undefined, { message: "Required" }),
866
+ text_source: z.union([z.string(), z.null()]).refine((value) => value !== undefined, { message: "Required" }),
867
+ time_to_first_token_ms: z.never().optional(),
868
+ timestamp: z.string().refine((value) => value !== undefined, { message: "Required" }),
869
+ tool_ms: z.never().optional(),
870
+ usage: z.lazy(() => UsageSchema).refine((value) => value !== undefined, { message: "Required" }),
871
+ variant: z.union([z.string(), z.null()]).optional(),
872
+ }),
603
873
  z.looseObject({
604
874
  duration_ms: z
605
875
  .int()
606
876
  .gte(0)
607
877
  .refine((value) => value !== undefined, { message: "Required" }),
608
- events: z
878
+ error: z
609
879
  .union([
610
- z.array(z.intersection(z.union([
611
- z.intersection(z.lazy(() => ActionEventSchema), z.looseObject({
612
- duration_ms: z
613
- .int()
614
- .gte(0)
615
- .refine((value) => value !== undefined, { message: "Required" }),
616
- finished_at: z.string().refine((value) => value !== undefined, { message: "Required" }),
617
- kind: z.literal("tool_call").refine((value) => value !== undefined, { message: "Required" }),
618
- started_at: z.string().refine((value) => value !== undefined, { message: "Required" }),
619
- status: z.literal("completed").refine((value) => value !== undefined, { message: "Required" }),
620
- tool_call_id: z
621
- .string()
622
- .min(1)
623
- .refine((value) => value !== undefined, { message: "Required" }),
624
- })),
625
- z.intersection(z.lazy(() => ActionEventSchema), z.looseObject({
626
- duration_ms: z
627
- .int()
628
- .gte(0)
629
- .refine((value) => value !== undefined, { message: "Required" }),
630
- finished_at: z.string().refine((value) => value !== undefined, { message: "Required" }),
631
- kind: z.literal("tool_call").refine((value) => value !== undefined, { message: "Required" }),
632
- started_at: z.string().refine((value) => value !== undefined, { message: "Required" }),
633
- status: z.literal("failed").refine((value) => value !== undefined, { message: "Required" }),
634
- tool_call_id: z
635
- .string()
636
- .min(1)
637
- .refine((value) => value !== undefined, { message: "Required" }),
638
- })),
639
- z.intersection(z.lazy(() => ActionEventSchema), z.looseObject({
640
- kind: z.literal("tool_call").refine((value) => value !== undefined, { message: "Required" }),
641
- started_at: z.string().refine((value) => value !== undefined, { message: "Required" }),
642
- status: z.literal("timeout").refine((value) => value !== undefined, { message: "Required" }),
643
- tool_call_id: z
644
- .string()
645
- .min(1)
646
- .refine((value) => value !== undefined, { message: "Required" }),
647
- })),
648
- z.intersection(z.lazy(() => ActionEventSchema), z.looseObject({
649
- kind: z.literal("tool_call").refine((value) => value !== undefined, { message: "Required" }),
650
- started_at: z.string().refine((value) => value !== undefined, { message: "Required" }),
651
- status: z.literal("interrupted").refine((value) => value !== undefined, { message: "Required" }),
652
- tool_call_id: z
653
- .string()
654
- .min(1)
655
- .refine((value) => value !== undefined, { message: "Required" }),
656
- })),
657
- z.intersection(z.lazy(() => ActionEventSchema), z.looseObject({
658
- kind: z.literal("tool_result").optional(),
659
- })),
660
- ]), z.looseObject({
661
- timing_source: z.never().optional(),
662
- }))),
880
+ z
881
+ .string()
882
+ .min(1)
883
+ .refine((value) => [...value].length <= 2048, { message: "Too long: expected at most 2048 characters" }),
663
884
  z.null(),
664
885
  ])
886
+ .optional(),
887
+ events: z
888
+ .union([z.array(z.lazy(() => ActionEventSchema)), z.null()])
665
889
  .refine((value) => value !== undefined, { message: "Required" }),
666
890
  exit_code: z.union([z.int(), z.null()]).refine((value) => value !== undefined, { message: "Required" }),
667
891
  failure_kind: z
668
892
  .union([z.lazy(() => FailureKindSchema), z.null()])
669
893
  .refine((value) => value !== undefined, { message: "Required" }),
670
- finished_at: z.union([z.string(), z.null()]).refine((value) => value !== undefined, { message: "Required" }),
894
+ finished_at: z.null().refine((value) => value !== undefined, { message: "Required" }),
671
895
  harness: z.string().refine((value) => value !== undefined, { message: "Required" }),
672
- harness_id: z.string().optional(),
896
+ harness_id: z.string().refine((value) => value !== undefined, { message: "Required" }),
673
897
  history_id: z
674
898
  .string()
675
899
  .min(36)
@@ -678,55 +902,45 @@ export const HistoryRecordSchema = z.union([
678
902
  .refine((value) => value !== undefined, { message: "Required" }),
679
903
  labels: z.lazy(() => HistoryLabelsSchema).optional(),
680
904
  model: z.union([z.string(), z.null()]).refine((value) => value !== undefined, { message: "Required" }),
681
- model_ms: z
905
+ model_ms: z.never().optional(),
906
+ name: z.string().refine((value) => value !== undefined, { message: "Required" }),
907
+ observed_tool_ms: z
682
908
  .int()
683
909
  .gte(0)
684
910
  .refine((value) => value !== undefined, { message: "Required" }),
685
- name: z.string().refine((value) => value !== undefined, { message: "Required" }),
686
- observed_tool_ms: z.never().optional(),
687
- permission_mode: z.lazy(() => PermissionModeSchema).refine((value) => value !== undefined, { message: "Required" }),
911
+ permission_mode: z
912
+ .lazy(() => PermissionModeSchema)
913
+ .refine((value) => value !== undefined, { message: "Required" }),
688
914
  project: z.string().refine((value) => value !== undefined, { message: "Required" }),
689
915
  prompt: z.string().refine((value) => value !== undefined, { message: "Required" }),
690
- schema_version: z.literal("1.0").refine((value) => value !== undefined, { message: "Required" }),
916
+ schema_version: z
917
+ .union([z.literal("1.2"), z.literal("1.3")])
918
+ .refine((value) => value !== undefined, { message: "Required" }),
691
919
  session: z.string().refine((value) => value !== undefined, { message: "Required" }),
692
920
  session_id: z.union([z.string(), z.null()]).refine((value) => value !== undefined, { message: "Required" }),
693
- started_at: z
694
- .string()
695
- .min(1)
696
- .refine((value) => value !== undefined, { message: "Required" }),
921
+ started_at: z.never().optional(),
697
922
  status: z.lazy(() => StatusSchema).refine((value) => value !== undefined, { message: "Required" }),
698
923
  text: z.union([z.string(), z.null()]).refine((value) => value !== undefined, { message: "Required" }),
699
924
  text_source: z.union([z.string(), z.null()]).refine((value) => value !== undefined, { message: "Required" }),
700
- time_to_first_token_ms: z.union([z.int().gte(0), z.null()]).optional(),
925
+ time_to_first_token_ms: z.never().optional(),
701
926
  timestamp: z.string().refine((value) => value !== undefined, { message: "Required" }),
702
- tool_ms: z
703
- .int()
704
- .gte(0)
705
- .refine((value) => value !== undefined, { message: "Required" }),
927
+ tool_ms: z.never().optional(),
706
928
  usage: z.lazy(() => UsageSchema).refine((value) => value !== undefined, { message: "Required" }),
707
929
  variant: z.union([z.string(), z.null()]).optional(),
708
930
  }),
709
931
  z.looseObject({
710
932
  duration_ms: z.union([z.int().gte(0), z.null()]).refine((value) => value !== undefined, { message: "Required" }),
711
- events: z
933
+ error: z
712
934
  .union([
713
- z.array(z.looseObject({
714
- duration_ms: z.null().optional(),
715
- finished_at: z.null().optional(),
716
- index: z
717
- .int()
718
- .gte(0)
719
- .refine((value) => value !== undefined, { message: "Required" }),
720
- input: z.unknown().refine((value) => value !== undefined, { message: "Required" }),
721
- kind: z.string().refine((value) => value !== undefined, { message: "Required" }),
722
- name: z.union([z.string(), z.null()]).refine((value) => value !== undefined, { message: "Required" }),
723
- output: z.union([z.string(), z.null()]).refine((value) => value !== undefined, { message: "Required" }),
724
- started_at: z.null().optional(),
725
- status: z.null().optional(),
726
- tool_call_id: z.union([z.string(), z.null()]).optional(),
727
- })),
935
+ z
936
+ .string()
937
+ .min(1)
938
+ .refine((value) => [...value].length <= 2048, { message: "Too long: expected at most 2048 characters" }),
728
939
  z.null(),
729
940
  ])
941
+ .optional(),
942
+ events: z
943
+ .union([z.array(z.lazy(() => ActionEventSchema)), z.null()])
730
944
  .refine((value) => value !== undefined, { message: "Required" }),
731
945
  exit_code: z.union([z.int(), z.null()]).refine((value) => value !== undefined, { message: "Required" }),
732
946
  failure_kind: z
@@ -746,14 +960,20 @@ export const HistoryRecordSchema = z.union([
746
960
  model_ms: z.never().optional(),
747
961
  name: z.string().refine((value) => value !== undefined, { message: "Required" }),
748
962
  observed_tool_ms: z.never().optional(),
749
- permission_mode: z.lazy(() => PermissionModeSchema).refine((value) => value !== undefined, { message: "Required" }),
963
+ permission_mode: z
964
+ .lazy(() => PermissionModeSchema)
965
+ .refine((value) => value !== undefined, { message: "Required" }),
750
966
  project: z.string().refine((value) => value !== undefined, { message: "Required" }),
751
967
  prompt: z.string().refine((value) => value !== undefined, { message: "Required" }),
752
- schema_version: z.literal("1.2").refine((value) => value !== undefined, { message: "Required" }),
968
+ schema_version: z
969
+ .union([z.literal("1.2"), z.literal("1.3")])
970
+ .refine((value) => value !== undefined, { message: "Required" }),
753
971
  session: z.string().refine((value) => value !== undefined, { message: "Required" }),
754
972
  session_id: z.union([z.string(), z.null()]).refine((value) => value !== undefined, { message: "Required" }),
755
973
  started_at: z.never().optional(),
756
- status: z.lazy(() => StatusSchema).refine((value) => value !== undefined, { message: "Required" }),
974
+ status: z
975
+ .union([z.literal("nonzero"), z.literal("timeout"), z.literal("spawn-error"), z.literal("skipped")])
976
+ .refine((value) => value !== undefined, { message: "Required" }),
757
977
  text: z.union([z.string(), z.null()]).refine((value) => value !== undefined, { message: "Required" }),
758
978
  text_source: z.union([z.string(), z.null()]).refine((value) => value !== undefined, { message: "Required" }),
759
979
  time_to_first_token_ms: z.never().optional(),
@@ -767,6 +987,15 @@ export const HistoryRecordSchema = z.union([
767
987
  .int()
768
988
  .gte(0)
769
989
  .refine((value) => value !== undefined, { message: "Required" }),
990
+ error: z
991
+ .union([
992
+ z
993
+ .string()
994
+ .min(1)
995
+ .refine((value) => [...value].length <= 2048, { message: "Too long: expected at most 2048 characters" }),
996
+ z.null(),
997
+ ])
998
+ .optional(),
770
999
  events: z
771
1000
  .union([z.array(z.lazy(() => ActionEventSchema)), z.null()])
772
1001
  .refine((value) => value !== undefined, { message: "Required" }),
@@ -787,21 +1016,25 @@ export const HistoryRecordSchema = z.union([
787
1016
  model: z.union([z.string(), z.null()]).refine((value) => value !== undefined, { message: "Required" }),
788
1017
  model_ms: z.never().optional(),
789
1018
  name: z.string().refine((value) => value !== undefined, { message: "Required" }),
790
- observed_tool_ms: z
791
- .int()
792
- .gte(0)
1019
+ observed_tool_ms: z.never().optional(),
1020
+ permission_mode: z
1021
+ .lazy(() => PermissionModeSchema)
793
1022
  .refine((value) => value !== undefined, { message: "Required" }),
794
- permission_mode: z.lazy(() => PermissionModeSchema).refine((value) => value !== undefined, { message: "Required" }),
795
1023
  project: z.string().refine((value) => value !== undefined, { message: "Required" }),
796
1024
  prompt: z.string().refine((value) => value !== undefined, { message: "Required" }),
797
- schema_version: z.literal("1.2").refine((value) => value !== undefined, { message: "Required" }),
1025
+ schema_version: z.literal("1.3").refine((value) => value !== undefined, { message: "Required" }),
798
1026
  session: z.string().refine((value) => value !== undefined, { message: "Required" }),
799
1027
  session_id: z.union([z.string(), z.null()]).refine((value) => value !== undefined, { message: "Required" }),
800
- started_at: z.never().optional(),
801
- status: z.lazy(() => StatusSchema).refine((value) => value !== undefined, { message: "Required" }),
1028
+ started_at: z
1029
+ .string()
1030
+ .min(1)
1031
+ .refine((value) => value !== undefined, { message: "Required" }),
1032
+ status: z
1033
+ .union([z.literal("nonzero"), z.literal("timeout"), z.literal("spawn-error"), z.literal("skipped")])
1034
+ .refine((value) => value !== undefined, { message: "Required" }),
802
1035
  text: z.union([z.string(), z.null()]).refine((value) => value !== undefined, { message: "Required" }),
803
1036
  text_source: z.union([z.string(), z.null()]).refine((value) => value !== undefined, { message: "Required" }),
804
- time_to_first_token_ms: z.never().optional(),
1037
+ time_to_first_token_ms: z.union([z.int().gte(0), z.null()]).optional(),
805
1038
  timestamp: z.string().refine((value) => value !== undefined, { message: "Required" }),
806
1039
  tool_ms: z.never().optional(),
807
1040
  usage: z.lazy(() => UsageSchema).refine((value) => value !== undefined, { message: "Required" }),
@@ -809,23 +1042,18 @@ export const HistoryRecordSchema = z.union([
809
1042
  }),
810
1043
  z.looseObject({
811
1044
  duration_ms: z.union([z.int().gte(0), z.null()]).refine((value) => value !== undefined, { message: "Required" }),
1045
+ error: z
1046
+ .union([
1047
+ z
1048
+ .string()
1049
+ .min(1)
1050
+ .refine((value) => [...value].length <= 2048, { message: "Too long: expected at most 2048 characters" }),
1051
+ z.null(),
1052
+ ])
1053
+ .optional(),
812
1054
  events: z
813
1055
  .union([
814
- z.array(z.intersection(z.looseObject({
815
- duration_ms: z.null().optional(),
816
- finished_at: z.null().optional(),
817
- index: z
818
- .int()
819
- .gte(0)
820
- .refine((value) => value !== undefined, { message: "Required" }),
821
- input: z.unknown().refine((value) => value !== undefined, { message: "Required" }),
822
- kind: z.string().refine((value) => value !== undefined, { message: "Required" }),
823
- name: z.union([z.string(), z.null()]).refine((value) => value !== undefined, { message: "Required" }),
824
- output: z.union([z.string(), z.null()]).refine((value) => value !== undefined, { message: "Required" }),
825
- started_at: z.null().optional(),
826
- status: z.null().optional(),
827
- tool_call_id: z.union([z.string(), z.null()]).optional(),
828
- }), z.looseObject({
1056
+ z.array(z.intersection(z.lazy(() => ActionEventSchema), z.looseObject({
829
1057
  timing_source: z.never().optional(),
830
1058
  }))),
831
1059
  z.null(),
@@ -849,14 +1077,20 @@ export const HistoryRecordSchema = z.union([
849
1077
  model_ms: z.never().optional(),
850
1078
  name: z.string().refine((value) => value !== undefined, { message: "Required" }),
851
1079
  observed_tool_ms: z.never().optional(),
852
- permission_mode: z.lazy(() => PermissionModeSchema).refine((value) => value !== undefined, { message: "Required" }),
1080
+ permission_mode: z
1081
+ .lazy(() => PermissionModeSchema)
1082
+ .refine((value) => value !== undefined, { message: "Required" }),
853
1083
  project: z.string().refine((value) => value !== undefined, { message: "Required" }),
854
1084
  prompt: z.string().refine((value) => value !== undefined, { message: "Required" }),
855
- schema_version: z.literal("1.1").refine((value) => value !== undefined, { message: "Required" }),
1085
+ schema_version: z
1086
+ .union([z.literal("1.0"), z.literal("1.1")])
1087
+ .refine((value) => value !== undefined, { message: "Required" }),
856
1088
  session: z.string().refine((value) => value !== undefined, { message: "Required" }),
857
1089
  session_id: z.union([z.string(), z.null()]).refine((value) => value !== undefined, { message: "Required" }),
858
1090
  started_at: z.never().optional(),
859
- status: z.lazy(() => StatusSchema).refine((value) => value !== undefined, { message: "Required" }),
1091
+ status: z
1092
+ .union([z.literal("nonzero"), z.literal("timeout"), z.literal("spawn-error"), z.literal("skipped")])
1093
+ .refine((value) => value !== undefined, { message: "Required" }),
860
1094
  text: z.union([z.string(), z.null()]).refine((value) => value !== undefined, { message: "Required" }),
861
1095
  text_source: z.union([z.string(), z.null()]).refine((value) => value !== undefined, { message: "Required" }),
862
1096
  time_to_first_token_ms: z.never().optional(),
@@ -867,6 +1101,15 @@ export const HistoryRecordSchema = z.union([
867
1101
  }),
868
1102
  z.looseObject({
869
1103
  duration_ms: z.union([z.int().gte(0), z.null()]).refine((value) => value !== undefined, { message: "Required" }),
1104
+ error: z
1105
+ .union([
1106
+ z
1107
+ .string()
1108
+ .min(1)
1109
+ .refine((value) => [...value].length <= 2048, { message: "Too long: expected at most 2048 characters" }),
1110
+ z.null(),
1111
+ ])
1112
+ .optional(),
870
1113
  events: z
871
1114
  .union([
872
1115
  z.array(z.intersection(z.looseObject({
@@ -907,14 +1150,20 @@ export const HistoryRecordSchema = z.union([
907
1150
  model_ms: z.never().optional(),
908
1151
  name: z.string().refine((value) => value !== undefined, { message: "Required" }),
909
1152
  observed_tool_ms: z.never().optional(),
910
- permission_mode: z.lazy(() => PermissionModeSchema).refine((value) => value !== undefined, { message: "Required" }),
1153
+ permission_mode: z
1154
+ .lazy(() => PermissionModeSchema)
1155
+ .refine((value) => value !== undefined, { message: "Required" }),
911
1156
  project: z.string().refine((value) => value !== undefined, { message: "Required" }),
912
1157
  prompt: z.string().refine((value) => value !== undefined, { message: "Required" }),
913
- schema_version: z.literal("1.0").refine((value) => value !== undefined, { message: "Required" }),
1158
+ schema_version: z
1159
+ .union([z.literal("1.0"), z.literal("1.1")])
1160
+ .refine((value) => value !== undefined, { message: "Required" }),
914
1161
  session: z.string().refine((value) => value !== undefined, { message: "Required" }),
915
1162
  session_id: z.union([z.string(), z.null()]).refine((value) => value !== undefined, { message: "Required" }),
916
1163
  started_at: z.never().optional(),
917
- status: z.lazy(() => StatusSchema).refine((value) => value !== undefined, { message: "Required" }),
1164
+ status: z
1165
+ .union([z.literal("ok"), z.literal("planned")])
1166
+ .refine((value) => value !== undefined, { message: "Required" }),
918
1167
  text: z.union([z.string(), z.null()]).refine((value) => value !== undefined, { message: "Required" }),
919
1168
  text_source: z.union([z.string(), z.null()]).refine((value) => value !== undefined, { message: "Required" }),
920
1169
  time_to_first_token_ms: z.never().optional(),
@@ -925,6 +1174,15 @@ export const HistoryRecordSchema = z.union([
925
1174
  }),
926
1175
  z.looseObject({
927
1176
  duration_ms: z.union([z.int().gte(0), z.null()]).refine((value) => value !== undefined, { message: "Required" }),
1177
+ error: z
1178
+ .union([
1179
+ z
1180
+ .string()
1181
+ .min(1)
1182
+ .refine((value) => [...value].length <= 2048, { message: "Too long: expected at most 2048 characters" }),
1183
+ z.null(),
1184
+ ])
1185
+ .optional(),
928
1186
  events: z
929
1187
  .union([
930
1188
  z.array(z.looseObject({
@@ -958,7 +1216,9 @@ export const HistoryRecordSchema = z.union([
958
1216
  model_ms: z.union([z.int().gte(0), z.null()]).optional(),
959
1217
  name: z.string().refine((value) => value !== undefined, { message: "Required" }),
960
1218
  observed_tool_ms: z.union([z.int().gte(0), z.null()]).optional(),
961
- permission_mode: z.lazy(() => PermissionModeSchema).refine((value) => value !== undefined, { message: "Required" }),
1219
+ permission_mode: z
1220
+ .lazy(() => PermissionModeSchema)
1221
+ .refine((value) => value !== undefined, { message: "Required" }),
962
1222
  project: z.string().refine((value) => value !== undefined, { message: "Required" }),
963
1223
  prompt: z.string().refine((value) => value !== undefined, { message: "Required" }),
964
1224
  schema_version: z
@@ -976,7 +1236,24 @@ export const HistoryRecordSchema = z.union([
976
1236
  usage: z.lazy(() => UsageSchema).refine((value) => value !== undefined, { message: "Required" }),
977
1237
  variant: z.union([z.string(), z.null()]).optional(),
978
1238
  }),
979
- ]);
1239
+ ]), z.union([
1240
+ z.looseObject({
1241
+ error: z.null().optional(),
1242
+ }),
1243
+ z.intersection(z.looseObject({
1244
+ error: z.string().refine((value) => value !== undefined, { message: "Required" }),
1245
+ schema_version: z.literal("1.3").optional(),
1246
+ }), z.union([
1247
+ z.looseObject({
1248
+ status: z
1249
+ .union([z.literal("nonzero"), z.literal("timeout"), z.literal("spawn-error"), z.literal("skipped")])
1250
+ .optional(),
1251
+ }),
1252
+ z.looseObject({
1253
+ failure_kind: z.literal("tool_deferred").refine((value) => value !== undefined, { message: "Required" }),
1254
+ }),
1255
+ ])),
1256
+ ]));
980
1257
  export const HistoryRecordsSchema = z.array(z.lazy(() => HistoryRecordSchema));
981
1258
  export const HistorySessionSummarySchema = z.looseObject({
982
1259
  harnesses: z.array(z.string()).refine((value) => value !== undefined, { message: "Required" }),