@agent-inspect/openai-agents 6.17.7 → 6.18.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -44,14 +44,15 @@ Use **`setTraceProcessors` replacement** for local-only mode. Avoid `addTracePro
44
44
  - Local JSONL files only
45
45
  - AgentInspect does not upload traces to OpenAI
46
46
  - Metadata-only by default
47
- - `capture: "preview"` is accepted for compatibility but currently falls back to metadata-only and emits one `AI_ADAPTER_PREVIEW_NOT_AVAILABLE` console warning per processor instance
47
+ - `capture: "preview"` is opt-in and persists bounded `inputPreview` / `outputPreview` span attributes, redacted before they reach disk and truncated at `maxPreviewChars`; there is no full-content mode
48
+ - Redaction is key-based, so a preview can still contain sensitive free text — run `agent-inspect redact` before sharing
48
49
 
49
50
  ## API
50
51
 
51
52
  | Export | Purpose |
52
53
  | ------ | ------- |
53
54
  | `agentInspectOpenAiAgents(options)` | `TracingProcessor` for local persistence |
54
- | `getDiagnostics()` | Warnings for misconfiguration |
55
+ | `getDiagnostics()` | Warnings for misconfiguration plus resolved capture mode and preview counters |
55
56
 
56
57
  ## CLI
57
58
 
@@ -66,7 +67,8 @@ Use **`setTraceProcessors` replacement** for local-only mode. Avoid `addTracePro
66
67
 
67
68
  - **Duplicate export:** Using `addTraceProcessor` keeps SDK default exporter — use replacement mode for local-only
68
69
  - **Handoffs/sessions:** Mapped to run metadata; see docs for session IDs
69
- - **Preview mode warning:** `capture: "preview"` is not implemented yet; AgentInspect emits `AI_ADAPTER_PREVIEW_NOT_AVAILABLE` once and keeps metadata-only persistence
70
+ - **Empty previews in preview mode:** the span type carries no payload field (handoff, guardrail, agent), or the SDK omitted it. Payload-bearing spans report `AI_CAPTURE_FIELD_UNAVAILABLE` through `onDiagnostic` and `getDiagnostics().capture`
71
+ - **Previews look cut off:** they are bounded by `maxPreviewChars`, which the `share` and `strict` redaction profiles cap further
70
72
 
71
73
 
72
74
  ## Version
package/dist/index.cjs CHANGED
@@ -1,5 +1,6 @@
1
1
  'use strict';
2
2
 
3
+ var advanced = require('agent-inspect/advanced');
3
4
  var writers = require('agent-inspect/writers');
4
5
 
5
6
  // packages/openai-agents/src/index.ts
@@ -285,6 +286,27 @@ function spanOutputSummary(data) {
285
286
  return void 0;
286
287
  }
287
288
  }
289
+ function spanPreviewSources(data, phase) {
290
+ const withPhase = (input, output) => phase === "start" ? { input } : { input, output };
291
+ switch (data.type) {
292
+ case "generation":
293
+ return withPhase(data.input, data.output);
294
+ case "function":
295
+ return withPhase(data.input, data.output);
296
+ case "response":
297
+ return withPhase(data._input, data._response);
298
+ case "transcription":
299
+ return withPhase(data.input.data, data.output);
300
+ case "speech":
301
+ return withPhase(data.input, data.output.data);
302
+ case "custom":
303
+ return { input: data.data };
304
+ case "speech_group":
305
+ return { input: data.input };
306
+ default:
307
+ return {};
308
+ }
309
+ }
288
310
  function traceEventId(traceId) {
289
311
  return `openai_agents_trace:${traceId}`;
290
312
  }
