@harness-kernel/core 0.2.1 → 0.3.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.
- package/dist/agent/context.d.ts +2 -3
- package/dist/agent/context.js +1 -1
- package/dist/agent/event.d.ts +3 -2
- package/dist/agent/event.js +6 -2
- package/dist/agent/hook.d.ts +3 -4
- package/dist/agent/hook.js +1 -1
- package/dist/agent/mode.d.ts +2 -3
- package/dist/agent/mode.js +1 -1
- package/dist/agent/role.js +1 -1
- package/dist/agent/session.d.ts +3 -4
- package/dist/agent/session.js +8 -2
- package/dist/agent/tool.d.ts +39 -3
- package/dist/agent/tool.js +8 -2
- package/dist/agent.d.ts +6 -6
- package/dist/{approval-D_G2w-fW.d.ts → approval-Ch0LwJFM.d.ts} +18 -13
- package/dist/chunk-2NQ3JL7K.js +502 -0
- package/dist/chunk-2NQ3JL7K.js.map +1 -0
- package/dist/{chunk-JIJHGB6H.js → chunk-3QOAFCCZ.js} +24 -2
- package/dist/chunk-3QOAFCCZ.js.map +1 -0
- package/dist/chunk-NCSQEUQC.js +37 -0
- package/dist/chunk-NCSQEUQC.js.map +1 -0
- package/dist/{chunk-B4Q6CPYO.js → chunk-TCHZYK5Y.js} +3 -1
- package/dist/{chunk-B4Q6CPYO.js.map → chunk-TCHZYK5Y.js.map} +1 -1
- package/dist/{chunk-QEVKKJ7N.js → chunk-UKXJIKED.js} +354 -132
- package/dist/chunk-UKXJIKED.js.map +1 -0
- package/dist/{context-BfpLqV11.d.ts → context-Bz9C_rL9.d.ts} +88 -3
- package/dist/errors-DHHy8V3O.d.ts +6 -0
- package/dist/errors-hpkW3tfR.d.ts +112 -0
- package/dist/{event-CKV4EeZ3.d.ts → event-DMBY-R6h.d.ts} +33 -4
- package/dist/{hook-CfBbhUQf.d.ts → hook-DD7uuzE3.d.ts} +2 -2
- package/dist/index.d.ts +21 -15
- package/dist/index.js +19 -6
- package/dist/metrics-DMN8bfY6.d.ts +23 -0
- package/dist/{model-provider-Ch7tzk1x.d.ts → model-provider-DGkLQJWP.d.ts} +6 -4
- package/dist/runner/approval.d.ts +7 -7
- package/dist/runner/event.d.ts +3 -2
- package/dist/runner/event.js +6 -2
- package/dist/runner/logging.d.ts +7 -3
- package/dist/runner/logging.js +11 -1
- package/dist/runner/model-provider.d.ts +6 -6
- package/dist/runner/storage.d.ts +181 -4
- package/dist/{runner-B41JEovO.d.ts → runner-CZHeMHKV.d.ts} +7 -5
- package/dist/runner.d.ts +9 -8
- package/dist/runner.js +11 -5
- package/package.json +2 -2
- package/dist/chunk-JIJHGB6H.js.map +0 -1
- package/dist/chunk-Q44U2CMM.js +0 -239
- package/dist/chunk-Q44U2CMM.js.map +0 -1
- package/dist/chunk-QEVKKJ7N.js.map +0 -1
- package/dist/events-D4xcDi53.d.ts +0 -69
- package/dist/storage-DCZE_hES.d.ts +0 -200
- package/dist/tool-errors-CygY1Nba.d.ts +0 -27
- 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-
|
|
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-
|
|
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":"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","names":[]}
|