agent-inspect 6.27.0 → 6.29.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +12 -0
- package/README.md +1 -1
- package/docs/BUNDLES.md +4 -1
- package/docs/LIMITATIONS.md +1 -1
- package/docs/SAFE-TRACE-SHARING.md +2 -0
- package/docs/SCHEMA.md +1 -1
- package/package.json +2 -1
- package/packages/cli/dist/{chunk-WQITHDXH.mjs → chunk-D7PT6TXM.mjs} +4368 -3805
- package/packages/cli/dist/chunk-D7PT6TXM.mjs.map +1 -0
- package/packages/cli/dist/index.cjs +4593 -4019
- package/packages/cli/dist/index.cjs.map +1 -1
- package/packages/cli/dist/index.mjs +4 -4
- package/packages/cli/dist/index.mjs.map +1 -1
- package/packages/cli/dist/{src-T2ATN6XF.mjs → src-QONEBW2F.mjs} +3 -3
- package/packages/cli/dist/{src-T2ATN6XF.mjs.map → src-QONEBW2F.mjs.map} +1 -1
- package/packages/core/dist/advanced.cjs +3062 -2490
- package/packages/core/dist/advanced.cjs.map +1 -1
- package/packages/core/dist/advanced.d.cts +174 -16
- package/packages/core/dist/advanced.d.ts +174 -16
- package/packages/core/dist/advanced.mjs +374 -44
- package/packages/core/dist/advanced.mjs.map +1 -1
- package/packages/core/dist/checks.cjs +10 -1
- package/packages/core/dist/checks.cjs.map +1 -1
- package/packages/core/dist/checks.d.cts +9 -476
- package/packages/core/dist/checks.d.ts +9 -476
- package/packages/core/dist/checks.mjs +5 -5
- package/packages/core/dist/{chunk-U25RHRSU.mjs → chunk-3B24355S.mjs} +12 -5
- package/packages/core/dist/chunk-3B24355S.mjs.map +1 -0
- package/packages/core/dist/{chunk-NXQF73EC.mjs → chunk-5B4DNGFB.mjs} +9 -5
- package/packages/core/dist/chunk-5B4DNGFB.mjs.map +1 -0
- package/packages/core/dist/{chunk-NDRMIL7Z.mjs → chunk-FKUTGUFG.mjs} +12 -4
- package/packages/core/dist/chunk-FKUTGUFG.mjs.map +1 -0
- package/packages/core/dist/{chunk-B6PH7A24.mjs → chunk-LGTPSHH2.mjs} +3615 -3606
- package/packages/core/dist/chunk-LGTPSHH2.mjs.map +1 -0
- package/packages/core/dist/{chunk-R4SSYU6D.mjs → chunk-MVRZ7JBH.mjs} +3 -3
- package/packages/core/dist/{chunk-R4SSYU6D.mjs.map → chunk-MVRZ7JBH.mjs.map} +1 -1
- package/packages/core/dist/{chunk-P366CCL2.mjs → chunk-QJI52TH3.mjs} +4 -2
- package/packages/core/dist/chunk-QJI52TH3.mjs.map +1 -0
- package/packages/core/dist/{chunk-WRE4CNPF.mjs → chunk-SJ3C5RIS.mjs} +3 -3
- package/packages/core/dist/chunk-SJ3C5RIS.mjs.map +1 -0
- package/packages/core/dist/{chunk-WGDSM37E.mjs → chunk-TIGBAVED.mjs} +5 -5
- package/packages/core/dist/{chunk-WGDSM37E.mjs.map → chunk-TIGBAVED.mjs.map} +1 -1
- package/packages/core/dist/{chunk-JBNRJLIV.mjs → chunk-TNOPL75V.mjs} +33 -7
- package/packages/core/dist/chunk-TNOPL75V.mjs.map +1 -0
- package/packages/core/dist/{context-DOX2-RjH.d.ts → context-B8zzsmjX.d.ts} +4 -4
- package/packages/core/dist/{context-DOOT9GZ-.d.cts → context-BhaVHtOT.d.cts} +4 -4
- package/packages/core/dist/diff.d.cts +3 -3
- package/packages/core/dist/diff.d.ts +3 -3
- package/packages/core/dist/exporters.cjs +29 -3
- package/packages/core/dist/exporters.cjs.map +1 -1
- package/packages/core/dist/exporters.d.cts +3 -3
- package/packages/core/dist/exporters.d.ts +3 -3
- package/packages/core/dist/exporters.mjs +5 -5
- package/packages/core/dist/{index-DLLz9sce.d.cts → index-BT3KcO6-.d.cts} +2 -2
- package/packages/core/dist/{index-CR4CCRqP.d.cts → index-C61p7wBR.d.cts} +473 -6
- package/packages/core/dist/{index-CtK_p-ps.d.ts → index-DTO2iGeq.d.ts} +473 -6
- package/packages/core/dist/{index-D72DPqAF.d.ts → index-reskZCVW.d.ts} +2 -2
- package/packages/core/dist/index.cjs +10 -1
- package/packages/core/dist/index.cjs.map +1 -1
- package/packages/core/dist/index.d.cts +7 -7
- package/packages/core/dist/index.d.ts +7 -7
- package/packages/core/dist/index.mjs +6 -6
- package/packages/core/dist/{inspect-event-DRthdZlf.d.cts → inspect-event-CDqjcrG_.d.cts} +1 -1
- package/packages/core/dist/{inspect-event-DRthdZlf.d.ts → inspect-event-CDqjcrG_.d.ts} +1 -1
- package/packages/core/dist/{log-config-CFlIJHTf.d.cts → log-config-DcjV8ZjF.d.cts} +1 -1
- package/packages/core/dist/{log-config-OZRfpHED.d.ts → log-config-N_c5AE09.d.ts} +1 -1
- package/packages/core/dist/logs.d.cts +3 -3
- package/packages/core/dist/logs.d.ts +3 -3
- package/packages/core/dist/{persisted-inspect-event-BVucFVrP.d.ts → persisted-inspect-event-BMwvGIB8.d.ts} +6 -1
- package/packages/core/dist/{persisted-inspect-event-CVZWZldL.d.cts → persisted-inspect-event-DPaCiars.d.cts} +6 -1
- package/packages/core/dist/persisted.cjs +8 -2
- package/packages/core/dist/persisted.cjs.map +1 -1
- package/packages/core/dist/persisted.d.cts +5 -5
- package/packages/core/dist/persisted.d.ts +5 -5
- package/packages/core/dist/persisted.mjs +3 -3
- package/packages/core/dist/readers.cjs +16 -2
- package/packages/core/dist/readers.cjs.map +1 -1
- package/packages/core/dist/readers.d.cts +3 -3
- package/packages/core/dist/readers.d.ts +3 -3
- package/packages/core/dist/readers.mjs +4 -4
- package/packages/core/dist/{types-B562HgN_.d.cts → types-BA_IOdg4.d.cts} +1 -1
- package/packages/core/dist/{types-B562HgN_.d.ts → types-BA_IOdg4.d.ts} +1 -1
- package/packages/core/dist/{types-VzKihKQo.d.cts → types-BSzhK7Z1.d.cts} +11 -2
- package/packages/core/dist/{types-Bx3mEZ04.d.ts → types-C5Y8Idle.d.ts} +11 -2
- package/packages/core/dist/writers.cjs +10 -1
- package/packages/core/dist/writers.cjs.map +1 -1
- package/packages/core/dist/writers.d.cts +2 -2
- package/packages/core/dist/writers.d.ts +2 -2
- package/packages/core/dist/writers.mjs +3 -3
- package/packages/cli/dist/chunk-WQITHDXH.mjs.map +0 -1
- package/packages/core/dist/chunk-B6PH7A24.mjs.map +0 -1
- package/packages/core/dist/chunk-JBNRJLIV.mjs.map +0 -1
- package/packages/core/dist/chunk-NDRMIL7Z.mjs.map +0 -1
- package/packages/core/dist/chunk-NXQF73EC.mjs.map +0 -1
- package/packages/core/dist/chunk-P366CCL2.mjs.map +0 -1
- package/packages/core/dist/chunk-U25RHRSU.mjs.map +0 -1
- package/packages/core/dist/chunk-WRE4CNPF.mjs.map +0 -1
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { prepareMetadataForDisk } from './chunk-
|
|
1
|
+
import { prepareMetadataForDisk } from './chunk-3B24355S.mjs';
|
|
2
2
|
|
|
3
3
|
// packages/core/src/outcomes/types.ts
|
|
4
4
|
var OBSERVED_OUTCOME_STATUSES = [
|
|
@@ -224,5 +224,5 @@ function renderObservedOutcomesHtml(summary) {
|
|
|
224
224
|
}
|
|
225
225
|
|
|
226
226
|
export { OBSERVED_OUTCOME_METHODS, extractOutcomesFromPersistedEvents, extractOutcomesFromTraceEvents, normalizeObserveOutcomeInput, outcomesMatchingStatus, parseObservationFilter, prepareOutcomeEventForDisk, renderObservedOutcomesHtml, renderObservedOutcomesMarkdown, summarizeObservedOutcomes };
|
|
227
|
-
//# sourceMappingURL=chunk-
|
|
228
|
-
//# sourceMappingURL=chunk-
|
|
227
|
+
//# sourceMappingURL=chunk-MVRZ7JBH.mjs.map
|
|
228
|
+
//# sourceMappingURL=chunk-MVRZ7JBH.mjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/outcomes/types.ts","../src/outcomes/validate.ts","../src/outcomes/extract.ts","../src/outcomes/render.ts"],"names":["parseMethod"],"mappings":"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","file":"chunk-R4SSYU6D.mjs","sourcesContent":["export type ObservedOutcomeStatus = \"passed\" | \"failed\" | \"unknown\" | \"skipped\";\n\nexport type ObservedOutcomeMethod =\n | \"dom\"\n | \"accessibility\"\n | \"snapshot\"\n | \"network\"\n | \"storage\"\n | \"filesystem\"\n | \"database\"\n | \"queue\"\n | \"custom\";\n\nexport interface ObservedOutcome {\n outcomeId: string;\n runId: string;\n parentId?: string;\n name: string;\n expectation: string;\n status: ObservedOutcomeStatus;\n method?: ObservedOutcomeMethod;\n actual?: unknown;\n evidence?: unknown;\n observedAt: number;\n}\n\nexport interface ObserveOutcomeOptions {\n expectation: string;\n status: ObservedOutcomeStatus;\n method?: ObservedOutcomeMethod;\n actual?: unknown;\n evidence?: unknown;\n observedAt?: number | string;\n}\n\nexport interface ObservedOutcomeSummary {\n total: number;\n passed: number;\n failed: number;\n unknown: number;\n skipped: number;\n outcomes: ObservedOutcome[];\n}\n\nexport const OBSERVED_OUTCOME_STATUSES: readonly ObservedOutcomeStatus[] = [\n \"passed\",\n \"failed\",\n \"unknown\",\n \"skipped\",\n];\n\nexport const OBSERVED_OUTCOME_METHODS: readonly ObservedOutcomeMethod[] = [\n \"dom\",\n \"accessibility\",\n \"snapshot\",\n \"network\",\n \"storage\",\n \"filesystem\",\n \"database\",\n \"queue\",\n \"custom\",\n];\n\nexport const OUTCOME_ATTRIBUTE_STATUS_KEY = \"outcomeStatus\";\nexport const OUTCOME_ATTRIBUTE_EXPECTATION_KEY = \"expectation\";\nexport const OUTCOME_ATTRIBUTE_METHOD_KEY = \"method\";\nexport const OUTCOME_ATTRIBUTE_OBSERVED_AT_KEY = \"observedAt\";\nexport const OUTCOME_LEGACY_EVENT = \"outcome_observed\";\n","import type { TraceSafetyOptions } from \"../trace-event-safety.js\";\nimport { prepareMetadataForDisk } from \"../trace-event-safety.js\";\nimport type { OutcomeObservedEvent } from \"../types.js\";\nimport {\n OBSERVED_OUTCOME_METHODS,\n OBSERVED_OUTCOME_STATUSES,\n type ObserveOutcomeOptions,\n type ObservedOutcomeMethod,\n type ObservedOutcomeStatus,\n} from \"./types.js\";\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n return typeof value === \"object\" && value !== null && !Array.isArray(value);\n}\n\nfunction normalizeName(name: string): string {\n const trimmed = name.trim();\n if (trimmed === \"\") {\n throw new Error(\"observeOutcome requires a non-empty name.\");\n }\n return trimmed.slice(0, 100);\n}\n\nfunction normalizeExpectation(value: string): string {\n const trimmed = value.trim();\n if (trimmed === \"\") {\n throw new Error(\"observeOutcome requires a non-empty expectation.\");\n }\n return trimmed.slice(0, 500);\n}\n\nexport function parseObservedOutcomeStatus(value: string): ObservedOutcomeStatus {\n const trimmed = value.trim().toLowerCase();\n if ((OBSERVED_OUTCOME_STATUSES as readonly string[]).includes(trimmed)) {\n return trimmed as ObservedOutcomeStatus;\n }\n throw new Error(\n `Unsupported observation status \"${value}\". Use passed, failed, unknown, or skipped.`,\n );\n}\n\nfunction parseMethod(value: string | undefined): ObservedOutcomeMethod | undefined {\n if (value === undefined || value.trim() === \"\") return undefined;\n const trimmed = value.trim().toLowerCase();\n if ((OBSERVED_OUTCOME_METHODS as readonly string[]).includes(trimmed)) {\n return trimmed as ObservedOutcomeMethod;\n }\n throw new Error(`Unsupported observation method \"${value}\".`);\n}\n\nfunction parseObservedAt(value: number | string | undefined, fallback: number): number {\n if (value === undefined) return fallback;\n if (typeof value === \"number\" && Number.isFinite(value)) return value;\n if (typeof value === \"string\") {\n const parsed = Date.parse(value);\n if (Number.isFinite(parsed)) return parsed;\n }\n return fallback;\n}\n\nexport function normalizeObserveOutcomeInput(\n name: string,\n options: ObserveOutcomeOptions,\n nowMs: number = Date.now(),\n): {\n name: string;\n expectation: string;\n status: ObservedOutcomeStatus;\n method?: ObservedOutcomeMethod;\n actual?: unknown;\n evidence?: unknown;\n observedAt: number;\n} {\n return {\n name: normalizeName(name),\n expectation: normalizeExpectation(options.expectation),\n status: options.status,\n ...(options.method !== undefined ? { method: parseMethod(options.method) } : {}),\n ...(options.actual !== undefined ? { actual: options.actual } : {}),\n ...(options.evidence !== undefined ? { evidence: options.evidence } : {}),\n observedAt: parseObservedAt(options.observedAt, nowMs),\n };\n}\n\nfunction boundPayload(\n value: unknown,\n opts: TraceSafetyOptions,\n): unknown {\n if (value === undefined) return undefined;\n if (!isRecord(value) && !Array.isArray(value)) {\n if (typeof value === \"string\") {\n return value.length > opts.maxMetadataValueLength\n ? `${value.slice(0, opts.maxMetadataValueLength)}…`\n : value;\n }\n return value;\n }\n return prepareMetadataForDisk(\n isRecord(value) ? value : { items: value },\n opts,\n );\n}\n\nexport function prepareOutcomeEventForDisk(\n event: OutcomeObservedEvent,\n opts: TraceSafetyOptions,\n): OutcomeObservedEvent {\n const actual = boundPayload(event.actual, opts);\n const evidence = boundPayload(event.evidence, opts);\n const next: OutcomeObservedEvent = {\n ...event,\n ...(actual !== undefined ? { actual } : {}),\n ...(evidence !== undefined ? { evidence } : {}),\n };\n if (\"actual\" in event && actual === undefined) {\n const { actual: _a, ...rest } = next;\n return rest;\n }\n if (\"evidence\" in event && evidence === undefined) {\n const { evidence: _e, ...rest } = next;\n return rest;\n }\n return next;\n}\n","import type { PersistedInspectEvent } from \"../types/persisted-inspect-event.js\";\nimport type { TraceEvent } from \"../types.js\";\nimport {\n OUTCOME_ATTRIBUTE_EXPECTATION_KEY,\n OUTCOME_ATTRIBUTE_METHOD_KEY,\n OUTCOME_ATTRIBUTE_OBSERVED_AT_KEY,\n OUTCOME_ATTRIBUTE_STATUS_KEY,\n OUTCOME_LEGACY_EVENT,\n type ObservedOutcome,\n type ObservedOutcomeMethod,\n type ObservedOutcomeStatus,\n type ObservedOutcomeSummary,\n} from \"./types.js\";\nimport { parseObservedOutcomeStatus } from \"./validate.js\";\n\nfunction isOutcomeStatus(value: unknown): value is ObservedOutcomeStatus {\n return (\n value === \"passed\" ||\n value === \"failed\" ||\n value === \"unknown\" ||\n value === \"skipped\"\n );\n}\n\nfunction parseMethod(value: unknown): ObservedOutcomeMethod | undefined {\n if (typeof value !== \"string\" || value.trim() === \"\") return undefined;\n return value as ObservedOutcomeMethod;\n}\n\nfunction fromOutcomeObservedEvent(event: Extract<TraceEvent, { event: \"outcome_observed\" }>): ObservedOutcome {\n return {\n outcomeId: event.outcomeId,\n runId: event.runId,\n ...(event.parentId !== undefined ? { parentId: event.parentId } : {}),\n name: event.name,\n expectation: event.expectation,\n status: event.status,\n ...(event.method !== undefined ? { method: event.method } : {}),\n ...(event.actual !== undefined ? { actual: event.actual } : {}),\n ...(event.evidence !== undefined ? { evidence: event.evidence } : {}),\n observedAt: event.observedAt,\n };\n}\n\nfunction fromPersistedOutcome(event: PersistedInspectEvent): ObservedOutcome | undefined {\n if (event.kind !== \"OUTCOME\") return undefined;\n const attrs = event.attributes ?? {};\n const statusRaw = attrs[OUTCOME_ATTRIBUTE_STATUS_KEY];\n if (!isOutcomeStatus(statusRaw)) return undefined;\n const expectation =\n typeof attrs[OUTCOME_ATTRIBUTE_EXPECTATION_KEY] === \"string\"\n ? attrs[OUTCOME_ATTRIBUTE_EXPECTATION_KEY]\n : event.name;\n const observedAtRaw = attrs[OUTCOME_ATTRIBUTE_OBSERVED_AT_KEY];\n const observedAt =\n typeof observedAtRaw === \"string\"\n ? Date.parse(observedAtRaw)\n : typeof observedAtRaw === \"number\" && Number.isFinite(observedAtRaw)\n ? observedAtRaw\n : Date.parse(event.timestamp);\n return {\n outcomeId: event.eventId,\n runId: event.runId,\n ...(event.parentId !== undefined ? { parentId: event.parentId } : {}),\n name: event.name,\n expectation,\n status: statusRaw,\n ...(parseMethod(attrs[OUTCOME_ATTRIBUTE_METHOD_KEY]) !== undefined\n ? { method: parseMethod(attrs[OUTCOME_ATTRIBUTE_METHOD_KEY]) }\n : {}),\n ...(event.outputSummary !== undefined ? { actual: event.outputSummary } : {}),\n ...(attrs.evidence !== undefined ? { evidence: attrs.evidence } : {}),\n observedAt: Number.isFinite(observedAt) ? observedAt : Date.parse(event.timestamp),\n };\n}\n\nexport function extractOutcomesFromTraceEvents(events: readonly TraceEvent[]): ObservedOutcome[] {\n const out: ObservedOutcome[] = [];\n for (const event of events) {\n if (event.event === OUTCOME_LEGACY_EVENT) {\n out.push(fromOutcomeObservedEvent(event as Extract<TraceEvent, { event: \"outcome_observed\" }>));\n }\n }\n return out.sort((a, b) => a.observedAt - b.observedAt || a.name.localeCompare(b.name));\n}\n\nexport function extractOutcomesFromPersistedEvents(\n events: readonly PersistedInspectEvent[],\n): ObservedOutcome[] {\n const out: ObservedOutcome[] = [];\n for (const event of events) {\n const outcome = fromPersistedOutcome(event);\n if (outcome) out.push(outcome);\n }\n return out.sort((a, b) => a.observedAt - b.observedAt || a.name.localeCompare(b.name));\n}\n\nexport function summarizeObservedOutcomes(outcomes: readonly ObservedOutcome[]): ObservedOutcomeSummary {\n const summary: ObservedOutcomeSummary = {\n total: outcomes.length,\n passed: 0,\n failed: 0,\n unknown: 0,\n skipped: 0,\n outcomes: [...outcomes],\n };\n for (const outcome of outcomes) {\n summary[outcome.status] += 1;\n }\n return summary;\n}\n\nexport function outcomesMatchingStatus(\n outcomes: readonly ObservedOutcome[],\n statuses: readonly ObservedOutcomeStatus[],\n): ObservedOutcome[] {\n const set = new Set(statuses);\n return outcomes.filter((outcome) => set.has(outcome.status));\n}\n\nexport function parseObservationFilter(value: string | undefined): ObservedOutcomeStatus | undefined {\n if (value === undefined || value.trim() === \"\") return undefined;\n return parseObservedOutcomeStatus(value);\n}\n","import type { ObservedOutcome, ObservedOutcomeSummary } from \"./types.js\";\n\nfunction formatPayload(value: unknown): string {\n if (value === undefined) return \"\";\n try {\n return JSON.stringify(value);\n } catch {\n return String(value);\n }\n}\n\nexport function renderObservedOutcomesMarkdown(summary: ObservedOutcomeSummary): string {\n if (summary.total === 0) {\n return \"No observed outcomes recorded for this run.\";\n }\n const lines = [\n `Total: ${summary.total} (passed ${summary.passed}, failed ${summary.failed}, unknown ${summary.unknown}, skipped ${summary.skipped})`,\n \"\",\n \"| Name | Status | Expectation | Method |\",\n \"| --- | --- | --- | --- |\",\n ];\n for (const outcome of summary.outcomes) {\n lines.push(\n `| ${outcome.name} | ${outcome.status} | ${outcome.expectation.replace(/\\|/g, \"\\\\|\")} | ${outcome.method ?? \"-\"} |`,\n );\n }\n return lines.join(\"\\n\");\n}\n\nexport function renderObservedOutcomesText(summary: ObservedOutcomeSummary): string {\n if (summary.total === 0) {\n return \"No observed outcomes recorded for this run.\";\n }\n const lines = [\n `Observed outcomes: ${summary.total} (passed ${summary.passed}, failed ${summary.failed}, unknown ${summary.unknown}, skipped ${summary.skipped})`,\n ];\n for (const outcome of summary.outcomes) {\n const evidence = formatPayload(outcome.evidence);\n const suffix = evidence ? ` evidence=${evidence}` : \"\";\n lines.push(\n `- ${outcome.name} [${outcome.status}] ${outcome.expectation}${suffix}`,\n );\n }\n return lines.join(\"\\n\");\n}\n\nexport function renderObservedOutcomesHtml(summary: ObservedOutcomeSummary): string {\n if (summary.total === 0) {\n return \"<p>No observed outcomes recorded for this run.</p>\";\n }\n const rows = summary.outcomes\n .map((outcome: ObservedOutcome) => {\n const esc = (v: string) =>\n v.replaceAll(\"&\", \"&\").replaceAll(\"<\", \"<\").replaceAll(\">\", \">\");\n return `<tr><td>${esc(outcome.name)}</td><td>${esc(outcome.status)}</td><td>${esc(outcome.expectation)}</td><td>${esc(outcome.method ?? \"-\")}</td></tr>`;\n })\n .join(\"\");\n return `<p>Total: ${summary.total} (passed ${summary.passed}, failed ${summary.failed}, unknown ${summary.unknown}, skipped ${summary.skipped})</p><table><thead><tr><th>Name</th><th>Status</th><th>Expectation</th><th>Method</th></tr></thead><tbody>${rows}</tbody></table>`;\n}\n"]}
|
|
1
|
+
{"version":3,"sources":["../src/outcomes/types.ts","../src/outcomes/validate.ts","../src/outcomes/extract.ts","../src/outcomes/render.ts"],"names":["parseMethod"],"mappings":"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","file":"chunk-MVRZ7JBH.mjs","sourcesContent":["export type ObservedOutcomeStatus = \"passed\" | \"failed\" | \"unknown\" | \"skipped\";\n\nexport type ObservedOutcomeMethod =\n | \"dom\"\n | \"accessibility\"\n | \"snapshot\"\n | \"network\"\n | \"storage\"\n | \"filesystem\"\n | \"database\"\n | \"queue\"\n | \"custom\";\n\nexport interface ObservedOutcome {\n outcomeId: string;\n runId: string;\n parentId?: string;\n name: string;\n expectation: string;\n status: ObservedOutcomeStatus;\n method?: ObservedOutcomeMethod;\n actual?: unknown;\n evidence?: unknown;\n observedAt: number;\n}\n\nexport interface ObserveOutcomeOptions {\n expectation: string;\n status: ObservedOutcomeStatus;\n method?: ObservedOutcomeMethod;\n actual?: unknown;\n evidence?: unknown;\n observedAt?: number | string;\n}\n\nexport interface ObservedOutcomeSummary {\n total: number;\n passed: number;\n failed: number;\n unknown: number;\n skipped: number;\n outcomes: ObservedOutcome[];\n}\n\nexport const OBSERVED_OUTCOME_STATUSES: readonly ObservedOutcomeStatus[] = [\n \"passed\",\n \"failed\",\n \"unknown\",\n \"skipped\",\n];\n\nexport const OBSERVED_OUTCOME_METHODS: readonly ObservedOutcomeMethod[] = [\n \"dom\",\n \"accessibility\",\n \"snapshot\",\n \"network\",\n \"storage\",\n \"filesystem\",\n \"database\",\n \"queue\",\n \"custom\",\n];\n\nexport const OUTCOME_ATTRIBUTE_STATUS_KEY = \"outcomeStatus\";\nexport const OUTCOME_ATTRIBUTE_EXPECTATION_KEY = \"expectation\";\nexport const OUTCOME_ATTRIBUTE_METHOD_KEY = \"method\";\nexport const OUTCOME_ATTRIBUTE_OBSERVED_AT_KEY = \"observedAt\";\nexport const OUTCOME_LEGACY_EVENT = \"outcome_observed\";\n","import type { TraceSafetyOptions } from \"../trace-event-safety.js\";\nimport { prepareMetadataForDisk } from \"../trace-event-safety.js\";\nimport type { OutcomeObservedEvent } from \"../types.js\";\nimport {\n OBSERVED_OUTCOME_METHODS,\n OBSERVED_OUTCOME_STATUSES,\n type ObserveOutcomeOptions,\n type ObservedOutcomeMethod,\n type ObservedOutcomeStatus,\n} from \"./types.js\";\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n return typeof value === \"object\" && value !== null && !Array.isArray(value);\n}\n\nfunction normalizeName(name: string): string {\n const trimmed = name.trim();\n if (trimmed === \"\") {\n throw new Error(\"observeOutcome requires a non-empty name.\");\n }\n return trimmed.slice(0, 100);\n}\n\nfunction normalizeExpectation(value: string): string {\n const trimmed = value.trim();\n if (trimmed === \"\") {\n throw new Error(\"observeOutcome requires a non-empty expectation.\");\n }\n return trimmed.slice(0, 500);\n}\n\nexport function parseObservedOutcomeStatus(value: string): ObservedOutcomeStatus {\n const trimmed = value.trim().toLowerCase();\n if ((OBSERVED_OUTCOME_STATUSES as readonly string[]).includes(trimmed)) {\n return trimmed as ObservedOutcomeStatus;\n }\n throw new Error(\n `Unsupported observation status \"${value}\". Use passed, failed, unknown, or skipped.`,\n );\n}\n\nfunction parseMethod(value: string | undefined): ObservedOutcomeMethod | undefined {\n if (value === undefined || value.trim() === \"\") return undefined;\n const trimmed = value.trim().toLowerCase();\n if ((OBSERVED_OUTCOME_METHODS as readonly string[]).includes(trimmed)) {\n return trimmed as ObservedOutcomeMethod;\n }\n throw new Error(`Unsupported observation method \"${value}\".`);\n}\n\nfunction parseObservedAt(value: number | string | undefined, fallback: number): number {\n if (value === undefined) return fallback;\n if (typeof value === \"number\" && Number.isFinite(value)) return value;\n if (typeof value === \"string\") {\n const parsed = Date.parse(value);\n if (Number.isFinite(parsed)) return parsed;\n }\n return fallback;\n}\n\nexport function normalizeObserveOutcomeInput(\n name: string,\n options: ObserveOutcomeOptions,\n nowMs: number = Date.now(),\n): {\n name: string;\n expectation: string;\n status: ObservedOutcomeStatus;\n method?: ObservedOutcomeMethod;\n actual?: unknown;\n evidence?: unknown;\n observedAt: number;\n} {\n return {\n name: normalizeName(name),\n expectation: normalizeExpectation(options.expectation),\n status: options.status,\n ...(options.method !== undefined ? { method: parseMethod(options.method) } : {}),\n ...(options.actual !== undefined ? { actual: options.actual } : {}),\n ...(options.evidence !== undefined ? { evidence: options.evidence } : {}),\n observedAt: parseObservedAt(options.observedAt, nowMs),\n };\n}\n\nfunction boundPayload(\n value: unknown,\n opts: TraceSafetyOptions,\n): unknown {\n if (value === undefined) return undefined;\n if (!isRecord(value) && !Array.isArray(value)) {\n if (typeof value === \"string\") {\n return value.length > opts.maxMetadataValueLength\n ? `${value.slice(0, opts.maxMetadataValueLength)}…`\n : value;\n }\n return value;\n }\n return prepareMetadataForDisk(\n isRecord(value) ? value : { items: value },\n opts,\n );\n}\n\nexport function prepareOutcomeEventForDisk(\n event: OutcomeObservedEvent,\n opts: TraceSafetyOptions,\n): OutcomeObservedEvent {\n const actual = boundPayload(event.actual, opts);\n const evidence = boundPayload(event.evidence, opts);\n const next: OutcomeObservedEvent = {\n ...event,\n ...(actual !== undefined ? { actual } : {}),\n ...(evidence !== undefined ? { evidence } : {}),\n };\n if (\"actual\" in event && actual === undefined) {\n const { actual: _a, ...rest } = next;\n return rest;\n }\n if (\"evidence\" in event && evidence === undefined) {\n const { evidence: _e, ...rest } = next;\n return rest;\n }\n return next;\n}\n","import type { PersistedInspectEvent } from \"../types/persisted-inspect-event.js\";\nimport type { TraceEvent } from \"../types.js\";\nimport {\n OUTCOME_ATTRIBUTE_EXPECTATION_KEY,\n OUTCOME_ATTRIBUTE_METHOD_KEY,\n OUTCOME_ATTRIBUTE_OBSERVED_AT_KEY,\n OUTCOME_ATTRIBUTE_STATUS_KEY,\n OUTCOME_LEGACY_EVENT,\n type ObservedOutcome,\n type ObservedOutcomeMethod,\n type ObservedOutcomeStatus,\n type ObservedOutcomeSummary,\n} from \"./types.js\";\nimport { parseObservedOutcomeStatus } from \"./validate.js\";\n\nfunction isOutcomeStatus(value: unknown): value is ObservedOutcomeStatus {\n return (\n value === \"passed\" ||\n value === \"failed\" ||\n value === \"unknown\" ||\n value === \"skipped\"\n );\n}\n\nfunction parseMethod(value: unknown): ObservedOutcomeMethod | undefined {\n if (typeof value !== \"string\" || value.trim() === \"\") return undefined;\n return value as ObservedOutcomeMethod;\n}\n\nfunction fromOutcomeObservedEvent(event: Extract<TraceEvent, { event: \"outcome_observed\" }>): ObservedOutcome {\n return {\n outcomeId: event.outcomeId,\n runId: event.runId,\n ...(event.parentId !== undefined ? { parentId: event.parentId } : {}),\n name: event.name,\n expectation: event.expectation,\n status: event.status,\n ...(event.method !== undefined ? { method: event.method } : {}),\n ...(event.actual !== undefined ? { actual: event.actual } : {}),\n ...(event.evidence !== undefined ? { evidence: event.evidence } : {}),\n observedAt: event.observedAt,\n };\n}\n\nfunction fromPersistedOutcome(event: PersistedInspectEvent): ObservedOutcome | undefined {\n if (event.kind !== \"OUTCOME\") return undefined;\n const attrs = event.attributes ?? {};\n const statusRaw = attrs[OUTCOME_ATTRIBUTE_STATUS_KEY];\n if (!isOutcomeStatus(statusRaw)) return undefined;\n const expectation =\n typeof attrs[OUTCOME_ATTRIBUTE_EXPECTATION_KEY] === \"string\"\n ? attrs[OUTCOME_ATTRIBUTE_EXPECTATION_KEY]\n : event.name;\n const observedAtRaw = attrs[OUTCOME_ATTRIBUTE_OBSERVED_AT_KEY];\n const observedAt =\n typeof observedAtRaw === \"string\"\n ? Date.parse(observedAtRaw)\n : typeof observedAtRaw === \"number\" && Number.isFinite(observedAtRaw)\n ? observedAtRaw\n : Date.parse(event.timestamp);\n return {\n outcomeId: event.eventId,\n runId: event.runId,\n ...(event.parentId !== undefined ? { parentId: event.parentId } : {}),\n name: event.name,\n expectation,\n status: statusRaw,\n ...(parseMethod(attrs[OUTCOME_ATTRIBUTE_METHOD_KEY]) !== undefined\n ? { method: parseMethod(attrs[OUTCOME_ATTRIBUTE_METHOD_KEY]) }\n : {}),\n ...(event.outputSummary !== undefined ? { actual: event.outputSummary } : {}),\n ...(attrs.evidence !== undefined ? { evidence: attrs.evidence } : {}),\n observedAt: Number.isFinite(observedAt) ? observedAt : Date.parse(event.timestamp),\n };\n}\n\nexport function extractOutcomesFromTraceEvents(events: readonly TraceEvent[]): ObservedOutcome[] {\n const out: ObservedOutcome[] = [];\n for (const event of events) {\n if (event.event === OUTCOME_LEGACY_EVENT) {\n out.push(fromOutcomeObservedEvent(event as Extract<TraceEvent, { event: \"outcome_observed\" }>));\n }\n }\n return out.sort((a, b) => a.observedAt - b.observedAt || a.name.localeCompare(b.name));\n}\n\nexport function extractOutcomesFromPersistedEvents(\n events: readonly PersistedInspectEvent[],\n): ObservedOutcome[] {\n const out: ObservedOutcome[] = [];\n for (const event of events) {\n const outcome = fromPersistedOutcome(event);\n if (outcome) out.push(outcome);\n }\n return out.sort((a, b) => a.observedAt - b.observedAt || a.name.localeCompare(b.name));\n}\n\nexport function summarizeObservedOutcomes(outcomes: readonly ObservedOutcome[]): ObservedOutcomeSummary {\n const summary: ObservedOutcomeSummary = {\n total: outcomes.length,\n passed: 0,\n failed: 0,\n unknown: 0,\n skipped: 0,\n outcomes: [...outcomes],\n };\n for (const outcome of outcomes) {\n summary[outcome.status] += 1;\n }\n return summary;\n}\n\nexport function outcomesMatchingStatus(\n outcomes: readonly ObservedOutcome[],\n statuses: readonly ObservedOutcomeStatus[],\n): ObservedOutcome[] {\n const set = new Set(statuses);\n return outcomes.filter((outcome) => set.has(outcome.status));\n}\n\nexport function parseObservationFilter(value: string | undefined): ObservedOutcomeStatus | undefined {\n if (value === undefined || value.trim() === \"\") return undefined;\n return parseObservedOutcomeStatus(value);\n}\n","import type { ObservedOutcome, ObservedOutcomeSummary } from \"./types.js\";\n\nfunction formatPayload(value: unknown): string {\n if (value === undefined) return \"\";\n try {\n return JSON.stringify(value);\n } catch {\n return String(value);\n }\n}\n\nexport function renderObservedOutcomesMarkdown(summary: ObservedOutcomeSummary): string {\n if (summary.total === 0) {\n return \"No observed outcomes recorded for this run.\";\n }\n const lines = [\n `Total: ${summary.total} (passed ${summary.passed}, failed ${summary.failed}, unknown ${summary.unknown}, skipped ${summary.skipped})`,\n \"\",\n \"| Name | Status | Expectation | Method |\",\n \"| --- | --- | --- | --- |\",\n ];\n for (const outcome of summary.outcomes) {\n lines.push(\n `| ${outcome.name} | ${outcome.status} | ${outcome.expectation.replace(/\\|/g, \"\\\\|\")} | ${outcome.method ?? \"-\"} |`,\n );\n }\n return lines.join(\"\\n\");\n}\n\nexport function renderObservedOutcomesText(summary: ObservedOutcomeSummary): string {\n if (summary.total === 0) {\n return \"No observed outcomes recorded for this run.\";\n }\n const lines = [\n `Observed outcomes: ${summary.total} (passed ${summary.passed}, failed ${summary.failed}, unknown ${summary.unknown}, skipped ${summary.skipped})`,\n ];\n for (const outcome of summary.outcomes) {\n const evidence = formatPayload(outcome.evidence);\n const suffix = evidence ? ` evidence=${evidence}` : \"\";\n lines.push(\n `- ${outcome.name} [${outcome.status}] ${outcome.expectation}${suffix}`,\n );\n }\n return lines.join(\"\\n\");\n}\n\nexport function renderObservedOutcomesHtml(summary: ObservedOutcomeSummary): string {\n if (summary.total === 0) {\n return \"<p>No observed outcomes recorded for this run.</p>\";\n }\n const rows = summary.outcomes\n .map((outcome: ObservedOutcome) => {\n const esc = (v: string) =>\n v.replaceAll(\"&\", \"&\").replaceAll(\"<\", \"<\").replaceAll(\">\", \">\");\n return `<tr><td>${esc(outcome.name)}</td><td>${esc(outcome.status)}</td><td>${esc(outcome.expectation)}</td><td>${esc(outcome.method ?? \"-\")}</td></tr>`;\n })\n .join(\"\");\n return `<p>Total: ${summary.total} (passed ${summary.passed}, failed ${summary.failed}, unknown ${summary.unknown}, skipped ${summary.skipped})</p><table><thead><tr><th>Name</th><th>Status</th><th>Expectation</th><th>Method</th></tr></thead><tbody>${rows}</tbody></table>`;\n}\n"]}
|
|
@@ -83,6 +83,8 @@ function isPersistedTokenUsage(value) {
|
|
|
83
83
|
if (!isOptionalNonNegativeNumber(value.output)) return false;
|
|
84
84
|
if (!isOptionalNonNegativeNumber(value.total)) return false;
|
|
85
85
|
if (!isOptionalNonNegativeNumber(value.cached)) return false;
|
|
86
|
+
if (!isOptionalNonNegativeNumber(value.cacheWrite)) return false;
|
|
87
|
+
if (!isOptionalNonNegativeNumber(value.reasoning)) return false;
|
|
86
88
|
return true;
|
|
87
89
|
}
|
|
88
90
|
function isPersistedTraceContext(value) {
|
|
@@ -444,5 +446,5 @@ function persistedInspectEventsToTraceEvents(events, options) {
|
|
|
444
446
|
}
|
|
445
447
|
|
|
446
448
|
export { isPersistedInspectEvent, isPersistedInspectEventV02, isPersistedInspectEventV10, persistedInspectEventToTraceEvents, persistedInspectEventsToTraceEvents };
|
|
447
|
-
//# sourceMappingURL=chunk-
|
|
448
|
-
//# sourceMappingURL=chunk-
|
|
449
|
+
//# sourceMappingURL=chunk-QJI52TH3.mjs.map
|
|
450
|
+
//# sourceMappingURL=chunk-QJI52TH3.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/types/persisted-inspect-event.ts","../src/persisted/to-trace-event.ts"],"names":[],"mappings":"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","file":"chunk-QJI52TH3.mjs","sourcesContent":["import type { AttributionConfidence, InspectKind } from \"./inspect-event.js\";\n\nexport type PersistedSchemaVersion = \"0.2\" | \"1.0\";\n\nexport type PersistedEventSourceType =\n | \"manual\"\n | \"json-log\"\n | \"log4js\"\n | \"adapter\"\n | \"ai-sdk\"\n | \"otel\";\n\nexport interface PersistedEventSource {\n type: PersistedEventSourceType;\n name?: string;\n version?: string;\n}\n\nexport type PersistedEventStatus = \"running\" | \"ok\" | \"error\" | \"unknown\";\n\nexport interface PersistedInspectError {\n name?: string;\n message: string;\n code?: string;\n}\n\nexport interface PersistedTokenUsage {\n input?: number;\n output?: number;\n total?: number;\n /** Cache-read tokens (informational; never added to total). */\n cached?: number;\n /** Cache-write / cache-creation tokens (informational; never added to total). */\n cacheWrite?: number;\n /** Reasoning / thinking tokens when providers report them separately. */\n reasoning?: number;\n}\n\nexport interface PersistedTraceContext {\n traceId?: string;\n spanId?: string;\n parentSpanId?: string;\n}\n\nexport interface PersistedInspectEventBase {\n eventId: string;\n runId: string;\n parentId?: string;\n kind: InspectKind;\n name: string;\n status?: PersistedEventStatus;\n timestamp: string;\n startedAt?: string;\n endedAt?: string;\n durationMs?: number;\n confidence: AttributionConfidence;\n source: PersistedEventSource;\n attributes?: Record<string, unknown>;\n inputSummary?: unknown;\n outputSummary?: unknown;\n error?: PersistedInspectError;\n tokenUsage?: PersistedTokenUsage;\n trace?: PersistedTraceContext;\n}\n\nexport interface PersistedInspectEventV02 extends PersistedInspectEventBase {\n schemaVersion: \"0.2\";\n}\n\nexport interface PersistedInspectEventV10 extends PersistedInspectEventBase {\n schemaVersion: \"1.0\";\n [key: string]: unknown;\n}\n\nexport type PersistedInspectEvent =\n | PersistedInspectEventV02\n | PersistedInspectEventV10;\n\nconst INSPECT_KINDS: readonly InspectKind[] = [\n \"RUN\",\n \"AGENT\",\n \"LLM\",\n \"TOOL\",\n \"CHAIN\",\n \"RETRIEVER\",\n \"DECISION\",\n \"RESULT\",\n \"ERROR\",\n \"LOGIC\",\n \"LOG\",\n \"OUTCOME\",\n];\n\nconst ATTRIBUTION_CONFIDENCES: readonly AttributionConfidence[] = [\n \"explicit\",\n \"correlated\",\n \"heuristic\",\n \"unknown\",\n];\n\nconst PERSISTED_EVENT_SOURCE_TYPES: readonly PersistedEventSourceType[] = [\n \"manual\",\n \"json-log\",\n \"log4js\",\n \"adapter\",\n \"ai-sdk\",\n \"otel\",\n];\n\nconst PERSISTED_EVENT_STATUSES: readonly PersistedEventStatus[] = [\n \"running\",\n \"ok\",\n \"error\",\n \"unknown\",\n];\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n return typeof value === \"object\" && value !== null && !Array.isArray(value);\n}\n\nfunction isString(value: unknown): value is string {\n return typeof value === \"string\";\n}\n\nfunction isNonEmptyString(value: unknown): value is string {\n return typeof value === \"string\" && value.length > 0;\n}\n\nfunction isOptionalString(value: unknown): boolean {\n return value === undefined || isString(value);\n}\n\nfunction isNonNegativeNumber(value: unknown): value is number {\n return typeof value === \"number\" && Number.isFinite(value) && value >= 0;\n}\n\nfunction isOptionalNonNegativeNumber(value: unknown): boolean {\n return value === undefined || isNonNegativeNumber(value);\n}\n\nfunction isInspectKind(value: unknown): value is InspectKind {\n return (\n typeof value === \"string\" &&\n (INSPECT_KINDS as readonly string[]).includes(value)\n );\n}\n\nfunction isAttributionConfidence(value: unknown): value is AttributionConfidence {\n return (\n typeof value === \"string\" &&\n (ATTRIBUTION_CONFIDENCES as readonly string[]).includes(value)\n );\n}\n\nfunction isPersistedEventSourceType(\n value: unknown,\n): value is PersistedEventSourceType {\n return (\n typeof value === \"string\" &&\n (PERSISTED_EVENT_SOURCE_TYPES as readonly string[]).includes(value)\n );\n}\n\nfunction isPersistedEventStatus(value: unknown): value is PersistedEventStatus {\n return (\n typeof value === \"string\" &&\n (PERSISTED_EVENT_STATUSES as readonly string[]).includes(value)\n );\n}\n\nfunction isPersistedEventSource(value: unknown): value is PersistedEventSource {\n if (!isRecord(value)) return false;\n if (!isPersistedEventSourceType(value.type)) return false;\n if (!isOptionalString(value.name)) return false;\n if (!isOptionalString(value.version)) return false;\n return true;\n}\n\nfunction isPersistedInspectError(value: unknown): value is PersistedInspectError {\n if (!isRecord(value)) return false;\n if (!isNonEmptyString(value.message)) return false;\n if (!isOptionalString(value.name)) return false;\n if (!isOptionalString(value.code)) return false;\n return true;\n}\n\nfunction isPersistedTokenUsage(value: unknown): value is PersistedTokenUsage {\n if (!isRecord(value)) return false;\n if (!isOptionalNonNegativeNumber(value.input)) return false;\n if (!isOptionalNonNegativeNumber(value.output)) return false;\n if (!isOptionalNonNegativeNumber(value.total)) return false;\n if (!isOptionalNonNegativeNumber(value.cached)) return false;\n if (!isOptionalNonNegativeNumber(value.cacheWrite)) return false;\n if (!isOptionalNonNegativeNumber(value.reasoning)) return false;\n return true;\n}\n\nfunction isPersistedTraceContext(value: unknown): value is PersistedTraceContext {\n if (!isRecord(value)) return false;\n if (!isOptionalString(value.traceId)) return false;\n if (!isOptionalString(value.spanId)) return false;\n if (!isOptionalString(value.parentSpanId)) return false;\n return true;\n}\n\n/**\n * Runtime guard for a v0.2 or v1.0 {@link PersistedInspectEvent} JSON object.\n *\n * Timestamp fields (`timestamp`, `startedAt`, `endedAt`) are validated as\n * non-empty strings only — stricter ISO-8601 parsing may be added later.\n */\nexport function isPersistedInspectEvent(\n value: unknown,\n): value is PersistedInspectEvent {\n if (!isRecord(value)) return false;\n if (value.schemaVersion !== \"0.2\" && value.schemaVersion !== \"1.0\") {\n return false;\n }\n\n if (!isNonEmptyString(value.eventId)) return false;\n if (!isNonEmptyString(value.runId)) return false;\n if (!isInspectKind(value.kind)) return false;\n if (!isNonEmptyString(value.name)) return false;\n // Non-empty string required; ISO format not validated in this PR.\n if (!isNonEmptyString(value.timestamp)) return false;\n if (!isAttributionConfidence(value.confidence)) return false;\n if (!isPersistedEventSource(value.source)) return false;\n\n if (value.parentId !== undefined && !isNonEmptyString(value.parentId)) {\n return false;\n }\n if (value.status !== undefined && !isPersistedEventStatus(value.status)) {\n return false;\n }\n if (!isOptionalString(value.startedAt)) return false;\n if (!isOptionalString(value.endedAt)) return false;\n if (value.durationMs !== undefined && !isNonNegativeNumber(value.durationMs)) {\n return false;\n }\n if (value.attributes !== undefined && !isRecord(value.attributes)) {\n return false;\n }\n if (value.error !== undefined && !isPersistedInspectError(value.error)) {\n return false;\n }\n if (value.tokenUsage !== undefined && !isPersistedTokenUsage(value.tokenUsage)) {\n return false;\n }\n if (value.trace !== undefined && !isPersistedTraceContext(value.trace)) {\n return false;\n }\n\n return true;\n}\n\nexport function isPersistedInspectEventV02(\n value: unknown,\n): value is PersistedInspectEventV02 {\n return isPersistedInspectEvent(value) && value.schemaVersion === \"0.2\";\n}\n\nexport function isPersistedInspectEventV10(\n value: unknown,\n): value is PersistedInspectEventV10 {\n return isPersistedInspectEvent(value) && value.schemaVersion === \"1.0\";\n}\n","import type { InspectKind } from \"../types/inspect-event.js\";\nimport type {\n ErrorInfo,\n RunStatus,\n StepMetadata,\n StepStatus,\n StepType,\n TraceEvent,\n} from \"../types.js\";\nimport {\n isPersistedInspectEvent,\n type PersistedInspectEvent,\n type PersistedTokenUsage,\n} from \"../types/persisted-inspect-event.js\";\n\nexport interface PersistedToTraceEventOptions {\n /**\n * Stable index within the source event list.\n * Used for deterministic timestamps when only one instant is known.\n */\n eventIndex?: number;\n}\n\nfunction parseIsoToMs(iso: string): number {\n const parsed = Date.parse(iso);\n return Number.isFinite(parsed) ? parsed : 0;\n}\n\nfunction mapInspectKindToStepType(kind: InspectKind): StepType {\n switch (kind) {\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\nfunction mapPersistedStatusToStepStatus(\n status: PersistedInspectEvent[\"status\"],\n): StepStatus | undefined {\n switch (status) {\n case \"ok\":\n return \"success\";\n case \"error\":\n return \"error\";\n case \"running\":\n return \"running\";\n default:\n return undefined;\n }\n}\n\nfunction mapPersistedStatusToRunStatus(\n status: PersistedInspectEvent[\"status\"],\n): RunStatus | undefined {\n switch (status) {\n case \"ok\":\n return \"success\";\n case \"error\":\n return \"error\";\n case \"running\":\n return \"running\";\n default:\n return undefined;\n }\n}\n\nfunction mapPersistedError(\n error: PersistedInspectEvent[\"error\"],\n attributes: Record<string, unknown> | undefined,\n): ErrorInfo | undefined {\n if (!error?.message) return undefined;\n const out: ErrorInfo = { message: error.message };\n const stack =\n typeof attributes?.errorStack === \"string\" &&\n attributes.errorStack.length > 0\n ? attributes.errorStack\n : undefined;\n if (stack) {\n out.stack = stack;\n }\n return out;\n}\n\nfunction mapTokenUsageToMetadata(\n tokenUsage: PersistedTokenUsage | undefined,\n attributes: Record<string, unknown> | undefined,\n): StepMetadata | undefined {\n const metadata: StepMetadata = {};\n if (attributes?.metadata && typeof attributes.metadata === \"object\") {\n Object.assign(metadata, attributes.metadata as Record<string, unknown>);\n }\n if (tokenUsage) {\n metadata.tokens = {\n ...(tokenUsage.input !== undefined ? { input: tokenUsage.input } : {}),\n ...(tokenUsage.output !== undefined ? { output: tokenUsage.output } : {}),\n ...(tokenUsage.total !== undefined ? { total: tokenUsage.total } : {}),\n ...(tokenUsage.cached !== undefined ? { cached: tokenUsage.cached } : {}),\n };\n }\n return Object.keys(metadata).length > 0 ? metadata : undefined;\n}\n\nfunction pickRunMetadata(\n attributes: Record<string, unknown> | undefined,\n): Record<string, unknown> | undefined {\n if (!attributes) return undefined;\n const metadata =\n attributes.metadata && typeof attributes.metadata === \"object\"\n ? { ...(attributes.metadata as Record<string, unknown>) }\n : {};\n for (const key of [\n \"correlationId\",\n \"requestId\",\n \"decisionId\",\n \"groupId\",\n ] as const) {\n const value = attributes[key];\n if (typeof value === \"string\" && value.trim() !== \"\") {\n metadata[key] = value;\n }\n }\n return Object.keys(metadata).length > 0 ? metadata : undefined;\n}\n\nfunction resolveStepId(event: PersistedInspectEvent): string {\n const attrs = event.attributes;\n if (attrs && typeof attrs.stepId === \"string\" && attrs.stepId.trim() !== \"\") {\n return attrs.stepId;\n }\n return event.eventId;\n}\n\nfunction resolveStepType(event: PersistedInspectEvent): StepType {\n const attrs = event.attributes;\n if (attrs && typeof attrs.stepType === \"string\") {\n const t = attrs.stepType;\n if (\n t === \"run\" ||\n t === \"llm\" ||\n t === \"tool\" ||\n t === \"decision\" ||\n t === \"logic\" ||\n t === \"state\" ||\n t === \"custom\"\n ) {\n return t;\n }\n }\n return mapInspectKindToStepType(event.kind);\n}\n\nfunction resolveTimes(event: PersistedInspectEvent): {\n timestamp: number;\n startTime: number;\n endTime: number;\n} {\n const timestamp = parseIsoToMs(event.timestamp);\n const startTime =\n event.startedAt !== undefined ? parseIsoToMs(event.startedAt) : timestamp;\n let endTime =\n event.endedAt !== undefined ? parseIsoToMs(event.endedAt) : timestamp;\n if (\n event.durationMs !== undefined &&\n Number.isFinite(event.durationMs) &&\n event.durationMs >= 0 &&\n event.endedAt === undefined\n ) {\n endTime = startTime + event.durationMs;\n }\n return { timestamp, startTime, endTime };\n}\n\nfunction fromLegacyRunStarted(event: PersistedInspectEvent): TraceEvent {\n const { timestamp, startTime } = resolveTimes(event);\n const out: Extract<TraceEvent, { event: \"run_started\" }> = {\n schemaVersion: \"0.1\",\n event: \"run_started\",\n timestamp,\n runId: event.runId,\n name: event.name,\n startTime,\n };\n const metadata = pickRunMetadata(event.attributes);\n if (metadata) out.metadata = metadata;\n return out;\n}\n\nfunction fromLegacyRunCompleted(event: PersistedInspectEvent): TraceEvent {\n const { timestamp, endTime } = resolveTimes(event);\n const status = mapPersistedStatusToRunStatus(event.status) ?? \"success\";\n const out: Extract<TraceEvent, { event: \"run_completed\" }> = {\n schemaVersion: \"0.1\",\n event: \"run_completed\",\n timestamp,\n runId: event.runId,\n status: status === \"running\" ? \"success\" : status,\n endTime,\n durationMs: event.durationMs ?? Math.max(0, endTime - timestamp),\n };\n const error = mapPersistedError(event.error, event.attributes);\n if (error) out.error = error;\n return out;\n}\n\nfunction fromLegacyStepStarted(event: PersistedInspectEvent): TraceEvent {\n const { timestamp, startTime } = resolveTimes(event);\n const out: Extract<TraceEvent, { event: \"step_started\" }> = {\n schemaVersion: \"0.1\",\n event: \"step_started\",\n timestamp,\n runId: event.runId,\n stepId: resolveStepId(event),\n name: event.name,\n type: resolveStepType(event),\n startTime,\n };\n if (event.parentId !== undefined) out.parentId = event.parentId;\n const metadata = mapTokenUsageToMetadata(event.tokenUsage, event.attributes);\n if (metadata) out.metadata = metadata;\n return out;\n}\n\nfunction fromLegacyStepCompleted(event: PersistedInspectEvent): TraceEvent {\n const { timestamp, endTime } = resolveTimes(event);\n const status = mapPersistedStatusToStepStatus(event.status) ?? \"success\";\n const out: Extract<TraceEvent, { event: \"step_completed\" }> = {\n schemaVersion: \"0.1\",\n event: \"step_completed\",\n timestamp,\n runId: event.runId,\n stepId: resolveStepId(event),\n status: status === \"running\" ? \"success\" : status,\n endTime,\n durationMs: event.durationMs ?? Math.max(0, endTime - timestamp),\n };\n const error = mapPersistedError(event.error, event.attributes);\n if (error) out.error = error;\n return out;\n}\n\nfunction fromLegacyOutcomeObserved(event: PersistedInspectEvent): TraceEvent {\n const attrs = event.attributes ?? {};\n const observedAtRaw = attrs.observedAt;\n const observedAt =\n typeof observedAtRaw === \"string\"\n ? Date.parse(observedAtRaw)\n : typeof observedAtRaw === \"number\" && Number.isFinite(observedAtRaw)\n ? observedAtRaw\n : resolveTimes(event).timestamp;\n const status = attrs.outcomeStatus;\n const out: Extract<TraceEvent, { event: \"outcome_observed\" }> = {\n schemaVersion: \"0.1\",\n event: \"outcome_observed\",\n timestamp: observedAt,\n runId: event.runId,\n outcomeId:\n typeof attrs.outcomeId === \"string\" ? attrs.outcomeId : event.eventId,\n name: event.name,\n expectation:\n typeof attrs.expectation === \"string\" ? attrs.expectation : event.name,\n status:\n status === \"passed\" ||\n status === \"failed\" ||\n status === \"unknown\" ||\n status === \"skipped\"\n ? status\n : \"unknown\",\n observedAt,\n };\n if (event.parentId !== undefined) out.parentId = event.parentId;\n if (typeof attrs.method === \"string\") out.method = attrs.method as never;\n if (attrs.actual !== undefined) out.actual = attrs.actual;\n if (event.outputSummary !== undefined) out.actual = event.outputSummary;\n if (attrs.evidence !== undefined) out.evidence = attrs.evidence;\n return out;\n}\n\nfunction fromNativeOutcome(event: PersistedInspectEvent): TraceEvent[] {\n return [fromLegacyOutcomeObserved(event)];\n}\n\nfunction fromNativeRun(event: PersistedInspectEvent): TraceEvent[] {\n const { timestamp, startTime, endTime } = resolveTimes(event);\n const runStatus = mapPersistedStatusToRunStatus(event.status);\n const out: TraceEvent[] = [];\n\n if (runStatus === \"running\" || event.startedAt !== undefined) {\n const started: Extract<TraceEvent, { event: \"run_started\" }> = {\n schemaVersion: \"0.1\",\n event: \"run_started\",\n timestamp,\n runId: event.runId,\n name: event.name,\n startTime,\n };\n const metadata = pickRunMetadata(event.attributes);\n if (metadata) started.metadata = metadata;\n out.push(started);\n }\n\n if (runStatus === \"success\" || runStatus === \"error\" || event.endedAt !== undefined) {\n const completed: Extract<TraceEvent, { event: \"run_completed\" }> = {\n schemaVersion: \"0.1\",\n event: \"run_completed\",\n timestamp,\n runId: event.runId,\n status: runStatus === \"error\" ? \"error\" : \"success\",\n endTime,\n durationMs: event.durationMs ?? Math.max(0, endTime - startTime),\n };\n const error = mapPersistedError(event.error, event.attributes);\n if (error) completed.error = error;\n out.push(completed);\n }\n\n if (out.length === 0) {\n out.push(fromLegacyRunStarted(event));\n }\n\n return out;\n}\n\nfunction fromNativeStep(event: PersistedInspectEvent): TraceEvent[] {\n const { timestamp, startTime, endTime } = resolveTimes(event);\n const stepStatus = mapPersistedStatusToStepStatus(event.status);\n const stepId = resolveStepId(event);\n const out: TraceEvent[] = [];\n\n const shouldEmitStarted =\n stepStatus === \"running\" ||\n event.startedAt !== undefined ||\n stepStatus === \"success\" ||\n stepStatus === \"error\";\n\n if (shouldEmitStarted) {\n const started: Extract<TraceEvent, { event: \"step_started\" }> = {\n schemaVersion: \"0.1\",\n event: \"step_started\",\n timestamp,\n runId: event.runId,\n stepId,\n name: event.name,\n type: resolveStepType(event),\n startTime,\n };\n if (event.parentId !== undefined) started.parentId = event.parentId;\n const metadata = mapTokenUsageToMetadata(event.tokenUsage, event.attributes);\n if (metadata) started.metadata = metadata;\n out.push(started);\n }\n\n if (\n stepStatus === \"success\" ||\n stepStatus === \"error\" ||\n event.endedAt !== undefined ||\n event.durationMs !== undefined\n ) {\n const completed: Extract<TraceEvent, { event: \"step_completed\" }> = {\n schemaVersion: \"0.1\",\n event: \"step_completed\",\n timestamp,\n runId: event.runId,\n stepId,\n status: stepStatus === \"error\" ? \"error\" : \"success\",\n endTime,\n durationMs: event.durationMs ?? Math.max(0, endTime - startTime),\n };\n const error = mapPersistedError(event.error, event.attributes);\n if (error) completed.error = error;\n out.push(completed);\n }\n\n if (out.length === 0) {\n out.push(fromLegacyStepStarted(event));\n }\n\n return out;\n}\n\n/**\n * Maps one v0.2 {@link PersistedInspectEvent} to zero or more v0.1 {@link TraceEvent} rows\n * for inspection commands. Does not mutate `event`.\n */\nexport function persistedInspectEventToTraceEvents(\n event: PersistedInspectEvent,\n): TraceEvent[] {\n if (!isPersistedInspectEvent(event)) {\n throw new Error(\"Invalid PersistedInspectEvent: failed isPersistedInspectEvent\");\n }\n\n const legacyEvent = event.attributes?.legacyEvent;\n if (legacyEvent === \"run_started\") return [fromLegacyRunStarted(event)];\n if (legacyEvent === \"run_completed\") return [fromLegacyRunCompleted(event)];\n if (legacyEvent === \"step_started\") return [fromLegacyStepStarted(event)];\n if (legacyEvent === \"step_completed\") return [fromLegacyStepCompleted(event)];\n if (legacyEvent === \"outcome_observed\") return [fromLegacyOutcomeObserved(event)];\n\n if (event.kind === \"RUN\") {\n return fromNativeRun(event);\n }\n\n if (event.kind === \"OUTCOME\") {\n return fromNativeOutcome(event);\n }\n\n return fromNativeStep(event);\n}\n\n/**\n * Maps persisted v0.2 events to v0.1 trace events for inspection.\n */\nexport function persistedInspectEventsToTraceEvents(\n events: readonly PersistedInspectEvent[],\n options?: PersistedToTraceEventOptions,\n): TraceEvent[] {\n const out: TraceEvent[] = [];\n events.forEach((event, index) => {\n const rows = persistedInspectEventToTraceEvents(event);\n if (rows.length === 0 && options?.eventIndex !== undefined) {\n void options.eventIndex;\n void index;\n }\n out.push(...rows);\n });\n return out;\n}\n"]}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { isPersistedInspectEvent, persistedInspectEventToTraceEvents } from './chunk-
|
|
1
|
+
import { isPersistedInspectEvent, persistedInspectEventToTraceEvents } from './chunk-QJI52TH3.mjs';
|
|
2
2
|
import { nanoid } from './chunk-7TGZLWEE.mjs';
|
|
3
3
|
import { mkdir } from 'fs/promises';
|
|
4
4
|
import os from 'os';
|
|
@@ -308,5 +308,5 @@ function unknownTraceFormatMessage() {
|
|
|
308
308
|
}
|
|
309
309
|
|
|
310
310
|
export { DEFAULT_TRACE_DIR_NAME, FALLBACK_TRACE_DIR, MAX_NAME_LENGTH, RUNS_DIR_NAME, createRunId, createStepId, ensureTraceDir, formatDuration2 as formatDuration, formatError, formatTimestamp, getDefaultTraceDir, getTraceFilePath, isStepStatus, isStepType, isTraceEvent, parseDuration, parseTraceJsonl, truncateName, unknownTraceFormatMessage, warn };
|
|
311
|
-
//# sourceMappingURL=chunk-
|
|
312
|
-
//# sourceMappingURL=chunk-
|
|
311
|
+
//# sourceMappingURL=chunk-SJ3C5RIS.mjs.map
|
|
312
|
+
//# sourceMappingURL=chunk-SJ3C5RIS.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/types.ts","../src/utils/duration.ts","../src/utils.ts","../src/read-trace.ts"],"names":["formatDuration","isRecord","format"],"mappings":"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","file":"chunk-SJ3C5RIS.mjs","sourcesContent":["import type { RedactionRule } from \"./types/log-config.js\";\n\n/**\n * Discriminator for what kind of work a {@link Step} represents.\n * `\"decision\"` captures agent branching/choices; other values cover runs, LLM calls, tools, and user-defined steps.\n */\nexport type StepType =\n | \"run\"\n | \"llm\"\n | \"tool\"\n | \"decision\"\n | \"logic\"\n | \"state\"\n | \"custom\";\n\n/** Lifecycle state of a single {@link Step}. */\nexport type StepStatus = \"running\" | \"success\" | \"error\";\n\n/** Lifecycle state of an entire {@link Run}. */\nexport type RunStatus = \"running\" | \"success\" | \"error\";\n\n/** Structured error attached to a run or step when status is `\"error\"`. */\nexport interface ErrorInfo {\n message: string;\n stack?: string;\n}\n\n/**\n * Optional token counts for a step (e.g. LLM usage).\n * Reserved for future roadmap; MVP does not compute or persist token usage.\n */\nexport interface TokenMetadata {\n input?: number;\n output?: number;\n total?: number;\n /** Cache-read tokens (informational; never added to total). */\n cached?: number;\n /** Cache-write / cache-creation tokens (informational). */\n cacheWrite?: number;\n /** Reasoning / thinking tokens when reported separately. */\n reasoning?: number;\n}\n\n/** Arbitrary structured fields for a step; safe extensions use string keys. */\nexport interface StepMetadata {\n model?: string;\n toolName?: string;\n tokens?: TokenMetadata;\n retryCount?: number;\n [key: string]: unknown;\n}\n\n/**\n * One traced agent run (root of an execution tree).\n * MVP intentionally omits `input` / `output` on the run to limit PII, secrets, and serialization risk.\n */\nexport interface Run {\n id: string;\n name: string;\n status: RunStatus;\n startTime: number;\n endTime?: number;\n durationMs?: number;\n error?: ErrorInfo;\n metadata?: Record<string, unknown>;\n}\n\n/**\n * One node in the execution tree under a {@link Run}.\n * MVP intentionally omits `input` / `output`; capture/redaction may come in a later version.\n */\nexport interface Step {\n id: string;\n runId: string;\n parentId?: string;\n name: string;\n type: StepType;\n status: StepStatus;\n startTime: number;\n endTime?: number;\n durationMs?: number;\n error?: ErrorInfo;\n metadata?: StepMetadata;\n}\n\n/** Version of the JSONL trace line schema consumed by AgentInspect tooling. */\nexport type TraceSchemaVersion = \"0.1\";\n\n/**\n * Status for lightweight trace metadata extraction.\n * `\"unknown\"` means the file contained valid events but a run status could not be determined safely.\n */\nexport type TraceMetadataStatus = \"success\" | \"error\" | \"running\" | \"unknown\";\n\nexport interface TraceMetadata {\n runId: string;\n name?: string;\n status: TraceMetadataStatus;\n startedAt?: number;\n endedAt?: number;\n durationMs?: number;\n eventCount: number;\n filePath: string;\n fileSize: number;\n createdAt: Date;\n}\n\nexport interface RunSummary {\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 /** Present only when every token-bearing step has a supplied or derivable total. */\n total?: number;\n /** Sum of supplied cached counts; cached is not added to total. */\n cached?: number;\n /** Sum of cache-write / cache-creation counts; not added to total. */\n cacheWrite?: number;\n /** Sum of reasoning token counts; not added to total. */\n reasoning?: number;\n };\n}\n\n/** Fields shared by every persisted trace event line. */\nexport interface TraceEventBase {\n schemaVersion: TraceSchemaVersion;\n event: string;\n timestamp: number;\n}\n\n/** Emitted when a run begins. */\nexport interface RunStartedEvent extends TraceEventBase {\n event: \"run_started\";\n runId: string;\n name: string;\n startTime: number;\n metadata?: Record<string, unknown>;\n}\n\n/** Emitted when a run finishes successfully or with an error. */\nexport interface RunCompletedEvent extends TraceEventBase {\n event: \"run_completed\";\n runId: string;\n status: \"success\" | \"error\";\n endTime: number;\n durationMs: number;\n error?: ErrorInfo;\n}\n\n/** Emitted when a step begins (including nested steps under `parentId`). */\nexport interface StepStartedEvent extends TraceEventBase {\n event: \"step_started\";\n runId: string;\n stepId: string;\n parentId?: string;\n name: string;\n type: StepType;\n startTime: number;\n metadata?: StepMetadata;\n}\n\n/**\n * Emitted when a step finishes (success or failure).\n * Failures use `status: \"error\"` and optional {@link ErrorInfo}; there is no separate `step_failed` event in MVP.\n */\nexport interface StepCompletedEvent extends TraceEventBase {\n event: \"step_completed\";\n runId: string;\n stepId: string;\n status: \"success\" | \"error\";\n endTime: number;\n durationMs: number;\n error?: ErrorInfo;\n}\n\n/** Emitted when an external-world outcome is observed (v4.4+). */\nexport interface OutcomeObservedEvent extends TraceEventBase {\n event: \"outcome_observed\";\n runId: string;\n outcomeId: string;\n parentId?: string;\n name: string;\n expectation: string;\n status: \"passed\" | \"failed\" | \"unknown\" | \"skipped\";\n method?:\n | \"dom\"\n | \"accessibility\"\n | \"snapshot\"\n | \"network\"\n | \"storage\"\n | \"filesystem\"\n | \"database\"\n | \"queue\"\n | \"custom\";\n actual?: unknown;\n evidence?: unknown;\n observedAt: number;\n}\n\n/** Discriminated union of all MVP trace events written as JSONL lines. */\nexport type TraceEvent =\n | RunStartedEvent\n | RunCompletedEvent\n | StepStartedEvent\n | StepCompletedEvent\n | OutcomeObservedEvent;\n\n/** Named redaction presets for trace writing and share-safe exports (v1.3.0+). */\nexport type RedactionProfile = \"local\" | \"share\" | \"strict\";\n\n/** Optional correlation fields for grouping and cross-run tracing (v1.3.0+). */\nexport interface TraceCorrelationMetadata {\n correlationId?: string;\n requestId?: string;\n decisionId?: string;\n groupId?: string;\n}\n\n/** Options for `inspectRun()` and `maybeInspectRun()`. */\nexport interface InspectRunOptions extends TraceCorrelationMetadata {\n traceDir?: string;\n silent?: boolean;\n metadata?: Record<string, unknown>;\n /**\n * When `false`, runs `fn` with no trace file, no execution context, and no terminal output.\n * Omitted or `true` preserves default tracing behavior.\n */\n enabled?: boolean;\n /**\n * Redact sensitive metadata keys before writing JSONL. Default `true` (conservative keys).\n * Pass `false` to persist metadata as-is (explicit opt-out).\n */\n redact?: boolean | { rules?: RedactionRule[] };\n /**\n * Redaction preset for trace metadata. Default `local` (same keys as default redaction).\n * `share` and `strict` add extra key-based redaction and tighter string bounds.\n * Ignored when `redact: false`.\n */\n redactionProfile?: RedactionProfile;\n /** Max UTF-8 bytes for a serialized trace event line. Default 65536. */\n maxEventBytes?: number;\n /** Max length for string metadata values (non-preview keys). Default 2000. */\n maxMetadataValueLength?: number;\n /** Max length for preview-like metadata keys (contains `preview`). Default 500. */\n maxPreviewLength?: number;\n}\n\n/** Options passed when opening a logical step (implemented in a later step). */\nexport interface StepOptions {\n type?: StepType;\n metadata?: StepMetadata;\n}\n\n/** Options for `observe()` — same surface as {@link InspectRunOptions} in MVP. */\nexport type ObserveOptions = InspectRunOptions;\n\n/**\n * Resolved settings for the active run while tracing is enabled.\n * Populated by runtime code in a later step; defined here for `context.ts`.\n */\nexport interface ExecutionContext {\n runId: string;\n runName: string;\n traceDir: string;\n silent: boolean;\n metadata?: Record<string, unknown>;\n}\n\n/** Stack position of the step currently executing (used by future context tracking). */\nexport interface ActiveStepContext {\n stepId: string;\n parentId?: string;\n depth: number;\n}\n\nconst STEP_TYPES: readonly StepType[] = [\n \"run\",\n \"llm\",\n \"tool\",\n \"decision\",\n \"logic\",\n \"state\",\n \"custom\",\n] as const;\n\nconst STEP_STATUSES: readonly StepStatus[] = [\n \"running\",\n \"success\",\n \"error\",\n] as const;\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n return typeof value === \"object\" && value !== null && !Array.isArray(value);\n}\n\n/** Returns true if `value` is one of the MVP {@link StepType} literals. */\nexport function isStepType(value: unknown): value is StepType {\n return (\n typeof value === \"string\" &&\n (STEP_TYPES as readonly string[]).includes(value)\n );\n}\n\n/** Returns true if `value` is one of the MVP {@link StepStatus} literals. */\nexport function isStepStatus(value: unknown): value is StepStatus {\n return (\n typeof value === \"string\" &&\n (STEP_STATUSES as readonly string[]).includes(value)\n );\n}\n\n/**\n * Narrowing guard for a {@link TraceEvent} object with required MVP fields.\n * Does not deeply validate optional `metadata` shapes.\n */\nexport function isTraceEvent(value: unknown): value is TraceEvent {\n if (!isRecord(value)) return false;\n if (value.schemaVersion !== \"0.1\") return false;\n if (typeof value.timestamp !== \"number\") return false;\n if (typeof value.event !== \"string\") return false;\n\n switch (value.event) {\n case \"run_started\": {\n return (\n typeof value.runId === \"string\" &&\n typeof value.name === \"string\" &&\n typeof value.startTime === \"number\"\n );\n }\n case \"run_completed\": {\n return (\n typeof value.runId === \"string\" &&\n (value.status === \"success\" || value.status === \"error\") &&\n typeof value.endTime === \"number\" &&\n typeof value.durationMs === \"number\"\n );\n }\n case \"step_started\": {\n return (\n typeof value.runId === \"string\" &&\n typeof value.stepId === \"string\" &&\n typeof value.name === \"string\" &&\n isStepType(value.type) &&\n typeof value.startTime === \"number\"\n );\n }\n case \"step_completed\": {\n return (\n typeof value.runId === \"string\" &&\n typeof value.stepId === \"string\" &&\n (value.status === \"success\" || value.status === \"error\") &&\n typeof value.endTime === \"number\" &&\n typeof value.durationMs === \"number\"\n );\n }\n case \"outcome_observed\": {\n return (\n typeof value.runId === \"string\" &&\n typeof value.outcomeId === \"string\" &&\n typeof value.name === \"string\" &&\n typeof value.expectation === \"string\" &&\n (value.status === \"passed\" ||\n value.status === \"failed\" ||\n value.status === \"unknown\" ||\n value.status === \"skipped\") &&\n typeof value.observedAt === \"number\"\n );\n }\n default:\n return false;\n }\n}\n","/**\n * v0.2 shared duration utilities.\n *\n * `parseDuration` is used for filters such as \"since\" / \"older-than\".\n * `formatDuration` is used for compact display in CLI and summaries.\n */\n\nexport function parseDuration(duration: string): number {\n const raw = typeof duration === \"string\" ? duration.trim() : \"\";\n const match = raw.match(/^(\\d+)(ms|[smhd])$/);\n if (!match) {\n throw new Error(\n `Invalid duration format: ${duration}. Use a positive integer followed by ms, s, m, h, or d (e.g. 500ms, 30s, 5m, 2h, 7d).`,\n );\n }\n\n const amount = Number.parseInt(match[1], 10);\n const unit = match[2];\n\n if (!Number.isFinite(amount) || amount <= 0) {\n throw new Error(\n `Invalid duration amount: ${duration}. Amount must be a positive integer.`,\n );\n }\n\n switch (unit) {\n case \"ms\":\n return amount;\n case \"s\":\n return amount * 1000;\n case \"m\":\n return amount * 60 * 1000;\n case \"h\":\n return amount * 60 * 60 * 1000;\n case \"d\":\n return amount * 24 * 60 * 60 * 1000;\n default: {\n // Should be unreachable due to regex.\n throw new Error(`Unknown duration unit: ${unit}`);\n }\n }\n}\n\nexport function formatDuration(ms: number): string {\n if (!Number.isFinite(ms)) {\n return \"0ms\";\n }\n if (ms < 0) {\n throw new Error(`formatDuration: ms must be non-negative (got ${ms})`);\n }\n if (ms < 1000) {\n return `${Math.floor(ms)}ms`;\n }\n if (ms < 60_000) {\n return `${(ms / 1000).toFixed(2)}s`;\n }\n if (ms < 3_600_000) {\n return `${(ms / 60_000).toFixed(1)}m`;\n }\n return `${(ms / 3_600_000).toFixed(1)}h`;\n}\n\n","import { mkdir } from \"node:fs/promises\";\nimport os from \"node:os\";\nimport path from \"node:path\";\n\nimport { nanoid } from \"nanoid\";\n\nimport type { ErrorInfo } from \"./types.js\";\nimport { formatDuration as formatDurationV2 } from \"./utils/duration.js\";\n\n/** Default folder under the user home for AgentInspect data. */\nexport const DEFAULT_TRACE_DIR_NAME = \".agent-inspect\";\n\n/** Subfolder where JSONL run traces are stored. */\nexport const RUNS_DIR_NAME = \"runs\";\n\n/** Writable trace root when the default home path cannot be used. */\nexport const FALLBACK_TRACE_DIR = path.join(\n os.tmpdir(),\n \"agent-inspect\",\n RUNS_DIR_NAME,\n);\n\n/** Maximum display length for run/step names before truncation. */\nexport const MAX_NAME_LENGTH = 100;\n\n/** Returns `run_` + a 10-character nanoid segment. */\nexport function createRunId(): string {\n return `run_${nanoid(10)}`;\n}\n\n/** Returns `step_` + a 10-character nanoid segment. */\nexport function createStepId(): string {\n return `step_${nanoid(10)}`;\n}\n\n/** Formats a duration for CLI display (v0.2 rules). */\nexport function formatDuration(ms: number): string {\n return formatDurationV2(ms);\n}\n\n/**\n * Formats a Unix timestamp (ms) as local `YYYY-MM-DD HH:mm:ss`.\n * Invalid values yield `\"Invalid date\"` (no throw).\n */\nexport function formatTimestamp(timestamp: number): string {\n if (!Number.isFinite(timestamp)) {\n return \"Invalid date\";\n }\n const d = new Date(timestamp);\n if (Number.isNaN(d.getTime())) {\n return \"Invalid date\";\n }\n const y = d.getFullYear();\n const mo = String(d.getMonth() + 1).padStart(2, \"0\");\n const day = String(d.getDate()).padStart(2, \"0\");\n const h = String(d.getHours()).padStart(2, \"0\");\n const min = String(d.getMinutes()).padStart(2, \"0\");\n const s = String(d.getSeconds()).padStart(2, \"0\");\n return `${y}-${mo}-${day} ${h}:${min}:${s}`;\n}\n\n/**\n * Default directory for trace files: `~/DEFAULT_TRACE_DIR_NAME/RUNS_DIR_NAME`.\n * Falls back to {@link FALLBACK_TRACE_DIR} when home cannot be resolved.\n */\nexport function getDefaultTraceDir(): string {\n const envDir = process.env.AGENT_INSPECT_TRACE_DIR;\n if (typeof envDir === \"string\" && envDir.trim() !== \"\") {\n return envDir.trim();\n }\n try {\n const home = os.homedir();\n if (typeof home !== \"string\" || home.trim() === \"\") {\n return FALLBACK_TRACE_DIR;\n }\n return path.join(home, DEFAULT_TRACE_DIR_NAME, RUNS_DIR_NAME);\n } catch {\n return FALLBACK_TRACE_DIR;\n }\n}\n\n/**\n * Full path to the JSONL trace file for a run.\n * `runId` is passed through `path.basename` to avoid traversal; empty ids become `run_unknown`.\n */\nexport function getTraceFilePath(runId: string, traceDir?: string): string {\n const baseDir = traceDir ?? getDefaultTraceDir();\n let safeId =\n typeof runId === \"string\" && runId.trim() !== \"\" ? runId.trim() : \"run_unknown\";\n safeId = path.basename(safeId);\n if (safeId === \"\" || safeId === \".\" || safeId === \"..\") {\n safeId = \"run_unknown\";\n }\n return path.join(baseDir, `${safeId}.jsonl`);\n}\n\n/**\n * Ensures a trace directory exists (recursive). Tries {@link FALLBACK_TRACE_DIR} on failure.\n * Returns the directory path that callers should prefer: primary, fallback, or original if both mkdir attempts fail.\n * Emits concise `[AgentInspect]` warnings on failure; never throws.\n */\nexport async function ensureTraceDir(traceDir: string): Promise<string> {\n const primary = path.resolve(traceDir);\n try {\n await mkdir(primary, { recursive: true });\n return primary;\n } catch {\n warn(`Failed to create trace directory: ${primary}`);\n const fallback = path.resolve(FALLBACK_TRACE_DIR);\n try {\n await mkdir(fallback, { recursive: true });\n return fallback;\n } catch {\n warn(`Failed to create fallback trace directory: ${fallback}`);\n return primary;\n }\n }\n}\n\n/**\n * Normalizes any thrown/caught value into {@link ErrorInfo}.\n * Never throws (circular structures and non-JSON values fall back to a generic message).\n */\nexport function formatError(error: unknown): ErrorInfo {\n if (error instanceof Error) {\n const out: ErrorInfo = { message: error.message };\n if (typeof error.stack === \"string\" && error.stack.length > 0) {\n out.stack = error.stack;\n }\n return out;\n }\n if (typeof error === \"string\") {\n return { message: error };\n }\n if (error === null) {\n return { message: \"Unknown error: null\" };\n }\n if (error === undefined) {\n return { message: \"Unknown error: undefined\" };\n }\n if (\n typeof error === \"number\" ||\n typeof error === \"boolean\" ||\n typeof error === \"bigint\"\n ) {\n return { message: String(error) };\n }\n if (typeof error === \"object\") {\n try {\n return { message: JSON.stringify(error) };\n } catch {\n return { message: \"Unknown error\" };\n }\n }\n return { message: \"Unknown error\" };\n}\n\n/**\n * Truncates a display name to `maxLength`, appending `\"...\"` when shortened.\n * Empty or non-string input becomes `\"unnamed\"`.\n */\nexport function truncateName(name: string, maxLength = MAX_NAME_LENGTH): string {\n if (typeof name !== \"string\" || name.trim() === \"\") {\n return \"unnamed\";\n }\n const trimmed = name.trim();\n if (trimmed.length <= maxLength) {\n return trimmed;\n }\n const ellipsis = \"...\";\n const head = Math.max(0, maxLength - ellipsis.length);\n return `${trimmed.slice(0, head)}${ellipsis}`;\n}\n\n/**\n * Instrumentation-only warning to stderr. Not a general-purpose logger.\n * Optional `error` is summarized via {@link formatError} (message only).\n */\nexport function warn(message: string, error?: unknown): void {\n const base = `[AgentInspect] ${message}`;\n if (error === undefined) {\n console.warn(base);\n return;\n }\n console.warn(`${base}: ${formatError(error).message}`);\n}\n","import { persistedInspectEventToTraceEvents } from \"./persisted/to-trace-event.js\";\nimport { isPersistedInspectEvent } from \"./types/persisted-inspect-event.js\";\nimport type { PersistedInspectEvent } from \"./types/persisted-inspect-event.js\";\nimport { isTraceEvent } from \"./types.js\";\nimport type { TraceEvent } from \"./types.js\";\nimport { warn } from \"./utils.js\";\n\nexport type TraceJsonlFormat = \"0.1\" | \"0.2\" | \"1.0\" | \"mixed\" | \"empty\";\n\nexport type ParsedTraceJsonlRow =\n | { format: \"0.1\"; event: TraceEvent; sourceLine: number }\n | { format: \"0.2\"; event: PersistedInspectEvent; sourceLine: number }\n | { format: \"1.0\"; event: PersistedInspectEvent; sourceLine: number };\n\nexport interface ParseTraceJsonlResult {\n format: TraceJsonlFormat;\n /** Count of valid source JSONL rows before any one-to-many normalization. */\n sourceEventCount: number;\n events: TraceEvent[];\n persisted: PersistedInspectEvent[];\n /** Valid source rows in JSONL order, before cross-version normalization. */\n rows: ParsedTraceJsonlRow[];\n}\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n return typeof value === \"object\" && value !== null && !Array.isArray(value);\n}\n\nfunction detectLineFormat(parsed: unknown): \"0.1\" | \"0.2\" | \"1.0\" | \"unknown\" {\n if (!isRecord(parsed)) return \"unknown\";\n if (parsed.schemaVersion === \"0.1\") return \"0.1\";\n if (parsed.schemaVersion === \"0.2\") return \"0.2\";\n if (parsed.schemaVersion === \"1.0\") return \"1.0\";\n return \"unknown\";\n}\n\nexport interface ParseTraceJsonlOptions {\n validate?: (value: unknown) => value is TraceEvent;\n /** Emit parse warnings through the standard AgentInspect warning channel (default true). */\n warnings?: boolean;\n}\n\n/**\n * Parses JSONL content into normalized v0.1 {@link TraceEvent} rows.\n * Accepts homogenous v0.1, v0.2, or v1.0 files; mixed files are converted with a warning.\n */\nexport function parseTraceJsonl(\n raw: string,\n options: ParseTraceJsonlOptions = {},\n): ParseTraceJsonlResult {\n const validate = options.validate ?? isTraceEvent;\n const emitWarning = (message: string): void => {\n if (options.warnings !== false) warn(message);\n };\n const persisted: PersistedInspectEvent[] = [];\n const traceEvents: TraceEvent[] = [];\n const rows: ParsedTraceJsonlRow[] = [];\n let sourceEventCount = 0;\n let saw01 = false;\n let saw02 = false;\n let saw10 = false;\n let lineNumber = 0;\n\n for (const line of raw.split(/\\r?\\n/)) {\n lineNumber += 1;\n const trimmed = line.trim();\n if (trimmed === \"\") continue;\n\n let parsed: unknown;\n try {\n parsed = JSON.parse(trimmed) as unknown;\n } catch {\n emitWarning(\"Skipped invalid JSON line in trace file\");\n continue;\n }\n\n const format = detectLineFormat(parsed);\n if (format === \"0.1\") {\n saw01 = true;\n if (validate(parsed)) {\n sourceEventCount += 1;\n traceEvents.push(parsed);\n rows.push({ format: \"0.1\", event: parsed, sourceLine: lineNumber });\n } else {\n emitWarning(\"Skipped invalid trace event line in trace file\");\n }\n continue;\n }\n\n if (format === \"0.2\" || format === \"1.0\") {\n if (format === \"0.2\") saw02 = true;\n else saw10 = true;\n if (isPersistedInspectEvent(parsed)) {\n sourceEventCount += 1;\n persisted.push(parsed);\n rows.push({ format, event: parsed, sourceLine: lineNumber });\n traceEvents.push(...persistedInspectEventToTraceEvents(parsed));\n } else {\n emitWarning(\"Skipped invalid persisted inspect event line in trace file\");\n }\n continue;\n }\n\n emitWarning(\"Skipped trace line with unknown schemaVersion\");\n }\n\n const seenFormats = [saw01, saw02, saw10].filter(Boolean).length;\n if (seenFormats > 1) {\n emitWarning(\n \"Trace file mixes AgentInspect schemaVersion rows; normalizing all rows\",\n );\n }\n\n let format: TraceJsonlFormat = \"empty\";\n if (seenFormats > 1) format = \"mixed\";\n else if (saw01) format = \"0.1\";\n else if (saw02) format = \"0.2\";\n else if (saw10) format = \"1.0\";\n\n return { format, sourceEventCount, events: traceEvents, persisted, rows };\n}\n\n/**\n * Returns a user-facing message when a trace file uses an unsupported schema version.\n */\nexport function unknownTraceFormatMessage(): string {\n return (\n \"Unsupported trace format. Expected schemaVersion 0.1 (TraceEvent), 0.2 (PersistedInspectEvent), or 1.0 (PersistedInspectEvent).\"\n );\n}\n"]}
|
|
@@ -1,8 +1,8 @@
|
|
|
1
|
-
import { normalizeObserveOutcomeInput } from './chunk-
|
|
1
|
+
import { normalizeObserveOutcomeInput } from './chunk-MVRZ7JBH.mjs';
|
|
2
2
|
import { source_default } from './chunk-BT7CATSD.mjs';
|
|
3
|
-
import { resolveTraceSafetyOptions, preparePersistedInspectEventForWrite, initializeTraceFile, writeTraceEvent, prepareTraceEventForDisk } from './chunk-
|
|
3
|
+
import { resolveTraceSafetyOptions, preparePersistedInspectEventForWrite, initializeTraceFile, writeTraceEvent, prepareTraceEventForDisk } from './chunk-3B24355S.mjs';
|
|
4
4
|
import { extractCorrelationMetadata, buildRunStartedMetadata } from './chunk-S4YWKV4G.mjs';
|
|
5
|
-
import { truncateName, formatDuration, getDefaultTraceDir, createRunId, formatError, getTraceFilePath, createStepId, warn } from './chunk-
|
|
5
|
+
import { truncateName, formatDuration, getDefaultTraceDir, createRunId, formatError, getTraceFilePath, createStepId, warn } from './chunk-SJ3C5RIS.mjs';
|
|
6
6
|
import { AsyncLocalStorage } from 'async_hooks';
|
|
7
7
|
import { readdir, stat } from 'fs/promises';
|
|
8
8
|
import path from 'path';
|
|
@@ -941,5 +941,5 @@ async function maybeInspectRun(name, fn, options) {
|
|
|
941
941
|
}
|
|
942
942
|
|
|
943
943
|
export { MAX_TERMINAL_DEPTH, MAX_TERMINAL_NAME_LENGTH, TERMINAL_INDENT, TraceDirectory, createInspector, createInspectorRuntime, formatTerminalName, getCurrentContext, getCurrentCorrelationMetadata, getCurrentDepth, getCurrentRunId, getCurrentRunName, getCurrentStepId, getIndent, getParentStepId, getTraceDirFromContext, getTraceSafetyFromContext, hasActiveContext, inspectRun, isAgentInspectEnabled, isSilentContext, maybeInspectRun, printError, printFailedAt, printRunComplete, printRunStart, printStepComplete, printStepStart, renderErrorLine, renderRunSummary, renderStepLine, resolveTraceDir, runWithContext, runWithStepContext };
|
|
944
|
-
//# sourceMappingURL=chunk-
|
|
945
|
-
//# sourceMappingURL=chunk-
|
|
944
|
+
//# sourceMappingURL=chunk-TIGBAVED.mjs.map
|
|
945
|
+
//# sourceMappingURL=chunk-TIGBAVED.mjs.map
|