@harness-kernel/core 0.2.1 → 0.4.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (58) hide show
  1. package/dist/agent/context.d.ts +2 -3
  2. package/dist/agent/context.js +1 -1
  3. package/dist/agent/event.d.ts +3 -2
  4. package/dist/agent/event.js +6 -2
  5. package/dist/agent/hook.d.ts +3 -4
  6. package/dist/agent/hook.js +1 -1
  7. package/dist/agent/mode.d.ts +2 -3
  8. package/dist/agent/mode.js +1 -1
  9. package/dist/agent/role.js +1 -1
  10. package/dist/agent/session.d.ts +3 -4
  11. package/dist/agent/session.js +8 -2
  12. package/dist/agent/tool.d.ts +39 -3
  13. package/dist/agent/tool.js +8 -2
  14. package/dist/agent.d.ts +6 -6
  15. package/dist/{approval-D_G2w-fW.d.ts → approval-7e8HD-35.d.ts} +20 -15
  16. package/dist/chunk-2NQ3JL7K.js +502 -0
  17. package/dist/chunk-2NQ3JL7K.js.map +1 -0
  18. package/dist/{chunk-JIJHGB6H.js → chunk-3QOAFCCZ.js} +24 -2
  19. package/dist/chunk-3QOAFCCZ.js.map +1 -0
  20. package/dist/{chunk-QEVKKJ7N.js → chunk-BLLQSHQI.js} +391 -151
  21. package/dist/chunk-BLLQSHQI.js.map +1 -0
  22. package/dist/{chunk-ZU6ADDET.js → chunk-IWHCNKHK.js} +1 -1
  23. package/dist/chunk-IWHCNKHK.js.map +1 -0
  24. package/dist/chunk-NCSQEUQC.js +37 -0
  25. package/dist/chunk-NCSQEUQC.js.map +1 -0
  26. package/dist/{chunk-B4Q6CPYO.js → chunk-TCHZYK5Y.js} +3 -1
  27. package/dist/{chunk-B4Q6CPYO.js.map → chunk-TCHZYK5Y.js.map} +1 -1
  28. package/dist/{context-BfpLqV11.d.ts → context-Bz9C_rL9.d.ts} +88 -3
  29. package/dist/errors-DHHy8V3O.d.ts +6 -0
  30. package/dist/errors-hpkW3tfR.d.ts +112 -0
  31. package/dist/{event-CKV4EeZ3.d.ts → event-DMBY-R6h.d.ts} +33 -4
  32. package/dist/{hook-CfBbhUQf.d.ts → hook-DD7uuzE3.d.ts} +2 -2
  33. package/dist/index.d.ts +25 -18
  34. package/dist/index.js +20 -7
  35. package/dist/metrics-DMN8bfY6.d.ts +23 -0
  36. package/dist/{model-provider-Ch7tzk1x.d.ts → model-provider-DGkLQJWP.d.ts} +6 -4
  37. package/dist/runner/approval.d.ts +7 -7
  38. package/dist/runner/event.d.ts +3 -2
  39. package/dist/runner/event.js +6 -2
  40. package/dist/runner/logging.d.ts +7 -3
  41. package/dist/runner/logging.js +11 -1
  42. package/dist/runner/model-provider.d.ts +6 -6
  43. package/dist/runner/sandbox.d.ts +12 -2
  44. package/dist/runner/sandbox.js +1 -1
  45. package/dist/runner/storage.d.ts +181 -4
  46. package/dist/{runner-B41JEovO.d.ts → runner-BYG9ARAV.d.ts} +11 -6
  47. package/dist/runner.d.ts +9 -8
  48. package/dist/runner.js +12 -6
  49. package/package.json +2 -2
  50. package/dist/chunk-JIJHGB6H.js.map +0 -1
  51. package/dist/chunk-Q44U2CMM.js +0 -239
  52. package/dist/chunk-Q44U2CMM.js.map +0 -1
  53. package/dist/chunk-QEVKKJ7N.js.map +0 -1
  54. package/dist/chunk-ZU6ADDET.js.map +0 -1
  55. package/dist/events-D4xcDi53.d.ts +0 -69
  56. package/dist/storage-DCZE_hES.d.ts +0 -200
  57. package/dist/tool-errors-CygY1Nba.d.ts +0 -27
  58. package/dist/types-BPmsw-mF.d.ts +0 -80
