@agent-inspect/openai-agents 6.29.1 → 6.29.2

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/dist/index.cjs CHANGED
@@ -62,6 +62,44 @@ function summarizeError(error) {
62
62
  if (!error?.message) return void 0;
63
63
  return { message: error.message };
64
64
  }
65
+ function readFiniteNonNegative(value) {
66
+ return typeof value === "number" && Number.isFinite(value) && value >= 0 ? value : void 0;
67
+ }
68
+ function applyCachedAndReasoningFromDetails(tokenUsage, detailRecord) {
69
+ if (tokenUsage.cached === void 0) {
70
+ const cached = readFiniteNonNegative(
71
+ detailRecord.cached_tokens ?? detailRecord.cached_input_tokens
72
+ );
73
+ if (cached !== void 0) {
74
+ tokenUsage.cached = cached;
75
+ }
76
+ }
77
+ if (tokenUsage.cacheWrite === void 0) {
78
+ const cacheWrite = readFiniteNonNegative(
79
+ detailRecord.cache_creation_tokens ?? detailRecord.cached_creation_tokens ?? detailRecord.cache_write_tokens
80
+ );
81
+ if (cacheWrite !== void 0) {
82
+ tokenUsage.cacheWrite = cacheWrite;
83
+ }
84
+ }
85
+ if (tokenUsage.reasoning !== void 0) {
86
+ return;
87
+ }
88
+ const reasoning = detailRecord.reasoning_tokens ?? detailRecord.output_tokens_details;
89
+ const asNumber = readFiniteNonNegative(reasoning);
90
+ if (asNumber !== void 0) {
91
+ tokenUsage.reasoning = asNumber;
92
+ return;
93
+ }
94
+ if (typeof reasoning === "object" && reasoning !== null && !Array.isArray(reasoning)) {
95
+ const nested = readFiniteNonNegative(
96
+ reasoning.reasoning_tokens
97
+ );
98
+ if (nested !== void 0) {
99
+ tokenUsage.reasoning = nested;
100
+ }
101
+ }
102
+ }
65
103
  function summarizeUsage(usage) {
66
104
  if (typeof usage !== "object" || usage === null || Array.isArray(usage)) {
67
105
  return void 0;
@@ -77,31 +115,23 @@ function summarizeUsage(usage) {
77
115
  if (tokenUsage.input !== void 0 || tokenUsage.output !== void 0) {
78
116
  tokenUsage.total = (tokenUsage.input ?? 0) + (tokenUsage.output ?? 0);
79
117
  }
118
+ const inputDetails = record.input_tokens_details;
119
+ if (typeof inputDetails === "object" && inputDetails !== null && !Array.isArray(inputDetails)) {
120
+ applyCachedAndReasoningFromDetails(
121
+ tokenUsage,
122
+ inputDetails
123
+ );
124
+ }
80
125
  const details = record.details;
81
126
  if (typeof details === "object" && details !== null && !Array.isArray(details)) {
82
- const detailRecord = details;
83
- const cached = detailRecord.cached_tokens ?? detailRecord.cached_input_tokens;
84
- if (typeof cached === "number" && Number.isFinite(cached) && cached >= 0) {
85
- tokenUsage.cached = cached;
86
- }
87
- const cacheWrite = detailRecord.cache_creation_tokens ?? detailRecord.cached_creation_tokens ?? detailRecord.cache_write_tokens;
88
- if (typeof cacheWrite === "number" && Number.isFinite(cacheWrite) && cacheWrite >= 0) {
89
- tokenUsage.cacheWrite = cacheWrite;
90
- }
91
- const reasoning = detailRecord.reasoning_tokens ?? detailRecord.output_tokens_details;
92
- if (typeof reasoning === "number" && Number.isFinite(reasoning) && reasoning >= 0) {
93
- tokenUsage.reasoning = reasoning;
94
- } else if (typeof reasoning === "object" && reasoning !== null && !Array.isArray(reasoning)) {
95
- const nested = reasoning.reasoning_tokens;
96
- if (typeof nested === "number" && Number.isFinite(nested) && nested >= 0) {
97
- tokenUsage.reasoning = nested;
98
- }
99
- }
127
+ applyCachedAndReasoningFromDetails(tokenUsage, details);
100
128
  }
101
129
  const outputDetails = record.output_tokens_details;
102
130
  if (typeof outputDetails === "object" && outputDetails !== null && !Array.isArray(outputDetails)) {
103
- const nested = outputDetails.reasoning_tokens;
104
- if (typeof nested === "number" && Number.isFinite(nested) && nested >= 0 && tokenUsage.reasoning === void 0) {
131
+ const nested = readFiniteNonNegative(
132
+ outputDetails.reasoning_tokens
133
+ );
134
+ if (nested !== void 0 && tokenUsage.reasoning === void 0) {
105
135
  tokenUsage.reasoning = nested;
106
136
  }
107
137
  }
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/index.ts"],"names":["createAdapterPreviewCapture","fileWriter"],"mappings":"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","file":"index.cjs","sourcesContent":["import type {\n Span,\n SpanData,\n SpanError,\n Trace,\n TracingProcessor,\n} from \"@openai/agents\";\nimport { createAdapterPreviewCapture } from \"agent-inspect/advanced\";\nimport type {\n AdapterCaptureDiagnostics,\n AdapterDiagnosticListener,\n AdapterPreviewCapture,\n RedactionProfile,\n} from \"agent-inspect/advanced\";\nimport type {\n PersistedInspectError,\n PersistedInspectEvent,\n PersistedTokenUsage,\n} from \"agent-inspect/persisted\";\nimport { fileWriter } from \"agent-inspect/writers\";\nimport type { TraceWriter, TraceWriterStats } from \"agent-inspect/writers\";\n\n/**\n * Experimental capture mode for the OpenAI Agents JS adapter.\n *\n * `metadata-only` is the default. `preview` persists bounded, redacted span\n * input/output preview attributes through the shared adapter capture helper.\n *\n * @experimental This package is part of the framework adapter train.\n */\nexport type AgentInspectOpenAiAgentsCaptureMode = \"metadata-only\" | \"preview\";\n\n/**\n * Options for the experimental OpenAI Agents JS tracing processor.\n *\n * @experimental Install processors with `setTraceProcessors([...])`\n * replacement behavior for local-only tracing. Do not use `addTraceProcessor()`\n * as the default path because it preserves the SDK's default exporter.\n */\nexport interface AgentInspectOpenAiAgentsOptions {\n /**\n * Explicit local writer for persisted v0.2 AgentInspect events.\n */\n writer?: TraceWriter;\n\n /**\n * Convenience local trace directory for writer-owned persistence.\n */\n traceDir?: string;\n\n /**\n * Optional workflow name overriding the SDK trace name.\n */\n workflowName?: string;\n\n /**\n * Capture policy. Defaults to metadata-only.\n *\n * @experimental `preview` persists bounded, redacted span input/output\n * previews. It never persists full span content.\n */\n capture?: AgentInspectOpenAiAgentsCaptureMode;\n\n /**\n * Redaction profile applied to preview attributes before persistence.\n * `share` and `strict` also cap `maxPreviewChars`.\n *\n * @experimental Effective only when `capture: \"preview\"`.\n */\n redactionProfile?: RedactionProfile;\n\n /**\n * Upper bound for each serialized preview attribute. Defaults to 200.\n *\n * @experimental Effective only when `capture: \"preview\"`.\n */\n maxPreviewChars?: number;\n\n /**\n * Receives bounded capture diagnostics such as\n * `AI_CAPTURE_FIELD_UNAVAILABLE`. Listener failures are isolated.\n *\n * @experimental\n */\n onDiagnostic?: AdapterDiagnosticListener;\n}\n\nexport interface AgentInspectOpenAiAgentsDiagnostics {\n writeFailures: number;\n lifecycleWarnings: number;\n flushFailures: number;\n shutdownFailures: number;\n lastError?: string;\n lastWarning?: string;\n runtimeMappingImplemented: true;\n /** Shared preview-capture counters (`@experimental`). */\n capture: AdapterCaptureDiagnostics;\n}\n\nexport interface AgentInspectOpenAiAgentsProcessor extends TracingProcessor {\n /**\n * Documents the local-only replacement install mode for this adapter.\n *\n * `addTraceProcessor()` remains an advanced user-owned choice outside this\n * package because it can preserve existing/default exporters.\n */\n readonly installMode: \"setTraceProcessors\";\n\n /**\n * This processor never installs itself globally and performs no network I/O.\n */\n readonly localOnly: true;\n\n getDiagnostics(): AgentInspectOpenAiAgentsDiagnostics;\n getWriterStats(): TraceWriterStats | undefined;\n}\n\ntype ActiveTrace = {\n eventId: string;\n startedAt: string;\n name: string;\n};\n\ntype ActiveSpan = {\n eventId: string;\n runId: string;\n parentId?: string;\n startedAt: string;\n name: string;\n kind: PersistedInspectEvent[\"kind\"];\n};\n\ntype SpanDataType = SpanData[\"type\"];\n\nconst OPENAI_AGENTS_SOURCE = {\n type: \"adapter\",\n name: \"@agent-inspect/openai-agents\",\n version: \"experimental\",\n} as const;\n\nfunction nowIso(): string {\n return new Date().toISOString();\n}\n\nfunction normalizeError(error: unknown): string {\n if (error instanceof Error && error.message.trim() !== \"\") {\n return error.message;\n }\n if (typeof error === \"string\" && error.trim() !== \"\") {\n return error;\n }\n return \"Unknown OpenAI Agents processor error\";\n}\n\nfunction durationMs(startedAt: string, endedAt: string): number | undefined {\n const started = Date.parse(startedAt);\n const ended = Date.parse(endedAt);\n if (!Number.isFinite(started) || !Number.isFinite(ended)) return undefined;\n return Math.max(0, ended - started);\n}\n\nfunction countRecordKeys(value: unknown): number | undefined {\n if (typeof value !== \"object\" || value === null || Array.isArray(value)) {\n return undefined;\n }\n return Object.keys(value).length;\n}\n\nfunction normalizeMaxPreviewChars(value: unknown): number | undefined {\n if (typeof value !== \"number\" || !Number.isFinite(value) || value < 0) {\n return undefined;\n }\n return Math.floor(value);\n}\n\nfunction summarizeUnknown(value: unknown): Record<string, unknown> {\n if (value === null) return { type: \"null\" };\n if (Array.isArray(value)) return { type: \"array\", itemCount: value.length };\n\n if (typeof value === \"object\") {\n return { type: \"object\", keyCount: countRecordKeys(value) ?? 0 };\n }\n if (typeof value === \"string\") {\n return { type: \"string\", length: value.length };\n }\n const valueType = typeof value;\n if (valueType === \"number\" || valueType === \"boolean\" || valueType === \"bigint\") {\n return { type: valueType };\n }\n if (valueType === \"undefined\") return { type: \"undefined\" };\n return { type: \"unknown\" };\n}\n\nfunction summarizeOptionalUnknown(value: unknown): Record<string, unknown> | undefined {\n return value === undefined ? undefined : summarizeUnknown(value);\n}\n\nfunction summarizeError(error: SpanError | null | undefined): PersistedInspectError | undefined {\n if (!error?.message) return undefined;\n return { message: error.message };\n}\n\nfunction summarizeUsage(usage: unknown): PersistedTokenUsage | undefined {\n if (typeof usage !== \"object\" || usage === null || Array.isArray(usage)) {\n return undefined;\n }\n\n const record = usage as Record<string, unknown>;\n const tokenUsage: PersistedTokenUsage = {};\n if (typeof record.input_tokens === \"number\" && Number.isFinite(record.input_tokens)) {\n tokenUsage.input = record.input_tokens;\n }\n if (typeof record.output_tokens === \"number\" && Number.isFinite(record.output_tokens)) {\n tokenUsage.output = record.output_tokens;\n }\n if (tokenUsage.input !== undefined || tokenUsage.output !== undefined) {\n tokenUsage.total = (tokenUsage.input ?? 0) + (tokenUsage.output ?? 0);\n }\n\n const details = record.details;\n if (typeof details === \"object\" && details !== null && !Array.isArray(details)) {\n const detailRecord = details as Record<string, unknown>;\n const cached = detailRecord.cached_tokens ?? detailRecord.cached_input_tokens;\n if (typeof cached === \"number\" && Number.isFinite(cached) && cached >= 0) {\n tokenUsage.cached = cached;\n }\n const cacheWrite =\n detailRecord.cache_creation_tokens ??\n detailRecord.cached_creation_tokens ??\n detailRecord.cache_write_tokens;\n if (\n typeof cacheWrite === \"number\" &&\n Number.isFinite(cacheWrite) &&\n cacheWrite >= 0\n ) {\n tokenUsage.cacheWrite = cacheWrite;\n }\n const reasoning =\n detailRecord.reasoning_tokens ?? detailRecord.output_tokens_details;\n if (typeof reasoning === \"number\" && Number.isFinite(reasoning) && reasoning >= 0) {\n tokenUsage.reasoning = reasoning;\n } else if (\n typeof reasoning === \"object\" &&\n reasoning !== null &&\n !Array.isArray(reasoning)\n ) {\n const nested = (reasoning as Record<string, unknown>).reasoning_tokens;\n if (typeof nested === \"number\" && Number.isFinite(nested) && nested >= 0) {\n tokenUsage.reasoning = nested;\n }\n }\n }\n\n const outputDetails = record.output_tokens_details;\n if (\n typeof outputDetails === \"object\" &&\n outputDetails !== null &&\n !Array.isArray(outputDetails)\n ) {\n const nested = (outputDetails as Record<string, unknown>).reasoning_tokens;\n if (\n typeof nested === \"number\" &&\n Number.isFinite(nested) &&\n nested >= 0 &&\n tokenUsage.reasoning === undefined\n ) {\n tokenUsage.reasoning = nested;\n }\n }\n\n return Object.keys(tokenUsage).length > 0 ? tokenUsage : undefined;\n}\n\nfunction spanKind(type: SpanDataType): PersistedInspectEvent[\"kind\"] {\n switch (type) {\n case \"agent\":\n return \"AGENT\";\n case \"generation\":\n case \"response\":\n case \"transcription\":\n case \"speech\":\n return \"LLM\";\n case \"function\":\n case \"mcp_tools\":\n return \"TOOL\";\n case \"handoff\":\n case \"guardrail\":\n return \"DECISION\";\n case \"custom\":\n case \"speech_group\":\n return \"LOGIC\";\n default:\n return \"LOGIC\";\n }\n}\n\nfunction spanName(data: SpanData): string {\n switch (data.type) {\n case \"agent\":\n case \"function\":\n case \"custom\":\n case \"guardrail\":\n return data.name;\n case \"generation\":\n return data.model ? `generation:${data.model}` : \"generation\";\n case \"response\":\n return data.response_id ? `response:${data.response_id}` : \"response\";\n case \"handoff\":\n return data.to_agent ? `handoff:${data.to_agent}` : \"handoff\";\n case \"mcp_tools\":\n return data.server ? `mcp-tools:${data.server}` : \"mcp-tools\";\n case \"transcription\":\n return data.model ? `transcription:${data.model}` : \"transcription\";\n case \"speech\":\n return data.model ? `speech:${data.model}` : \"speech\";\n case \"speech_group\":\n return \"speech-group\";\n default:\n return \"openai-agents-span\";\n }\n}\n\nfunction commonSpanAttributes(span: Span<SpanData>): Record<string, unknown> {\n return {\n legacyEvent: \"step_started\",\n stepId: span.spanId,\n stepType: mapSpanTypeToStepType(span.spanData.type),\n spanType: span.spanData.type,\n traceId: span.traceId,\n spanId: span.spanId,\n parentSpanId: span.parentId ?? undefined,\n traceMetadataKeyCount: countRecordKeys(span.traceMetadata),\n };\n}\n\nfunction specificSpanAttributes(data: SpanData): Record<string, unknown> {\n switch (data.type) {\n case \"agent\":\n return {\n agentName: data.name,\n handoffCount: data.handoffs?.length ?? 0,\n handoffNames: data.handoffs,\n toolCount: data.tools?.length ?? 0,\n toolNames: data.tools,\n outputType: data.output_type,\n };\n case \"function\":\n return {\n toolName: data.name,\n hasInput: data.input !== undefined,\n hasOutput: data.output !== undefined,\n inputSummary: summarizeUnknown(data.input),\n outputSummary: summarizeUnknown(data.output),\n mcpDataSummary: summarizeOptionalUnknown(data.mcp_data),\n };\n case \"generation\":\n return {\n model: data.model,\n modelConfigKeyCount: countRecordKeys(data.model_config),\n inputSummary: summarizeOptionalUnknown(data.input),\n outputSummary: summarizeOptionalUnknown(data.output),\n usageDetailsKeyCount: countRecordKeys(data.usage?.details),\n };\n case \"response\":\n return {\n responseId: data.response_id,\n inputSummary: summarizeOptionalUnknown(data._input),\n responseSummary: summarizeOptionalUnknown(data._response),\n };\n case \"handoff\":\n return {\n fromAgent: data.from_agent,\n toAgent: data.to_agent,\n };\n case \"custom\":\n return {\n customName: data.name,\n dataSummary: summarizeUnknown(data.data),\n };\n case \"guardrail\":\n return {\n guardrailName: data.name,\n triggered: data.triggered,\n };\n case \"mcp_tools\":\n return {\n server: data.server,\n toolCount: data.result?.length ?? 0,\n toolNames: data.result,\n };\n case \"transcription\":\n return {\n model: data.model,\n inputFormat: data.input.format,\n inputSummary: summarizeUnknown(data.input.data),\n outputSummary: summarizeOptionalUnknown(data.output),\n modelConfigKeyCount: countRecordKeys(data.model_config),\n };\n case \"speech\":\n return {\n model: data.model,\n inputSummary: summarizeOptionalUnknown(data.input),\n outputFormat: data.output.format,\n outputSummary: summarizeUnknown(data.output.data),\n modelConfigKeyCount: countRecordKeys(data.model_config),\n };\n case \"speech_group\":\n return {\n inputSummary: summarizeOptionalUnknown(data.input),\n };\n default:\n return {};\n }\n}\n\nfunction mapSpanTypeToStepType(type: SpanDataType): string {\n switch (type) {\n case \"generation\":\n case \"response\":\n case \"transcription\":\n case \"speech\":\n return \"llm\";\n case \"function\":\n case \"mcp_tools\":\n return \"tool\";\n case \"handoff\":\n case \"guardrail\":\n return \"decision\";\n case \"agent\":\n return \"logic\";\n case \"custom\":\n case \"speech_group\":\n return \"custom\";\n default:\n return \"logic\";\n }\n}\n\nfunction spanInputSummary(data: SpanData): unknown {\n switch (data.type) {\n case \"generation\":\n return summarizeOptionalUnknown(data.input);\n case \"function\":\n return summarizeUnknown(data.input);\n case \"response\":\n return summarizeOptionalUnknown(data._input);\n case \"custom\":\n return summarizeUnknown(data.data);\n case \"transcription\":\n return { format: data.input.format, ...summarizeUnknown(data.input.data) };\n case \"speech\":\n case \"speech_group\":\n return summarizeOptionalUnknown(data.input);\n default:\n return undefined;\n }\n}\n\nfunction spanOutputSummary(data: SpanData): unknown {\n switch (data.type) {\n case \"generation\":\n return summarizeOptionalUnknown(data.output);\n case \"function\":\n return summarizeUnknown(data.output);\n case \"response\":\n return summarizeOptionalUnknown(data._response);\n case \"guardrail\":\n return { triggered: data.triggered };\n case \"mcp_tools\":\n return { toolCount: data.result?.length ?? 0 };\n case \"transcription\":\n return summarizeOptionalUnknown(data.output);\n case \"speech\":\n return { format: data.output.format, ...summarizeUnknown(data.output.data) };\n default:\n return undefined;\n }\n}\n\n/**\n * Raw span fields eligible for bounded preview capture, keyed by the logical\n * preview name. Span types without a payload concept return `{}` so preview\n * mode does not report false \"field unavailable\" diagnostics for them.\n */\nfunction spanPreviewSources(\n data: SpanData,\n phase: \"start\" | \"end\",\n): Record<string, unknown> {\n const withPhase = (\n input: unknown,\n output: unknown,\n ): Record<string, unknown> =>\n phase === \"start\" ? { input } : { input, output };\n\n switch (data.type) {\n case \"generation\":\n return withPhase(data.input, data.output);\n case \"function\":\n return withPhase(data.input, data.output);\n case \"response\":\n return withPhase(data._input, data._response);\n case \"transcription\":\n return withPhase(data.input.data, data.output);\n case \"speech\":\n return withPhase(data.input, data.output.data);\n case \"custom\":\n return { input: data.data };\n case \"speech_group\":\n return { input: data.input };\n default:\n return {};\n }\n}\n\nfunction traceEventId(traceId: string): string {\n return `openai_agents_trace:${traceId}`;\n}\n\nfunction spanEventId(spanId: string): string {\n return `openai_agents_span:${spanId}`;\n}\n\nclass AgentInspectOpenAiAgentsTracingProcessor implements AgentInspectOpenAiAgentsProcessor {\n readonly installMode = \"setTraceProcessors\" as const;\n readonly localOnly = true as const;\n\n private readonly writer: TraceWriter | undefined;\n private readonly requestedCapture: AgentInspectOpenAiAgentsCaptureMode;\n private readonly preview: AdapterPreviewCapture;\n private readonly effectiveCapture: AgentInspectOpenAiAgentsCaptureMode;\n private readonly diagnostics: Omit<\n AgentInspectOpenAiAgentsDiagnostics,\n \"capture\"\n > = {\n writeFailures: 0,\n lifecycleWarnings: 0,\n flushFailures: 0,\n shutdownFailures: 0,\n runtimeMappingImplemented: true,\n };\n private readonly activeTraces = new Map<string, ActiveTrace>();\n private readonly activeSpans = new Map<string, ActiveSpan>();\n private closed = false;\n\n constructor(private readonly options: AgentInspectOpenAiAgentsOptions) {\n this.requestedCapture = options.capture ?? \"metadata-only\";\n this.preview = createAdapterPreviewCapture({\n capture: this.requestedCapture,\n redactionProfile: options.redactionProfile,\n maxPreviewChars: options.maxPreviewChars,\n onDiagnostic: options.onDiagnostic,\n });\n this.effectiveCapture = this.preview.capture;\n this.writer = options.writer ?? (options.traceDir ? fileWriter({ dir: options.traceDir }) : undefined);\n for (const key of [\n \"options\",\n \"writer\",\n \"requestedCapture\",\n \"preview\",\n \"effectiveCapture\",\n \"diagnostics\",\n \"activeTraces\",\n \"activeSpans\",\n \"closed\",\n ] as const) {\n Object.defineProperty(this, key, { enumerable: false });\n }\n this.recordCaptureOptionWarnings();\n }\n\n start(): void {\n // Local writer-backed processor has no export loop to start.\n }\n\n async onTraceStart(trace: Trace): Promise<void> {\n await this.handleLifecycle(\"onTraceStart\", async () => {\n if (this.closed) {\n this.recordLifecycleWarning(\"onTraceStart ignored because processor is shut down.\");\n return;\n }\n\n const startedAt = nowIso();\n const name = this.options.workflowName ?? trace.name ?? \"openai-agents-run\";\n const eventId = traceEventId(trace.traceId);\n this.activeTraces.set(trace.traceId, { eventId, startedAt, name });\n\n await this.write({\n schemaVersion: \"0.2\",\n eventId,\n runId: trace.traceId,\n kind: \"RUN\",\n name,\n status: \"running\",\n timestamp: startedAt,\n startedAt,\n confidence: \"explicit\",\n source: OPENAI_AGENTS_SOURCE,\n attributes: {\n legacyEvent: \"run_started\",\n installMode: this.installMode,\n capture: this.effectiveCapture,\n requestedCapture:\n this.requestedCapture === this.effectiveCapture\n ? undefined\n : this.requestedCapture,\n previewCaptureSupported: true,\n // Preview rows report the effective bound/profile, which the\n // `share` and `strict` profiles can lower below the request.\n redactionProfile: this.preview.previewEnabled\n ? this.preview.redactionProfile\n : this.options.redactionProfile,\n maxPreviewChars: this.preview.previewEnabled\n ? this.preview.maxPreviewChars\n : normalizeMaxPreviewChars(this.options.maxPreviewChars),\n groupId: trace.groupId ?? undefined,\n metadataKeyCount: countRecordKeys(trace.metadata),\n },\n trace: {\n traceId: trace.traceId,\n },\n });\n });\n }\n\n async onTraceEnd(trace: Trace): Promise<void> {\n await this.handleLifecycle(\"onTraceEnd\", async () => {\n if (this.closed) {\n this.recordLifecycleWarning(\"onTraceEnd ignored because processor is shut down.\");\n return;\n }\n\n const active = this.activeTraces.get(trace.traceId);\n if (!active) {\n this.recordLifecycleWarning(\n `onTraceEnd ignored because trace ${trace.traceId} has no matching start callback.`,\n );\n return;\n }\n\n const endedAt = nowIso();\n await this.write({\n schemaVersion: \"0.2\",\n eventId: active.eventId,\n runId: trace.traceId,\n kind: \"RUN\",\n name: active.name,\n status: \"ok\",\n timestamp: endedAt,\n startedAt: active.startedAt,\n endedAt,\n durationMs: durationMs(active.startedAt, endedAt),\n confidence: \"explicit\",\n source: OPENAI_AGENTS_SOURCE,\n attributes: {\n legacyEvent: \"run_completed\",\n installMode: this.installMode,\n groupId: trace.groupId ?? undefined,\n metadataKeyCount: countRecordKeys(trace.metadata),\n },\n trace: {\n traceId: trace.traceId,\n },\n });\n this.activeTraces.delete(trace.traceId);\n });\n }\n\n async onSpanStart(span: Span<SpanData>): Promise<void> {\n await this.handleLifecycle(\"onSpanStart\", async () => {\n if (this.closed) {\n this.recordLifecycleWarning(\"onSpanStart ignored because processor is shut down.\");\n return;\n }\n\n const startedAt = span.startedAt ?? nowIso();\n const eventId = spanEventId(span.spanId);\n const parentId = this.resolveParentEventId(span);\n const kind = spanKind(span.spanData.type);\n const name = spanName(span.spanData);\n this.activeSpans.set(span.spanId, {\n eventId,\n runId: span.traceId,\n parentId,\n startedAt,\n name,\n kind,\n });\n\n await this.write({\n schemaVersion: \"0.2\",\n eventId,\n runId: span.traceId,\n parentId,\n kind,\n name,\n status: \"running\",\n timestamp: startedAt,\n startedAt,\n confidence: \"explicit\",\n source: OPENAI_AGENTS_SOURCE,\n attributes: {\n ...commonSpanAttributes(span),\n ...specificSpanAttributes(span.spanData),\n ...this.previewAttributes(span, \"start\"),\n },\n inputSummary: spanInputSummary(span.spanData),\n tokenUsage: summarizeUsage(\n span.spanData.type === \"generation\" ? span.spanData.usage : undefined,\n ),\n trace: {\n traceId: span.traceId,\n spanId: span.spanId,\n parentSpanId: span.parentId ?? undefined,\n },\n });\n });\n }\n\n async onSpanEnd(span: Span<SpanData>): Promise<void> {\n await this.handleLifecycle(\"onSpanEnd\", async () => {\n if (this.closed) {\n this.recordLifecycleWarning(\"onSpanEnd ignored because processor is shut down.\");\n return;\n }\n\n const active = this.activeSpans.get(span.spanId);\n if (!active) {\n this.recordLifecycleWarning(\n `onSpanEnd ignored because span ${span.spanId} has no matching start callback.`,\n );\n return;\n }\n\n const endedAt = span.endedAt ?? nowIso();\n const error = summarizeError(span.error);\n await this.write({\n schemaVersion: \"0.2\",\n eventId: active.eventId,\n runId: active.runId,\n parentId: active.parentId,\n kind: active.kind,\n name: active.name,\n status: error ? \"error\" : \"ok\",\n timestamp: endedAt,\n startedAt: active.startedAt,\n endedAt,\n durationMs: durationMs(active.startedAt, endedAt),\n confidence: \"explicit\",\n source: OPENAI_AGENTS_SOURCE,\n attributes: {\n ...commonSpanAttributes(span),\n ...specificSpanAttributes(span.spanData),\n legacyEvent: \"step_completed\",\n errorDataSummary: summarizeOptionalUnknown(span.error?.data),\n ...this.previewAttributes(span, \"end\"),\n },\n inputSummary: spanInputSummary(span.spanData),\n outputSummary: spanOutputSummary(span.spanData),\n error,\n tokenUsage: summarizeUsage(\n span.spanData.type === \"generation\" ? span.spanData.usage : undefined,\n ),\n trace: {\n traceId: span.traceId,\n spanId: span.spanId,\n parentSpanId: span.parentId ?? undefined,\n },\n });\n this.activeSpans.delete(span.spanId);\n });\n }\n\n async forceFlush(): Promise<void> {\n try {\n await this.writer?.flush?.();\n } catch (error) {\n this.diagnostics.flushFailures += 1;\n this.diagnostics.lastError = normalizeError(error);\n }\n }\n\n async shutdown(_timeout?: number): Promise<void> {\n if (this.closed) return;\n try {\n await this.writer?.close?.();\n } catch (error) {\n this.diagnostics.shutdownFailures += 1;\n this.diagnostics.lastError = normalizeError(error);\n } finally {\n this.closed = true;\n this.activeTraces.clear();\n this.activeSpans.clear();\n }\n }\n\n getDiagnostics(): AgentInspectOpenAiAgentsDiagnostics {\n return { ...this.diagnostics, capture: this.preview.getDiagnostics() };\n }\n\n /** Bounded preview attributes for one span phase (empty unless enabled). */\n private previewAttributes(\n span: Span<SpanData>,\n phase: \"start\" | \"end\",\n ): Record<string, unknown> {\n if (!this.preview.previewEnabled) return {};\n return this.preview.applyPreviewFields(\n {},\n spanPreviewSources(span.spanData, phase),\n );\n }\n\n getWriterStats(): TraceWriterStats | undefined {\n return this.writer?.getStats?.();\n }\n\n private resolveParentEventId(span: Span<SpanData>): string | undefined {\n if (span.parentId) return spanEventId(span.parentId);\n return this.activeTraces.get(span.traceId)?.eventId;\n }\n\n private async handleLifecycle(\n callbackName: string,\n run: () => Promise<void>,\n ): Promise<void> {\n try {\n await run();\n } catch (error) {\n this.recordLifecycleWarning(`${callbackName}: ${normalizeError(error)}`);\n }\n }\n\n private recordLifecycleWarning(message: string): void {\n this.diagnostics.lifecycleWarnings += 1;\n this.diagnostics.lastWarning = message;\n }\n\n private recordCaptureOptionWarnings(): void {\n if (this.effectiveCapture === \"preview\") return;\n\n const previewOnlyOptions: string[] = [];\n if (this.options.redactionProfile !== undefined) previewOnlyOptions.push(\"redactionProfile\");\n if (this.options.maxPreviewChars !== undefined) previewOnlyOptions.push(\"maxPreviewChars\");\n\n if (previewOnlyOptions.length > 0) {\n this.recordLifecycleWarning(\n `OpenAI Agents preview-only options have no effect in metadata-only capture: ${previewOnlyOptions.join(\", \")}.`,\n );\n }\n }\n\n private async write(event: PersistedInspectEvent): Promise<void> {\n if (!this.writer) return;\n\n try {\n await this.writer.write(event);\n } catch (error) {\n this.diagnostics.writeFailures += 1;\n this.diagnostics.lastError = normalizeError(error);\n }\n }\n}\n\n/**\n * Create an AgentInspect OpenAI Agents JS tracing processor.\n *\n * @experimental Install the returned processor explicitly with replacement\n * semantics:\n *\n * ```ts\n * setTraceProcessors([agentInspectProcessor(options)]);\n * ```\n *\n * The processor does not call `setTraceProcessors()`, `addTraceProcessor()`,\n * OpenAI exporters, or network APIs on import or construction.\n */\nexport function agentInspectProcessor(\n options: AgentInspectOpenAiAgentsOptions = {},\n): AgentInspectOpenAiAgentsProcessor {\n return new AgentInspectOpenAiAgentsTracingProcessor(options);\n}\n"]}
1
+ {"version":3,"sources":["../src/index.ts"],"names":["createAdapterPreviewCapture","fileWriter"],"mappings":"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","file":"index.cjs","sourcesContent":["import type {\n Span,\n SpanData,\n SpanError,\n Trace,\n TracingProcessor,\n} from \"@openai/agents\";\nimport { createAdapterPreviewCapture } from \"agent-inspect/advanced\";\nimport type {\n AdapterCaptureDiagnostics,\n AdapterDiagnosticListener,\n AdapterPreviewCapture,\n RedactionProfile,\n} from \"agent-inspect/advanced\";\nimport type {\n PersistedInspectError,\n PersistedInspectEvent,\n PersistedTokenUsage,\n} from \"agent-inspect/persisted\";\nimport { fileWriter } from \"agent-inspect/writers\";\nimport type { TraceWriter, TraceWriterStats } from \"agent-inspect/writers\";\n\n/**\n * Experimental capture mode for the OpenAI Agents JS adapter.\n *\n * `metadata-only` is the default. `preview` persists bounded, redacted span\n * input/output preview attributes through the shared adapter capture helper.\n *\n * @experimental This package is part of the framework adapter train.\n */\nexport type AgentInspectOpenAiAgentsCaptureMode = \"metadata-only\" | \"preview\";\n\n/**\n * Options for the experimental OpenAI Agents JS tracing processor.\n *\n * @experimental Install processors with `setTraceProcessors([...])`\n * replacement behavior for local-only tracing. Do not use `addTraceProcessor()`\n * as the default path because it preserves the SDK's default exporter.\n */\nexport interface AgentInspectOpenAiAgentsOptions {\n /**\n * Explicit local writer for persisted v0.2 AgentInspect events.\n */\n writer?: TraceWriter;\n\n /**\n * Convenience local trace directory for writer-owned persistence.\n */\n traceDir?: string;\n\n /**\n * Optional workflow name overriding the SDK trace name.\n */\n workflowName?: string;\n\n /**\n * Capture policy. Defaults to metadata-only.\n *\n * @experimental `preview` persists bounded, redacted span input/output\n * previews. It never persists full span content.\n */\n capture?: AgentInspectOpenAiAgentsCaptureMode;\n\n /**\n * Redaction profile applied to preview attributes before persistence.\n * `share` and `strict` also cap `maxPreviewChars`.\n *\n * @experimental Effective only when `capture: \"preview\"`.\n */\n redactionProfile?: RedactionProfile;\n\n /**\n * Upper bound for each serialized preview attribute. Defaults to 200.\n *\n * @experimental Effective only when `capture: \"preview\"`.\n */\n maxPreviewChars?: number;\n\n /**\n * Receives bounded capture diagnostics such as\n * `AI_CAPTURE_FIELD_UNAVAILABLE`. Listener failures are isolated.\n *\n * @experimental\n */\n onDiagnostic?: AdapterDiagnosticListener;\n}\n\nexport interface AgentInspectOpenAiAgentsDiagnostics {\n writeFailures: number;\n lifecycleWarnings: number;\n flushFailures: number;\n shutdownFailures: number;\n lastError?: string;\n lastWarning?: string;\n runtimeMappingImplemented: true;\n /** Shared preview-capture counters (`@experimental`). */\n capture: AdapterCaptureDiagnostics;\n}\n\nexport interface AgentInspectOpenAiAgentsProcessor extends TracingProcessor {\n /**\n * Documents the local-only replacement install mode for this adapter.\n *\n * `addTraceProcessor()` remains an advanced user-owned choice outside this\n * package because it can preserve existing/default exporters.\n */\n readonly installMode: \"setTraceProcessors\";\n\n /**\n * This processor never installs itself globally and performs no network I/O.\n */\n readonly localOnly: true;\n\n getDiagnostics(): AgentInspectOpenAiAgentsDiagnostics;\n getWriterStats(): TraceWriterStats | undefined;\n}\n\ntype ActiveTrace = {\n eventId: string;\n startedAt: string;\n name: string;\n};\n\ntype ActiveSpan = {\n eventId: string;\n runId: string;\n parentId?: string;\n startedAt: string;\n name: string;\n kind: PersistedInspectEvent[\"kind\"];\n};\n\ntype SpanDataType = SpanData[\"type\"];\n\nconst OPENAI_AGENTS_SOURCE = {\n type: \"adapter\",\n name: \"@agent-inspect/openai-agents\",\n version: \"experimental\",\n} as const;\n\nfunction nowIso(): string {\n return new Date().toISOString();\n}\n\nfunction normalizeError(error: unknown): string {\n if (error instanceof Error && error.message.trim() !== \"\") {\n return error.message;\n }\n if (typeof error === \"string\" && error.trim() !== \"\") {\n return error;\n }\n return \"Unknown OpenAI Agents processor error\";\n}\n\nfunction durationMs(startedAt: string, endedAt: string): number | undefined {\n const started = Date.parse(startedAt);\n const ended = Date.parse(endedAt);\n if (!Number.isFinite(started) || !Number.isFinite(ended)) return undefined;\n return Math.max(0, ended - started);\n}\n\nfunction countRecordKeys(value: unknown): number | undefined {\n if (typeof value !== \"object\" || value === null || Array.isArray(value)) {\n return undefined;\n }\n return Object.keys(value).length;\n}\n\nfunction normalizeMaxPreviewChars(value: unknown): number | undefined {\n if (typeof value !== \"number\" || !Number.isFinite(value) || value < 0) {\n return undefined;\n }\n return Math.floor(value);\n}\n\nfunction summarizeUnknown(value: unknown): Record<string, unknown> {\n if (value === null) return { type: \"null\" };\n if (Array.isArray(value)) return { type: \"array\", itemCount: value.length };\n\n if (typeof value === \"object\") {\n return { type: \"object\", keyCount: countRecordKeys(value) ?? 0 };\n }\n if (typeof value === \"string\") {\n return { type: \"string\", length: value.length };\n }\n const valueType = typeof value;\n if (valueType === \"number\" || valueType === \"boolean\" || valueType === \"bigint\") {\n return { type: valueType };\n }\n if (valueType === \"undefined\") return { type: \"undefined\" };\n return { type: \"unknown\" };\n}\n\nfunction summarizeOptionalUnknown(value: unknown): Record<string, unknown> | undefined {\n return value === undefined ? undefined : summarizeUnknown(value);\n}\n\nfunction summarizeError(error: SpanError | null | undefined): PersistedInspectError | undefined {\n if (!error?.message) return undefined;\n return { message: error.message };\n}\n\nfunction readFiniteNonNegative(value: unknown): number | undefined {\n return typeof value === \"number\" && Number.isFinite(value) && value >= 0\n ? value\n : undefined;\n}\n\nfunction applyCachedAndReasoningFromDetails(\n tokenUsage: PersistedTokenUsage,\n detailRecord: Record<string, unknown>,\n): void {\n if (tokenUsage.cached === undefined) {\n const cached = readFiniteNonNegative(\n detailRecord.cached_tokens ?? detailRecord.cached_input_tokens,\n );\n if (cached !== undefined) {\n tokenUsage.cached = cached;\n }\n }\n\n if (tokenUsage.cacheWrite === undefined) {\n const cacheWrite = readFiniteNonNegative(\n detailRecord.cache_creation_tokens ??\n detailRecord.cached_creation_tokens ??\n detailRecord.cache_write_tokens,\n );\n if (cacheWrite !== undefined) {\n tokenUsage.cacheWrite = cacheWrite;\n }\n }\n\n if (tokenUsage.reasoning !== undefined) {\n return;\n }\n const reasoning =\n detailRecord.reasoning_tokens ?? detailRecord.output_tokens_details;\n const asNumber = readFiniteNonNegative(reasoning);\n if (asNumber !== undefined) {\n tokenUsage.reasoning = asNumber;\n return;\n }\n if (typeof reasoning === \"object\" && reasoning !== null && !Array.isArray(reasoning)) {\n const nested = readFiniteNonNegative(\n (reasoning as Record<string, unknown>).reasoning_tokens,\n );\n if (nested !== undefined) {\n tokenUsage.reasoning = nested;\n }\n }\n}\n\nfunction summarizeUsage(usage: unknown): PersistedTokenUsage | undefined {\n if (typeof usage !== \"object\" || usage === null || Array.isArray(usage)) {\n return undefined;\n }\n\n const record = usage as Record<string, unknown>;\n const tokenUsage: PersistedTokenUsage = {};\n if (typeof record.input_tokens === \"number\" && Number.isFinite(record.input_tokens)) {\n tokenUsage.input = record.input_tokens;\n }\n if (typeof record.output_tokens === \"number\" && Number.isFinite(record.output_tokens)) {\n tokenUsage.output = record.output_tokens;\n }\n if (tokenUsage.input !== undefined || tokenUsage.output !== undefined) {\n tokenUsage.total = (tokenUsage.input ?? 0) + (tokenUsage.output ?? 0);\n }\n\n // Real OpenAI Agents / Responses SDK shape.\n const inputDetails = record.input_tokens_details;\n if (\n typeof inputDetails === \"object\" &&\n inputDetails !== null &&\n !Array.isArray(inputDetails)\n ) {\n applyCachedAndReasoningFromDetails(\n tokenUsage,\n inputDetails as Record<string, unknown>,\n );\n }\n\n // Legacy / synthetic alias used by older fixtures.\n const details = record.details;\n if (typeof details === \"object\" && details !== null && !Array.isArray(details)) {\n applyCachedAndReasoningFromDetails(tokenUsage, details as Record<string, unknown>);\n }\n\n const outputDetails = record.output_tokens_details;\n if (\n typeof outputDetails === \"object\" &&\n outputDetails !== null &&\n !Array.isArray(outputDetails)\n ) {\n const nested = readFiniteNonNegative(\n (outputDetails as Record<string, unknown>).reasoning_tokens,\n );\n if (nested !== undefined && tokenUsage.reasoning === undefined) {\n tokenUsage.reasoning = nested;\n }\n }\n\n return Object.keys(tokenUsage).length > 0 ? tokenUsage : undefined;\n}\n\nfunction spanKind(type: SpanDataType): PersistedInspectEvent[\"kind\"] {\n switch (type) {\n case \"agent\":\n return \"AGENT\";\n case \"generation\":\n case \"response\":\n case \"transcription\":\n case \"speech\":\n return \"LLM\";\n case \"function\":\n case \"mcp_tools\":\n return \"TOOL\";\n case \"handoff\":\n case \"guardrail\":\n return \"DECISION\";\n case \"custom\":\n case \"speech_group\":\n return \"LOGIC\";\n default:\n return \"LOGIC\";\n }\n}\n\nfunction spanName(data: SpanData): string {\n switch (data.type) {\n case \"agent\":\n case \"function\":\n case \"custom\":\n case \"guardrail\":\n return data.name;\n case \"generation\":\n return data.model ? `generation:${data.model}` : \"generation\";\n case \"response\":\n return data.response_id ? `response:${data.response_id}` : \"response\";\n case \"handoff\":\n return data.to_agent ? `handoff:${data.to_agent}` : \"handoff\";\n case \"mcp_tools\":\n return data.server ? `mcp-tools:${data.server}` : \"mcp-tools\";\n case \"transcription\":\n return data.model ? `transcription:${data.model}` : \"transcription\";\n case \"speech\":\n return data.model ? `speech:${data.model}` : \"speech\";\n case \"speech_group\":\n return \"speech-group\";\n default:\n return \"openai-agents-span\";\n }\n}\n\nfunction commonSpanAttributes(span: Span<SpanData>): Record<string, unknown> {\n return {\n legacyEvent: \"step_started\",\n stepId: span.spanId,\n stepType: mapSpanTypeToStepType(span.spanData.type),\n spanType: span.spanData.type,\n traceId: span.traceId,\n spanId: span.spanId,\n parentSpanId: span.parentId ?? undefined,\n traceMetadataKeyCount: countRecordKeys(span.traceMetadata),\n };\n}\n\nfunction specificSpanAttributes(data: SpanData): Record<string, unknown> {\n switch (data.type) {\n case \"agent\":\n return {\n agentName: data.name,\n handoffCount: data.handoffs?.length ?? 0,\n handoffNames: data.handoffs,\n toolCount: data.tools?.length ?? 0,\n toolNames: data.tools,\n outputType: data.output_type,\n };\n case \"function\":\n return {\n toolName: data.name,\n hasInput: data.input !== undefined,\n hasOutput: data.output !== undefined,\n inputSummary: summarizeUnknown(data.input),\n outputSummary: summarizeUnknown(data.output),\n mcpDataSummary: summarizeOptionalUnknown(data.mcp_data),\n };\n case \"generation\":\n return {\n model: data.model,\n modelConfigKeyCount: countRecordKeys(data.model_config),\n inputSummary: summarizeOptionalUnknown(data.input),\n outputSummary: summarizeOptionalUnknown(data.output),\n usageDetailsKeyCount: countRecordKeys(data.usage?.details),\n };\n case \"response\":\n return {\n responseId: data.response_id,\n inputSummary: summarizeOptionalUnknown(data._input),\n responseSummary: summarizeOptionalUnknown(data._response),\n };\n case \"handoff\":\n return {\n fromAgent: data.from_agent,\n toAgent: data.to_agent,\n };\n case \"custom\":\n return {\n customName: data.name,\n dataSummary: summarizeUnknown(data.data),\n };\n case \"guardrail\":\n return {\n guardrailName: data.name,\n triggered: data.triggered,\n };\n case \"mcp_tools\":\n return {\n server: data.server,\n toolCount: data.result?.length ?? 0,\n toolNames: data.result,\n };\n case \"transcription\":\n return {\n model: data.model,\n inputFormat: data.input.format,\n inputSummary: summarizeUnknown(data.input.data),\n outputSummary: summarizeOptionalUnknown(data.output),\n modelConfigKeyCount: countRecordKeys(data.model_config),\n };\n case \"speech\":\n return {\n model: data.model,\n inputSummary: summarizeOptionalUnknown(data.input),\n outputFormat: data.output.format,\n outputSummary: summarizeUnknown(data.output.data),\n modelConfigKeyCount: countRecordKeys(data.model_config),\n };\n case \"speech_group\":\n return {\n inputSummary: summarizeOptionalUnknown(data.input),\n };\n default:\n return {};\n }\n}\n\nfunction mapSpanTypeToStepType(type: SpanDataType): string {\n switch (type) {\n case \"generation\":\n case \"response\":\n case \"transcription\":\n case \"speech\":\n return \"llm\";\n case \"function\":\n case \"mcp_tools\":\n return \"tool\";\n case \"handoff\":\n case \"guardrail\":\n return \"decision\";\n case \"agent\":\n return \"logic\";\n case \"custom\":\n case \"speech_group\":\n return \"custom\";\n default:\n return \"logic\";\n }\n}\n\nfunction spanInputSummary(data: SpanData): unknown {\n switch (data.type) {\n case \"generation\":\n return summarizeOptionalUnknown(data.input);\n case \"function\":\n return summarizeUnknown(data.input);\n case \"response\":\n return summarizeOptionalUnknown(data._input);\n case \"custom\":\n return summarizeUnknown(data.data);\n case \"transcription\":\n return { format: data.input.format, ...summarizeUnknown(data.input.data) };\n case \"speech\":\n case \"speech_group\":\n return summarizeOptionalUnknown(data.input);\n default:\n return undefined;\n }\n}\n\nfunction spanOutputSummary(data: SpanData): unknown {\n switch (data.type) {\n case \"generation\":\n return summarizeOptionalUnknown(data.output);\n case \"function\":\n return summarizeUnknown(data.output);\n case \"response\":\n return summarizeOptionalUnknown(data._response);\n case \"guardrail\":\n return { triggered: data.triggered };\n case \"mcp_tools\":\n return { toolCount: data.result?.length ?? 0 };\n case \"transcription\":\n return summarizeOptionalUnknown(data.output);\n case \"speech\":\n return { format: data.output.format, ...summarizeUnknown(data.output.data) };\n default:\n return undefined;\n }\n}\n\n/**\n * Raw span fields eligible for bounded preview capture, keyed by the logical\n * preview name. Span types without a payload concept return `{}` so preview\n * mode does not report false \"field unavailable\" diagnostics for them.\n */\nfunction spanPreviewSources(\n data: SpanData,\n phase: \"start\" | \"end\",\n): Record<string, unknown> {\n const withPhase = (\n input: unknown,\n output: unknown,\n ): Record<string, unknown> =>\n phase === \"start\" ? { input } : { input, output };\n\n switch (data.type) {\n case \"generation\":\n return withPhase(data.input, data.output);\n case \"function\":\n return withPhase(data.input, data.output);\n case \"response\":\n return withPhase(data._input, data._response);\n case \"transcription\":\n return withPhase(data.input.data, data.output);\n case \"speech\":\n return withPhase(data.input, data.output.data);\n case \"custom\":\n return { input: data.data };\n case \"speech_group\":\n return { input: data.input };\n default:\n return {};\n }\n}\n\nfunction traceEventId(traceId: string): string {\n return `openai_agents_trace:${traceId}`;\n}\n\nfunction spanEventId(spanId: string): string {\n return `openai_agents_span:${spanId}`;\n}\n\nclass AgentInspectOpenAiAgentsTracingProcessor implements AgentInspectOpenAiAgentsProcessor {\n readonly installMode = \"setTraceProcessors\" as const;\n readonly localOnly = true as const;\n\n private readonly writer: TraceWriter | undefined;\n private readonly requestedCapture: AgentInspectOpenAiAgentsCaptureMode;\n private readonly preview: AdapterPreviewCapture;\n private readonly effectiveCapture: AgentInspectOpenAiAgentsCaptureMode;\n private readonly diagnostics: Omit<\n AgentInspectOpenAiAgentsDiagnostics,\n \"capture\"\n > = {\n writeFailures: 0,\n lifecycleWarnings: 0,\n flushFailures: 0,\n shutdownFailures: 0,\n runtimeMappingImplemented: true,\n };\n private readonly activeTraces = new Map<string, ActiveTrace>();\n private readonly activeSpans = new Map<string, ActiveSpan>();\n private closed = false;\n\n constructor(private readonly options: AgentInspectOpenAiAgentsOptions) {\n this.requestedCapture = options.capture ?? \"metadata-only\";\n this.preview = createAdapterPreviewCapture({\n capture: this.requestedCapture,\n redactionProfile: options.redactionProfile,\n maxPreviewChars: options.maxPreviewChars,\n onDiagnostic: options.onDiagnostic,\n });\n this.effectiveCapture = this.preview.capture;\n this.writer = options.writer ?? (options.traceDir ? fileWriter({ dir: options.traceDir }) : undefined);\n for (const key of [\n \"options\",\n \"writer\",\n \"requestedCapture\",\n \"preview\",\n \"effectiveCapture\",\n \"diagnostics\",\n \"activeTraces\",\n \"activeSpans\",\n \"closed\",\n ] as const) {\n Object.defineProperty(this, key, { enumerable: false });\n }\n this.recordCaptureOptionWarnings();\n }\n\n start(): void {\n // Local writer-backed processor has no export loop to start.\n }\n\n async onTraceStart(trace: Trace): Promise<void> {\n await this.handleLifecycle(\"onTraceStart\", async () => {\n if (this.closed) {\n this.recordLifecycleWarning(\"onTraceStart ignored because processor is shut down.\");\n return;\n }\n\n const startedAt = nowIso();\n const name = this.options.workflowName ?? trace.name ?? \"openai-agents-run\";\n const eventId = traceEventId(trace.traceId);\n this.activeTraces.set(trace.traceId, { eventId, startedAt, name });\n\n await this.write({\n schemaVersion: \"0.2\",\n eventId,\n runId: trace.traceId,\n kind: \"RUN\",\n name,\n status: \"running\",\n timestamp: startedAt,\n startedAt,\n confidence: \"explicit\",\n source: OPENAI_AGENTS_SOURCE,\n attributes: {\n legacyEvent: \"run_started\",\n installMode: this.installMode,\n capture: this.effectiveCapture,\n requestedCapture:\n this.requestedCapture === this.effectiveCapture\n ? undefined\n : this.requestedCapture,\n previewCaptureSupported: true,\n // Preview rows report the effective bound/profile, which the\n // `share` and `strict` profiles can lower below the request.\n redactionProfile: this.preview.previewEnabled\n ? this.preview.redactionProfile\n : this.options.redactionProfile,\n maxPreviewChars: this.preview.previewEnabled\n ? this.preview.maxPreviewChars\n : normalizeMaxPreviewChars(this.options.maxPreviewChars),\n groupId: trace.groupId ?? undefined,\n metadataKeyCount: countRecordKeys(trace.metadata),\n },\n trace: {\n traceId: trace.traceId,\n },\n });\n });\n }\n\n async onTraceEnd(trace: Trace): Promise<void> {\n await this.handleLifecycle(\"onTraceEnd\", async () => {\n if (this.closed) {\n this.recordLifecycleWarning(\"onTraceEnd ignored because processor is shut down.\");\n return;\n }\n\n const active = this.activeTraces.get(trace.traceId);\n if (!active) {\n this.recordLifecycleWarning(\n `onTraceEnd ignored because trace ${trace.traceId} has no matching start callback.`,\n );\n return;\n }\n\n const endedAt = nowIso();\n await this.write({\n schemaVersion: \"0.2\",\n eventId: active.eventId,\n runId: trace.traceId,\n kind: \"RUN\",\n name: active.name,\n status: \"ok\",\n timestamp: endedAt,\n startedAt: active.startedAt,\n endedAt,\n durationMs: durationMs(active.startedAt, endedAt),\n confidence: \"explicit\",\n source: OPENAI_AGENTS_SOURCE,\n attributes: {\n legacyEvent: \"run_completed\",\n installMode: this.installMode,\n groupId: trace.groupId ?? undefined,\n metadataKeyCount: countRecordKeys(trace.metadata),\n },\n trace: {\n traceId: trace.traceId,\n },\n });\n this.activeTraces.delete(trace.traceId);\n });\n }\n\n async onSpanStart(span: Span<SpanData>): Promise<void> {\n await this.handleLifecycle(\"onSpanStart\", async () => {\n if (this.closed) {\n this.recordLifecycleWarning(\"onSpanStart ignored because processor is shut down.\");\n return;\n }\n\n const startedAt = span.startedAt ?? nowIso();\n const eventId = spanEventId(span.spanId);\n const parentId = this.resolveParentEventId(span);\n const kind = spanKind(span.spanData.type);\n const name = spanName(span.spanData);\n this.activeSpans.set(span.spanId, {\n eventId,\n runId: span.traceId,\n parentId,\n startedAt,\n name,\n kind,\n });\n\n await this.write({\n schemaVersion: \"0.2\",\n eventId,\n runId: span.traceId,\n parentId,\n kind,\n name,\n status: \"running\",\n timestamp: startedAt,\n startedAt,\n confidence: \"explicit\",\n source: OPENAI_AGENTS_SOURCE,\n attributes: {\n ...commonSpanAttributes(span),\n ...specificSpanAttributes(span.spanData),\n ...this.previewAttributes(span, \"start\"),\n },\n inputSummary: spanInputSummary(span.spanData),\n tokenUsage: summarizeUsage(\n span.spanData.type === \"generation\" ? span.spanData.usage : undefined,\n ),\n trace: {\n traceId: span.traceId,\n spanId: span.spanId,\n parentSpanId: span.parentId ?? undefined,\n },\n });\n });\n }\n\n async onSpanEnd(span: Span<SpanData>): Promise<void> {\n await this.handleLifecycle(\"onSpanEnd\", async () => {\n if (this.closed) {\n this.recordLifecycleWarning(\"onSpanEnd ignored because processor is shut down.\");\n return;\n }\n\n const active = this.activeSpans.get(span.spanId);\n if (!active) {\n this.recordLifecycleWarning(\n `onSpanEnd ignored because span ${span.spanId} has no matching start callback.`,\n );\n return;\n }\n\n const endedAt = span.endedAt ?? nowIso();\n const error = summarizeError(span.error);\n await this.write({\n schemaVersion: \"0.2\",\n eventId: active.eventId,\n runId: active.runId,\n parentId: active.parentId,\n kind: active.kind,\n name: active.name,\n status: error ? \"error\" : \"ok\",\n timestamp: endedAt,\n startedAt: active.startedAt,\n endedAt,\n durationMs: durationMs(active.startedAt, endedAt),\n confidence: \"explicit\",\n source: OPENAI_AGENTS_SOURCE,\n attributes: {\n ...commonSpanAttributes(span),\n ...specificSpanAttributes(span.spanData),\n legacyEvent: \"step_completed\",\n errorDataSummary: summarizeOptionalUnknown(span.error?.data),\n ...this.previewAttributes(span, \"end\"),\n },\n inputSummary: spanInputSummary(span.spanData),\n outputSummary: spanOutputSummary(span.spanData),\n error,\n tokenUsage: summarizeUsage(\n span.spanData.type === \"generation\" ? span.spanData.usage : undefined,\n ),\n trace: {\n traceId: span.traceId,\n spanId: span.spanId,\n parentSpanId: span.parentId ?? undefined,\n },\n });\n this.activeSpans.delete(span.spanId);\n });\n }\n\n async forceFlush(): Promise<void> {\n try {\n await this.writer?.flush?.();\n } catch (error) {\n this.diagnostics.flushFailures += 1;\n this.diagnostics.lastError = normalizeError(error);\n }\n }\n\n async shutdown(_timeout?: number): Promise<void> {\n if (this.closed) return;\n try {\n await this.writer?.close?.();\n } catch (error) {\n this.diagnostics.shutdownFailures += 1;\n this.diagnostics.lastError = normalizeError(error);\n } finally {\n this.closed = true;\n this.activeTraces.clear();\n this.activeSpans.clear();\n }\n }\n\n getDiagnostics(): AgentInspectOpenAiAgentsDiagnostics {\n return { ...this.diagnostics, capture: this.preview.getDiagnostics() };\n }\n\n /** Bounded preview attributes for one span phase (empty unless enabled). */\n private previewAttributes(\n span: Span<SpanData>,\n phase: \"start\" | \"end\",\n ): Record<string, unknown> {\n if (!this.preview.previewEnabled) return {};\n return this.preview.applyPreviewFields(\n {},\n spanPreviewSources(span.spanData, phase),\n );\n }\n\n getWriterStats(): TraceWriterStats | undefined {\n return this.writer?.getStats?.();\n }\n\n private resolveParentEventId(span: Span<SpanData>): string | undefined {\n if (span.parentId) return spanEventId(span.parentId);\n return this.activeTraces.get(span.traceId)?.eventId;\n }\n\n private async handleLifecycle(\n callbackName: string,\n run: () => Promise<void>,\n ): Promise<void> {\n try {\n await run();\n } catch (error) {\n this.recordLifecycleWarning(`${callbackName}: ${normalizeError(error)}`);\n }\n }\n\n private recordLifecycleWarning(message: string): void {\n this.diagnostics.lifecycleWarnings += 1;\n this.diagnostics.lastWarning = message;\n }\n\n private recordCaptureOptionWarnings(): void {\n if (this.effectiveCapture === \"preview\") return;\n\n const previewOnlyOptions: string[] = [];\n if (this.options.redactionProfile !== undefined) previewOnlyOptions.push(\"redactionProfile\");\n if (this.options.maxPreviewChars !== undefined) previewOnlyOptions.push(\"maxPreviewChars\");\n\n if (previewOnlyOptions.length > 0) {\n this.recordLifecycleWarning(\n `OpenAI Agents preview-only options have no effect in metadata-only capture: ${previewOnlyOptions.join(\", \")}.`,\n );\n }\n }\n\n private async write(event: PersistedInspectEvent): Promise<void> {\n if (!this.writer) return;\n\n try {\n await this.writer.write(event);\n } catch (error) {\n this.diagnostics.writeFailures += 1;\n this.diagnostics.lastError = normalizeError(error);\n }\n }\n}\n\n/**\n * Create an AgentInspect OpenAI Agents JS tracing processor.\n *\n * @experimental Install the returned processor explicitly with replacement\n * semantics:\n *\n * ```ts\n * setTraceProcessors([agentInspectProcessor(options)]);\n * ```\n *\n * The processor does not call `setTraceProcessors()`, `addTraceProcessor()`,\n * OpenAI exporters, or network APIs on import or construction.\n */\nexport function agentInspectProcessor(\n options: AgentInspectOpenAiAgentsOptions = {},\n): AgentInspectOpenAiAgentsProcessor {\n return new AgentInspectOpenAiAgentsTracingProcessor(options);\n}\n"]}
package/dist/index.mjs CHANGED
@@ -60,6 +60,44 @@ function summarizeError(error) {
60
60
  if (!error?.message) return void 0;
61
61
  return { message: error.message };
62
62
  }
63
+ function readFiniteNonNegative(value) {
64
+ return typeof value === "number" && Number.isFinite(value) && value >= 0 ? value : void 0;
65
+ }
66
+ function applyCachedAndReasoningFromDetails(tokenUsage, detailRecord) {
67
+ if (tokenUsage.cached === void 0) {
68
+ const cached = readFiniteNonNegative(
69
+ detailRecord.cached_tokens ?? detailRecord.cached_input_tokens
70
+ );
71
+ if (cached !== void 0) {
72
+ tokenUsage.cached = cached;
73
+ }
74
+ }
75
+ if (tokenUsage.cacheWrite === void 0) {
76
+ const cacheWrite = readFiniteNonNegative(
77
+ detailRecord.cache_creation_tokens ?? detailRecord.cached_creation_tokens ?? detailRecord.cache_write_tokens
78
+ );
79
+ if (cacheWrite !== void 0) {
80
+ tokenUsage.cacheWrite = cacheWrite;
81
+ }
82
+ }
83
+ if (tokenUsage.reasoning !== void 0) {
84
+ return;
85
+ }
86
+ const reasoning = detailRecord.reasoning_tokens ?? detailRecord.output_tokens_details;
87
+ const asNumber = readFiniteNonNegative(reasoning);
88
+ if (asNumber !== void 0) {
89
+ tokenUsage.reasoning = asNumber;
90
+ return;
91
+ }
92
+ if (typeof reasoning === "object" && reasoning !== null && !Array.isArray(reasoning)) {
93
+ const nested = readFiniteNonNegative(
94
+ reasoning.reasoning_tokens
95
+ );
96
+ if (nested !== void 0) {
97
+ tokenUsage.reasoning = nested;
98
+ }
99
+ }
100
+ }
63
101
  function summarizeUsage(usage) {
64
102
  if (typeof usage !== "object" || usage === null || Array.isArray(usage)) {
65
103
  return void 0;
@@ -75,31 +113,23 @@ function summarizeUsage(usage) {
75
113
  if (tokenUsage.input !== void 0 || tokenUsage.output !== void 0) {
76
114
  tokenUsage.total = (tokenUsage.input ?? 0) + (tokenUsage.output ?? 0);
77
115
  }
116
+ const inputDetails = record.input_tokens_details;
117
+ if (typeof inputDetails === "object" && inputDetails !== null && !Array.isArray(inputDetails)) {
118
+ applyCachedAndReasoningFromDetails(
119
+ tokenUsage,
120
+ inputDetails
121
+ );
122
+ }
78
123
  const details = record.details;
79
124
  if (typeof details === "object" && details !== null && !Array.isArray(details)) {
80
- const detailRecord = details;
81
- const cached = detailRecord.cached_tokens ?? detailRecord.cached_input_tokens;
82
- if (typeof cached === "number" && Number.isFinite(cached) && cached >= 0) {
83
- tokenUsage.cached = cached;
84
- }
85
- const cacheWrite = detailRecord.cache_creation_tokens ?? detailRecord.cached_creation_tokens ?? detailRecord.cache_write_tokens;
86
- if (typeof cacheWrite === "number" && Number.isFinite(cacheWrite) && cacheWrite >= 0) {
87
- tokenUsage.cacheWrite = cacheWrite;
88
- }
89
- const reasoning = detailRecord.reasoning_tokens ?? detailRecord.output_tokens_details;
90
- if (typeof reasoning === "number" && Number.isFinite(reasoning) && reasoning >= 0) {
91
- tokenUsage.reasoning = reasoning;
92
- } else if (typeof reasoning === "object" && reasoning !== null && !Array.isArray(reasoning)) {
93
- const nested = reasoning.reasoning_tokens;
94
- if (typeof nested === "number" && Number.isFinite(nested) && nested >= 0) {
95
- tokenUsage.reasoning = nested;
96
- }
97
- }
125
+ applyCachedAndReasoningFromDetails(tokenUsage, details);
98
126
  }
99
127
  const outputDetails = record.output_tokens_details;
100
128
  if (typeof outputDetails === "object" && outputDetails !== null && !Array.isArray(outputDetails)) {
101
- const nested = outputDetails.reasoning_tokens;
102
- if (typeof nested === "number" && Number.isFinite(nested) && nested >= 0 && tokenUsage.reasoning === void 0) {
129
+ const nested = readFiniteNonNegative(
130
+ outputDetails.reasoning_tokens
131
+ );
132
+ if (nested !== void 0 && tokenUsage.reasoning === void 0) {
103
133
  tokenUsage.reasoning = nested;
104
134
  }
105
135
  }
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/index.ts"],"names":[],"mappings":"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","file":"index.mjs","sourcesContent":["import type {\n Span,\n SpanData,\n SpanError,\n Trace,\n TracingProcessor,\n} from \"@openai/agents\";\nimport { createAdapterPreviewCapture } from \"agent-inspect/advanced\";\nimport type {\n AdapterCaptureDiagnostics,\n AdapterDiagnosticListener,\n AdapterPreviewCapture,\n RedactionProfile,\n} from \"agent-inspect/advanced\";\nimport type {\n PersistedInspectError,\n PersistedInspectEvent,\n PersistedTokenUsage,\n} from \"agent-inspect/persisted\";\nimport { fileWriter } from \"agent-inspect/writers\";\nimport type { TraceWriter, TraceWriterStats } from \"agent-inspect/writers\";\n\n/**\n * Experimental capture mode for the OpenAI Agents JS adapter.\n *\n * `metadata-only` is the default. `preview` persists bounded, redacted span\n * input/output preview attributes through the shared adapter capture helper.\n *\n * @experimental This package is part of the framework adapter train.\n */\nexport type AgentInspectOpenAiAgentsCaptureMode = \"metadata-only\" | \"preview\";\n\n/**\n * Options for the experimental OpenAI Agents JS tracing processor.\n *\n * @experimental Install processors with `setTraceProcessors([...])`\n * replacement behavior for local-only tracing. Do not use `addTraceProcessor()`\n * as the default path because it preserves the SDK's default exporter.\n */\nexport interface AgentInspectOpenAiAgentsOptions {\n /**\n * Explicit local writer for persisted v0.2 AgentInspect events.\n */\n writer?: TraceWriter;\n\n /**\n * Convenience local trace directory for writer-owned persistence.\n */\n traceDir?: string;\n\n /**\n * Optional workflow name overriding the SDK trace name.\n */\n workflowName?: string;\n\n /**\n * Capture policy. Defaults to metadata-only.\n *\n * @experimental `preview` persists bounded, redacted span input/output\n * previews. It never persists full span content.\n */\n capture?: AgentInspectOpenAiAgentsCaptureMode;\n\n /**\n * Redaction profile applied to preview attributes before persistence.\n * `share` and `strict` also cap `maxPreviewChars`.\n *\n * @experimental Effective only when `capture: \"preview\"`.\n */\n redactionProfile?: RedactionProfile;\n\n /**\n * Upper bound for each serialized preview attribute. Defaults to 200.\n *\n * @experimental Effective only when `capture: \"preview\"`.\n */\n maxPreviewChars?: number;\n\n /**\n * Receives bounded capture diagnostics such as\n * `AI_CAPTURE_FIELD_UNAVAILABLE`. Listener failures are isolated.\n *\n * @experimental\n */\n onDiagnostic?: AdapterDiagnosticListener;\n}\n\nexport interface AgentInspectOpenAiAgentsDiagnostics {\n writeFailures: number;\n lifecycleWarnings: number;\n flushFailures: number;\n shutdownFailures: number;\n lastError?: string;\n lastWarning?: string;\n runtimeMappingImplemented: true;\n /** Shared preview-capture counters (`@experimental`). */\n capture: AdapterCaptureDiagnostics;\n}\n\nexport interface AgentInspectOpenAiAgentsProcessor extends TracingProcessor {\n /**\n * Documents the local-only replacement install mode for this adapter.\n *\n * `addTraceProcessor()` remains an advanced user-owned choice outside this\n * package because it can preserve existing/default exporters.\n */\n readonly installMode: \"setTraceProcessors\";\n\n /**\n * This processor never installs itself globally and performs no network I/O.\n */\n readonly localOnly: true;\n\n getDiagnostics(): AgentInspectOpenAiAgentsDiagnostics;\n getWriterStats(): TraceWriterStats | undefined;\n}\n\ntype ActiveTrace = {\n eventId: string;\n startedAt: string;\n name: string;\n};\n\ntype ActiveSpan = {\n eventId: string;\n runId: string;\n parentId?: string;\n startedAt: string;\n name: string;\n kind: PersistedInspectEvent[\"kind\"];\n};\n\ntype SpanDataType = SpanData[\"type\"];\n\nconst OPENAI_AGENTS_SOURCE = {\n type: \"adapter\",\n name: \"@agent-inspect/openai-agents\",\n version: \"experimental\",\n} as const;\n\nfunction nowIso(): string {\n return new Date().toISOString();\n}\n\nfunction normalizeError(error: unknown): string {\n if (error instanceof Error && error.message.trim() !== \"\") {\n return error.message;\n }\n if (typeof error === \"string\" && error.trim() !== \"\") {\n return error;\n }\n return \"Unknown OpenAI Agents processor error\";\n}\n\nfunction durationMs(startedAt: string, endedAt: string): number | undefined {\n const started = Date.parse(startedAt);\n const ended = Date.parse(endedAt);\n if (!Number.isFinite(started) || !Number.isFinite(ended)) return undefined;\n return Math.max(0, ended - started);\n}\n\nfunction countRecordKeys(value: unknown): number | undefined {\n if (typeof value !== \"object\" || value === null || Array.isArray(value)) {\n return undefined;\n }\n return Object.keys(value).length;\n}\n\nfunction normalizeMaxPreviewChars(value: unknown): number | undefined {\n if (typeof value !== \"number\" || !Number.isFinite(value) || value < 0) {\n return undefined;\n }\n return Math.floor(value);\n}\n\nfunction summarizeUnknown(value: unknown): Record<string, unknown> {\n if (value === null) return { type: \"null\" };\n if (Array.isArray(value)) return { type: \"array\", itemCount: value.length };\n\n if (typeof value === \"object\") {\n return { type: \"object\", keyCount: countRecordKeys(value) ?? 0 };\n }\n if (typeof value === \"string\") {\n return { type: \"string\", length: value.length };\n }\n const valueType = typeof value;\n if (valueType === \"number\" || valueType === \"boolean\" || valueType === \"bigint\") {\n return { type: valueType };\n }\n if (valueType === \"undefined\") return { type: \"undefined\" };\n return { type: \"unknown\" };\n}\n\nfunction summarizeOptionalUnknown(value: unknown): Record<string, unknown> | undefined {\n return value === undefined ? undefined : summarizeUnknown(value);\n}\n\nfunction summarizeError(error: SpanError | null | undefined): PersistedInspectError | undefined {\n if (!error?.message) return undefined;\n return { message: error.message };\n}\n\nfunction summarizeUsage(usage: unknown): PersistedTokenUsage | undefined {\n if (typeof usage !== \"object\" || usage === null || Array.isArray(usage)) {\n return undefined;\n }\n\n const record = usage as Record<string, unknown>;\n const tokenUsage: PersistedTokenUsage = {};\n if (typeof record.input_tokens === \"number\" && Number.isFinite(record.input_tokens)) {\n tokenUsage.input = record.input_tokens;\n }\n if (typeof record.output_tokens === \"number\" && Number.isFinite(record.output_tokens)) {\n tokenUsage.output = record.output_tokens;\n }\n if (tokenUsage.input !== undefined || tokenUsage.output !== undefined) {\n tokenUsage.total = (tokenUsage.input ?? 0) + (tokenUsage.output ?? 0);\n }\n\n const details = record.details;\n if (typeof details === \"object\" && details !== null && !Array.isArray(details)) {\n const detailRecord = details as Record<string, unknown>;\n const cached = detailRecord.cached_tokens ?? detailRecord.cached_input_tokens;\n if (typeof cached === \"number\" && Number.isFinite(cached) && cached >= 0) {\n tokenUsage.cached = cached;\n }\n const cacheWrite =\n detailRecord.cache_creation_tokens ??\n detailRecord.cached_creation_tokens ??\n detailRecord.cache_write_tokens;\n if (\n typeof cacheWrite === \"number\" &&\n Number.isFinite(cacheWrite) &&\n cacheWrite >= 0\n ) {\n tokenUsage.cacheWrite = cacheWrite;\n }\n const reasoning =\n detailRecord.reasoning_tokens ?? detailRecord.output_tokens_details;\n if (typeof reasoning === \"number\" && Number.isFinite(reasoning) && reasoning >= 0) {\n tokenUsage.reasoning = reasoning;\n } else if (\n typeof reasoning === \"object\" &&\n reasoning !== null &&\n !Array.isArray(reasoning)\n ) {\n const nested = (reasoning as Record<string, unknown>).reasoning_tokens;\n if (typeof nested === \"number\" && Number.isFinite(nested) && nested >= 0) {\n tokenUsage.reasoning = nested;\n }\n }\n }\n\n const outputDetails = record.output_tokens_details;\n if (\n typeof outputDetails === \"object\" &&\n outputDetails !== null &&\n !Array.isArray(outputDetails)\n ) {\n const nested = (outputDetails as Record<string, unknown>).reasoning_tokens;\n if (\n typeof nested === \"number\" &&\n Number.isFinite(nested) &&\n nested >= 0 &&\n tokenUsage.reasoning === undefined\n ) {\n tokenUsage.reasoning = nested;\n }\n }\n\n return Object.keys(tokenUsage).length > 0 ? tokenUsage : undefined;\n}\n\nfunction spanKind(type: SpanDataType): PersistedInspectEvent[\"kind\"] {\n switch (type) {\n case \"agent\":\n return \"AGENT\";\n case \"generation\":\n case \"response\":\n case \"transcription\":\n case \"speech\":\n return \"LLM\";\n case \"function\":\n case \"mcp_tools\":\n return \"TOOL\";\n case \"handoff\":\n case \"guardrail\":\n return \"DECISION\";\n case \"custom\":\n case \"speech_group\":\n return \"LOGIC\";\n default:\n return \"LOGIC\";\n }\n}\n\nfunction spanName(data: SpanData): string {\n switch (data.type) {\n case \"agent\":\n case \"function\":\n case \"custom\":\n case \"guardrail\":\n return data.name;\n case \"generation\":\n return data.model ? `generation:${data.model}` : \"generation\";\n case \"response\":\n return data.response_id ? `response:${data.response_id}` : \"response\";\n case \"handoff\":\n return data.to_agent ? `handoff:${data.to_agent}` : \"handoff\";\n case \"mcp_tools\":\n return data.server ? `mcp-tools:${data.server}` : \"mcp-tools\";\n case \"transcription\":\n return data.model ? `transcription:${data.model}` : \"transcription\";\n case \"speech\":\n return data.model ? `speech:${data.model}` : \"speech\";\n case \"speech_group\":\n return \"speech-group\";\n default:\n return \"openai-agents-span\";\n }\n}\n\nfunction commonSpanAttributes(span: Span<SpanData>): Record<string, unknown> {\n return {\n legacyEvent: \"step_started\",\n stepId: span.spanId,\n stepType: mapSpanTypeToStepType(span.spanData.type),\n spanType: span.spanData.type,\n traceId: span.traceId,\n spanId: span.spanId,\n parentSpanId: span.parentId ?? undefined,\n traceMetadataKeyCount: countRecordKeys(span.traceMetadata),\n };\n}\n\nfunction specificSpanAttributes(data: SpanData): Record<string, unknown> {\n switch (data.type) {\n case \"agent\":\n return {\n agentName: data.name,\n handoffCount: data.handoffs?.length ?? 0,\n handoffNames: data.handoffs,\n toolCount: data.tools?.length ?? 0,\n toolNames: data.tools,\n outputType: data.output_type,\n };\n case \"function\":\n return {\n toolName: data.name,\n hasInput: data.input !== undefined,\n hasOutput: data.output !== undefined,\n inputSummary: summarizeUnknown(data.input),\n outputSummary: summarizeUnknown(data.output),\n mcpDataSummary: summarizeOptionalUnknown(data.mcp_data),\n };\n case \"generation\":\n return {\n model: data.model,\n modelConfigKeyCount: countRecordKeys(data.model_config),\n inputSummary: summarizeOptionalUnknown(data.input),\n outputSummary: summarizeOptionalUnknown(data.output),\n usageDetailsKeyCount: countRecordKeys(data.usage?.details),\n };\n case \"response\":\n return {\n responseId: data.response_id,\n inputSummary: summarizeOptionalUnknown(data._input),\n responseSummary: summarizeOptionalUnknown(data._response),\n };\n case \"handoff\":\n return {\n fromAgent: data.from_agent,\n toAgent: data.to_agent,\n };\n case \"custom\":\n return {\n customName: data.name,\n dataSummary: summarizeUnknown(data.data),\n };\n case \"guardrail\":\n return {\n guardrailName: data.name,\n triggered: data.triggered,\n };\n case \"mcp_tools\":\n return {\n server: data.server,\n toolCount: data.result?.length ?? 0,\n toolNames: data.result,\n };\n case \"transcription\":\n return {\n model: data.model,\n inputFormat: data.input.format,\n inputSummary: summarizeUnknown(data.input.data),\n outputSummary: summarizeOptionalUnknown(data.output),\n modelConfigKeyCount: countRecordKeys(data.model_config),\n };\n case \"speech\":\n return {\n model: data.model,\n inputSummary: summarizeOptionalUnknown(data.input),\n outputFormat: data.output.format,\n outputSummary: summarizeUnknown(data.output.data),\n modelConfigKeyCount: countRecordKeys(data.model_config),\n };\n case \"speech_group\":\n return {\n inputSummary: summarizeOptionalUnknown(data.input),\n };\n default:\n return {};\n }\n}\n\nfunction mapSpanTypeToStepType(type: SpanDataType): string {\n switch (type) {\n case \"generation\":\n case \"response\":\n case \"transcription\":\n case \"speech\":\n return \"llm\";\n case \"function\":\n case \"mcp_tools\":\n return \"tool\";\n case \"handoff\":\n case \"guardrail\":\n return \"decision\";\n case \"agent\":\n return \"logic\";\n case \"custom\":\n case \"speech_group\":\n return \"custom\";\n default:\n return \"logic\";\n }\n}\n\nfunction spanInputSummary(data: SpanData): unknown {\n switch (data.type) {\n case \"generation\":\n return summarizeOptionalUnknown(data.input);\n case \"function\":\n return summarizeUnknown(data.input);\n case \"response\":\n return summarizeOptionalUnknown(data._input);\n case \"custom\":\n return summarizeUnknown(data.data);\n case \"transcription\":\n return { format: data.input.format, ...summarizeUnknown(data.input.data) };\n case \"speech\":\n case \"speech_group\":\n return summarizeOptionalUnknown(data.input);\n default:\n return undefined;\n }\n}\n\nfunction spanOutputSummary(data: SpanData): unknown {\n switch (data.type) {\n case \"generation\":\n return summarizeOptionalUnknown(data.output);\n case \"function\":\n return summarizeUnknown(data.output);\n case \"response\":\n return summarizeOptionalUnknown(data._response);\n case \"guardrail\":\n return { triggered: data.triggered };\n case \"mcp_tools\":\n return { toolCount: data.result?.length ?? 0 };\n case \"transcription\":\n return summarizeOptionalUnknown(data.output);\n case \"speech\":\n return { format: data.output.format, ...summarizeUnknown(data.output.data) };\n default:\n return undefined;\n }\n}\n\n/**\n * Raw span fields eligible for bounded preview capture, keyed by the logical\n * preview name. Span types without a payload concept return `{}` so preview\n * mode does not report false \"field unavailable\" diagnostics for them.\n */\nfunction spanPreviewSources(\n data: SpanData,\n phase: \"start\" | \"end\",\n): Record<string, unknown> {\n const withPhase = (\n input: unknown,\n output: unknown,\n ): Record<string, unknown> =>\n phase === \"start\" ? { input } : { input, output };\n\n switch (data.type) {\n case \"generation\":\n return withPhase(data.input, data.output);\n case \"function\":\n return withPhase(data.input, data.output);\n case \"response\":\n return withPhase(data._input, data._response);\n case \"transcription\":\n return withPhase(data.input.data, data.output);\n case \"speech\":\n return withPhase(data.input, data.output.data);\n case \"custom\":\n return { input: data.data };\n case \"speech_group\":\n return { input: data.input };\n default:\n return {};\n }\n}\n\nfunction traceEventId(traceId: string): string {\n return `openai_agents_trace:${traceId}`;\n}\n\nfunction spanEventId(spanId: string): string {\n return `openai_agents_span:${spanId}`;\n}\n\nclass AgentInspectOpenAiAgentsTracingProcessor implements AgentInspectOpenAiAgentsProcessor {\n readonly installMode = \"setTraceProcessors\" as const;\n readonly localOnly = true as const;\n\n private readonly writer: TraceWriter | undefined;\n private readonly requestedCapture: AgentInspectOpenAiAgentsCaptureMode;\n private readonly preview: AdapterPreviewCapture;\n private readonly effectiveCapture: AgentInspectOpenAiAgentsCaptureMode;\n private readonly diagnostics: Omit<\n AgentInspectOpenAiAgentsDiagnostics,\n \"capture\"\n > = {\n writeFailures: 0,\n lifecycleWarnings: 0,\n flushFailures: 0,\n shutdownFailures: 0,\n runtimeMappingImplemented: true,\n };\n private readonly activeTraces = new Map<string, ActiveTrace>();\n private readonly activeSpans = new Map<string, ActiveSpan>();\n private closed = false;\n\n constructor(private readonly options: AgentInspectOpenAiAgentsOptions) {\n this.requestedCapture = options.capture ?? \"metadata-only\";\n this.preview = createAdapterPreviewCapture({\n capture: this.requestedCapture,\n redactionProfile: options.redactionProfile,\n maxPreviewChars: options.maxPreviewChars,\n onDiagnostic: options.onDiagnostic,\n });\n this.effectiveCapture = this.preview.capture;\n this.writer = options.writer ?? (options.traceDir ? fileWriter({ dir: options.traceDir }) : undefined);\n for (const key of [\n \"options\",\n \"writer\",\n \"requestedCapture\",\n \"preview\",\n \"effectiveCapture\",\n \"diagnostics\",\n \"activeTraces\",\n \"activeSpans\",\n \"closed\",\n ] as const) {\n Object.defineProperty(this, key, { enumerable: false });\n }\n this.recordCaptureOptionWarnings();\n }\n\n start(): void {\n // Local writer-backed processor has no export loop to start.\n }\n\n async onTraceStart(trace: Trace): Promise<void> {\n await this.handleLifecycle(\"onTraceStart\", async () => {\n if (this.closed) {\n this.recordLifecycleWarning(\"onTraceStart ignored because processor is shut down.\");\n return;\n }\n\n const startedAt = nowIso();\n const name = this.options.workflowName ?? trace.name ?? \"openai-agents-run\";\n const eventId = traceEventId(trace.traceId);\n this.activeTraces.set(trace.traceId, { eventId, startedAt, name });\n\n await this.write({\n schemaVersion: \"0.2\",\n eventId,\n runId: trace.traceId,\n kind: \"RUN\",\n name,\n status: \"running\",\n timestamp: startedAt,\n startedAt,\n confidence: \"explicit\",\n source: OPENAI_AGENTS_SOURCE,\n attributes: {\n legacyEvent: \"run_started\",\n installMode: this.installMode,\n capture: this.effectiveCapture,\n requestedCapture:\n this.requestedCapture === this.effectiveCapture\n ? undefined\n : this.requestedCapture,\n previewCaptureSupported: true,\n // Preview rows report the effective bound/profile, which the\n // `share` and `strict` profiles can lower below the request.\n redactionProfile: this.preview.previewEnabled\n ? this.preview.redactionProfile\n : this.options.redactionProfile,\n maxPreviewChars: this.preview.previewEnabled\n ? this.preview.maxPreviewChars\n : normalizeMaxPreviewChars(this.options.maxPreviewChars),\n groupId: trace.groupId ?? undefined,\n metadataKeyCount: countRecordKeys(trace.metadata),\n },\n trace: {\n traceId: trace.traceId,\n },\n });\n });\n }\n\n async onTraceEnd(trace: Trace): Promise<void> {\n await this.handleLifecycle(\"onTraceEnd\", async () => {\n if (this.closed) {\n this.recordLifecycleWarning(\"onTraceEnd ignored because processor is shut down.\");\n return;\n }\n\n const active = this.activeTraces.get(trace.traceId);\n if (!active) {\n this.recordLifecycleWarning(\n `onTraceEnd ignored because trace ${trace.traceId} has no matching start callback.`,\n );\n return;\n }\n\n const endedAt = nowIso();\n await this.write({\n schemaVersion: \"0.2\",\n eventId: active.eventId,\n runId: trace.traceId,\n kind: \"RUN\",\n name: active.name,\n status: \"ok\",\n timestamp: endedAt,\n startedAt: active.startedAt,\n endedAt,\n durationMs: durationMs(active.startedAt, endedAt),\n confidence: \"explicit\",\n source: OPENAI_AGENTS_SOURCE,\n attributes: {\n legacyEvent: \"run_completed\",\n installMode: this.installMode,\n groupId: trace.groupId ?? undefined,\n metadataKeyCount: countRecordKeys(trace.metadata),\n },\n trace: {\n traceId: trace.traceId,\n },\n });\n this.activeTraces.delete(trace.traceId);\n });\n }\n\n async onSpanStart(span: Span<SpanData>): Promise<void> {\n await this.handleLifecycle(\"onSpanStart\", async () => {\n if (this.closed) {\n this.recordLifecycleWarning(\"onSpanStart ignored because processor is shut down.\");\n return;\n }\n\n const startedAt = span.startedAt ?? nowIso();\n const eventId = spanEventId(span.spanId);\n const parentId = this.resolveParentEventId(span);\n const kind = spanKind(span.spanData.type);\n const name = spanName(span.spanData);\n this.activeSpans.set(span.spanId, {\n eventId,\n runId: span.traceId,\n parentId,\n startedAt,\n name,\n kind,\n });\n\n await this.write({\n schemaVersion: \"0.2\",\n eventId,\n runId: span.traceId,\n parentId,\n kind,\n name,\n status: \"running\",\n timestamp: startedAt,\n startedAt,\n confidence: \"explicit\",\n source: OPENAI_AGENTS_SOURCE,\n attributes: {\n ...commonSpanAttributes(span),\n ...specificSpanAttributes(span.spanData),\n ...this.previewAttributes(span, \"start\"),\n },\n inputSummary: spanInputSummary(span.spanData),\n tokenUsage: summarizeUsage(\n span.spanData.type === \"generation\" ? span.spanData.usage : undefined,\n ),\n trace: {\n traceId: span.traceId,\n spanId: span.spanId,\n parentSpanId: span.parentId ?? undefined,\n },\n });\n });\n }\n\n async onSpanEnd(span: Span<SpanData>): Promise<void> {\n await this.handleLifecycle(\"onSpanEnd\", async () => {\n if (this.closed) {\n this.recordLifecycleWarning(\"onSpanEnd ignored because processor is shut down.\");\n return;\n }\n\n const active = this.activeSpans.get(span.spanId);\n if (!active) {\n this.recordLifecycleWarning(\n `onSpanEnd ignored because span ${span.spanId} has no matching start callback.`,\n );\n return;\n }\n\n const endedAt = span.endedAt ?? nowIso();\n const error = summarizeError(span.error);\n await this.write({\n schemaVersion: \"0.2\",\n eventId: active.eventId,\n runId: active.runId,\n parentId: active.parentId,\n kind: active.kind,\n name: active.name,\n status: error ? \"error\" : \"ok\",\n timestamp: endedAt,\n startedAt: active.startedAt,\n endedAt,\n durationMs: durationMs(active.startedAt, endedAt),\n confidence: \"explicit\",\n source: OPENAI_AGENTS_SOURCE,\n attributes: {\n ...commonSpanAttributes(span),\n ...specificSpanAttributes(span.spanData),\n legacyEvent: \"step_completed\",\n errorDataSummary: summarizeOptionalUnknown(span.error?.data),\n ...this.previewAttributes(span, \"end\"),\n },\n inputSummary: spanInputSummary(span.spanData),\n outputSummary: spanOutputSummary(span.spanData),\n error,\n tokenUsage: summarizeUsage(\n span.spanData.type === \"generation\" ? span.spanData.usage : undefined,\n ),\n trace: {\n traceId: span.traceId,\n spanId: span.spanId,\n parentSpanId: span.parentId ?? undefined,\n },\n });\n this.activeSpans.delete(span.spanId);\n });\n }\n\n async forceFlush(): Promise<void> {\n try {\n await this.writer?.flush?.();\n } catch (error) {\n this.diagnostics.flushFailures += 1;\n this.diagnostics.lastError = normalizeError(error);\n }\n }\n\n async shutdown(_timeout?: number): Promise<void> {\n if (this.closed) return;\n try {\n await this.writer?.close?.();\n } catch (error) {\n this.diagnostics.shutdownFailures += 1;\n this.diagnostics.lastError = normalizeError(error);\n } finally {\n this.closed = true;\n this.activeTraces.clear();\n this.activeSpans.clear();\n }\n }\n\n getDiagnostics(): AgentInspectOpenAiAgentsDiagnostics {\n return { ...this.diagnostics, capture: this.preview.getDiagnostics() };\n }\n\n /** Bounded preview attributes for one span phase (empty unless enabled). */\n private previewAttributes(\n span: Span<SpanData>,\n phase: \"start\" | \"end\",\n ): Record<string, unknown> {\n if (!this.preview.previewEnabled) return {};\n return this.preview.applyPreviewFields(\n {},\n spanPreviewSources(span.spanData, phase),\n );\n }\n\n getWriterStats(): TraceWriterStats | undefined {\n return this.writer?.getStats?.();\n }\n\n private resolveParentEventId(span: Span<SpanData>): string | undefined {\n if (span.parentId) return spanEventId(span.parentId);\n return this.activeTraces.get(span.traceId)?.eventId;\n }\n\n private async handleLifecycle(\n callbackName: string,\n run: () => Promise<void>,\n ): Promise<void> {\n try {\n await run();\n } catch (error) {\n this.recordLifecycleWarning(`${callbackName}: ${normalizeError(error)}`);\n }\n }\n\n private recordLifecycleWarning(message: string): void {\n this.diagnostics.lifecycleWarnings += 1;\n this.diagnostics.lastWarning = message;\n }\n\n private recordCaptureOptionWarnings(): void {\n if (this.effectiveCapture === \"preview\") return;\n\n const previewOnlyOptions: string[] = [];\n if (this.options.redactionProfile !== undefined) previewOnlyOptions.push(\"redactionProfile\");\n if (this.options.maxPreviewChars !== undefined) previewOnlyOptions.push(\"maxPreviewChars\");\n\n if (previewOnlyOptions.length > 0) {\n this.recordLifecycleWarning(\n `OpenAI Agents preview-only options have no effect in metadata-only capture: ${previewOnlyOptions.join(\", \")}.`,\n );\n }\n }\n\n private async write(event: PersistedInspectEvent): Promise<void> {\n if (!this.writer) return;\n\n try {\n await this.writer.write(event);\n } catch (error) {\n this.diagnostics.writeFailures += 1;\n this.diagnostics.lastError = normalizeError(error);\n }\n }\n}\n\n/**\n * Create an AgentInspect OpenAI Agents JS tracing processor.\n *\n * @experimental Install the returned processor explicitly with replacement\n * semantics:\n *\n * ```ts\n * setTraceProcessors([agentInspectProcessor(options)]);\n * ```\n *\n * The processor does not call `setTraceProcessors()`, `addTraceProcessor()`,\n * OpenAI exporters, or network APIs on import or construction.\n */\nexport function agentInspectProcessor(\n options: AgentInspectOpenAiAgentsOptions = {},\n): AgentInspectOpenAiAgentsProcessor {\n return new AgentInspectOpenAiAgentsTracingProcessor(options);\n}\n"]}
1
+ {"version":3,"sources":["../src/index.ts"],"names":[],"mappings":"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","file":"index.mjs","sourcesContent":["import type {\n Span,\n SpanData,\n SpanError,\n Trace,\n TracingProcessor,\n} from \"@openai/agents\";\nimport { createAdapterPreviewCapture } from \"agent-inspect/advanced\";\nimport type {\n AdapterCaptureDiagnostics,\n AdapterDiagnosticListener,\n AdapterPreviewCapture,\n RedactionProfile,\n} from \"agent-inspect/advanced\";\nimport type {\n PersistedInspectError,\n PersistedInspectEvent,\n PersistedTokenUsage,\n} from \"agent-inspect/persisted\";\nimport { fileWriter } from \"agent-inspect/writers\";\nimport type { TraceWriter, TraceWriterStats } from \"agent-inspect/writers\";\n\n/**\n * Experimental capture mode for the OpenAI Agents JS adapter.\n *\n * `metadata-only` is the default. `preview` persists bounded, redacted span\n * input/output preview attributes through the shared adapter capture helper.\n *\n * @experimental This package is part of the framework adapter train.\n */\nexport type AgentInspectOpenAiAgentsCaptureMode = \"metadata-only\" | \"preview\";\n\n/**\n * Options for the experimental OpenAI Agents JS tracing processor.\n *\n * @experimental Install processors with `setTraceProcessors([...])`\n * replacement behavior for local-only tracing. Do not use `addTraceProcessor()`\n * as the default path because it preserves the SDK's default exporter.\n */\nexport interface AgentInspectOpenAiAgentsOptions {\n /**\n * Explicit local writer for persisted v0.2 AgentInspect events.\n */\n writer?: TraceWriter;\n\n /**\n * Convenience local trace directory for writer-owned persistence.\n */\n traceDir?: string;\n\n /**\n * Optional workflow name overriding the SDK trace name.\n */\n workflowName?: string;\n\n /**\n * Capture policy. Defaults to metadata-only.\n *\n * @experimental `preview` persists bounded, redacted span input/output\n * previews. It never persists full span content.\n */\n capture?: AgentInspectOpenAiAgentsCaptureMode;\n\n /**\n * Redaction profile applied to preview attributes before persistence.\n * `share` and `strict` also cap `maxPreviewChars`.\n *\n * @experimental Effective only when `capture: \"preview\"`.\n */\n redactionProfile?: RedactionProfile;\n\n /**\n * Upper bound for each serialized preview attribute. Defaults to 200.\n *\n * @experimental Effective only when `capture: \"preview\"`.\n */\n maxPreviewChars?: number;\n\n /**\n * Receives bounded capture diagnostics such as\n * `AI_CAPTURE_FIELD_UNAVAILABLE`. Listener failures are isolated.\n *\n * @experimental\n */\n onDiagnostic?: AdapterDiagnosticListener;\n}\n\nexport interface AgentInspectOpenAiAgentsDiagnostics {\n writeFailures: number;\n lifecycleWarnings: number;\n flushFailures: number;\n shutdownFailures: number;\n lastError?: string;\n lastWarning?: string;\n runtimeMappingImplemented: true;\n /** Shared preview-capture counters (`@experimental`). */\n capture: AdapterCaptureDiagnostics;\n}\n\nexport interface AgentInspectOpenAiAgentsProcessor extends TracingProcessor {\n /**\n * Documents the local-only replacement install mode for this adapter.\n *\n * `addTraceProcessor()` remains an advanced user-owned choice outside this\n * package because it can preserve existing/default exporters.\n */\n readonly installMode: \"setTraceProcessors\";\n\n /**\n * This processor never installs itself globally and performs no network I/O.\n */\n readonly localOnly: true;\n\n getDiagnostics(): AgentInspectOpenAiAgentsDiagnostics;\n getWriterStats(): TraceWriterStats | undefined;\n}\n\ntype ActiveTrace = {\n eventId: string;\n startedAt: string;\n name: string;\n};\n\ntype ActiveSpan = {\n eventId: string;\n runId: string;\n parentId?: string;\n startedAt: string;\n name: string;\n kind: PersistedInspectEvent[\"kind\"];\n};\n\ntype SpanDataType = SpanData[\"type\"];\n\nconst OPENAI_AGENTS_SOURCE = {\n type: \"adapter\",\n name: \"@agent-inspect/openai-agents\",\n version: \"experimental\",\n} as const;\n\nfunction nowIso(): string {\n return new Date().toISOString();\n}\n\nfunction normalizeError(error: unknown): string {\n if (error instanceof Error && error.message.trim() !== \"\") {\n return error.message;\n }\n if (typeof error === \"string\" && error.trim() !== \"\") {\n return error;\n }\n return \"Unknown OpenAI Agents processor error\";\n}\n\nfunction durationMs(startedAt: string, endedAt: string): number | undefined {\n const started = Date.parse(startedAt);\n const ended = Date.parse(endedAt);\n if (!Number.isFinite(started) || !Number.isFinite(ended)) return undefined;\n return Math.max(0, ended - started);\n}\n\nfunction countRecordKeys(value: unknown): number | undefined {\n if (typeof value !== \"object\" || value === null || Array.isArray(value)) {\n return undefined;\n }\n return Object.keys(value).length;\n}\n\nfunction normalizeMaxPreviewChars(value: unknown): number | undefined {\n if (typeof value !== \"number\" || !Number.isFinite(value) || value < 0) {\n return undefined;\n }\n return Math.floor(value);\n}\n\nfunction summarizeUnknown(value: unknown): Record<string, unknown> {\n if (value === null) return { type: \"null\" };\n if (Array.isArray(value)) return { type: \"array\", itemCount: value.length };\n\n if (typeof value === \"object\") {\n return { type: \"object\", keyCount: countRecordKeys(value) ?? 0 };\n }\n if (typeof value === \"string\") {\n return { type: \"string\", length: value.length };\n }\n const valueType = typeof value;\n if (valueType === \"number\" || valueType === \"boolean\" || valueType === \"bigint\") {\n return { type: valueType };\n }\n if (valueType === \"undefined\") return { type: \"undefined\" };\n return { type: \"unknown\" };\n}\n\nfunction summarizeOptionalUnknown(value: unknown): Record<string, unknown> | undefined {\n return value === undefined ? undefined : summarizeUnknown(value);\n}\n\nfunction summarizeError(error: SpanError | null | undefined): PersistedInspectError | undefined {\n if (!error?.message) return undefined;\n return { message: error.message };\n}\n\nfunction readFiniteNonNegative(value: unknown): number | undefined {\n return typeof value === \"number\" && Number.isFinite(value) && value >= 0\n ? value\n : undefined;\n}\n\nfunction applyCachedAndReasoningFromDetails(\n tokenUsage: PersistedTokenUsage,\n detailRecord: Record<string, unknown>,\n): void {\n if (tokenUsage.cached === undefined) {\n const cached = readFiniteNonNegative(\n detailRecord.cached_tokens ?? detailRecord.cached_input_tokens,\n );\n if (cached !== undefined) {\n tokenUsage.cached = cached;\n }\n }\n\n if (tokenUsage.cacheWrite === undefined) {\n const cacheWrite = readFiniteNonNegative(\n detailRecord.cache_creation_tokens ??\n detailRecord.cached_creation_tokens ??\n detailRecord.cache_write_tokens,\n );\n if (cacheWrite !== undefined) {\n tokenUsage.cacheWrite = cacheWrite;\n }\n }\n\n if (tokenUsage.reasoning !== undefined) {\n return;\n }\n const reasoning =\n detailRecord.reasoning_tokens ?? detailRecord.output_tokens_details;\n const asNumber = readFiniteNonNegative(reasoning);\n if (asNumber !== undefined) {\n tokenUsage.reasoning = asNumber;\n return;\n }\n if (typeof reasoning === \"object\" && reasoning !== null && !Array.isArray(reasoning)) {\n const nested = readFiniteNonNegative(\n (reasoning as Record<string, unknown>).reasoning_tokens,\n );\n if (nested !== undefined) {\n tokenUsage.reasoning = nested;\n }\n }\n}\n\nfunction summarizeUsage(usage: unknown): PersistedTokenUsage | undefined {\n if (typeof usage !== \"object\" || usage === null || Array.isArray(usage)) {\n return undefined;\n }\n\n const record = usage as Record<string, unknown>;\n const tokenUsage: PersistedTokenUsage = {};\n if (typeof record.input_tokens === \"number\" && Number.isFinite(record.input_tokens)) {\n tokenUsage.input = record.input_tokens;\n }\n if (typeof record.output_tokens === \"number\" && Number.isFinite(record.output_tokens)) {\n tokenUsage.output = record.output_tokens;\n }\n if (tokenUsage.input !== undefined || tokenUsage.output !== undefined) {\n tokenUsage.total = (tokenUsage.input ?? 0) + (tokenUsage.output ?? 0);\n }\n\n // Real OpenAI Agents / Responses SDK shape.\n const inputDetails = record.input_tokens_details;\n if (\n typeof inputDetails === \"object\" &&\n inputDetails !== null &&\n !Array.isArray(inputDetails)\n ) {\n applyCachedAndReasoningFromDetails(\n tokenUsage,\n inputDetails as Record<string, unknown>,\n );\n }\n\n // Legacy / synthetic alias used by older fixtures.\n const details = record.details;\n if (typeof details === \"object\" && details !== null && !Array.isArray(details)) {\n applyCachedAndReasoningFromDetails(tokenUsage, details as Record<string, unknown>);\n }\n\n const outputDetails = record.output_tokens_details;\n if (\n typeof outputDetails === \"object\" &&\n outputDetails !== null &&\n !Array.isArray(outputDetails)\n ) {\n const nested = readFiniteNonNegative(\n (outputDetails as Record<string, unknown>).reasoning_tokens,\n );\n if (nested !== undefined && tokenUsage.reasoning === undefined) {\n tokenUsage.reasoning = nested;\n }\n }\n\n return Object.keys(tokenUsage).length > 0 ? tokenUsage : undefined;\n}\n\nfunction spanKind(type: SpanDataType): PersistedInspectEvent[\"kind\"] {\n switch (type) {\n case \"agent\":\n return \"AGENT\";\n case \"generation\":\n case \"response\":\n case \"transcription\":\n case \"speech\":\n return \"LLM\";\n case \"function\":\n case \"mcp_tools\":\n return \"TOOL\";\n case \"handoff\":\n case \"guardrail\":\n return \"DECISION\";\n case \"custom\":\n case \"speech_group\":\n return \"LOGIC\";\n default:\n return \"LOGIC\";\n }\n}\n\nfunction spanName(data: SpanData): string {\n switch (data.type) {\n case \"agent\":\n case \"function\":\n case \"custom\":\n case \"guardrail\":\n return data.name;\n case \"generation\":\n return data.model ? `generation:${data.model}` : \"generation\";\n case \"response\":\n return data.response_id ? `response:${data.response_id}` : \"response\";\n case \"handoff\":\n return data.to_agent ? `handoff:${data.to_agent}` : \"handoff\";\n case \"mcp_tools\":\n return data.server ? `mcp-tools:${data.server}` : \"mcp-tools\";\n case \"transcription\":\n return data.model ? `transcription:${data.model}` : \"transcription\";\n case \"speech\":\n return data.model ? `speech:${data.model}` : \"speech\";\n case \"speech_group\":\n return \"speech-group\";\n default:\n return \"openai-agents-span\";\n }\n}\n\nfunction commonSpanAttributes(span: Span<SpanData>): Record<string, unknown> {\n return {\n legacyEvent: \"step_started\",\n stepId: span.spanId,\n stepType: mapSpanTypeToStepType(span.spanData.type),\n spanType: span.spanData.type,\n traceId: span.traceId,\n spanId: span.spanId,\n parentSpanId: span.parentId ?? undefined,\n traceMetadataKeyCount: countRecordKeys(span.traceMetadata),\n };\n}\n\nfunction specificSpanAttributes(data: SpanData): Record<string, unknown> {\n switch (data.type) {\n case \"agent\":\n return {\n agentName: data.name,\n handoffCount: data.handoffs?.length ?? 0,\n handoffNames: data.handoffs,\n toolCount: data.tools?.length ?? 0,\n toolNames: data.tools,\n outputType: data.output_type,\n };\n case \"function\":\n return {\n toolName: data.name,\n hasInput: data.input !== undefined,\n hasOutput: data.output !== undefined,\n inputSummary: summarizeUnknown(data.input),\n outputSummary: summarizeUnknown(data.output),\n mcpDataSummary: summarizeOptionalUnknown(data.mcp_data),\n };\n case \"generation\":\n return {\n model: data.model,\n modelConfigKeyCount: countRecordKeys(data.model_config),\n inputSummary: summarizeOptionalUnknown(data.input),\n outputSummary: summarizeOptionalUnknown(data.output),\n usageDetailsKeyCount: countRecordKeys(data.usage?.details),\n };\n case \"response\":\n return {\n responseId: data.response_id,\n inputSummary: summarizeOptionalUnknown(data._input),\n responseSummary: summarizeOptionalUnknown(data._response),\n };\n case \"handoff\":\n return {\n fromAgent: data.from_agent,\n toAgent: data.to_agent,\n };\n case \"custom\":\n return {\n customName: data.name,\n dataSummary: summarizeUnknown(data.data),\n };\n case \"guardrail\":\n return {\n guardrailName: data.name,\n triggered: data.triggered,\n };\n case \"mcp_tools\":\n return {\n server: data.server,\n toolCount: data.result?.length ?? 0,\n toolNames: data.result,\n };\n case \"transcription\":\n return {\n model: data.model,\n inputFormat: data.input.format,\n inputSummary: summarizeUnknown(data.input.data),\n outputSummary: summarizeOptionalUnknown(data.output),\n modelConfigKeyCount: countRecordKeys(data.model_config),\n };\n case \"speech\":\n return {\n model: data.model,\n inputSummary: summarizeOptionalUnknown(data.input),\n outputFormat: data.output.format,\n outputSummary: summarizeUnknown(data.output.data),\n modelConfigKeyCount: countRecordKeys(data.model_config),\n };\n case \"speech_group\":\n return {\n inputSummary: summarizeOptionalUnknown(data.input),\n };\n default:\n return {};\n }\n}\n\nfunction mapSpanTypeToStepType(type: SpanDataType): string {\n switch (type) {\n case \"generation\":\n case \"response\":\n case \"transcription\":\n case \"speech\":\n return \"llm\";\n case \"function\":\n case \"mcp_tools\":\n return \"tool\";\n case \"handoff\":\n case \"guardrail\":\n return \"decision\";\n case \"agent\":\n return \"logic\";\n case \"custom\":\n case \"speech_group\":\n return \"custom\";\n default:\n return \"logic\";\n }\n}\n\nfunction spanInputSummary(data: SpanData): unknown {\n switch (data.type) {\n case \"generation\":\n return summarizeOptionalUnknown(data.input);\n case \"function\":\n return summarizeUnknown(data.input);\n case \"response\":\n return summarizeOptionalUnknown(data._input);\n case \"custom\":\n return summarizeUnknown(data.data);\n case \"transcription\":\n return { format: data.input.format, ...summarizeUnknown(data.input.data) };\n case \"speech\":\n case \"speech_group\":\n return summarizeOptionalUnknown(data.input);\n default:\n return undefined;\n }\n}\n\nfunction spanOutputSummary(data: SpanData): unknown {\n switch (data.type) {\n case \"generation\":\n return summarizeOptionalUnknown(data.output);\n case \"function\":\n return summarizeUnknown(data.output);\n case \"response\":\n return summarizeOptionalUnknown(data._response);\n case \"guardrail\":\n return { triggered: data.triggered };\n case \"mcp_tools\":\n return { toolCount: data.result?.length ?? 0 };\n case \"transcription\":\n return summarizeOptionalUnknown(data.output);\n case \"speech\":\n return { format: data.output.format, ...summarizeUnknown(data.output.data) };\n default:\n return undefined;\n }\n}\n\n/**\n * Raw span fields eligible for bounded preview capture, keyed by the logical\n * preview name. Span types without a payload concept return `{}` so preview\n * mode does not report false \"field unavailable\" diagnostics for them.\n */\nfunction spanPreviewSources(\n data: SpanData,\n phase: \"start\" | \"end\",\n): Record<string, unknown> {\n const withPhase = (\n input: unknown,\n output: unknown,\n ): Record<string, unknown> =>\n phase === \"start\" ? { input } : { input, output };\n\n switch (data.type) {\n case \"generation\":\n return withPhase(data.input, data.output);\n case \"function\":\n return withPhase(data.input, data.output);\n case \"response\":\n return withPhase(data._input, data._response);\n case \"transcription\":\n return withPhase(data.input.data, data.output);\n case \"speech\":\n return withPhase(data.input, data.output.data);\n case \"custom\":\n return { input: data.data };\n case \"speech_group\":\n return { input: data.input };\n default:\n return {};\n }\n}\n\nfunction traceEventId(traceId: string): string {\n return `openai_agents_trace:${traceId}`;\n}\n\nfunction spanEventId(spanId: string): string {\n return `openai_agents_span:${spanId}`;\n}\n\nclass AgentInspectOpenAiAgentsTracingProcessor implements AgentInspectOpenAiAgentsProcessor {\n readonly installMode = \"setTraceProcessors\" as const;\n readonly localOnly = true as const;\n\n private readonly writer: TraceWriter | undefined;\n private readonly requestedCapture: AgentInspectOpenAiAgentsCaptureMode;\n private readonly preview: AdapterPreviewCapture;\n private readonly effectiveCapture: AgentInspectOpenAiAgentsCaptureMode;\n private readonly diagnostics: Omit<\n AgentInspectOpenAiAgentsDiagnostics,\n \"capture\"\n > = {\n writeFailures: 0,\n lifecycleWarnings: 0,\n flushFailures: 0,\n shutdownFailures: 0,\n runtimeMappingImplemented: true,\n };\n private readonly activeTraces = new Map<string, ActiveTrace>();\n private readonly activeSpans = new Map<string, ActiveSpan>();\n private closed = false;\n\n constructor(private readonly options: AgentInspectOpenAiAgentsOptions) {\n this.requestedCapture = options.capture ?? \"metadata-only\";\n this.preview = createAdapterPreviewCapture({\n capture: this.requestedCapture,\n redactionProfile: options.redactionProfile,\n maxPreviewChars: options.maxPreviewChars,\n onDiagnostic: options.onDiagnostic,\n });\n this.effectiveCapture = this.preview.capture;\n this.writer = options.writer ?? (options.traceDir ? fileWriter({ dir: options.traceDir }) : undefined);\n for (const key of [\n \"options\",\n \"writer\",\n \"requestedCapture\",\n \"preview\",\n \"effectiveCapture\",\n \"diagnostics\",\n \"activeTraces\",\n \"activeSpans\",\n \"closed\",\n ] as const) {\n Object.defineProperty(this, key, { enumerable: false });\n }\n this.recordCaptureOptionWarnings();\n }\n\n start(): void {\n // Local writer-backed processor has no export loop to start.\n }\n\n async onTraceStart(trace: Trace): Promise<void> {\n await this.handleLifecycle(\"onTraceStart\", async () => {\n if (this.closed) {\n this.recordLifecycleWarning(\"onTraceStart ignored because processor is shut down.\");\n return;\n }\n\n const startedAt = nowIso();\n const name = this.options.workflowName ?? trace.name ?? \"openai-agents-run\";\n const eventId = traceEventId(trace.traceId);\n this.activeTraces.set(trace.traceId, { eventId, startedAt, name });\n\n await this.write({\n schemaVersion: \"0.2\",\n eventId,\n runId: trace.traceId,\n kind: \"RUN\",\n name,\n status: \"running\",\n timestamp: startedAt,\n startedAt,\n confidence: \"explicit\",\n source: OPENAI_AGENTS_SOURCE,\n attributes: {\n legacyEvent: \"run_started\",\n installMode: this.installMode,\n capture: this.effectiveCapture,\n requestedCapture:\n this.requestedCapture === this.effectiveCapture\n ? undefined\n : this.requestedCapture,\n previewCaptureSupported: true,\n // Preview rows report the effective bound/profile, which the\n // `share` and `strict` profiles can lower below the request.\n redactionProfile: this.preview.previewEnabled\n ? this.preview.redactionProfile\n : this.options.redactionProfile,\n maxPreviewChars: this.preview.previewEnabled\n ? this.preview.maxPreviewChars\n : normalizeMaxPreviewChars(this.options.maxPreviewChars),\n groupId: trace.groupId ?? undefined,\n metadataKeyCount: countRecordKeys(trace.metadata),\n },\n trace: {\n traceId: trace.traceId,\n },\n });\n });\n }\n\n async onTraceEnd(trace: Trace): Promise<void> {\n await this.handleLifecycle(\"onTraceEnd\", async () => {\n if (this.closed) {\n this.recordLifecycleWarning(\"onTraceEnd ignored because processor is shut down.\");\n return;\n }\n\n const active = this.activeTraces.get(trace.traceId);\n if (!active) {\n this.recordLifecycleWarning(\n `onTraceEnd ignored because trace ${trace.traceId} has no matching start callback.`,\n );\n return;\n }\n\n const endedAt = nowIso();\n await this.write({\n schemaVersion: \"0.2\",\n eventId: active.eventId,\n runId: trace.traceId,\n kind: \"RUN\",\n name: active.name,\n status: \"ok\",\n timestamp: endedAt,\n startedAt: active.startedAt,\n endedAt,\n durationMs: durationMs(active.startedAt, endedAt),\n confidence: \"explicit\",\n source: OPENAI_AGENTS_SOURCE,\n attributes: {\n legacyEvent: \"run_completed\",\n installMode: this.installMode,\n groupId: trace.groupId ?? undefined,\n metadataKeyCount: countRecordKeys(trace.metadata),\n },\n trace: {\n traceId: trace.traceId,\n },\n });\n this.activeTraces.delete(trace.traceId);\n });\n }\n\n async onSpanStart(span: Span<SpanData>): Promise<void> {\n await this.handleLifecycle(\"onSpanStart\", async () => {\n if (this.closed) {\n this.recordLifecycleWarning(\"onSpanStart ignored because processor is shut down.\");\n return;\n }\n\n const startedAt = span.startedAt ?? nowIso();\n const eventId = spanEventId(span.spanId);\n const parentId = this.resolveParentEventId(span);\n const kind = spanKind(span.spanData.type);\n const name = spanName(span.spanData);\n this.activeSpans.set(span.spanId, {\n eventId,\n runId: span.traceId,\n parentId,\n startedAt,\n name,\n kind,\n });\n\n await this.write({\n schemaVersion: \"0.2\",\n eventId,\n runId: span.traceId,\n parentId,\n kind,\n name,\n status: \"running\",\n timestamp: startedAt,\n startedAt,\n confidence: \"explicit\",\n source: OPENAI_AGENTS_SOURCE,\n attributes: {\n ...commonSpanAttributes(span),\n ...specificSpanAttributes(span.spanData),\n ...this.previewAttributes(span, \"start\"),\n },\n inputSummary: spanInputSummary(span.spanData),\n tokenUsage: summarizeUsage(\n span.spanData.type === \"generation\" ? span.spanData.usage : undefined,\n ),\n trace: {\n traceId: span.traceId,\n spanId: span.spanId,\n parentSpanId: span.parentId ?? undefined,\n },\n });\n });\n }\n\n async onSpanEnd(span: Span<SpanData>): Promise<void> {\n await this.handleLifecycle(\"onSpanEnd\", async () => {\n if (this.closed) {\n this.recordLifecycleWarning(\"onSpanEnd ignored because processor is shut down.\");\n return;\n }\n\n const active = this.activeSpans.get(span.spanId);\n if (!active) {\n this.recordLifecycleWarning(\n `onSpanEnd ignored because span ${span.spanId} has no matching start callback.`,\n );\n return;\n }\n\n const endedAt = span.endedAt ?? nowIso();\n const error = summarizeError(span.error);\n await this.write({\n schemaVersion: \"0.2\",\n eventId: active.eventId,\n runId: active.runId,\n parentId: active.parentId,\n kind: active.kind,\n name: active.name,\n status: error ? \"error\" : \"ok\",\n timestamp: endedAt,\n startedAt: active.startedAt,\n endedAt,\n durationMs: durationMs(active.startedAt, endedAt),\n confidence: \"explicit\",\n source: OPENAI_AGENTS_SOURCE,\n attributes: {\n ...commonSpanAttributes(span),\n ...specificSpanAttributes(span.spanData),\n legacyEvent: \"step_completed\",\n errorDataSummary: summarizeOptionalUnknown(span.error?.data),\n ...this.previewAttributes(span, \"end\"),\n },\n inputSummary: spanInputSummary(span.spanData),\n outputSummary: spanOutputSummary(span.spanData),\n error,\n tokenUsage: summarizeUsage(\n span.spanData.type === \"generation\" ? span.spanData.usage : undefined,\n ),\n trace: {\n traceId: span.traceId,\n spanId: span.spanId,\n parentSpanId: span.parentId ?? undefined,\n },\n });\n this.activeSpans.delete(span.spanId);\n });\n }\n\n async forceFlush(): Promise<void> {\n try {\n await this.writer?.flush?.();\n } catch (error) {\n this.diagnostics.flushFailures += 1;\n this.diagnostics.lastError = normalizeError(error);\n }\n }\n\n async shutdown(_timeout?: number): Promise<void> {\n if (this.closed) return;\n try {\n await this.writer?.close?.();\n } catch (error) {\n this.diagnostics.shutdownFailures += 1;\n this.diagnostics.lastError = normalizeError(error);\n } finally {\n this.closed = true;\n this.activeTraces.clear();\n this.activeSpans.clear();\n }\n }\n\n getDiagnostics(): AgentInspectOpenAiAgentsDiagnostics {\n return { ...this.diagnostics, capture: this.preview.getDiagnostics() };\n }\n\n /** Bounded preview attributes for one span phase (empty unless enabled). */\n private previewAttributes(\n span: Span<SpanData>,\n phase: \"start\" | \"end\",\n ): Record<string, unknown> {\n if (!this.preview.previewEnabled) return {};\n return this.preview.applyPreviewFields(\n {},\n spanPreviewSources(span.spanData, phase),\n );\n }\n\n getWriterStats(): TraceWriterStats | undefined {\n return this.writer?.getStats?.();\n }\n\n private resolveParentEventId(span: Span<SpanData>): string | undefined {\n if (span.parentId) return spanEventId(span.parentId);\n return this.activeTraces.get(span.traceId)?.eventId;\n }\n\n private async handleLifecycle(\n callbackName: string,\n run: () => Promise<void>,\n ): Promise<void> {\n try {\n await run();\n } catch (error) {\n this.recordLifecycleWarning(`${callbackName}: ${normalizeError(error)}`);\n }\n }\n\n private recordLifecycleWarning(message: string): void {\n this.diagnostics.lifecycleWarnings += 1;\n this.diagnostics.lastWarning = message;\n }\n\n private recordCaptureOptionWarnings(): void {\n if (this.effectiveCapture === \"preview\") return;\n\n const previewOnlyOptions: string[] = [];\n if (this.options.redactionProfile !== undefined) previewOnlyOptions.push(\"redactionProfile\");\n if (this.options.maxPreviewChars !== undefined) previewOnlyOptions.push(\"maxPreviewChars\");\n\n if (previewOnlyOptions.length > 0) {\n this.recordLifecycleWarning(\n `OpenAI Agents preview-only options have no effect in metadata-only capture: ${previewOnlyOptions.join(\", \")}.`,\n );\n }\n }\n\n private async write(event: PersistedInspectEvent): Promise<void> {\n if (!this.writer) return;\n\n try {\n await this.writer.write(event);\n } catch (error) {\n this.diagnostics.writeFailures += 1;\n this.diagnostics.lastError = normalizeError(error);\n }\n }\n}\n\n/**\n * Create an AgentInspect OpenAI Agents JS tracing processor.\n *\n * @experimental Install the returned processor explicitly with replacement\n * semantics:\n *\n * ```ts\n * setTraceProcessors([agentInspectProcessor(options)]);\n * ```\n *\n * The processor does not call `setTraceProcessors()`, `addTraceProcessor()`,\n * OpenAI exporters, or network APIs on import or construction.\n */\nexport function agentInspectProcessor(\n options: AgentInspectOpenAiAgentsOptions = {},\n): AgentInspectOpenAiAgentsProcessor {\n return new AgentInspectOpenAiAgentsTracingProcessor(options);\n}\n"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@agent-inspect/openai-agents",
3
- "version": "6.29.1",
3
+ "version": "6.29.2",
4
4
  "license": "MIT",
5
5
  "type": "module",
6
6
  "description": "OpenAI Agents JS processor integration for AgentInspect local traces and TraceContract checks",
@@ -37,7 +37,7 @@
37
37
  "@openai/agents": "^0.12.0"
38
38
  },
39
39
  "dependencies": {
40
- "agent-inspect": "6.29.1"
40
+ "agent-inspect": "6.29.2"
41
41
  },
42
42
  "publishConfig": {
43
43
  "access": "public"