agent-inspect 6.29.1 → 6.29.3
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 +21 -0
- package/README.md +1 -1
- package/docs/API.md +4 -0
- package/docs/CLI.md +2 -0
- package/docs/LIMITATIONS.md +1 -0
- package/docs/NETWORK-BEHAVIOR.md +8 -0
- package/docs/TRACE-CONTRACTS.md +11 -0
- package/package.json +2 -2
- package/packages/cli/dist/{chunk-UK4HD5M3.mjs → chunk-TBTRH7KY.mjs} +5 -3
- package/packages/cli/dist/chunk-TBTRH7KY.mjs.map +1 -0
- package/packages/cli/dist/index.cjs +48 -11
- package/packages/cli/dist/index.cjs.map +1 -1
- package/packages/cli/dist/index.mjs +49 -14
- package/packages/cli/dist/index.mjs.map +1 -1
- package/packages/cli/dist/{src-CMPIJGUE.mjs → src-PGESGQ7G.mjs} +3 -3
- package/packages/cli/dist/{src-CMPIJGUE.mjs.map → src-PGESGQ7G.mjs.map} +1 -1
- package/packages/core/dist/advanced.cjs +41 -2
- package/packages/core/dist/advanced.cjs.map +1 -1
- package/packages/core/dist/advanced.d.cts +2 -2
- package/packages/core/dist/advanced.d.ts +2 -2
- package/packages/core/dist/advanced.mjs +14 -14
- package/packages/core/dist/checks.cjs +15 -2
- package/packages/core/dist/checks.cjs.map +1 -1
- package/packages/core/dist/checks.d.cts +2 -2
- package/packages/core/dist/checks.d.ts +2 -2
- package/packages/core/dist/checks.mjs +5 -5
- package/packages/core/dist/{chunk-QJI52TH3.mjs → chunk-3I6KX32E.mjs} +5 -3
- package/packages/core/dist/chunk-3I6KX32E.mjs.map +1 -0
- package/packages/core/dist/{chunk-COZPMOUF.mjs → chunk-5M4QUYFH.mjs} +3 -3
- package/packages/core/dist/{chunk-COZPMOUF.mjs.map → chunk-5M4QUYFH.mjs.map} +1 -1
- package/packages/core/dist/{chunk-SJ3C5RIS.mjs → chunk-7LSVGXCN.mjs} +3 -3
- package/packages/core/dist/{chunk-SJ3C5RIS.mjs.map → chunk-7LSVGXCN.mjs.map} +1 -1
- package/packages/core/dist/{chunk-FKUTGUFG.mjs → chunk-AT7TICCQ.mjs} +4 -4
- package/packages/core/dist/{chunk-FKUTGUFG.mjs.map → chunk-AT7TICCQ.mjs.map} +1 -1
- package/packages/core/dist/{chunk-65LFRW2T.mjs → chunk-BMRK6XHO.mjs} +4 -4
- package/packages/core/dist/{chunk-65LFRW2T.mjs.map → chunk-BMRK6XHO.mjs.map} +1 -1
- package/packages/core/dist/{chunk-AQMJFKI6.mjs → chunk-DZBNXCLA.mjs} +43 -6
- package/packages/core/dist/chunk-DZBNXCLA.mjs.map +1 -0
- package/packages/core/dist/{chunk-5RF7FYGL.mjs → chunk-FKVCTIP6.mjs} +4 -4
- package/packages/core/dist/{chunk-5RF7FYGL.mjs.map → chunk-FKVCTIP6.mjs.map} +1 -1
- package/packages/core/dist/{chunk-5B4DNGFB.mjs → chunk-KNRY24RS.mjs} +3 -3
- package/packages/core/dist/{chunk-5B4DNGFB.mjs.map → chunk-KNRY24RS.mjs.map} +1 -1
- package/packages/core/dist/{chunk-GPGBKN7W.mjs → chunk-XPDNO3KH.mjs} +18 -5
- package/packages/core/dist/{chunk-GPGBKN7W.mjs.map → chunk-XPDNO3KH.mjs.map} +1 -1
- package/packages/core/dist/exporters.mjs +5 -5
- package/packages/core/dist/{index-C61p7wBR.d.cts → index-BaQ48jrq.d.cts} +9 -1
- package/packages/core/dist/{index-DTO2iGeq.d.ts → index-CrnEOoRu.d.ts} +9 -1
- package/packages/core/dist/index.cjs +38 -1
- package/packages/core/dist/index.cjs.map +1 -1
- package/packages/core/dist/index.mjs +6 -6
- package/packages/core/dist/persisted.cjs +3 -1
- package/packages/core/dist/persisted.cjs.map +1 -1
- package/packages/core/dist/persisted.mjs +3 -3
- package/packages/core/dist/readers.cjs +3 -1
- package/packages/core/dist/readers.cjs.map +1 -1
- package/packages/core/dist/readers.mjs +4 -4
- package/packages/core/dist/writers.mjs +3 -3
- package/packages/cli/dist/chunk-UK4HD5M3.mjs.map +0 -1
- package/packages/core/dist/chunk-AQMJFKI6.mjs.map +0 -1
- package/packages/core/dist/chunk-QJI52TH3.mjs.map +0 -1
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/inspector-runtime.ts","../src/inspector.ts","../src/context.ts","../src/terminal.ts","../src/trace-directory.ts","../src/inspect-run.ts","../src/maybe-inspect-run.ts"],"names":["storage","AsyncLocalStorage","invoke","durationMs","endTime","printPath"],"mappings":"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","file":"chunk-DZBNXCLA.mjs","sourcesContent":["import { AsyncLocalStorage } from \"node:async_hooks\";\n\nimport { extractCorrelationMetadata } from \"./correlation-metadata.js\";\nimport type { ExecutionContext, TraceCorrelationMetadata } from \"./types.js\";\nimport {\n preparePersistedInspectEventForWrite,\n resolveTraceSafetyOptions,\n type TraceSafetyOptions,\n} from \"./trace-event-safety.js\";\nimport type { PersistedInspectEvent } from \"./types/persisted-inspect-event.js\";\nimport type { TraceWriter, TraceWriterStats } from \"./writers/index.js\";\n\nexport interface InspectorRuntimeOptions {\n enabled?: boolean;\n writer?: TraceWriter;\n traceSafety?: TraceSafetyOptions;\n}\n\nexport interface InspectorRuntimeContext extends ExecutionContext {\n runtimeId: string;\n}\n\nexport interface InspectorRuntimeDiagnostics {\n instrumentationErrors: number;\n lastInstrumentationError?: string;\n writerStats?: TraceWriterStats;\n}\n\ntype RuntimeStore = InspectorRuntimeContext & {\n currentStepId?: string;\n currentDepth: number;\n traceSafety: TraceSafetyOptions;\n};\n\nexport interface InspectorRuntime {\n readonly runtimeId: string;\n readonly enabled: boolean;\n runWithContext<T>(\n context: ExecutionContext,\n fn: () => Promise<T> | T,\n ): Promise<T>;\n runWithStepContext<T>(\n stepId: string,\n fn: () => Promise<T> | T,\n ): Promise<T>;\n getCurrentContext(): InspectorRuntimeContext | undefined;\n getCurrentCorrelationMetadata(): TraceCorrelationMetadata | undefined;\n getCurrentStepId(): string | undefined;\n getCurrentDepth(): number;\n getTraceSafety(): TraceSafetyOptions;\n write(event: PersistedInspectEvent): Promise<void>;\n flush(): Promise<void>;\n close(): Promise<void>;\n getDiagnostics(): InspectorRuntimeDiagnostics;\n}\n\nfunction invoke<T>(fn: () => T | Promise<T>): Promise<T> {\n return new Promise((resolve, reject) => {\n try {\n Promise.resolve(fn()).then(resolve, reject);\n } catch (error) {\n reject(error);\n }\n });\n}\n\nfunction normalizeError(error: unknown): string {\n if (error instanceof Error && error.message.trim() !== \"\") {\n return error.message;\n }\n if (typeof error === \"string\" && error.trim() !== \"\") {\n return error;\n }\n return \"Unknown inspector runtime error\";\n}\n\nlet runtimeSequence = 0;\n\nfunction createRuntimeId(): string {\n runtimeSequence += 1;\n return `runtime_${runtimeSequence.toString(36)}`;\n}\n\nfunction publicContext(store: RuntimeStore): InspectorRuntimeContext {\n return {\n runtimeId: store.runtimeId,\n runId: store.runId,\n runName: store.runName,\n traceDir: store.traceDir,\n silent: store.silent,\n metadata: store.metadata,\n };\n}\n\nexport function createInspectorRuntime(\n options: InspectorRuntimeOptions = {},\n): InspectorRuntime {\n const storage = new AsyncLocalStorage<RuntimeStore>();\n const enabled = options.enabled ?? true;\n const runtimeId = createRuntimeId();\n const traceSafety = options.traceSafety ?? resolveTraceSafetyOptions();\n let closed = false;\n let instrumentationErrors = 0;\n let lastInstrumentationError: string | undefined;\n\n function recordInstrumentationError(error: unknown): void {\n instrumentationErrors += 1;\n lastInstrumentationError = normalizeError(error);\n }\n\n function currentStore(): RuntimeStore | undefined {\n try {\n return storage.getStore();\n } catch (error) {\n recordInstrumentationError(error);\n return undefined;\n }\n }\n\n const runtime: InspectorRuntime = {\n runtimeId,\n enabled,\n runWithContext(context, fn) {\n if (!enabled) return invoke(fn);\n\n const store: RuntimeStore = {\n runtimeId,\n runId: context.runId,\n runName: context.runName,\n traceDir: context.traceDir,\n silent: context.silent,\n metadata: context.metadata,\n traceSafety,\n currentDepth: 0,\n };\n\n return new Promise((resolve, reject) => {\n storage.run(store, () => {\n invoke(fn).then(resolve, reject);\n });\n });\n },\n runWithStepContext(stepId, fn) {\n if (!enabled) return invoke(fn);\n const parent = currentStore();\n if (!parent) return invoke(fn);\n\n const store: RuntimeStore = {\n runtimeId,\n runId: parent.runId,\n runName: parent.runName,\n traceDir: parent.traceDir,\n silent: parent.silent,\n metadata: parent.metadata,\n traceSafety: parent.traceSafety,\n currentStepId: stepId,\n currentDepth: parent.currentDepth + 1,\n };\n\n return new Promise((resolve, reject) => {\n storage.run(store, () => {\n invoke(fn).then(resolve, reject);\n });\n });\n },\n getCurrentContext() {\n const store = currentStore();\n return store ? publicContext(store) : undefined;\n },\n getCurrentCorrelationMetadata() {\n return extractCorrelationMetadata(currentStore()?.metadata);\n },\n getCurrentStepId() {\n return currentStore()?.currentStepId;\n },\n getCurrentDepth() {\n const depth = currentStore()?.currentDepth;\n return typeof depth === \"number\" && Number.isFinite(depth) ? depth : 0;\n },\n getTraceSafety() {\n return traceSafety;\n },\n async write(event) {\n if (!enabled || closed || !options.writer) return;\n try {\n const safe = preparePersistedInspectEventForWrite(event, traceSafety);\n if (safe === undefined) {\n recordInstrumentationError(\"Invalid persisted inspect event\");\n return;\n }\n await options.writer.write(safe);\n } catch (error) {\n recordInstrumentationError(error);\n }\n },\n async flush() {\n if (!options.writer) return;\n try {\n await options.writer.flush?.();\n } catch (error) {\n recordInstrumentationError(error);\n }\n },\n async close() {\n if (closed) return;\n try {\n await options.writer?.close?.();\n } catch (error) {\n recordInstrumentationError(error);\n } finally {\n closed = true;\n }\n },\n getDiagnostics() {\n const diagnostics: InspectorRuntimeDiagnostics = {\n instrumentationErrors,\n };\n if (lastInstrumentationError !== undefined) {\n diagnostics.lastInstrumentationError = lastInstrumentationError;\n }\n const writerStats = options.writer?.getStats?.();\n if (writerStats !== undefined) {\n diagnostics.writerStats = writerStats;\n }\n return diagnostics;\n },\n };\n\n return runtime;\n}\n","import { createInspectorRuntime } from \"./inspector-runtime.js\";\nimport type { InspectorRuntime } from \"./inspector-runtime.js\";\nimport type { InspectKind } from \"./types/inspect-event.js\";\nimport type {\n PersistedInspectError,\n PersistedInspectEvent,\n} from \"./types/persisted-inspect-event.js\";\nimport type { RedactionProfile, StepMetadata, StepType } from \"./types.js\";\nimport {\n normalizeObserveOutcomeInput,\n type ObserveOutcomeOptions,\n} from \"./outcomes/index.js\";\nimport {\n preparePersistedInspectEventForWrite,\n resolveTraceSafetyOptions,\n type TraceSafetyOptions,\n} from \"./trace-event-safety.js\";\nimport type { TraceWriter } from \"./writers/index.js\";\nimport {\n createRunId,\n createStepId,\n getDefaultTraceDir,\n truncateName,\n} from \"./utils.js\";\n\nconst INSPECTOR_PERSISTED_SCHEMA_VERSION =\n \"1.0\" satisfies PersistedInspectEvent[\"schemaVersion\"];\n\nexport interface InspectorCaptureOptions {\n onSuccess?: \"none\" | \"metadata-only\";\n onError?: \"none\" | \"metadata-only\";\n}\n\nexport interface CreateInspectorOptions {\n enabled?: boolean;\n writer?: TraceWriter;\n /**\n * Context metadata only. Does not configure writer output; use\n * `fileWriter({ dir })` or another explicit writer for persistence paths.\n *\n * @experimental\n */\n traceDir?: string;\n /**\n * Context metadata only for compatibility with existing terminal helpers.\n * `createInspector()` does not print lifecycle output.\n *\n * @experimental\n */\n silent?: boolean;\n metadata?: Record<string, unknown>;\n redactionProfile?: RedactionProfile;\n /**\n * Metadata-only summaries for persisted run/step completion rows.\n * This never stores raw return values, prompts, outputs, or thrown objects.\n *\n * @experimental\n */\n capture?: InspectorCaptureOptions;\n traceSafety?: TraceSafetyOptions;\n}\n\nexport interface InspectorRunOptions {\n runId?: string;\n traceDir?: string;\n silent?: boolean;\n metadata?: Record<string, unknown>;\n}\n\nexport interface InspectorStepOptions {\n type?: StepType;\n metadata?: StepMetadata;\n}\n\nexport type InspectorObserveOptions = InspectorStepOptions;\n\nexport interface Inspector {\n /**\n * Low-level runtime access is retained for v1.6 compatibility. Prefer\n * `getDiagnostics()` unless you need advanced runtime context primitives.\n *\n * @experimental\n */\n readonly runtime: InspectorRuntime;\n run<T>(\n name: string,\n fn: () => T | Promise<T>,\n options?: InspectorRunOptions,\n ): Promise<T>;\n step<T>(\n name: string,\n fn: () => T | Promise<T>,\n options?: InspectorStepOptions,\n ): Promise<T>;\n tool<T>(\n name: string,\n fn: () => T | Promise<T>,\n options?: InspectorStepOptions,\n ): Promise<T>;\n llm<T>(\n name: string,\n fn: () => T | Promise<T>,\n options?: InspectorStepOptions,\n ): Promise<T>;\n observe<TFunction extends (...args: any[]) => any>(\n name: string,\n fn: TFunction,\n options?: InspectorObserveOptions,\n ): (...args: Parameters<TFunction>) => Promise<Awaited<ReturnType<TFunction>>>;\n observeOutcome(name: string, options: ObserveOutcomeOptions): Promise<void>;\n getDiagnostics(): ReturnType<InspectorRuntime[\"getDiagnostics\"]>;\n flush(): Promise<void>;\n close(): Promise<void>;\n}\n\nfunction normalizeName(name: unknown, fallback: string): string {\n if (typeof name !== \"string\" || name.trim() === \"\") return fallback;\n return truncateName(name.trim(), 100);\n}\n\nfunction nowIso(): string {\n return new Date().toISOString();\n}\n\nfunction durationMs(startedAt: string, endedAt: string): number {\n return Math.max(0, Date.parse(endedAt) - Date.parse(startedAt));\n}\n\nfunction mergeMetadata(\n base: Record<string, unknown> | undefined,\n override: Record<string, unknown> | undefined,\n): Record<string, unknown> | undefined {\n if (base === undefined && override === undefined) return undefined;\n return {\n ...(base ?? {}),\n ...(override ?? {}),\n };\n}\n\nconst SAFE_ERROR_CODE_MAX_LENGTH = 128;\nconst SAFE_ERROR_CODE_PATTERN = /^[A-Za-z0-9_.:-]+$/;\n\n/**\n * Normalize a thrown error's `code` or `status` into a bounded safe string.\n * Accepts finite numbers (e.g. HTTP 404) and short alphanumeric codes.\n * Omits objects, arrays, multiline/oversized values, and arbitrary properties.\n */\nfunction toSafeErrorCode(error: unknown): string | undefined {\n if (typeof error !== \"object\" || error === null) {\n return undefined;\n }\n const record = error as Record<string, unknown>;\n const raw = record.code !== undefined ? record.code : record.status;\n let candidate: string | undefined;\n if (typeof raw === \"number\" && Number.isFinite(raw)) {\n candidate = String(raw);\n } else if (typeof raw === \"string\") {\n candidate = raw.trim();\n }\n if (\n candidate === undefined ||\n candidate.length === 0 ||\n candidate.length > SAFE_ERROR_CODE_MAX_LENGTH ||\n !SAFE_ERROR_CODE_PATTERN.test(candidate)\n ) {\n return undefined;\n }\n return candidate;\n}\n\nfunction toPersistedError(error: unknown): PersistedInspectError {\n if (error instanceof Error) {\n const persisted: PersistedInspectError = {\n name: error.name,\n message: error.message,\n };\n const code = toSafeErrorCode(error);\n if (code !== undefined) {\n persisted.code = code;\n }\n return persisted;\n }\n if (typeof error === \"string\") {\n return { message: error };\n }\n if (typeof error === \"object\" && error !== null) {\n const record = error as Record<string, unknown>;\n const message =\n typeof record.message === \"string\" && record.message.length > 0\n ? record.message\n : \"Unknown error\";\n const persisted: PersistedInspectError = { message };\n if (typeof record.name === \"string\" && record.name.length > 0) {\n persisted.name = record.name;\n }\n const code = toSafeErrorCode(error);\n if (code !== undefined) {\n persisted.code = code;\n }\n return persisted;\n }\n return { message: \"Unknown error\" };\n}\n\nfunction summarizeValue(value: unknown): Record<string, unknown> {\n if (value === null) return { type: \"null\" };\n if (Array.isArray(value)) return { type: \"array\", length: value.length };\n\n if (typeof value === \"string\") return { type: \"string\", length: value.length };\n if (typeof value === \"number\") {\n return { type: \"number\", finite: Number.isFinite(value) };\n }\n if (typeof value === \"bigint\") return { type: \"bigint\" };\n if (typeof value === \"boolean\") return { type: \"boolean\" };\n if (typeof value === \"undefined\") return { type: \"undefined\" };\n if (typeof value === \"symbol\") return { type: \"symbol\" };\n if (typeof value === \"function\") {\n return { type: \"function\", name: value.name || undefined };\n }\n if (typeof value === \"object\") {\n const record = value as Record<string, unknown>;\n let keyCount: number | undefined;\n try {\n keyCount = Object.keys(record).length;\n } catch {\n keyCount = undefined;\n }\n return {\n type: \"object\",\n constructorName: value?.constructor?.name,\n ...(keyCount !== undefined ? { keyCount } : {}),\n };\n }\n return { type: typeof value };\n}\n\nfunction summarizeCapturedError(error: unknown): Record<string, unknown> {\n if (error instanceof Error) {\n return { type: \"error\", name: error.name };\n }\n return summarizeValue(error);\n}\n\nfunction stepTypeToKind(type: StepType): InspectKind {\n switch (type) {\n case \"llm\":\n return \"LLM\";\n case \"tool\":\n return \"TOOL\";\n case \"decision\":\n return \"DECISION\";\n case \"run\":\n return \"RUN\";\n default:\n return \"LOGIC\";\n }\n}\n\nexport function createInspector(\n options: CreateInspectorOptions = {},\n): Inspector {\n const traceSafety =\n options.traceSafety ??\n resolveTraceSafetyOptions({\n redactionProfile: options.redactionProfile,\n });\n const runtime = createInspectorRuntime({\n enabled: options.enabled,\n writer: options.writer,\n traceSafety,\n });\n\n async function write(event: PersistedInspectEvent): Promise<void> {\n const safe = preparePersistedInspectEventForWrite(event, traceSafety);\n if (safe !== undefined) {\n await runtime.write(safe);\n }\n }\n\n async function run<T>(\n name: string,\n fn: () => T | Promise<T>,\n runOptions: InspectorRunOptions = {},\n ): Promise<T> {\n if (typeof fn !== \"function\") {\n throw new TypeError(\"inspector.run requires `fn` to be a function\");\n }\n if (options.enabled === false) {\n return Promise.resolve(fn());\n }\n\n const runName = normalizeName(name, \"unnamed-run\");\n const runId = runOptions.runId ?? createRunId();\n const traceDir = runOptions.traceDir ?? options.traceDir ?? getDefaultTraceDir();\n const metadata = mergeMetadata(options.metadata, runOptions.metadata);\n const startedAt = nowIso();\n\n return runtime.runWithContext(\n {\n runId,\n runName,\n traceDir,\n silent: runOptions.silent ?? options.silent ?? true,\n metadata,\n },\n async () => {\n await write({\n schemaVersion: INSPECTOR_PERSISTED_SCHEMA_VERSION,\n eventId: `${runId}_started`,\n runId,\n kind: \"RUN\",\n name: runName,\n status: \"running\",\n timestamp: startedAt,\n startedAt,\n confidence: \"explicit\",\n source: { type: \"manual\", name: \"createInspector\" },\n attributes: {\n legacyEvent: \"run_started\",\n ...(metadata !== undefined ? { metadata } : {}),\n },\n });\n\n try {\n const result = await Promise.resolve(fn());\n const endedAt = nowIso();\n await write({\n schemaVersion: INSPECTOR_PERSISTED_SCHEMA_VERSION,\n eventId: `${runId}_completed`,\n runId,\n kind: \"RUN\",\n name: runName,\n status: \"ok\",\n timestamp: endedAt,\n endedAt,\n durationMs: durationMs(startedAt, endedAt),\n confidence: \"explicit\",\n source: { type: \"manual\", name: \"createInspector\" },\n attributes: { legacyEvent: \"run_completed\" },\n ...(options.capture?.onSuccess === \"metadata-only\"\n ? { outputSummary: summarizeValue(result) }\n : {}),\n });\n return result;\n } catch (error) {\n const endedAt = nowIso();\n await write({\n schemaVersion: INSPECTOR_PERSISTED_SCHEMA_VERSION,\n eventId: `${runId}_completed`,\n runId,\n kind: \"RUN\",\n name: runName,\n status: \"error\",\n timestamp: endedAt,\n endedAt,\n durationMs: durationMs(startedAt, endedAt),\n confidence: \"explicit\",\n source: { type: \"manual\", name: \"createInspector\" },\n attributes: { legacyEvent: \"run_completed\" },\n ...(options.capture?.onError === \"metadata-only\"\n ? { outputSummary: summarizeCapturedError(error) }\n : {}),\n error: toPersistedError(error),\n });\n throw error;\n }\n },\n );\n }\n\n async function step<T>(\n name: string,\n fn: () => T | Promise<T>,\n stepOptions: InspectorStepOptions = {},\n ): Promise<T> {\n if (typeof fn !== \"function\") {\n throw new TypeError(\"inspector.step requires `fn` to be a function\");\n }\n if (options.enabled === false || !runtime.getCurrentContext()) {\n return Promise.resolve(fn());\n }\n\n const context = runtime.getCurrentContext()!;\n const stepName = normalizeName(name, \"unnamed-step\");\n const stepId = createStepId();\n const parentId = runtime.getCurrentStepId();\n const stepType = stepOptions.type ?? \"logic\";\n const startedAt = nowIso();\n const attributes = {\n legacyEvent: \"step_started\",\n stepId,\n stepType,\n ...(stepOptions.metadata !== undefined\n ? { metadata: stepOptions.metadata }\n : {}),\n };\n\n await write({\n schemaVersion: INSPECTOR_PERSISTED_SCHEMA_VERSION,\n eventId: `${stepId}_started`,\n runId: context.runId,\n ...(parentId !== undefined ? { parentId } : {}),\n kind: stepTypeToKind(stepType),\n name: stepName,\n status: \"running\",\n timestamp: startedAt,\n startedAt,\n confidence: \"explicit\",\n source: { type: \"manual\", name: \"createInspector\" },\n attributes,\n });\n\n return runtime.runWithStepContext(stepId, async () => {\n try {\n const result = await Promise.resolve(fn());\n const endedAt = nowIso();\n await write({\n schemaVersion: INSPECTOR_PERSISTED_SCHEMA_VERSION,\n eventId: `${stepId}_completed`,\n runId: context.runId,\n kind: stepTypeToKind(stepType),\n name: stepName,\n status: \"ok\",\n timestamp: endedAt,\n endedAt,\n durationMs: durationMs(startedAt, endedAt),\n confidence: \"explicit\",\n source: { type: \"manual\", name: \"createInspector\" },\n attributes: {\n legacyEvent: \"step_completed\",\n stepId,\n stepType,\n },\n ...(options.capture?.onSuccess === \"metadata-only\"\n ? { outputSummary: summarizeValue(result) }\n : {}),\n });\n return result;\n } catch (error) {\n const endedAt = nowIso();\n await write({\n schemaVersion: INSPECTOR_PERSISTED_SCHEMA_VERSION,\n eventId: `${stepId}_completed`,\n runId: context.runId,\n kind: stepTypeToKind(stepType),\n name: stepName,\n status: \"error\",\n timestamp: endedAt,\n endedAt,\n durationMs: durationMs(startedAt, endedAt),\n confidence: \"explicit\",\n source: { type: \"manual\", name: \"createInspector\" },\n attributes: {\n legacyEvent: \"step_completed\",\n stepId,\n stepType,\n },\n ...(options.capture?.onError === \"metadata-only\"\n ? { outputSummary: summarizeCapturedError(error) }\n : {}),\n error: toPersistedError(error),\n });\n throw error;\n }\n });\n }\n\n const inspector: Inspector = {\n runtime,\n run,\n step,\n tool(name, fn, toolOptions) {\n const toolName = normalizeName(name, \"unknown-tool\");\n return step(`tool:${toolName}`, fn, {\n ...toolOptions,\n type: \"tool\",\n metadata: {\n ...(toolOptions?.metadata ?? {}),\n toolName,\n },\n });\n },\n llm(name, fn, llmOptions) {\n const model = normalizeName(name, \"unknown-model\");\n return step(`llm:${model}`, fn, {\n ...llmOptions,\n type: \"llm\",\n metadata: {\n ...(llmOptions?.metadata ?? {}),\n model,\n },\n });\n },\n observe(name, fn, observeOptions) {\n return async (...args) =>\n step(name, () => Promise.resolve(fn(...args)), observeOptions);\n },\n async observeOutcome(name, outcomeOptions) {\n const ctx = runtime.getCurrentContext();\n if (!ctx) return;\n let normalized;\n try {\n normalized = normalizeObserveOutcomeInput(name, outcomeOptions);\n } catch {\n return;\n }\n const outcomeId = createStepId();\n const parentId = runtime.getCurrentStepId();\n await write({\n schemaVersion: INSPECTOR_PERSISTED_SCHEMA_VERSION,\n eventId: outcomeId,\n runId: ctx.runId,\n ...(parentId !== undefined ? { parentId } : {}),\n kind: \"OUTCOME\",\n name: normalized.name,\n status: normalized.status === \"failed\" ? \"error\" : \"ok\",\n timestamp: new Date(normalized.observedAt).toISOString(),\n confidence: \"explicit\",\n source: { type: \"manual\", name: \"createInspector\" },\n attributes: {\n legacyEvent: \"outcome_observed\",\n outcomeId,\n outcomeStatus: normalized.status,\n expectation: normalized.expectation,\n ...(normalized.method !== undefined ? { method: normalized.method } : {}),\n ...(normalized.actual !== undefined ? { actual: normalized.actual } : {}),\n ...(normalized.evidence !== undefined ? { evidence: normalized.evidence } : {}),\n observedAt: new Date(normalized.observedAt).toISOString(),\n },\n ...(normalized.actual !== undefined ? { outputSummary: normalized.actual } : {}),\n });\n },\n getDiagnostics() {\n return runtime.getDiagnostics();\n },\n flush() {\n return runtime.flush();\n },\n close() {\n return runtime.close();\n },\n };\n\n return inspector;\n}\n","import { AsyncLocalStorage } from \"node:async_hooks\";\n\nimport { extractCorrelationMetadata } from \"./correlation-metadata.js\";\nimport type { ExecutionContext, TraceCorrelationMetadata } from \"./types.js\";\nimport {\n resolveTraceSafetyOptions,\n type TraceSafetyOptions,\n} from \"./trace-event-safety.js\";\n\ntype RuntimeExecutionContext = ExecutionContext & {\n currentStepId?: string;\n currentDepth: number;\n traceSafety: TraceSafetyOptions;\n};\n\nconst storage = new AsyncLocalStorage<RuntimeExecutionContext>();\n\nfunction toPublicContext(ctx: RuntimeExecutionContext): ExecutionContext {\n return {\n runId: ctx.runId,\n runName: ctx.runName,\n traceDir: ctx.traceDir,\n silent: ctx.silent,\n metadata: ctx.metadata,\n };\n}\n\nfunction invoke<T>(fn: () => T | Promise<T>): Promise<T> {\n return new Promise((resolve, reject) => {\n try {\n Promise.resolve(fn()).then(resolve, reject);\n } catch (e) {\n reject(e);\n }\n });\n}\n\n/** Returns the active run context, without internal step fields. */\nexport function getCurrentContext(): ExecutionContext | undefined {\n try {\n const s = storage.getStore();\n if (!s) return undefined;\n return toPublicContext(s);\n } catch {\n return undefined;\n }\n}\n\n/** Active `runId` when inside `runWithContext`, else `undefined`. */\nexport function getCurrentRunId(): string | undefined {\n try {\n return storage.getStore()?.runId;\n } catch {\n return undefined;\n }\n}\n\n/**\n * Correlation metadata for the active run (`correlationId`, `requestId`, `decisionId`, `groupId`).\n * `undefined` outside `inspectRun` / `maybeInspectRun` or when no correlation fields were set.\n */\nexport function getCurrentCorrelationMetadata():\n | TraceCorrelationMetadata\n | undefined {\n try {\n return extractCorrelationMetadata(storage.getStore()?.metadata);\n } catch {\n return undefined;\n }\n}\n\n/** Active `runName` when inside `runWithContext`, else `undefined`. */\nexport function getCurrentRunName(): string | undefined {\n try {\n return storage.getStore()?.runName;\n } catch {\n return undefined;\n }\n}\n\n/**\n * Active step id in this async scope (parent for nested `step()` calls).\n * `undefined` at run root or outside any run.\n */\nexport function getCurrentStepId(): string | undefined {\n try {\n return storage.getStore()?.currentStepId;\n } catch {\n return undefined;\n }\n}\n\n/** Alias of {@link getCurrentStepId} for readability in step instrumentation. */\nexport function getParentStepId(): string | undefined {\n return getCurrentStepId();\n}\n\n/**\n * Nesting depth: `0` at run root, increments by one per nested `runWithStepContext`.\n * Returns `0` outside any run.\n */\nexport function getCurrentDepth(): number {\n try {\n const d = storage.getStore()?.currentDepth;\n return typeof d === \"number\" && Number.isFinite(d) ? d : 0;\n } catch {\n return 0;\n }\n}\n\nexport function hasActiveContext(): boolean {\n try {\n return storage.getStore() !== undefined;\n } catch {\n return false;\n }\n}\n\nexport function getTraceDirFromContext(): string | undefined {\n try {\n return storage.getStore()?.traceDir;\n } catch {\n return undefined;\n }\n}\n\nexport function isSilentContext(): boolean {\n try {\n const s = storage.getStore();\n return s ? s.silent : false;\n } catch {\n return false;\n }\n}\n\n/** Resolved trace safety settings for the active run (redaction + size bounds). */\nexport function getTraceSafetyFromContext(): TraceSafetyOptions | undefined {\n try {\n return storage.getStore()?.traceSafety;\n } catch {\n return undefined;\n }\n}\n\n/**\n * Runs `fn` with a fresh AgentInspect run context (depth 0, no active step).\n * Propagates sync/async results and rejections; does not swallow user errors.\n */\nexport function runWithContext<T>(\n context: ExecutionContext,\n fn: () => Promise<T> | T,\n traceSafety: TraceSafetyOptions = resolveTraceSafetyOptions(),\n): Promise<T> {\n const runtime: RuntimeExecutionContext = {\n runId: context.runId,\n runName: context.runName,\n traceDir: context.traceDir,\n silent: context.silent,\n metadata: context.metadata,\n traceSafety,\n currentDepth: 0,\n };\n\n return new Promise((resolve, reject) => {\n storage.run(runtime, () => {\n try {\n Promise.resolve(fn()).then(resolve, reject);\n } catch (e) {\n reject(e);\n }\n });\n });\n}\n\n/**\n * Runs `fn` with `stepId` as the active step (incremented depth).\n * If no run is active, runs `fn` without altering async context.\n */\nexport function runWithStepContext<T>(\n stepId: string,\n fn: () => Promise<T> | T,\n): Promise<T> {\n let parent: RuntimeExecutionContext | undefined;\n try {\n parent = storage.getStore();\n } catch {\n parent = undefined;\n }\n\n if (!parent) {\n return invoke(fn);\n }\n\n const derived: RuntimeExecutionContext = {\n runId: parent.runId,\n runName: parent.runName,\n traceDir: parent.traceDir,\n silent: parent.silent,\n metadata: parent.metadata,\n traceSafety: parent.traceSafety,\n currentStepId: stepId,\n currentDepth: parent.currentDepth + 1,\n };\n\n return new Promise((resolve, reject) => {\n storage.run(derived, () => {\n try {\n Promise.resolve(fn()).then(resolve, reject);\n } catch (e) {\n reject(e);\n }\n });\n });\n}\n","import chalk from \"chalk\";\n\nimport { isSilentContext } from \"./context.js\";\nimport type { ErrorInfo, RunStatus, StepStatus } from \"./types.js\";\nimport { formatDuration, truncateName } from \"./utils.js\";\n\n/** Two spaces per nesting level in terminal output. */\nexport const TERMINAL_INDENT = \" \";\n\n/** Max display length for names in terminal output. */\nexport const MAX_TERMINAL_NAME_LENGTH = 80;\n\n/** Max nesting depth used for indentation (prevents huge indents). */\nexport const MAX_TERMINAL_DEPTH = 10;\n\nfunction normalizeDepth(depth: number): number {\n if (!Number.isFinite(depth) || depth < 0) {\n return 0;\n }\n return Math.min(Math.floor(depth), MAX_TERMINAL_DEPTH);\n}\n\nfunction safePrint(line = \"\"): void {\n try {\n console.log(line);\n } catch {\n /* never break callers */\n }\n}\n\n/** Indentation string for a nesting depth (capped, never negative). */\nexport function getIndent(depth: number): string {\n return TERMINAL_INDENT.repeat(normalizeDepth(depth));\n}\n\n/** Truncates a display name for terminal use; invalid input becomes `\"unnamed\"`. */\nexport function formatTerminalName(name: string): string {\n if (typeof name !== \"string\" || name.trim() === \"\") {\n return \"unnamed\";\n }\n return truncateName(name, MAX_TERMINAL_NAME_LENGTH);\n}\n\nfunction getStatusIcon(status: StepStatus | RunStatus): string {\n if (status === \"success\") return chalk.green(\"✔\");\n if (status === \"error\") return chalk.red(\"✖\");\n return chalk.yellow(\"⏳\");\n}\n\n/** Renders a single step line (colored); does not consult silent mode. */\nexport function renderStepLine(\n name: string,\n durationMs: number | undefined,\n status: StepStatus,\n depth?: number,\n): string {\n try {\n const nm = formatTerminalName(name);\n const ind = getIndent(depth ?? 0);\n if (status === \"running\" && durationMs === undefined) {\n return `${ind}${chalk.yellow(\"⏳\")} ${nm}`;\n }\n const hasDur =\n durationMs !== undefined && Number.isFinite(durationMs as number);\n const dur = hasDur ? formatDuration(durationMs as number) : undefined;\n if (status === \"running\") {\n return dur !== undefined\n ? `${ind}${chalk.yellow(\"⏳\")} ${nm} (${dur})`\n : `${ind}${chalk.yellow(\"⏳\")} ${nm}`;\n }\n if (!hasDur || dur === undefined) {\n return `${ind}${chalk.yellow(\"⏳\")} ${nm}`;\n }\n if (status === \"success\") {\n return `${ind}${getStatusIcon(\"success\")} ${nm} (${dur})`;\n }\n return `${ind}${getStatusIcon(\"error\")} ${nm} (${dur})`;\n } catch {\n return \"\";\n }\n}\n\n/** Renders an error summary line (no stack in MVP). */\nexport function renderErrorLine(error: ErrorInfo, depth?: number): string {\n try {\n const msg =\n typeof error.message === \"string\" ? error.message : \"\";\n const ind = getIndent((depth ?? 0) + 1);\n return `${ind}Error: ${msg}`;\n } catch {\n return \"\";\n }\n}\n\n/** Plain-text run summary lines (no chalk) for stable testing and CLI reuse. */\nexport function renderRunSummary(\n durationMs: number,\n status: RunStatus,\n traceFilePath?: string,\n): string[] {\n try {\n const dur = Number.isFinite(durationMs)\n ? formatDuration(durationMs)\n : formatDuration(0);\n const head =\n status === \"error\" ? `Failed in ${dur}` : `Completed in ${dur}`;\n const lines = [head];\n if (traceFilePath !== undefined && traceFilePath.trim() !== \"\") {\n lines.push(`Trace: ${traceFilePath}`);\n }\n return lines;\n } catch {\n return [];\n }\n}\n\n/** Prints run header with icon and dim run id. */\nexport function printRunStart(runId: string, name: string): void {\n if (isSilentContext()) return;\n try {\n safePrint(\"\");\n const header = `${chalk.cyan.bold(\"🔍 AgentInspect:\")} ${formatTerminalName(name)} ${chalk.dim(`(${runId})`)}`;\n safePrint(header);\n } catch {\n /* noop */\n }\n}\n\n/** Prints a running step line. */\nexport function printStepStart(name: string, depth = 0): void {\n if (isSilentContext()) return;\n try {\n safePrint(renderStepLine(name, undefined, \"running\", depth));\n } catch {\n /* noop */\n }\n}\n\n/** Prints a completed step line with duration and status icon. */\nexport function printStepComplete(\n name: string,\n durationMs: number,\n status: StepStatus,\n depth = 0,\n): void {\n if (isSilentContext()) return;\n try {\n safePrint(renderStepLine(name, durationMs, status, depth));\n } catch {\n /* noop */\n }\n}\n\n/** Prints a structured error line (message only, no stack). */\nexport function printError(error: ErrorInfo, depth = 0): void {\n if (isSilentContext()) return;\n try {\n safePrint(renderErrorLine(error, depth));\n } catch {\n /* noop */\n }\n}\n\n/** Prints run completion summary and optional trace path. */\nexport function printRunComplete(\n _name: string,\n _runId: string,\n durationMs: number,\n status: RunStatus,\n traceFilePath?: string,\n): void {\n if (isSilentContext()) return;\n try {\n const lines = renderRunSummary(durationMs, status, traceFilePath);\n for (let i = 0; i < lines.length; i++) {\n const line = lines[i]!;\n if (i === 0) {\n const color =\n status === \"error\"\n ? chalk.red\n : status === \"running\"\n ? chalk.yellow\n : chalk.green;\n safePrint(color(line));\n } else {\n safePrint(chalk.dim(line));\n }\n }\n } catch {\n /* noop */\n }\n}\n\n/** Prints which step failed. */\nexport function printFailedAt(stepName: string): void {\n if (isSilentContext()) return;\n try {\n safePrint(`Failed at: ${formatTerminalName(stepName)}`);\n } catch {\n /* noop */\n }\n}\n","import type { Stats } from \"node:fs\";\nimport { readdir, stat } from \"node:fs/promises\";\nimport path from \"node:path\";\n\nimport { getDefaultTraceDir } from \"./utils.js\";\n\nexport interface TraceDirectoryOptions {\n dir?: string;\n}\n\nexport function resolveTraceDir(options: TraceDirectoryOptions = {}): string {\n if (typeof options.dir === \"string\" && options.dir.trim() !== \"\") {\n return options.dir.trim();\n }\n const envDir = process.env.AGENT_INSPECT_TRACE_DIR;\n if (typeof envDir === \"string\" && envDir.trim() !== \"\") {\n return envDir.trim();\n }\n return getDefaultTraceDir();\n}\n\nexport class TraceDirectory {\n readonly #dir: string;\n\n constructor(options: TraceDirectoryOptions = {}) {\n this.#dir = resolveTraceDir(options);\n }\n\n getPath(filename?: string): string {\n return filename ? path.join(this.#dir, filename) : this.#dir;\n }\n\n async list(): Promise<string[]> {\n try {\n const files = await readdir(this.#dir);\n return files.filter((f) => f.endsWith(\".jsonl\"));\n } catch (e) {\n if (e && typeof e === \"object\" && \"code\" in e && e.code === \"ENOENT\") {\n return [];\n }\n throw e;\n }\n }\n\n async getFileStats(filename: string): Promise<Stats> {\n return await stat(this.getPath(filename));\n }\n}\n\n","import { buildRunStartedMetadata } from \"./correlation-metadata.js\";\nimport { runWithContext } from \"./context.js\";\nimport type { ExecutionContext, InspectRunOptions, TraceEvent } from \"./types.js\";\nimport { initializeTraceFile, writeTraceEvent } from \"./storage.js\";\nimport { printRunComplete, printRunStart } from \"./terminal.js\";\nimport { resolveTraceDir } from \"./trace-directory.js\";\nimport {\n prepareTraceEventForDisk,\n resolveTraceSafetyOptions,\n} from \"./trace-event-safety.js\";\nimport {\n createRunId,\n formatError,\n getTraceFilePath,\n truncateName,\n warn,\n} from \"./utils.js\";\n\nfunction normalizeRunName(name: unknown): string {\n if (typeof name !== \"string\" || name.trim() === \"\") {\n return \"unnamed-run\";\n }\n return truncateName(name.trim(), 100);\n}\n\nasync function safeInstrumentation(\n label: string,\n op: () => void | Promise<void>,\n): Promise<void> {\n try {\n await Promise.resolve(op());\n } catch (e) {\n warn(`inspectRun: ${label}`, e);\n }\n}\n\n/**\n * Stable v1.0 API for local manual run tracing.\n *\n * Runs `fn` inside an AgentInspect trace: JSONL `run_started` / `run_completed`, optional terminal output,\n * and {@link ExecutionContext} for nested APIs. Instrumentation failures are swallowed; user errors are re-thrown.\n */\nexport async function inspectRun<T>(\n name: string,\n fn: () => Promise<T> | T,\n options?: InspectRunOptions,\n): Promise<T> {\n if (typeof fn !== \"function\") {\n throw new TypeError(\"inspectRun requires `fn` to be a function\");\n }\n\n if (options?.enabled === false) {\n return Promise.resolve(fn());\n }\n\n const runName = normalizeRunName(name);\n const runId = createRunId();\n const traceDir = resolveTraceDir({ dir: options?.traceDir });\n\n const traceSafety = resolveTraceSafetyOptions(options);\n const runMetadata = buildRunStartedMetadata(options);\n\n const context: ExecutionContext = {\n runId,\n runName,\n traceDir,\n silent: options?.silent ?? false,\n metadata: runMetadata,\n };\n\n return runWithContext(context, async () => {\n const startTime = Date.now();\n let traceFilePath: string | undefined;\n\n await safeInstrumentation(\"initializeTraceFile\", async () => {\n traceFilePath = await initializeTraceFile(runId, traceDir);\n });\n\n await safeInstrumentation(\"writeTraceEvent(run_started)\", async () => {\n const started: TraceEvent = {\n schemaVersion: \"0.1\",\n event: \"run_started\",\n timestamp: startTime,\n runId,\n name: runName,\n startTime,\n ...(runMetadata !== undefined ? { metadata: runMetadata } : {}),\n };\n await writeTraceEvent(\n prepareTraceEventForDisk(started, traceSafety),\n traceDir,\n );\n });\n\n await safeInstrumentation(\"printRunStart\", () => {\n printRunStart(runId, runName);\n });\n\n let result: T;\n try {\n result = await Promise.resolve(fn());\n } catch (userError) {\n const endTime = Date.now();\n const durationMs = endTime - startTime;\n const formatted = formatError(userError);\n const printPath = traceFilePath ?? getTraceFilePath(runId, traceDir);\n\n await safeInstrumentation(\"writeTraceEvent(run_completed error)\", async () => {\n const completed: TraceEvent = {\n schemaVersion: \"0.1\",\n event: \"run_completed\",\n timestamp: endTime,\n runId,\n status: \"error\",\n endTime,\n durationMs,\n error: formatted,\n };\n await writeTraceEvent(\n prepareTraceEventForDisk(completed, traceSafety),\n traceDir,\n );\n });\n\n await safeInstrumentation(\"printRunComplete(error)\", () => {\n printRunComplete(runName, runId, durationMs, \"error\", printPath);\n });\n\n throw userError;\n }\n\n const endTime = Date.now();\n const durationMs = endTime - startTime;\n const printPath = traceFilePath ?? getTraceFilePath(runId, traceDir);\n\n await safeInstrumentation(\"writeTraceEvent(run_completed success)\", async () => {\n const completed: TraceEvent = {\n schemaVersion: \"0.1\",\n event: \"run_completed\",\n timestamp: endTime,\n runId,\n status: \"success\",\n endTime,\n durationMs,\n };\n await writeTraceEvent(\n prepareTraceEventForDisk(completed, traceSafety),\n traceDir,\n );\n });\n\n await safeInstrumentation(\"printRunComplete(success)\", () => {\n printRunComplete(runName, runId, durationMs, \"success\", printPath);\n });\n\n return result;\n }, traceSafety);\n}\n","import { inspectRun } from \"./inspect-run.js\";\nimport type { InspectRunOptions } from \"./types.js\";\n\nconst ENABLED_ENV_VALUES = new Set([\"1\", \"true\", \"yes\", \"on\", \"enabled\"]);\n\n/**\n * Returns true when `value` is one of the recognized AGENT_INSPECT enable tokens\n * (`1`, `true`, `yes`, `on`, `enabled`, case-insensitive). Undefined or any other value is false.\n */\nexport function isAgentInspectEnabled(value?: string): boolean {\n if (value === undefined) return false;\n const normalized = value.trim().toLowerCase();\n if (normalized === \"\") return false;\n return ENABLED_ENV_VALUES.has(normalized);\n}\n\n/**\n * Runs `fn` with tracing when enabled; otherwise passthrough (no trace file, no context).\n *\n * Enablement order: explicit `options.enabled` wins; when omitted, reads `process.env.AGENT_INSPECT`.\n * Unset or unrecognized env values disable tracing.\n */\nexport async function maybeInspectRun<T>(\n name: string,\n fn: () => Promise<T> | T,\n options?: InspectRunOptions,\n): Promise<T> {\n if (typeof fn !== \"function\") {\n throw new TypeError(\"maybeInspectRun requires `fn` to be a function\");\n }\n\n const enabled =\n options?.enabled !== undefined\n ? options.enabled\n : isAgentInspectEnabled(process.env.AGENT_INSPECT);\n\n if (!enabled) {\n return Promise.resolve(fn());\n }\n\n return inspectRun(name, fn, options);\n}\n"]}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { readTraceEventsFromFile } from './chunk-
|
|
2
|
-
import { parseTraceJsonl, parseDuration, formatDuration, formatTimestamp } from './chunk-
|
|
1
|
+
import { readTraceEventsFromFile } from './chunk-BMRK6XHO.mjs';
|
|
2
|
+
import { parseTraceJsonl, parseDuration, formatDuration, formatTimestamp } from './chunk-7LSVGXCN.mjs';
|
|
3
3
|
import { stat, readFile } from 'fs/promises';
|
|
4
4
|
import path from 'path';
|
|
5
5
|
|
|
@@ -842,5 +842,5 @@ function renderRunWhat(summary, options = {}) {
|
|
|
842
842
|
}
|
|
843
843
|
|
|
844
844
|
export { buildRunSummary, buildRunTimeline, buildRunWhatSummary, buildTraceStats, extractMetadata, filterTraces, formatStepLabel, renderRunWhat, renderTimeline, renderTraceStats };
|
|
845
|
-
//# sourceMappingURL=chunk-
|
|
846
|
-
//# sourceMappingURL=chunk-
|
|
845
|
+
//# sourceMappingURL=chunk-FKVCTIP6.mjs.map
|
|
846
|
+
//# sourceMappingURL=chunk-FKVCTIP6.mjs.map
|
|
@@ -1 +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-5RF7FYGL.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\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 const node = steps.get(stepId);\n if (!node) return 0;\n const parent = node.parentId;\n if (\n typeof parent !== \"string\" ||\n parent.trim() === \"\" ||\n !steps.has(parent)\n ) {\n depthCache.set(stepId, 0);\n return 0;\n }\n const d = Math.min(1000, computeDepth(parent) + 1);\n depthCache.set(stepId, d);\n return d;\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
|
+
{"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-FKVCTIP6.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\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 const node = steps.get(stepId);\n if (!node) return 0;\n const parent = node.parentId;\n if (\n typeof parent !== \"string\" ||\n parent.trim() === \"\" ||\n !steps.has(parent)\n ) {\n depthCache.set(stepId, 0);\n return 0;\n }\n const d = Math.min(1000, computeDepth(parent) + 1);\n depthCache.set(stepId, d);\n return d;\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,6 +1,6 @@
|
|
|
1
1
|
import { extractCorrelationMetadata } from './chunk-S4YWKV4G.mjs';
|
|
2
2
|
import { TreeBuilder } from './chunk-AK5EN4U2.mjs';
|
|
3
|
-
import { isPersistedInspectEvent } from './chunk-
|
|
3
|
+
import { isPersistedInspectEvent } from './chunk-3I6KX32E.mjs';
|
|
4
4
|
|
|
5
5
|
// packages/core/src/persisted/token-usage.ts
|
|
6
6
|
function isRecord(value) {
|
|
@@ -425,5 +425,5 @@ function traceEventsToPersistedRunTrees(events) {
|
|
|
425
425
|
}
|
|
426
426
|
|
|
427
427
|
export { normalizeTokenUsage, persistedInspectEventToInspectEvent, persistedInspectEventsToInspectEvents, persistedInspectEventsToRunTrees, traceEventToPersistedInspectEvent, traceEventsToPersistedInspectEvents, traceEventsToPersistedRunTrees };
|
|
428
|
-
//# sourceMappingURL=chunk-
|
|
429
|
-
//# sourceMappingURL=chunk-
|
|
428
|
+
//# sourceMappingURL=chunk-KNRY24RS.mjs.map
|
|
429
|
+
//# sourceMappingURL=chunk-KNRY24RS.mjs.map
|