@oneharness/sdk 0.6.8 → 0.6.10

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.
@@ -1,5 +1,5 @@
1
1
  import { z } from "zod";
2
- import type { ActionEvent, BatchReport, FailureKind, FallThrough, FallbackReport, OutputFormat, RunReport, RunResult, SessionReport, Status, TimingSource, ToolCallStatus, Usage } from "./contracts.js";
2
+ import type { ActionEvent, BatchReport, ControlEvent, ControlReason, ControlReport, ControlVerb, ExecutionTelemetry, FailureKind, FallThrough, FallbackReport, OutputFormat, RunReport, RunResult, SessionReport, Status, TimingSource, ToolCallStatus, Usage, UtcInstant } from "./contracts.js";
3
3
  import type { DetectInfo, DetectReport } from "./detection.js";
4
4
  import type { HistoryRecord } from "./history.js";
5
5
  import type { HistoryLine } from "./history-line.js";
@@ -12,14 +12,23 @@ import type { HistoryWatchOptions } from "./history-watch-options.js";
12
12
  import type { HistoryLabels, PermissionMode, RunOptions } from "./options.js";
13
13
  import type { HarnessInfo, ListReport, ModeInfo, VariantInfo } from "./registry.js";
14
14
  import type { RunStreamEnvelope } from "./run-stream-envelope.js";
15
+ export type AbsolutePath = ControlReport["socket"];
15
16
  export type BatchStrategy = BatchReport["strategy"];
17
+ export type ControlShape = ControlReport["mechanism"];
16
18
  export type ModeHeadless = ModeInfo["headless"];
17
19
  export type SessionPhase = SessionReport["phase"];
20
+ export declare const AbsolutePathSchema: z.ZodType<AbsolutePath>;
18
21
  export declare const ActionEventSchema: z.ZodType<ActionEvent>;
19
22
  export declare const BatchReportSchema: z.ZodType<BatchReport>;
20
23
  export declare const BatchStrategySchema: z.ZodType<BatchStrategy>;
24
+ export declare const ControlEventSchema: z.ZodType<ControlEvent>;
25
+ export declare const ControlReasonSchema: z.ZodType<ControlReason>;
26
+ export declare const ControlReportSchema: z.ZodType<ControlReport>;
27
+ export declare const ControlShapeSchema: z.ZodType<ControlShape>;
28
+ export declare const ControlVerbSchema: z.ZodType<ControlVerb>;
21
29
  export declare const DetectInfoSchema: z.ZodType<DetectInfo>;
22
30
  export declare const DetectReportSchema: z.ZodType<DetectReport>;
31
+ export declare const ExecutionTelemetrySchema: z.ZodType<ExecutionTelemetry>;
23
32
  export declare const FailureKindSchema: z.ZodType<FailureKind>;
24
33
  export declare const FallThroughSchema: z.ZodType<FallThrough>;
25
34
  export declare const FallbackReportSchema: z.ZodType<FallbackReport>;
@@ -52,4 +61,5 @@ export declare const StatusSchema: z.ZodType<Status>;
52
61
  export declare const TimingSourceSchema: z.ZodType<TimingSource>;
53
62
  export declare const ToolCallStatusSchema: z.ZodType<ToolCallStatus>;
54
63
  export declare const UsageSchema: z.ZodType<Usage>;
64
+ export declare const UtcInstantSchema: z.ZodType<UtcInstant>;
55
65
  export declare const VariantInfoSchema: z.ZodType<VariantInfo>;
@@ -1,5 +1,6 @@
1
1
  /* Generated from oneharness Rust JSON Schemas. Do not edit. */
2
2
  import { z } from "zod";