@@ -295,17 +317,24 @@ var AgentInspectOpenAiAgentsTracingProcessor = class {
295
317
  constructor(options) {
296
318
  this.options = options;
297
319
  this.requestedCapture = options.capture ?? "metadata-only";
320
+ this.preview = advanced.createAdapterPreviewCapture({
321
+ capture: this.requestedCapture,
322
+ redactionProfile: options.redactionProfile,
323
+ maxPreviewChars: options.maxPreviewChars,
324
+ onDiagnostic: options.onDiagnostic
325
+ });
326
+ this.effectiveCapture = this.preview.capture;
298
327
  this.writer = options.writer ?? (options.traceDir ? writers.fileWriter({ dir: options.traceDir }) : void 0);
299
328
  for (const key of [
300
329
  "options",
301
330
  "writer",
302
331
  "requestedCapture",
332
+ "preview",
303
333
  "effectiveCapture",
304
334
  "diagnostics",
305
335
  "activeTraces",
306
336
  "activeSpans",
307
- "closed",
308
- "previewCapabilityWarned"
337
+ "closed"
309
338
  ]) {
310
339
  Object.defineProperty(this, key, { enumerable: false });
311
340
  }
@@ -316,7 +345,8 @@ var AgentInspectOpenAiAgentsTracingProcessor = class {
316
345
  localOnly = true;
317
346
  writer;
318
347
  requestedCapture;
319
- effectiveCapture = "metadata-only";
348
+ preview;
349
+ effectiveCapture;
320
350
  diagnostics = {
321
351
  writeFailures: 0,
322
352
  lifecycleWarnings: 0,
@@ -355,9 +385,11 @@ var AgentInspectOpenAiAgentsTracingProcessor = class {
355
385
  installMode: this.installMode,
356
386
  capture: this.effectiveCapture,
357
387
  requestedCapture: this.requestedCapture === this.effectiveCapture ? void 0 : this.requestedCapture,
358
- previewCaptureSupported: this.requestedCapture === "preview" ? false : void 0,
359
- redactionProfile: this.options.redactionProfile,
360
- maxPreviewChars: normalizeMaxPreviewChars(this.options.maxPreviewChars),
388
+ previewCaptureSupported: true,
389
+ // Preview rows report the effective bound/profile, which the
390
+ // `share` and `strict` profiles can lower below the request.
391
+ redactionProfile: this.preview.previewEnabled ? this.preview.redactionProfile : this.options.redactionProfile,
392
+ maxPreviewChars: this.preview.previewEnabled ? this.preview.maxPreviewChars : normalizeMaxPreviewChars(this.options.maxPreviewChars),
361
393
  groupId: trace.groupId ?? void 0,
362
394
  metadataKeyCount: countRecordKeys(trace.metadata)
363
395
  },
@@ -440,7 +472,8 @@ var AgentInspectOpenAiAgentsTracingProcessor = class {
440
472
  source: OPENAI_AGENTS_SOURCE,
441
473
  attributes: {
442
474
  ...commonSpanAttributes(span),
443
- ...specificSpanAttributes(span.spanData)
475
+ ...specificSpanAttributes(span.spanData),
476
+ ...this.previewAttributes(span, "start")
444
477
  },
445
478
  inputSummary: spanInputSummary(span.spanData),
446
479
  tokenUsage: summarizeUsage(
@@ -487,7 +520,8 @@ var AgentInspectOpenAiAgentsTracingProcessor = class {
487
520
  ...commonSpanAttributes(span),
488
521
  ...specificSpanAttributes(span.spanData),
489
522
  legacyEvent: "step_completed",
490
- errorDataSummary: summarizeOptionalUnknown(span.error?.data)
523
+ errorDataSummary: summarizeOptionalUnknown(span.error?.data),
524
+ ...this.previewAttributes(span, "end")
491
525
  },
492
526
  inputSummary: spanInputSummary(span.spanData),
493
527
  outputSummary: spanOutputSummary(span.spanData),
@@ -526,7 +560,15 @@ var AgentInspectOpenAiAgentsTracingProcessor = class {
526
560
  }
527
561
  }
528
562
  getDiagnostics() {
529
- return { ...this.diagnostics };
563
+ return { ...this.diagnostics, capture: this.preview.getDiagnostics() };
564
+ }
565
+ /** Bounded preview attributes for one span phase (empty unless enabled). */
566
+ previewAttributes(span, phase) {
567
+ if (!this.preview.previewEnabled) return {};
568
+ return this.preview.applyPreviewFields(
569
+ {},
570
+ spanPreviewSources(span.spanData, phase)
571
+ );
530
572
  }
531
573
  getWriterStats() {
532
574
  return this.writer?.getStats?.();
@@ -546,23 +588,11 @@ var AgentInspectOpenAiAgentsTracingProcessor = class {
546
588
  this.diagnostics.lifecycleWarnings += 1;
547
589
  this.diagnostics.lastWarning = message;
548
590
  }
549
- previewCapabilityWarned = false;
550
591
  recordCaptureOptionWarnings() {
592
+ if (this.effectiveCapture === "preview") return;
551
593
  const previewOnlyOptions = [];
552
- if (this.requestedCapture === "preview") previewOnlyOptions.push("capture");
553
594
  if (this.options.redactionProfile !== void 0) previewOnlyOptions.push("redactionProfile");
554
595
  if (this.options.maxPreviewChars !== void 0) previewOnlyOptions.push("maxPreviewChars");
555
- if (this.requestedCapture === "preview") {
556
- const message = `AI_ADAPTER_PREVIEW_NOT_AVAILABLE: capture:"preview" was requested, but this adapter currently persists metadata-only. Effective capture: metadata-only. No preview content was written. See docs/ADAPTERS.md.`;
557
- this.recordLifecycleWarning(
558
- `OpenAI Agents preview capture is not supported yet; falling back to metadata-only capture. Unsupported options: ${previewOnlyOptions.join(", ")}.`
559
- );
560
- if (!this.previewCapabilityWarned) {
561
- this.previewCapabilityWarned = true;
562
- console.warn(`[agent-inspect:openai-agents] ${message}`);
563
- }
564
- return;
565
- }
566
596
  if (previewOnlyOptions.length > 0) {
567
597
  this.recordLifecycleWarning(
568
598
  `OpenAI Agents preview-only options have no effect in metadata-only capture: ${previewOnlyOptions.join(", ")}.`
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/index.ts"],"names":["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 type {\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 * @experimental This package is part of the framework adapter train. `preview` is\n * currently rejected with diagnostics and falls back to metadata-only capture.\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` is not implemented yet; requesting it records a\n * diagnostic warning and keeps metadata-only persistence.\n */\n capture?: AgentInspectOpenAiAgentsCaptureMode;\n\n /**\n * Redaction profile for future preview capture.\n *\n * @experimental Currently diagnostic-only because the processor persists\n * metadata summaries and never writes raw span content by default.\n */\n redactionProfile?: RedactionProfile;\n\n /**\n * Bounds future preview capture.\n *\n * @experimental Currently diagnostic-only because `preview` falls back to\n * metadata-only capture.\n */\n maxPreviewChars?: number;\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}\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)) {\n tokenUsage.cached = cached;\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\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 effectiveCapture: \"metadata-only\" = \"metadata-only\";\n private readonly diagnostics: AgentInspectOpenAiAgentsDiagnostics = {\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.writer = options.writer ?? (options.traceDir ? fileWriter({ dir: options.traceDir }) : undefined);\n for (const key of [\n \"options\",\n \"writer\",\n \"requestedCapture\",\n \"effectiveCapture\",\n \"diagnostics\",\n \"activeTraces\",\n \"activeSpans\",\n \"closed\",\n \"previewCapabilityWarned\",\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:\n this.requestedCapture === \"preview\" ? false : undefined,\n redactionProfile: this.options.redactionProfile,\n maxPreviewChars: 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 },\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 },\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 };\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 previewCapabilityWarned = false;\n\n private recordCaptureOptionWarnings(): void {\n const previewOnlyOptions: string[] = [];\n if (this.requestedCapture === \"preview\") previewOnlyOptions.push(\"capture\");\n if (this.options.redactionProfile !== undefined) previewOnlyOptions.push(\"redactionProfile\");\n if (this.options.maxPreviewChars !== undefined) previewOnlyOptions.push(\"maxPreviewChars\");\n\n if (this.requestedCapture === \"preview\") {\n const message =\n `AI_ADAPTER_PREVIEW_NOT_AVAILABLE: capture:\"preview\" was requested, but this adapter currently persists metadata-only. Effective capture: metadata-only. No preview content was written. See docs/ADAPTERS.md.`;\n this.recordLifecycleWarning(\n `OpenAI Agents preview capture is not supported yet; falling back to metadata-only capture. Unsupported options: ${previewOnlyOptions.join(\", \")}.`,\n );\n if (!this.previewCapabilityWarned) {\n this.previewCapabilityWarned = true;\n console.warn(`[agent-inspect:openai-agents] ${message}`);\n }\n return;\n }\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 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)) {\n tokenUsage.cached = cached;\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.d.cts CHANGED
@@ -4,11 +4,46 @@ import { TraceWriter, TraceWriterStats } from 'agent-inspect/writers';
4
4
  /** Named redaction presets for trace writing and share-safe exports (v1.3.0+). */
5
5
  type RedactionProfile = "local" | "share" | "strict";
6
6
 
7
+ /**
8
+ * Capture policy shared by the official adapters.
9
+ *
10
+ * `metadata-only` is the default everywhere and never persists framework
11
+ * payload content. `preview` opts into bounded, redacted previews.
12
+ */
13
+ type AdapterCaptureMode = "metadata-only" | "preview";
14
+ /** Stable diagnostic codes emitted by shared preview capture. */
15
+ declare const ADAPTER_CAPTURE_DIAGNOSTIC_CODES: readonly ["AI_CAPTURE_FIELD_UNAVAILABLE", "AI_CAPTURE_PREVIEW_TRUNCATED", "AI_CAPTURE_PREVIEW_REDACTED"];
16
+ type AdapterCaptureDiagnosticCode = (typeof ADAPTER_CAPTURE_DIAGNOSTIC_CODES)[number];
17
+ /** One bounded diagnostic. Never contains preview content or filesystem paths. */
18
+ interface AdapterCaptureDiagnostic {
19
+ readonly code: AdapterCaptureDiagnosticCode;
20
+ readonly message: string;
21
+ /** Persisted attribute name the diagnostic refers to (e.g. `inputPreview`). */
22
+ readonly field: string;
23
+ readonly capture: AdapterCaptureMode;
24
+ }
25
+ /** Optional consumer hook for adapter capture diagnostics. */
26
+ type AdapterDiagnosticListener = (diagnostic: AdapterCaptureDiagnostic) => void;
27
+ /** Bounded capture counters for adapter `getDiagnostics()` surfaces. */
28
+ interface AdapterCaptureDiagnostics {
29
+ readonly capture: AdapterCaptureMode;
30
+ readonly redactionProfile: RedactionProfile;
31
+ readonly maxPreviewChars: number;
32
+ readonly previewFieldsCaptured: number;
33
+ readonly previewFieldsUnavailable: number;
34
+ readonly previewFieldsTruncated: number;
35
+ readonly previewFieldsRedacted: number;
36
+ readonly lastDiagnosticCode?: AdapterCaptureDiagnosticCode;
37
+ readonly lastDiagnosticMessage?: string;
38
+ }
39
+
7
40
  /**
8
41
  * Experimental capture mode for the OpenAI Agents JS adapter.
9
42
  *
10
- * @experimental This package is part of the framework adapter train. `preview` is
11
- * currently rejected with diagnostics and falls back to metadata-only capture.
43
+ * `metadata-only` is the default. `preview` persists bounded, redacted span
44
+ * input/output preview attributes through the shared adapter capture helper.
45
+ *
46
+ * @experimental This package is part of the framework adapter train.
12
47
  */
13
48
  type AgentInspectOpenAiAgentsCaptureMode = "metadata-only" | "preview";
14
49
  /**
@@ -34,24 +69,30 @@ interface AgentInspectOpenAiAgentsOptions {
34
69
  /**
35
70
  * Capture policy. Defaults to metadata-only.
36
71
  *
37
- * @experimental `preview` is not implemented yet; requesting it records a
38
- * diagnostic warning and keeps metadata-only persistence.
72
+ * @experimental `preview` persists bounded, redacted span input/output
73
+ * previews. It never persists full span content.
39
74
  */
40
75
  capture?: AgentInspectOpenAiAgentsCaptureMode;
41
76
  /**
42
- * Redaction profile for future preview capture.
77
+ * Redaction profile applied to preview attributes before persistence.
78
+ * `share` and `strict` also cap `maxPreviewChars`.
43
79
  *
44
- * @experimental Currently diagnostic-only because the processor persists
45
- * metadata summaries and never writes raw span content by default.
80
+ * @experimental Effective only when `capture: "preview"`.
46
81
  */
47
82
  redactionProfile?: RedactionProfile;
48
83
  /**
49
- * Bounds future preview capture.
84
+ * Upper bound for each serialized preview attribute. Defaults to 200.
50
85
  *
51
- * @experimental Currently diagnostic-only because `preview` falls back to
52
- * metadata-only capture.
86
+ * @experimental Effective only when `capture: "preview"`.
53
87
  */
54
88
  maxPreviewChars?: number;
89
+ /**
90
+ * Receives bounded capture diagnostics such as
91
+ * `AI_CAPTURE_FIELD_UNAVAILABLE`. Listener failures are isolated.
92
+ *
93
+ * @experimental
94
+ */
95
+ onDiagnostic?: AdapterDiagnosticListener;
55
96
  }
56
97
  interface AgentInspectOpenAiAgentsDiagnostics {
57
98
  writeFailures: number;
@@ -61,6 +102,8 @@ interface AgentInspectOpenAiAgentsDiagnostics {
61
102
  lastError?: string;
62
103
  lastWarning?: string;
63
104
  runtimeMappingImplemented: true;
105
+ /** Shared preview-capture counters (`@experimental`). */
106
+ capture: AdapterCaptureDiagnostics;
64
107
  }
65
108
  interface AgentInspectOpenAiAgentsProcessor extends TracingProcessor {
66
109
  /**
package/dist/index.d.ts CHANGED
@@ -4,11 +4,46 @@ import { TraceWriter, TraceWriterStats } from 'agent-inspect/writers';
4
4
  /** Named redaction presets for trace writing and share-safe exports (v1.3.0+). */
5
5
  type RedactionProfile = "local" | "share" | "strict";
6
6
 
7
+ /**
8
+ * Capture policy shared by the official adapters.
9
+ *
10
+ * `metadata-only` is the default everywhere and never persists framework
11
+ * payload content. `preview` opts into bounded, redacted previews.
12
+ */
13
+ type AdapterCaptureMode = "metadata-only" | "preview";
14
+ /** Stable diagnostic codes emitted by shared preview capture. */
15
+ declare const ADAPTER_CAPTURE_DIAGNOSTIC_CODES: readonly ["AI_CAPTURE_FIELD_UNAVAILABLE", "AI_CAPTURE_PREVIEW_TRUNCATED", "AI_CAPTURE_PREVIEW_REDACTED"];
16
+ type AdapterCaptureDiagnosticCode = (typeof ADAPTER_CAPTURE_DIAGNOSTIC_CODES)[number];
17
+ /** One bounded diagnostic. Never contains preview content or filesystem paths. */
18
+ interface AdapterCaptureDiagnostic {
19
+ readonly code: AdapterCaptureDiagnosticCode;
20
+ readonly message: string;
21
+ /** Persisted attribute name the diagnostic refers to (e.g. `inputPreview`). */
22
+ readonly field: string;
23
+ readonly capture: AdapterCaptureMode;
24
+ }
25
+ /** Optional consumer hook for adapter capture diagnostics. */
26
+ type AdapterDiagnosticListener = (diagnostic: AdapterCaptureDiagnostic) => void;
27
+ /** Bounded capture counters for adapter `getDiagnostics()` surfaces. */
28
+ interface AdapterCaptureDiagnostics {
29
+ readonly capture: AdapterCaptureMode;
30
+ readonly redactionProfile: RedactionProfile;
31
+ readonly maxPreviewChars: number;
32
+ readonly previewFieldsCaptured: number;
33
+ readonly previewFieldsUnavailable: number;
34
+ readonly previewFieldsTruncated: number;
35
+ readonly previewFieldsRedacted: number;
36
+ readonly lastDiagnosticCode?: AdapterCaptureDiagnosticCode;
37
+ readonly lastDiagnosticMessage?: string;
38
+ }
39
+
7
40
  /**
8
41
  * Experimental capture mode for the OpenAI Agents JS adapter.
9
42
  *
10
- * @experimental This package is part of the framework adapter train. `preview` is
11
- * currently rejected with diagnostics and falls back to metadata-only capture.
43
+ * `metadata-only` is the default. `preview` persists bounded, redacted span
44
+ * input/output preview attributes through the shared adapter capture helper.
45
+ *
46
+ * @experimental This package is part of the framework adapter train.
12
47
  */
13
48
  type AgentInspectOpenAiAgentsCaptureMode = "metadata-only" | "preview";
14
49
  /**
@@ -34,24 +69,30 @@ interface AgentInspectOpenAiAgentsOptions {
34
69
  /**
35
70
  * Capture policy. Defaults to metadata-only.
36
71
  *
37
- * @experimental `preview` is not implemented yet; requesting it records a
38
- * diagnostic warning and keeps metadata-only persistence.
72
+ * @experimental `preview` persists bounded, redacted span input/output
73
+ * previews. It never persists full span content.
39
74
  */
40
75
  capture?: AgentInspectOpenAiAgentsCaptureMode;
41
76
  /**
42
- * Redaction profile for future preview capture.
77
+ * Redaction profile applied to preview attributes before persistence.
78
+ * `share` and `strict` also cap `maxPreviewChars`.
43
79
  *
44
- * @experimental Currently diagnostic-only because the processor persists
45
- * metadata summaries and never writes raw span content by default.
80
+ * @experimental Effective only when `capture: "preview"`.
46
81
  */
47
82
  redactionProfile?: RedactionProfile;
48
83
  /**
49
- * Bounds future preview capture.
84
+ * Upper bound for each serialized preview attribute. Defaults to 200.
50
85
  *
51
- * @experimental Currently diagnostic-only because `preview` falls back to
52
- * metadata-only capture.
86
+ * @experimental Effective only when `capture: "preview"`.
53
87
  */
54
88
  maxPreviewChars?: number;
89
+ /**
90
+ * Receives bounded capture diagnostics such as
91
+ * `AI_CAPTURE_FIELD_UNAVAILABLE`. Listener failures are isolated.
92
+ *
93
+ * @experimental
94
+ */
95
+ onDiagnostic?: AdapterDiagnosticListener;
55
96
  }
56
97
  interface AgentInspectOpenAiAgentsDiagnostics {
57
98
  writeFailures: number;
@@ -61,6 +102,8 @@ interface AgentInspectOpenAiAgentsDiagnostics {
61
102
  lastError?: string;
62
103
  lastWarning?: string;
63
104
  runtimeMappingImplemented: true;
105
+ /** Shared preview-capture counters (`@experimental`). */
106
+ capture: AdapterCaptureDiagnostics;
64
107
  }
65
108
  interface AgentInspectOpenAiAgentsProcessor extends TracingProcessor {
66
109
  /**
package/dist/index.mjs CHANGED
@@ -1,3 +1,4 @@
1
+ import { createAdapterPreviewCapture } from 'agent-inspect/advanced';
1
2
  import { fileWriter } from 'agent-inspect/writers';
2
3
 
3
4
  // packages/openai-agents/src/index.ts
@@ -283,6 +284,27 @@ function spanOutputSummary(data) {
283
284
  return void 0;
284
285
  }
285
286
  }
287
+ function spanPreviewSources(data, phase) {
288
+ const withPhase = (input, output) => phase === "start" ? { input } : { input, output };
289
+ switch (data.type) {
290
+ case "generation":
291
+ return withPhase(data.input, data.output);
292
+ case "function":
293
+ return withPhase(data.input, data.output);
294
+ case "response":
295
+ return withPhase(data._input, data._response);
296
+ case "transcription":
297
+ return withPhase(data.input.data, data.output);
298
+ case "speech":
299
+ return withPhase(data.input, data.output.data);
300
+ case "custom":
301
+ return { input: data.data };
302
+ case "speech_group":
303
+ return { input: data.input };
304
+ default:
305
+ return {};
306
+ }
307
+ }
286
308
  function traceEventId(traceId) {
287
309
  return `openai_agents_trace:${traceId}`;
288
310
  }
@@ -293,17 +315,24 @@ var AgentInspectOpenAiAgentsTracingProcessor = class {
293
315
  constructor(options) {
294
316
  this.options = options;
295
317
  this.requestedCapture = options.capture ?? "metadata-only";
318
+ this.preview = createAdapterPreviewCapture({
319
+ capture: this.requestedCapture,
320
+ redactionProfile: options.redactionProfile,
321
+ maxPreviewChars: options.maxPreviewChars,
322
+ onDiagnostic: options.onDiagnostic
323
+ });
324
+ this.effectiveCapture = this.preview.capture;
296
325
  this.writer = options.writer ?? (options.traceDir ? fileWriter({ dir: options.traceDir }) : void 0);
297
326
  for (const key of [
298
327
  "options",
299
328
  "writer",
300
329
  "requestedCapture",
330
+ "preview",
301
331
  "effectiveCapture",
302
332
  "diagnostics",
303
333
  "activeTraces",
304
334
  "activeSpans",
305
- "closed",
306
- "previewCapabilityWarned"
335
+ "closed"
307
336
  ]) {
308
337
  Object.defineProperty(this, key, { enumerable: false });
309
338
  }
@@ -314,7 +343,8 @@ var AgentInspectOpenAiAgentsTracingProcessor = class {
314
343
  localOnly = true;
315
344
  writer;
316
345
  requestedCapture;
317
- effectiveCapture = "metadata-only";
346
+ preview;
347
+ effectiveCapture;
318
348
  diagnostics = {
319
349
  writeFailures: 0,
320
350
  lifecycleWarnings: 0,
@@ -353,9 +383,11 @@ var AgentInspectOpenAiAgentsTracingProcessor = class {
353
383
  installMode: this.installMode,
354
384
  capture: this.effectiveCapture,
355
385
  requestedCapture: this.requestedCapture === this.effectiveCapture ? void 0 : this.requestedCapture,
356
- previewCaptureSupported: this.requestedCapture === "preview" ? false : void 0,
357
- redactionProfile: this.options.redactionProfile,
358
- maxPreviewChars: normalizeMaxPreviewChars(this.options.maxPreviewChars),
386
+ previewCaptureSupported: true,
387
+ // Preview rows report the effective bound/profile, which the
388
+ // `share` and `strict` profiles can lower below the request.
389
+ redactionProfile: this.preview.previewEnabled ? this.preview.redactionProfile : this.options.redactionProfile,
390
+ maxPreviewChars: this.preview.previewEnabled ? this.preview.maxPreviewChars : normalizeMaxPreviewChars(this.options.maxPreviewChars),
359
391
  groupId: trace.groupId ?? void 0,
360
392
  metadataKeyCount: countRecordKeys(trace.metadata)
361
393
  },
@@ -438,7 +470,8 @@ var AgentInspectOpenAiAgentsTracingProcessor = class {
438
470
  source: OPENAI_AGENTS_SOURCE,
439
471
  attributes: {
440
472
  ...commonSpanAttributes(span),
441
- ...specificSpanAttributes(span.spanData)
473
+ ...specificSpanAttributes(span.spanData),
474
+ ...this.previewAttributes(span, "start")
442
475
  },
443
476
  inputSummary: spanInputSummary(span.spanData),
444
477
  tokenUsage: summarizeUsage(
@@ -485,7 +518,8 @@ var AgentInspectOpenAiAgentsTracingProcessor = class {
485
518
  ...commonSpanAttributes(span),
486
519
  ...specificSpanAttributes(span.spanData),
487
520
  legacyEvent: "step_completed",
488
- errorDataSummary: summarizeOptionalUnknown(span.error?.data)
521
+ errorDataSummary: summarizeOptionalUnknown(span.error?.data),
522
+ ...this.previewAttributes(span, "end")
489
523
  },
490
524
  inputSummary: spanInputSummary(span.spanData),
491
525
  outputSummary: spanOutputSummary(span.spanData),
@@ -524,7 +558,15 @@ var AgentInspectOpenAiAgentsTracingProcessor = class {
524
558
  }
525
559
  }
526
560
  getDiagnostics() {
527
- return { ...this.diagnostics };
561
+ return { ...this.diagnostics, capture: this.preview.getDiagnostics() };
562
+ }
563
+ /** Bounded preview attributes for one span phase (empty unless enabled). */
564
+ previewAttributes(span, phase) {
565
+ if (!this.preview.previewEnabled) return {};
566
+ return this.preview.applyPreviewFields(
567
+ {},
568
+ spanPreviewSources(span.spanData, phase)
569
+ );
528
570
  }
529
571
  getWriterStats() {
530
572
  return this.writer?.getStats?.();
@@ -544,23 +586,11 @@ var AgentInspectOpenAiAgentsTracingProcessor = class {
544
586
  this.diagnostics.lifecycleWarnings += 1;
545
587
  this.diagnostics.lastWarning = message;
546
588
  }
547
- previewCapabilityWarned = false;
548
589
  recordCaptureOptionWarnings() {
590
+ if (this.effectiveCapture === "preview") return;
549
591
  const previewOnlyOptions = [];
550
- if (this.requestedCapture === "preview") previewOnlyOptions.push("capture");
551
592
  if (this.options.redactionProfile !== void 0) previewOnlyOptions.push("redactionProfile");
552
593
  if (this.options.maxPreviewChars !== void 0) previewOnlyOptions.push("maxPreviewChars");
553
- if (this.requestedCapture === "preview") {
554
- const message = `AI_ADAPTER_PREVIEW_NOT_AVAILABLE: capture:"preview" was requested, but this adapter currently persists metadata-only. Effective capture: metadata-only. No preview content was written. See docs/ADAPTERS.md.`;
555
- this.recordLifecycleWarning(
556
- `OpenAI Agents preview capture is not supported yet; falling back to metadata-only capture. Unsupported options: ${previewOnlyOptions.join(", ")}.`
557
- );
558
- if (!this.previewCapabilityWarned) {
559
- this.previewCapabilityWarned = true;
560
- console.warn(`[agent-inspect:openai-agents] ${message}`);
561
- }
562
- return;
563
- }
564
594
  if (previewOnlyOptions.length > 0) {
565
595
  this.recordLifecycleWarning(
566
596
  `OpenAI Agents preview-only options have no effect in metadata-only capture: ${previewOnlyOptions.join(", ")}.`
@@ -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 type {\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 * @experimental This package is part of the framework adapter train. `preview` is\n * currently rejected with diagnostics and falls back to metadata-only capture.\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` is not implemented yet; requesting it records a\n * diagnostic warning and keeps metadata-only persistence.\n */\n capture?: AgentInspectOpenAiAgentsCaptureMode;\n\n /**\n * Redaction profile for future preview capture.\n *\n * @experimental Currently diagnostic-only because the processor persists\n * metadata summaries and never writes raw span content by default.\n */\n redactionProfile?: RedactionProfile;\n\n /**\n * Bounds future preview capture.\n *\n * @experimental Currently diagnostic-only because `preview` falls back to\n * metadata-only capture.\n */\n maxPreviewChars?: number;\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}\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)) {\n tokenUsage.cached = cached;\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\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 effectiveCapture: \"metadata-only\" = \"metadata-only\";\n private readonly diagnostics: AgentInspectOpenAiAgentsDiagnostics = {\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.writer = options.writer ?? (options.traceDir ? fileWriter({ dir: options.traceDir }) : undefined);\n for (const key of [\n \"options\",\n \"writer\",\n \"requestedCapture\",\n \"effectiveCapture\",\n \"diagnostics\",\n \"activeTraces\",\n \"activeSpans\",\n \"closed\",\n \"previewCapabilityWarned\",\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:\n this.requestedCapture === \"preview\" ? false : undefined,\n redactionProfile: this.options.redactionProfile,\n maxPreviewChars: 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 },\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 },\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 };\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 previewCapabilityWarned = false;\n\n private recordCaptureOptionWarnings(): void {\n const previewOnlyOptions: string[] = [];\n if (this.requestedCapture === \"preview\") previewOnlyOptions.push(\"capture\");\n if (this.options.redactionProfile !== undefined) previewOnlyOptions.push(\"redactionProfile\");\n if (this.options.maxPreviewChars !== undefined) previewOnlyOptions.push(\"maxPreviewChars\");\n\n if (this.requestedCapture === \"preview\") {\n const message =\n `AI_ADAPTER_PREVIEW_NOT_AVAILABLE: capture:\"preview\" was requested, but this adapter currently persists metadata-only. Effective capture: metadata-only. No preview content was written. See docs/ADAPTERS.md.`;\n this.recordLifecycleWarning(\n `OpenAI Agents preview capture is not supported yet; falling back to metadata-only capture. Unsupported options: ${previewOnlyOptions.join(\", \")}.`,\n );\n if (!this.previewCapabilityWarned) {\n this.previewCapabilityWarned = true;\n console.warn(`[agent-inspect:openai-agents] ${message}`);\n }\n return;\n }\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 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)) {\n tokenUsage.cached = cached;\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.17.7",
3
+ "version": "6.18.0",
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.17.7"
40
+ "agent-inspect": "6.18.0"
41
41
  },
42
42
  "publishConfig": {
43
43
  "access": "public"