agent-inspect 1.4.0 → 1.5.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/CHANGELOG.md +28 -0
- package/README.md +26 -6
- package/docs/ADAPTERS.md +6 -0
- package/docs/API.md +9 -1
- package/docs/CLI.md +64 -0
- package/docs/DIFF.md +8 -0
- package/docs/EXPORTS.md +13 -0
- package/docs/GETTING-STARTED.md +19 -1
- package/docs/LIMITATIONS.md +3 -1
- package/docs/LOGS.md +22 -0
- package/docs/SCHEMA.md +3 -1
- package/docs/SCREENSHOTS.md +190 -9
- package/package.json +51 -1
- package/packages/cli/dist/index.cjs +2880 -2037
- package/packages/cli/dist/index.cjs.map +1 -1
- package/packages/cli/dist/index.mjs +2880 -2037
- package/packages/cli/dist/index.mjs.map +1 -1
- package/packages/core/dist/advanced.cjs +1437 -0
- package/packages/core/dist/advanced.cjs.map +1 -0
- package/packages/core/dist/advanced.d.cts +159 -0
- package/packages/core/dist/advanced.d.ts +159 -0
- package/packages/core/dist/advanced.mjs +8 -0
- package/packages/core/dist/advanced.mjs.map +1 -0
- package/packages/core/dist/chunk-5EMIZZXD.mjs +907 -0
- package/packages/core/dist/chunk-5EMIZZXD.mjs.map +1 -0
- package/packages/core/dist/chunk-7TGZLWEE.mjs +35 -0
- package/packages/core/dist/chunk-7TGZLWEE.mjs.map +1 -0
- package/packages/core/dist/chunk-BT7CATSD.mjs +497 -0
- package/packages/core/dist/chunk-BT7CATSD.mjs.map +1 -0
- package/packages/core/dist/chunk-E5F2LQCX.mjs +83 -0
- package/packages/core/dist/chunk-E5F2LQCX.mjs.map +1 -0
- package/packages/core/dist/chunk-EDTQHZPM.mjs +88 -0
- package/packages/core/dist/chunk-EDTQHZPM.mjs.map +1 -0
- package/packages/core/dist/chunk-HY7H3CQM.mjs +127 -0
- package/packages/core/dist/chunk-HY7H3CQM.mjs.map +1 -0
- package/packages/core/dist/chunk-Q6EPNB3V.mjs +539 -0
- package/packages/core/dist/chunk-Q6EPNB3V.mjs.map +1 -0
- package/packages/core/dist/chunk-QPAU2TPA.mjs +785 -0
- package/packages/core/dist/chunk-QPAU2TPA.mjs.map +1 -0
- package/packages/core/dist/chunk-QX3ZMPUF.mjs +451 -0
- package/packages/core/dist/chunk-QX3ZMPUF.mjs.map +1 -0
- package/packages/core/dist/chunk-VU6O5QAH.mjs +99 -0
- package/packages/core/dist/chunk-VU6O5QAH.mjs.map +1 -0
- package/packages/core/dist/chunk-XDBND27A.mjs +975 -0
- package/packages/core/dist/chunk-XDBND27A.mjs.map +1 -0
- package/packages/core/dist/chunk-YWAOOXLR.mjs +475 -0
- package/packages/core/dist/chunk-YWAOOXLR.mjs.map +1 -0
- package/packages/core/dist/diff.cjs +993 -0
- package/packages/core/dist/diff.cjs.map +1 -0
- package/packages/core/dist/diff.d.cts +81 -0
- package/packages/core/dist/diff.d.ts +81 -0
- package/packages/core/dist/diff.mjs +5 -0
- package/packages/core/dist/diff.mjs.map +1 -0
- package/packages/core/dist/exporters.cjs +1228 -0
- package/packages/core/dist/exporters.cjs.map +1 -0
- package/packages/core/dist/exporters.d.cts +113 -0
- package/packages/core/dist/exporters.d.ts +113 -0
- package/packages/core/dist/exporters.mjs +6 -0
- package/packages/core/dist/exporters.mjs.map +1 -0
- package/packages/core/dist/index.cjs +2844 -2266
- package/packages/core/dist/index.cjs.map +1 -1
- package/packages/core/dist/index.d.cts +92 -908
- package/packages/core/dist/index.d.ts +92 -908
- package/packages/core/dist/index.mjs +997 -5405
- package/packages/core/dist/index.mjs.map +1 -1
- package/packages/core/dist/log-config-BzGmDYum.d.cts +71 -0
- package/packages/core/dist/log-config-BzGmDYum.d.ts +71 -0
- package/packages/core/dist/logs.cjs +1007 -0
- package/packages/core/dist/logs.cjs.map +1 -0
- package/packages/core/dist/logs.d.cts +137 -0
- package/packages/core/dist/logs.d.ts +137 -0
- package/packages/core/dist/logs.mjs +6 -0
- package/packages/core/dist/logs.mjs.map +1 -0
- package/packages/core/dist/persisted.cjs +1057 -0
- package/packages/core/dist/persisted.cjs.map +1 -0
- package/packages/core/dist/persisted.d.cts +160 -0
- package/packages/core/dist/persisted.d.ts +160 -0
- package/packages/core/dist/persisted.mjs +5 -0
- package/packages/core/dist/persisted.mjs.map +1 -0
- package/packages/core/dist/types-Bkt7LS01.d.ts +226 -0
- package/packages/core/dist/types-CNbheSdk.d.cts +226 -0
|
@@ -0,0 +1,539 @@
|
|
|
1
|
+
import { extractCorrelationMetadata, isPersistedInspectEvent } from './chunk-QX3ZMPUF.mjs';
|
|
2
|
+
import { TreeBuilder } from './chunk-E5F2LQCX.mjs';
|
|
3
|
+
|
|
4
|
+
// packages/core/src/persisted/from-trace-event.ts
|
|
5
|
+
function sanitizeIdPart(value) {
|
|
6
|
+
return value.replace(/[^a-zA-Z0-9_-]/g, "_");
|
|
7
|
+
}
|
|
8
|
+
function nodeIdForEvent(event) {
|
|
9
|
+
switch (event.event) {
|
|
10
|
+
case "run_started":
|
|
11
|
+
case "run_completed":
|
|
12
|
+
return event.runId;
|
|
13
|
+
case "step_started":
|
|
14
|
+
case "step_completed":
|
|
15
|
+
return event.stepId;
|
|
16
|
+
default:
|
|
17
|
+
return "unknown";
|
|
18
|
+
}
|
|
19
|
+
}
|
|
20
|
+
function createPersistedEventId(event, eventIndex) {
|
|
21
|
+
const runId = sanitizeIdPart(event.runId);
|
|
22
|
+
const ev = sanitizeIdPart(event.event);
|
|
23
|
+
const node = sanitizeIdPart(nodeIdForEvent(event));
|
|
24
|
+
return `manual:${runId}:${ev}:${node}:${eventIndex}`;
|
|
25
|
+
}
|
|
26
|
+
function toIsoTimestamp(ms) {
|
|
27
|
+
if (typeof ms !== "number" || !Number.isFinite(ms)) {
|
|
28
|
+
return { iso: (/* @__PURE__ */ new Date(0)).toISOString(), invalidTimestamp: true };
|
|
29
|
+
}
|
|
30
|
+
return { iso: new Date(ms).toISOString(), invalidTimestamp: false };
|
|
31
|
+
}
|
|
32
|
+
function buildSource(options) {
|
|
33
|
+
return {
|
|
34
|
+
type: "manual",
|
|
35
|
+
name: options?.sourceName ?? "trace-event",
|
|
36
|
+
version: options?.sourceVersion ?? "0.1"
|
|
37
|
+
};
|
|
38
|
+
}
|
|
39
|
+
function mapStepTypeToInspectKind(type) {
|
|
40
|
+
switch (type) {
|
|
41
|
+
case "run":
|
|
42
|
+
return "RUN";
|
|
43
|
+
case "llm":
|
|
44
|
+
return "LLM";
|
|
45
|
+
case "tool":
|
|
46
|
+
return "TOOL";
|
|
47
|
+
case "decision":
|
|
48
|
+
return "DECISION";
|
|
49
|
+
case "logic":
|
|
50
|
+
case "state":
|
|
51
|
+
case "custom":
|
|
52
|
+
return "LOGIC";
|
|
53
|
+
default:
|
|
54
|
+
return "LOGIC";
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
function mapRunOrStepStatus(status) {
|
|
58
|
+
return status === "success" ? "ok" : "error";
|
|
59
|
+
}
|
|
60
|
+
function mapErrorInfo(error) {
|
|
61
|
+
if (!error?.message) {
|
|
62
|
+
return {};
|
|
63
|
+
}
|
|
64
|
+
const out = {
|
|
65
|
+
persisted: {
|
|
66
|
+
message: error.message,
|
|
67
|
+
name: "Error"
|
|
68
|
+
}
|
|
69
|
+
};
|
|
70
|
+
if (typeof error.stack === "string" && error.stack.length > 0) {
|
|
71
|
+
out.errorStack = error.stack;
|
|
72
|
+
}
|
|
73
|
+
return out;
|
|
74
|
+
}
|
|
75
|
+
function mapTokenUsageFromMetadata(metadata) {
|
|
76
|
+
const tokens = metadata?.tokens;
|
|
77
|
+
if (!tokens || typeof tokens !== "object") {
|
|
78
|
+
return void 0;
|
|
79
|
+
}
|
|
80
|
+
const input = typeof tokens.input === "number" && Number.isFinite(tokens.input) && tokens.input >= 0 ? tokens.input : void 0;
|
|
81
|
+
const output = typeof tokens.output === "number" && Number.isFinite(tokens.output) && tokens.output >= 0 ? tokens.output : void 0;
|
|
82
|
+
if (input === void 0 && output === void 0) {
|
|
83
|
+
return void 0;
|
|
84
|
+
}
|
|
85
|
+
const usage = {};
|
|
86
|
+
if (input !== void 0) usage.input = input;
|
|
87
|
+
if (output !== void 0) usage.output = output;
|
|
88
|
+
if (input !== void 0 && output !== void 0) {
|
|
89
|
+
usage.total = input + output;
|
|
90
|
+
}
|
|
91
|
+
return usage;
|
|
92
|
+
}
|
|
93
|
+
function compactAttributes(entries) {
|
|
94
|
+
const out = {};
|
|
95
|
+
for (const [key, value] of Object.entries(entries)) {
|
|
96
|
+
if (value !== void 0) {
|
|
97
|
+
out[key] = value;
|
|
98
|
+
}
|
|
99
|
+
}
|
|
100
|
+
return Object.keys(out).length > 0 ? out : void 0;
|
|
101
|
+
}
|
|
102
|
+
function traceEventToPersistedInspectEvent(event, options) {
|
|
103
|
+
const eventIndex = options?.eventIndex ?? 0;
|
|
104
|
+
const eventId = createPersistedEventId(event, eventIndex);
|
|
105
|
+
const source = buildSource(options);
|
|
106
|
+
const tsMain = toIsoTimestamp(event.timestamp);
|
|
107
|
+
switch (event.event) {
|
|
108
|
+
case "run_started": {
|
|
109
|
+
const tsStart = toIsoTimestamp(event.startTime);
|
|
110
|
+
const correlation = extractCorrelationMetadata(event.metadata);
|
|
111
|
+
const attributes = compactAttributes({
|
|
112
|
+
legacyEvent: "run_started",
|
|
113
|
+
metadata: event.metadata !== void 0 ? { ...event.metadata } : void 0,
|
|
114
|
+
correlationId: correlation?.correlationId,
|
|
115
|
+
requestId: correlation?.requestId,
|
|
116
|
+
decisionId: correlation?.decisionId,
|
|
117
|
+
groupId: correlation?.groupId,
|
|
118
|
+
invalidTimestamp: tsMain.invalidTimestamp || tsStart.invalidTimestamp ? true : void 0
|
|
119
|
+
});
|
|
120
|
+
return {
|
|
121
|
+
schemaVersion: "0.2",
|
|
122
|
+
eventId,
|
|
123
|
+
runId: event.runId,
|
|
124
|
+
kind: "RUN",
|
|
125
|
+
name: event.name,
|
|
126
|
+
status: "running",
|
|
127
|
+
timestamp: tsMain.iso,
|
|
128
|
+
startedAt: tsStart.iso,
|
|
129
|
+
confidence: "explicit",
|
|
130
|
+
source,
|
|
131
|
+
attributes
|
|
132
|
+
};
|
|
133
|
+
}
|
|
134
|
+
case "run_completed": {
|
|
135
|
+
const tsEnd = toIsoTimestamp(event.endTime);
|
|
136
|
+
const { persisted: error, errorStack } = mapErrorInfo(event.error);
|
|
137
|
+
const attributes = compactAttributes({
|
|
138
|
+
legacyEvent: "run_completed",
|
|
139
|
+
errorStack,
|
|
140
|
+
invalidTimestamp: tsMain.invalidTimestamp || tsEnd.invalidTimestamp ? true : void 0
|
|
141
|
+
});
|
|
142
|
+
return {
|
|
143
|
+
schemaVersion: "0.2",
|
|
144
|
+
eventId,
|
|
145
|
+
runId: event.runId,
|
|
146
|
+
kind: "RUN",
|
|
147
|
+
name: "run",
|
|
148
|
+
status: mapRunOrStepStatus(event.status),
|
|
149
|
+
timestamp: tsMain.iso,
|
|
150
|
+
endedAt: tsEnd.iso,
|
|
151
|
+
durationMs: event.durationMs,
|
|
152
|
+
confidence: "explicit",
|
|
153
|
+
source,
|
|
154
|
+
attributes,
|
|
155
|
+
error
|
|
156
|
+
};
|
|
157
|
+
}
|
|
158
|
+
case "step_started": {
|
|
159
|
+
const tsStart = toIsoTimestamp(event.startTime);
|
|
160
|
+
const tokenUsage = mapTokenUsageFromMetadata(event.metadata);
|
|
161
|
+
const attributes = compactAttributes({
|
|
162
|
+
legacyEvent: "step_started",
|
|
163
|
+
stepId: event.stepId,
|
|
164
|
+
stepType: event.type,
|
|
165
|
+
metadata: event.metadata !== void 0 ? { ...event.metadata } : void 0,
|
|
166
|
+
invalidTimestamp: tsMain.invalidTimestamp || tsStart.invalidTimestamp ? true : void 0
|
|
167
|
+
});
|
|
168
|
+
const out = {
|
|
169
|
+
schemaVersion: "0.2",
|
|
170
|
+
eventId,
|
|
171
|
+
runId: event.runId,
|
|
172
|
+
kind: mapStepTypeToInspectKind(event.type),
|
|
173
|
+
name: event.name,
|
|
174
|
+
status: "running",
|
|
175
|
+
timestamp: tsMain.iso,
|
|
176
|
+
startedAt: tsStart.iso,
|
|
177
|
+
confidence: "explicit",
|
|
178
|
+
source,
|
|
179
|
+
attributes
|
|
180
|
+
};
|
|
181
|
+
if (event.parentId !== void 0) {
|
|
182
|
+
out.parentId = event.parentId;
|
|
183
|
+
}
|
|
184
|
+
if (tokenUsage !== void 0) {
|
|
185
|
+
out.tokenUsage = tokenUsage;
|
|
186
|
+
}
|
|
187
|
+
return out;
|
|
188
|
+
}
|
|
189
|
+
case "step_completed": {
|
|
190
|
+
const tsEnd = toIsoTimestamp(event.endTime);
|
|
191
|
+
const { persisted: error, errorStack } = mapErrorInfo(event.error);
|
|
192
|
+
const attributes = compactAttributes({
|
|
193
|
+
legacyEvent: "step_completed",
|
|
194
|
+
stepId: event.stepId,
|
|
195
|
+
errorStack,
|
|
196
|
+
invalidTimestamp: tsMain.invalidTimestamp || tsEnd.invalidTimestamp ? true : void 0
|
|
197
|
+
});
|
|
198
|
+
return {
|
|
199
|
+
schemaVersion: "0.2",
|
|
200
|
+
eventId,
|
|
201
|
+
runId: event.runId,
|
|
202
|
+
kind: "LOGIC",
|
|
203
|
+
name: event.stepId,
|
|
204
|
+
status: mapRunOrStepStatus(event.status),
|
|
205
|
+
timestamp: tsMain.iso,
|
|
206
|
+
endedAt: tsEnd.iso,
|
|
207
|
+
durationMs: event.durationMs,
|
|
208
|
+
confidence: "explicit",
|
|
209
|
+
source,
|
|
210
|
+
attributes,
|
|
211
|
+
error
|
|
212
|
+
};
|
|
213
|
+
}
|
|
214
|
+
default: {
|
|
215
|
+
const _exhaustive = event;
|
|
216
|
+
throw new Error(`Unsupported trace event: ${_exhaustive.event}`);
|
|
217
|
+
}
|
|
218
|
+
}
|
|
219
|
+
}
|
|
220
|
+
function traceEventsToPersistedInspectEvents(events, options) {
|
|
221
|
+
return events.map(
|
|
222
|
+
(event, index) => traceEventToPersistedInspectEvent(event, { ...options, eventIndex: index })
|
|
223
|
+
);
|
|
224
|
+
}
|
|
225
|
+
|
|
226
|
+
// packages/core/src/persisted/from-inspect-event.ts
|
|
227
|
+
function sanitizeIdPart2(value) {
|
|
228
|
+
return value.replace(/[^a-zA-Z0-9_-]/g, "_");
|
|
229
|
+
}
|
|
230
|
+
function createFallbackEventId(event, eventIndex) {
|
|
231
|
+
const runId = sanitizeIdPart2(event.runId);
|
|
232
|
+
const kind = sanitizeIdPart2(event.kind);
|
|
233
|
+
const name = sanitizeIdPart2(event.name);
|
|
234
|
+
return `inspect:${runId}:${kind}:${name}:${eventIndex}`;
|
|
235
|
+
}
|
|
236
|
+
function toIsoTimestamp2(ms) {
|
|
237
|
+
if (typeof ms !== "number" || !Number.isFinite(ms)) {
|
|
238
|
+
return { iso: (/* @__PURE__ */ new Date(0)).toISOString(), invalidTimestamp: true };
|
|
239
|
+
}
|
|
240
|
+
return { iso: new Date(ms).toISOString(), invalidTimestamp: false };
|
|
241
|
+
}
|
|
242
|
+
function compactAttributes2(entries) {
|
|
243
|
+
const out = {};
|
|
244
|
+
for (const [key, value] of Object.entries(entries)) {
|
|
245
|
+
if (value !== void 0) {
|
|
246
|
+
out[key] = value;
|
|
247
|
+
}
|
|
248
|
+
}
|
|
249
|
+
return Object.keys(out).length > 0 ? out : void 0;
|
|
250
|
+
}
|
|
251
|
+
function mapInspectSourceToPersisted(source, options) {
|
|
252
|
+
const name = options?.sourceName;
|
|
253
|
+
const version = options?.sourceVersion;
|
|
254
|
+
switch (source.type) {
|
|
255
|
+
case "pino":
|
|
256
|
+
return {
|
|
257
|
+
persistedSource: {
|
|
258
|
+
type: "json-log",
|
|
259
|
+
name: name ?? "pino",
|
|
260
|
+
version
|
|
261
|
+
},
|
|
262
|
+
originalSourceType: "pino"
|
|
263
|
+
};
|
|
264
|
+
case "winston":
|
|
265
|
+
return {
|
|
266
|
+
persistedSource: {
|
|
267
|
+
type: "json-log",
|
|
268
|
+
name: name ?? "winston",
|
|
269
|
+
version
|
|
270
|
+
},
|
|
271
|
+
originalSourceType: "winston"
|
|
272
|
+
};
|
|
273
|
+
case "manual":
|
|
274
|
+
case "json-log":
|
|
275
|
+
case "log4js":
|
|
276
|
+
case "adapter":
|
|
277
|
+
return {
|
|
278
|
+
persistedSource: {
|
|
279
|
+
type: source.type,
|
|
280
|
+
name,
|
|
281
|
+
version
|
|
282
|
+
}
|
|
283
|
+
};
|
|
284
|
+
default:
|
|
285
|
+
return {
|
|
286
|
+
persistedSource: {
|
|
287
|
+
type: "json-log",
|
|
288
|
+
name,
|
|
289
|
+
version
|
|
290
|
+
}
|
|
291
|
+
};
|
|
292
|
+
}
|
|
293
|
+
}
|
|
294
|
+
function mapTokenUsageFromAttributes(attributes) {
|
|
295
|
+
const tokens = attributes?.tokens;
|
|
296
|
+
if (!tokens || typeof tokens !== "object" || Array.isArray(tokens)) {
|
|
297
|
+
return void 0;
|
|
298
|
+
}
|
|
299
|
+
const rec = tokens;
|
|
300
|
+
const input = typeof rec.input === "number" && Number.isFinite(rec.input) && rec.input >= 0 ? rec.input : void 0;
|
|
301
|
+
const output = typeof rec.output === "number" && Number.isFinite(rec.output) && rec.output >= 0 ? rec.output : void 0;
|
|
302
|
+
if (input === void 0 && output === void 0) {
|
|
303
|
+
return void 0;
|
|
304
|
+
}
|
|
305
|
+
const usage = {};
|
|
306
|
+
if (input !== void 0) usage.input = input;
|
|
307
|
+
if (output !== void 0) usage.output = output;
|
|
308
|
+
if (input !== void 0 && output !== void 0) {
|
|
309
|
+
usage.total = input + output;
|
|
310
|
+
}
|
|
311
|
+
return usage;
|
|
312
|
+
}
|
|
313
|
+
function mapErrorFromAttributes(event) {
|
|
314
|
+
if (event.status !== "error" || !event.attributes) {
|
|
315
|
+
return void 0;
|
|
316
|
+
}
|
|
317
|
+
const message = event.attributes.errorMessage;
|
|
318
|
+
if (typeof message !== "string" || message.length === 0) {
|
|
319
|
+
return void 0;
|
|
320
|
+
}
|
|
321
|
+
const err = { message };
|
|
322
|
+
if (typeof event.attributes.errorName === "string") {
|
|
323
|
+
err.name = event.attributes.errorName;
|
|
324
|
+
}
|
|
325
|
+
return err;
|
|
326
|
+
}
|
|
327
|
+
function inspectEventToPersistedInspectEvent(event, options) {
|
|
328
|
+
const eventIndex = options?.eventIndex ?? 0;
|
|
329
|
+
const eventId = typeof event.eventId === "string" && event.eventId.length > 0 ? event.eventId : createFallbackEventId(event, eventIndex);
|
|
330
|
+
const ts = toIsoTimestamp2(event.timestamp);
|
|
331
|
+
const { persistedSource, originalSourceType } = mapInspectSourceToPersisted(
|
|
332
|
+
event.source,
|
|
333
|
+
options
|
|
334
|
+
);
|
|
335
|
+
const attrsBase = event.attributes !== void 0 ? { ...event.attributes } : {};
|
|
336
|
+
const attributes = compactAttributes2({
|
|
337
|
+
...attrsBase,
|
|
338
|
+
sourceFile: event.source.file,
|
|
339
|
+
sourceLine: event.source.line,
|
|
340
|
+
originalSourceType,
|
|
341
|
+
invalidTimestamp: ts.invalidTimestamp ? true : void 0
|
|
342
|
+
});
|
|
343
|
+
const tokenUsage = mapTokenUsageFromAttributes(event.attributes);
|
|
344
|
+
const error = mapErrorFromAttributes(event);
|
|
345
|
+
const inputPreview = event.attributes?.inputPreview;
|
|
346
|
+
const outputPreview = event.attributes?.outputPreview;
|
|
347
|
+
const out = {
|
|
348
|
+
schemaVersion: "0.2",
|
|
349
|
+
eventId,
|
|
350
|
+
runId: event.runId,
|
|
351
|
+
kind: event.kind,
|
|
352
|
+
name: event.name,
|
|
353
|
+
timestamp: ts.iso,
|
|
354
|
+
confidence: event.confidence,
|
|
355
|
+
source: persistedSource,
|
|
356
|
+
attributes
|
|
357
|
+
};
|
|
358
|
+
if (event.parentId !== void 0) {
|
|
359
|
+
out.parentId = event.parentId;
|
|
360
|
+
}
|
|
361
|
+
if (event.status !== void 0) {
|
|
362
|
+
out.status = event.status;
|
|
363
|
+
}
|
|
364
|
+
if (event.durationMs !== void 0 && Number.isFinite(event.durationMs) && event.durationMs >= 0) {
|
|
365
|
+
out.durationMs = event.durationMs;
|
|
366
|
+
}
|
|
367
|
+
if (tokenUsage !== void 0) {
|
|
368
|
+
out.tokenUsage = tokenUsage;
|
|
369
|
+
}
|
|
370
|
+
if (error !== void 0) {
|
|
371
|
+
out.error = error;
|
|
372
|
+
}
|
|
373
|
+
if (inputPreview !== void 0) {
|
|
374
|
+
out.inputSummary = inputPreview;
|
|
375
|
+
}
|
|
376
|
+
if (outputPreview !== void 0) {
|
|
377
|
+
out.outputSummary = outputPreview;
|
|
378
|
+
}
|
|
379
|
+
return out;
|
|
380
|
+
}
|
|
381
|
+
function inspectEventsToPersistedInspectEvents(events, options) {
|
|
382
|
+
return events.map(
|
|
383
|
+
(event, index) => inspectEventToPersistedInspectEvent(event, { ...options, eventIndex: index })
|
|
384
|
+
);
|
|
385
|
+
}
|
|
386
|
+
|
|
387
|
+
// packages/core/src/persisted/to-inspect-event.ts
|
|
388
|
+
function compactAttributes3(entries) {
|
|
389
|
+
const out = {};
|
|
390
|
+
for (const [key, value] of Object.entries(entries)) {
|
|
391
|
+
if (value !== void 0) {
|
|
392
|
+
out[key] = value;
|
|
393
|
+
}
|
|
394
|
+
}
|
|
395
|
+
return Object.keys(out).length > 0 ? out : void 0;
|
|
396
|
+
}
|
|
397
|
+
function parseIsoToMs(iso) {
|
|
398
|
+
const parsed = Date.parse(iso);
|
|
399
|
+
if (!Number.isFinite(parsed)) {
|
|
400
|
+
return { ms: 0, invalidTimestamp: true };
|
|
401
|
+
}
|
|
402
|
+
return { ms: parsed, invalidTimestamp: false };
|
|
403
|
+
}
|
|
404
|
+
function mapPersistedSourceToInspect(event) {
|
|
405
|
+
const attrs = event.attributes ?? {};
|
|
406
|
+
const sourceName = event.source.name;
|
|
407
|
+
if (sourceName === "pino") {
|
|
408
|
+
return {
|
|
409
|
+
type: "pino",
|
|
410
|
+
file: typeof attrs.sourceFile === "string" ? attrs.sourceFile : void 0,
|
|
411
|
+
line: typeof attrs.sourceLine === "number" ? attrs.sourceLine : void 0
|
|
412
|
+
};
|
|
413
|
+
}
|
|
414
|
+
if (sourceName === "winston") {
|
|
415
|
+
return {
|
|
416
|
+
type: "winston",
|
|
417
|
+
file: typeof attrs.sourceFile === "string" ? attrs.sourceFile : void 0,
|
|
418
|
+
line: typeof attrs.sourceLine === "number" ? attrs.sourceLine : void 0
|
|
419
|
+
};
|
|
420
|
+
}
|
|
421
|
+
const mapType = (t) => {
|
|
422
|
+
switch (t) {
|
|
423
|
+
case "manual":
|
|
424
|
+
return "manual";
|
|
425
|
+
case "json-log":
|
|
426
|
+
return "json-log";
|
|
427
|
+
case "log4js":
|
|
428
|
+
return "log4js";
|
|
429
|
+
case "adapter":
|
|
430
|
+
case "ai-sdk":
|
|
431
|
+
case "otel":
|
|
432
|
+
return "adapter";
|
|
433
|
+
default:
|
|
434
|
+
return "json-log";
|
|
435
|
+
}
|
|
436
|
+
};
|
|
437
|
+
return {
|
|
438
|
+
type: mapType(event.source.type),
|
|
439
|
+
file: typeof attrs.sourceFile === "string" ? attrs.sourceFile : void 0,
|
|
440
|
+
line: typeof attrs.sourceLine === "number" ? attrs.sourceLine : void 0
|
|
441
|
+
};
|
|
442
|
+
}
|
|
443
|
+
function buildInspectAttributes(event) {
|
|
444
|
+
const attrs = event.attributes !== void 0 ? { ...event.attributes } : {};
|
|
445
|
+
if (event.inputSummary !== void 0) {
|
|
446
|
+
attrs.inputSummary = event.inputSummary;
|
|
447
|
+
}
|
|
448
|
+
if (event.outputSummary !== void 0) {
|
|
449
|
+
attrs.outputSummary = event.outputSummary;
|
|
450
|
+
}
|
|
451
|
+
if (event.error) {
|
|
452
|
+
if (event.error.name !== void 0) {
|
|
453
|
+
attrs.errorName = event.error.name;
|
|
454
|
+
}
|
|
455
|
+
attrs.errorMessage = event.error.message;
|
|
456
|
+
if (event.error.code !== void 0) {
|
|
457
|
+
attrs.errorCode = event.error.code;
|
|
458
|
+
}
|
|
459
|
+
}
|
|
460
|
+
if (event.tokenUsage) {
|
|
461
|
+
attrs.tokens = { ...event.tokenUsage };
|
|
462
|
+
}
|
|
463
|
+
if (event.source.type === "ai-sdk" || event.source.type === "otel") {
|
|
464
|
+
attrs.originalSourceType = event.source.type;
|
|
465
|
+
}
|
|
466
|
+
if (event.source.name !== void 0) {
|
|
467
|
+
attrs.sourceName = event.source.name;
|
|
468
|
+
}
|
|
469
|
+
if (event.source.version !== void 0) {
|
|
470
|
+
attrs.sourceVersion = event.source.version;
|
|
471
|
+
}
|
|
472
|
+
return attrs;
|
|
473
|
+
}
|
|
474
|
+
function persistedInspectEventToInspectEvent(event) {
|
|
475
|
+
if (!isPersistedInspectEvent(event)) {
|
|
476
|
+
throw new Error("Invalid PersistedInspectEvent: failed isPersistedInspectEvent");
|
|
477
|
+
}
|
|
478
|
+
const ts = parseIsoToMs(event.timestamp);
|
|
479
|
+
const attrs = buildInspectAttributes(event);
|
|
480
|
+
if (ts.invalidTimestamp) {
|
|
481
|
+
attrs.invalidTimestamp = true;
|
|
482
|
+
}
|
|
483
|
+
let status;
|
|
484
|
+
if (event.status === "running" || event.status === "ok" || event.status === "error") {
|
|
485
|
+
status = event.status;
|
|
486
|
+
} else if (event.status === "unknown") {
|
|
487
|
+
attrs.persistedStatus = "unknown";
|
|
488
|
+
}
|
|
489
|
+
const out = {
|
|
490
|
+
eventId: event.eventId,
|
|
491
|
+
runId: event.runId,
|
|
492
|
+
name: event.name,
|
|
493
|
+
kind: event.kind,
|
|
494
|
+
timestamp: ts.ms,
|
|
495
|
+
confidence: event.confidence,
|
|
496
|
+
source: mapPersistedSourceToInspect(event),
|
|
497
|
+
attributes: compactAttributes3(attrs)
|
|
498
|
+
};
|
|
499
|
+
if (event.parentId !== void 0) {
|
|
500
|
+
out.parentId = event.parentId;
|
|
501
|
+
}
|
|
502
|
+
if (status !== void 0) {
|
|
503
|
+
out.status = status;
|
|
504
|
+
}
|
|
505
|
+
if (event.durationMs !== void 0 && Number.isFinite(event.durationMs) && event.durationMs >= 0) {
|
|
506
|
+
out.durationMs = event.durationMs;
|
|
507
|
+
}
|
|
508
|
+
return out;
|
|
509
|
+
}
|
|
510
|
+
function persistedInspectEventsToInspectEvents(events, options) {
|
|
511
|
+
const skipInvalid = options?.skipInvalid === true;
|
|
512
|
+
const out = [];
|
|
513
|
+
for (const event of events) {
|
|
514
|
+
if (!isPersistedInspectEvent(event)) {
|
|
515
|
+
if (skipInvalid) {
|
|
516
|
+
continue;
|
|
517
|
+
}
|
|
518
|
+
throw new Error("Invalid PersistedInspectEvent: failed isPersistedInspectEvent");
|
|
519
|
+
}
|
|
520
|
+
out.push(persistedInspectEventToInspectEvent(event));
|
|
521
|
+
}
|
|
522
|
+
return out;
|
|
523
|
+
}
|
|
524
|
+
|
|
525
|
+
// packages/core/src/persisted/tree-bridge.ts
|
|
526
|
+
function persistedInspectEventsToRunTrees(events, options) {
|
|
527
|
+
const inspectEvents = persistedInspectEventsToInspectEvents(events, {
|
|
528
|
+
skipInvalid: options?.skipInvalid
|
|
529
|
+
});
|
|
530
|
+
return new TreeBuilder().build(inspectEvents);
|
|
531
|
+
}
|
|
532
|
+
function traceEventsToPersistedRunTrees(events) {
|
|
533
|
+
const persisted = traceEventsToPersistedInspectEvents(events);
|
|
534
|
+
return persistedInspectEventsToRunTrees(persisted);
|
|
535
|
+
}
|
|
536
|
+
|
|
537
|
+
export { inspectEventToPersistedInspectEvent, inspectEventsToPersistedInspectEvents, persistedInspectEventToInspectEvent, persistedInspectEventsToInspectEvents, persistedInspectEventsToRunTrees, traceEventToPersistedInspectEvent, traceEventsToPersistedInspectEvents, traceEventsToPersistedRunTrees };
|
|
538
|
+
//# sourceMappingURL=chunk-Q6EPNB3V.mjs.map
|
|
539
|
+
//# sourceMappingURL=chunk-Q6EPNB3V.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/persisted/from-trace-event.ts","../src/persisted/from-inspect-event.ts","../src/persisted/to-inspect-event.ts","../src/persisted/tree-bridge.ts"],"names":["sanitizeIdPart","toIsoTimestamp","compactAttributes"],"mappings":"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","file":"chunk-Q6EPNB3V.mjs","sourcesContent":["import { extractCorrelationMetadata } from \"../correlation-metadata.js\";\nimport type { InspectKind } from \"../types/inspect-event.js\";\nimport type {\n ErrorInfo,\n StepMetadata,\n StepType,\n TraceEvent,\n} from \"../types.js\";\nimport type {\n PersistedEventSource,\n PersistedEventStatus,\n PersistedInspectError,\n PersistedInspectEvent,\n PersistedTokenUsage,\n} from \"../types/persisted-inspect-event.js\";\n\nexport interface TraceEventToPersistedOptions {\n /**\n * Stable index within the source event list.\n * Used only to make synthetic eventId deterministic when v0.1 has no eventId.\n */\n eventIndex?: number;\n\n /**\n * Optional source name override.\n * Default: \"trace-event\"\n */\n sourceName?: string;\n\n /**\n * Optional source version override.\n * Default: \"0.1\"\n */\n sourceVersion?: string;\n}\n\nfunction sanitizeIdPart(value: string): string {\n return value.replace(/[^a-zA-Z0-9_-]/g, \"_\");\n}\n\nfunction nodeIdForEvent(event: TraceEvent): string {\n switch (event.event) {\n case \"run_started\":\n case \"run_completed\":\n return event.runId;\n case \"step_started\":\n case \"step_completed\":\n return event.stepId;\n default:\n return \"unknown\";\n }\n}\n\nfunction createPersistedEventId(event: TraceEvent, eventIndex: number): string {\n const runId = sanitizeIdPart(event.runId);\n const ev = sanitizeIdPart(event.event);\n const node = sanitizeIdPart(nodeIdForEvent(event));\n return `manual:${runId}:${ev}:${node}:${eventIndex}`;\n}\n\nfunction toIsoTimestamp(\n ms: number,\n): { iso: string; invalidTimestamp: boolean } {\n if (typeof ms !== \"number\" || !Number.isFinite(ms)) {\n return { iso: new Date(0).toISOString(), invalidTimestamp: true };\n }\n return { iso: new Date(ms).toISOString(), invalidTimestamp: false };\n}\n\nfunction buildSource(options?: TraceEventToPersistedOptions): PersistedEventSource {\n return {\n type: \"manual\",\n name: options?.sourceName ?? \"trace-event\",\n version: options?.sourceVersion ?? \"0.1\",\n };\n}\n\nfunction mapStepTypeToInspectKind(type: StepType): InspectKind {\n switch (type) {\n case \"run\":\n return \"RUN\";\n case \"llm\":\n return \"LLM\";\n case \"tool\":\n return \"TOOL\";\n case \"decision\":\n return \"DECISION\";\n case \"logic\":\n case \"state\":\n case \"custom\":\n return \"LOGIC\";\n default:\n return \"LOGIC\";\n }\n}\n\nfunction mapRunOrStepStatus(\n status: \"success\" | \"error\",\n): PersistedEventStatus {\n return status === \"success\" ? \"ok\" : \"error\";\n}\n\nfunction mapErrorInfo(\n error: ErrorInfo | undefined,\n): {\n persisted?: PersistedInspectError;\n errorStack?: string;\n} {\n if (!error?.message) {\n return {};\n }\n const out: {\n persisted: PersistedInspectError;\n errorStack?: string;\n } = {\n persisted: {\n message: error.message,\n name: \"Error\",\n },\n };\n if (typeof error.stack === \"string\" && error.stack.length > 0) {\n out.errorStack = error.stack;\n }\n return out;\n}\n\nfunction mapTokenUsageFromMetadata(\n metadata: StepMetadata | undefined,\n): PersistedTokenUsage | undefined {\n const tokens = metadata?.tokens;\n if (!tokens || typeof tokens !== \"object\") {\n return undefined;\n }\n\n const input =\n typeof tokens.input === \"number\" && Number.isFinite(tokens.input) && tokens.input >= 0\n ? tokens.input\n : undefined;\n const output =\n typeof tokens.output === \"number\" &&\n Number.isFinite(tokens.output) &&\n tokens.output >= 0\n ? tokens.output\n : undefined;\n\n if (input === undefined && output === undefined) {\n return undefined;\n }\n\n const usage: PersistedTokenUsage = {};\n if (input !== undefined) usage.input = input;\n if (output !== undefined) usage.output = output;\n if (input !== undefined && output !== undefined) {\n usage.total = input + output;\n }\n return usage;\n}\n\nfunction compactAttributes(\n entries: Record<string, unknown>,\n): Record<string, unknown> | undefined {\n const out: Record<string, unknown> = {};\n for (const [key, value] of Object.entries(entries)) {\n if (value !== undefined) {\n out[key] = value;\n }\n }\n return Object.keys(out).length > 0 ? out : undefined;\n}\n\n/**\n * Maps one v0.1 {@link TraceEvent} to a v0.2 {@link PersistedInspectEvent}.\n * Does not mutate `event`.\n */\nexport function traceEventToPersistedInspectEvent(\n event: TraceEvent,\n options?: TraceEventToPersistedOptions,\n): PersistedInspectEvent {\n const eventIndex = options?.eventIndex ?? 0;\n const eventId = createPersistedEventId(event, eventIndex);\n const source = buildSource(options);\n const tsMain = toIsoTimestamp(event.timestamp);\n\n switch (event.event) {\n case \"run_started\": {\n const tsStart = toIsoTimestamp(event.startTime);\n const correlation = extractCorrelationMetadata(event.metadata);\n const attributes = compactAttributes({\n legacyEvent: \"run_started\",\n metadata:\n event.metadata !== undefined ? { ...event.metadata } : undefined,\n correlationId: correlation?.correlationId,\n requestId: correlation?.requestId,\n decisionId: correlation?.decisionId,\n groupId: correlation?.groupId,\n invalidTimestamp:\n tsMain.invalidTimestamp || tsStart.invalidTimestamp ? true : undefined,\n });\n\n return {\n schemaVersion: \"0.2\",\n eventId,\n runId: event.runId,\n kind: \"RUN\",\n name: event.name,\n status: \"running\",\n timestamp: tsMain.iso,\n startedAt: tsStart.iso,\n confidence: \"explicit\",\n source,\n attributes,\n };\n }\n\n case \"run_completed\": {\n const tsEnd = toIsoTimestamp(event.endTime);\n const { persisted: error, errorStack } = mapErrorInfo(event.error);\n const attributes = compactAttributes({\n legacyEvent: \"run_completed\",\n errorStack,\n invalidTimestamp:\n tsMain.invalidTimestamp || tsEnd.invalidTimestamp ? true : undefined,\n });\n\n return {\n schemaVersion: \"0.2\",\n eventId,\n runId: event.runId,\n kind: \"RUN\",\n name: \"run\",\n status: mapRunOrStepStatus(event.status),\n timestamp: tsMain.iso,\n endedAt: tsEnd.iso,\n durationMs: event.durationMs,\n confidence: \"explicit\",\n source,\n attributes,\n error,\n };\n }\n\n case \"step_started\": {\n const tsStart = toIsoTimestamp(event.startTime);\n const tokenUsage = mapTokenUsageFromMetadata(event.metadata);\n const attributes = compactAttributes({\n legacyEvent: \"step_started\",\n stepId: event.stepId,\n stepType: event.type,\n metadata:\n event.metadata !== undefined ? { ...event.metadata } : undefined,\n invalidTimestamp:\n tsMain.invalidTimestamp || tsStart.invalidTimestamp ? true : undefined,\n });\n\n const out: PersistedInspectEvent = {\n schemaVersion: \"0.2\",\n eventId,\n runId: event.runId,\n kind: mapStepTypeToInspectKind(event.type),\n name: event.name,\n status: \"running\",\n timestamp: tsMain.iso,\n startedAt: tsStart.iso,\n confidence: \"explicit\",\n source,\n attributes,\n };\n if (event.parentId !== undefined) {\n out.parentId = event.parentId;\n }\n if (tokenUsage !== undefined) {\n out.tokenUsage = tokenUsage;\n }\n return out;\n }\n\n case \"step_completed\": {\n const tsEnd = toIsoTimestamp(event.endTime);\n const { persisted: error, errorStack } = mapErrorInfo(event.error);\n const attributes = compactAttributes({\n legacyEvent: \"step_completed\",\n stepId: event.stepId,\n errorStack,\n invalidTimestamp:\n tsMain.invalidTimestamp || tsEnd.invalidTimestamp ? true : undefined,\n });\n\n return {\n schemaVersion: \"0.2\",\n eventId,\n runId: event.runId,\n kind: \"LOGIC\",\n name: event.stepId,\n status: mapRunOrStepStatus(event.status),\n timestamp: tsMain.iso,\n endedAt: tsEnd.iso,\n durationMs: event.durationMs,\n confidence: \"explicit\",\n source,\n attributes,\n error,\n };\n }\n\n default: {\n const _exhaustive: never = event;\n throw new Error(`Unsupported trace event: ${(_exhaustive as TraceEvent).event}`);\n }\n }\n}\n\n/**\n * Maps a v0.1 trace event list to persisted v0.2 events (one output per input).\n */\nexport function traceEventsToPersistedInspectEvents(\n events: readonly TraceEvent[],\n options?: Omit<TraceEventToPersistedOptions, \"eventIndex\">,\n): PersistedInspectEvent[] {\n return events.map((event, index) =>\n traceEventToPersistedInspectEvent(event, { ...options, eventIndex: index }),\n );\n}\n","import type { EventSource, InspectEvent } from \"../types/inspect-event.js\";\nimport type {\n PersistedEventSource,\n PersistedEventSourceType,\n PersistedInspectError,\n PersistedInspectEvent,\n PersistedTokenUsage,\n} from \"../types/persisted-inspect-event.js\";\n\nexport interface InspectEventToPersistedOptions {\n /**\n * Optional source name override.\n * If omitted, derived from event.source.type.\n */\n sourceName?: string;\n\n /**\n * Optional source version override.\n */\n sourceVersion?: string;\n\n /**\n * Stable index for deterministic fallback IDs if needed.\n */\n eventIndex?: number;\n}\n\nfunction sanitizeIdPart(value: string): string {\n return value.replace(/[^a-zA-Z0-9_-]/g, \"_\");\n}\n\nfunction createFallbackEventId(event: InspectEvent, eventIndex: number): string {\n const runId = sanitizeIdPart(event.runId);\n const kind = sanitizeIdPart(event.kind);\n const name = sanitizeIdPart(event.name);\n return `inspect:${runId}:${kind}:${name}:${eventIndex}`;\n}\n\nfunction toIsoTimestamp(\n ms: number,\n): { iso: string; invalidTimestamp: boolean } {\n if (typeof ms !== \"number\" || !Number.isFinite(ms)) {\n return { iso: new Date(0).toISOString(), invalidTimestamp: true };\n }\n return { iso: new Date(ms).toISOString(), invalidTimestamp: false };\n}\n\nfunction compactAttributes(\n entries: Record<string, unknown>,\n): Record<string, unknown> | undefined {\n const out: Record<string, unknown> = {};\n for (const [key, value] of Object.entries(entries)) {\n if (value !== undefined) {\n out[key] = value;\n }\n }\n return Object.keys(out).length > 0 ? out : undefined;\n}\n\nfunction mapInspectSourceToPersisted(\n source: EventSource,\n options?: InspectEventToPersistedOptions,\n): {\n persistedSource: PersistedEventSource;\n originalSourceType?: EventSource[\"type\"];\n} {\n const name = options?.sourceName;\n const version = options?.sourceVersion;\n\n switch (source.type) {\n case \"pino\":\n return {\n persistedSource: {\n type: \"json-log\",\n name: name ?? \"pino\",\n version,\n },\n originalSourceType: \"pino\",\n };\n case \"winston\":\n return {\n persistedSource: {\n type: \"json-log\",\n name: name ?? \"winston\",\n version,\n },\n originalSourceType: \"winston\",\n };\n case \"manual\":\n case \"json-log\":\n case \"log4js\":\n case \"adapter\":\n return {\n persistedSource: {\n type: source.type as PersistedEventSourceType,\n name,\n version,\n },\n };\n default:\n return {\n persistedSource: {\n type: \"json-log\",\n name,\n version,\n },\n };\n }\n}\n\nfunction mapTokenUsageFromAttributes(\n attributes: Record<string, unknown> | undefined,\n): PersistedTokenUsage | undefined {\n const tokens = attributes?.tokens;\n if (!tokens || typeof tokens !== \"object\" || Array.isArray(tokens)) {\n return undefined;\n }\n const rec = tokens as Record<string, unknown>;\n const input =\n typeof rec.input === \"number\" && Number.isFinite(rec.input) && rec.input >= 0\n ? rec.input\n : undefined;\n const output =\n typeof rec.output === \"number\" &&\n Number.isFinite(rec.output) &&\n rec.output >= 0\n ? rec.output\n : undefined;\n\n if (input === undefined && output === undefined) {\n return undefined;\n }\n\n const usage: PersistedTokenUsage = {};\n if (input !== undefined) usage.input = input;\n if (output !== undefined) usage.output = output;\n if (input !== undefined && output !== undefined) {\n usage.total = input + output;\n }\n return usage;\n}\n\nfunction mapErrorFromAttributes(\n event: InspectEvent,\n): PersistedInspectError | undefined {\n if (event.status !== \"error\" || !event.attributes) {\n return undefined;\n }\n const message = event.attributes.errorMessage;\n if (typeof message !== \"string\" || message.length === 0) {\n return undefined;\n }\n const err: PersistedInspectError = { message };\n if (typeof event.attributes.errorName === \"string\") {\n err.name = event.attributes.errorName;\n }\n return err;\n}\n\n/**\n * Maps one in-memory {@link InspectEvent} to a v0.2 {@link PersistedInspectEvent}.\n * Does not mutate `event`.\n */\nexport function inspectEventToPersistedInspectEvent(\n event: InspectEvent,\n options?: InspectEventToPersistedOptions,\n): PersistedInspectEvent {\n const eventIndex = options?.eventIndex ?? 0;\n const eventId =\n typeof event.eventId === \"string\" && event.eventId.length > 0\n ? event.eventId\n : createFallbackEventId(event, eventIndex);\n\n const ts = toIsoTimestamp(event.timestamp);\n const { persistedSource, originalSourceType } = mapInspectSourceToPersisted(\n event.source,\n options,\n );\n\n const attrsBase =\n event.attributes !== undefined ? { ...event.attributes } : {};\n\n const attributes = compactAttributes({\n ...attrsBase,\n sourceFile: event.source.file,\n sourceLine: event.source.line,\n originalSourceType,\n invalidTimestamp: ts.invalidTimestamp ? true : undefined,\n });\n\n const tokenUsage = mapTokenUsageFromAttributes(event.attributes);\n const error = mapErrorFromAttributes(event);\n\n const inputPreview = event.attributes?.inputPreview;\n const outputPreview = event.attributes?.outputPreview;\n\n const out: PersistedInspectEvent = {\n schemaVersion: \"0.2\",\n eventId,\n runId: event.runId,\n kind: event.kind,\n name: event.name,\n timestamp: ts.iso,\n confidence: event.confidence,\n source: persistedSource,\n attributes,\n };\n\n if (event.parentId !== undefined) {\n out.parentId = event.parentId;\n }\n if (event.status !== undefined) {\n out.status = event.status;\n }\n if (\n event.durationMs !== undefined &&\n Number.isFinite(event.durationMs) &&\n event.durationMs >= 0\n ) {\n out.durationMs = event.durationMs;\n }\n if (tokenUsage !== undefined) {\n out.tokenUsage = tokenUsage;\n }\n if (error !== undefined) {\n out.error = error;\n }\n if (inputPreview !== undefined) {\n out.inputSummary = inputPreview;\n }\n if (outputPreview !== undefined) {\n out.outputSummary = outputPreview;\n }\n\n return out;\n}\n\n/**\n * Maps in-memory {@link InspectEvent} rows to persisted v0.2 events.\n */\nexport function inspectEventsToPersistedInspectEvents(\n events: readonly InspectEvent[],\n options?: Omit<InspectEventToPersistedOptions, \"eventIndex\">,\n): PersistedInspectEvent[] {\n return events.map((event, index) =>\n inspectEventToPersistedInspectEvent(event, { ...options, eventIndex: index }),\n );\n}\n","import type { EventSource, InspectEvent } from \"../types/inspect-event.js\";\nimport {\n isPersistedInspectEvent,\n type PersistedEventSourceType,\n type PersistedInspectEvent,\n} from \"../types/persisted-inspect-event.js\";\n\nexport interface PersistedToInspectEventOptions {\n /**\n * If true, invalid persisted events are skipped by batch conversion.\n * If false or omitted, invalid events throw.\n */\n skipInvalid?: boolean;\n}\n\nfunction compactAttributes(\n entries: Record<string, unknown>,\n): Record<string, unknown> | undefined {\n const out: Record<string, unknown> = {};\n for (const [key, value] of Object.entries(entries)) {\n if (value !== undefined) {\n out[key] = value;\n }\n }\n return Object.keys(out).length > 0 ? out : undefined;\n}\n\nfunction parseIsoToMs(iso: string): { ms: number; invalidTimestamp: boolean } {\n const parsed = Date.parse(iso);\n if (!Number.isFinite(parsed)) {\n return { ms: 0, invalidTimestamp: true };\n }\n return { ms: parsed, invalidTimestamp: false };\n}\n\nfunction mapPersistedSourceToInspect(\n event: PersistedInspectEvent,\n): EventSource {\n const attrs = event.attributes ?? {};\n const sourceName = event.source.name;\n\n if (sourceName === \"pino\") {\n return {\n type: \"pino\",\n file: typeof attrs.sourceFile === \"string\" ? attrs.sourceFile : undefined,\n line: typeof attrs.sourceLine === \"number\" ? attrs.sourceLine : undefined,\n };\n }\n if (sourceName === \"winston\") {\n return {\n type: \"winston\",\n file: typeof attrs.sourceFile === \"string\" ? attrs.sourceFile : undefined,\n line: typeof attrs.sourceLine === \"number\" ? attrs.sourceLine : undefined,\n };\n }\n\n const mapType = (t: PersistedEventSourceType): EventSource[\"type\"] => {\n switch (t) {\n case \"manual\":\n return \"manual\";\n case \"json-log\":\n return \"json-log\";\n case \"log4js\":\n return \"log4js\";\n case \"adapter\":\n case \"ai-sdk\":\n case \"otel\":\n return \"adapter\";\n default:\n return \"json-log\";\n }\n };\n\n return {\n type: mapType(event.source.type),\n file: typeof attrs.sourceFile === \"string\" ? attrs.sourceFile : undefined,\n line: typeof attrs.sourceLine === \"number\" ? attrs.sourceLine : undefined,\n };\n}\n\nfunction buildInspectAttributes(event: PersistedInspectEvent): Record<string, unknown> {\n const attrs =\n event.attributes !== undefined ? { ...event.attributes } : {};\n\n if (event.inputSummary !== undefined) {\n attrs.inputSummary = event.inputSummary;\n }\n if (event.outputSummary !== undefined) {\n attrs.outputSummary = event.outputSummary;\n }\n\n if (event.error) {\n if (event.error.name !== undefined) {\n attrs.errorName = event.error.name;\n }\n attrs.errorMessage = event.error.message;\n if (event.error.code !== undefined) {\n attrs.errorCode = event.error.code;\n }\n }\n\n if (event.tokenUsage) {\n attrs.tokens = { ...event.tokenUsage };\n }\n\n if (event.source.type === \"ai-sdk\" || event.source.type === \"otel\") {\n attrs.originalSourceType = event.source.type;\n }\n\n if (event.source.name !== undefined) {\n attrs.sourceName = event.source.name;\n }\n if (event.source.version !== undefined) {\n attrs.sourceVersion = event.source.version;\n }\n\n return attrs;\n}\n\n/**\n * Maps one v0.2 {@link PersistedInspectEvent} to in-memory {@link InspectEvent}.\n * Throws if `event` fails {@link isPersistedInspectEvent}.\n */\nexport function persistedInspectEventToInspectEvent(\n event: PersistedInspectEvent,\n): InspectEvent {\n if (!isPersistedInspectEvent(event)) {\n throw new Error(\"Invalid PersistedInspectEvent: failed isPersistedInspectEvent\");\n }\n\n const ts = parseIsoToMs(event.timestamp);\n const attrs = buildInspectAttributes(event);\n if (ts.invalidTimestamp) {\n attrs.invalidTimestamp = true;\n }\n\n let status: InspectEvent[\"status\"] | undefined;\n if (\n event.status === \"running\" ||\n event.status === \"ok\" ||\n event.status === \"error\"\n ) {\n status = event.status;\n } else if (event.status === \"unknown\") {\n attrs.persistedStatus = \"unknown\";\n }\n\n const out: InspectEvent = {\n eventId: event.eventId,\n runId: event.runId,\n name: event.name,\n kind: event.kind,\n timestamp: ts.ms,\n confidence: event.confidence,\n source: mapPersistedSourceToInspect(event),\n attributes: compactAttributes(attrs),\n };\n\n if (event.parentId !== undefined) {\n out.parentId = event.parentId;\n }\n if (status !== undefined) {\n out.status = status;\n }\n if (\n event.durationMs !== undefined &&\n Number.isFinite(event.durationMs) &&\n event.durationMs >= 0\n ) {\n out.durationMs = event.durationMs;\n }\n\n return out;\n}\n\n/**\n * Maps persisted v0.2 events to in-memory {@link InspectEvent} rows.\n */\nexport function persistedInspectEventsToInspectEvents(\n events: readonly PersistedInspectEvent[],\n options?: PersistedToInspectEventOptions,\n): InspectEvent[] {\n const skipInvalid = options?.skipInvalid === true;\n const out: InspectEvent[] = [];\n\n for (const event of events) {\n if (!isPersistedInspectEvent(event)) {\n if (skipInvalid) {\n continue;\n }\n throw new Error(\"Invalid PersistedInspectEvent: failed isPersistedInspectEvent\");\n }\n out.push(persistedInspectEventToInspectEvent(event));\n }\n\n return out;\n}\n","import { TreeBuilder } from \"../logs/tree-builder.js\";\nimport type { InspectRunTree } from \"../types/inspect-event.js\";\nimport type { PersistedInspectEvent } from \"../types/persisted-inspect-event.js\";\nimport type { TraceEvent } from \"../types.js\";\n\nimport { traceEventsToPersistedInspectEvents } from \"./from-trace-event.js\";\nimport { persistedInspectEventsToInspectEvents } from \"./to-inspect-event.js\";\n\nexport interface PersistedTreeBridgeOptions {\n /**\n * If true, invalid persisted events are skipped.\n * If false or omitted, invalid persisted events throw.\n */\n skipInvalid?: boolean;\n}\n\n/**\n * Builds {@link InspectRunTree} rows from v0.2 {@link PersistedInspectEvent} input.\n * Uses {@link TreeBuilder} as the canonical tree builder. Does not mutate `events`.\n */\nexport function persistedInspectEventsToRunTrees(\n events: readonly PersistedInspectEvent[],\n options?: PersistedTreeBridgeOptions,\n): InspectRunTree[] {\n const inspectEvents = persistedInspectEventsToInspectEvents(events, {\n skipInvalid: options?.skipInvalid,\n });\n return new TreeBuilder().build(inspectEvents);\n}\n\n/**\n * Builds {@link InspectRunTree} rows from legacy v0.1 {@link TraceEvent} input\n * via the persisted-event model. Does not mutate `events`.\n */\nexport function traceEventsToPersistedRunTrees(\n events: readonly TraceEvent[],\n): InspectRunTree[] {\n const persisted = traceEventsToPersistedInspectEvents(events);\n return persistedInspectEventsToRunTrees(persisted);\n}\n"]}
|