@@ -0,0 +1,502 @@
1
+ // src/runtime/errors.ts
2
+ var harnessErrorProperty = "__harnessError";
3
+ var codeDefaults = {
4
+ "run.failed": {
5
+ category: "run",
6
+ severity: "fatal",
7
+ recoverable: false,
8
+ publicMessage: "Run failed."
9
+ },
10
+ "run.aborted": {
11
+ category: "run",
12
+ severity: "warn",
13
+ recoverable: false,
14
+ publicMessage: "Run aborted."
15
+ },
16
+ "model.failed": {
17
+ category: "model",
18
+ severity: "error",
19
+ recoverable: false,
20
+ publicMessage: "Model provider failed."
21
+ },
22
+ "model.rate_limited": {
23
+ category: "model",
24
+ severity: "warn",
25
+ recoverable: false,
26
+ publicMessage: "Model provider was rate limited."
27
+ },
28
+ "model.timeout": {
29
+ category: "model",
30
+ severity: "warn",
31
+ recoverable: false,
32
+ publicMessage: "Model provider timed out."
33
+ },
34
+ "tool.failed": {
35
+ category: "tool",
36
+ severity: "error",
37
+ recoverable: true,
38
+ publicMessage: "Tool execution failed."
39
+ },
40
+ "tool.args.invalid_schema": {
41
+ category: "tool",
42
+ severity: "error",
43
+ recoverable: true,
44
+ publicMessage: "Tool arguments did not match schema."
45
+ },
46
+ "tool.approval.denied": {
47
+ category: "approval",
48
+ severity: "warn",
49
+ recoverable: true,
50
+ publicMessage: "Tool approval was denied."
51
+ },
52
+ "context.provider.failed": {
53
+ category: "context",
54
+ severity: "error",
55
+ recoverable: false,
56
+ publicMessage: "Context provider failed."
57
+ },
58
+ "storage.write_failed": {
59
+ category: "storage",
60
+ severity: "error",
61
+ recoverable: true,
62
+ publicMessage: "Storage write failed."
63
+ },
64
+ "sandbox.exec.failed": {
65
+ category: "sandbox",
66
+ severity: "error",
67
+ recoverable: true,
68
+ publicMessage: "Sandbox execution failed."
69
+ },
70
+ "runtime.failed": {
71
+ category: "runtime",
72
+ severity: "fatal",
73
+ recoverable: false,
74
+ publicMessage: "Runtime failed."
75
+ }
76
+ };
77
+ function isObject(value) {
78
+ return typeof value === "object" && value !== null || typeof value === "function";
79
+ }
80
+ function asRecord(value) {
81
+ return isObject(value) ? value : void 0;
82
+ }
83
+ function stringField(value, field) {
84
+ const record = asRecord(value);
85
+ return typeof record?.[field] === "string" ? record[field] : void 0;
86
+ }
87
+ function numberField(value, field) {
88
+ const record = asRecord(value);
89
+ return typeof record?.[field] === "number" ? record[field] : void 0;
90
+ }
91
+ function errorMessage(error, fallback = "Unknown error") {
92
+ if (error instanceof Error) return error.message || fallback;
93
+ if (typeof error === "string") return error || fallback;
94
+ return String(error ?? fallback);
95
+ }
96
+ function errorName(error) {
97
+ return error instanceof Error ? error.name : stringField(error, "name");
98
+ }
99
+ function errorStack(error) {
100
+ return error instanceof Error ? error.stack : stringField(error, "stack");
101
+ }
102
+ function errorCause(error) {
103
+ if (error instanceof Error && "cause" in error) return error.cause;
104
+ return asRecord(error)?.cause;
105
+ }
106
+ function attachedHarnessError(error) {
107
+ const attached = asRecord(error)?.[harnessErrorProperty];
108
+ return isHarnessErrorShape(attached) ? attached : void 0;
109
+ }
110
+ function isAbortError(error) {
111
+ const name = errorName(error)?.toLowerCase();
112
+ const message = errorMessage(error, "").toLowerCase();
113
+ const code = stringField(error, "code")?.toLowerCase();
114
+ return name === "aborterror" || code === "abort_err" || message === "run aborted." || message.includes("aborted") || message.includes("cancelled") || message.includes("canceled");
115
+ }
116
+ function modelErrorCode(error) {
117
+ const status = numberField(error, "status") ?? numberField(error, "statusCode");
118
+ const code = stringField(error, "code")?.toLowerCase() ?? "";
119
+ const name = errorName(error)?.toLowerCase() ?? "";
120
+ const message = errorMessage(error, "").toLowerCase();
121
+ if (status === 429 || code.includes("rate") || message.includes("rate limit") || message.includes("too many requests")) {
122
+ return "model.rate_limited";
123
+ }
124
+ if (code.includes("timeout") || code === "etimedout" || name.includes("timeout") || message.includes("timed out") || message.includes("timeout")) {
125
+ return "model.timeout";
126
+ }
127
+ return "model.failed";
128
+ }
129
+ function defaultCode(error, context) {
130
+ if (isAbortError(error)) return "run.aborted";
131
+ if (context.code) return context.code;
132
+ if (context.category === "model" || context.source?.kind === "model_provider") return modelErrorCode(error);
133
+ if (context.category === "tool" || context.source?.kind === "tool") return "tool.failed";
134
+ if (context.category === "context" || context.source?.kind === "context_provider") return "context.provider.failed";
135
+ if (context.category === "storage") return "storage.write_failed";
136
+ if (context.category === "sandbox") return "sandbox.exec.failed";
137
+ if (context.category === "run") return "run.failed";
138
+ return "runtime.failed";
139
+ }
140
+ function isHarnessErrorCode(value) {
141
+ return typeof value === "string" && value in codeDefaults;
142
+ }
143
+ function applyDefaults(shape, context) {
144
+ const code = isHarnessErrorCode(shape.code) ? shape.code : defaultCode(void 0, context);
145
+ const defaults = codeDefaults[code];
146
+ const contextMatchesCode = context.code === void 0 || context.code === code;
147
+ return {
148
+ code,
149
+ message: shape.message,
150
+ publicMessage: shape.publicMessage ?? context.publicMessage ?? defaults.publicMessage,
151
+ category: shape.category ?? (contextMatchesCode ? context.category : void 0) ?? defaults.category,
152
+ severity: shape.severity ?? (contextMatchesCode ? context.severity : void 0) ?? defaults.severity,
153
+ recoverable: shape.recoverable ?? (contextMatchesCode ? context.recoverable : void 0) ?? defaults.recoverable,
154
+ source: shape.source ?? context.source,
155
+ name: shape.name,
156
+ stack: shape.stack,
157
+ cause: shape.cause,
158
+ details: shape.details ?? context.details
159
+ };
160
+ }
161
+ function isHarnessErrorShape(value) {
162
+ if (!value || typeof value !== "object") return false;
163
+ const candidate = value;
164
+ return isHarnessErrorCode(candidate.code) && typeof candidate.message === "string" && typeof candidate.category === "string" && typeof candidate.severity === "string" && typeof candidate.recoverable === "boolean";
165
+ }
166
+ function annotateHarnessError(error, shape) {
167
+ if (!isObject(error)) return;
168
+ try {
169
+ Object.defineProperty(error, harnessErrorProperty, {
170
+ value: shape,
171
+ enumerable: false,
172
+ configurable: true
173
+ });
174
+ } catch {
175
+ }
176
+ }
177
+ function normalizeHarnessError(error, context = {}, policy = {}) {
178
+ const existing = isHarnessErrorShape(error) ? error : attachedHarnessError(error);
179
+ const inferredCode = existing?.code ?? defaultCode(error, context);
180
+ const defaults = codeDefaults[inferredCode];
181
+ const base = existing ? applyDefaults({
182
+ ...existing,
183
+ message: existing.message || context.message || defaults.publicMessage
184
+ }, context) : applyDefaults({
185
+ code: inferredCode,
186
+ message: context.message ?? errorMessage(error, defaults.publicMessage),
187
+ publicMessage: context.publicMessage,
188
+ source: context.source,
189
+ name: errorName(error),
190
+ stack: errorStack(error),
191
+ cause: errorCause(error),
192
+ details: context.details
193
+ }, context);
194
+ const classified = policy.classify?.(error, context) ?? {};
195
+ const merged = {
196
+ ...base,
197
+ ...classified,
198
+ message: classified.message ?? base.message
199
+ };
200
+ if (classified.code && classified.category === void 0) merged.category = void 0;
201
+ if (classified.code && classified.severity === void 0) merged.severity = void 0;
202
+ if (classified.code && classified.recoverable === void 0) merged.recoverable = void 0;
203
+ if (classified.code && classified.publicMessage === void 0) merged.publicMessage = void 0;
204
+ return applyDefaults(merged, context);
205
+ }
206
+ function sanitizeHarnessError(error, policy = {}) {
207
+ const expose = policy.exposeInternalErrors === true;
208
+ const includeStack = expose || policy.includeStackInStatus === true;
209
+ return {
210
+ code: error.code,
211
+ message: expose ? error.message : error.publicMessage ?? error.message,
212
+ publicMessage: error.publicMessage,
213
+ category: error.category,
214
+ severity: error.severity,
215
+ recoverable: error.recoverable,
216
+ source: error.source,
217
+ name: error.name,
218
+ stack: includeStack ? error.stack : void 0,
219
+ cause: expose ? error.cause : void 0,
220
+ details: expose ? error.details : void 0
221
+ };
222
+ }
223
+
224
+ // src/logging/types.ts
225
+ var HarnessLog = class {
226
+ };
227
+ var HarnessLogSink = class {
228
+ };
229
+
230
+ // src/logging/sinks/shared.ts
231
+ var levelOrder = {
232
+ silent: 0,
233
+ error: 1,
234
+ warn: 2,
235
+ info: 3,
236
+ debug: 4
237
+ };
238
+ function shouldWriteLog(recordLevel, configuredLevel) {
239
+ const level = configuredLevel ?? "silent";
240
+ return level !== "silent" && levelOrder[recordLevel] <= levelOrder[level];
241
+ }
242
+ function consoleMethod(level) {
243
+ if (level === "error") return "error";
244
+ if (level === "warn") return "warn";
245
+ return "log";
246
+ }
247
+ function formatValue(value) {
248
+ if (typeof value === "string") return value;
249
+ if (typeof value === "number" || typeof value === "boolean") return String(value);
250
+ if (value == null) return String(value);
251
+ return JSON.stringify(value);
252
+ }
253
+
254
+ // src/logging/sinks/console.ts
255
+ var ConsoleLogSink = class extends HarnessLogSink {
256
+ format;
257
+ level;
258
+ target;
259
+ constructor(options = {}) {
260
+ super();
261
+ this.format = options.format ?? "pretty";
262
+ this.level = options.level;
263
+ this.target = options.console ?? console;
264
+ }
265
+ write(record) {
266
+ if (this.level && !shouldWriteLog(record.level, this.level)) return;
267
+ const method = consoleMethod(record.level);
268
+ if (this.format === "json") {
269
+ this.target[method](JSON.stringify(record));
270
+ return;
271
+ }
272
+ const fields = Object.entries(record.fields ?? {}).map(([key, value]) => `${key}=${formatValue(value)}`).join(" ");
273
+ const context = [
274
+ record.sessionId ? `session=${record.sessionId}` : void 0,
275
+ record.runId ? `run=${record.runId}` : void 0,
276
+ record.durationMs !== void 0 ? `durationMs=${record.durationMs}` : void 0
277
+ ].filter(Boolean).join(" ");
278
+ const suffix = [fields, context].filter(Boolean).join(" ");
279
+ this.target[method](`[${record.level}] ${record.message}${suffix ? ` ${suffix}` : ""}`);
280
+ }
281
+ };
282
+
283
+ // src/logging/sinks/memory.ts
284
+ var MemoryLogSink = class extends HarnessLogSink {
285
+ records = [];
286
+ level;
287
+ constructor(options = {}) {
288
+ super();
289
+ this.level = options.level;
290
+ }
291
+ write(record) {
292
+ if (this.level && !shouldWriteLog(record.level, this.level)) return;
293
+ this.records.push(record);
294
+ }
295
+ clear() {
296
+ this.records.length = 0;
297
+ }
298
+ };
299
+
300
+ // src/logging/redaction.ts
301
+ var defaultRedactKeys = [
302
+ "password",
303
+ "token",
304
+ "apiKey",
305
+ "authorization",
306
+ "secret",
307
+ "cookie",
308
+ "setCookie"
309
+ ];
310
+ function normalizeKey(key) {
311
+ return key.replace(/[^a-zA-Z0-9]/g, "").toLowerCase();
312
+ }
313
+ function shouldRedactKey(key, keys) {
314
+ const normalized = normalizeKey(key);
315
+ return keys.some((candidate) => {
316
+ const sensitive = normalizeKey(candidate);
317
+ return normalized === sensitive || normalized.includes(sensitive);
318
+ });
319
+ }
320
+ function redactError(error) {
321
+ if (isHarnessErrorShape(error)) {
322
+ return {
323
+ code: error.code,
324
+ category: error.category,
325
+ severity: error.severity,
326
+ recoverable: error.recoverable,
327
+ name: error.name,
328
+ message: error.message,
329
+ stack: error.stack
330
+ };
331
+ }
332
+ return {
333
+ name: error.name,
334
+ message: error.message,
335
+ stack: error.stack
336
+ };
337
+ }
338
+ function redactValue(value, config = {}, seen = /* @__PURE__ */ new WeakSet()) {
339
+ const keys = config.keys ?? defaultRedactKeys;
340
+ const replacement = config.replacement ?? "[redacted]";
341
+ if (isHarnessErrorShape(value)) {
342
+ if (seen.has(value)) return "[circular]";
343
+ seen.add(value);
344
+ return {
345
+ ...redactError(value),
346
+ publicMessage: value.publicMessage,
347
+ source: value.source,
348
+ details: redactValue(value.details, config, seen),
349
+ cause: redactValue(value.cause, config, seen)
350
+ };
351
+ }
352
+ if (value instanceof Error) return redactError(value);
353
+ if (value === null || value === void 0) return value;
354
+ if (typeof value !== "object") return value;
355
+ if (seen.has(value)) return "[circular]";
356
+ seen.add(value);
357
+ if (Array.isArray(value)) {
358
+ return value.map((item) => redactValue(item, config, seen));
359
+ }
360
+ const output = {};
361
+ for (const [key, item] of Object.entries(value)) {
362
+ output[key] = shouldRedactKey(key, keys) ? replacement : redactValue(item, config, seen);
363
+ }
364
+ return output;
365
+ }
366
+ function summarizeValue(value, config = {}) {
367
+ const keys = config.keys ?? defaultRedactKeys;
368
+ const replacement = config.replacement ?? "[redacted]";
369
+ const visit = (item, key) => {
370
+ if (key && shouldRedactKey(key, keys)) return replacement;
371
+ if (item instanceof Error || isHarnessErrorShape(item)) {
372
+ const error = redactError(item);
373
+ return {
374
+ ...error.code ? { code: error.code } : {},
375
+ name: error.name,
376
+ message: error.message
377
+ };
378
+ }
379
+ if (item === null) return "null";
380
+ if (item === void 0) return "undefined";
381
+ if (typeof item === "string") return `string(${item.length})`;
382
+ if (typeof item === "number" || typeof item === "boolean") return item;
383
+ if (typeof item === "bigint") return `${item.toString()}n`;
384
+ if (typeof item === "symbol") return "symbol";
385
+ if (typeof item === "function") return "function";
386
+ if (Array.isArray(item)) return `array(${item.length})`;
387
+ if (typeof item === "object") {
388
+ const objectKeys = Object.keys(item).map((objectKey) => shouldRedactKey(objectKey, keys) ? replacement : objectKey);
389
+ return `object(${objectKeys.slice(0, 8).join(",")}${objectKeys.length > 8 ? ",..." : ""})`;
390
+ }
391
+ return String(item);
392
+ };
393
+ if (value && typeof value === "object" && !Array.isArray(value) && !(value instanceof Error)) {
394
+ const output = {};
395
+ for (const [key, item] of Object.entries(value)) output[key] = visit(item, key);
396
+ return output;
397
+ }
398
+ return visit(value);
399
+ }
400
+
401
+ // src/runtime/id.ts
402
+ var sequence = 0;
403
+ function randomId() {
404
+ const cryptoValue = globalThis.crypto;
405
+ if (cryptoValue?.randomUUID) return cryptoValue.randomUUID();
406
+ sequence += 1;
407
+ return `id_${Date.now().toString(36)}_${sequence.toString(36)}`;
408
+ }
409
+
410
+ // src/logging/normalize.ts
411
+ function nowIso() {
412
+ return (/* @__PURE__ */ new Date()).toISOString();
413
+ }
414
+ function plainObject(value) {
415
+ if (!value || typeof value !== "object" || Array.isArray(value) || value instanceof Error) return void 0;
416
+ return value;
417
+ }
418
+ function logErrorFromFields(value) {
419
+ if (value instanceof Error || isHarnessErrorShape(value)) return value;
420
+ if (value && typeof value === "object" && "error" in value) {
421
+ const candidate = value.error;
422
+ if (candidate instanceof Error || isHarnessErrorShape(candidate)) return candidate;
423
+ }
424
+ return void 0;
425
+ }
426
+ function normalizeHarnessLog(logClass, fields, context = {}, redaction = {}) {
427
+ const log = new logClass();
428
+ const originalFields = log.redact ? log.redact(fields) : fields;
429
+ const originalError = logErrorFromFields(originalFields);
430
+ const redactedFields = redactValue(originalFields, redaction);
431
+ const fieldsObject = plainObject(redactedFields);
432
+ return {
433
+ id: randomId(),
434
+ at: nowIso(),
435
+ level: log.levelFor?.(redactedFields) ?? log.level,
436
+ category: log.category,
437
+ type: logClass.name,
438
+ message: log.message(redactedFields),
439
+ sessionId: context.sessionId,
440
+ runId: context.runId,
441
+ turnId: context.turnId,
442
+ modeId: context.modeId,
443
+ branchId: context.branchId,
444
+ source: context.source ?? { kind: "runtime" },
445
+ correlationId: context.correlationId,
446
+ causationId: context.causationId,
447
+ spanId: context.spanId,
448
+ parentSpanId: context.parentSpanId,
449
+ durationMs: context.durationMs,
450
+ fields: fieldsObject,
451
+ error: originalError ? redactError(originalError) : void 0
452
+ };
453
+ }
454
+
455
+ // src/logging/index.ts
456
+ var AgentDebugLog = class extends HarnessLog {
457
+ level = "debug";
458
+ category = "agent";
459
+ message(fields) {
460
+ return fields.message;
461
+ }
462
+ };
463
+ var AgentInfoLog = class extends HarnessLog {
464
+ level = "info";
465
+ category = "agent";
466
+ message(fields) {
467
+ return fields.message;
468
+ }
469
+ };
470
+ var AgentWarnLog = class extends HarnessLog {
471
+ level = "warn";
472
+ category = "agent";
473
+ message(fields) {
474
+ return fields.message;
475
+ }
476
+ };
477
+ var AgentErrorLog = class extends HarnessLog {
478
+ level = "error";
479
+ category = "agent";
480
+ message(fields) {
481
+ return fields.message;
482
+ }
483
+ };
484
+
485
+ export {
486
+ annotateHarnessError,
487
+ normalizeHarnessError,
488
+ sanitizeHarnessError,
489
+ HarnessLog,
490
+ HarnessLogSink,
491
+ randomId,
492
+ summarizeValue,
493
+ normalizeHarnessLog,
494
+ shouldWriteLog,
495
+ ConsoleLogSink,
496
+ MemoryLogSink,
497
+ AgentDebugLog,
498
+ AgentInfoLog,
499
+ AgentWarnLog,
500
+ AgentErrorLog
501
+ };
502
+ //# sourceMappingURL=chunk-2NQ3JL7K.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/runtime/errors.ts","../src/logging/types.ts","../src/logging/sinks/shared.ts","../src/logging/sinks/console.ts","../src/logging/sinks/memory.ts","../src/logging/redaction.ts","../src/runtime/id.ts","../src/logging/normalize.ts","../src/logging/index.ts"],"sourcesContent":["import type {\n HarnessErrorCategory,\n HarnessErrorCode,\n HarnessErrorContext,\n HarnessErrorPolicy,\n HarnessErrorSeverity,\n HarnessErrorShape,\n} from \"./types/errors.js\";\n\nconst harnessErrorProperty = \"__harnessError\";\n\nconst codeDefaults: Record<HarnessErrorCode, {\n category: HarnessErrorCategory;\n severity: HarnessErrorSeverity;\n recoverable: boolean;\n publicMessage: string;\n}> = {\n \"run.failed\": {\n category: \"run\",\n severity: \"fatal\",\n recoverable: false,\n publicMessage: \"Run failed.\",\n },\n \"run.aborted\": {\n category: \"run\",\n severity: \"warn\",\n recoverable: false,\n publicMessage: \"Run aborted.\",\n },\n \"model.failed\": {\n category: \"model\",\n severity: \"error\",\n recoverable: false,\n publicMessage: \"Model provider failed.\",\n },\n \"model.rate_limited\": {\n category: \"model\",\n severity: \"warn\",\n recoverable: false,\n publicMessage: \"Model provider was rate limited.\",\n },\n \"model.timeout\": {\n category: \"model\",\n severity: \"warn\",\n recoverable: false,\n publicMessage: \"Model provider timed out.\",\n },\n \"tool.failed\": {\n category: \"tool\",\n severity: \"error\",\n recoverable: true,\n publicMessage: \"Tool execution failed.\",\n },\n \"tool.args.invalid_schema\": {\n category: \"tool\",\n severity: \"error\",\n recoverable: true,\n publicMessage: \"Tool arguments did not match schema.\",\n },\n \"tool.approval.denied\": {\n category: \"approval\",\n severity: \"warn\",\n recoverable: true,\n publicMessage: \"Tool approval was denied.\",\n },\n \"context.provider.failed\": {\n category: \"context\",\n severity: \"error\",\n recoverable: false,\n publicMessage: \"Context provider failed.\",\n },\n \"storage.write_failed\": {\n category: \"storage\",\n severity: \"error\",\n recoverable: true,\n publicMessage: \"Storage write failed.\",\n },\n \"sandbox.exec.failed\": {\n category: \"sandbox\",\n severity: \"error\",\n recoverable: true,\n publicMessage: \"Sandbox execution failed.\",\n },\n \"runtime.failed\": {\n category: \"runtime\",\n severity: \"fatal\",\n recoverable: false,\n publicMessage: \"Runtime failed.\",\n },\n};\n\nfunction isObject(value: unknown): value is Record<string, unknown> {\n return (typeof value === \"object\" && value !== null) || typeof value === \"function\";\n}\n\nfunction asRecord(value: unknown): Record<string, unknown> | undefined {\n return isObject(value) ? value as Record<string, unknown> : undefined;\n}\n\nfunction stringField(value: unknown, field: string): string | undefined {\n const record = asRecord(value);\n return typeof record?.[field] === \"string\" ? record[field] : undefined;\n}\n\nfunction numberField(value: unknown, field: string): number | undefined {\n const record = asRecord(value);\n return typeof record?.[field] === \"number\" ? record[field] : undefined;\n}\n\nfunction errorMessage(error: unknown, fallback = \"Unknown error\"): string {\n if (error instanceof Error) return error.message || fallback;\n if (typeof error === \"string\") return error || fallback;\n return String(error ?? fallback);\n}\n\nfunction errorName(error: unknown): string | undefined {\n return error instanceof Error ? error.name : stringField(error, \"name\");\n}\n\nfunction errorStack(error: unknown): string | undefined {\n return error instanceof Error ? error.stack : stringField(error, \"stack\");\n}\n\nfunction errorCause(error: unknown): unknown {\n if (error instanceof Error && \"cause\" in error) return error.cause;\n return asRecord(error)?.cause;\n}\n\nfunction attachedHarnessError(error: unknown): HarnessErrorShape | undefined {\n const attached = asRecord(error)?.[harnessErrorProperty];\n return isHarnessErrorShape(attached) ? attached : undefined;\n}\n\nfunction isAbortError(error: unknown): boolean {\n const name = errorName(error)?.toLowerCase();\n const message = errorMessage(error, \"\").toLowerCase();\n const code = stringField(error, \"code\")?.toLowerCase();\n return name === \"aborterror\"\n || code === \"abort_err\"\n || message === \"run aborted.\"\n || message.includes(\"aborted\")\n || message.includes(\"cancelled\")\n || message.includes(\"canceled\");\n}\n\nfunction modelErrorCode(error: unknown): HarnessErrorCode {\n const status = numberField(error, \"status\") ?? numberField(error, \"statusCode\");\n const code = stringField(error, \"code\")?.toLowerCase() ?? \"\";\n const name = errorName(error)?.toLowerCase() ?? \"\";\n const message = errorMessage(error, \"\").toLowerCase();\n\n if (status === 429 || code.includes(\"rate\") || message.includes(\"rate limit\") || message.includes(\"too many requests\")) {\n return \"model.rate_limited\";\n }\n if (\n code.includes(\"timeout\")\n || code === \"etimedout\"\n || name.includes(\"timeout\")\n || message.includes(\"timed out\")\n || message.includes(\"timeout\")\n ) {\n return \"model.timeout\";\n }\n return \"model.failed\";\n}\n\nfunction defaultCode(error: unknown, context: HarnessErrorContext): HarnessErrorCode {\n if (isAbortError(error)) return \"run.aborted\";\n if (context.code) return context.code;\n if (context.category === \"model\" || context.source?.kind === \"model_provider\") return modelErrorCode(error);\n if (context.category === \"tool\" || context.source?.kind === \"tool\") return \"tool.failed\";\n if (context.category === \"context\" || context.source?.kind === \"context_provider\") return \"context.provider.failed\";\n if (context.category === \"storage\") return \"storage.write_failed\";\n if (context.category === \"sandbox\") return \"sandbox.exec.failed\";\n if (context.category === \"run\") return \"run.failed\";\n return \"runtime.failed\";\n}\n\nfunction isHarnessErrorCode(value: unknown): value is HarnessErrorCode {\n return typeof value === \"string\" && value in codeDefaults;\n}\n\nfunction applyDefaults(shape: Partial<HarnessErrorShape> & { message: string }, context: HarnessErrorContext): HarnessErrorShape {\n const code = isHarnessErrorCode(shape.code) ? shape.code : defaultCode(undefined, context);\n const defaults = codeDefaults[code];\n const contextMatchesCode = context.code === undefined || context.code === code;\n return {\n code,\n message: shape.message,\n publicMessage: shape.publicMessage ?? context.publicMessage ?? defaults.publicMessage,\n category: shape.category ?? (contextMatchesCode ? context.category : undefined) ?? defaults.category,\n severity: shape.severity ?? (contextMatchesCode ? context.severity : undefined) ?? defaults.severity,\n recoverable: shape.recoverable ?? (contextMatchesCode ? context.recoverable : undefined) ?? defaults.recoverable,\n source: shape.source ?? context.source,\n name: shape.name,\n stack: shape.stack,\n cause: shape.cause,\n details: shape.details ?? context.details,\n };\n}\n\nexport function isHarnessErrorShape(value: unknown): value is HarnessErrorShape {\n if (!value || typeof value !== \"object\") return false;\n const candidate = value as Partial<HarnessErrorShape>;\n return isHarnessErrorCode(candidate.code)\n && typeof candidate.message === \"string\"\n && typeof candidate.category === \"string\"\n && typeof candidate.severity === \"string\"\n && typeof candidate.recoverable === \"boolean\";\n}\n\nexport function annotateHarnessError(error: unknown, shape: HarnessErrorShape): void {\n if (!isObject(error)) return;\n try {\n Object.defineProperty(error, harnessErrorProperty, {\n value: shape,\n enumerable: false,\n configurable: true,\n });\n } catch {\n // Annotation is best-effort and must never replace the original failure.\n }\n}\n\nexport function normalizeHarnessError(\n error: unknown,\n context: HarnessErrorContext = {},\n policy: HarnessErrorPolicy = {},\n): HarnessErrorShape {\n const existing = isHarnessErrorShape(error) ? error : attachedHarnessError(error);\n const inferredCode = existing?.code ?? defaultCode(error, context);\n const defaults = codeDefaults[inferredCode];\n const base = existing\n ? applyDefaults({\n ...existing,\n message: existing.message || context.message || defaults.publicMessage,\n }, context)\n : applyDefaults({\n code: inferredCode,\n message: context.message ?? errorMessage(error, defaults.publicMessage),\n publicMessage: context.publicMessage,\n source: context.source,\n name: errorName(error),\n stack: errorStack(error),\n cause: errorCause(error),\n details: context.details,\n }, context);\n\n const classified = policy.classify?.(error, context) ?? {};\n const merged: Partial<HarnessErrorShape> & { message: string } = {\n ...base,\n ...classified,\n message: classified.message ?? base.message,\n };\n if (classified.code && classified.category === undefined) merged.category = undefined;\n if (classified.code && classified.severity === undefined) merged.severity = undefined;\n if (classified.code && classified.recoverable === undefined) merged.recoverable = undefined;\n if (classified.code && classified.publicMessage === undefined) merged.publicMessage = undefined;\n return applyDefaults(merged, context);\n}\n\nexport function sanitizeHarnessError(\n error: HarnessErrorShape,\n policy: HarnessErrorPolicy = {},\n): HarnessErrorShape {\n const expose = policy.exposeInternalErrors === true;\n const includeStack = expose || policy.includeStackInStatus === true;\n return {\n code: error.code,\n message: expose ? error.message : error.publicMessage ?? error.message,\n publicMessage: error.publicMessage,\n category: error.category,\n severity: error.severity,\n recoverable: error.recoverable,\n source: error.source,\n name: error.name,\n stack: includeStack ? error.stack : undefined,\n cause: expose ? error.cause : undefined,\n details: expose ? error.details : undefined,\n };\n}\n","import type {\n HarnessErrorCategory,\n HarnessErrorCode,\n HarnessErrorSeverity,\n} from \"../runtime/types/errors.js\";\n\nexport type HarnessLogLevel = \"debug\" | \"info\" | \"warn\" | \"error\";\nexport type HarnessLoggingLevel = \"silent\" | HarnessLogLevel;\n\nexport type HarnessLogCategory =\n | \"session\"\n | \"run\"\n | \"turn\"\n | \"context\"\n | \"model\"\n | \"tool\"\n | \"approval\"\n | \"snapshot\"\n | \"transcript\"\n | \"storage\"\n | \"agent\";\n\nexport type HarnessLogSourceKind =\n | \"runtime\"\n | \"model_provider\"\n | \"tool\"\n | \"hook\"\n | \"context_provider\"\n | \"mode\"\n | \"user\"\n | \"custom\";\n\nexport interface HarnessLogSource {\n kind: HarnessLogSourceKind;\n id?: string;\n type?: string;\n name?: string;\n label?: string;\n}\n\nexport interface HarnessLogError {\n code?: HarnessErrorCode;\n category?: HarnessErrorCategory;\n severity?: HarnessErrorSeverity;\n recoverable?: boolean;\n name?: string;\n message: string;\n stack?: string;\n}\n\nexport interface HarnessLogRecord {\n id: string;\n at: string;\n level: HarnessLogLevel;\n category: HarnessLogCategory;\n type: string;\n message: string;\n sessionId?: string;\n runId?: string;\n turnId?: string;\n modeId?: string;\n branchId?: string;\n source: HarnessLogSource;\n correlationId?: string;\n causationId?: string;\n spanId?: string;\n parentSpanId?: string;\n durationMs?: number;\n fields?: Record<string, unknown>;\n error?: HarnessLogError;\n}\n\nexport abstract class HarnessLog<TFields = Record<string, unknown>> {\n abstract level: HarnessLogLevel;\n abstract category: HarnessLogCategory;\n abstract message(fields: TFields): string;\n levelFor?(fields: TFields): HarnessLogLevel;\n redact?(fields: TFields): TFields;\n}\n\nexport type HarnessLogClass<TFields = Record<string, unknown>> = new () => HarnessLog<TFields>;\n\nexport abstract class HarnessLogSink {\n abstract write(record: HarnessLogRecord): void | Promise<void>;\n flush?(): void | Promise<void>;\n close?(): void | Promise<void>;\n}\n\nexport interface HarnessLoggingConfig {\n level?: HarnessLoggingLevel;\n sinks?: HarnessLogSink[];\n format?: \"pretty\" | \"json\";\n modelDeltas?: \"none\" | \"summary\" | \"full\" | boolean;\n events?: boolean;\n redact?: {\n keys?: string[];\n replacement?: string;\n };\n}\n\nexport interface HarnessRedactionConfig {\n keys?: string[];\n replacement?: string;\n}\n\nexport interface HarnessLogContext {\n sessionId?: string;\n runId?: string;\n turnId?: string;\n modeId?: string;\n branchId?: string;\n source?: HarnessLogSource;\n correlationId?: string;\n causationId?: string;\n spanId?: string;\n parentSpanId?: string;\n durationMs?: number;\n}\n","import type { HarnessLogLevel, HarnessLoggingLevel } from \"../types.js\";\n\nconst levelOrder: Record<HarnessLoggingLevel, number> = {\n silent: 0,\n error: 1,\n warn: 2,\n info: 3,\n debug: 4,\n};\n\nexport function shouldWriteLog(recordLevel: HarnessLogLevel, configuredLevel: HarnessLoggingLevel | undefined): boolean {\n const level = configuredLevel ?? \"silent\";\n return level !== \"silent\" && levelOrder[recordLevel] <= levelOrder[level];\n}\n\nexport function consoleMethod(level: HarnessLogLevel): \"error\" | \"warn\" | \"log\" {\n if (level === \"error\") return \"error\";\n if (level === \"warn\") return \"warn\";\n return \"log\";\n}\n\nexport function formatValue(value: unknown): string {\n if (typeof value === \"string\") return value;\n if (typeof value === \"number\" || typeof value === \"boolean\") return String(value);\n if (value == null) return String(value);\n return JSON.stringify(value);\n}\n","import { HarnessLogSink, type HarnessLogRecord, type HarnessLoggingLevel } from \"../types.js\";\nimport { consoleMethod, formatValue, shouldWriteLog } from \"./shared.js\";\n\nexport interface ConsoleLogSinkOptions {\n format?: \"pretty\" | \"json\";\n level?: HarnessLoggingLevel;\n console?: Pick<Console, \"log\" | \"warn\" | \"error\">;\n}\n\nexport class ConsoleLogSink extends HarnessLogSink {\n private readonly format: \"pretty\" | \"json\";\n private readonly level?: HarnessLoggingLevel;\n private readonly target: Pick<Console, \"log\" | \"warn\" | \"error\">;\n\n constructor(options: ConsoleLogSinkOptions = {}) {\n super();\n this.format = options.format ?? \"pretty\";\n this.level = options.level;\n this.target = options.console ?? console;\n }\n\n write(record: HarnessLogRecord): void {\n if (this.level && !shouldWriteLog(record.level, this.level)) return;\n const method = consoleMethod(record.level);\n if (this.format === \"json\") {\n this.target[method](JSON.stringify(record));\n return;\n }\n const fields = Object.entries(record.fields ?? {})\n .map(([key, value]) => `${key}=${formatValue(value)}`)\n .join(\" \");\n const context = [\n record.sessionId ? `session=${record.sessionId}` : undefined,\n record.runId ? `run=${record.runId}` : undefined,\n record.durationMs !== undefined ? `durationMs=${record.durationMs}` : undefined,\n ].filter(Boolean).join(\" \");\n const suffix = [fields, context].filter(Boolean).join(\" \");\n this.target[method](`[${record.level}] ${record.message}${suffix ? ` ${suffix}` : \"\"}`);\n }\n}\n","import { HarnessLogSink, type HarnessLogRecord, type HarnessLoggingLevel } from \"../types.js\";\nimport { shouldWriteLog } from \"./shared.js\";\n\nexport interface MemoryLogSinkOptions {\n level?: HarnessLoggingLevel;\n}\n\nexport class MemoryLogSink extends HarnessLogSink {\n readonly records: HarnessLogRecord[] = [];\n private readonly level?: HarnessLoggingLevel;\n\n constructor(options: MemoryLogSinkOptions = {}) {\n super();\n this.level = options.level;\n }\n\n write(record: HarnessLogRecord): void {\n if (this.level && !shouldWriteLog(record.level, this.level)) return;\n this.records.push(record);\n }\n\n clear(): void {\n this.records.length = 0;\n }\n}\n","import type { HarnessRedactionConfig } from \"./types.js\";\nimport { isHarnessErrorShape } from \"../runtime/errors.js\";\nimport type { HarnessErrorShape } from \"../runtime/types/errors.js\";\n\nexport const defaultRedactKeys = [\n \"password\",\n \"token\",\n \"apiKey\",\n \"authorization\",\n \"secret\",\n \"cookie\",\n \"setCookie\",\n];\n\nfunction normalizeKey(key: string): string {\n return key.replace(/[^a-zA-Z0-9]/g, \"\").toLowerCase();\n}\n\nexport function shouldRedactKey(key: string, keys: string[]): boolean {\n const normalized = normalizeKey(key);\n return keys.some((candidate) => {\n const sensitive = normalizeKey(candidate);\n return normalized === sensitive || normalized.includes(sensitive);\n });\n}\n\nexport function redactError(error: Error | HarnessErrorShape): {\n code?: HarnessErrorShape[\"code\"];\n category?: HarnessErrorShape[\"category\"];\n severity?: HarnessErrorShape[\"severity\"];\n recoverable?: boolean;\n name?: string;\n message: string;\n stack?: string;\n} {\n if (isHarnessErrorShape(error)) {\n return {\n code: error.code,\n category: error.category,\n severity: error.severity,\n recoverable: error.recoverable,\n name: error.name,\n message: error.message,\n stack: error.stack,\n };\n }\n return {\n name: error.name,\n message: error.message,\n stack: error.stack,\n };\n}\n\nexport function redactValue(\n value: unknown,\n config: HarnessRedactionConfig = {},\n seen = new WeakSet<object>(),\n): unknown {\n const keys = config.keys ?? defaultRedactKeys;\n const replacement = config.replacement ?? \"[redacted]\";\n\n if (isHarnessErrorShape(value)) {\n if (seen.has(value)) return \"[circular]\";\n seen.add(value);\n return {\n ...redactError(value),\n publicMessage: value.publicMessage,\n source: value.source,\n details: redactValue(value.details, config, seen),\n cause: redactValue(value.cause, config, seen),\n };\n }\n if (value instanceof Error) return redactError(value);\n if (value === null || value === undefined) return value;\n if (typeof value !== \"object\") return value;\n if (seen.has(value)) return \"[circular]\";\n seen.add(value);\n\n if (Array.isArray(value)) {\n return value.map((item) => redactValue(item, config, seen));\n }\n\n const output: Record<string, unknown> = {};\n for (const [key, item] of Object.entries(value as Record<string, unknown>)) {\n output[key] = shouldRedactKey(key, keys) ? replacement : redactValue(item, config, seen);\n }\n return output;\n}\n\nexport function summarizeValue(value: unknown, config: HarnessRedactionConfig = {}): unknown {\n const keys = config.keys ?? defaultRedactKeys;\n const replacement = config.replacement ?? \"[redacted]\";\n\n const visit = (item: unknown, key?: string): unknown => {\n if (key && shouldRedactKey(key, keys)) return replacement;\n if (item instanceof Error || isHarnessErrorShape(item)) {\n const error = redactError(item);\n return {\n ...(error.code ? { code: error.code } : {}),\n name: error.name,\n message: error.message,\n };\n }\n if (item === null) return \"null\";\n if (item === undefined) return \"undefined\";\n if (typeof item === \"string\") return `string(${item.length})`;\n if (typeof item === \"number\" || typeof item === \"boolean\") return item;\n if (typeof item === \"bigint\") return `${item.toString()}n`;\n if (typeof item === \"symbol\") return \"symbol\";\n if (typeof item === \"function\") return \"function\";\n if (Array.isArray(item)) return `array(${item.length})`;\n if (typeof item === \"object\") {\n const objectKeys = Object.keys(item as Record<string, unknown>)\n .map((objectKey) => shouldRedactKey(objectKey, keys) ? replacement : objectKey);\n return `object(${objectKeys.slice(0, 8).join(\",\")}${objectKeys.length > 8 ? \",...\" : \"\"})`;\n }\n return String(item);\n };\n\n if (value && typeof value === \"object\" && !Array.isArray(value) && !(value instanceof Error)) {\n const output: Record<string, unknown> = {};\n for (const [key, item] of Object.entries(value as Record<string, unknown>)) output[key] = visit(item, key);\n return output;\n }\n return visit(value);\n}\n","let sequence = 0;\n\nexport function randomId(): string {\n const cryptoValue = globalThis.crypto as { randomUUID?: () => string } | undefined;\n if (cryptoValue?.randomUUID) return cryptoValue.randomUUID();\n sequence += 1;\n return `id_${Date.now().toString(36)}_${sequence.toString(36)}`;\n}\n","import { randomId } from \"../runtime/id.js\";\nimport type {\n HarnessLogClass,\n HarnessLogContext,\n HarnessLogRecord,\n HarnessRedactionConfig,\n} from \"./types.js\";\nimport { redactError, redactValue } from \"./redaction.js\";\nimport { isHarnessErrorShape } from \"../runtime/errors.js\";\nimport type { HarnessErrorShape } from \"../runtime/types/errors.js\";\n\nfunction nowIso(): string {\n return new Date().toISOString();\n}\n\nfunction plainObject(value: unknown): Record<string, unknown> | undefined {\n if (!value || typeof value !== \"object\" || Array.isArray(value) || value instanceof Error) return undefined;\n return value as Record<string, unknown>;\n}\n\nfunction logErrorFromFields(value: unknown): Error | HarnessErrorShape | undefined {\n if (value instanceof Error || isHarnessErrorShape(value)) return value;\n if (value && typeof value === \"object\" && \"error\" in value) {\n const candidate = (value as { error?: unknown }).error;\n if (candidate instanceof Error || isHarnessErrorShape(candidate)) return candidate;\n }\n return undefined;\n}\n\nexport function normalizeHarnessLog<TFields>(\n logClass: HarnessLogClass<TFields>,\n fields: TFields,\n context: HarnessLogContext = {},\n redaction: HarnessRedactionConfig = {},\n): HarnessLogRecord {\n const log = new logClass();\n const originalFields = log.redact ? log.redact(fields) : fields;\n const originalError = logErrorFromFields(originalFields);\n const redactedFields = redactValue(originalFields, redaction) as TFields;\n const fieldsObject = plainObject(redactedFields);\n return {\n id: randomId(),\n at: nowIso(),\n level: log.levelFor?.(redactedFields) ?? log.level,\n category: log.category,\n type: logClass.name,\n message: log.message(redactedFields),\n sessionId: context.sessionId,\n runId: context.runId,\n turnId: context.turnId,\n modeId: context.modeId,\n branchId: context.branchId,\n source: context.source ?? { kind: \"runtime\" },\n correlationId: context.correlationId,\n causationId: context.causationId,\n spanId: context.spanId,\n parentSpanId: context.parentSpanId,\n durationMs: context.durationMs,\n fields: fieldsObject,\n error: originalError ? redactError(originalError) : undefined,\n };\n}\n","import { HarnessLog } from \"./types.js\";\n\nexport {\n HarnessLog,\n HarnessLogSink,\n type HarnessLogCategory,\n type HarnessLogClass,\n type HarnessLogContext,\n type HarnessLogError,\n type HarnessLogLevel,\n type HarnessLoggingConfig,\n type HarnessLoggingLevel,\n type HarnessLogRecord,\n type HarnessLogSource,\n type HarnessLogSourceKind,\n type HarnessRedactionConfig,\n} from \"./types.js\";\nexport {\n defaultRedactKeys,\n redactError,\n redactValue,\n shouldRedactKey,\n summarizeValue,\n} from \"./redaction.js\";\nexport { normalizeHarnessLog } from \"./normalize.js\";\nexport {\n ConsoleLogSink,\n MemoryLogSink,\n shouldWriteLog,\n type ConsoleLogSinkOptions,\n type MemoryLogSinkOptions,\n} from \"./sinks.js\";\n\nexport class AgentDebugLog extends HarnessLog<{ message: string }> {\n level = \"debug\" as const;\n category = \"agent\" as const;\n message(fields: { message: string }): string {\n return fields.message;\n }\n}\n\nexport class AgentInfoLog extends HarnessLog<{ message: string }> {\n level = \"info\" as const;\n category = \"agent\" as const;\n message(fields: { message: string }): string {\n return fields.message;\n }\n}\n\nexport class AgentWarnLog extends HarnessLog<{ message: string }> {\n level = \"warn\" as const;\n category = \"agent\" as const;\n message(fields: { message: string }): string {\n return fields.message;\n }\n}\n\nexport class AgentErrorLog extends HarnessLog<{ message: string; error?: unknown }> {\n level = \"error\" as const;\n category = \"agent\" as const;\n message(fields: { message: string }): string {\n return fields.message;\n }\n}\n"],"mappings":"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","names":[]}
@@ -3,7 +3,7 @@ import {
3
3
  } from "./chunk-OBKS4AJR.js";
