agent-inspect 1.4.0 → 1.6.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (111) hide show
  1. package/CHANGELOG.md +63 -0
  2. package/README.md +34 -6
  3. package/docs/ADAPTERS.md +6 -0
  4. package/docs/API.md +132 -9
  5. package/docs/ARCHITECTURE.md +4 -0
  6. package/docs/CLI.md +98 -5
  7. package/docs/DIFF.md +8 -0
  8. package/docs/EXPORTS.md +13 -0
  9. package/docs/GETTING-STARTED.md +19 -1
  10. package/docs/KNOWN-ISSUES.md +8 -1
  11. package/docs/LIMITATIONS.md +13 -2
  12. package/docs/LOGS.md +22 -0
  13. package/docs/SCHEMA.md +19 -7
  14. package/docs/SCREENSHOTS.md +190 -9
  15. package/package.json +71 -1
  16. package/packages/cli/dist/index.cjs +7121 -3986
  17. package/packages/cli/dist/index.cjs.map +1 -1
  18. package/packages/cli/dist/index.mjs +7122 -3987
  19. package/packages/cli/dist/index.mjs.map +1 -1
  20. package/packages/core/dist/advanced.cjs +2258 -0
  21. package/packages/core/dist/advanced.cjs.map +1 -0
  22. package/packages/core/dist/advanced.d.cts +254 -0
  23. package/packages/core/dist/advanced.d.ts +254 -0
  24. package/packages/core/dist/advanced.mjs +11 -0
  25. package/packages/core/dist/advanced.mjs.map +1 -0
  26. package/packages/core/dist/chunk-57S5D6HR.mjs +655 -0
  27. package/packages/core/dist/chunk-57S5D6HR.mjs.map +1 -0
  28. package/packages/core/dist/chunk-6QSLZCBJ.mjs +743 -0
  29. package/packages/core/dist/chunk-6QSLZCBJ.mjs.map +1 -0
  30. package/packages/core/dist/chunk-6SZPTECC.mjs +342 -0
  31. package/packages/core/dist/chunk-6SZPTECC.mjs.map +1 -0
  32. package/packages/core/dist/chunk-74XZ6N7Q.mjs +409 -0
  33. package/packages/core/dist/chunk-74XZ6N7Q.mjs.map +1 -0
  34. package/packages/core/dist/chunk-7TGZLWEE.mjs +35 -0
  35. package/packages/core/dist/chunk-7TGZLWEE.mjs.map +1 -0
  36. package/packages/core/dist/chunk-BT7CATSD.mjs +497 -0
  37. package/packages/core/dist/chunk-BT7CATSD.mjs.map +1 -0
  38. package/packages/core/dist/chunk-E5F2LQCX.mjs +83 -0
  39. package/packages/core/dist/chunk-E5F2LQCX.mjs.map +1 -0
  40. package/packages/core/dist/chunk-EDTQHZPM.mjs +88 -0
  41. package/packages/core/dist/chunk-EDTQHZPM.mjs.map +1 -0
  42. package/packages/core/dist/chunk-HR7G62IE.mjs +785 -0
  43. package/packages/core/dist/chunk-HR7G62IE.mjs.map +1 -0
  44. package/packages/core/dist/chunk-HY7H3CQM.mjs +127 -0
  45. package/packages/core/dist/chunk-HY7H3CQM.mjs.map +1 -0
  46. package/packages/core/dist/chunk-S4YWKV4G.mjs +48 -0
  47. package/packages/core/dist/chunk-S4YWKV4G.mjs.map +1 -0
  48. package/packages/core/dist/chunk-TFLPUZ56.mjs +1571 -0
  49. package/packages/core/dist/chunk-TFLPUZ56.mjs.map +1 -0
  50. package/packages/core/dist/chunk-TZISEVLQ.mjs +390 -0
  51. package/packages/core/dist/chunk-TZISEVLQ.mjs.map +1 -0
  52. package/packages/core/dist/chunk-U2BGPESY.mjs +150 -0
  53. package/packages/core/dist/chunk-U2BGPESY.mjs.map +1 -0
  54. package/packages/core/dist/chunk-VTIB5MDK.mjs +304 -0
  55. package/packages/core/dist/chunk-VTIB5MDK.mjs.map +1 -0
  56. package/packages/core/dist/chunk-VU6O5QAH.mjs +99 -0
  57. package/packages/core/dist/chunk-VU6O5QAH.mjs.map +1 -0
  58. package/packages/core/dist/chunk-Y56BPA3B.mjs +990 -0
  59. package/packages/core/dist/chunk-Y56BPA3B.mjs.map +1 -0
  60. package/packages/core/dist/chunk-YWAOOXLR.mjs +475 -0
  61. package/packages/core/dist/chunk-YWAOOXLR.mjs.map +1 -0
  62. package/packages/core/dist/diff.cjs +993 -0
  63. package/packages/core/dist/diff.cjs.map +1 -0
  64. package/packages/core/dist/diff.d.cts +82 -0
  65. package/packages/core/dist/diff.d.ts +82 -0
  66. package/packages/core/dist/diff.mjs +5 -0
  67. package/packages/core/dist/diff.mjs.map +1 -0
  68. package/packages/core/dist/exporters.cjs +1228 -0
  69. package/packages/core/dist/exporters.cjs.map +1 -0
  70. package/packages/core/dist/exporters.d.cts +114 -0
  71. package/packages/core/dist/exporters.d.ts +114 -0
  72. package/packages/core/dist/exporters.mjs +6 -0
  73. package/packages/core/dist/exporters.mjs.map +1 -0
  74. package/packages/core/dist/index.cjs +5542 -2218
  75. package/packages/core/dist/index.cjs.map +1 -1
  76. package/packages/core/dist/index.d.cts +113 -908
  77. package/packages/core/dist/index.d.ts +113 -908
  78. package/packages/core/dist/index.mjs +1048 -5403
  79. package/packages/core/dist/index.mjs.map +1 -1
  80. package/packages/core/dist/inspect-event-Des4JDHo.d.cts +41 -0
  81. package/packages/core/dist/inspect-event-Des4JDHo.d.ts +41 -0
  82. package/packages/core/dist/log-config-BnH8Ykcb.d.cts +33 -0
  83. package/packages/core/dist/log-config-C1GcJPIM.d.ts +33 -0
  84. package/packages/core/dist/logs.cjs +1007 -0
  85. package/packages/core/dist/logs.cjs.map +1 -0
  86. package/packages/core/dist/logs.d.cts +138 -0
  87. package/packages/core/dist/logs.d.ts +138 -0
  88. package/packages/core/dist/logs.mjs +6 -0
  89. package/packages/core/dist/logs.mjs.map +1 -0
  90. package/packages/core/dist/persisted-inspect-event-0kaRADsp.d.cts +56 -0
  91. package/packages/core/dist/persisted-inspect-event-DiFto0K2.d.ts +56 -0
  92. package/packages/core/dist/persisted.cjs +1055 -0
  93. package/packages/core/dist/persisted.cjs.map +1 -0
  94. package/packages/core/dist/persisted.d.cts +111 -0
  95. package/packages/core/dist/persisted.d.ts +111 -0
  96. package/packages/core/dist/persisted.mjs +7 -0
  97. package/packages/core/dist/persisted.mjs.map +1 -0
  98. package/packages/core/dist/readers.cjs +2590 -0
  99. package/packages/core/dist/readers.cjs.map +1 -0
  100. package/packages/core/dist/readers.d.cts +80 -0
  101. package/packages/core/dist/readers.d.ts +80 -0
  102. package/packages/core/dist/readers.mjs +9 -0
  103. package/packages/core/dist/readers.mjs.map +1 -0
  104. package/packages/core/dist/types-DB8jB6Jg.d.cts +232 -0
  105. package/packages/core/dist/types-tSix7tfv.d.ts +232 -0
  106. package/packages/core/dist/writers.cjs +997 -0
  107. package/packages/core/dist/writers.cjs.map +1 -0
  108. package/packages/core/dist/writers.d.cts +62 -0
  109. package/packages/core/dist/writers.d.ts +62 -0
  110. package/packages/core/dist/writers.mjs +9 -0
  111. package/packages/core/dist/writers.mjs.map +1 -0
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/logs/config.ts","../src/logs/json-parser.ts","../src/logs/log4js-parser.ts","../src/logs/mapping.ts","../src/logs/normalizer.ts","../src/logs/tree-renderer.ts","../src/logs/line-parser.ts","../src/logs/live-tree.ts","../src/logs/index.ts"],"names":["isRecord","readFile"],"mappings":"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","file":"chunk-HR7G62IE.mjs","sourcesContent":["import { readFile } from \"node:fs/promises\";\n\nimport type { LogEventMapping, LogIngestConfig, RedactionRule } from \"../types/log-config.js\";\n\nfunction isRecord(v: unknown): v is Record<string, unknown> {\n return typeof v === \"object\" && v !== null && !Array.isArray(v);\n}\n\nfunction isNonEmptyStringArray(v: unknown): v is string[] {\n return (\n Array.isArray(v) &&\n v.length > 0 &&\n v.every((x) => typeof x === \"string\" && x.trim() !== \"\")\n );\n}\n\nfunction validateRedact(redact: unknown): asserts redact is RedactionRule[] {\n if (!Array.isArray(redact)) {\n throw new Error(\"Invalid config: redact must be an array\");\n }\n for (const r of redact) {\n if (typeof r === \"string\") continue;\n if (!isRecord(r)) {\n throw new Error(\"Invalid config: redact entries must be strings or objects\");\n }\n if (typeof r.key !== \"string\" || r.key.trim() === \"\") {\n throw new Error(\"Invalid config: redact.key must be a non-empty string\");\n }\n if (r.strategy !== \"full\" && r.strategy !== \"prefix\" && r.strategy !== \"hash\") {\n throw new Error(\n `Invalid config: redact.strategy must be one of full, prefix, hash (got ${String(\n r.strategy,\n )})`,\n );\n }\n if (r.keep !== undefined && (typeof r.keep !== \"number\" || !Number.isFinite(r.keep) || r.keep < 0)) {\n throw new Error(\"Invalid config: redact.keep must be a non-negative number when provided\");\n }\n }\n}\n\nfunction validateMappings(mappings: unknown): asserts mappings is Record<string, LogEventMapping> {\n if (!isRecord(mappings)) {\n throw new Error(\"Invalid config: mappings must be an object\");\n }\n}\n\nexport const DEFAULT_LOG_INGEST_CONFIG: LogIngestConfig = {\n runIdKeys: [\"runId\", \"traceId\", \"requestId\", \"decisionId\", \"jobId\"],\n eventKey: \"event\",\n timestampKey: \"timestamp\",\n messageKey: \"message\",\n levelKey: \"level\",\n heuristicWindowMs: 2000,\n mappings: {\n \"*.error\": { kind: \"ERROR\", status: \"error\" },\n \"*.failed\": { kind: \"ERROR\", status: \"error\" },\n \"*.llm.*\": { kind: \"LLM\" },\n \"*.tool.*\": { kind: \"TOOL\" },\n \"*.agent.*\": { kind: \"AGENT\" },\n \"*.retriever.*\": { kind: \"RETRIEVER\" },\n \"*.result.*\": { kind: \"RESULT\" },\n },\n};\n\nexport function mergeLogIngestConfig(\n base: LogIngestConfig,\n override: Partial<LogIngestConfig>,\n): LogIngestConfig {\n const merged: LogIngestConfig = {\n ...base,\n ...override,\n mappings: {\n ...(base.mappings ?? {}),\n ...(override.mappings ?? {}),\n },\n };\n return merged;\n}\n\nexport async function loadLogIngestConfig(configPath?: string): Promise<LogIngestConfig> {\n if (configPath === undefined || configPath.trim() === \"\") {\n return DEFAULT_LOG_INGEST_CONFIG;\n }\n\n let rawText: string;\n try {\n rawText = await readFile(configPath, \"utf-8\");\n } catch (e) {\n const msg = e instanceof Error ? e.message : String(e);\n throw new Error(`Failed to read config file: ${configPath} (${msg})`);\n }\n\n let parsed: unknown;\n try {\n parsed = JSON.parse(rawText) as unknown;\n } catch (e) {\n const msg = e instanceof Error ? e.message : String(e);\n throw new Error(`Invalid JSON in config file: ${configPath} (${msg})`);\n }\n\n if (!isRecord(parsed)) {\n throw new Error(\"Invalid config: expected a JSON object at top-level\");\n }\n\n const user = parsed as Partial<LogIngestConfig>;\n\n if (user.runIdKeys !== undefined && !isNonEmptyStringArray(user.runIdKeys)) {\n throw new Error(\"Invalid config: runIdKeys must be a non-empty array of strings\");\n }\n if (user.eventKey !== undefined && (typeof user.eventKey !== \"string\" || user.eventKey.trim() === \"\")) {\n throw new Error(\"Invalid config: eventKey must be a non-empty string\");\n }\n\n for (const k of [\n \"timestampKey\",\n \"messageKey\",\n \"levelKey\",\n \"parentIdKey\",\n \"durationKey\",\n \"statusKey\",\n ] as const) {\n const v = (user as any)[k];\n if (v !== undefined && (typeof v !== \"string\" || v.trim() === \"\")) {\n throw new Error(`Invalid config: ${k} must be a non-empty string when provided`);\n }\n }\n\n if (user.mappings !== undefined) {\n validateMappings(user.mappings);\n }\n if (user.redact !== undefined) {\n validateRedact(user.redact);\n }\n if (\n user.heuristicWindowMs !== undefined &&\n (typeof user.heuristicWindowMs !== \"number\" ||\n !Number.isFinite(user.heuristicWindowMs) ||\n user.heuristicWindowMs < 0)\n ) {\n throw new Error(\"Invalid config: heuristicWindowMs must be a non-negative number when provided\");\n }\n\n // Explicitly reject obviously unsafe config patterns.\n if ((user as any).redact && JSON.stringify((user as any).redact).includes(\"=>\")) {\n throw new Error(\"Invalid config: function strings are not supported in redact rules\");\n }\n\n return mergeLogIngestConfig(DEFAULT_LOG_INGEST_CONFIG, user);\n}\n\n","import { readFile } from \"node:fs/promises\";\n\nimport type { RawLogRecord } from \"./raw-record.js\";\nimport type { ParseResult, ParserWarning } from \"./warnings.js\";\n\nfunction isRecord(v: unknown): v is Record<string, unknown> {\n return typeof v === \"object\" && v !== null && !Array.isArray(v);\n}\n\nexport class JsonLogParser {\n parseLines(lines: string[], filePath?: string): ParseResult<RawLogRecord> {\n const records: RawLogRecord[] = [];\n const warnings: ParserWarning[] = [];\n\n for (let i = 0; i < lines.length; i++) {\n const lineNumber = i + 1;\n const raw = lines[i] ?? \"\";\n const trimmed = raw.trim();\n if (trimmed === \"\") continue;\n let parsed: unknown;\n try {\n parsed = JSON.parse(trimmed) as unknown;\n } catch {\n warnings.push({\n code: \"MALFORMED_JSON\",\n message: \"Malformed JSON log line\",\n file: filePath,\n line: lineNumber,\n raw: trimmed.slice(0, 500),\n });\n continue;\n }\n if (!isRecord(parsed)) {\n warnings.push({\n code: \"MALFORMED_JSON\",\n message: \"JSON log line must be an object\",\n file: filePath,\n line: lineNumber,\n raw: trimmed.slice(0, 500),\n });\n continue;\n }\n records.push({\n raw: parsed,\n file: filePath,\n line: lineNumber,\n sourceType: \"json-log\",\n });\n }\n\n return { records, warnings };\n }\n\n async parseFile(filePath: string): Promise<ParseResult<RawLogRecord>> {\n let text: string;\n try {\n text = await readFile(filePath, \"utf-8\");\n } catch (e) {\n const msg = e instanceof Error ? e.message : String(e);\n throw new Error(`Failed to read log file: ${filePath} (${msg})`);\n }\n const lines = text.split(/\\r?\\n/);\n return this.parseLines(lines, filePath);\n }\n}\n\n","import { readFile } from \"node:fs/promises\";\n\nimport type { RawLogRecord } from \"./raw-record.js\";\nimport type { ParseResult, ParserWarning } from \"./warnings.js\";\n\nfunction isRecord(v: unknown): v is Record<string, unknown> {\n return typeof v === \"object\" && v !== null && !Array.isArray(v);\n}\n\nfunction findLastJsonObjectSubstring(line: string): string | undefined {\n // Scan for balanced {...} regions and keep the last one.\n // This is deliberately conservative: it does not attempt to parse JS object literal syntax.\n let last: { start: number; end: number } | undefined;\n for (let i = 0; i < line.length; i++) {\n if (line[i] !== \"{\") continue;\n let depth = 0;\n let inString = false;\n let escape = false;\n for (let j = i; j < line.length; j++) {\n const ch = line[j]!;\n if (inString) {\n if (escape) {\n escape = false;\n continue;\n }\n if (ch === \"\\\\\") {\n escape = true;\n continue;\n }\n if (ch === '\"') {\n inString = false;\n }\n continue;\n }\n\n if (ch === '\"') {\n inString = true;\n continue;\n }\n if (ch === \"{\") depth += 1;\n if (ch === \"}\") depth -= 1;\n if (depth === 0) {\n last = { start: i, end: j + 1 };\n i = j;\n break;\n }\n if (depth < 0) break;\n }\n }\n if (!last) return undefined;\n return line.slice(last.start, last.end);\n}\n\nexport class Log4jsParser {\n parseLines(lines: string[], filePath?: string): ParseResult<RawLogRecord> {\n const records: RawLogRecord[] = [];\n const warnings: ParserWarning[] = [];\n\n for (let i = 0; i < lines.length; i++) {\n const lineNumber = i + 1;\n const rawLine = lines[i] ?? \"\";\n const trimmed = rawLine.trim();\n if (trimmed === \"\") continue;\n\n const jsonText = findLastJsonObjectSubstring(trimmed);\n if (!jsonText) {\n warnings.push({\n code: \"UNSUPPORTED_LOG4JS_PAYLOAD\",\n message: \"No embedded JSON object found in log4js line\",\n file: filePath,\n line: lineNumber,\n raw: trimmed.slice(0, 500),\n });\n continue;\n }\n\n let parsed: unknown;\n try {\n parsed = JSON.parse(jsonText) as unknown;\n } catch {\n warnings.push({\n code: \"MALFORMED_JSON\",\n message: \"Malformed embedded JSON object in log4js line\",\n file: filePath,\n line: lineNumber,\n raw: jsonText.slice(0, 500),\n });\n continue;\n }\n\n if (!isRecord(parsed)) {\n warnings.push({\n code: \"UNSUPPORTED_LOG4JS_PAYLOAD\",\n message: \"Embedded JSON payload must be an object\",\n file: filePath,\n line: lineNumber,\n raw: jsonText.slice(0, 500),\n });\n continue;\n }\n\n records.push({\n raw: parsed,\n file: filePath,\n line: lineNumber,\n sourceType: \"log4js\",\n });\n }\n\n return { records, warnings };\n }\n\n async parseFile(filePath: string): Promise<ParseResult<RawLogRecord>> {\n let text: string;\n try {\n text = await readFile(filePath, \"utf-8\");\n } catch (e) {\n const msg = e instanceof Error ? e.message : String(e);\n throw new Error(`Failed to read log file: ${filePath} (${msg})`);\n }\n const lines = text.split(/\\r?\\n/);\n return this.parseLines(lines, filePath);\n }\n}\n\n","import type { LogEventMapping } from \"../types/log-config.js\";\n\nexport function wildcardMatch(pattern: string, value: string): boolean {\n if (pattern === value) return true;\n if (!pattern.includes(\"*\")) return false;\n\n const parts = pattern.split(\"*\");\n let idx = 0;\n for (let i = 0; i < parts.length; i++) {\n const part = parts[i]!;\n if (part === \"\") continue;\n const found = value.indexOf(part, idx);\n if (found === -1) return false;\n if (i === 0 && !pattern.startsWith(\"*\") && found !== 0) return false;\n idx = found + part.length;\n }\n if (!pattern.endsWith(\"*\")) {\n const last = parts[parts.length - 1]!;\n if (last !== \"\" && !value.endsWith(last)) return false;\n if (last === \"\" && !value.endsWith(parts[parts.length - 2] ?? \"\")) return false;\n }\n return true;\n}\n\nexport function matchMapping(\n eventName: string,\n mappings?: Record<string, LogEventMapping>,\n): LogEventMapping | undefined {\n if (!mappings) return undefined;\n if (mappings[eventName]) return mappings[eventName];\n\n let bestKey: string | undefined;\n let bestScore = -1;\n\n for (const key of Object.keys(mappings)) {\n if (!key.includes(\"*\")) continue;\n if (!wildcardMatch(key, eventName)) continue;\n const score = key.replaceAll(\"*\", \"\").length;\n if (score > bestScore) {\n bestScore = score;\n bestKey = key;\n }\n }\n\n return bestKey ? mappings[bestKey] : undefined;\n}\n\n","import { nanoid } from \"nanoid\";\n\nimport type { InspectEvent, InspectKind } from \"../types/inspect-event.js\";\nimport type { LogIngestConfig } from \"../types/log-config.js\";\nimport type { RawLogRecord } from \"./raw-record.js\";\nimport type { ParseResult, ParserWarning } from \"./warnings.js\";\nimport { matchMapping } from \"./mapping.js\";\n\nfunction isFiniteNumber(v: unknown): v is number {\n return typeof v === \"number\" && Number.isFinite(v);\n}\n\nfunction safeString(v: unknown): string | undefined {\n if (typeof v !== \"string\") return undefined;\n const t = v.trim();\n return t === \"\" ? undefined : t;\n}\n\nfunction parseTimestamp(v: unknown): number | undefined {\n if (isFiniteNumber(v)) return v;\n if (typeof v === \"string\") {\n const t = Date.parse(v);\n if (Number.isFinite(t)) return t;\n }\n return undefined;\n}\n\nfunction hasToken(hay: string, token: string): boolean {\n return hay.includes(token);\n}\n\nfunction inferKind(eventName: string): InspectKind {\n if (hasToken(eventName, \".llm.\")) return \"LLM\";\n if (hasToken(eventName, \".tool.\")) return \"TOOL\";\n if (hasToken(eventName, \".agent.\")) return \"AGENT\";\n if (hasToken(eventName, \".retriever.\")) return \"RETRIEVER\";\n if (hasToken(eventName, \".result.\")) return \"RESULT\";\n if (eventName.endsWith(\".error\") || eventName.endsWith(\".failed\") || eventName.includes(\".error\") || eventName.includes(\".failed\")) {\n return \"ERROR\";\n }\n return \"LOG\";\n}\n\nfunction deriveName(eventName: string, kind: InspectKind): string {\n const parts = eventName.split(\".\");\n const last = parts[parts.length - 1] ?? eventName;\n if (kind === \"LLM\") return `llm:${last}`;\n if (kind === \"TOOL\") return `tool:${last}`;\n if (kind === \"AGENT\") return `agent:${last}`;\n if (kind === \"RESULT\") return `result:${last}`;\n if (kind === \"RUN\") return `run:${last}`;\n if (kind === \"RETRIEVER\") return `retriever:${last}`;\n if (kind === \"ERROR\") return `error:${last}`;\n return eventName;\n}\n\nexport interface NormalizeOptions {\n config: LogIngestConfig;\n sourceFile?: string;\n}\n\nexport class EventNormalizer {\n readonly #config: LogIngestConfig;\n\n constructor(options: NormalizeOptions) {\n this.#config = options.config;\n }\n\n #normalizeInternal(\n record: RawLogRecord,\n ): { event?: InspectEvent; warning?: ParserWarning } {\n const raw = record.raw;\n const cfg = this.#config;\n\n // runId\n let runId: string | undefined;\n for (const k of cfg.runIdKeys) {\n const v = raw[k];\n const s = safeString(v);\n if (s) {\n runId = s;\n break;\n }\n }\n if (!runId) {\n return {\n warning: {\n code: \"MISSING_RUN_ID\",\n message: \"Missing run id (none of runIdKeys present)\",\n file: record.file,\n line: record.line,\n },\n };\n }\n\n // event name\n const eventName = safeString(raw[cfg.eventKey]);\n if (!eventName) {\n return {\n warning: {\n code: \"MISSING_EVENT\",\n message: `Missing event name (key: ${cfg.eventKey})`,\n file: record.file,\n line: record.line,\n },\n };\n }\n\n const mapping = matchMapping(eventName, cfg.mappings);\n\n // timestamp\n const tsKey = cfg.timestampKey ?? \"timestamp\";\n const tsRaw = raw[tsKey];\n const parsedTs = parseTimestamp(tsRaw);\n const timestamp = parsedTs ?? Date.now();\n const timestampMissing = parsedTs === undefined;\n\n // parentId\n const parentIdKey = cfg.parentIdKey;\n const parentId = parentIdKey ? safeString(raw[parentIdKey]) : undefined;\n\n // duration\n let durationMs: number | undefined;\n const durationKey = cfg.durationKey;\n if (durationKey) {\n const v = raw[durationKey];\n if (isFiniteNumber(v)) durationMs = v;\n } else if (isFiniteNumber((raw as any).durationMs)) {\n durationMs = (raw as any).durationMs as number;\n }\n\n // status\n let status: InspectEvent[\"status\"] | undefined;\n const statusKey = cfg.statusKey;\n const statusRaw = statusKey ? safeString(raw[statusKey]) : undefined;\n if (statusRaw === \"running\" || statusRaw === \"ok\" || statusRaw === \"error\") {\n status = statusRaw;\n } else if (mapping?.status) {\n status = mapping.status;\n } else if (mapping?.kind === \"ERROR\") {\n status = \"error\";\n } else if (eventName.includes(\".failed\") || eventName.includes(\".error\")) {\n status = \"error\";\n } else if (mapping?.startsRun || mapping?.startsStep) {\n status = \"running\";\n } else if (mapping?.endsRun || mapping?.endsStep) {\n status = \"ok\";\n }\n\n // kind\n const kind: InspectKind = mapping?.kind ?? inferKind(eventName);\n\n // name\n const name = mapping?.name ?? deriveName(eventName, kind);\n\n // confidence\n let confidence: InspectEvent[\"confidence\"] = \"correlated\";\n if (parentId || mapping?.startsRun) confidence = \"explicit\";\n if (timestampMissing) confidence = \"unknown\";\n\n // attributes: exclude used keys\n const omit = new Set<string>([\n ...cfg.runIdKeys,\n cfg.eventKey,\n tsKey,\n cfg.messageKey ?? \"message\",\n cfg.levelKey ?? \"level\",\n cfg.parentIdKey ?? \"\",\n cfg.durationKey ?? \"\",\n cfg.statusKey ?? \"\",\n \"durationMs\",\n ].filter((k) => k !== \"\"));\n\n const attributes: Record<string, unknown> = {};\n for (const [k, v] of Object.entries(raw)) {\n if (omit.has(k)) continue;\n attributes[k] = v;\n }\n\n const event: InspectEvent = {\n eventId: nanoid(10),\n runId,\n ...(parentId ? { parentId } : {}),\n name,\n kind,\n timestamp,\n ...(status ? { status } : {}),\n ...(durationMs !== undefined ? { durationMs } : {}),\n ...(Object.keys(attributes).length > 0 ? { attributes } : {}),\n confidence,\n source: {\n type: record.sourceType,\n file: record.file,\n line: record.line,\n },\n };\n\n if (timestampMissing) {\n return {\n event,\n warning: {\n code: \"MISSING_TIMESTAMP\",\n message: `Missing or invalid timestamp (key: ${tsKey})`,\n file: record.file,\n line: record.line,\n raw: JSON.stringify(raw).slice(0, 500),\n },\n };\n }\n\n return { event };\n }\n\n normalize(record: RawLogRecord): InspectEvent | ParserWarning {\n const r = this.#normalizeInternal(record);\n return r.event ?? (r.warning as ParserWarning);\n }\n\n normalizeAll(records: RawLogRecord[]): ParseResult<InspectEvent> {\n const out: InspectEvent[] = [];\n const warnings: ParserWarning[] = [];\n for (const r of records) {\n const normalized = this.#normalizeInternal(r);\n if (normalized.event) out.push(normalized.event);\n if (normalized.warning) warnings.push(normalized.warning);\n }\n return { records: out, warnings };\n }\n}\n\n","import type { InspectNode, InspectRunTree } from \"../types/inspect-event.js\";\n\nexport interface RenderTreeOptions {\n verbose?: boolean;\n showConfidence?: \"always\" | \"non-explicit\" | \"never\";\n showMetadata?: boolean;\n color?: boolean;\n maxAttributeLength?: number;\n summary?: boolean;\n}\n\nfunction truncate(v: string, max: number): string {\n if (v.length <= max) return v;\n return v.slice(0, Math.max(0, max - 1)) + \"…\";\n}\n\nfunction fmtAttrValue(value: unknown, maxLen: number): string | undefined {\n if (value === null || value === undefined) return undefined;\n if (typeof value === \"string\") return truncate(value, maxLen);\n if (typeof value === \"number\" || typeof value === \"boolean\" || typeof value === \"bigint\") {\n return String(value);\n }\n if (typeof value === \"object\") {\n try {\n return truncate(JSON.stringify(value), maxLen);\n } catch {\n return \"[object]\";\n }\n }\n return String(value);\n}\n\nfunction compactAttrs(attrs: Record<string, unknown> | undefined, maxLen: number): string {\n if (!attrs) return \"\";\n const entries = Object.entries(attrs);\n if (entries.length === 0) return \"\";\n\n const picks = new Map<string, string>();\n const set = (k: string, v: unknown) => {\n const s = fmtAttrValue(v, maxLen);\n if (s !== undefined) picks.set(k, s);\n };\n\n // Prefer common keys in expected output\n set(\"job\", attrs.jobId ?? attrs.job ?? attrs.jobUuid);\n set(\"user\", attrs.userUuid ?? attrs.userId ?? attrs.user);\n set(\"trip\", attrs.tripUuid ?? attrs.tripId ?? attrs.trip);\n set(\"msgs\", attrs.messageCount ?? attrs.msgs);\n set(\"trips\", attrs.trips);\n set(\"model\", attrs.model);\n\n // tokens: input/output\n const tokens = attrs.tokens;\n if (tokens && typeof tokens === \"object\" && tokens !== null) {\n const input = (tokens as any).input;\n const output = (tokens as any).output;\n if (typeof input === \"number\" || typeof output === \"number\") {\n picks.set(\"tokens\", `${input ?? \"?\"}/${output ?? \"?\"}`);\n }\n }\n\n // Allow a few booleans/strings\n for (const k of [\"shouldNotify\", \"variant\"] as const) {\n if (k in attrs) set(k, (attrs as any)[k]);\n }\n\n const rendered = [...picks.entries()]\n .filter(([, v]) => v !== \"\")\n .map(([k, v]) => `${k}=${v}`);\n\n return rendered.length > 0 ? \" \" + rendered.join(\" \") : \"\";\n}\n\nfunction statusMark(node: InspectNode): string {\n if (node.event.status === \"error\") return \" ✖\";\n if (node.event.status === \"ok\") return \" ✔\";\n return \"\";\n}\n\nfunction fmtDuration(ms: number): string {\n if (!Number.isFinite(ms) || ms < 0) return \"\";\n if (ms < 1000) return `${Math.round(ms)}ms`;\n return `${(ms / 1000).toFixed(2)}s`;\n}\n\nfunction renderNodeLines(node: InspectNode, prefix: string, isLast: boolean, options: Required<RenderTreeOptions>): string[] {\n const branch = prefix + (isLast ? \"└─ \" : \"├─ \");\n const nextPrefix = prefix + (isLast ? \" \" : \"│ \");\n const attrs = compactAttrs(node.event.attributes, options.maxAttributeLength);\n const dur = node.event.durationMs !== undefined ? ` ${fmtDuration(node.event.durationMs)}` : \"\";\n const line = `${branch}${node.event.name}${attrs}${statusMark(node)}${dur}`;\n\n const lines = [line];\n\n const showConf =\n options.showConfidence === \"always\" ||\n (options.showConfidence === \"non-explicit\" && node.event.confidence !== \"explicit\");\n if (showConf) {\n lines.push(`${nextPrefix}confidence: ${node.event.confidence}`);\n }\n\n const children = node.children;\n for (let i = 0; i < children.length; i++) {\n lines.push(...renderNodeLines(children[i]!, nextPrefix, i === children.length - 1, options));\n }\n return lines;\n}\n\nexport function renderRunTree(tree: InspectRunTree, options?: RenderTreeOptions): string {\n const opts: Required<RenderTreeOptions> = {\n verbose: options?.verbose ?? false,\n showConfidence: options?.showConfidence ?? \"always\",\n showMetadata: options?.showMetadata ?? false,\n color: options?.color ?? false,\n maxAttributeLength: options?.maxAttributeLength ?? 40,\n summary: options?.summary ?? true,\n };\n\n const header = `Run ${tree.runId}`;\n const lines: string[] = [header];\n\n const children = tree.children;\n for (let i = 0; i < children.length; i++) {\n lines.push(...renderNodeLines(children[i]!, \"\", i === children.length - 1, opts));\n }\n\n if (opts.summary) {\n const cb = tree.metadata.confidenceBreakdown;\n const tools = tree.metadata.kinds.TOOL ?? 0;\n const llms = tree.metadata.kinds.LLM ?? 0;\n lines.push(\"\");\n lines.push(\"Summary:\");\n lines.push(` Events: ${tree.metadata.totalEvents}`);\n lines.push(` Tools: ${tools}`);\n lines.push(` LLMs: ${llms}`);\n lines.push(\n ` Confidence: ${cb.explicit} explicit, ${cb.correlated} correlated, ${cb.heuristic} heuristic, ${cb.unknown} unknown`,\n );\n lines.push(\"\");\n lines.push(\"Note:\");\n lines.push(\" Flat timeline by default. Nesting only with explicit parentId.\");\n }\n\n return lines.join(\"\\n\");\n}\n\nexport function renderRunTrees(trees: InspectRunTree[], options?: RenderTreeOptions): string {\n return trees.map((t) => renderRunTree(t, options)).join(\"\\n\\n\");\n}\n\n","import type { RawLogRecord } from \"./raw-record.js\";\nimport { JsonLogParser } from \"./json-parser.js\";\nimport { Log4jsParser } from \"./log4js-parser.js\";\nimport type { ParseResult, ParserWarning } from \"./warnings.js\";\n\nexport type LogSourceFormat = \"json\" | \"log4js\" | \"auto\";\n\nexport interface ParseLogLineOptions {\n format?: LogSourceFormat;\n file?: string;\n line?: number;\n}\n\nfunction shiftLineNumbers(\n res: ParseResult<RawLogRecord>,\n options: ParseLogLineOptions,\n): ParseResult<RawLogRecord> {\n const targetLine =\n typeof options.line === \"number\" && Number.isFinite(options.line) && options.line > 0\n ? Math.floor(options.line)\n : undefined;\n const file = typeof options.file === \"string\" && options.file.trim() !== \"\" ? options.file : undefined;\n\n if (targetLine === undefined && file === undefined) return res;\n\n const mapRecord = (x: RawLogRecord): RawLogRecord => ({\n ...x,\n ...(targetLine !== undefined ? { line: targetLine } : {}),\n ...(file !== undefined ? { file } : {}),\n });\n\n const mapWarning = (x: ParserWarning): ParserWarning => ({\n ...x,\n ...(targetLine !== undefined ? { line: targetLine } : {}),\n ...(file !== undefined ? { file } : {}),\n });\n\n return {\n records: res.records.map(mapRecord),\n warnings: res.warnings.map(mapWarning),\n };\n}\n\nfunction normalizeFormat(line: string, format: LogSourceFormat | undefined): LogSourceFormat {\n if (format && format !== \"auto\") return format;\n const trimmed = line.trim();\n if (trimmed.startsWith(\"{\")) return \"json\";\n return \"log4js\";\n}\n\nexport function parseLogLine(\n line: string,\n options: ParseLogLineOptions = {},\n): ParseResult<RawLogRecord> {\n const raw = typeof line === \"string\" ? line : \"\";\n const trimmed = raw.trim();\n if (trimmed === \"\") return { records: [], warnings: [] };\n\n const format = normalizeFormat(raw, options.format);\n const base =\n format === \"json\"\n ? new JsonLogParser().parseLines([raw], options.file)\n : new Log4jsParser().parseLines([raw], options.file);\n\n // JsonLogParser/Log4jsParser always number lines starting at 1; for streaming tail we\n // need to preserve the real stream/file line number when provided.\n return shiftLineNumbers(base, options);\n}\n\n","import type { InspectEvent, InspectRunTree } from \"../types/inspect-event.js\";\nimport type { LogIngestConfig } from \"../types/log-config.js\";\nimport { mergeLogIngestConfig } from \"./config.js\";\nimport type { LogSourceFormat } from \"./line-parser.js\";\nimport { parseLogLine } from \"./line-parser.js\";\nimport { EventNormalizer } from \"./normalizer.js\";\nimport { Redactor } from \"./redactor.js\";\nimport { TreeBuilder } from \"./tree-builder.js\";\nimport type { ParserWarning } from \"./warnings.js\";\n\nexport interface LiveLogUpdate {\n events: InspectEvent[];\n trees: InspectRunTree[];\n warnings: ParserWarning[];\n}\n\nexport interface LiveLogAccumulatorOptions {\n config: LogIngestConfig;\n format?: LogSourceFormat;\n file?: string;\n}\n\nexport class LiveLogAccumulator {\n readonly #config: LogIngestConfig;\n readonly #format: LogSourceFormat;\n readonly #file?: string;\n\n readonly #normalizer: EventNormalizer;\n readonly #redactor: Redactor;\n readonly #treeBuilder: TreeBuilder;\n\n #events: InspectEvent[] = [];\n #warnings: ParserWarning[] = [];\n #trees: InspectRunTree[] = [];\n\n constructor(options: LiveLogAccumulatorOptions) {\n // Ensure defaults are applied consistently.\n this.#config = mergeLogIngestConfig(options.config, {});\n this.#format = options.format ?? \"auto\";\n this.#file = options.file;\n\n this.#normalizer = new EventNormalizer({ config: this.#config });\n this.#redactor = new Redactor({ rules: this.#config.redact });\n this.#treeBuilder = new TreeBuilder({ config: this.#config });\n }\n\n pushLine(line: string, lineNumber?: number): LiveLogUpdate {\n try {\n const parsed = parseLogLine(line, {\n format: this.#format,\n file: this.#file,\n line: lineNumber,\n });\n\n const normalized = this.#normalizer.normalizeAll(parsed.records);\n\n // Redact attributes after normalization, before storing.\n const redactedEvents = normalized.records.map((e) => ({\n ...e,\n attributes: e.attributes ? this.#redactor.redactRecord(e.attributes) : undefined,\n }));\n\n this.#events = [...this.#events, ...redactedEvents];\n this.#warnings = [...this.#warnings, ...parsed.warnings, ...normalized.warnings];\n this.#trees = this.#treeBuilder.build(this.#events);\n\n return {\n events: this.#events,\n trees: this.#trees,\n warnings: this.#warnings,\n };\n } catch (e) {\n const msg = e instanceof Error ? e.message : String(e);\n const warning: ParserWarning = {\n code: \"UNKNOWN\",\n message: `LiveLogAccumulator failed to process line (${msg})`,\n file: this.#file,\n line: lineNumber,\n raw: typeof line === \"string\" ? line.slice(0, 500) : undefined,\n };\n this.#warnings = [...this.#warnings, warning];\n return { events: this.#events, trees: this.#trees, warnings: this.#warnings };\n }\n }\n\n getEvents(): InspectEvent[] {\n return this.#events;\n }\n\n getTrees(): InspectRunTree[] {\n return this.#trees;\n }\n\n getWarnings(): ParserWarning[] {\n return this.#warnings;\n }\n\n reset(): void {\n this.#events = [];\n this.#trees = [];\n this.#warnings = [];\n }\n}\n\n","import { readFile } from \"node:fs/promises\";\n\nimport type { InspectEvent, InspectRunTree } from \"../types/inspect-event.js\";\nimport type { LogIngestConfig } from \"../types/log-config.js\";\nimport { loadLogIngestConfig, mergeLogIngestConfig } from \"./config.js\";\nimport { JsonLogParser } from \"./json-parser.js\";\nimport { Log4jsParser } from \"./log4js-parser.js\";\nimport type { RawLogRecord } from \"./raw-record.js\";\nimport { Redactor } from \"./redactor.js\";\nimport { EventNormalizer } from \"./normalizer.js\";\nimport { TreeBuilder } from \"./tree-builder.js\";\nimport type { ParserWarning } from \"./warnings.js\";\nexport type { LogSourceFormat, ParseLogLineOptions } from \"./line-parser.js\";\nexport { parseLogLine } from \"./line-parser.js\";\nexport type { LiveLogUpdate, LiveLogAccumulatorOptions } from \"./live-tree.js\";\nexport { LiveLogAccumulator } from \"./live-tree.js\";\n\nexport interface ParseLogsOptions {\n format?: \"json\" | \"log4js\" | \"auto\";\n config?: LogIngestConfig;\n configPath?: string;\n runIdKeys?: string[];\n eventKey?: string;\n timestampKey?: string;\n messageKey?: string;\n levelKey?: string;\n parentIdKey?: string;\n durationKey?: string;\n statusKey?: string;\n warnings?: \"none\" | \"summary\" | \"all\";\n}\n\nexport interface LogToTreeResult {\n events: InspectEvent[];\n trees: InspectRunTree[];\n warnings: ParserWarning[];\n}\n\nfunction firstNonEmptyLine(text: string): string | undefined {\n for (const line of text.split(/\\r?\\n/)) {\n const t = line.trim();\n if (t !== \"\") return t;\n }\n return undefined;\n}\n\nasync function detectFormat(\n filePath: string,\n): Promise<\"json\" | \"log4js\"> {\n const text = await readFile(filePath, \"utf-8\");\n const first = firstNonEmptyLine(text);\n if (!first) return \"log4js\";\n if (!first.startsWith(\"{\")) return \"log4js\";\n try {\n const parsed = JSON.parse(first) as unknown;\n if (parsed && typeof parsed === \"object\" && !Array.isArray(parsed)) return \"json\";\n } catch {\n /* ignore */\n }\n return \"log4js\";\n}\n\nfunction applyOverrides(\n cfg: LogIngestConfig,\n options: ParseLogsOptions,\n): LogIngestConfig {\n const override: Partial<LogIngestConfig> = {};\n for (const k of [\n \"runIdKeys\",\n \"eventKey\",\n \"timestampKey\",\n \"messageKey\",\n \"levelKey\",\n \"parentIdKey\",\n \"durationKey\",\n \"statusKey\",\n ] as const) {\n const v = (options as any)[k];\n if (v !== undefined) (override as any)[k] = v;\n }\n return mergeLogIngestConfig(cfg, override);\n}\n\n/**\n * @experimental Compatibility-oriented API for parsing structured logs into normalized run trees.\n * Subject to refinement before a future stability declaration.\n */\nexport async function parseLogsToTrees(\n filePath: string,\n options: ParseLogsOptions = {},\n): Promise<LogToTreeResult> {\n const base =\n options.config ??\n (await loadLogIngestConfig(options.configPath));\n const config = applyOverrides(base, options);\n\n const format =\n options.format === \"auto\" || options.format === undefined\n ? await detectFormat(filePath)\n : options.format;\n\n let parsed: { records: RawLogRecord[]; warnings: ParserWarning[] };\n if (format === \"json\") {\n parsed = await new JsonLogParser().parseFile(filePath);\n } else {\n parsed = await new Log4jsParser().parseFile(filePath);\n }\n\n const normalizer = new EventNormalizer({ config });\n const normalized = normalizer.normalizeAll(parsed.records);\n\n // Redact attributes after normalization.\n const redactor = new Redactor({ rules: config.redact });\n const events: InspectEvent[] = normalized.records.map((e) => ({\n ...e,\n attributes: e.attributes ? redactor.redactRecord(e.attributes) : undefined,\n }));\n\n const trees = new TreeBuilder({ config }).build(events);\n\n return {\n events,\n trees,\n warnings: [...parsed.warnings, ...normalized.warnings],\n };\n}\n\n"]}
@@ -0,0 +1,127 @@
1
+ // packages/core/src/exporters/helpers.ts
2
+ var REDACT_SUBSTRINGS = [
3
+ "authorization",
4
+ "cookie",
5
+ "token",
6
+ "apikey",
7
+ "password",
8
+ "secret",
9
+ "email"
10
+ ];
11
+ function shouldRedactKey(key) {
12
+ const k = key.toLowerCase();
13
+ for (const s of REDACT_SUBSTRINGS) {
14
+ if (k.includes(s)) return true;
15
+ }
16
+ return false;
17
+ }
18
+ function safeString(value, maxLength) {
19
+ if (value === null || value === void 0) return "";
20
+ let s;
21
+ if (typeof value === "string") s = value;
22
+ else if (typeof value === "number" || typeof value === "boolean") s = String(value);
23
+ else s = stableJson(value, false);
24
+ if (maxLength !== void 0 && maxLength >= 0 && s.length > maxLength) {
25
+ return `${s.slice(0, maxLength)}\u2026`;
26
+ }
27
+ return s;
28
+ }
29
+ function escapeMarkdown(value) {
30
+ return value.replace(/\|/g, "\\|").replace(/\r\n/g, "\n").replace(/\r/g, "\n").replace(/\n/g, " ");
31
+ }
32
+ function escapeHtml(value) {
33
+ return value.replace(/&/g, "&amp;").replace(/</g, "&lt;").replace(/>/g, "&gt;").replace(/"/g, "&quot;").replace(/'/g, "&#39;");
34
+ }
35
+ function sortKeysDeep(input) {
36
+ if (input === null || typeof input !== "object") return input;
37
+ if (Array.isArray(input)) return input.map(sortKeysDeep);
38
+ const o = input;
39
+ const out = {};
40
+ for (const k of Object.keys(o).sort()) {
41
+ out[k] = sortKeysDeep(o[k]);
42
+ }
43
+ return out;
44
+ }
45
+ function stableJson(value, pretty) {
46
+ const sorted = sortKeysDeep(value);
47
+ return pretty === true ? JSON.stringify(sorted, null, 2) : JSON.stringify(sorted);
48
+ }
49
+ function compactAttributes(attrs, options) {
50
+ if (attrs === void 0) return {};
51
+ const maxLen = options?.maxLength ?? 500;
52
+ const redacted = options?.redacted ?? true;
53
+ const out = {};
54
+ for (const key of Object.keys(attrs).sort()) {
55
+ if (redacted && shouldRedactKey(key)) {
56
+ out[key] = "[REDACTED]";
57
+ continue;
58
+ }
59
+ const v = attrs[key];
60
+ out[key] = compactValue(v, maxLen, redacted);
61
+ }
62
+ return out;
63
+ }
64
+ function compactValue(value, maxLen, redacted) {
65
+ if (value === null || typeof value !== "object") {
66
+ return typeof value === "string" ? safeString(value, maxLen) : value;
67
+ }
68
+ if (Array.isArray(value)) {
69
+ const arr = value.slice(0, 20).map((x) => compactValue(x, maxLen, redacted));
70
+ if (value.length > 20) arr.push(`\u2026(+${value.length - 20} more)`);
71
+ return arr;
72
+ }
73
+ const o = value;
74
+ const inner = {};
75
+ for (const k of Object.keys(o)) {
76
+ if (redacted && shouldRedactKey(k)) inner[k] = "[REDACTED]";
77
+ else inner[k] = compactValue(o[k], maxLen, redacted);
78
+ }
79
+ return inner;
80
+ }
81
+ function summarizeTree(tree) {
82
+ const flat = flattenTree(tree);
83
+ const errorNodes = flat.filter((n) => n.event.status === "error").length;
84
+ return {
85
+ runId: tree.runId,
86
+ name: tree.name,
87
+ status: tree.status,
88
+ startedAt: tree.startedAt,
89
+ endedAt: tree.endedAt,
90
+ durationMs: tree.durationMs,
91
+ stepCount: flat.length,
92
+ errorStepCount: errorNodes,
93
+ totalEvents: tree.metadata.totalEvents,
94
+ confidenceBreakdown: { ...tree.metadata.confidenceBreakdown },
95
+ kinds: { ...tree.metadata.kinds }
96
+ };
97
+ }
98
+ function flattenTree(tree) {
99
+ const out = [];
100
+ function walk(nodes) {
101
+ for (const n of nodes) {
102
+ out.push(n);
103
+ if (n.children.length > 0) walk(n.children);
104
+ }
105
+ }
106
+ walk(tree.children);
107
+ return out;
108
+ }
109
+ function zeroKinds() {
110
+ return {
111
+ RUN: 0,
112
+ AGENT: 0,
113
+ LLM: 0,
114
+ TOOL: 0,
115
+ CHAIN: 0,
116
+ RETRIEVER: 0,
117
+ DECISION: 0,
118
+ RESULT: 0,
119
+ ERROR: 0,
120
+ LOGIC: 0,
121
+ LOG: 0
122
+ };
123
+ }
124
+
125
+ export { compactAttributes, escapeHtml, escapeMarkdown, flattenTree, safeString, stableJson, summarizeTree, zeroKinds };
126
+ //# sourceMappingURL=chunk-HY7H3CQM.mjs.map
127
+ //# sourceMappingURL=chunk-HY7H3CQM.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/exporters/helpers.ts"],"names":[],"mappings":"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","file":"chunk-HY7H3CQM.mjs","sourcesContent":["import type { InspectKind, InspectNode, InspectRunTree } from \"../types/inspect-event.js\";\n\nconst REDACT_SUBSTRINGS = [\n \"authorization\",\n \"cookie\",\n \"token\",\n \"apikey\",\n \"password\",\n \"secret\",\n \"email\",\n] as const;\n\nfunction shouldRedactKey(key: string): boolean {\n const k = key.toLowerCase();\n for (const s of REDACT_SUBSTRINGS) {\n if (k.includes(s)) return true;\n }\n return false;\n}\n\nexport function safeString(value: unknown, maxLength?: number): string {\n if (value === null || value === undefined) return \"\";\n let s: string;\n if (typeof value === \"string\") s = value;\n else if (typeof value === \"number\" || typeof value === \"boolean\") s = String(value);\n else s = stableJson(value, false);\n if (maxLength !== undefined && maxLength >= 0 && s.length > maxLength) {\n return `${s.slice(0, maxLength)}…`;\n }\n return s;\n}\n\n/** Escape markdown table pipes and normalize line breaks for safe inline text. */\nexport function escapeMarkdown(value: string): string {\n return value\n .replace(/\\|/g, \"\\\\|\")\n .replace(/\\r\\n/g, \"\\n\")\n .replace(/\\r/g, \"\\n\")\n .replace(/\\n/g, \" \");\n}\n\nexport function escapeHtml(value: string): string {\n return value\n .replace(/&/g, \"&amp;\")\n .replace(/</g, \"&lt;\")\n .replace(/>/g, \"&gt;\")\n .replace(/\"/g, \"&quot;\")\n .replace(/'/g, \"&#39;\");\n}\n\nfunction sortKeysDeep(input: unknown): unknown {\n if (input === null || typeof input !== \"object\") return input;\n if (Array.isArray(input)) return input.map(sortKeysDeep);\n const o = input as Record<string, unknown>;\n const out: Record<string, unknown> = {};\n for (const k of Object.keys(o).sort()) {\n out[k] = sortKeysDeep(o[k]);\n }\n return out;\n}\n\nexport function stableJson(value: unknown, pretty?: boolean): string {\n const sorted = sortKeysDeep(value);\n return pretty === true ? JSON.stringify(sorted, null, 2) : JSON.stringify(sorted);\n}\n\nexport function compactAttributes(\n attrs: Record<string, unknown> | undefined,\n options?: { maxLength?: number; redacted?: boolean },\n): Record<string, unknown> {\n if (attrs === undefined) return {};\n const maxLen = options?.maxLength ?? 500;\n const redacted = options?.redacted ?? true;\n const out: Record<string, unknown> = {};\n for (const key of Object.keys(attrs).sort()) {\n if (redacted && shouldRedactKey(key)) {\n out[key] = \"[REDACTED]\";\n continue;\n }\n const v = attrs[key];\n out[key] = compactValue(v, maxLen, redacted);\n }\n return out;\n}\n\nfunction compactValue(value: unknown, maxLen: number, redacted: boolean): unknown {\n if (value === null || typeof value !== \"object\") {\n return typeof value === \"string\" ? safeString(value, maxLen) : value;\n }\n if (Array.isArray(value)) {\n const arr = value.slice(0, 20).map((x) => compactValue(x, maxLen, redacted));\n if (value.length > 20) arr.push(`…(+${value.length - 20} more)`);\n return arr;\n }\n const o = value as Record<string, unknown>;\n const inner: Record<string, unknown> = {};\n for (const k of Object.keys(o)) {\n if (redacted && shouldRedactKey(k)) inner[k] = \"[REDACTED]\";\n else inner[k] = compactValue(o[k], maxLen, redacted);\n }\n return inner;\n}\n\nexport function summarizeTree(tree: InspectRunTree): Record<string, unknown> {\n const flat = flattenTree(tree);\n const errorNodes = flat.filter((n) => n.event.status === \"error\").length;\n return {\n runId: tree.runId,\n name: tree.name,\n status: tree.status,\n startedAt: tree.startedAt,\n endedAt: tree.endedAt,\n durationMs: tree.durationMs,\n stepCount: flat.length,\n errorStepCount: errorNodes,\n totalEvents: tree.metadata.totalEvents,\n confidenceBreakdown: { ...tree.metadata.confidenceBreakdown },\n kinds: { ...tree.metadata.kinds },\n };\n}\n\n/** Depth-first pre-order flatten (matches typical tree display). */\nexport function flattenTree(tree: InspectRunTree): InspectNode[] {\n const out: InspectNode[] = [];\n function walk(nodes: InspectNode[]): void {\n for (const n of nodes) {\n out.push(n);\n if (n.children.length > 0) walk(n.children);\n }\n }\n walk(tree.children);\n return out;\n}\n\nexport function zeroKinds(): Record<InspectKind, number> {\n return {\n RUN: 0,\n AGENT: 0,\n LLM: 0,\n TOOL: 0,\n CHAIN: 0,\n RETRIEVER: 0,\n DECISION: 0,\n RESULT: 0,\n ERROR: 0,\n LOGIC: 0,\n LOG: 0,\n };\n}\n"]}
@@ -0,0 +1,48 @@
1
+ // packages/core/src/correlation-metadata.ts
2
+ var TRACE_CORRELATION_KEYS = [
3
+ "correlationId",
4
+ "requestId",
5
+ "decisionId",
6
+ "groupId"
7
+ ];
8
+ function isNonEmptyString(value) {
9
+ return typeof value === "string" && value.length > 0;
10
+ }
11
+ function extractCorrelationMetadata(record) {
12
+ if (!record) {
13
+ return void 0;
14
+ }
15
+ const out = {};
16
+ let found = false;
17
+ for (const key of TRACE_CORRELATION_KEYS) {
18
+ const value = record[key];
19
+ if (isNonEmptyString(value)) {
20
+ out[key] = value;
21
+ found = true;
22
+ }
23
+ }
24
+ return found ? out : void 0;
25
+ }
26
+ function buildRunStartedMetadata(options) {
27
+ if (!options) {
28
+ return void 0;
29
+ }
30
+ const merged = options.metadata !== void 0 ? { ...options.metadata } : {};
31
+ if (isNonEmptyString(options.correlationId)) {
32
+ merged.correlationId = options.correlationId;
33
+ }
34
+ if (isNonEmptyString(options.requestId)) {
35
+ merged.requestId = options.requestId;
36
+ }
37
+ if (isNonEmptyString(options.decisionId)) {
38
+ merged.decisionId = options.decisionId;
39
+ }
40
+ if (isNonEmptyString(options.groupId)) {
41
+ merged.groupId = options.groupId;
42
+ }
43
+ return Object.keys(merged).length > 0 ? merged : void 0;
44
+ }
45
+
46
+ export { buildRunStartedMetadata, extractCorrelationMetadata };
47
+ //# sourceMappingURL=chunk-S4YWKV4G.mjs.map
48
+ //# sourceMappingURL=chunk-S4YWKV4G.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/correlation-metadata.ts"],"names":[],"mappings":";AAEO,IAAM,sBAAA,GAAyB;AAAA,EACpC,eAAA;AAAA,EACA,WAAA;AAAA,EACA,YAAA;AAAA,EACA;AACF,CAAA;AAEA,SAAS,iBAAiB,KAAA,EAAiC;AACzD,EAAA,OAAO,OAAO,KAAA,KAAU,QAAA,IAAY,KAAA,CAAM,MAAA,GAAS,CAAA;AACrD;AAGO,SAAS,2BACd,MAAA,EACsC;AACtC,EAAA,IAAI,CAAC,MAAA,EAAQ;AACX,IAAA,OAAO,MAAA;AAAA,EACT;AAEA,EAAA,MAAM,MAAgC,EAAC;AACvC,EAAA,IAAI,KAAA,GAAQ,KAAA;AAEZ,EAAA,KAAA,MAAW,OAAO,sBAAA,EAAwB;AACxC,IAAA,MAAM,KAAA,GAAQ,OAAO,GAAG,CAAA;AACxB,IAAA,IAAI,gBAAA,CAAiB,KAAK,CAAA,EAAG;AAC3B,MAAA,GAAA,CAAI,GAAG,CAAA,GAAI,KAAA;AACX,MAAA,KAAA,GAAQ,IAAA;AAAA,IACV;AAAA,EACF;AAEA,EAAA,OAAO,QAAQ,GAAA,GAAM,MAAA;AACvB;AAMO,SAAS,wBACd,OAAA,EAQqC;AACrC,EAAA,IAAI,CAAC,OAAA,EAAS;AACZ,IAAA,OAAO,MAAA;AAAA,EACT;AAEA,EAAA,MAAM,MAAA,GACJ,QAAQ,QAAA,KAAa,MAAA,GAAY,EAAE,GAAG,OAAA,CAAQ,QAAA,EAAS,GAAI,EAAC;AAE9D,EAAA,IAAI,gBAAA,CAAiB,OAAA,CAAQ,aAAa,CAAA,EAAG;AAC3C,IAAA,MAAA,CAAO,gBAAgB,OAAA,CAAQ,aAAA;AAAA,EACjC;AACA,EAAA,IAAI,gBAAA,CAAiB,OAAA,CAAQ,SAAS,CAAA,EAAG;AACvC,IAAA,MAAA,CAAO,YAAY,OAAA,CAAQ,SAAA;AAAA,EAC7B;AACA,EAAA,IAAI,gBAAA,CAAiB,OAAA,CAAQ,UAAU,CAAA,EAAG;AACxC,IAAA,MAAA,CAAO,aAAa,OAAA,CAAQ,UAAA;AAAA,EAC9B;AACA,EAAA,IAAI,gBAAA,CAAiB,OAAA,CAAQ,OAAO,CAAA,EAAG;AACrC,IAAA,MAAA,CAAO,UAAU,OAAA,CAAQ,OAAA;AAAA,EAC3B;AAEA,EAAA,OAAO,OAAO,IAAA,CAAK,MAAM,CAAA,CAAE,MAAA,GAAS,IAAI,MAAA,GAAS,MAAA;AACnD","file":"chunk-S4YWKV4G.mjs","sourcesContent":["import type { InspectRunOptions, TraceCorrelationMetadata } from \"./types.js\";\n\nexport const TRACE_CORRELATION_KEYS = [\n \"correlationId\",\n \"requestId\",\n \"decisionId\",\n \"groupId\",\n] as const satisfies readonly (keyof TraceCorrelationMetadata)[];\n\nfunction isNonEmptyString(value: unknown): value is string {\n return typeof value === \"string\" && value.length > 0;\n}\n\n/** Extracts known correlation keys from a metadata record. */\nexport function extractCorrelationMetadata(\n record: Record<string, unknown> | undefined,\n): TraceCorrelationMetadata | undefined {\n if (!record) {\n return undefined;\n }\n\n const out: TraceCorrelationMetadata = {};\n let found = false;\n\n for (const key of TRACE_CORRELATION_KEYS) {\n const value = record[key];\n if (isNonEmptyString(value)) {\n out[key] = value;\n found = true;\n }\n }\n\n return found ? out : undefined;\n}\n\n/**\n * Builds `run_started` metadata from optional run metadata and top-level correlation fields.\n * Top-level correlation options override the same keys in `options.metadata`.\n */\nexport function buildRunStartedMetadata(\n options?: Pick<\n InspectRunOptions,\n | \"metadata\"\n | \"correlationId\"\n | \"requestId\"\n | \"decisionId\"\n | \"groupId\"\n >,\n): Record<string, unknown> | undefined {\n if (!options) {\n return undefined;\n }\n\n const merged: Record<string, unknown> =\n options.metadata !== undefined ? { ...options.metadata } : {};\n\n if (isNonEmptyString(options.correlationId)) {\n merged.correlationId = options.correlationId;\n }\n if (isNonEmptyString(options.requestId)) {\n merged.requestId = options.requestId;\n }\n if (isNonEmptyString(options.decisionId)) {\n merged.decisionId = options.decisionId;\n }\n if (isNonEmptyString(options.groupId)) {\n merged.groupId = options.groupId;\n }\n\n return Object.keys(merged).length > 0 ? merged : undefined;\n}\n"]}