3
+ export const AbsolutePathSchema = z.string();
3
4
  export const ActionEventSchema = z.looseObject({
4
5
  duration_ms: z.union([z.int().gte(0), z.null()]).refine((value) => value !== undefined, { message: "Required" }),
5
6
  finished_at: z.union([z.string(), z.null()]).refine((value) => value !== undefined, { message: "Required" }),
@@ -27,6 +28,37 @@ export const BatchReportSchema = z.looseObject({
27
28
  strategy: z.lazy(() => BatchStrategySchema).refine((value) => value !== undefined, { message: "Required" }),
28
29
  });
29
30
  export const BatchStrategySchema = z.union([z.literal("speed"), z.literal("min-tokens")]);
31
+ export const ControlEventSchema = z.union([
32
+ z.looseObject({
33
+ at: z.lazy(() => UtcInstantSchema).refine((value) => value !== undefined, { message: "Required" }),
34
+ outcome: z.literal("served").refine((value) => value !== undefined, { message: "Required" }),
35
+ verb: z.lazy(() => ControlVerbSchema).refine((value) => value !== undefined, { message: "Required" }),
36
+ }),
37
+ z.looseObject({
38
+ at: z.lazy(() => UtcInstantSchema).refine((value) => value !== undefined, { message: "Required" }),
39
+ outcome: z.literal("refused").refine((value) => value !== undefined, { message: "Required" }),
40
+ reason: z.lazy(() => ControlReasonSchema).refine((value) => value !== undefined, { message: "Required" }),
41
+ verb: z.lazy(() => ControlVerbSchema).refine((value) => value !== undefined, { message: "Required" }),
42
+ }),
43
+ ]);
44
+ export const ControlReasonSchema = z.union([
45
+ z.literal("unsupported"),
46
+ z.literal("no_active_turn"),
47
+ z.literal("not_running"),
48
+ ]);
49
+ export const ControlReportSchema = z.looseObject({
50
+ interrupts: z.array(z.lazy(() => ControlEventSchema)).refine((value) => value !== undefined, { message: "Required" }),
51
+ mechanism: z.lazy(() => ControlShapeSchema).refine((value) => value !== undefined, { message: "Required" }),
52
+ socket: z.lazy(() => AbsolutePathSchema).refine((value) => value !== undefined, { message: "Required" }),
53
+ });
54
+ export const ControlShapeSchema = z.union([
55
+ z.literal("claude-control-request"),
56
+ z.literal("codex-app-server"),
57
+ z.literal("opencode-http"),
58
+ z.literal("acp-cancel"),
59
+ z.literal("crush-http"),
60
+ ]);
61
+ export const ControlVerbSchema = z.literal("interrupt");
30
62
  export const DetectInfoSchema = z.looseObject({
31
63
  available: z.boolean().refine((value) => value !== undefined, { message: "Required" }),
32
64
  bin: z.string().refine((value) => value !== undefined, { message: "Required" }),
@@ -38,6 +70,43 @@ export const DetectReportSchema = z.looseObject({
38
70
  detected: z.array(z.lazy(() => DetectInfoSchema)).refine((value) => value !== undefined, { message: "Required" }),
39
71
  schema_version: z.string().refine((value) => value !== undefined, { message: "Required" }),
40
72
  });
73
+ export const ExecutionTelemetrySchema = z.union([
74
+ z.looseObject({
75
+ finished_at: z
76
+ .union([
77
+ z
78
+ .string()
79
+ .min(24)
80
+ .regex(new RegExp("^\\d{4}-(0[1-9]|1[0-2])-(0[1-9]|[12]\\d|3[01])T([01]\\d|2[0-3]):[0-5]\\d:([0-5]\\d|60)\\.\\d{3}Z$", "u"))
81
+ .refine((value) => [...value].length <= 24, { message: "Too long: expected at most 24 characters" }),
82
+ z.null(),
83
+ ])
84
+ .refine((value) => value !== undefined, { message: "Required" }),
85
+ model_ms: z.union([z.int().gte(0), z.null()]).refine((value) => value !== undefined, { message: "Required" }),
86
+ source: z.literal("provider_measured").refine((value) => value !== undefined, { message: "Required" }),
87
+ started_at: z
88
+ .string()
89
+ .min(24)
90
+ .regex(new RegExp("^\\d{4}-(0[1-9]|1[0-2])-(0[1-9]|[12]\\d|3[01])T([01]\\d|2[0-3]):[0-5]\\d:([0-5]\\d|60)\\.\\d{3}Z$", "u"))
91
+ .refine((value) => [...value].length <= 24, { message: "Too long: expected at most 24 characters" })
92
+ .refine((value) => value !== undefined, { message: "Required" }),
93
+ time_to_first_token_ms: z
94
+ .union([z.int().gte(0), z.null()])
95
+ .refine((value) => value !== undefined, { message: "Required" }),
96
+ tool_ms: z.union([z.int().gte(0), z.null()]).refine((value) => value !== undefined, { message: "Required" }),
97
+ }),
98
+ z.looseObject({
99
+ source: z.literal("partial_invocation").refine((value) => value !== undefined, { message: "Required" }),
100
+ started_at: z.string().refine((value) => value !== undefined, { message: "Required" }),
101
+ }),
102
+ z.looseObject({
103
+ source: z.literal("stdout_observed").refine((value) => value !== undefined, { message: "Required" }),
104
+ tool_ms: z
105
+ .int()
106
+ .gte(0)
107
+ .refine((value) => value !== undefined, { message: "Required" }),
108
+ }),
109
+ ]);
41
110
  export const FailureKindSchema = z.union([
42
111
  z.literal("auth"),
43
112
  z.literal("rate_limit"),
@@ -56,6 +125,9 @@ export const FallbackReportSchema = z.looseObject({
56
125
  ran: z.union([z.string(), z.null()]).refine((value) => value !== undefined, { message: "Required" }),
57
126
  });
58
127
  export const HarnessInfoSchema = z.looseObject({
128
+ control: z
129
+ .union([z.lazy(() => ControlShapeSchema), z.null()])
130
+ .refine((value) => value !== undefined, { message: "Required" }),
59
131
  default_bin: z.string().refine((value) => value !== undefined, { message: "Required" }),
60
132
  display: z.string().refine((value) => value !== undefined, { message: "Required" }),
61
133
  example_command: z.array(z.string()).refine((value) => value !== undefined, { message: "Required" }),
@@ -91,7 +163,7 @@ export const HistoryEventLineSchema = z.union([
91
163
  .refine((value) => [...value].length <= 36, { message: "Too long: expected at most 36 characters" })
92
164
  .refine((value) => value !== undefined, { message: "Required" }),
93
165
  schema_version: z
94
- .union([z.literal("1.2"), z.literal("1.3")])
166
+ .union([z.literal("1.2"), z.literal("1.3"), z.literal("1.4")])
95
167
  .refine((value) => value !== undefined, { message: "Required" }),
96
168
  variant: z.union([z.string(), z.null()]).optional(),
97
169
  }),
@@ -141,7 +213,7 @@ export const HistoryLineSchema = z.union([
141
213
  .refine((value) => [...value].length <= 36, { message: "Too long: expected at most 36 characters" })
142
214
  .refine((value) => value !== undefined, { message: "Required" }),
143
215
  schema_version: z
144
- .union([z.literal("1.2"), z.literal("1.3")])
216
+ .union([z.literal("1.2"), z.literal("1.3"), z.literal("1.4")])
145
217
  .refine((value) => value !== undefined, { message: "Required" }),
146
218
  type: z.literal("event").refine((value) => value !== undefined, { message: "Required" }),
147
219
  variant: z.union([z.string(), z.null()]).optional(),
@@ -167,7 +239,7 @@ export const HistoryLineSchema = z.union([
167
239
  variant: z.union([z.string(), z.null()]).optional(),
168
240
  }),
169
241
  ]),
170
- z.intersection(z.union([
242
+ z.intersection(z.intersection(z.union([
171
243
  z.looseObject({
172
244
  duration_ms: z
173
245
  .int()
@@ -178,7 +250,9 @@ export const HistoryLineSchema = z.union([
178
250
  z
179
251
  .string()
180
252
  .min(1)
181
- .refine((value) => [...value].length <= 2048, { message: "Too long: expected at most 2048 characters" }),
253
+ .refine((value) => [...value].length <= 2048, {
254
+ message: "Too long: expected at most 2048 characters",
255
+ }),
182
256
  z.null(),
183
257
  ])
184
258
  .optional(),
@@ -209,7 +283,7 @@ export const HistoryLineSchema = z.union([
209
283
  project: z.string().refine((value) => value !== undefined, { message: "Required" }),
210
284
  prompt: z.string().refine((value) => value !== undefined, { message: "Required" }),
211
285
  schema_version: z
212
- .union([z.literal("1.0"), z.literal("1.1"), z.literal("1.2"), z.literal("1.3")])
286
+ .union([z.literal("1.0"), z.literal("1.1"), z.literal("1.2"), z.literal("1.3"), z.literal("1.4")])
213
287
  .refine((value) => value !== undefined, { message: "Required" }),
214
288
  session: z.string().refine((value) => value !== undefined, { message: "Required" }),
215
289
  session_id: z.union([z.string(), z.null()]).refine((value) => value !== undefined, { message: "Required" }),
@@ -242,7 +316,9 @@ export const HistoryLineSchema = z.union([
242
316
  z
243
317
  .string()
244
318
  .min(1)
245
- .refine((value) => [...value].length <= 2048, { message: "Too long: expected at most 2048 characters" }),
319
+ .refine((value) => [...value].length <= 2048, {
320
+ message: "Too long: expected at most 2048 characters",
321
+ }),
246
322
  z.null(),
247
323
  ])
248
324
  .optional(),
@@ -273,7 +349,7 @@ export const HistoryLineSchema = z.union([
273
349
  project: z.string().refine((value) => value !== undefined, { message: "Required" }),
274
350
  prompt: z.string().refine((value) => value !== undefined, { message: "Required" }),
275
351
  schema_version: z
276
- .union([z.literal("1.0"), z.literal("1.1"), z.literal("1.2"), z.literal("1.3")])
352
+ .union([z.literal("1.0"), z.literal("1.1"), z.literal("1.2"), z.literal("1.3"), z.literal("1.4")])
277
353
  .refine((value) => value !== undefined, { message: "Required" }),
278
354
  session: z.string().refine((value) => value !== undefined, { message: "Required" }),
279
355
  session_id: z.union([z.string(), z.null()]).refine((value) => value !== undefined, { message: "Required" }),
@@ -282,7 +358,13 @@ export const HistoryLineSchema = z.union([
282
358
  .min(1)
283
359
  .refine((value) => value !== undefined, { message: "Required" }),
284
360
  status: z
285
- .union([z.literal("timeout"), z.literal("spawn-error"), z.literal("skipped"), z.literal("planned")])
361
+ .union([
362
+ z.literal("timeout"),
363
+ z.literal("cancelled"),
364
+ z.literal("spawn-error"),
365
+ z.literal("skipped"),
366
+ z.literal("planned"),
367
+ ])
286
368
  .refine((value) => value !== undefined, { message: "Required" }),
287
369
  text: z.union([z.string(), z.null()]).refine((value) => value !== undefined, { message: "Required" }),
288
370
  text_source: z.union([z.string(), z.null()]).refine((value) => value !== undefined, { message: "Required" }),
@@ -306,7 +388,9 @@ export const HistoryLineSchema = z.union([
306
388
  z
307
389
  .string()
308
390
  .min(1)
309
- .refine((value) => [...value].length <= 2048, { message: "Too long: expected at most 2048 characters" }),
391
+ .refine((value) => [...value].length <= 2048, {
392
+ message: "Too long: expected at most 2048 characters",
393
+ }),
310
394
  z.null(),
311
395
  ])
312
396
  .optional(),
@@ -337,7 +421,7 @@ export const HistoryLineSchema = z.union([
337
421
  project: z.string().refine((value) => value !== undefined, { message: "Required" }),
338
422
  prompt: z.string().refine((value) => value !== undefined, { message: "Required" }),
339
423
  schema_version: z
340
- .union([z.literal("1.2"), z.literal("1.3")])
424
+ .union([z.literal("1.2"), z.literal("1.3"), z.literal("1.4")])
341
425
  .refine((value) => value !== undefined, { message: "Required" }),
342
426
  session: z.string().refine((value) => value !== undefined, { message: "Required" }),
343
427
  session_id: z.union([z.string(), z.null()]).refine((value) => value !== undefined, { message: "Required" }),
@@ -361,7 +445,9 @@ export const HistoryLineSchema = z.union([
361
445
  z
362
446
  .string()
363
447
  .min(1)
364
- .refine((value) => [...value].length <= 2048, { message: "Too long: expected at most 2048 characters" }),
448
+ .refine((value) => [...value].length <= 2048, {
449
+ message: "Too long: expected at most 2048 characters",
450
+ }),
365
451
  z.null(),
366
452
  ])
367
453
  .optional(),
@@ -389,13 +475,19 @@ export const HistoryLineSchema = z.union([
389
475
  project: z.string().refine((value) => value !== undefined, { message: "Required" }),
390
476
  prompt: z.string().refine((value) => value !== undefined, { message: "Required" }),
391
477
  schema_version: z
392
- .union([z.literal("1.0"), z.literal("1.1"), z.literal("1.2"), z.literal("1.3")])
478
+ .union([z.literal("1.0"), z.literal("1.1"), z.literal("1.2"), z.literal("1.3"), z.literal("1.4")])
393
479
  .refine((value) => value !== undefined, { message: "Required" }),
394
480
  session: z.string().refine((value) => value !== undefined, { message: "Required" }),
395
481
  session_id: z.union([z.string(), z.null()]).refine((value) => value !== undefined, { message: "Required" }),
396
482
  started_at: z.never().optional(),
397
483
  status: z
398
- .union([z.literal("nonzero"), z.literal("timeout"), z.literal("spawn-error"), z.literal("skipped")])
484
+ .union([
485
+ z.literal("nonzero"),
486
+ z.literal("timeout"),
487
+ z.literal("cancelled"),
488
+ z.literal("spawn-error"),
489
+ z.literal("skipped"),
490
+ ])
399
491
  .refine((value) => value !== undefined, { message: "Required" }),
400
492
  text: z.union([z.string(), z.null()]).refine((value) => value !== undefined, { message: "Required" }),
401
493
  text_source: z.union([z.string(), z.null()]).refine((value) => value !== undefined, { message: "Required" }),
@@ -416,7 +508,9 @@ export const HistoryLineSchema = z.union([
416
508
  z
417
509
  .string()
418
510
  .min(1)
419
- .refine((value) => [...value].length <= 2048, { message: "Too long: expected at most 2048 characters" }),
511
+ .refine((value) => [...value].length <= 2048, {
512
+ message: "Too long: expected at most 2048 characters",
513
+ }),
420
514
  z.null(),
421
515
  ])
422
516
  .optional(),
@@ -443,7 +537,9 @@ export const HistoryLineSchema = z.union([
443
537
  .refine((value) => value !== undefined, { message: "Required" }),
444
538
  project: z.string().refine((value) => value !== undefined, { message: "Required" }),
445
539
  prompt: z.string().refine((value) => value !== undefined, { message: "Required" }),
446
- schema_version: z.literal("1.3").refine((value) => value !== undefined, { message: "Required" }),
540
+ schema_version: z
541
+ .union([z.literal("1.3"), z.literal("1.4")])
542
+ .refine((value) => value !== undefined, { message: "Required" }),
447
543
  session: z.string().refine((value) => value !== undefined, { message: "Required" }),
448
544
  session_id: z.union([z.string(), z.null()]).refine((value) => value !== undefined, { message: "Required" }),
449
545
  started_at: z
@@ -451,7 +547,13 @@ export const HistoryLineSchema = z.union([
451
547
  .min(1)
452
548
  .refine((value) => value !== undefined, { message: "Required" }),
453
549
  status: z
454
- .union([z.literal("nonzero"), z.literal("timeout"), z.literal("spawn-error"), z.literal("skipped")])
550
+ .union([
551
+ z.literal("nonzero"),
552
+ z.literal("timeout"),
553
+ z.literal("cancelled"),
554
+ z.literal("spawn-error"),
555
+ z.literal("skipped"),
556
+ ])
455
557
  .refine((value) => value !== undefined, { message: "Required" }),
456
558
  text: z.union([z.string(), z.null()]).refine((value) => value !== undefined, { message: "Required" }),
457
559
  text_source: z.union([z.string(), z.null()]).refine((value) => value !== undefined, { message: "Required" }),
@@ -471,7 +573,9 @@ export const HistoryLineSchema = z.union([
471
573
  z
472
574
  .string()
473
575
  .min(1)
474
- .refine((value) => [...value].length <= 2048, { message: "Too long: expected at most 2048 characters" }),
576
+ .refine((value) => [...value].length <= 2048, {
577
+ message: "Too long: expected at most 2048 characters",
578
+ }),
475
579
  z.null(),
476
580
  ])
477
581
  .optional(),
@@ -499,7 +603,7 @@ export const HistoryLineSchema = z.union([
499
603
  project: z.string().refine((value) => value !== undefined, { message: "Required" }),
500
604
  prompt: z.string().refine((value) => value !== undefined, { message: "Required" }),
501
605
  schema_version: z
502
- .union([z.literal("1.0"), z.literal("1.1"), z.literal("1.2"), z.literal("1.3")])
606
+ .union([z.literal("1.0"), z.literal("1.1"), z.literal("1.2"), z.literal("1.3"), z.literal("1.4")])
503
607
  .refine((value) => value !== undefined, { message: "Required" }),
504
608
  session: z.string().refine((value) => value !== undefined, { message: "Required" }),
505
609
  session_id: z.union([z.string(), z.null()]).refine((value) => value !== undefined, { message: "Required" }),
@@ -522,17 +626,39 @@ export const HistoryLineSchema = z.union([
522
626
  }),
523
627
  z.intersection(z.looseObject({
524
628
  error: z.string().refine((value) => value !== undefined, { message: "Required" }),
525
- schema_version: z.literal("1.3").optional(),
629
+ schema_version: z.union([z.literal("1.3"), z.literal("1.4")]).optional(),
526
630
  }), z.union([
527
631
  z.looseObject({
528
632
  status: z
529
- .union([z.literal("nonzero"), z.literal("timeout"), z.literal("spawn-error"), z.literal("skipped")])
633
+ .union([
634
+ z.literal("nonzero"),
635
+ z.literal("timeout"),
636
+ z.literal("cancelled"),
637
+ z.literal("spawn-error"),
638
+ z.literal("skipped"),
639
+ ])
530
640
  .optional(),
531
641
  }),
532
642
  z.looseObject({
533
643
  failure_kind: z.literal("tool_deferred").refine((value) => value !== undefined, { message: "Required" }),
534
644
  }),
535
645
  ])),
646
+ ])), z.union([
647
+ z.looseObject({
648
+ status: z
649
+ .union([
650
+ z.literal("ok"),
651
+ z.literal("nonzero"),
652
+ z.literal("timeout"),
653
+ z.literal("spawn-error"),
654
+ z.literal("skipped"),
655
+ z.literal("planned"),
656
+ ])
657
+ .optional(),
658
+ }),
659
+ z.looseObject({
660
+ schema_version: z.literal("1.4").optional(),
661
+ }),
536
662
  ])),
537
663
  ]);
538
664
  export const HistoryListSchema = z.array(z.lazy(() => HistorySessionSummarySchema));
@@ -562,7 +688,7 @@ export const HistoryLookupBySessionSchema = z.strictObject({
562
688
  .min(1)
563
689
  .refine((value) => value !== undefined, { message: "Required" }),
564
690
  });
565
- export const HistoryRecordSchema = z.intersection(z.union([
691
+ export const HistoryRecordSchema = z.intersection(z.intersection(z.union([
566
692
  z.looseObject({
567
693
  duration_ms: z
568
694
  .int()
@@ -660,7 +786,7 @@ export const HistoryRecordSchema = z.intersection(z.union([
660
786
  project: z.string().refine((value) => value !== undefined, { message: "Required" }),
661
787
  prompt: z.string().refine((value) => value !== undefined, { message: "Required" }),
662
788
  schema_version: z
663
- .union([z.literal("1.2"), z.literal("1.3")])
789
+ .union([z.literal("1.2"), z.literal("1.3"), z.literal("1.4")])
664
790
  .refine((value) => value !== undefined, { message: "Required" }),
665
791
  session: z.string().refine((value) => value !== undefined, { message: "Required" }),
666
792
  session_id: z.union([z.string(), z.null()]).refine((value) => value !== undefined, { message: "Required" }),
@@ -800,7 +926,9 @@ export const HistoryRecordSchema = z.intersection(z.union([
800
926
  variant: z.union([z.string(), z.null()]).optional(),
801
927
  }),
802
928
  z.looseObject({
803
- duration_ms: z.union([z.int().gte(0), z.null()]).refine((value) => value !== undefined, { message: "Required" }),
929
+ duration_ms: z
930
+ .union([z.int().gte(0), z.null()])
931
+ .refine((value) => value !== undefined, { message: "Required" }),
804
932
  error: z
805
933
  .union([
806
934
  z
@@ -854,7 +982,7 @@ export const HistoryRecordSchema = z.intersection(z.union([
854
982
  project: z.string().refine((value) => value !== undefined, { message: "Required" }),
855
983
  prompt: z.string().refine((value) => value !== undefined, { message: "Required" }),
856
984
  schema_version: z
857
- .union([z.literal("1.2"), z.literal("1.3")])
985
+ .union([z.literal("1.2"), z.literal("1.3"), z.literal("1.4")])
858
986
  .refine((value) => value !== undefined, { message: "Required" }),
859
987
  session: z.string().refine((value) => value !== undefined, { message: "Required" }),
860
988
  session_id: z.union([z.string(), z.null()]).refine((value) => value !== undefined, { message: "Required" }),
@@ -914,7 +1042,7 @@ export const HistoryRecordSchema = z.intersection(z.union([
914
1042
  project: z.string().refine((value) => value !== undefined, { message: "Required" }),
915
1043
  prompt: z.string().refine((value) => value !== undefined, { message: "Required" }),
916
1044
  schema_version: z
917
- .union([z.literal("1.2"), z.literal("1.3")])
1045
+ .union([z.literal("1.2"), z.literal("1.3"), z.literal("1.4")])
918
1046
  .refine((value) => value !== undefined, { message: "Required" }),
919
1047
  session: z.string().refine((value) => value !== undefined, { message: "Required" }),
920
1048
  session_id: z.union([z.string(), z.null()]).refine((value) => value !== undefined, { message: "Required" }),
@@ -929,7 +1057,9 @@ export const HistoryRecordSchema = z.intersection(z.union([
929
1057
  variant: z.union([z.string(), z.null()]).optional(),
930
1058
  }),
931
1059
  z.looseObject({
932
- duration_ms: z.union([z.int().gte(0), z.null()]).refine((value) => value !== undefined, { message: "Required" }),
1060
+ duration_ms: z
1061
+ .union([z.int().gte(0), z.null()])
1062
+ .refine((value) => value !== undefined, { message: "Required" }),
933
1063
  error: z
934
1064
  .union([
935
1065
  z
@@ -966,13 +1096,19 @@ export const HistoryRecordSchema = z.intersection(z.union([
966
1096
  project: z.string().refine((value) => value !== undefined, { message: "Required" }),
967
1097
  prompt: z.string().refine((value) => value !== undefined, { message: "Required" }),
968
1098
  schema_version: z
969
- .union([z.literal("1.2"), z.literal("1.3")])
1099
+ .union([z.literal("1.2"), z.literal("1.3"), z.literal("1.4")])
970
1100
  .refine((value) => value !== undefined, { message: "Required" }),
971
1101
  session: z.string().refine((value) => value !== undefined, { message: "Required" }),
972
1102
  session_id: z.union([z.string(), z.null()]).refine((value) => value !== undefined, { message: "Required" }),
973
1103
  started_at: z.never().optional(),
974
1104
  status: z
975
- .union([z.literal("nonzero"), z.literal("timeout"), z.literal("spawn-error"), z.literal("skipped")])
1105
+ .union([
1106
+ z.literal("nonzero"),
1107
+ z.literal("timeout"),
1108
+ z.literal("cancelled"),
1109
+ z.literal("spawn-error"),
1110
+ z.literal("skipped"),
1111
+ ])
976
1112
  .refine((value) => value !== undefined, { message: "Required" }),
977
1113
  text: z.union([z.string(), z.null()]).refine((value) => value !== undefined, { message: "Required" }),
978
1114
  text_source: z.union([z.string(), z.null()]).refine((value) => value !== undefined, { message: "Required" }),
@@ -1022,7 +1158,9 @@ export const HistoryRecordSchema = z.intersection(z.union([
1022
1158
  .refine((value) => value !== undefined, { message: "Required" }),
1023
1159
  project: z.string().refine((value) => value !== undefined, { message: "Required" }),
1024
1160
  prompt: z.string().refine((value) => value !== undefined, { message: "Required" }),
1025
- schema_version: z.literal("1.3").refine((value) => value !== undefined, { message: "Required" }),
1161
+ schema_version: z
1162
+ .union([z.literal("1.3"), z.literal("1.4")])
1163
+ .refine((value) => value !== undefined, { message: "Required" }),
1026
1164
  session: z.string().refine((value) => value !== undefined, { message: "Required" }),
1027
1165
  session_id: z.union([z.string(), z.null()]).refine((value) => value !== undefined, { message: "Required" }),
1028
1166
  started_at: z
@@ -1030,7 +1168,13 @@ export const HistoryRecordSchema = z.intersection(z.union([
1030
1168
  .min(1)
1031
1169
  .refine((value) => value !== undefined, { message: "Required" }),
1032
1170
  status: z
1033
- .union([z.literal("nonzero"), z.literal("timeout"), z.literal("spawn-error"), z.literal("skipped")])
1171
+ .union([
1172
+ z.literal("nonzero"),
1173
+ z.literal("timeout"),
1174
+ z.literal("cancelled"),
1175
+ z.literal("spawn-error"),
1176
+ z.literal("skipped"),
1177
+ ])
1034
1178
  .refine((value) => value !== undefined, { message: "Required" }),
1035
1179
  text: z.union([z.string(), z.null()]).refine((value) => value !== undefined, { message: "Required" }),
1036
1180
  text_source: z.union([z.string(), z.null()]).refine((value) => value !== undefined, { message: "Required" }),
@@ -1041,7 +1185,9 @@ export const HistoryRecordSchema = z.intersection(z.union([
1041
1185
  variant: z.union([z.string(), z.null()]).optional(),
1042
1186
  }),
1043
1187
  z.looseObject({
1044
- duration_ms: z.union([z.int().gte(0), z.null()]).refine((value) => value !== undefined, { message: "Required" }),
1188
+ duration_ms: z
1189
+ .union([z.int().gte(0), z.null()])
1190
+ .refine((value) => value !== undefined, { message: "Required" }),
1045
1191
  error: z
1046
1192
  .union([
1047
1193
  z
@@ -1089,7 +1235,13 @@ export const HistoryRecordSchema = z.intersection(z.union([
1089
1235
  session_id: z.union([z.string(), z.null()]).refine((value) => value !== undefined, { message: "Required" }),
1090
1236
  started_at: z.never().optional(),
1091
1237
  status: z
1092
- .union([z.literal("nonzero"), z.literal("timeout"), z.literal("spawn-error"), z.literal("skipped")])
1238
+ .union([
1239
+ z.literal("nonzero"),
1240
+ z.literal("timeout"),
1241
+ z.literal("cancelled"),
1242
+ z.literal("spawn-error"),
1243
+ z.literal("skipped"),
1244
+ ])
1093
1245
  .refine((value) => value !== undefined, { message: "Required" }),
1094
1246
  text: z.union([z.string(), z.null()]).refine((value) => value !== undefined, { message: "Required" }),
1095
1247
  text_source: z.union([z.string(), z.null()]).refine((value) => value !== undefined, { message: "Required" }),
@@ -1100,7 +1252,9 @@ export const HistoryRecordSchema = z.intersection(z.union([
1100
1252
  variant: z.union([z.string(), z.null()]).optional(),
1101
1253
  }),
1102
1254
  z.looseObject({
1103
- duration_ms: z.union([z.int().gte(0), z.null()]).refine((value) => value !== undefined, { message: "Required" }),
1255
+ duration_ms: z
1256
+ .union([z.int().gte(0), z.null()])
1257
+ .refine((value) => value !== undefined, { message: "Required" }),
1104
1258
  error: z
1105
1259
  .union([
1106
1260
  z
@@ -1122,7 +1276,9 @@ export const HistoryRecordSchema = z.intersection(z.union([
1122
1276
  input: z.unknown().refine((value) => value !== undefined, { message: "Required" }),
1123
1277
  kind: z.string().refine((value) => value !== undefined, { message: "Required" }),
1124
1278
  name: z.union([z.string(), z.null()]).refine((value) => value !== undefined, { message: "Required" }),
1125
- output: z.union([z.string(), z.null()]).refine((value) => value !== undefined, { message: "Required" }),
1279
+ output: z
1280
+ .union([z.string(), z.null()])
1281
+ .refine((value) => value !== undefined, { message: "Required" }),
1126
1282
  started_at: z.null().optional(),
1127
1283
  status: z.null().optional(),
1128
1284
  tool_call_id: z.union([z.string(), z.null()]).optional(),
@@ -1173,7 +1329,9 @@ export const HistoryRecordSchema = z.intersection(z.union([
1173
1329
  variant: z.union([z.string(), z.null()]).optional(),
1174
1330
  }),
1175
1331
  z.looseObject({
1176
- duration_ms: z.union([z.int().gte(0), z.null()]).refine((value) => value !== undefined, { message: "Required" }),
1332
+ duration_ms: z
1333
+ .union([z.int().gte(0), z.null()])
1334
+ .refine((value) => value !== undefined, { message: "Required" }),
1177
1335
  error: z
1178
1336
  .union([
1179
1337
  z
@@ -1242,17 +1400,39 @@ export const HistoryRecordSchema = z.intersection(z.union([
1242
1400
  }),
1243
1401
  z.intersection(z.looseObject({
1244
1402
  error: z.string().refine((value) => value !== undefined, { message: "Required" }),
1245
- schema_version: z.literal("1.3").optional(),
1403
+ schema_version: z.union([z.literal("1.3"), z.literal("1.4")]).optional(),
1246
1404
  }), z.union([
1247
1405
  z.looseObject({
1248
1406
  status: z
1249
- .union([z.literal("nonzero"), z.literal("timeout"), z.literal("spawn-error"), z.literal("skipped")])
1407
+ .union([
1408
+ z.literal("nonzero"),
1409
+ z.literal("timeout"),
1410
+ z.literal("cancelled"),
1411
+ z.literal("spawn-error"),
1412
+ z.literal("skipped"),
1413
+ ])
1250
1414
  .optional(),
1251
1415
  }),
1252
1416
  z.looseObject({
1253
1417
  failure_kind: z.literal("tool_deferred").refine((value) => value !== undefined, { message: "Required" }),
1254
1418
  }),
1255
1419
  ])),
1420
+ ])), z.union([
1421
+ z.looseObject({
1422
+ status: z
1423
+ .union([
1424
+ z.literal("ok"),
1425
+ z.literal("nonzero"),
1426
+ z.literal("timeout"),
1427
+ z.literal("spawn-error"),
1428
+ z.literal("skipped"),
1429
+ z.literal("planned"),
1430
+ ])
1431
+ .optional(),
1432
+ }),
1433
+ z.looseObject({
1434
+ schema_version: z.literal("1.4").optional(),
1435
+ }),
1256
1436
  ]));
1257
1437
  export const HistoryRecordsSchema = z.array(z.lazy(() => HistoryRecordSchema));
1258
1438
  export const HistorySessionSummarySchema = z.looseObject({
@@ -1342,6 +1522,9 @@ export const RunReportSchema = z.looseObject({
1342
1522
  .refine((value) => value !== undefined, { message: "Required" }),
1343
1523
  bypass_permissions: z.boolean().refine((value) => value !== undefined, { message: "Required" }),
1344
1524
  config_files: z.array(z.string()).refine((value) => value !== undefined, { message: "Required" }),
1525
+ control: z
1526
+ .union([z.lazy(() => ControlReportSchema), z.null()])
1527
+ .refine((value) => value !== undefined, { message: "Required" }),
1345
1528
  dry_run: z.boolean().refine((value) => value !== undefined, { message: "Required" }),
1346
1529
  fallback: z
1347
1530
  .union([z.lazy(() => FallbackReportSchema), z.null()])
@@ -1394,6 +1577,9 @@ export const RunResultSchema = z.looseObject({
1394
1577
  stderr: z.string().refine((value) => value !== undefined, { message: "Required" }),
1395
1578
  stdout: z.string().refine((value) => value !== undefined, { message: "Required" }),
1396
1579
  structured: z.unknown().refine((value) => value !== undefined, { message: "Required" }),
1580
+ telemetry: z
1581
+ .union([z.lazy(() => ExecutionTelemetrySchema), z.null()])
1582
+ .refine((value) => value !== undefined, { message: "Required" }),
1397
1583
  text: z.union([z.string(), z.null()]).refine((value) => value !== undefined, { message: "Required" }),
1398
1584
  text_source: z.union([z.string(), z.null()]).refine((value) => value !== undefined, { message: "Required" }),
1399
1585
  usage: z.lazy(() => UsageSchema).refine((value) => value !== undefined, { message: "Required" }),
@@ -1421,6 +1607,7 @@ export const StatusSchema = z.union([
1421
1607
  z.literal("ok"),
1422
1608
  z.literal("nonzero"),
1423
1609
  z.literal("timeout"),
1610
+ z.literal("cancelled"),
1424
1611
  z.literal("spawn-error"),
1425
1612
  z.literal("skipped"),
1426
1613
  z.literal("planned"),
@@ -1446,6 +1633,7 @@ export const UsageSchema = z.looseObject({
1446
1633
  input_tokens: z.union([z.int().gte(0), z.null()]).refine((value) => value !== undefined, { message: "Required" }),
1447
1634
  output_tokens: z.union([z.int().gte(0), z.null()]).refine((value) => value !== undefined, { message: "Required" }),
1448
1635
  });
1636
+ export const UtcInstantSchema = z.string();
1449
1637
  export const VariantInfoSchema = z.looseObject({
1450
1638
  args: z.array(z.string()).refine((value) => value !== undefined, { message: "Required" }),
1451
1639
  bin: z.union([z.string(), z.null()]).refine((value) => value !== undefined, { message: "Required" }),
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@oneharness/sdk",
3
- "version": "0.6.8",
3
+ "version": "0.6.10",
4
4
  "description": "Typed Node.js SDK for oneharness",
5
5
  "type": "module",
6
6
  "main": "dist/index.js",
@@ -19,7 +19,7 @@
19
19
  "node": ">=20"
20
20
  },
21
21
  "dependencies": {
22
- "oneharness-cli": "0.6.8",
22
+ "oneharness-cli": "0.6.10",
23
23
  "zod": "^4.4.3"
24
24
  }
25
25
  }