4
4
  import {
5
5
  HarnessEvent
6
- } from "./chunk-B4Q6CPYO.js";
6
+ } from "./chunk-TCHZYK5Y.js";
7
7
 
8
8
  // src/runtime/events.ts
9
9
  var RunStartEvent = class extends HarnessEvent {
@@ -77,10 +77,28 @@ var RunEndEvent = class extends HarnessEvent {
77
77
  finalAnswer: s.string()
78
78
  });
79
79
  };
80
+ var RunFailedEvent = class extends HarnessEvent {
81
+ static type = "run:failed";
82
+ static schema = s.object({
83
+ error: s.unknown(),
84
+ metrics: s.unknown(),
85
+ finalAnswer: s.string().optional()
86
+ });
87
+ };
88
+ var RunAbortedEvent = class extends HarnessEvent {
89
+ static type = "run:aborted";
90
+ static schema = s.object({
91
+ error: s.unknown(),
92
+ metrics: s.unknown(),
93
+ finalAnswer: s.string().optional()
94
+ });
95
+ };
80
96
  var ErrorEvent = class extends HarnessEvent {
81
97
  static type = "error";
82
98
  static schema = s.object({
99
+ error: s.unknown(),
83
100
  message: s.string(),
101
+ code: s.string().optional(),
84
102
  recoverable: s.boolean().optional(),
85
103
  details: s.unknown().optional()
86
104
  });
@@ -168,6 +186,8 @@ var runtimeEventClasses = [
168
186
  ToolEndEvent,
169
187
  TurnEndEvent,
170
188
  RunEndEvent,
189
+ RunFailedEvent,
190
+ RunAbortedEvent,
171
191
  ErrorEvent,
172
192
  MessageStartEvent,
173
193
  MessageDeltaEvent,
@@ -191,6 +211,8 @@ export {
191
211
  ToolEndEvent,
192
212
  TurnEndEvent,
193
213
  RunEndEvent,
214
+ RunFailedEvent,
215
+ RunAbortedEvent,
194
216
  ErrorEvent,
195
217
  MessageStartEvent,
196
218
  MessageDeltaEvent,
@@ -204,4 +226,4 @@ export {
204
226
  TranscriptCursorChangedEvent,
205
227
  runtimeEventClasses
206
228
  };
207
- //# sourceMappingURL=chunk-JIJHGB6H.js.map
229
+ //# sourceMappingURL=chunk-3QOAFCCZ.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/runtime/events.ts"],"sourcesContent":["import { HarnessEvent } from \"./types.js\";\nimport { s } from \"../schema/index.js\";\nimport type { HarnessErrorCode, HarnessErrorShape, RunMetrics } from \"./types.js\";\n\nexport class RunStartEvent extends HarnessEvent<{\n agentKey: string;\n modeId: string;\n workDir: string;\n outputDir?: string;\n}> {\n static override type = \"run:start\";\n static override schema = s.object({\n agentKey: s.string().min(1),\n modeId: s.string().min(1),\n workDir: s.string(),\n outputDir: s.string().optional(),\n });\n}\n\nexport class TurnStartEvent extends HarnessEvent<{\n turnId: string;\n input: string;\n}> {\n static override type = \"turn:start\";\n static override schema = s.object({\n turnId: s.string().min(1),\n input: s.string(),\n });\n}\n\nexport class ContextReadyEvent extends HarnessEvent<{\n snapshotId: string;\n providerCount: number;\n contributionCount: number;\n}> {\n static override type = \"context:ready\";\n static override schema = s.object({\n snapshotId: s.string().min(1),\n providerCount: s.number().int().min(0),\n contributionCount: s.number().int().min(0),\n });\n}\n\nexport class ModelBeforeEvent extends HarnessEvent<{\n model: string;\n messageCount: number;\n}> {\n static override type = \"model:before\";\n static override schema = s.object({\n model: s.string().min(1),\n messageCount: s.number().int().min(0),\n });\n}\n\nexport class ModelAfterEvent extends HarnessEvent<{\n model: string;\n content: string;\n usage?: unknown;\n finishReason?: string;\n}> {\n static override type = \"model:after\";\n static override schema = s.object({\n model: s.string().min(1),\n content: s.string(),\n usage: s.unknown().optional(),\n finishReason: s.string().optional(),\n });\n}\n\nexport class ToolStartEvent extends HarnessEvent<{\n id: string;\n name: string;\n args: unknown;\n}> {\n static override type = \"tool:start\";\n static override schema = s.object({\n id: s.string().min(1),\n name: s.string().min(1),\n args: s.unknown(),\n });\n}\n\nexport class ToolEndEvent extends HarnessEvent<{\n id: string;\n name: string;\n durationMs: number;\n result: unknown;\n}> {\n static override type = \"tool:end\";\n static override schema = s.object({\n id: s.string().min(1),\n name: s.string().min(1),\n durationMs: s.number().min(0),\n result: s.unknown(),\n });\n}\n\nexport class TurnEndEvent extends HarnessEvent<{\n turnId: string;\n finalAnswer: string;\n}> {\n static override type = \"turn:end\";\n static override schema = s.object({\n turnId: s.string().min(1),\n finalAnswer: s.string(),\n });\n}\n\nexport class RunEndEvent extends HarnessEvent<{\n metrics: unknown;\n finalAnswer: string;\n}> {\n static override type = \"run:end\";\n static override schema = s.object({\n metrics: s.unknown(),\n finalAnswer: s.string(),\n });\n}\n\nexport class RunFailedEvent extends HarnessEvent<{\n error: HarnessErrorShape;\n metrics: RunMetrics;\n finalAnswer?: string;\n}> {\n static override type = \"run:failed\";\n static override schema = s.object({\n error: s.unknown(),\n metrics: s.unknown(),\n finalAnswer: s.string().optional(),\n });\n}\n\nexport class RunAbortedEvent extends HarnessEvent<{\n error: HarnessErrorShape;\n metrics: RunMetrics;\n finalAnswer?: string;\n}> {\n static override type = \"run:aborted\";\n static override schema = s.object({\n error: s.unknown(),\n metrics: s.unknown(),\n finalAnswer: s.string().optional(),\n });\n}\n\nexport class ErrorEvent extends HarnessEvent<{\n error: HarnessErrorShape;\n message: string;\n code?: HarnessErrorCode;\n recoverable?: boolean;\n details?: unknown;\n}> {\n static override type = \"error\";\n static override schema = s.object({\n error: s.unknown(),\n message: s.string(),\n code: s.string().optional(),\n recoverable: s.boolean().optional(),\n details: s.unknown().optional(),\n });\n}\n\nexport class MessageStartEvent extends HarnessEvent<{\n role: string;\n}> {\n static override type = \"message:start\";\n static override schema = s.object({\n role: s.string().min(1),\n });\n}\n\nexport class MessageDeltaEvent extends HarnessEvent<{\n role: \"assistant\";\n text: string;\n}> {\n static override type = \"message:delta\";\n static override schema = s.object({\n role: s.literal(\"assistant\"),\n text: s.string(),\n });\n}\n\nexport class MessageEndEvent extends HarnessEvent<{\n message: unknown;\n}> {\n static override type = \"message:end\";\n static override schema = s.object({\n message: s.unknown(),\n });\n}\n\nexport class ToolApprovalRequestedEvent extends HarnessEvent<{\n id: string;\n name: string;\n args: unknown;\n modeId?: string;\n risk?: string;\n permissions?: unknown[];\n}> {\n static override type = \"tool:approval_requested\";\n static override schema = s.object({\n id: s.string().min(1),\n name: s.string().min(1),\n args: s.unknown(),\n modeId: s.string().optional(),\n risk: s.string().optional(),\n permissions: s.array(s.unknown()).optional(),\n });\n}\n\nexport class ToolApprovalResolvedEvent extends HarnessEvent<{\n id: string;\n name: string;\n args: unknown;\n decision: \"approved\" | \"denied\";\n modeId?: string;\n}> {\n static override type = \"tool:approval_resolved\";\n static override schema = s.object({\n id: s.string().min(1),\n name: s.string().min(1),\n args: s.unknown(),\n decision: s.enum([\"approved\", \"denied\"] as const),\n modeId: s.string().optional(),\n });\n}\n\nexport class ModeChangedEvent extends HarnessEvent<{\n previousMode: string;\n mode: string;\n input?: unknown;\n}> {\n static override type = \"mode:changed\";\n static override schema = s.object({\n previousMode: s.string().min(1),\n mode: s.string().min(1),\n input: s.unknown().optional(),\n });\n}\n\nexport class SnapshotCreatedEvent extends HarnessEvent<{\n snapshot: unknown;\n}> {\n static override type = \"snapshot:created\";\n static override schema = s.object({\n snapshot: s.unknown(),\n });\n}\n\nexport class SnapshotRestoredEvent extends HarnessEvent<{\n snapshot: unknown;\n}> {\n static override type = \"snapshot:restored\";\n static override schema = s.object({\n snapshot: s.unknown(),\n });\n}\n\nexport class SnapshotDeletedEvent extends HarnessEvent<{\n snapshot: unknown;\n}> {\n static override type = \"snapshot:deleted\";\n static override schema = s.object({\n snapshot: s.unknown(),\n });\n}\n\nexport class TranscriptCursorChangedEvent extends HarnessEvent<{\n previousCursor: unknown;\n cursor: unknown;\n}> {\n static override type = \"transcript:cursor_changed\";\n static override schema = s.object({\n previousCursor: s.unknown(),\n cursor: s.unknown(),\n });\n}\n\nexport const runtimeEventClasses = [\n RunStartEvent,\n TurnStartEvent,\n ContextReadyEvent,\n ModelBeforeEvent,\n ModelAfterEvent,\n ToolStartEvent,\n ToolEndEvent,\n TurnEndEvent,\n RunEndEvent,\n RunFailedEvent,\n RunAbortedEvent,\n ErrorEvent,\n MessageStartEvent,\n MessageDeltaEvent,\n MessageEndEvent,\n ToolApprovalRequestedEvent,\n ToolApprovalResolvedEvent,\n ModeChangedEvent,\n SnapshotCreatedEvent,\n SnapshotRestoredEvent,\n SnapshotDeletedEvent,\n TranscriptCursorChangedEvent,\n];\n"],"mappings":";;;;;;;;AAIO,IAAM,gBAAN,cAA4B,aAKhC;AAAA,EACD,OAAgB,OAAO;AAAA,EACvB,OAAgB,SAAS,EAAE,OAAO;AAAA,IAChC,UAAU,EAAE,OAAO,EAAE,IAAI,CAAC;AAAA,IAC1B,QAAQ,EAAE,OAAO,EAAE,IAAI,CAAC;AAAA,IACxB,SAAS,EAAE,OAAO;AAAA,IAClB,WAAW,EAAE,OAAO,EAAE,SAAS;AAAA,EACjC,CAAC;AACH;AAEO,IAAM,iBAAN,cAA6B,aAGjC;AAAA,EACD,OAAgB,OAAO;AAAA,EACvB,OAAgB,SAAS,EAAE,OAAO;AAAA,IAChC,QAAQ,EAAE,OAAO,EAAE,IAAI,CAAC;AAAA,IACxB,OAAO,EAAE,OAAO;AAAA,EAClB,CAAC;AACH;AAEO,IAAM,oBAAN,cAAgC,aAIpC;AAAA,EACD,OAAgB,OAAO;AAAA,EACvB,OAAgB,SAAS,EAAE,OAAO;AAAA,IAChC,YAAY,EAAE,OAAO,EAAE,IAAI,CAAC;AAAA,IAC5B,eAAe,EAAE,OAAO,EAAE,IAAI,EAAE,IAAI,CAAC;AAAA,IACrC,mBAAmB,EAAE,OAAO,EAAE,IAAI,EAAE,IAAI,CAAC;AAAA,EAC3C,CAAC;AACH;AAEO,IAAM,mBAAN,cAA+B,aAGnC;AAAA,EACD,OAAgB,OAAO;AAAA,EACvB,OAAgB,SAAS,EAAE,OAAO;AAAA,IAChC,OAAO,EAAE,OAAO,EAAE,IAAI,CAAC;AAAA,IACvB,cAAc,EAAE,OAAO,EAAE,IAAI,EAAE,IAAI,CAAC;AAAA,EACtC,CAAC;AACH;AAEO,IAAM,kBAAN,cAA8B,aAKlC;AAAA,EACD,OAAgB,OAAO;AAAA,EACvB,OAAgB,SAAS,EAAE,OAAO;AAAA,IAChC,OAAO,EAAE,OAAO,EAAE,IAAI,CAAC;AAAA,IACvB,SAAS,EAAE,OAAO;AAAA,IAClB,OAAO,EAAE,QAAQ,EAAE,SAAS;AAAA,IAC5B,cAAc,EAAE,OAAO,EAAE,SAAS;AAAA,EACpC,CAAC;AACH;AAEO,IAAM,iBAAN,cAA6B,aAIjC;AAAA,EACD,OAAgB,OAAO;AAAA,EACvB,OAAgB,SAAS,EAAE,OAAO;AAAA,IAChC,IAAI,EAAE,OAAO,EAAE,IAAI,CAAC;AAAA,IACpB,MAAM,EAAE,OAAO,EAAE,IAAI,CAAC;AAAA,IACtB,MAAM,EAAE,QAAQ;AAAA,EAClB,CAAC;AACH;AAEO,IAAM,eAAN,cAA2B,aAK/B;AAAA,EACD,OAAgB,OAAO;AAAA,EACvB,OAAgB,SAAS,EAAE,OAAO;AAAA,IAChC,IAAI,EAAE,OAAO,EAAE,IAAI,CAAC;AAAA,IACpB,MAAM,EAAE,OAAO,EAAE,IAAI,CAAC;AAAA,IACtB,YAAY,EAAE,OAAO,EAAE,IAAI,CAAC;AAAA,IAC5B,QAAQ,EAAE,QAAQ;AAAA,EACpB,CAAC;AACH;AAEO,IAAM,eAAN,cAA2B,aAG/B;AAAA,EACD,OAAgB,OAAO;AAAA,EACvB,OAAgB,SAAS,EAAE,OAAO;AAAA,IAChC,QAAQ,EAAE,OAAO,EAAE,IAAI,CAAC;AAAA,IACxB,aAAa,EAAE,OAAO;AAAA,EACxB,CAAC;AACH;AAEO,IAAM,cAAN,cAA0B,aAG9B;AAAA,EACD,OAAgB,OAAO;AAAA,EACvB,OAAgB,SAAS,EAAE,OAAO;AAAA,IAChC,SAAS,EAAE,QAAQ;AAAA,IACnB,aAAa,EAAE,OAAO;AAAA,EACxB,CAAC;AACH;AAEO,IAAM,iBAAN,cAA6B,aAIjC;AAAA,EACD,OAAgB,OAAO;AAAA,EACvB,OAAgB,SAAS,EAAE,OAAO;AAAA,IAChC,OAAO,EAAE,QAAQ;AAAA,IACjB,SAAS,EAAE,QAAQ;AAAA,IACnB,aAAa,EAAE,OAAO,EAAE,SAAS;AAAA,EACnC,CAAC;AACH;AAEO,IAAM,kBAAN,cAA8B,aAIlC;AAAA,EACD,OAAgB,OAAO;AAAA,EACvB,OAAgB,SAAS,EAAE,OAAO;AAAA,IAChC,OAAO,EAAE,QAAQ;AAAA,IACjB,SAAS,EAAE,QAAQ;AAAA,IACnB,aAAa,EAAE,OAAO,EAAE,SAAS;AAAA,EACnC,CAAC;AACH;AAEO,IAAM,aAAN,cAAyB,aAM7B;AAAA,EACD,OAAgB,OAAO;AAAA,EACvB,OAAgB,SAAS,EAAE,OAAO;AAAA,IAChC,OAAO,EAAE,QAAQ;AAAA,IACjB,SAAS,EAAE,OAAO;AAAA,IAClB,MAAM,EAAE,OAAO,EAAE,SAAS;AAAA,IAC1B,aAAa,EAAE,QAAQ,EAAE,SAAS;AAAA,IAClC,SAAS,EAAE,QAAQ,EAAE,SAAS;AAAA,EAChC,CAAC;AACH;AAEO,IAAM,oBAAN,cAAgC,aAEpC;AAAA,EACD,OAAgB,OAAO;AAAA,EACvB,OAAgB,SAAS,EAAE,OAAO;AAAA,IAChC,MAAM,EAAE,OAAO,EAAE,IAAI,CAAC;AAAA,EACxB,CAAC;AACH;AAEO,IAAM,oBAAN,cAAgC,aAGpC;AAAA,EACD,OAAgB,OAAO;AAAA,EACvB,OAAgB,SAAS,EAAE,OAAO;AAAA,IAChC,MAAM,EAAE,QAAQ,WAAW;AAAA,IAC3B,MAAM,EAAE,OAAO;AAAA,EACjB,CAAC;AACH;AAEO,IAAM,kBAAN,cAA8B,aAElC;AAAA,EACD,OAAgB,OAAO;AAAA,EACvB,OAAgB,SAAS,EAAE,OAAO;AAAA,IAChC,SAAS,EAAE,QAAQ;AAAA,EACrB,CAAC;AACH;AAEO,IAAM,6BAAN,cAAyC,aAO7C;AAAA,EACD,OAAgB,OAAO;AAAA,EACvB,OAAgB,SAAS,EAAE,OAAO;AAAA,IAChC,IAAI,EAAE,OAAO,EAAE,IAAI,CAAC;AAAA,IACpB,MAAM,EAAE,OAAO,EAAE,IAAI,CAAC;AAAA,IACtB,MAAM,EAAE,QAAQ;AAAA,IAChB,QAAQ,EAAE,OAAO,EAAE,SAAS;AAAA,IAC5B,MAAM,EAAE,OAAO,EAAE,SAAS;AAAA,IAC1B,aAAa,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,SAAS;AAAA,EAC7C,CAAC;AACH;AAEO,IAAM,4BAAN,cAAwC,aAM5C;AAAA,EACD,OAAgB,OAAO;AAAA,EACvB,OAAgB,SAAS,EAAE,OAAO;AAAA,IAChC,IAAI,EAAE,OAAO,EAAE,IAAI,CAAC;AAAA,IACpB,MAAM,EAAE,OAAO,EAAE,IAAI,CAAC;AAAA,IACtB,MAAM,EAAE,QAAQ;AAAA,IAChB,UAAU,EAAE,KAAK,CAAC,YAAY,QAAQ,CAAU;AAAA,IAChD,QAAQ,EAAE,OAAO,EAAE,SAAS;AAAA,EAC9B,CAAC;AACH;AAEO,IAAM,mBAAN,cAA+B,aAInC;AAAA,EACD,OAAgB,OAAO;AAAA,EACvB,OAAgB,SAAS,EAAE,OAAO;AAAA,IAChC,cAAc,EAAE,OAAO,EAAE,IAAI,CAAC;AAAA,IAC9B,MAAM,EAAE,OAAO,EAAE,IAAI,CAAC;AAAA,IACtB,OAAO,EAAE,QAAQ,EAAE,SAAS;AAAA,EAC9B,CAAC;AACH;AAEO,IAAM,uBAAN,cAAmC,aAEvC;AAAA,EACD,OAAgB,OAAO;AAAA,EACvB,OAAgB,SAAS,EAAE,OAAO;AAAA,IAChC,UAAU,EAAE,QAAQ;AAAA,EACtB,CAAC;AACH;AAEO,IAAM,wBAAN,cAAoC,aAExC;AAAA,EACD,OAAgB,OAAO;AAAA,EACvB,OAAgB,SAAS,EAAE,OAAO;AAAA,IAChC,UAAU,EAAE,QAAQ;AAAA,EACtB,CAAC;AACH;AAEO,IAAM,uBAAN,cAAmC,aAEvC;AAAA,EACD,OAAgB,OAAO;AAAA,EACvB,OAAgB,SAAS,EAAE,OAAO;AAAA,IAChC,UAAU,EAAE,QAAQ;AAAA,EACtB,CAAC;AACH;AAEO,IAAM,+BAAN,cAA2C,aAG/C;AAAA,EACD,OAAgB,OAAO;AAAA,EACvB,OAAgB,SAAS,EAAE,OAAO;AAAA,IAChC,gBAAgB,EAAE,QAAQ;AAAA,IAC1B,QAAQ,EAAE,QAAQ;AAAA,EACpB,CAAC;AACH;AAEO,IAAM,sBAAsB;AAAA,EACjC;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF;","names":[]}