@oneharness/sdk 0.4.6 → 0.5.1

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.
@@ -2,11 +2,12 @@ import { z } from "zod";
2
2
  import type { ActionEvent, BatchReport, FailureKind, FallThrough, FallbackReport, OutputFormat, RunReport, RunResult, SessionReport, Status, ToolCallStatus, Usage } from "./contracts.js";
3
3
  import type { DetectInfo, DetectReport } from "./detection.js";
4
4
  import type { HistoryRecord } from "./history.js";
5
+ import type { HistoryLine } from "./history-line.js";
5
6
  import type { HistoryList, HistorySessionSummary } from "./history-list.js";
6
7
  import type { HistoryListOptions } from "./history-list-options.js";
7
8
  import type { HistoryLookup, HistoryLookupByLast, HistoryLookupBySession } from "./history-lookup.js";
8
9
  import type { HistoryRecords } from "./history-records.js";
9
- import type { HistoryStreamEnvelope } from "./history-stream-envelope.js";
10
+ import type { HistoryEventLine, HistoryStreamEnvelope } from "./history-stream-envelope.js";
10
11
  import type { HistoryWatchOptions } from "./history-watch-options.js";
11
12
  import type { HistoryLabels, PermissionMode, RunOptions } from "./options.js";
12
13
  import type { HarnessInfo, ListReport, ModeInfo } from "./registry.js";
@@ -23,7 +24,9 @@ export declare const FailureKindSchema: z.ZodType<FailureKind>;
23
24
  export declare const FallThroughSchema: z.ZodType<FallThrough>;
24
25
  export declare const FallbackReportSchema: z.ZodType<FallbackReport>;
25
26
  export declare const HarnessInfoSchema: z.ZodType<HarnessInfo>;
27
+ export declare const HistoryEventLineSchema: z.ZodType<HistoryEventLine>;
26
28
  export declare const HistoryLabelsSchema: z.ZodType<HistoryLabels>;
29
+ export declare const HistoryLineSchema: z.ZodType<HistoryLine>;
27
30
  export declare const HistoryListSchema: z.ZodType<HistoryList>;
28
31
  export declare const HistoryListOptionsSchema: z.ZodType<HistoryListOptions>;
29
32
  export declare const HistoryLookupSchema: z.ZodType<HistoryLookup>;
@@ -77,6 +77,17 @@ export const HarnessInfoSchema = z.looseObject({
77
77
  supports_system_file: z.boolean().refine((value) => value !== undefined, { message: "Required" }),
78
78
  sync_file: z.union([z.string(), z.null()]).refine((value) => value !== undefined, { message: "Required" }),
79
79
  });
