agent-inspect 6.31.6 → 6.31.8
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 +13 -0
- package/README.md +1 -1
- package/docs/AI-SDK-ADOPTION.md +62 -34
- package/package.json +1 -1
- package/packages/cli/dist/{chunk-YXDNWHNJ.mjs → chunk-6FE47XSF.mjs} +119 -34
- package/packages/cli/dist/chunk-6FE47XSF.mjs.map +1 -0
- package/packages/cli/dist/index.cjs +569 -102
- package/packages/cli/dist/index.cjs.map +1 -1
- package/packages/cli/dist/index.mjs +454 -74
- package/packages/cli/dist/index.mjs.map +1 -1
- package/packages/cli/dist/{src-H22KNWAZ.mjs → src-NXAYHG34.mjs} +3 -3
- package/packages/cli/dist/{src-H22KNWAZ.mjs.map → src-NXAYHG34.mjs.map} +1 -1
- package/packages/core/dist/advanced.cjs +116 -31
- package/packages/core/dist/advanced.cjs.map +1 -1
- package/packages/core/dist/advanced.mjs +7 -7
- package/packages/core/dist/checks.mjs +2 -2
- package/packages/core/dist/{chunk-LXYPM2ZO.mjs → chunk-2CCRUI42.mjs} +19 -318
- package/packages/core/dist/chunk-2CCRUI42.mjs.map +1 -0
- package/packages/core/dist/{chunk-Q5SLKV2Y.mjs → chunk-2IRRUNIN.mjs} +28 -5
- package/packages/core/dist/chunk-2IRRUNIN.mjs.map +1 -0
- package/packages/core/dist/{chunk-EXGQLMVB.mjs → chunk-7YYS742B.mjs} +49 -12
- package/packages/core/dist/chunk-7YYS742B.mjs.map +1 -0
- package/packages/core/dist/{chunk-OSGNGRHF.mjs → chunk-IJJSPJXV.mjs} +51 -25
- package/packages/core/dist/chunk-IJJSPJXV.mjs.map +1 -0
- package/packages/core/dist/chunk-L5WLVBW4.mjs +355 -0
- package/packages/core/dist/chunk-L5WLVBW4.mjs.map +1 -0
- package/packages/core/dist/exporters.cjs +327 -58
- package/packages/core/dist/exporters.cjs.map +1 -1
- package/packages/core/dist/exporters.mjs +281 -49
- package/packages/core/dist/exporters.mjs.map +1 -1
- package/packages/core/dist/persisted.cjs +361 -9
- package/packages/core/dist/persisted.cjs.map +1 -1
- package/packages/core/dist/persisted.d.cts +8 -1
- package/packages/core/dist/persisted.d.ts +8 -1
- package/packages/core/dist/persisted.mjs +3 -2
- package/packages/core/dist/persisted.mjs.map +1 -1
- package/packages/core/dist/readers.cjs +425 -100
- package/packages/core/dist/readers.cjs.map +1 -1
- package/packages/core/dist/readers.mjs +3 -3
- package/packages/cli/dist/chunk-YXDNWHNJ.mjs.map +0 -1
- package/packages/core/dist/chunk-EXGQLMVB.mjs.map +0 -1
- package/packages/core/dist/chunk-FWK3Q3OJ.mjs +0 -56
- package/packages/core/dist/chunk-FWK3Q3OJ.mjs.map +0 -1
- package/packages/core/dist/chunk-LXYPM2ZO.mjs.map +0 -1
- package/packages/core/dist/chunk-OSGNGRHF.mjs.map +0 -1
- package/packages/core/dist/chunk-Q5SLKV2Y.mjs.map +0 -1
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { projectLogicalEvents } from './chunk-L5WLVBW4.mjs';
|
|
1
2
|
import { extractCorrelationMetadata } from './chunk-S4YWKV4G.mjs';
|
|
2
3
|
import { TreeBuilder } from './chunk-AK5EN4U2.mjs';
|
|
3
4
|
import { isPersistedInspectEvent } from './chunk-EE5Z2GQ3.mjs';
|
|
@@ -395,6 +396,23 @@ function persistedInspectEventToInspectEvent(event) {
|
|
|
395
396
|
if (event.durationMs !== void 0 && Number.isFinite(event.durationMs) && event.durationMs >= 0) {
|
|
396
397
|
out.durationMs = event.durationMs;
|
|
397
398
|
}
|
|
399
|
+
if (event.startedAt !== void 0) {
|
|
400
|
+
const started = parseIsoToMs(event.startedAt);
|
|
401
|
+
if (!started.invalidTimestamp) {
|
|
402
|
+
attrs.startedAtMs = started.ms;
|
|
403
|
+
out.timestamp = started.ms;
|
|
404
|
+
}
|
|
405
|
+
}
|
|
406
|
+
if (event.endedAt !== void 0) {
|
|
407
|
+
const ended = parseIsoToMs(event.endedAt);
|
|
408
|
+
if (!ended.invalidTimestamp) {
|
|
409
|
+
attrs.endedAtMs = ended.ms;
|
|
410
|
+
if (out.durationMs === void 0 && typeof attrs.startedAtMs === "number" && ended.ms >= attrs.startedAtMs) {
|
|
411
|
+
out.durationMs = ended.ms - attrs.startedAtMs;
|
|
412
|
+
}
|
|
413
|
+
}
|
|
414
|
+
}
|
|
415
|
+
out.attributes = compactAttributes2(attrs);
|
|
398
416
|
return out;
|
|
399
417
|
}
|
|
400
418
|
function persistedInspectEventsToInspectEvents(events, options) {
|
|
@@ -413,17 +431,22 @@ function persistedInspectEventsToInspectEvents(events, options) {
|
|
|
413
431
|
}
|
|
414
432
|
|
|
415
433
|
// packages/core/src/persisted/tree-bridge.ts
|
|
434
|
+
function logicalToPersisted(event) {
|
|
435
|
+
const { sourceEventIds: _sourceEventIds, projection: _projection, ...rest } = event;
|
|
436
|
+
return rest;
|
|
437
|
+
}
|
|
416
438
|
function persistedInspectEventsToRunTrees(events, options) {
|
|
417
|
-
const
|
|
439
|
+
const sourceEvents = options?.coalesceLifecycle === true ? projectLogicalEvents(events).logicalEvents.map(logicalToPersisted) : events;
|
|
440
|
+
const inspectEvents = persistedInspectEventsToInspectEvents(sourceEvents, {
|
|
418
441
|
skipInvalid: options?.skipInvalid
|
|
419
442
|
});
|
|
420
443
|
return new TreeBuilder().build(inspectEvents);
|
|
421
444
|
}
|
|
422
|
-
function traceEventsToPersistedRunTrees(events) {
|
|
445
|
+
function traceEventsToPersistedRunTrees(events, options) {
|
|
423
446
|
const persisted = traceEventsToPersistedInspectEvents(events);
|
|
424
|
-
return persistedInspectEventsToRunTrees(persisted);
|
|
447
|
+
return persistedInspectEventsToRunTrees(persisted, options);
|
|
425
448
|
}
|
|
426
449
|
|
|
427
450
|
export { normalizeTokenUsage, persistedInspectEventToInspectEvent, persistedInspectEventsToInspectEvents, persistedInspectEventsToRunTrees, traceEventToPersistedInspectEvent, traceEventsToPersistedInspectEvents, traceEventsToPersistedRunTrees };
|
|
428
|
-
//# sourceMappingURL=chunk-
|
|
429
|
-
//# sourceMappingURL=chunk-
|
|
451
|
+
//# sourceMappingURL=chunk-2IRRUNIN.mjs.map
|
|
452
|
+
//# sourceMappingURL=chunk-2IRRUNIN.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/persisted/token-usage.ts","../src/persisted/from-trace-event.ts","../src/persisted/to-inspect-event.ts","../src/persisted/tree-bridge.ts"],"names":["compactAttributes"],"mappings":"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","file":"chunk-2IRRUNIN.mjs","sourcesContent":["import type { PersistedTokenUsage } from \"../types/persisted-inspect-event.js\";\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n return typeof value === \"object\" && value !== null && !Array.isArray(value);\n}\n\nfunction nonNegativeFinite(value: unknown): number | undefined {\n return typeof value === \"number\" && Number.isFinite(value) && value >= 0\n ? value\n : undefined;\n}\n\n/**\n * Keeps the approved token vocabulary and derives total only when it is absent.\n * Cached / cache-write / reasoning tokens are informational and are never added to total.\n */\nexport function normalizeTokenUsage(\n value: unknown,\n): PersistedTokenUsage | undefined {\n if (!isRecord(value)) return undefined;\n\n const input = nonNegativeFinite(value.input);\n const output = nonNegativeFinite(value.output);\n const suppliedTotal = nonNegativeFinite(value.total);\n const cached = nonNegativeFinite(value.cached);\n const cacheWrite = nonNegativeFinite(value.cacheWrite);\n const reasoning = nonNegativeFinite(value.reasoning);\n const derivedTotal =\n input !== undefined && output !== undefined && Number.isFinite(input + output)\n ? input + output\n : undefined;\n const total = suppliedTotal ?? derivedTotal;\n\n if (\n input === undefined &&\n output === undefined &&\n total === undefined &&\n cached === undefined &&\n cacheWrite === undefined &&\n reasoning === undefined\n ) {\n return undefined;\n }\n\n return {\n ...(input !== undefined ? { input } : {}),\n ...(output !== undefined ? { output } : {}),\n ...(total !== undefined ? { total } : {}),\n ...(cached !== undefined ? { cached } : {}),\n ...(cacheWrite !== undefined ? { cacheWrite } : {}),\n ...(reasoning !== undefined ? { reasoning } : {}),\n };\n}\n","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\";\nimport { normalizeTokenUsage } from \"./token-usage.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 case \"outcome_observed\":\n return event.outcomeId;\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 return normalizeTokenUsage(metadata?.tokens);\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 case \"outcome_observed\": {\n const tsObserved = toIsoTimestamp(event.observedAt);\n const attributes = compactAttributes({\n legacyEvent: \"outcome_observed\",\n outcomeId: event.outcomeId,\n outcomeStatus: event.status,\n expectation: event.expectation,\n method: event.method,\n actual: event.actual,\n evidence: event.evidence,\n observedAt: tsObserved.iso,\n invalidTimestamp:\n tsMain.invalidTimestamp || tsObserved.invalidTimestamp ? true : undefined,\n });\n\n const out: PersistedInspectEvent = {\n schemaVersion: \"0.2\",\n eventId,\n runId: event.runId,\n kind: \"OUTCOME\",\n name: event.name,\n status: event.status === \"failed\" ? \"error\" : \"ok\",\n timestamp: tsMain.iso,\n confidence: \"explicit\",\n source,\n attributes,\n };\n if (event.parentId !== undefined) {\n out.parentId = event.parentId;\n }\n if (event.actual !== undefined) {\n out.outputSummary = event.actual;\n }\n return out;\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 {\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 if (event.startedAt !== undefined) {\n const started = parseIsoToMs(event.startedAt);\n if (!started.invalidTimestamp) {\n attrs.startedAtMs = started.ms;\n // Prefer real start instant for span timing when timestamp alone is completion-skewed.\n out.timestamp = started.ms;\n }\n }\n if (event.endedAt !== undefined) {\n const ended = parseIsoToMs(event.endedAt);\n if (!ended.invalidTimestamp) {\n attrs.endedAtMs = ended.ms;\n if (\n out.durationMs === undefined &&\n typeof attrs.startedAtMs === \"number\" &&\n ended.ms >= attrs.startedAtMs\n ) {\n out.durationMs = ended.ms - attrs.startedAtMs;\n }\n }\n }\n out.attributes = compactAttributes(attrs);\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 {\n projectLogicalEvents,\n type LogicalTraceEvent,\n} from \"../checks/logical-events.js\";\nimport { 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 * When true, pair v0.1 start/complete lifecycle rows into logical events\n * before tree construction (CLI export fidelity). Schema 1.0 completed-only\n * rows are unchanged. Yields one RUN span per run when run_started+completed\n * pair, and one span per logical tool/step.\n */\n coalesceLifecycle?: boolean;\n}\n\nfunction logicalToPersisted(event: LogicalTraceEvent): PersistedInspectEvent {\n const { sourceEventIds: _sourceEventIds, projection: _projection, ...rest } =\n event;\n return rest;\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 sourceEvents =\n options?.coalesceLifecycle === true\n ? projectLogicalEvents(events).logicalEvents.map(logicalToPersisted)\n : events;\n const inspectEvents = persistedInspectEventsToInspectEvents(sourceEvents, {\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 options?: PersistedTreeBridgeOptions,\n): InspectRunTree[] {\n const persisted = traceEventsToPersistedInspectEvents(events);\n return persistedInspectEventsToRunTrees(persisted, options);\n}\n"]}
|
|
@@ -528,6 +528,8 @@ function renderTraceStats(stats) {
|
|
|
528
528
|
}
|
|
529
529
|
|
|
530
530
|
// packages/core/src/timeline.ts
|
|
531
|
+
var ROOT_TIMELINE_DEPTH = 0;
|
|
532
|
+
var MAX_TIMELINE_DEPTH = 1e3;
|
|
531
533
|
function finite(n) {
|
|
532
534
|
return typeof n === "number" && Number.isFinite(n);
|
|
533
535
|
}
|
|
@@ -598,16 +600,51 @@ function buildRunTimeline(events, options = {}) {
|
|
|
598
600
|
const computeDepth = (stepId) => {
|
|
599
601
|
const cached = depthCache.get(stepId);
|
|
600
602
|
if (cached !== void 0) return cached;
|
|
601
|
-
const
|
|
602
|
-
|
|
603
|
-
|
|
604
|
-
|
|
605
|
-
|
|
606
|
-
|
|
607
|
-
|
|
608
|
-
|
|
609
|
-
|
|
610
|
-
|
|
603
|
+
const ancestry = [];
|
|
604
|
+
const ancestryIndexes = /* @__PURE__ */ new Map();
|
|
605
|
+
let currentStepId = stepId;
|
|
606
|
+
let resolvedDepth;
|
|
607
|
+
while (resolvedDepth === void 0) {
|
|
608
|
+
const cachedDepth = depthCache.get(currentStepId);
|
|
609
|
+
if (cachedDepth !== void 0) {
|
|
610
|
+
resolvedDepth = cachedDepth;
|
|
611
|
+
continue;
|
|
612
|
+
}
|
|
613
|
+
const cycleStart = ancestryIndexes.get(currentStepId);
|
|
614
|
+
if (cycleStart !== void 0) {
|
|
615
|
+
const cycleStepIds = ancestry.splice(cycleStart);
|
|
616
|
+
for (const cycleStepId of cycleStepIds) {
|
|
617
|
+
depthCache.set(cycleStepId, ROOT_TIMELINE_DEPTH);
|
|
618
|
+
}
|
|
619
|
+
resolvedDepth = ROOT_TIMELINE_DEPTH;
|
|
620
|
+
continue;
|
|
621
|
+
}
|
|
622
|
+
const currentStep = steps.get(currentStepId);
|
|
623
|
+
if (!currentStep) {
|
|
624
|
+
resolvedDepth = ROOT_TIMELINE_DEPTH;
|
|
625
|
+
continue;
|
|
626
|
+
}
|
|
627
|
+
ancestryIndexes.set(currentStepId, ancestry.length);
|
|
628
|
+
ancestry.push(currentStepId);
|
|
629
|
+
const parentId = currentStep.parentId;
|
|
630
|
+
if (typeof parentId !== "string" || parentId.trim() === "" || !steps.has(parentId)) {
|
|
631
|
+
ancestry.pop();
|
|
632
|
+
depthCache.set(currentStepId, ROOT_TIMELINE_DEPTH);
|
|
633
|
+
resolvedDepth = ROOT_TIMELINE_DEPTH;
|
|
634
|
+
continue;
|
|
635
|
+
}
|
|
636
|
+
currentStepId = parentId;
|
|
637
|
+
}
|
|
638
|
+
ancestry.reverse();
|
|
639
|
+
for (const ancestorStepId of ancestry) {
|
|
640
|
+
resolvedDepth = Math.min(MAX_TIMELINE_DEPTH, resolvedDepth + 1);
|
|
641
|
+
depthCache.set(ancestorStepId, resolvedDepth);
|
|
642
|
+
}
|
|
643
|
+
const resolvedStepDepth = depthCache.get(stepId);
|
|
644
|
+
if (resolvedStepDepth === void 0) {
|
|
645
|
+
throw new Error(`Failed to resolve timeline depth for step "${stepId}"`);
|
|
646
|
+
}
|
|
647
|
+
return resolvedStepDepth;
|
|
611
648
|
};
|
|
612
649
|
const entries = [];
|
|
613
650
|
for (const [stepId, s] of steps.entries()) {
|
|
@@ -842,5 +879,5 @@ function renderRunWhat(summary, options = {}) {
|
|
|
842
879
|
}
|
|
843
880
|
|
|
844
881
|
export { buildRunSummary, buildRunTimeline, buildRunWhatSummary, buildTraceStats, extractMetadata, filterTraces, formatStepLabel, renderRunWhat, renderTimeline, renderTraceStats };
|
|
845
|
-
//# sourceMappingURL=chunk-
|
|
846
|
-
//# sourceMappingURL=chunk-
|
|
882
|
+
//# sourceMappingURL=chunk-7YYS742B.mjs.map
|
|
883
|
+
//# sourceMappingURL=chunk-7YYS742B.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/trace-metadata.ts","../src/trace-filter.ts","../src/stats.ts","../src/timeline.ts","../src/what.ts"],"names":["pickCorrelation"],"mappings":"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","file":"chunk-7YYS742B.mjs","sourcesContent":["import { readFile, stat } from \"node:fs/promises\";\nimport path from \"node:path\";\n\nimport type {\n RunCompletedEvent,\n RunStartedEvent,\n StepCompletedEvent,\n StepStartedEvent,\n TraceEvent,\n TraceMetadata,\n TraceMetadataStatus,\n RunSummary,\n StepType,\n StepStatus,\n} from \"./types.js\";\nimport { parseTraceJsonl } from \"./read-trace.js\";\n\nfunction isFiniteNumber(v: unknown): v is number {\n return typeof v === \"number\" && Number.isFinite(v);\n}\n\nfunction parseIsoToMs(value: string | undefined): number | undefined {\n if (value === undefined) return undefined;\n const parsed = Date.parse(value);\n return Number.isFinite(parsed) ? parsed : undefined;\n}\n\nexport async function extractMetadata(\n filePath: string,\n _quickScan?: boolean,\n): Promise<TraceMetadata> {\n const stats = await stat(filePath);\n\n let runIdFromFile = path.basename(filePath);\n if (runIdFromFile.endsWith(\".jsonl\")) {\n runIdFromFile = runIdFromFile.slice(0, -\".jsonl\".length);\n }\n\n const raw = await readFile(filePath, \"utf-8\");\n const parsedTrace = parseTraceJsonl(raw, { warnings: false });\n\n let runId: string | undefined;\n let name: string | undefined;\n let startedAt: number | undefined;\n let endedAt: number | undefined;\n let explicitDurationMs: number | undefined;\n\n let hasRunStarted = false;\n let hasRunCompleted = false;\n let runCompletedStatus: \"success\" | \"error\" | undefined;\n let anyStepError = false;\n const anyKnownEvent = parsedTrace.sourceEventCount > 0;\n let persistedStatus: TraceMetadataStatus | undefined;\n\n const persistedRun = parsedTrace.persisted.find(\n (event) => event.kind === \"RUN\",\n );\n if (persistedRun) {\n runId = persistedRun.runId;\n if (persistedRun.name.trim() !== \"\") {\n name = persistedRun.name;\n }\n startedAt =\n parseIsoToMs(persistedRun.startedAt) ??\n parseIsoToMs(persistedRun.timestamp);\n endedAt = parseIsoToMs(persistedRun.endedAt);\n if (isFiniteNumber(persistedRun.durationMs)) {\n explicitDurationMs = persistedRun.durationMs;\n if (endedAt === undefined && startedAt !== undefined) {\n endedAt = startedAt + persistedRun.durationMs;\n }\n }\n if (persistedRun.status === \"ok\") persistedStatus = \"success\";\n else if (persistedRun.status === \"error\") persistedStatus = \"error\";\n else if (persistedRun.status === \"running\") persistedStatus = \"running\";\n else if (persistedRun.status === \"unknown\") persistedStatus = \"unknown\";\n } else {\n runId = parsedTrace.persisted[0]?.runId;\n }\n\n for (const e of parsedTrace.events) {\n if (\n runId === undefined &&\n typeof (e as { runId?: unknown }).runId === \"string\"\n ) {\n runId = (e as { runId: string }).runId;\n }\n\n if (e.event === \"run_started\") {\n hasRunStarted = true;\n const rs = e as RunStartedEvent;\n if (typeof rs.name === \"string\" && rs.name.trim() !== \"\") {\n name = rs.name;\n }\n if (isFiniteNumber(rs.startTime)) {\n startedAt = rs.startTime;\n } else if (isFiniteNumber(rs.timestamp)) {\n startedAt = rs.timestamp;\n }\n }\n\n if (e.event === \"run_completed\") {\n hasRunCompleted = true;\n const rc = e as RunCompletedEvent;\n runCompletedStatus = rc.status;\n if (isFiniteNumber(rc.endTime)) endedAt = rc.endTime;\n else if (isFiniteNumber(rc.timestamp)) endedAt = rc.timestamp;\n if (isFiniteNumber(rc.durationMs)) explicitDurationMs = rc.durationMs;\n }\n\n if (e.event === \"step_completed\") {\n const sc = e as StepCompletedEvent;\n if (sc.status === \"error\") {\n anyStepError = true;\n }\n }\n }\n\n const resolvedRunId = runId ?? runIdFromFile;\n\n let status: TraceMetadataStatus = \"unknown\";\n if (\n hasRunCompleted &&\n (runCompletedStatus === \"success\" || runCompletedStatus === \"error\")\n ) {\n status = runCompletedStatus;\n } else if (anyStepError) {\n // If run_completed is missing, but at least one step failed, treat as error.\n status = \"error\";\n } else if (persistedStatus !== undefined) {\n status = persistedStatus;\n } else if (hasRunStarted && !hasRunCompleted) {\n status = \"running\";\n } else if (anyKnownEvent) {\n status = \"unknown\";\n } else {\n status = \"unknown\";\n }\n\n const durationMs =\n explicitDurationMs ??\n (startedAt !== undefined &&\n endedAt !== undefined &&\n Number.isFinite(startedAt) &&\n Number.isFinite(endedAt) &&\n endedAt >= startedAt\n ? endedAt - startedAt\n : undefined);\n\n return {\n runId: resolvedRunId,\n name,\n status,\n startedAt,\n endedAt,\n durationMs,\n eventCount: parsedTrace.sourceEventCount,\n filePath,\n fileSize: stats.size,\n createdAt: stats.birthtime,\n };\n}\n\ntype StepAgg = {\n type: StepType;\n name: string;\n status: StepStatus;\n durationMs?: number;\n parentId?: string;\n tokensInput?: number;\n tokensOutput?: number;\n tokensTotal?: number;\n tokensCached?: number;\n tokensCacheWrite?: number;\n tokensReasoning?: number;\n};\n\nconst ROOT_STEP_DEPTH = 0;\nconst MAX_RUN_SUMMARY_DEPTH = 1000;\n\nfunction isNonNegativeFiniteNumber(value: unknown): value is number {\n return typeof value === \"number\" && Number.isFinite(value) && value >= 0;\n}\n\nfunction resolveParentStepId(\n step: StepAgg,\n steps: ReadonlyMap<string, StepAgg>,\n): string | undefined {\n const parentId = step.parentId;\n if (typeof parentId !== \"string\" || parentId.trim() === \"\") {\n return undefined;\n }\n\n return steps.has(parentId) ? parentId : undefined;\n}\n\n// Resolve ancestry iteratively so malformed cycles and deeply nested\n// valid traces cannot overflow the JavaScript call stack.\nfunction computeStepDepth(\n stepId: string,\n steps: ReadonlyMap<string, StepAgg>,\n depthCache: Map<string, number>,\n): number {\n const cached = depthCache.get(stepId);\n if (cached !== undefined) return cached;\n\n const ancestry: string[] = [];\n const ancestryIndexes = new Map<string, number>();\n let currentStepId = stepId;\n let resolvedDepth: number | undefined;\n\n while (resolvedDepth === undefined) {\n const cachedDepth = depthCache.get(currentStepId);\n if (cachedDepth !== undefined) {\n resolvedDepth = cachedDepth;\n continue;\n }\n\n const cycleStart = ancestryIndexes.get(currentStepId);\n if (cycleStart !== undefined) {\n const cycleStepIds = ancestry.splice(cycleStart);\n for (const cycleStepId of cycleStepIds) {\n depthCache.set(cycleStepId, ROOT_STEP_DEPTH);\n }\n resolvedDepth = ROOT_STEP_DEPTH;\n continue;\n }\n\n const currentStep = steps.get(currentStepId);\n if (!currentStep) {\n resolvedDepth = ROOT_STEP_DEPTH;\n continue;\n }\n\n ancestryIndexes.set(currentStepId, ancestry.length);\n ancestry.push(currentStepId);\n\n const parentStepId = resolveParentStepId(currentStep, steps);\n if (parentStepId === undefined) {\n ancestry.pop();\n depthCache.set(currentStepId, ROOT_STEP_DEPTH);\n resolvedDepth = ROOT_STEP_DEPTH;\n continue;\n }\n\n currentStepId = parentStepId;\n }\n\n // Depth is parent depth + 1. Cap at a sane limit after cycles are resolved.\n ancestry.reverse();\n for (const ancestorStepId of ancestry) {\n resolvedDepth = Math.min(MAX_RUN_SUMMARY_DEPTH, resolvedDepth + 1);\n depthCache.set(ancestorStepId, resolvedDepth);\n }\n\n return depthCache.get(stepId) ?? ROOT_STEP_DEPTH;\n}\n\nexport function buildRunSummary(events: TraceEvent[]): RunSummary {\n const started = events.find(\n (e): e is RunStartedEvent => e.event === \"run_started\",\n );\n const completed = events.filter(\n (e): e is RunCompletedEvent => e.event === \"run_completed\",\n );\n const lastCompleted = completed[completed.length - 1];\n\n const runId = started?.runId ?? events.find((e: any) => typeof e.runId === \"string\")?.runId ?? \"unknown-run\";\n\n const name =\n typeof started?.name === \"string\" && started.name.trim() !== \"\"\n ? started.name\n : undefined;\n\n const status: TraceMetadataStatus = lastCompleted\n ? lastCompleted.status\n : started\n ? \"running\"\n : \"unknown\";\n\n const durationMs =\n lastCompleted && isFiniteNumber(lastCompleted.durationMs)\n ? lastCompleted.durationMs\n : undefined;\n\n const startedAt =\n started && isFiniteNumber(started.startTime)\n ? started.startTime\n : undefined;\n\n const steps = new Map<string, StepAgg>();\n\n for (const e of events) {\n if (e.event === \"step_started\") {\n const s = e as StepStartedEvent;\n steps.set(s.stepId, {\n type: s.type,\n name: s.name,\n status: \"running\",\n parentId: s.parentId,\n tokensInput:\n isNonNegativeFiniteNumber(s.metadata?.tokens?.input)\n ? s.metadata.tokens.input\n : undefined,\n tokensOutput:\n isNonNegativeFiniteNumber(s.metadata?.tokens?.output)\n ? s.metadata.tokens.output\n : undefined,\n tokensTotal: isNonNegativeFiniteNumber(s.metadata?.tokens?.total)\n ? s.metadata.tokens.total\n : undefined,\n tokensCached: isNonNegativeFiniteNumber(s.metadata?.tokens?.cached)\n ? s.metadata.tokens.cached\n : undefined,\n tokensCacheWrite: isNonNegativeFiniteNumber(\n s.metadata?.tokens?.cacheWrite,\n )\n ? s.metadata.tokens.cacheWrite\n : undefined,\n tokensReasoning: isNonNegativeFiniteNumber(\n s.metadata?.tokens?.reasoning,\n )\n ? s.metadata.tokens.reasoning\n : undefined,\n });\n }\n }\n\n for (const e of events) {\n if (e.event === \"step_completed\") {\n const c = e as StepCompletedEvent;\n const existing = steps.get(c.stepId);\n if (!existing) continue;\n existing.status = c.status;\n existing.durationMs = c.durationMs;\n }\n }\n\n let totalSteps = 0;\n let llmSteps = 0;\n let toolSteps = 0;\n let logicSteps = 0;\n let errorSteps = 0;\n let maxDepth = 0;\n let longestStep: RunSummary[\"longestStep\"] | undefined;\n\n let totalTokensInput = 0;\n let totalTokensOutput = 0;\n let totalTokensTotal = 0;\n let totalTokensCached = 0;\n let totalTokensCacheWrite = 0;\n let totalTokensReasoning = 0;\n let tokenBearingSteps = 0;\n let stepsWithKnownTotal = 0;\n let hasCachedTokens = false;\n let hasCacheWriteTokens = false;\n let hasReasoningTokens = false;\n\n const depthCache = new Map<string, number>();\n\n for (const [id, s] of steps.entries()) {\n totalSteps += 1;\n if (s.type === \"llm\") llmSteps += 1;\n else if (s.type === \"tool\") toolSteps += 1;\n else logicSteps += 1;\n\n if (s.status === \"error\") errorSteps += 1;\n const depth = computeStepDepth(id, steps, depthCache);\n if (depth > maxDepth) maxDepth = depth;\n\n if (typeof s.durationMs === \"number\" && Number.isFinite(s.durationMs)) {\n if (!longestStep || s.durationMs > longestStep.durationMs) {\n longestStep = { name: s.name, durationMs: s.durationMs, type: s.type };\n }\n }\n\n if (\n s.tokensInput !== undefined ||\n s.tokensOutput !== undefined ||\n s.tokensTotal !== undefined ||\n s.tokensCached !== undefined ||\n s.tokensCacheWrite !== undefined ||\n s.tokensReasoning !== undefined\n ) {\n tokenBearingSteps += 1;\n if (s.tokensInput !== undefined) totalTokensInput += s.tokensInput;\n if (s.tokensOutput !== undefined) totalTokensOutput += s.tokensOutput;\n\n if (s.tokensTotal !== undefined) {\n totalTokensTotal += s.tokensTotal;\n stepsWithKnownTotal += 1;\n } else if (s.tokensInput !== undefined && s.tokensOutput !== undefined) {\n totalTokensTotal += s.tokensInput + s.tokensOutput;\n stepsWithKnownTotal += 1;\n }\n\n if (s.tokensCached !== undefined) {\n totalTokensCached += s.tokensCached;\n hasCachedTokens = true;\n }\n if (s.tokensCacheWrite !== undefined) {\n totalTokensCacheWrite += s.tokensCacheWrite;\n hasCacheWriteTokens = true;\n }\n if (s.tokensReasoning !== undefined) {\n totalTokensReasoning += s.tokensReasoning;\n hasReasoningTokens = true;\n }\n }\n }\n\n const summary: RunSummary = {\n runId,\n name,\n status,\n durationMs,\n totalSteps,\n llmSteps,\n toolSteps,\n logicSteps,\n errorSteps,\n maxDepth,\n ...(longestStep ? { longestStep } : {}),\n ...(tokenBearingSteps > 0\n ? {\n totalTokens: {\n input: totalTokensInput,\n output: totalTokensOutput,\n ...(stepsWithKnownTotal === tokenBearingSteps\n ? { total: totalTokensTotal }\n : {}),\n ...(hasCachedTokens ? { cached: totalTokensCached } : {}),\n ...(hasCacheWriteTokens\n ? { cacheWrite: totalTokensCacheWrite }\n : {}),\n ...(hasReasoningTokens\n ? { reasoning: totalTokensReasoning }\n : {}),\n },\n }\n : {}),\n };\n\n // startedAt isn't in RunSummary spec, but keep deterministic results: ignore.\n void startedAt;\n return summary;\n}\n","import type { TraceMetadata, TraceMetadataStatus } from \"./types.js\";\nimport { parseDuration } from \"./utils/duration.js\";\n\nexport interface TraceFilterOptions {\n status?: TraceMetadataStatus;\n name?: string;\n since?: string;\n limit?: number;\n}\n\nfunction toLower(s: string | undefined): string {\n return typeof s === \"string\" ? s.toLowerCase() : \"\";\n}\n\nexport function filterTraces(\n traces: TraceMetadata[],\n options: TraceFilterOptions,\n): TraceMetadata[] {\n const input = [...traces];\n\n let out = input.filter((t) => {\n if (options.status && t.status !== options.status) return false;\n\n if (options.name) {\n const q = options.name.toLowerCase();\n const hay = `${toLower(t.name)} ${toLower(t.runId)}`;\n if (!hay.includes(q)) return false;\n }\n\n if (options.since) {\n const windowMs = parseDuration(options.since);\n const cutoff = Date.now() - windowMs;\n const started = typeof t.startedAt === \"number\" ? t.startedAt : undefined;\n const basis = started ?? t.createdAt.getTime();\n if (!Number.isFinite(basis) || basis < cutoff) return false;\n }\n\n return true;\n });\n\n out.sort((a, b) => {\n const aTime = (typeof a.startedAt === \"number\" ? a.startedAt : undefined) ?? a.createdAt.getTime();\n const bTime = (typeof b.startedAt === \"number\" ? b.startedAt : undefined) ?? b.createdAt.getTime();\n return bTime - aTime;\n });\n\n if (typeof options.limit === \"number\" && Number.isFinite(options.limit)) {\n const n = Math.max(0, Math.floor(options.limit));\n out = out.slice(0, n);\n }\n\n return out;\n}\n\n","import type { RunStartedEvent, TraceEvent, TraceMetadata } from \"./types.js\";\nimport { buildRunSummary } from \"./trace-metadata.js\";\nimport { filterTraces } from \"./trace-filter.js\";\nimport { readTraceEventsFromFile } from \"./storage.js\";\nimport { formatDuration } from \"./utils.js\";\n\nexport interface DurationStats {\n minMs?: number;\n maxMs?: number;\n avgMs?: number;\n p50Ms?: number;\n p95Ms?: number;\n}\n\nexport interface TraceStatsRankedRun {\n runId: string;\n name?: string;\n durationMs?: number;\n status: string;\n}\n\nexport interface TraceStatsRankedStep {\n runId: string;\n stepName: string;\n stepType: string;\n durationMs: number;\n}\n\nexport interface TraceStats {\n traceDir: string;\n since?: string;\n correlationId?: string;\n groupId?: string;\n totalRuns: number;\n successCount: number;\n errorCount: number;\n runningCount: number;\n unknownCount: number;\n errorRate: number;\n duration: DurationStats;\n totalSteps: number;\n avgStepsPerRun: number;\n totalLlmSteps: number;\n totalToolSteps: number;\n totalErrorSteps: number;\n slowestRuns: TraceStatsRankedRun[];\n slowestSteps: TraceStatsRankedStep[];\n}\n\nexport interface TraceStatsOptions {\n traceDir: string;\n since?: string;\n correlationId?: string;\n groupId?: string;\n slowRunLimit?: number;\n slowStepLimit?: number;\n}\n\nfunction percentile(sorted: number[], p: number): number | undefined {\n if (sorted.length === 0) return undefined;\n const idx = Math.min(\n sorted.length - 1,\n Math.max(0, Math.ceil((p / 100) * sorted.length) - 1),\n );\n return sorted[idx];\n}\n\nasync function readRunStartedMetadata(\n filePath: string,\n): Promise<Record<string, unknown> | undefined> {\n try {\n const events = await readTraceEventsFromFile(filePath);\n for (const event of events) {\n if (event.event !== \"run_started\") continue;\n const rs = event as RunStartedEvent;\n if (rs.metadata && typeof rs.metadata === \"object\") {\n return rs.metadata as Record<string, unknown>;\n }\n return undefined;\n }\n } catch {\n /* skip */\n }\n return undefined;\n}\n\nfunction metaMatchesCorrelation(\n metadata: Record<string, unknown> | undefined,\n correlationId?: string,\n groupId?: string,\n): boolean {\n if (correlationId) {\n const v = metadata?.correlationId;\n if (typeof v !== \"string\" || v !== correlationId) return false;\n }\n if (groupId) {\n const v = metadata?.groupId;\n if (typeof v !== \"string\" || v !== groupId) return false;\n }\n return true;\n}\n\nexport async function buildTraceStats(\n metas: TraceMetadata[],\n options: TraceStatsOptions,\n): Promise<TraceStats> {\n let filtered = filterTraces(metas, { since: options.since });\n\n if (options.correlationId || options.groupId) {\n const next: TraceMetadata[] = [];\n for (const m of filtered) {\n const md = await readRunStartedMetadata(m.filePath);\n if (metaMatchesCorrelation(md, options.correlationId, options.groupId)) {\n next.push(m);\n }\n }\n filtered = next;\n }\n\n let successCount = 0;\n let errorCount = 0;\n let runningCount = 0;\n let unknownCount = 0;\n const durations: number[] = [];\n let totalSteps = 0;\n let totalLlmSteps = 0;\n let totalToolSteps = 0;\n let totalErrorSteps = 0;\n const slowestRuns: TraceStatsRankedRun[] = [];\n const slowestSteps: TraceStatsRankedStep[] = [];\n\n for (const m of filtered) {\n if (m.status === \"success\") successCount += 1;\n else if (m.status === \"error\") errorCount += 1;\n else if (m.status === \"running\") runningCount += 1;\n else unknownCount += 1;\n\n if (\n typeof m.durationMs === \"number\" &&\n Number.isFinite(m.durationMs) &&\n m.durationMs >= 0\n ) {\n durations.push(m.durationMs);\n slowestRuns.push({\n runId: m.runId,\n name: m.name,\n durationMs: m.durationMs,\n status: m.status,\n });\n }\n\n try {\n const events = await readTraceEventsFromFile(m.filePath);\n if (events.length === 0) continue;\n const summary = buildRunSummary(events);\n totalSteps += summary.totalSteps;\n totalLlmSteps += summary.llmSteps;\n totalToolSteps += summary.toolSteps;\n totalErrorSteps += summary.errorSteps;\n\n const steps = collectCompletedSteps(events, m.runId);\n for (const s of steps) {\n slowestSteps.push(s);\n }\n } catch {\n /* skip malformed */\n }\n }\n\n slowestRuns.sort((a, b) => (b.durationMs ?? 0) - (a.durationMs ?? 0));\n slowestSteps.sort((a, b) => b.durationMs - a.durationMs);\n\n const runLimit = options.slowRunLimit ?? 5;\n const stepLimit = options.slowStepLimit ?? 5;\n const sortedDur = [...durations].sort((a, b) => a - b);\n const totalRuns = filtered.length;\n const errorRate = totalRuns > 0 ? errorCount / totalRuns : 0;\n const sumDur = durations.reduce((a, b) => a + b, 0);\n\n return {\n traceDir: options.traceDir,\n ...(options.since ? { since: options.since } : {}),\n ...(options.correlationId ? { correlationId: options.correlationId } : {}),\n ...(options.groupId ? { groupId: options.groupId } : {}),\n totalRuns,\n successCount,\n errorCount,\n runningCount,\n unknownCount,\n errorRate,\n duration: {\n ...(sortedDur.length > 0\n ? {\n minMs: sortedDur[0],\n maxMs: sortedDur[sortedDur.length - 1],\n avgMs: sumDur / sortedDur.length,\n p50Ms: percentile(sortedDur, 50),\n p95Ms: percentile(sortedDur, 95),\n }\n : {}),\n },\n totalSteps,\n avgStepsPerRun: totalRuns > 0 ? totalSteps / totalRuns : 0,\n totalLlmSteps,\n totalToolSteps,\n totalErrorSteps,\n slowestRuns: slowestRuns.slice(0, runLimit),\n slowestSteps: slowestSteps.slice(0, stepLimit),\n };\n}\n\nfunction collectCompletedSteps(\n events: TraceEvent[],\n runId: string,\n): TraceStatsRankedStep[] {\n const started = new Map<string, { name: string; type: string }>();\n const out: TraceStatsRankedStep[] = [];\n for (const e of events) {\n if (e.event === \"step_started\") {\n const s = e as { stepId: string; name: string; type: string };\n started.set(s.stepId, { name: s.name, type: s.type });\n }\n if (e.event === \"step_completed\") {\n const c = e as {\n stepId: string;\n durationMs?: number;\n status: string;\n };\n if (c.status !== \"success\" && c.status !== \"error\") continue;\n if (typeof c.durationMs !== \"number\" || !Number.isFinite(c.durationMs)) {\n continue;\n }\n const meta = started.get(c.stepId);\n out.push({\n runId,\n stepName: meta?.name ?? c.stepId,\n stepType: meta?.type ?? \"logic\",\n durationMs: c.durationMs,\n });\n }\n }\n return out;\n}\n\n/**\n * Formats a step label for display. `step.tool`/`step.llm` already store the\n * name with its type prefix (e.g. \"tool:lookup\"), while plain `step()` stores a\n * bare name, so prefixing unconditionally would double the prefix. Add the type\n * prefix only when the name does not already carry it, matching what list/view\n * show for the same step.\n */\nexport function formatStepLabel(stepType: string, stepName: string): string {\n return stepName.startsWith(`${stepType}:`) ? stepName : `${stepType}:${stepName}`;\n}\n\nexport function renderTraceStats(stats: TraceStats): string {\n const lines: string[] = [];\n lines.push(\"Trace stats (local)\");\n lines.push(`Directory: ${stats.traceDir}`);\n if (stats.since) lines.push(`Since: ${stats.since}`);\n if (stats.correlationId) lines.push(`Correlation ID: ${stats.correlationId}`);\n if (stats.groupId) lines.push(`Group ID: ${stats.groupId}`);\n lines.push(\"\");\n lines.push(`Runs: ${stats.totalRuns}`);\n lines.push(\n ` success: ${stats.successCount} error: ${stats.errorCount} running: ${stats.runningCount} unknown: ${stats.unknownCount}`,\n );\n lines.push(`Error rate: ${(stats.errorRate * 100).toFixed(1)}%`);\n if (stats.duration.avgMs !== undefined) {\n lines.push(\n `Duration: min ${formatDuration(stats.duration.minMs ?? 0)} | avg ${formatDuration(stats.duration.avgMs)} | p50 ${formatDuration(stats.duration.p50Ms ?? 0)} | p95 ${formatDuration(stats.duration.p95Ms ?? 0)} | max ${formatDuration(stats.duration.maxMs ?? 0)}`,\n );\n }\n lines.push(\"\");\n lines.push(`Steps: ${stats.totalSteps} (avg ${stats.avgStepsPerRun.toFixed(1)} per run)`);\n lines.push(\n ` LLM: ${stats.totalLlmSteps} tool: ${stats.totalToolSteps} errors: ${stats.totalErrorSteps}`,\n );\n if (stats.slowestRuns.length > 0) {\n lines.push(\"\");\n lines.push(\"Slowest runs:\");\n for (const r of stats.slowestRuns) {\n lines.push(\n ` ${r.runId} | ${r.name ?? \"-\"} | ${formatDuration(r.durationMs ?? 0)} | ${r.status}`,\n );\n }\n }\n if (stats.slowestSteps.length > 0) {\n lines.push(\"\");\n lines.push(\"Slowest steps:\");\n for (const s of stats.slowestSteps) {\n lines.push(\n ` ${s.runId} | ${formatStepLabel(s.stepType, s.stepName)} | ${formatDuration(s.durationMs)}`,\n );\n }\n }\n return lines.join(\"\\n\");\n}\n","import type {\n RunCompletedEvent,\n RunStartedEvent,\n StepCompletedEvent,\n StepStartedEvent,\n StepStatus,\n StepType,\n TraceEvent,\n TraceMetadataStatus,\n} from \"./types.js\";\nimport { formatStepLabel } from \"./stats.js\";\nimport { formatDuration, formatTimestamp } from \"./utils.js\";\n\nexport type TimelineFocus = \"all\" | \"slow\";\n\nexport interface TimelineEntry {\n stepId: string;\n name: string;\n type: StepType;\n status: StepStatus;\n depth: number;\n startedAt: number;\n offsetMs: number;\n durationMs?: number;\n isError: boolean;\n slow?: boolean;\n streaming?: {\n chunkCount?: number;\n streamDurationMs?: number;\n streamedCharCount?: number;\n };\n}\n\nexport interface RunTimeline {\n runId: string;\n name?: string;\n status: TraceMetadataStatus;\n startedAt?: number;\n endedAt?: number;\n durationMs?: number;\n correlation?: {\n correlationId?: string;\n requestId?: string;\n decisionId?: string;\n groupId?: string;\n };\n entries: TimelineEntry[];\n}\n\nexport interface TimelineOptions {\n focus?: TimelineFocus;\n slowTopN?: number;\n}\n\nconst ROOT_TIMELINE_DEPTH = 0;\nconst MAX_TIMELINE_DEPTH = 1000;\n\nfunction finite(n: unknown): n is number {\n return typeof n === \"number\" && Number.isFinite(n);\n}\n\nfunction pickStreamingMeta(\n metadata: Record<string, unknown> | undefined,\n): TimelineEntry[\"streaming\"] | undefined {\n if (!metadata || typeof metadata !== \"object\") return undefined;\n const chunkCount = metadata.chunkCount;\n const streamDurationMs = metadata.streamDurationMs;\n const streamedCharCount = metadata.streamedCharCount;\n if (\n !finite(chunkCount) &&\n !finite(streamDurationMs) &&\n !finite(streamedCharCount)\n ) {\n return undefined;\n }\n return {\n ...(finite(chunkCount) ? { chunkCount } : {}),\n ...(finite(streamDurationMs) ? { streamDurationMs } : {}),\n ...(finite(streamedCharCount) ? { streamedCharCount } : {}),\n };\n}\n\nfunction pickCorrelation(\n metadata: Record<string, unknown> | undefined,\n): RunTimeline[\"correlation\"] | undefined {\n if (!metadata || typeof metadata !== \"object\") return undefined;\n const out: NonNullable<RunTimeline[\"correlation\"]> = {};\n for (const key of [\n \"correlationId\",\n \"requestId\",\n \"decisionId\",\n \"groupId\",\n ] as const) {\n const v = metadata[key];\n if (typeof v === \"string\" && v.trim() !== \"\") {\n out[key] = v;\n }\n }\n return Object.keys(out).length > 0 ? out : undefined;\n}\n\nexport function buildRunTimeline(\n events: readonly TraceEvent[],\n options: TimelineOptions = {},\n): RunTimeline {\n const started = events.find(\n (e): e is RunStartedEvent => e.event === \"run_started\",\n );\n const completed = events.filter(\n (e): e is RunCompletedEvent => e.event === \"run_completed\",\n );\n const lastCompleted = completed[completed.length - 1];\n\n const runId =\n started?.runId ??\n events.find((e) => typeof (e as { runId?: string }).runId === \"string\")\n ?.runId ??\n \"unknown-run\";\n\n const runStart =\n started && finite(started.startTime)\n ? started.startTime\n : started && finite(started.timestamp)\n ? started.timestamp\n : undefined;\n\n const status: TraceMetadataStatus = lastCompleted\n ? lastCompleted.status\n : started\n ? \"running\"\n : \"unknown\";\n\n const steps = new Map<\n string,\n {\n name: string;\n type: StepType;\n parentId?: string;\n startedAt: number;\n status: StepStatus;\n durationMs?: number;\n metadata?: Record<string, unknown>;\n }\n >();\n\n for (const e of events) {\n if (e.event === \"step_started\") {\n const s = e as StepStartedEvent;\n steps.set(s.stepId, {\n name: s.name,\n type: s.type,\n parentId: s.parentId,\n startedAt: finite(s.startTime) ? s.startTime : s.timestamp,\n status: \"running\",\n metadata: s.metadata as Record<string, unknown> | undefined,\n });\n }\n }\n\n for (const e of events) {\n if (e.event !== \"step_completed\") continue;\n const c = e as StepCompletedEvent;\n const node = steps.get(c.stepId);\n if (!node) continue;\n node.status = c.status;\n if (finite(c.durationMs)) node.durationMs = c.durationMs;\n }\n\n const depthCache = new Map<string, number>();\n const computeDepth = (stepId: string): number => {\n const cached = depthCache.get(stepId);\n if (cached !== undefined) return cached;\n\n const ancestry: string[] = [];\n const ancestryIndexes = new Map<string, number>();\n let currentStepId = stepId;\n let resolvedDepth: number | undefined;\n\n while (resolvedDepth === undefined) {\n const cachedDepth = depthCache.get(currentStepId);\n if (cachedDepth !== undefined) {\n resolvedDepth = cachedDepth;\n continue;\n }\n\n const cycleStart = ancestryIndexes.get(currentStepId);\n if (cycleStart !== undefined) {\n const cycleStepIds = ancestry.splice(cycleStart);\n for (const cycleStepId of cycleStepIds) {\n depthCache.set(cycleStepId, ROOT_TIMELINE_DEPTH);\n }\n resolvedDepth = ROOT_TIMELINE_DEPTH;\n continue;\n }\n\n const currentStep = steps.get(currentStepId);\n if (!currentStep) {\n resolvedDepth = ROOT_TIMELINE_DEPTH;\n continue;\n }\n\n ancestryIndexes.set(currentStepId, ancestry.length);\n ancestry.push(currentStepId);\n\n const parentId = currentStep.parentId;\n if (\n typeof parentId !== \"string\" ||\n parentId.trim() === \"\" ||\n !steps.has(parentId)\n ) {\n ancestry.pop();\n depthCache.set(currentStepId, ROOT_TIMELINE_DEPTH);\n resolvedDepth = ROOT_TIMELINE_DEPTH;\n continue;\n }\n\n currentStepId = parentId;\n }\n\n ancestry.reverse();\n for (const ancestorStepId of ancestry) {\n resolvedDepth = Math.min(MAX_TIMELINE_DEPTH, resolvedDepth + 1);\n depthCache.set(ancestorStepId, resolvedDepth);\n }\n\n const resolvedStepDepth = depthCache.get(stepId);\n if (resolvedStepDepth === undefined) {\n throw new Error(`Failed to resolve timeline depth for step \"${stepId}\"`);\n }\n return resolvedStepDepth;\n };\n\n const entries: TimelineEntry[] = [];\n for (const [stepId, s] of steps.entries()) {\n const offsetMs =\n runStart !== undefined && finite(s.startedAt)\n ? Math.max(0, s.startedAt - runStart)\n : 0;\n entries.push({\n stepId,\n name: s.name,\n type: s.type,\n status: s.status,\n depth: computeDepth(stepId),\n startedAt: s.startedAt,\n offsetMs,\n durationMs: s.durationMs,\n isError: s.status === \"error\",\n streaming: pickStreamingMeta(s.metadata),\n });\n }\n\n entries.sort((a, b) => a.startedAt - b.startedAt);\n\n const slowTopN = options.slowTopN ?? 3;\n if (options.focus === \"slow\" && entries.length > 0) {\n const ranked = [...entries]\n .filter((e) => finite(e.durationMs))\n .sort((a, b) => (b.durationMs ?? 0) - (a.durationMs ?? 0));\n const slowIds = new Set(\n ranked.slice(0, slowTopN).map((e) => e.stepId),\n );\n for (const e of entries) {\n if (slowIds.has(e.stepId)) e.slow = true;\n }\n }\n\n return {\n runId,\n name:\n typeof started?.name === \"string\" && started.name.trim() !== \"\"\n ? started.name\n : undefined,\n status,\n startedAt: runStart,\n endedAt:\n lastCompleted && finite(lastCompleted.endTime)\n ? lastCompleted.endTime\n : undefined,\n durationMs:\n lastCompleted && finite(lastCompleted.durationMs)\n ? lastCompleted.durationMs\n : undefined,\n correlation: pickCorrelation(\n started?.metadata as Record<string, unknown> | undefined,\n ),\n entries,\n };\n}\n\nexport interface RenderTimelineOptions {\n focus?: TimelineFocus;\n}\n\nexport function renderTimeline(\n timeline: RunTimeline,\n options: RenderTimelineOptions = {},\n): string {\n const lines: string[] = [];\n lines.push(`Timeline: ${timeline.name ?? timeline.runId}`);\n lines.push(`Run ID: ${timeline.runId}`);\n lines.push(`Status: ${timeline.status}`);\n if (timeline.startedAt !== undefined) {\n lines.push(`Started: ${formatTimestamp(timeline.startedAt)}`);\n }\n if (timeline.durationMs !== undefined) {\n lines.push(`Duration: ${formatDuration(timeline.durationMs)}`);\n }\n if (timeline.correlation) {\n const parts = Object.entries(timeline.correlation)\n .filter(([, v]) => typeof v === \"string\")\n .map(([k, v]) => `${k}=${v}`);\n if (parts.length > 0) {\n lines.push(`Correlation: ${parts.join(\", \")}`);\n }\n }\n lines.push(\"\");\n lines.push(\"Steps (chronological):\");\n\n const show = timeline.entries.filter((e) => {\n if (options.focus === \"slow\") return e.slow === true;\n return true;\n });\n\n if (show.length === 0) {\n lines.push(\n options.focus === \"slow\"\n ? \"(no steps with duration for slow focus)\"\n : \"(no steps)\",\n );\n return lines.join(\"\\n\");\n }\n\n for (const e of show) {\n const prefix = e.slow ? \"[slow] \" : \"\";\n const typeTag =\n e.type === \"llm\" ? \"llm\" : e.type === \"tool\" ? \"tool\" : e.type;\n const dur =\n e.durationMs !== undefined ? formatDuration(e.durationMs) : \"-\";\n const err = e.isError ? \" error\" : \"\";\n const off = formatDuration(e.offsetMs);\n let line = `${prefix}+${off} ${formatStepLabel(typeTag, e.name)} (${dur})${err}`;\n if (e.streaming?.chunkCount !== undefined) {\n line += ` chunks=${e.streaming.chunkCount}`;\n }\n if (e.streaming?.streamDurationMs !== undefined) {\n line += ` stream=${formatDuration(e.streaming.streamDurationMs)}`;\n }\n lines.push(line);\n }\n\n return lines.join(\"\\n\");\n}\n","import type {\n RunCompletedEvent,\n RunStartedEvent,\n StepCompletedEvent,\n StepStartedEvent,\n TraceCorrelationMetadata,\n TraceEvent,\n TraceMetadataStatus,\n} from \"./types.js\";\nimport { buildRunSummary } from \"./trace-metadata.js\";\nimport { formatDuration } from \"./utils.js\";\n\nexport interface RunWhatSummary {\n runId: string;\n name?: string;\n status: TraceMetadataStatus;\n durationMs?: number;\n totalSteps: number;\n llmSteps: number;\n toolSteps: number;\n logicSteps: number;\n errorSteps: number;\n maxDepth: number;\n longestStep?: {\n name: string;\n durationMs: number;\n type: string;\n };\n totalTokens?: {\n input: number;\n output: number;\n total?: number;\n cached?: number;\n cacheWrite?: number;\n reasoning?: number;\n };\n correlation?: TraceCorrelationMetadata;\n failedStepNames: string[];\n runErrorMessage?: string;\n}\n\nfunction pickCorrelation(\n metadata: Record<string, unknown> | undefined,\n): TraceCorrelationMetadata | undefined {\n if (!metadata) return undefined;\n const out: TraceCorrelationMetadata = {};\n for (const key of [\n \"correlationId\",\n \"requestId\",\n \"decisionId\",\n \"groupId\",\n ] as const) {\n const value = metadata[key];\n if (typeof value === \"string\" && value.trim() !== \"\") {\n out[key] = value;\n }\n }\n return Object.keys(out).length > 0 ? out : undefined;\n}\n\nfunction stepMixLine(summary: RunWhatSummary): string {\n const parts: string[] = [];\n if (summary.llmSteps > 0) parts.push(`${summary.llmSteps} LLM`);\n if (summary.toolSteps > 0) parts.push(`${summary.toolSteps} tool`);\n if (summary.logicSteps > 0) parts.push(`${summary.logicSteps} logic`);\n return parts.length > 0 ? parts.join(\", \") : \"none\";\n}\n\nfunction outcomeLine(summary: RunWhatSummary): string {\n if (summary.status === \"success\") {\n return summary.errorSteps > 0\n ? \"Completed with step errors recorded.\"\n : \"Completed successfully.\";\n }\n if (summary.status === \"error\") {\n if (summary.failedStepNames.length > 0) {\n const names = summary.failedStepNames.slice(0, 3).join(\", \");\n const suffix =\n summary.failedStepNames.length > 3\n ? ` (+${summary.failedStepNames.length - 3} more)`\n : \"\";\n return `Failed at step(s): ${names}${suffix}.`;\n }\n if (summary.runErrorMessage) {\n return `Run failed: ${summary.runErrorMessage}`;\n }\n return \"Run failed.\";\n }\n if (summary.status === \"running\") {\n return \"Run is still in progress (no run_completed).\";\n }\n return \"Outcome unknown — inspect events may be incomplete.\";\n}\n\n/**\n * Build a concise inspection summary for `what` / report workflows.\n * Read-only over in-memory v0.1 {@link TraceEvent} rows.\n */\nexport function buildRunWhatSummary(events: TraceEvent[]): RunWhatSummary {\n const base = buildRunSummary(events);\n const started = events.find(\n (e): e is RunStartedEvent => e.event === \"run_started\",\n );\n const completed = events.filter(\n (e): e is RunCompletedEvent => e.event === \"run_completed\",\n );\n const lastCompleted = completed[completed.length - 1];\n\n const failedStepNames: string[] = [];\n const stepNames = new Map<string, string>();\n for (const e of events) {\n if (e.event === \"step_started\") {\n const s = e as StepStartedEvent;\n stepNames.set(s.stepId, s.name);\n }\n }\n for (const e of events) {\n if (e.event === \"step_completed\") {\n const sc = e as StepCompletedEvent;\n if (sc.status === \"error\") {\n failedStepNames.push(stepNames.get(sc.stepId) ?? sc.stepId);\n }\n }\n }\n\n return {\n runId: base.runId,\n name: base.name,\n status: base.status,\n durationMs: base.durationMs,\n totalSteps: base.totalSteps,\n llmSteps: base.llmSteps,\n toolSteps: base.toolSteps,\n logicSteps: base.logicSteps,\n errorSteps: base.errorSteps,\n maxDepth: base.maxDepth,\n longestStep: base.longestStep,\n totalTokens: base.totalTokens,\n correlation: pickCorrelation(started?.metadata),\n failedStepNames,\n runErrorMessage: lastCompleted?.error?.message,\n };\n}\n\nexport interface RenderWhatOptions {\n /** Include correlation ids when present (default true). */\n correlation?: boolean;\n}\n\n/**\n * Render a human-readable `what` summary (plain text, no ANSI).\n */\nexport function renderRunWhat(\n summary: RunWhatSummary,\n options: RenderWhatOptions = {},\n): string {\n const showCorrelation = options.correlation !== false;\n const lines: string[] = [];\n const label = summary.name ?? summary.runId;\n lines.push(`What: ${label}`);\n\n const duration =\n summary.durationMs !== undefined ? formatDuration(summary.durationMs) : \"—\";\n lines.push(\n `Status: ${summary.status} · Duration: ${duration} · Steps: ${summary.totalSteps} (${stepMixLine(summary)})`,\n );\n\n if (summary.totalTokens) {\n const tokenParts = [\n `${summary.totalTokens.input} in`,\n `${summary.totalTokens.output} out`,\n ];\n if (summary.totalTokens.total !== undefined) {\n tokenParts.push(`${summary.totalTokens.total} total`);\n }\n if (summary.totalTokens.cached !== undefined) {\n tokenParts.push(`${summary.totalTokens.cached} cached`);\n }\n if (summary.totalTokens.cacheWrite !== undefined) {\n tokenParts.push(`${summary.totalTokens.cacheWrite} cache-write`);\n }\n if (summary.totalTokens.reasoning !== undefined) {\n tokenParts.push(`${summary.totalTokens.reasoning} reasoning`);\n }\n lines.push(`Tokens: ${tokenParts.join(\" / \")}`);\n }\n\n if (showCorrelation && summary.correlation) {\n const parts: string[] = [];\n if (summary.correlation.correlationId) {\n parts.push(`correlationId=${summary.correlation.correlationId}`);\n }\n if (summary.correlation.requestId) {\n parts.push(`requestId=${summary.correlation.requestId}`);\n }\n if (summary.correlation.decisionId) {\n parts.push(`decisionId=${summary.correlation.decisionId}`);\n }\n if (summary.correlation.groupId) {\n parts.push(`groupId=${summary.correlation.groupId}`);\n }\n if (parts.length > 0) {\n lines.push(`Correlation: ${parts.join(\", \")}`);\n }\n }\n\n lines.push(`Outcome: ${outcomeLine(summary)}`);\n\n if (summary.longestStep && summary.totalSteps > 0) {\n lines.push(\n `Slowest: ${summary.longestStep.name} (${formatDuration(summary.longestStep.durationMs)}, ${summary.longestStep.type})`,\n );\n }\n\n if (summary.maxDepth > 0) {\n lines.push(`Max depth: ${summary.maxDepth}`);\n }\n\n return lines.join(\"\\n\");\n}\n"]}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import {
|
|
1
|
+
import { persistedInspectEventsToRunTrees, traceEventToPersistedInspectEvent, traceEventsToPersistedInspectEvents } from './chunk-2IRRUNIN.mjs';
|
|
2
|
+
import { formatProgrammaticDiagnostic } from './chunk-L5WLVBW4.mjs';
|
|
3
3
|
import { parseTraceJsonl } from './chunk-7DHSWDKB.mjs';
|
|
4
4
|
import { readFile, readdir } from 'fs/promises';
|
|
5
5
|
import path from 'path';
|
|
@@ -791,7 +791,7 @@ function mapOpenInferenceSpan(span, index, version) {
|
|
|
791
791
|
const errorMessage = isRecord(span.status) && typeof span.status.message === "string" ? span.status.message : void 0;
|
|
792
792
|
const event = {
|
|
793
793
|
schemaVersion: "0.2",
|
|
794
|
-
eventId: typeof rawAttributes["agent_inspect.event_id"] === "string" ? rawAttributes["agent_inspect.event_id"] : spanId
|
|
794
|
+
eventId: typeof rawAttributes["agent_inspect.event_id"] === "string" ? rawAttributes["agent_inspect.event_id"] : `${traceId}:${spanId}`,
|
|
795
795
|
runId: typeof rawAttributes["agent_inspect.run_id"] === "string" ? rawAttributes["agent_inspect.run_id"] : traceId,
|
|
796
796
|
kind,
|
|
797
797
|
name,
|
|
@@ -842,12 +842,16 @@ function mapOpenInferenceEvents(document) {
|
|
|
842
842
|
const mapped = document.spans.map(
|
|
843
843
|
(span, index) => mapOpenInferenceSpan(span, index, document.version)
|
|
844
844
|
);
|
|
845
|
-
const
|
|
846
|
-
mapped.map((span) =>
|
|
845
|
+
const spanKeyToEventId = new Map(
|
|
846
|
+
mapped.map((span) => {
|
|
847
|
+
const traceId = typeof span.event.trace?.traceId === "string" ? span.event.trace.traceId : "";
|
|
848
|
+
return [`${traceId}:${span.spanId}`, span.event.eventId];
|
|
849
|
+
})
|
|
847
850
|
);
|
|
848
851
|
for (const span of mapped) {
|
|
849
852
|
if (span.parentSpanId === void 0) continue;
|
|
850
|
-
span.event.
|
|
853
|
+
const traceId = typeof span.event.trace?.traceId === "string" ? span.event.trace.traceId : "";
|
|
854
|
+
span.event.parentId = spanKeyToEventId.get(`${traceId}:${span.parentSpanId}`) ?? span.parentSpanId;
|
|
851
855
|
}
|
|
852
856
|
return {
|
|
853
857
|
events: mapped.map((span) => span.event),
|
|
@@ -1139,20 +1143,38 @@ function extractOtlpDocument(root) {
|
|
|
1139
1143
|
function mapOtlpStatus(status) {
|
|
1140
1144
|
if (!isRecord(status)) return void 0;
|
|
1141
1145
|
const rawCode = status.code;
|
|
1142
|
-
if (typeof rawCode
|
|
1143
|
-
|
|
1144
|
-
|
|
1145
|
-
|
|
1146
|
-
|
|
1147
|
-
|
|
1148
|
-
|
|
1149
|
-
|
|
1150
|
-
|
|
1151
|
-
|
|
1152
|
-
|
|
1153
|
-
|
|
1154
|
-
|
|
1146
|
+
if (typeof rawCode === "number" && Number.isFinite(rawCode)) {
|
|
1147
|
+
switch (rawCode) {
|
|
1148
|
+
case 0:
|
|
1149
|
+
return "unknown";
|
|
1150
|
+
case 1:
|
|
1151
|
+
return "ok";
|
|
1152
|
+
case 2:
|
|
1153
|
+
return "error";
|
|
1154
|
+
default:
|
|
1155
|
+
return "unknown";
|
|
1156
|
+
}
|
|
1157
|
+
}
|
|
1158
|
+
if (typeof rawCode === "string") {
|
|
1159
|
+
const trimmed = rawCode.trim();
|
|
1160
|
+
if (/^\d+$/.test(trimmed)) {
|
|
1161
|
+
return mapOtlpStatus({ code: Number(trimmed) });
|
|
1162
|
+
}
|
|
1163
|
+
switch (trimmed.toUpperCase()) {
|
|
1164
|
+
case "STATUS_CODE_OK":
|
|
1165
|
+
case "OK":
|
|
1166
|
+
return "ok";
|
|
1167
|
+
case "STATUS_CODE_ERROR":
|
|
1168
|
+
case "ERROR":
|
|
1169
|
+
return "error";
|
|
1170
|
+
case "STATUS_CODE_UNSET":
|
|
1171
|
+
case "UNSET":
|
|
1172
|
+
return "unknown";
|
|
1173
|
+
default:
|
|
1174
|
+
return "unknown";
|
|
1175
|
+
}
|
|
1155
1176
|
}
|
|
1177
|
+
return void 0;
|
|
1156
1178
|
}
|
|
1157
1179
|
function readOtlpKind(attributes, pathPrefix) {
|
|
1158
1180
|
const warnings = [];
|
|
@@ -1378,7 +1400,7 @@ function mapOtlpSpan(context) {
|
|
|
1378
1400
|
const errorMessage = isRecord(span.status) && typeof span.status.message === "string" ? span.status.message : void 0;
|
|
1379
1401
|
const event = {
|
|
1380
1402
|
schemaVersion: "0.2",
|
|
1381
|
-
eventId: typeof parsedSpanAttributes.attributes["agent_inspect.event_id"] === "string" ? parsedSpanAttributes.attributes["agent_inspect.event_id"] : spanId
|
|
1403
|
+
eventId: typeof parsedSpanAttributes.attributes["agent_inspect.event_id"] === "string" ? parsedSpanAttributes.attributes["agent_inspect.event_id"] : `${traceId}:${spanId}`,
|
|
1382
1404
|
runId: typeof parsedSpanAttributes.attributes["agent_inspect.run_id"] === "string" ? parsedSpanAttributes.attributes["agent_inspect.run_id"] : traceId,
|
|
1383
1405
|
kind,
|
|
1384
1406
|
name: readStringField(span, ["name"]) ?? spanId,
|
|
@@ -1427,12 +1449,16 @@ function mapOtlpSpan(context) {
|
|
|
1427
1449
|
}
|
|
1428
1450
|
function mapOtlpEventsToPersisted(document) {
|
|
1429
1451
|
const mapped = document.spans.map((span) => mapOtlpSpan(span));
|
|
1430
|
-
const
|
|
1431
|
-
mapped.map((span) =>
|
|
1452
|
+
const spanKeyToEventId = new Map(
|
|
1453
|
+
mapped.map((span) => {
|
|
1454
|
+
const traceId = typeof span.event.trace?.traceId === "string" ? span.event.trace.traceId : "";
|
|
1455
|
+
return [`${traceId}:${span.spanId}`, span.event.eventId];
|
|
1456
|
+
})
|
|
1432
1457
|
);
|
|
1433
1458
|
for (const span of mapped) {
|
|
1434
1459
|
if (span.parentSpanId === void 0) continue;
|
|
1435
|
-
span.event.
|
|
1460
|
+
const traceId = typeof span.event.trace?.traceId === "string" ? span.event.trace.traceId : "";
|
|
1461
|
+
span.event.parentId = spanKeyToEventId.get(`${traceId}:${span.parentSpanId}`) ?? span.parentSpanId;
|
|
1436
1462
|
}
|
|
1437
1463
|
return {
|
|
1438
1464
|
events: mapped.map((span) => span.event),
|
|
@@ -1732,5 +1758,5 @@ function openTraceText(content, options = {}) {
|
|
|
1732
1758
|
}
|
|
1733
1759
|
|
|
1734
1760
|
export { BUILTIN_MAPPING_LEDGERS, DEFAULT_TRACE_READERS, OPENINFERENCE_MAPPING_LEDGER, OTLP_JSON_MAPPING_LEDGER, TraceReadError, agentInspectJsonlReader, assertTraceInput, detectTraceFormat, getMappingLedger, openInferenceJsonReader, openTrace, openTraceDirectory, openTraceFile, openTraceText, otlpJsonReader, readTrace };
|
|
1735
|
-
//# sourceMappingURL=chunk-
|
|
1736
|
-
//# sourceMappingURL=chunk-
|
|
1761
|
+
//# sourceMappingURL=chunk-IJJSPJXV.mjs.map
|
|
1762
|
+
//# sourceMappingURL=chunk-IJJSPJXV.mjs.map
|