80
+ export const HistoryEventLineSchema = z.looseObject({
81
+ event: z.lazy(() => ActionEventSchema).refine((value) => value !== undefined, { message: "Required" }),
82
+ harness: z.string().refine((value) => value !== undefined, { message: "Required" }),
83
+ run_id: z
84
+ .string()
85
+ .min(36)
86
+ .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"))
87
+ .refine((value) => [...value].length <= 36, { message: "Too long: expected at most 36 characters" })
88
+ .refine((value) => value !== undefined, { message: "Required" }),
89
+ schema_version: z.string().refine((value) => value !== undefined, { message: "Required" }),
90
+ });
80
91
  export const HistoryLabelsSchema = z.record(z
81
92
  .string()
82
93
  .regex(new RegExp("^[A-Za-z0-9]", "u"))
@@ -90,6 +101,158 @@ export const HistoryLabelsSchema = z.record(z
90
101
  .refine((value) => !new RegExp("[\\u0000-\\u001f\\u007f-\\u009f]", "u").test(value), {
91
102
  message: "Invalid string: must not contain [\\u0000-\\u001f\\u007f-\\u009f]",
92
103
  }));
104
+ export const HistoryLineSchema = z.union([
105
+ z.looseObject({
106
+ event: z.lazy(() => ActionEventSchema).refine((value) => value !== undefined, { message: "Required" }),
107
+ harness: z.string().refine((value) => value !== undefined, { message: "Required" }),
108
+ run_id: z
109
+ .string()
110
+ .min(36)
111
+ .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"))
112
+ .refine((value) => [...value].length <= 36, { message: "Too long: expected at most 36 characters" })
113
+ .refine((value) => value !== undefined, { message: "Required" }),
114
+ schema_version: z.literal("1.0").refine((value) => value !== undefined, { message: "Required" }),
115
+ type: z.literal("event").refine((value) => value !== undefined, { message: "Required" }),
116
+ }),
117
+ z.union([
118
+ z.looseObject({
119
+ duration_ms: z
120
+ .int()
121
+ .gte(0)
122
+ .refine((value) => value !== undefined, { message: "Required" }),
123
+ exit_code: z.union([z.int(), z.null()]).refine((value) => value !== undefined, { message: "Required" }),
124
+ failure_kind: z
125
+ .union([z.lazy(() => FailureKindSchema), z.null()])
126
+ .refine((value) => value !== undefined, { message: "Required" }),
127
+ finished_at: z.string().refine((value) => value !== undefined, { message: "Required" }),
128
+ harness: z.string().refine((value) => value !== undefined, { message: "Required" }),
129
+ history_id: z
130
+ .string()
131
+ .min(36)
132
+ .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"))
133
+ .refine((value) => [...value].length <= 36, { message: "Too long: expected at most 36 characters" })
134
+ .refine((value) => value !== undefined, { message: "Required" }),
135
+ labels: z.lazy(() => HistoryLabelsSchema).optional(),
136
+ model: z.union([z.string(), z.null()]).refine((value) => value !== undefined, { message: "Required" }),
137
+ model_ms: z
138
+ .int()
139
+ .gte(0)
140
+ .refine((value) => value !== undefined, { message: "Required" }),
141
+ name: z.string().refine((value) => value !== undefined, { message: "Required" }),
142
+ permission_mode: z
143
+ .lazy(() => PermissionModeSchema)
144
+ .refine((value) => value !== undefined, { message: "Required" }),
145
+ project: z.string().refine((value) => value !== undefined, { message: "Required" }),
146
+ prompt: z.string().refine((value) => value !== undefined, { message: "Required" }),
147
+ schema_version: z.literal("1.0").refine((value) => value !== undefined, { message: "Required" }),
148
+ session: z.string().refine((value) => value !== undefined, { message: "Required" }),
149
+ session_id: z.union([z.string(), z.null()]).refine((value) => value !== undefined, { message: "Required" }),
150
+ started_at: z
151
+ .string()
152
+ .min(1)
153
+ .refine((value) => value !== undefined, { message: "Required" }),
154
+ status: z
155
+ .union([z.literal("ok"), z.literal("nonzero")])
156
+ .refine((value) => value !== undefined, { message: "Required" }),
157
+ text: z.union([z.string(), z.null()]).refine((value) => value !== undefined, { message: "Required" }),
158
+ text_source: z.union([z.string(), z.null()]).refine((value) => value !== undefined, { message: "Required" }),
159
+ time_to_first_token_ms: z.union([z.int().gte(0), z.null()]).optional(),
160
+ timestamp: z.string().refine((value) => value !== undefined, { message: "Required" }),
161
+ tool_ms: z
162
+ .int()
163
+ .gte(0)
164
+ .refine((value) => value !== undefined, { message: "Required" }),
165
+ type: z.literal("run").refine((value) => value !== undefined, { message: "Required" }),
166
+ usage: z.lazy(() => UsageSchema).refine((value) => value !== undefined, { message: "Required" }),
167
+ }),
168
+ z.looseObject({
169
+ duration_ms: z
170
+ .int()
171
+ .gte(0)
172
+ .refine((value) => value !== undefined, { message: "Required" }),
173
+ exit_code: z.union([z.int(), z.null()]).refine((value) => value !== undefined, { message: "Required" }),
174
+ failure_kind: z
175
+ .union([z.lazy(() => FailureKindSchema), z.null()])
176
+ .refine((value) => value !== undefined, { message: "Required" }),
177
+ finished_at: z.union([z.string(), z.null()]).refine((value) => value !== undefined, { message: "Required" }),
178
+ harness: z.string().refine((value) => value !== undefined, { message: "Required" }),
179
+ history_id: z
180
+ .string()
181
+ .min(36)
182
+ .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"))
183
+ .refine((value) => [...value].length <= 36, { message: "Too long: expected at most 36 characters" })
184
+ .refine((value) => value !== undefined, { message: "Required" }),
185
+ labels: z.lazy(() => HistoryLabelsSchema).optional(),
186
+ model: z.union([z.string(), z.null()]).refine((value) => value !== undefined, { message: "Required" }),
187
+ model_ms: z
188
+ .int()
189
+ .gte(0)
190
+ .refine((value) => value !== undefined, { message: "Required" }),
191
+ name: z.string().refine((value) => value !== undefined, { message: "Required" }),
192
+ permission_mode: z
193
+ .lazy(() => PermissionModeSchema)
194
+ .refine((value) => value !== undefined, { message: "Required" }),
195
+ project: z.string().refine((value) => value !== undefined, { message: "Required" }),
196
+ prompt: z.string().refine((value) => value !== undefined, { message: "Required" }),
197
+ schema_version: z.literal("1.0").refine((value) => value !== undefined, { message: "Required" }),
198
+ session: z.string().refine((value) => value !== undefined, { message: "Required" }),
199
+ session_id: z.union([z.string(), z.null()]).refine((value) => value !== undefined, { message: "Required" }),
200
+ started_at: z
201
+ .string()
202
+ .min(1)
203
+ .refine((value) => value !== undefined, { message: "Required" }),
204
+ status: z
205
+ .union([z.literal("timeout"), z.literal("spawn_error"), z.literal("skipped"), z.literal("planned")])
206
+ .refine((value) => value !== undefined, { message: "Required" }),
207
+ text: z.union([z.string(), z.null()]).refine((value) => value !== undefined, { message: "Required" }),
208
+ text_source: z.union([z.string(), z.null()]).refine((value) => value !== undefined, { message: "Required" }),
209
+ time_to_first_token_ms: z.union([z.int().gte(0), z.null()]).optional(),
210
+ timestamp: z.string().refine((value) => value !== undefined, { message: "Required" }),
211
+ tool_ms: z
212
+ .int()
213
+ .gte(0)
214
+ .refine((value) => value !== undefined, { message: "Required" }),
215
+ type: z.literal("run").refine((value) => value !== undefined, { message: "Required" }),
216
+ usage: z.lazy(() => UsageSchema).refine((value) => value !== undefined, { message: "Required" }),
217
+ }),
218
+ z.looseObject({
219
+ duration_ms: z.union([z.int().gte(0), z.null()]).refine((value) => value !== undefined, { message: "Required" }),
220
+ exit_code: z.union([z.int(), z.null()]).refine((value) => value !== undefined, { message: "Required" }),
221
+ failure_kind: z
222
+ .union([z.lazy(() => FailureKindSchema), z.null()])
223
+ .refine((value) => value !== undefined, { message: "Required" }),
224
+ finished_at: z.null().refine((value) => value !== undefined, { message: "Required" }),
225
+ harness: z.string().refine((value) => value !== undefined, { message: "Required" }),
226
+ history_id: z
227
+ .string()
228
+ .min(36)
229
+ .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"))
230
+ .refine((value) => [...value].length <= 36, { message: "Too long: expected at most 36 characters" })
231
+ .refine((value) => value !== undefined, { message: "Required" }),
232
+ labels: z.lazy(() => HistoryLabelsSchema).optional(),
233
+ model: z.union([z.string(), z.null()]).refine((value) => value !== undefined, { message: "Required" }),
234
+ model_ms: z.never().optional(),
235
+ name: z.string().refine((value) => value !== undefined, { message: "Required" }),
236
+ permission_mode: z
237
+ .lazy(() => PermissionModeSchema)
238
+ .refine((value) => value !== undefined, { message: "Required" }),
239
+ project: z.string().refine((value) => value !== undefined, { message: "Required" }),
240
+ prompt: z.string().refine((value) => value !== undefined, { message: "Required" }),
241
+ schema_version: z.literal("1.0").refine((value) => value !== undefined, { message: "Required" }),
242
+ session: z.string().refine((value) => value !== undefined, { message: "Required" }),
243
+ session_id: z.union([z.string(), z.null()]).refine((value) => value !== undefined, { message: "Required" }),
244
+ started_at: z.never().optional(),
245
+ status: z.lazy(() => StatusSchema).refine((value) => value !== undefined, { message: "Required" }),
246
+ text: z.union([z.string(), z.null()]).refine((value) => value !== undefined, { message: "Required" }),
247
+ text_source: z.union([z.string(), z.null()]).refine((value) => value !== undefined, { message: "Required" }),
248
+ time_to_first_token_ms: z.never().optional(),
249
+ timestamp: z.string().refine((value) => value !== undefined, { message: "Required" }),
250
+ tool_ms: z.never().optional(),
251
+ type: z.literal("run").refine((value) => value !== undefined, { message: "Required" }),
252
+ usage: z.lazy(() => UsageSchema).refine((value) => value !== undefined, { message: "Required" }),
253
+ }),
254
+ ]),
255
+ ]);
93
256
  export const HistoryListSchema = z.array(z.lazy(() => HistorySessionSummarySchema));
94
257
  export const HistoryListOptionsSchema = z.strictObject({
95
258
  allProjects: z.boolean().optional(),
@@ -201,7 +364,7 @@ export const HistoryRecordSchema = z.union([
201
364
  permission_mode: z.lazy(() => PermissionModeSchema).refine((value) => value !== undefined, { message: "Required" }),
202
365
  project: z.string().refine((value) => value !== undefined, { message: "Required" }),
203
366
  prompt: z.string().refine((value) => value !== undefined, { message: "Required" }),
204
- schema_version: z.literal("0.3").refine((value) => value !== undefined, { message: "Required" }),
367
+ schema_version: z.literal("1.0").refine((value) => value !== undefined, { message: "Required" }),
205
368
  session: z.string().refine((value) => value !== undefined, { message: "Required" }),
206
369
  session_id: z.union([z.string(), z.null()]).refine((value) => value !== undefined, { message: "Required" }),
207
370
  started_at: z
@@ -260,7 +423,7 @@ export const HistoryRecordSchema = z.union([
260
423
  permission_mode: z.lazy(() => PermissionModeSchema).refine((value) => value !== undefined, { message: "Required" }),
261
424
  project: z.string().refine((value) => value !== undefined, { message: "Required" }),
262
425
  prompt: z.string().refine((value) => value !== undefined, { message: "Required" }),
263
- schema_version: z.literal("0.3").refine((value) => value !== undefined, { message: "Required" }),
426
+ schema_version: z.literal("1.0").refine((value) => value !== undefined, { message: "Required" }),
264
427
  session: z.string().refine((value) => value !== undefined, { message: "Required" }),
265
428
  session_id: z.union([z.string(), z.null()]).refine((value) => value !== undefined, { message: "Required" }),
266
429
  started_at: z.never().optional(),
@@ -337,10 +500,20 @@ export const HistorySessionSummarySchema = z.looseObject({
337
500
  .refine((value) => value !== undefined, { message: "Required" }),
338
501
  started: z.string().refine((value) => value !== undefined, { message: "Required" }),
339
502
  });
340
- export const HistoryStreamEnvelopeSchema = z.looseObject({
341
- record: z.lazy(() => HistoryRecordSchema).refine((value) => value !== undefined, { message: "Required" }),
342
- type: z.literal("record").refine((value) => value !== undefined, { message: "Required" }),
343
- });
503
+ export const HistoryStreamEnvelopeSchema = z.union([
504
+ z.looseObject({
505
+ record: z.lazy(() => HistoryRecordSchema).refine((value) => value !== undefined, { message: "Required" }),
506
+ type: z.literal("record").refine((value) => value !== undefined, { message: "Required" }),
507
+ }),
508
+ z.looseObject({
509
+ line: z.lazy(() => HistoryEventLineSchema).refine((value) => value !== undefined, { message: "Required" }),
510
+ type: z.literal("event").refine((value) => value !== undefined, { message: "Required" }),
511
+ }),
512
+ z.looseObject({
513
+ line: z.lazy(() => HistoryEventLineSchema).refine((value) => value !== undefined, { message: "Required" }),
514
+ type: z.literal("event").refine((value) => value !== undefined, { message: "Required" }),
515
+ }),
516
+ ]);
344
517
  export const HistoryWatchOptionsSchema = z.strictObject({
345
518
  after: z
346
519
  .string()
@@ -349,6 +522,7 @@ export const HistoryWatchOptionsSchema = z.strictObject({
349
522
  .refine((value) => [...value].length <= 36, { message: "Too long: expected at most 36 characters" })
350
523
  .optional(),
351
524
  allProjects: z.boolean().optional(),
525
+ events: z.boolean().optional(),
352
526
  historyDir: z.string().optional(),
353
527
  labels: z.lazy(() => HistoryLabelsSchema).optional(),
354
528
  project: z.string().optional(),
package/dist/index.d.ts CHANGED
@@ -12,6 +12,7 @@ import type { RunStreamEnvelope } from "./generated/run-stream-envelope.js";
12
12
  export type { ActionEvent, BatchReport, FailureKind, FallbackReport, FallThrough, OutputFormat, RunReport, RunResult, SessionReport, Status, Usage, } from "./generated/contracts.js";
13
13
  export type { DetectInfo, DetectReport } from "./generated/detection.js";
14
14
  export type { HistoryRecord } from "./generated/history.js";
15
+ export type { HistoryLine } from "./generated/history-line.js";
15
16
  export type { HistoryList, HistorySessionSummary, } from "./generated/history-list.js";
16
17
  export type { HistoryListOptions } from "./generated/history-list-options.js";
17
18
  export type { HistoryLookup, HistoryLookupByLast, HistoryLookupBySession, } from "./generated/history-lookup.js";
package/dist/index.js CHANGED
@@ -281,6 +281,8 @@ export class OneHarness {
281
281
  args.push("--all-projects");
282
282
  if (input.historyDir)
283
283
  args.push("--history-dir", input.historyDir);
284
+ if (input.events)
285
+ args.push("--events");
284
286
  return invokeStreamWith(this.options, args, HistoryStreamEnvelopeSchema, "invalid oneharness history watch contract", undefined, true);
285
287
  }
286
288
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@oneharness/sdk",
3
- "version": "0.4.6",
3
+ "version": "0.5.1",
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.4.6",
22
+ "oneharness-cli": "0.5.1",
23
23
  "zod": "^4.4.3"
24
24
  }
25
25
  }