@agent-inspect/ai-sdk 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
@@ -52,7 +52,8 @@ const result = await generateText({
52
52
  - Writes JSONL under `.agent-inspect/` only
53
53
  - No network calls from AgentInspect
54
54
  - Default capture: metadata-only
55
- - `capture: "preview"` is accepted for compatibility but currently falls back to metadata-only and emits one `AI_ADAPTER_PREVIEW_NOT_AVAILABLE` console warning per integration instance
55
+ - `capture: "preview"` is opt-in and persists bounded `*Preview` attributes, redacted before they reach disk and truncated at `maxPreviewChars`; there is no full-content mode
56
+ - Redaction is key-based, so a preview can still contain sensitive free text — run `agent-inspect redact` before sharing
56
57
 
57
58
  ## API
58
59
 
@@ -61,7 +62,7 @@ const result = await generateText({
61
62
  | `agentInspect(options)` | Telemetry integration factory |
62
63
  | `getTelemetryHandlers()` | Spread into AI SDK call |
63
64
  | `getTelemetryMetadata()` | Safe metadata for telemetry block |
64
- | `getDiagnostics()` | Local warnings (e.g. preview mode) |
65
+ | `getDiagnostics()` | Local warnings plus resolved capture mode and preview counters |
65
66
 
66
67
  ## CLI
67
68
 
@@ -76,7 +77,8 @@ const result = await generateText({
76
77
  ## Troubleshooting
77
78
 
78
79
  - **No trace events:** Ensure `experimental_telemetry.isEnabled: true` and handlers are spread
79
- - **Preview mode warning:** `capture: "preview"` is not implemented yet; AgentInspect emits `AI_ADAPTER_PREVIEW_NOT_AVAILABLE` once and keeps metadata-only persistence
80
+ - **Empty previews in preview mode:** the AI SDK did not provide the field for that step. AgentInspect reports `AI_CAPTURE_FIELD_UNAVAILABLE` through `onDiagnostic` and `getDiagnostics().capture`
81
+ - **Previews look cut off:** they are bounded by `maxPreviewChars`, which the `share` and `strict` redaction profiles cap further
80
82
 
81
83
 
82
84
  ## Version
package/dist/index.cjs CHANGED
@@ -1,6 +1,7 @@
1
1
  'use strict';
2
2
 
3
3
  var ai = require('ai');
4
+ var advanced = require('agent-inspect/advanced');
4
5
  var writers = require('agent-inspect/writers');
5
6
 
6
7
  // packages/ai-sdk/src/index.ts
@@ -109,13 +110,21 @@ var AgentInspectAiSdkTelemetryIntegration = class {
109
110
  constructor(options) {
110
111
  this.options = options;
111
112
  this.requestedCapture = options.capture ?? "metadata-only";
113
+ this.preview = advanced.createAdapterPreviewCapture({
114
+ capture: this.requestedCapture,
115
+ redactionProfile: options.redactionProfile,
116
+ maxPreviewChars: options.maxPreviewChars,
117
+ onDiagnostic: options.onDiagnostic
118
+ });
119
+ this.effectiveCapture = this.preview.capture;
112
120
  this.writer = options.writer ?? (options.traceDir ? writers.fileWriter({ dir: options.traceDir }) : void 0);
113
121
  this.recordCaptureOptionWarnings();
114
122
  }
115
123
  options;
116
124
  writer;
117
125
  requestedCapture;
118
- effectiveCapture = "metadata-only";
126
+ preview;
127
+ effectiveCapture;
119
128
  diagnostics = {
120
129
  writeFailures: 0,
121
130
  lifecycleWarnings: 0,
@@ -125,7 +134,11 @@ var AgentInspectAiSdkTelemetryIntegration = class {
125
134
  activeRun;
126
135
  suspendedReason;
127
136
  getDiagnostics() {
128
- return { ...this.diagnostics };
137
+ return { ...this.diagnostics, capture: this.preview.getDiagnostics() };
138
+ }
139
+ /** Bounded preview attributes for one lifecycle event (empty unless enabled). */
140
+ previewAttributes(fields) {
141
+ return this.preview.applyPreviewFields({}, fields);
129
142
  }
130
143
  async onStart(event) {
131
144
  await this.handleLifecycle("onStart", async () => {
@@ -165,15 +178,20 @@ var AgentInspectAiSdkTelemetryIntegration = class {
165
178
  functionId: event.functionId,
166
179
  capture: this.effectiveCapture,
167
180
  requestedCapture: this.requestedCapture === this.effectiveCapture ? void 0 : this.requestedCapture,
168
- previewCaptureSupported: this.requestedCapture === "preview" ? false : void 0,
169
- redactionProfile: this.options.redactionProfile,
170
- maxPreviewChars: normalizeMaxPreviewChars(this.options.maxPreviewChars),
181
+ previewCaptureSupported: true,
182
+ // Preview rows report the effective bound/profile, which the
183
+ // `share` and `strict` profiles can lower below the request.
184
+ redactionProfile: this.preview.previewEnabled ? this.preview.redactionProfile : this.options.redactionProfile,
185
+ maxPreviewChars: this.preview.previewEnabled ? this.preview.maxPreviewChars : normalizeMaxPreviewChars(this.options.maxPreviewChars),
171
186
  recordInputsRequired: false,
172
187
  recordOutputsRequired: false,
173
188
  toolCount: countRecordKeys(event.tools),
174
189
  hasPrompt: event.prompt !== void 0,
175
190
  hasMessages: event.messages !== void 0,
176
- metadataKeyCount: countRecordKeys(event.metadata)
191
+ metadataKeyCount: countRecordKeys(event.metadata),
192
+ ...this.previewAttributes({
193
+ input: event.prompt ?? event.messages
194
+ })
177
195
  }
178
196
  });
179
197
  });
@@ -211,7 +229,8 @@ var AgentInspectAiSdkTelemetryIntegration = class {
211
229
  activeToolCount: event.activeTools?.length,
212
230
  toolCount: countRecordKeys(event.tools),
213
231
  messageCount: event.messages.length,
214
- metadataKeyCount: countRecordKeys(event.metadata)
232
+ metadataKeyCount: countRecordKeys(event.metadata),
233
+ ...this.previewAttributes({ input: event.messages })
215
234
  }
216
235
  });
217
236
  });
@@ -256,7 +275,8 @@ var AgentInspectAiSdkTelemetryIntegration = class {
256
275
  responseId: event.response.id,
257
276
  responseModelId: event.response.modelId,
258
277
  responseTimestamp: event.response.timestamp?.toISOString(),
259
- metadataKeyCount: countRecordKeys(event.metadata)
278
+ metadataKeyCount: countRecordKeys(event.metadata),
279
+ ...this.previewAttributes({ output: event.text })
260
280
  },
261
281
  tokenUsage: summarizeUsage(event.usage),
262
282
  outputSummary: {
@@ -315,7 +335,8 @@ var AgentInspectAiSdkTelemetryIntegration = class {
315
335
  messageCount: event.messages.length,
316
336
  metadataKeyCount: countRecordKeys(event.metadata),
317
337
  providerMetadataKeyCount: countRecordKeys(toolCall.providerMetadata),
318
- toolMetadataKeyCount: countRecordKeys(toolCall.toolMetadata)
338
+ toolMetadataKeyCount: countRecordKeys(toolCall.toolMetadata),
339
+ ...this.previewAttributes({ input: toolCall.input })
319
340
  },
320
341
  inputSummary: summarizeUnknown(toolCall.input),
321
342
  error: toolCall.invalid ? summarizeError(toolCall.error) : void 0
@@ -363,7 +384,11 @@ var AgentInspectAiSdkTelemetryIntegration = class {
363
384
  messageCount: event.messages.length,
364
385
  metadataKeyCount: countRecordKeys(event.metadata),
365
386
  providerMetadataKeyCount: countRecordKeys(toolCall.providerMetadata),
366
- toolMetadataKeyCount: countRecordKeys(toolCall.toolMetadata)
387
+ toolMetadataKeyCount: countRecordKeys(toolCall.toolMetadata),
388
+ ...this.previewAttributes({
389
+ input: toolCall.input,
390
+ ...event.success ? { output: event.output } : {}
391
+ })
367
392
  },
368
393
  outputSummary: event.success ? summarizeUnknown(event.output) : void 0,
369
394
  error: event.success ? void 0 : summarizeError(event.error)
@@ -401,7 +426,8 @@ var AgentInspectAiSdkTelemetryIntegration = class {
401
426
  warningCount: event.warnings?.length ?? 0,
402
427
  toolCallCount: event.toolCalls.length,
403
428
  toolResultCount: event.toolResults.length,
404
- metadataKeyCount: countRecordKeys(event.metadata)
429
+ metadataKeyCount: countRecordKeys(event.metadata),
430
+ ...this.previewAttributes({ output: event.text })
405
431
  },
406
432
  tokenUsage: summarizeUsage(event.totalUsage),
407
433
  outputSummary: {
@@ -461,23 +487,11 @@ var AgentInspectAiSdkTelemetryIntegration = class {
461
487
  this.diagnostics.lifecycleWarnings += 1;
462
488
  this.diagnostics.lastWarning = message;
463
489
  }
464
- previewCapabilityWarned = false;
465
490
  recordCaptureOptionWarnings() {
491
+ if (this.effectiveCapture === "preview") return;
466
492
  const previewOnlyOptions = [];
467
- if (this.requestedCapture === "preview") previewOnlyOptions.push("capture");
468
493
  if (this.options.redactionProfile !== void 0) previewOnlyOptions.push("redactionProfile");
469
494
  if (this.options.maxPreviewChars !== void 0) previewOnlyOptions.push("maxPreviewChars");
470
- if (this.requestedCapture === "preview") {
471
- 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.`;
472
- this.recordLifecycleWarning(
473
- `AI SDK preview capture is not supported yet; falling back to metadata-only capture. Unsupported options: ${previewOnlyOptions.join(", ")}.`
474
- );
475
- if (!this.previewCapabilityWarned) {
476
- this.previewCapabilityWarned = true;
477
- console.warn(`[agent-inspect:ai-sdk] ${message}`);
478
- }
479
- return;
480
- }
481
495
  if (previewOnlyOptions.length > 0) {
482
496
  this.recordLifecycleWarning(
483
497
  `AI SDK preview-only options have no effect in metadata-only capture: ${previewOnlyOptions.join(", ")}.`
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/index.ts"],"names":["fileWriter","bindTelemetryIntegration"],"mappings":"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","file":"index.cjs","sourcesContent":["import { bindTelemetryIntegration } from \"ai\";\nimport type {\n OnFinishEvent,\n OnStartEvent,\n OnStepFinishEvent,\n OnStepStartEvent,\n OnToolCallFinishEvent,\n OnToolCallStartEvent,\n TelemetryIntegration,\n} from \"ai\";\nimport type {\n RedactionProfile,\n} from \"agent-inspect/advanced\";\nimport type {\n PersistedInspectEvent,\n PersistedInspectError,\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 AI SDK adapter.\n *\n * @experimental This package is part of the framework adapter train.\n */\nexport type AgentInspectAiSdkCaptureMode = \"metadata-only\" | \"preview\";\n\n/**\n * Options for the experimental AI SDK telemetry integration.\n *\n * @experimental Callers must keep AI SDK telemetry configured with\n * `recordInputs: false` and `recordOutputs: false`.\n */\nexport interface AgentInspectAiSdkOptions {\n /**\n * Explicit local writer for runtime integration.\n */\n writer?: TraceWriter;\n\n /**\n * Convenience local trace directory for writer-owned persistence.\n */\n traceDir?: string;\n\n /**\n * Optional run name used by lifecycle mapping.\n */\n runName?: string;\n\n /**\n * Capture policy. Defaults to metadata-only.\n *\n * @experimental `preview` is currently rejected with diagnostics and falls\n * back to metadata-only until bounded free-text preview capture is implemented.\n */\n capture?: AgentInspectAiSdkCaptureMode;\n\n /**\n * Redaction profile for future preview capture.\n *\n * @experimental Currently diagnostic-only because the adapter persists\n * metadata summaries and does not write raw preview content.\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 AgentInspectAiSdkDiagnostics {\n writeFailures: number;\n lifecycleWarnings: number;\n flushFailures: number;\n closeFailures: number;\n lastError?: string;\n lastWarning?: string;\n}\n\nexport interface AgentInspectAiSdkIntegration extends TelemetryIntegration {\n getDiagnostics(): AgentInspectAiSdkDiagnostics;\n getWriterStats(): TraceWriterStats | undefined;\n flush(): Promise<void>;\n close(): Promise<void>;\n}\n\ntype AiSdkModelInfo = {\n provider?: string;\n modelId?: string;\n};\n\ntype AiSdkUsage = {\n inputTokens?: number;\n outputTokens?: number;\n totalTokens?: number;\n cachedInputTokens?: number;\n};\n\ninterface ActiveStep {\n eventId: string;\n parentId: string;\n startedAt: string;\n}\n\ninterface ActiveTool {\n eventId: string;\n parentId: string;\n startedAt: string;\n toolName: string;\n}\n\ninterface ActiveRun {\n runId: string;\n eventId: string;\n name: string;\n startedAt: string;\n model?: AiSdkModelInfo;\n steps: Map<number, ActiveStep>;\n tools: Map<string, ActiveTool>;\n}\n\nconst AI_SDK_SOURCE = {\n type: \"ai-sdk\",\n name: \"@agent-inspect/ai-sdk\",\n version: \"experimental\",\n} as const;\n\nfunction nowIso(): string {\n return new Date().toISOString();\n}\n\nfunction createId(prefix: string): string {\n if (typeof crypto !== \"undefined\" && \"randomUUID\" in crypto) {\n return `${prefix}_${crypto.randomUUID()}`;\n }\n return `${prefix}_${Date.now()}_${Math.random().toString(16).slice(2)}`;\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 AI SDK integration 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 summarizeError(error: unknown): PersistedInspectError {\n if (error instanceof Error) {\n return {\n name: error.name || \"Error\",\n message: error.message,\n };\n }\n if (typeof error === \"string\") {\n return {\n message: error,\n };\n }\n return {\n message: \"Unknown AI SDK tool error\",\n };\n}\n\nfunction summarizeModel(model: AiSdkModelInfo | undefined): Record<string, unknown> {\n return {\n provider: model?.provider,\n modelId: model?.modelId,\n };\n}\n\nfunction summarizeUsage(usage: AiSdkUsage | undefined): PersistedTokenUsage | undefined {\n if (!usage) return undefined;\n\n const tokenUsage: PersistedTokenUsage = {};\n if (typeof usage.inputTokens === \"number\") tokenUsage.input = usage.inputTokens;\n if (typeof usage.outputTokens === \"number\") tokenUsage.output = usage.outputTokens;\n if (typeof usage.totalTokens === \"number\") tokenUsage.total = usage.totalTokens;\n if (typeof usage.cachedInputTokens === \"number\") tokenUsage.cached = usage.cachedInputTokens;\n\n return Object.keys(tokenUsage).length > 0 ? tokenUsage : undefined;\n}\n\nfunction summarizeFinishReason(\n finishReason: unknown,\n): { finishReason?: string; rawFinishReason?: string } {\n if (typeof finishReason === \"string\") {\n return { finishReason };\n }\n if (typeof finishReason !== \"object\" || finishReason === null) {\n return {};\n }\n\n const value = finishReason as { unified?: unknown; raw?: unknown };\n return {\n finishReason: typeof value.unified === \"string\" ? value.unified : undefined,\n rawFinishReason: typeof value.raw === \"string\" ? value.raw : undefined,\n };\n}\n\nclass AgentInspectAiSdkTelemetryIntegration {\n private readonly writer: TraceWriter | undefined;\n private readonly requestedCapture: AgentInspectAiSdkCaptureMode;\n private readonly effectiveCapture: \"metadata-only\" = \"metadata-only\";\n private readonly diagnostics: AgentInspectAiSdkDiagnostics = {\n writeFailures: 0,\n lifecycleWarnings: 0,\n flushFailures: 0,\n closeFailures: 0,\n };\n private activeRun: ActiveRun | undefined;\n private suspendedReason: string | undefined;\n\n constructor(private readonly options: AgentInspectAiSdkOptions) {\n this.requestedCapture = options.capture ?? \"metadata-only\";\n this.writer = options.writer ?? (options.traceDir ? fileWriter({ dir: options.traceDir }) : undefined);\n this.recordCaptureOptionWarnings();\n }\n\n getDiagnostics(): AgentInspectAiSdkDiagnostics {\n return { ...this.diagnostics };\n }\n\n async onStart(event: OnStartEvent): Promise<void> {\n await this.handleLifecycle(\"onStart\", async () => {\n if (this.activeRun || this.suspendedReason) {\n this.activeRun = undefined;\n this.suspendedReason =\n \"Overlapping AI SDK generation ignored; create one agentInspect() integration per concurrent generation.\";\n this.recordLifecycleWarning(this.suspendedReason);\n return;\n }\n\n const startedAt = nowIso();\n const runId = createId(\"ai_sdk_run\");\n const eventId = createId(\"event\");\n const name =\n this.options.runName ??\n event.functionId ??\n event.model.modelId ??\n \"ai-sdk-generation\";\n\n this.activeRun = {\n runId,\n eventId,\n name,\n startedAt,\n model: event.model,\n steps: new Map(),\n tools: new Map(),\n };\n\n await this.write({\n schemaVersion: \"0.2\",\n eventId,\n runId,\n kind: \"RUN\",\n name,\n status: \"running\",\n timestamp: startedAt,\n startedAt,\n confidence: \"explicit\",\n source: AI_SDK_SOURCE,\n attributes: {\n legacyEvent: \"run_started\",\n ...summarizeModel(event.model),\n functionId: event.functionId,\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 recordInputsRequired: false,\n recordOutputsRequired: false,\n toolCount: countRecordKeys(event.tools),\n hasPrompt: event.prompt !== undefined,\n hasMessages: event.messages !== undefined,\n metadataKeyCount: countRecordKeys(event.metadata),\n },\n });\n });\n }\n\n async onStepStart(event: OnStepStartEvent): Promise<void> {\n await this.handleLifecycle(\"onStepStart\", async () => {\n const run = this.getActiveRun(\"onStepStart\");\n if (!run) return;\n const startedAt = nowIso();\n const stepEventId = createId(\"event\");\n run.steps.set(event.stepNumber, {\n eventId: stepEventId,\n parentId: run.eventId,\n startedAt,\n });\n\n await this.write({\n schemaVersion: \"0.2\",\n eventId: stepEventId,\n runId: run.runId,\n parentId: run.eventId,\n kind: \"LLM\",\n name: `ai-sdk-step-${event.stepNumber}`,\n status: \"running\",\n timestamp: startedAt,\n startedAt,\n confidence: \"explicit\",\n source: AI_SDK_SOURCE,\n attributes: {\n legacyEvent: \"step_started\",\n stepId: stepEventId,\n ...summarizeModel(event.model),\n functionId: event.functionId,\n stepNumber: event.stepNumber,\n priorStepCount: event.steps.length,\n activeToolCount: event.activeTools?.length,\n toolCount: countRecordKeys(event.tools),\n messageCount: event.messages.length,\n metadataKeyCount: countRecordKeys(event.metadata),\n },\n });\n });\n }\n\n async onStepFinish(event: OnStepFinishEvent): Promise<void> {\n await this.handleLifecycle(\"onStepFinish\", async () => {\n const run = this.getActiveRun(\"onStepFinish\");\n if (!run) return;\n const endedAt = nowIso();\n const activeStep = run.steps.get(event.stepNumber);\n if (!activeStep) {\n this.recordLifecycleWarning(\n `onStepFinish ignored because step ${event.stepNumber} has no matching start callback.`,\n );\n return;\n }\n\n await this.write({\n schemaVersion: \"0.2\",\n eventId: activeStep.eventId,\n runId: run.runId,\n parentId: activeStep.parentId,\n kind: \"LLM\",\n name: `ai-sdk-step-${event.stepNumber}`,\n status: \"ok\",\n timestamp: endedAt,\n startedAt: activeStep.startedAt,\n endedAt,\n durationMs: durationMs(activeStep.startedAt, endedAt),\n confidence: \"explicit\",\n source: AI_SDK_SOURCE,\n attributes: {\n legacyEvent: \"step_completed\",\n stepId: activeStep.eventId,\n ...summarizeModel(event.model),\n functionId: event.functionId,\n stepNumber: event.stepNumber,\n ...summarizeFinishReason(event.finishReason),\n warningCount: event.warnings?.length ?? 0,\n contentPartCount: event.content.length,\n toolCallCount: event.toolCalls.length,\n toolResultCount: event.toolResults.length,\n responseId: event.response.id,\n responseModelId: event.response.modelId,\n responseTimestamp: event.response.timestamp?.toISOString(),\n metadataKeyCount: countRecordKeys(event.metadata),\n },\n tokenUsage: summarizeUsage(event.usage),\n outputSummary: {\n contentPartCount: event.content.length,\n textLength: event.text.length,\n reasoningPartCount: event.reasoning.length,\n fileCount: event.files.length,\n sourceCount: event.sources.length,\n },\n });\n });\n }\n\n async onToolCallStart(event: OnToolCallStartEvent): Promise<void> {\n await this.handleLifecycle(\"onToolCallStart\", async () => {\n const run = this.getActiveRun(\"onToolCallStart\");\n if (!run) return;\n const startedAt = nowIso();\n const eventId = createId(\"event\");\n const toolCall = event.toolCall;\n const step = event.stepNumber === undefined ? undefined : run.steps.get(event.stepNumber);\n const parentId = step?.eventId ?? run.eventId;\n if (event.stepNumber === undefined || !step) {\n this.recordLifecycleWarning(\n \"onToolCallStart attached tool to run because the AI SDK callback did not expose a matching active step.\",\n );\n }\n run.tools.set(toolCall.toolCallId, {\n eventId,\n parentId,\n startedAt,\n toolName: toolCall.toolName,\n });\n\n await this.write({\n schemaVersion: \"0.2\",\n eventId,\n runId: run.runId,\n parentId,\n kind: \"TOOL\",\n name: toolCall.toolName,\n status: \"running\",\n timestamp: startedAt,\n startedAt,\n confidence: \"explicit\",\n source: AI_SDK_SOURCE,\n attributes: {\n legacyEvent: \"step_started\",\n stepId: eventId,\n ...summarizeModel(event.model),\n functionId: event.functionId,\n stepNumber: event.stepNumber,\n toolCallId: toolCall.toolCallId,\n toolName: toolCall.toolName,\n dynamic: toolCall.dynamic === true,\n invalid: toolCall.invalid === true,\n providerExecuted: toolCall.providerExecuted === true,\n messageCount: event.messages.length,\n metadataKeyCount: countRecordKeys(event.metadata),\n providerMetadataKeyCount: countRecordKeys(toolCall.providerMetadata),\n toolMetadataKeyCount: countRecordKeys(toolCall.toolMetadata),\n },\n inputSummary: summarizeUnknown(toolCall.input),\n error: toolCall.invalid ? summarizeError(toolCall.error) : undefined,\n });\n });\n }\n\n async onToolCallFinish(event: OnToolCallFinishEvent): Promise<void> {\n await this.handleLifecycle(\"onToolCallFinish\", async () => {\n const run = this.getActiveRun(\"onToolCallFinish\");\n if (!run) return;\n const endedAt = nowIso();\n const toolCall = event.toolCall;\n const activeTool = run.tools.get(toolCall.toolCallId);\n if (!activeTool) {\n this.recordLifecycleWarning(\n `onToolCallFinish ignored because tool call ${toolCall.toolCallId} has no matching start callback.`,\n );\n return;\n }\n\n await this.write({\n schemaVersion: \"0.2\",\n eventId: activeTool.eventId,\n runId: run.runId,\n parentId: activeTool.parentId,\n kind: \"TOOL\",\n name: activeTool.toolName,\n status: event.success ? \"ok\" : \"error\",\n timestamp: endedAt,\n startedAt: activeTool.startedAt,\n endedAt,\n durationMs: event.durationMs,\n confidence: \"explicit\",\n source: AI_SDK_SOURCE,\n attributes: {\n legacyEvent: \"step_completed\",\n stepId: activeTool.eventId,\n ...summarizeModel(event.model),\n functionId: event.functionId,\n stepNumber: event.stepNumber,\n toolCallId: toolCall.toolCallId,\n toolName: toolCall.toolName,\n dynamic: toolCall.dynamic === true,\n invalid: toolCall.invalid === true,\n providerExecuted: toolCall.providerExecuted === true,\n messageCount: event.messages.length,\n metadataKeyCount: countRecordKeys(event.metadata),\n providerMetadataKeyCount: countRecordKeys(toolCall.providerMetadata),\n toolMetadataKeyCount: countRecordKeys(toolCall.toolMetadata),\n },\n outputSummary: event.success ? summarizeUnknown(event.output) : undefined,\n error: event.success ? undefined : summarizeError(event.error),\n });\n });\n }\n\n async onFinish(event: OnFinishEvent): Promise<void> {\n await this.handleLifecycle(\"onFinish\", async () => {\n if (this.suspendedReason) {\n this.suspendedReason = undefined;\n return;\n }\n const run = this.getActiveRun(\"onFinish\");\n if (!run) return;\n const endedAt = nowIso();\n\n await this.write({\n schemaVersion: \"0.2\",\n eventId: run.eventId,\n runId: run.runId,\n kind: \"RUN\",\n name: run.name,\n status: \"ok\",\n timestamp: endedAt,\n startedAt: run.startedAt,\n endedAt,\n durationMs: durationMs(run.startedAt, endedAt),\n confidence: \"explicit\",\n source: AI_SDK_SOURCE,\n attributes: {\n legacyEvent: \"run_completed\",\n ...summarizeModel(event.model ?? run.model),\n functionId: event.functionId,\n ...summarizeFinishReason(event.finishReason),\n stepCount: event.steps.length,\n warningCount: event.warnings?.length ?? 0,\n toolCallCount: event.toolCalls.length,\n toolResultCount: event.toolResults.length,\n metadataKeyCount: countRecordKeys(event.metadata),\n },\n tokenUsage: summarizeUsage(event.totalUsage),\n outputSummary: {\n contentPartCount: event.content.length,\n textLength: event.text.length,\n reasoningPartCount: event.reasoning.length,\n fileCount: event.files.length,\n sourceCount: event.sources.length,\n },\n });\n\n this.activeRun = undefined;\n });\n }\n\n getWriterStats(): TraceWriterStats | undefined {\n return this.writer?.getStats?.();\n }\n\n async flush(): 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 close(): Promise<void> {\n try {\n await this.writer?.close?.();\n } catch (error) {\n this.diagnostics.closeFailures += 1;\n this.diagnostics.lastError = normalizeError(error);\n } finally {\n this.activeRun = undefined;\n this.suspendedReason = undefined;\n }\n }\n\n private getActiveRun(callbackName: string): ActiveRun | undefined {\n if (this.suspendedReason) {\n this.recordLifecycleWarning(\n `${callbackName} ignored while integration is suspended: ${this.suspendedReason}`,\n );\n return undefined;\n }\n if (this.activeRun) return this.activeRun;\n\n this.recordLifecycleWarning(\n `${callbackName} ignored because no active AI SDK generation was started.`,\n );\n return undefined;\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 `AI SDK 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:ai-sdk] ${message}`);\n }\n return;\n }\n\n if (previewOnlyOptions.length > 0) {\n this.recordLifecycleWarning(\n `AI SDK 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 telemetry integration for the Vercel AI SDK.\n *\n * @experimental The adapter maps metadata-only generation, LLM step, and tool\n * lifecycle events. Keep AI SDK telemetry configured with\n * `recordInputs: false` and `recordOutputs: false`.\n */\nexport function agentInspect(\n options: AgentInspectAiSdkOptions = {},\n): AgentInspectAiSdkIntegration {\n const integration = new AgentInspectAiSdkTelemetryIntegration(options);\n return {\n ...bindTelemetryIntegration(integration),\n getDiagnostics: () => integration.getDiagnostics(),\n getWriterStats: () => integration.getWriterStats(),\n flush: () => integration.flush(),\n close: () => integration.close(),\n };\n}\n"]}
1
+ {"version":3,"sources":["../src/index.ts"],"names":["createAdapterPreviewCapture","fileWriter","bindTelemetryIntegration"],"mappings":"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","file":"index.cjs","sourcesContent":["import { bindTelemetryIntegration } from \"ai\";\nimport type {\n OnFinishEvent,\n OnStartEvent,\n OnStepFinishEvent,\n OnStepStartEvent,\n OnToolCallFinishEvent,\n OnToolCallStartEvent,\n TelemetryIntegration,\n} from \"ai\";\nimport { createAdapterPreviewCapture } from \"agent-inspect/advanced\";\nimport type {\n AdapterCaptureDiagnostics,\n AdapterDiagnosticListener,\n AdapterPreviewCapture,\n RedactionProfile,\n} from \"agent-inspect/advanced\";\nimport type {\n PersistedInspectEvent,\n PersistedInspectError,\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 AI SDK adapter.\n *\n * `metadata-only` is the default. `preview` persists bounded, redacted preview\n * attributes through the shared adapter capture helper.\n *\n * @experimental This package is part of the framework adapter train.\n */\nexport type AgentInspectAiSdkCaptureMode = \"metadata-only\" | \"preview\";\n\n/**\n * Options for the experimental AI SDK telemetry integration.\n *\n * @experimental Callers must keep AI SDK telemetry configured with\n * `recordInputs: false` and `recordOutputs: false`.\n */\nexport interface AgentInspectAiSdkOptions {\n /**\n * Explicit local writer for runtime integration.\n */\n writer?: TraceWriter;\n\n /**\n * Convenience local trace directory for writer-owned persistence.\n */\n traceDir?: string;\n\n /**\n * Optional run name used by lifecycle mapping.\n */\n runName?: string;\n\n /**\n * Capture policy. Defaults to metadata-only.\n *\n * @experimental `preview` persists bounded, redacted prompt/message/output\n * previews. It never persists full content.\n */\n capture?: AgentInspectAiSdkCaptureMode;\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 AgentInspectAiSdkDiagnostics {\n writeFailures: number;\n lifecycleWarnings: number;\n flushFailures: number;\n closeFailures: number;\n lastError?: string;\n lastWarning?: string;\n /** Shared preview-capture counters (`@experimental`). */\n capture: AdapterCaptureDiagnostics;\n}\n\nexport interface AgentInspectAiSdkIntegration extends TelemetryIntegration {\n getDiagnostics(): AgentInspectAiSdkDiagnostics;\n getWriterStats(): TraceWriterStats | undefined;\n flush(): Promise<void>;\n close(): Promise<void>;\n}\n\ntype AiSdkModelInfo = {\n provider?: string;\n modelId?: string;\n};\n\ntype AiSdkUsage = {\n inputTokens?: number;\n outputTokens?: number;\n totalTokens?: number;\n cachedInputTokens?: number;\n};\n\ninterface ActiveStep {\n eventId: string;\n parentId: string;\n startedAt: string;\n}\n\ninterface ActiveTool {\n eventId: string;\n parentId: string;\n startedAt: string;\n toolName: string;\n}\n\ninterface ActiveRun {\n runId: string;\n eventId: string;\n name: string;\n startedAt: string;\n model?: AiSdkModelInfo;\n steps: Map<number, ActiveStep>;\n tools: Map<string, ActiveTool>;\n}\n\nconst AI_SDK_SOURCE = {\n type: \"ai-sdk\",\n name: \"@agent-inspect/ai-sdk\",\n version: \"experimental\",\n} as const;\n\nfunction nowIso(): string {\n return new Date().toISOString();\n}\n\nfunction createId(prefix: string): string {\n if (typeof crypto !== \"undefined\" && \"randomUUID\" in crypto) {\n return `${prefix}_${crypto.randomUUID()}`;\n }\n return `${prefix}_${Date.now()}_${Math.random().toString(16).slice(2)}`;\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 AI SDK integration 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 summarizeError(error: unknown): PersistedInspectError {\n if (error instanceof Error) {\n return {\n name: error.name || \"Error\",\n message: error.message,\n };\n }\n if (typeof error === \"string\") {\n return {\n message: error,\n };\n }\n return {\n message: \"Unknown AI SDK tool error\",\n };\n}\n\nfunction summarizeModel(model: AiSdkModelInfo | undefined): Record<string, unknown> {\n return {\n provider: model?.provider,\n modelId: model?.modelId,\n };\n}\n\nfunction summarizeUsage(usage: AiSdkUsage | undefined): PersistedTokenUsage | undefined {\n if (!usage) return undefined;\n\n const tokenUsage: PersistedTokenUsage = {};\n if (typeof usage.inputTokens === \"number\") tokenUsage.input = usage.inputTokens;\n if (typeof usage.outputTokens === \"number\") tokenUsage.output = usage.outputTokens;\n if (typeof usage.totalTokens === \"number\") tokenUsage.total = usage.totalTokens;\n if (typeof usage.cachedInputTokens === \"number\") tokenUsage.cached = usage.cachedInputTokens;\n\n return Object.keys(tokenUsage).length > 0 ? tokenUsage : undefined;\n}\n\nfunction summarizeFinishReason(\n finishReason: unknown,\n): { finishReason?: string; rawFinishReason?: string } {\n if (typeof finishReason === \"string\") {\n return { finishReason };\n }\n if (typeof finishReason !== \"object\" || finishReason === null) {\n return {};\n }\n\n const value = finishReason as { unified?: unknown; raw?: unknown };\n return {\n finishReason: typeof value.unified === \"string\" ? value.unified : undefined,\n rawFinishReason: typeof value.raw === \"string\" ? value.raw : undefined,\n };\n}\n\nclass AgentInspectAiSdkTelemetryIntegration {\n private readonly writer: TraceWriter | undefined;\n private readonly requestedCapture: AgentInspectAiSdkCaptureMode;\n private readonly preview: AdapterPreviewCapture;\n private readonly effectiveCapture: AgentInspectAiSdkCaptureMode;\n private readonly diagnostics: Omit<AgentInspectAiSdkDiagnostics, \"capture\"> = {\n writeFailures: 0,\n lifecycleWarnings: 0,\n flushFailures: 0,\n closeFailures: 0,\n };\n private activeRun: ActiveRun | undefined;\n private suspendedReason: string | undefined;\n\n constructor(private readonly options: AgentInspectAiSdkOptions) {\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 this.recordCaptureOptionWarnings();\n }\n\n getDiagnostics(): AgentInspectAiSdkDiagnostics {\n return { ...this.diagnostics, capture: this.preview.getDiagnostics() };\n }\n\n /** Bounded preview attributes for one lifecycle event (empty unless enabled). */\n private previewAttributes(\n fields: Record<string, unknown>,\n ): Record<string, unknown> {\n return this.preview.applyPreviewFields({}, fields);\n }\n\n async onStart(event: OnStartEvent): Promise<void> {\n await this.handleLifecycle(\"onStart\", async () => {\n if (this.activeRun || this.suspendedReason) {\n this.activeRun = undefined;\n this.suspendedReason =\n \"Overlapping AI SDK generation ignored; create one agentInspect() integration per concurrent generation.\";\n this.recordLifecycleWarning(this.suspendedReason);\n return;\n }\n\n const startedAt = nowIso();\n const runId = createId(\"ai_sdk_run\");\n const eventId = createId(\"event\");\n const name =\n this.options.runName ??\n event.functionId ??\n event.model.modelId ??\n \"ai-sdk-generation\";\n\n this.activeRun = {\n runId,\n eventId,\n name,\n startedAt,\n model: event.model,\n steps: new Map(),\n tools: new Map(),\n };\n\n await this.write({\n schemaVersion: \"0.2\",\n eventId,\n runId,\n kind: \"RUN\",\n name,\n status: \"running\",\n timestamp: startedAt,\n startedAt,\n confidence: \"explicit\",\n source: AI_SDK_SOURCE,\n attributes: {\n legacyEvent: \"run_started\",\n ...summarizeModel(event.model),\n functionId: event.functionId,\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 recordInputsRequired: false,\n recordOutputsRequired: false,\n toolCount: countRecordKeys(event.tools),\n hasPrompt: event.prompt !== undefined,\n hasMessages: event.messages !== undefined,\n metadataKeyCount: countRecordKeys(event.metadata),\n ...this.previewAttributes({\n input: event.prompt ?? event.messages,\n }),\n },\n });\n });\n }\n\n async onStepStart(event: OnStepStartEvent): Promise<void> {\n await this.handleLifecycle(\"onStepStart\", async () => {\n const run = this.getActiveRun(\"onStepStart\");\n if (!run) return;\n const startedAt = nowIso();\n const stepEventId = createId(\"event\");\n run.steps.set(event.stepNumber, {\n eventId: stepEventId,\n parentId: run.eventId,\n startedAt,\n });\n\n await this.write({\n schemaVersion: \"0.2\",\n eventId: stepEventId,\n runId: run.runId,\n parentId: run.eventId,\n kind: \"LLM\",\n name: `ai-sdk-step-${event.stepNumber}`,\n status: \"running\",\n timestamp: startedAt,\n startedAt,\n confidence: \"explicit\",\n source: AI_SDK_SOURCE,\n attributes: {\n legacyEvent: \"step_started\",\n stepId: stepEventId,\n ...summarizeModel(event.model),\n functionId: event.functionId,\n stepNumber: event.stepNumber,\n priorStepCount: event.steps.length,\n activeToolCount: event.activeTools?.length,\n toolCount: countRecordKeys(event.tools),\n messageCount: event.messages.length,\n metadataKeyCount: countRecordKeys(event.metadata),\n ...this.previewAttributes({ input: event.messages }),\n },\n });\n });\n }\n\n async onStepFinish(event: OnStepFinishEvent): Promise<void> {\n await this.handleLifecycle(\"onStepFinish\", async () => {\n const run = this.getActiveRun(\"onStepFinish\");\n if (!run) return;\n const endedAt = nowIso();\n const activeStep = run.steps.get(event.stepNumber);\n if (!activeStep) {\n this.recordLifecycleWarning(\n `onStepFinish ignored because step ${event.stepNumber} has no matching start callback.`,\n );\n return;\n }\n\n await this.write({\n schemaVersion: \"0.2\",\n eventId: activeStep.eventId,\n runId: run.runId,\n parentId: activeStep.parentId,\n kind: \"LLM\",\n name: `ai-sdk-step-${event.stepNumber}`,\n status: \"ok\",\n timestamp: endedAt,\n startedAt: activeStep.startedAt,\n endedAt,\n durationMs: durationMs(activeStep.startedAt, endedAt),\n confidence: \"explicit\",\n source: AI_SDK_SOURCE,\n attributes: {\n legacyEvent: \"step_completed\",\n stepId: activeStep.eventId,\n ...summarizeModel(event.model),\n functionId: event.functionId,\n stepNumber: event.stepNumber,\n ...summarizeFinishReason(event.finishReason),\n warningCount: event.warnings?.length ?? 0,\n contentPartCount: event.content.length,\n toolCallCount: event.toolCalls.length,\n toolResultCount: event.toolResults.length,\n responseId: event.response.id,\n responseModelId: event.response.modelId,\n responseTimestamp: event.response.timestamp?.toISOString(),\n metadataKeyCount: countRecordKeys(event.metadata),\n ...this.previewAttributes({ output: event.text }),\n },\n tokenUsage: summarizeUsage(event.usage),\n outputSummary: {\n contentPartCount: event.content.length,\n textLength: event.text.length,\n reasoningPartCount: event.reasoning.length,\n fileCount: event.files.length,\n sourceCount: event.sources.length,\n },\n });\n });\n }\n\n async onToolCallStart(event: OnToolCallStartEvent): Promise<void> {\n await this.handleLifecycle(\"onToolCallStart\", async () => {\n const run = this.getActiveRun(\"onToolCallStart\");\n if (!run) return;\n const startedAt = nowIso();\n const eventId = createId(\"event\");\n const toolCall = event.toolCall;\n const step = event.stepNumber === undefined ? undefined : run.steps.get(event.stepNumber);\n const parentId = step?.eventId ?? run.eventId;\n if (event.stepNumber === undefined || !step) {\n this.recordLifecycleWarning(\n \"onToolCallStart attached tool to run because the AI SDK callback did not expose a matching active step.\",\n );\n }\n run.tools.set(toolCall.toolCallId, {\n eventId,\n parentId,\n startedAt,\n toolName: toolCall.toolName,\n });\n\n await this.write({\n schemaVersion: \"0.2\",\n eventId,\n runId: run.runId,\n parentId,\n kind: \"TOOL\",\n name: toolCall.toolName,\n status: \"running\",\n timestamp: startedAt,\n startedAt,\n confidence: \"explicit\",\n source: AI_SDK_SOURCE,\n attributes: {\n legacyEvent: \"step_started\",\n stepId: eventId,\n ...summarizeModel(event.model),\n functionId: event.functionId,\n stepNumber: event.stepNumber,\n toolCallId: toolCall.toolCallId,\n toolName: toolCall.toolName,\n dynamic: toolCall.dynamic === true,\n invalid: toolCall.invalid === true,\n providerExecuted: toolCall.providerExecuted === true,\n messageCount: event.messages.length,\n metadataKeyCount: countRecordKeys(event.metadata),\n providerMetadataKeyCount: countRecordKeys(toolCall.providerMetadata),\n toolMetadataKeyCount: countRecordKeys(toolCall.toolMetadata),\n ...this.previewAttributes({ input: toolCall.input }),\n },\n inputSummary: summarizeUnknown(toolCall.input),\n error: toolCall.invalid ? summarizeError(toolCall.error) : undefined,\n });\n });\n }\n\n async onToolCallFinish(event: OnToolCallFinishEvent): Promise<void> {\n await this.handleLifecycle(\"onToolCallFinish\", async () => {\n const run = this.getActiveRun(\"onToolCallFinish\");\n if (!run) return;\n const endedAt = nowIso();\n const toolCall = event.toolCall;\n const activeTool = run.tools.get(toolCall.toolCallId);\n if (!activeTool) {\n this.recordLifecycleWarning(\n `onToolCallFinish ignored because tool call ${toolCall.toolCallId} has no matching start callback.`,\n );\n return;\n }\n\n await this.write({\n schemaVersion: \"0.2\",\n eventId: activeTool.eventId,\n runId: run.runId,\n parentId: activeTool.parentId,\n kind: \"TOOL\",\n name: activeTool.toolName,\n status: event.success ? \"ok\" : \"error\",\n timestamp: endedAt,\n startedAt: activeTool.startedAt,\n endedAt,\n durationMs: event.durationMs,\n confidence: \"explicit\",\n source: AI_SDK_SOURCE,\n attributes: {\n legacyEvent: \"step_completed\",\n stepId: activeTool.eventId,\n ...summarizeModel(event.model),\n functionId: event.functionId,\n stepNumber: event.stepNumber,\n toolCallId: toolCall.toolCallId,\n toolName: toolCall.toolName,\n dynamic: toolCall.dynamic === true,\n invalid: toolCall.invalid === true,\n providerExecuted: toolCall.providerExecuted === true,\n messageCount: event.messages.length,\n metadataKeyCount: countRecordKeys(event.metadata),\n providerMetadataKeyCount: countRecordKeys(toolCall.providerMetadata),\n toolMetadataKeyCount: countRecordKeys(toolCall.toolMetadata),\n ...this.previewAttributes({\n input: toolCall.input,\n ...(event.success ? { output: event.output } : {}),\n }),\n },\n outputSummary: event.success ? summarizeUnknown(event.output) : undefined,\n error: event.success ? undefined : summarizeError(event.error),\n });\n });\n }\n\n async onFinish(event: OnFinishEvent): Promise<void> {\n await this.handleLifecycle(\"onFinish\", async () => {\n if (this.suspendedReason) {\n this.suspendedReason = undefined;\n return;\n }\n const run = this.getActiveRun(\"onFinish\");\n if (!run) return;\n const endedAt = nowIso();\n\n await this.write({\n schemaVersion: \"0.2\",\n eventId: run.eventId,\n runId: run.runId,\n kind: \"RUN\",\n name: run.name,\n status: \"ok\",\n timestamp: endedAt,\n startedAt: run.startedAt,\n endedAt,\n durationMs: durationMs(run.startedAt, endedAt),\n confidence: \"explicit\",\n source: AI_SDK_SOURCE,\n attributes: {\n legacyEvent: \"run_completed\",\n ...summarizeModel(event.model ?? run.model),\n functionId: event.functionId,\n ...summarizeFinishReason(event.finishReason),\n stepCount: event.steps.length,\n warningCount: event.warnings?.length ?? 0,\n toolCallCount: event.toolCalls.length,\n toolResultCount: event.toolResults.length,\n metadataKeyCount: countRecordKeys(event.metadata),\n ...this.previewAttributes({ output: event.text }),\n },\n tokenUsage: summarizeUsage(event.totalUsage),\n outputSummary: {\n contentPartCount: event.content.length,\n textLength: event.text.length,\n reasoningPartCount: event.reasoning.length,\n fileCount: event.files.length,\n sourceCount: event.sources.length,\n },\n });\n\n this.activeRun = undefined;\n });\n }\n\n getWriterStats(): TraceWriterStats | undefined {\n return this.writer?.getStats?.();\n }\n\n async flush(): 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 close(): Promise<void> {\n try {\n await this.writer?.close?.();\n } catch (error) {\n this.diagnostics.closeFailures += 1;\n this.diagnostics.lastError = normalizeError(error);\n } finally {\n this.activeRun = undefined;\n this.suspendedReason = undefined;\n }\n }\n\n private getActiveRun(callbackName: string): ActiveRun | undefined {\n if (this.suspendedReason) {\n this.recordLifecycleWarning(\n `${callbackName} ignored while integration is suspended: ${this.suspendedReason}`,\n );\n return undefined;\n }\n if (this.activeRun) return this.activeRun;\n\n this.recordLifecycleWarning(\n `${callbackName} ignored because no active AI SDK generation was started.`,\n );\n return undefined;\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 `AI SDK 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 telemetry integration for the Vercel AI SDK.\n *\n * @experimental The adapter maps generation, LLM step, and tool lifecycle\n * events. Capture is metadata-only by default; `capture: \"preview\"` adds\n * bounded, redacted preview attributes. Keep AI SDK telemetry configured with\n * `recordInputs: false` and `recordOutputs: false`.\n */\nexport function agentInspect(\n options: AgentInspectAiSdkOptions = {},\n): AgentInspectAiSdkIntegration {\n const integration = new AgentInspectAiSdkTelemetryIntegration(options);\n return {\n ...bindTelemetryIntegration(integration),\n getDiagnostics: () => integration.getDiagnostics(),\n getWriterStats: () => integration.getWriterStats(),\n flush: () => integration.flush(),\n close: () => integration.close(),\n };\n}\n"]}
package/dist/index.d.cts CHANGED
@@ -4,9 +4,45 @@ import { TraceWriterStats, TraceWriter } 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 AI SDK adapter.
9
42
  *
43
+ * `metadata-only` is the default. `preview` persists bounded, redacted preview
44
+ * attributes through the shared adapter capture helper.
45
+ *
10
46
  * @experimental This package is part of the framework adapter train.
11
47
  */
12
48
  type AgentInspectAiSdkCaptureMode = "metadata-only" | "preview";
@@ -32,24 +68,30 @@ interface AgentInspectAiSdkOptions {
32
68
  /**
33
69
  * Capture policy. Defaults to metadata-only.
34
70
  *
35
- * @experimental `preview` is currently rejected with diagnostics and falls
36
- * back to metadata-only until bounded free-text preview capture is implemented.
71
+ * @experimental `preview` persists bounded, redacted prompt/message/output
72
+ * previews. It never persists full content.
37
73
  */
38
74
  capture?: AgentInspectAiSdkCaptureMode;
39
75
  /**
40
- * Redaction profile for future preview capture.
76
+ * Redaction profile applied to preview attributes before persistence.
77
+ * `share` and `strict` also cap `maxPreviewChars`.
41
78
  *
42
- * @experimental Currently diagnostic-only because the adapter persists
43
- * metadata summaries and does not write raw preview content.
79
+ * @experimental Effective only when `capture: "preview"`.
44
80
  */
45
81
  redactionProfile?: RedactionProfile;
46
82
  /**
47
- * Bounds future preview capture.
83
+ * Upper bound for each serialized preview attribute. Defaults to 200.
48
84
  *
49
- * @experimental Currently diagnostic-only because `preview` falls back to
50
- * metadata-only capture.
85
+ * @experimental Effective only when `capture: "preview"`.
51
86
  */
52
87
  maxPreviewChars?: number;
88
+ /**
89
+ * Receives bounded capture diagnostics such as
90
+ * `AI_CAPTURE_FIELD_UNAVAILABLE`. Listener failures are isolated.
91
+ *
92
+ * @experimental
93
+ */
94
+ onDiagnostic?: AdapterDiagnosticListener;
53
95
  }
54
96
  interface AgentInspectAiSdkDiagnostics {
55
97
  writeFailures: number;
@@ -58,6 +100,8 @@ interface AgentInspectAiSdkDiagnostics {
58
100
  closeFailures: number;
59
101
  lastError?: string;
60
102
  lastWarning?: string;
103
+ /** Shared preview-capture counters (`@experimental`). */
104
+ capture: AdapterCaptureDiagnostics;
61
105
  }
62
106
  interface AgentInspectAiSdkIntegration extends TelemetryIntegration {
63
107
  getDiagnostics(): AgentInspectAiSdkDiagnostics;
@@ -68,8 +112,9 @@ interface AgentInspectAiSdkIntegration extends TelemetryIntegration {
68
112
  /**
69
113
  * Create an AgentInspect telemetry integration for the Vercel AI SDK.
70
114
  *
71
- * @experimental The adapter maps metadata-only generation, LLM step, and tool
72
- * lifecycle events. Keep AI SDK telemetry configured with
115
+ * @experimental The adapter maps generation, LLM step, and tool lifecycle
116
+ * events. Capture is metadata-only by default; `capture: "preview"` adds
117
+ * bounded, redacted preview attributes. Keep AI SDK telemetry configured with
73
118
  * `recordInputs: false` and `recordOutputs: false`.
74
119
  */
75
120
  declare function agentInspect(options?: AgentInspectAiSdkOptions): AgentInspectAiSdkIntegration;
package/dist/index.d.ts CHANGED
@@ -4,9 +4,45 @@ import { TraceWriterStats, TraceWriter } 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 AI SDK adapter.
9
42
  *
43
+ * `metadata-only` is the default. `preview` persists bounded, redacted preview
44
+ * attributes through the shared adapter capture helper.
45
+ *
10
46
  * @experimental This package is part of the framework adapter train.
11
47
  */
12
48
  type AgentInspectAiSdkCaptureMode = "metadata-only" | "preview";
@@ -32,24 +68,30 @@ interface AgentInspectAiSdkOptions {
32
68
  /**
33
69
  * Capture policy. Defaults to metadata-only.
34
70
  *
35
- * @experimental `preview` is currently rejected with diagnostics and falls
36
- * back to metadata-only until bounded free-text preview capture is implemented.
71
+ * @experimental `preview` persists bounded, redacted prompt/message/output
72
+ * previews. It never persists full content.
37
73
  */
38
74
  capture?: AgentInspectAiSdkCaptureMode;
39
75
  /**
40
- * Redaction profile for future preview capture.
76
+ * Redaction profile applied to preview attributes before persistence.
77
+ * `share` and `strict` also cap `maxPreviewChars`.
41
78
  *
42
- * @experimental Currently diagnostic-only because the adapter persists
43
- * metadata summaries and does not write raw preview content.
79
+ * @experimental Effective only when `capture: "preview"`.
44
80
  */
45
81
  redactionProfile?: RedactionProfile;
46
82
  /**
47
- * Bounds future preview capture.
83
+ * Upper bound for each serialized preview attribute. Defaults to 200.
48
84
  *
49
- * @experimental Currently diagnostic-only because `preview` falls back to
50
- * metadata-only capture.
85
+ * @experimental Effective only when `capture: "preview"`.
51
86
  */
52
87
  maxPreviewChars?: number;
88
+ /**
89
+ * Receives bounded capture diagnostics such as
90
+ * `AI_CAPTURE_FIELD_UNAVAILABLE`. Listener failures are isolated.
91
+ *
92
+ * @experimental
93
+ */
94
+ onDiagnostic?: AdapterDiagnosticListener;
53
95
  }
54
96
  interface AgentInspectAiSdkDiagnostics {
55
97
  writeFailures: number;
@@ -58,6 +100,8 @@ interface AgentInspectAiSdkDiagnostics {
58
100
  closeFailures: number;
59
101
  lastError?: string;
60
102
  lastWarning?: string;
103
+ /** Shared preview-capture counters (`@experimental`). */
104
+ capture: AdapterCaptureDiagnostics;
61
105
  }
62
106
  interface AgentInspectAiSdkIntegration extends TelemetryIntegration {
63
107
  getDiagnostics(): AgentInspectAiSdkDiagnostics;
@@ -68,8 +112,9 @@ interface AgentInspectAiSdkIntegration extends TelemetryIntegration {
68
112
  /**
69
113
  * Create an AgentInspect telemetry integration for the Vercel AI SDK.
70
114
  *
71
- * @experimental The adapter maps metadata-only generation, LLM step, and tool
72
- * lifecycle events. Keep AI SDK telemetry configured with
115
+ * @experimental The adapter maps generation, LLM step, and tool lifecycle
116
+ * events. Capture is metadata-only by default; `capture: "preview"` adds
117
+ * bounded, redacted preview attributes. Keep AI SDK telemetry configured with
73
118
  * `recordInputs: false` and `recordOutputs: false`.
74
119
  */
75
120
  declare function agentInspect(options?: AgentInspectAiSdkOptions): AgentInspectAiSdkIntegration;
package/dist/index.mjs CHANGED
@@ -1,4 +1,5 @@
1
1
  import { bindTelemetryIntegration } from 'ai';
2
+ import { createAdapterPreviewCapture } from 'agent-inspect/advanced';
2
3
  import { fileWriter } from 'agent-inspect/writers';
3
4
 
4
5
  // packages/ai-sdk/src/index.ts
@@ -107,13 +108,21 @@ var AgentInspectAiSdkTelemetryIntegration = class {
107
108
  constructor(options) {
108
109
  this.options = options;
109
110
  this.requestedCapture = options.capture ?? "metadata-only";
111
+ this.preview = createAdapterPreviewCapture({
112
+ capture: this.requestedCapture,
113
+ redactionProfile: options.redactionProfile,
114
+ maxPreviewChars: options.maxPreviewChars,
115
+ onDiagnostic: options.onDiagnostic
116
+ });
117
+ this.effectiveCapture = this.preview.capture;
110
118
  this.writer = options.writer ?? (options.traceDir ? fileWriter({ dir: options.traceDir }) : void 0);
111
119
  this.recordCaptureOptionWarnings();
112
120
  }
113
121
  options;
114
122
  writer;
115
123
  requestedCapture;
116
- effectiveCapture = "metadata-only";
124
+ preview;
125
+ effectiveCapture;
117
126
  diagnostics = {
118
127
  writeFailures: 0,
119
128
  lifecycleWarnings: 0,
@@ -123,7 +132,11 @@ var AgentInspectAiSdkTelemetryIntegration = class {
123
132
  activeRun;
124
133
  suspendedReason;
125
134
  getDiagnostics() {
126
- return { ...this.diagnostics };
135
+ return { ...this.diagnostics, capture: this.preview.getDiagnostics() };
136
+ }
137
+ /** Bounded preview attributes for one lifecycle event (empty unless enabled). */
138
+ previewAttributes(fields) {
139
+ return this.preview.applyPreviewFields({}, fields);
127
140
  }
128
141
  async onStart(event) {
129
142
  await this.handleLifecycle("onStart", async () => {
@@ -163,15 +176,20 @@ var AgentInspectAiSdkTelemetryIntegration = class {
163
176
  functionId: event.functionId,
164
177
  capture: this.effectiveCapture,
165
178
  requestedCapture: this.requestedCapture === this.effectiveCapture ? void 0 : this.requestedCapture,
166
- previewCaptureSupported: this.requestedCapture === "preview" ? false : void 0,
167
- redactionProfile: this.options.redactionProfile,
168
- maxPreviewChars: normalizeMaxPreviewChars(this.options.maxPreviewChars),
179
+ previewCaptureSupported: true,
180
+ // Preview rows report the effective bound/profile, which the
181
+ // `share` and `strict` profiles can lower below the request.
182
+ redactionProfile: this.preview.previewEnabled ? this.preview.redactionProfile : this.options.redactionProfile,
183
+ maxPreviewChars: this.preview.previewEnabled ? this.preview.maxPreviewChars : normalizeMaxPreviewChars(this.options.maxPreviewChars),
169
184
  recordInputsRequired: false,
170
185
  recordOutputsRequired: false,
171
186
  toolCount: countRecordKeys(event.tools),
172
187
  hasPrompt: event.prompt !== void 0,
173
188
  hasMessages: event.messages !== void 0,
174
- metadataKeyCount: countRecordKeys(event.metadata)
189
+ metadataKeyCount: countRecordKeys(event.metadata),
190
+ ...this.previewAttributes({
191
+ input: event.prompt ?? event.messages
192
+ })
175
193
  }
176
194
  });
177
195
  });
@@ -209,7 +227,8 @@ var AgentInspectAiSdkTelemetryIntegration = class {
209
227
  activeToolCount: event.activeTools?.length,
210
228
  toolCount: countRecordKeys(event.tools),
211
229
  messageCount: event.messages.length,
212
- metadataKeyCount: countRecordKeys(event.metadata)
230
+ metadataKeyCount: countRecordKeys(event.metadata),
231
+ ...this.previewAttributes({ input: event.messages })
213
232
  }
214
233
  });
215
234
  });
@@ -254,7 +273,8 @@ var AgentInspectAiSdkTelemetryIntegration = class {
254
273
  responseId: event.response.id,
255
274
  responseModelId: event.response.modelId,
256
275
  responseTimestamp: event.response.timestamp?.toISOString(),
257
- metadataKeyCount: countRecordKeys(event.metadata)
276
+ metadataKeyCount: countRecordKeys(event.metadata),
277
+ ...this.previewAttributes({ output: event.text })
258
278
  },
259
279
  tokenUsage: summarizeUsage(event.usage),
260
280
  outputSummary: {
@@ -313,7 +333,8 @@ var AgentInspectAiSdkTelemetryIntegration = class {
313
333
  messageCount: event.messages.length,
314
334
  metadataKeyCount: countRecordKeys(event.metadata),
315
335
  providerMetadataKeyCount: countRecordKeys(toolCall.providerMetadata),
316
- toolMetadataKeyCount: countRecordKeys(toolCall.toolMetadata)
336
+ toolMetadataKeyCount: countRecordKeys(toolCall.toolMetadata),
337
+ ...this.previewAttributes({ input: toolCall.input })
317
338
  },
318
339
  inputSummary: summarizeUnknown(toolCall.input),
319
340
  error: toolCall.invalid ? summarizeError(toolCall.error) : void 0
@@ -361,7 +382,11 @@ var AgentInspectAiSdkTelemetryIntegration = class {
361
382
  messageCount: event.messages.length,
362
383
  metadataKeyCount: countRecordKeys(event.metadata),
363
384
  providerMetadataKeyCount: countRecordKeys(toolCall.providerMetadata),
364
- toolMetadataKeyCount: countRecordKeys(toolCall.toolMetadata)
385
+ toolMetadataKeyCount: countRecordKeys(toolCall.toolMetadata),
386
+ ...this.previewAttributes({
387
+ input: toolCall.input,
388
+ ...event.success ? { output: event.output } : {}
389
+ })
365
390
  },
366
391
  outputSummary: event.success ? summarizeUnknown(event.output) : void 0,
367
392
  error: event.success ? void 0 : summarizeError(event.error)
@@ -399,7 +424,8 @@ var AgentInspectAiSdkTelemetryIntegration = class {
399
424
  warningCount: event.warnings?.length ?? 0,
400
425
  toolCallCount: event.toolCalls.length,
401
426
  toolResultCount: event.toolResults.length,
402
- metadataKeyCount: countRecordKeys(event.metadata)
427
+ metadataKeyCount: countRecordKeys(event.metadata),
428
+ ...this.previewAttributes({ output: event.text })
403
429
  },
404
430
  tokenUsage: summarizeUsage(event.totalUsage),
405
431
  outputSummary: {
@@ -459,23 +485,11 @@ var AgentInspectAiSdkTelemetryIntegration = class {
459
485
  this.diagnostics.lifecycleWarnings += 1;
460
486
  this.diagnostics.lastWarning = message;
461
487
  }
462
- previewCapabilityWarned = false;
463
488
  recordCaptureOptionWarnings() {
489
+ if (this.effectiveCapture === "preview") return;
464
490
  const previewOnlyOptions = [];
465
- if (this.requestedCapture === "preview") previewOnlyOptions.push("capture");
466
491
  if (this.options.redactionProfile !== void 0) previewOnlyOptions.push("redactionProfile");
467
492
  if (this.options.maxPreviewChars !== void 0) previewOnlyOptions.push("maxPreviewChars");
468
- if (this.requestedCapture === "preview") {
469
- 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.`;
470
- this.recordLifecycleWarning(
471
- `AI SDK preview capture is not supported yet; falling back to metadata-only capture. Unsupported options: ${previewOnlyOptions.join(", ")}.`
472
- );
473
- if (!this.previewCapabilityWarned) {
474
- this.previewCapabilityWarned = true;
475
- console.warn(`[agent-inspect:ai-sdk] ${message}`);
476
- }
477
- return;
478
- }
479
493
  if (previewOnlyOptions.length > 0) {
480
494
  this.recordLifecycleWarning(
481
495
  `AI SDK 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 { bindTelemetryIntegration } from \"ai\";\nimport type {\n OnFinishEvent,\n OnStartEvent,\n OnStepFinishEvent,\n OnStepStartEvent,\n OnToolCallFinishEvent,\n OnToolCallStartEvent,\n TelemetryIntegration,\n} from \"ai\";\nimport type {\n RedactionProfile,\n} from \"agent-inspect/advanced\";\nimport type {\n PersistedInspectEvent,\n PersistedInspectError,\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 AI SDK adapter.\n *\n * @experimental This package is part of the framework adapter train.\n */\nexport type AgentInspectAiSdkCaptureMode = \"metadata-only\" | \"preview\";\n\n/**\n * Options for the experimental AI SDK telemetry integration.\n *\n * @experimental Callers must keep AI SDK telemetry configured with\n * `recordInputs: false` and `recordOutputs: false`.\n */\nexport interface AgentInspectAiSdkOptions {\n /**\n * Explicit local writer for runtime integration.\n */\n writer?: TraceWriter;\n\n /**\n * Convenience local trace directory for writer-owned persistence.\n */\n traceDir?: string;\n\n /**\n * Optional run name used by lifecycle mapping.\n */\n runName?: string;\n\n /**\n * Capture policy. Defaults to metadata-only.\n *\n * @experimental `preview` is currently rejected with diagnostics and falls\n * back to metadata-only until bounded free-text preview capture is implemented.\n */\n capture?: AgentInspectAiSdkCaptureMode;\n\n /**\n * Redaction profile for future preview capture.\n *\n * @experimental Currently diagnostic-only because the adapter persists\n * metadata summaries and does not write raw preview content.\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 AgentInspectAiSdkDiagnostics {\n writeFailures: number;\n lifecycleWarnings: number;\n flushFailures: number;\n closeFailures: number;\n lastError?: string;\n lastWarning?: string;\n}\n\nexport interface AgentInspectAiSdkIntegration extends TelemetryIntegration {\n getDiagnostics(): AgentInspectAiSdkDiagnostics;\n getWriterStats(): TraceWriterStats | undefined;\n flush(): Promise<void>;\n close(): Promise<void>;\n}\n\ntype AiSdkModelInfo = {\n provider?: string;\n modelId?: string;\n};\n\ntype AiSdkUsage = {\n inputTokens?: number;\n outputTokens?: number;\n totalTokens?: number;\n cachedInputTokens?: number;\n};\n\ninterface ActiveStep {\n eventId: string;\n parentId: string;\n startedAt: string;\n}\n\ninterface ActiveTool {\n eventId: string;\n parentId: string;\n startedAt: string;\n toolName: string;\n}\n\ninterface ActiveRun {\n runId: string;\n eventId: string;\n name: string;\n startedAt: string;\n model?: AiSdkModelInfo;\n steps: Map<number, ActiveStep>;\n tools: Map<string, ActiveTool>;\n}\n\nconst AI_SDK_SOURCE = {\n type: \"ai-sdk\",\n name: \"@agent-inspect/ai-sdk\",\n version: \"experimental\",\n} as const;\n\nfunction nowIso(): string {\n return new Date().toISOString();\n}\n\nfunction createId(prefix: string): string {\n if (typeof crypto !== \"undefined\" && \"randomUUID\" in crypto) {\n return `${prefix}_${crypto.randomUUID()}`;\n }\n return `${prefix}_${Date.now()}_${Math.random().toString(16).slice(2)}`;\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 AI SDK integration 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 summarizeError(error: unknown): PersistedInspectError {\n if (error instanceof Error) {\n return {\n name: error.name || \"Error\",\n message: error.message,\n };\n }\n if (typeof error === \"string\") {\n return {\n message: error,\n };\n }\n return {\n message: \"Unknown AI SDK tool error\",\n };\n}\n\nfunction summarizeModel(model: AiSdkModelInfo | undefined): Record<string, unknown> {\n return {\n provider: model?.provider,\n modelId: model?.modelId,\n };\n}\n\nfunction summarizeUsage(usage: AiSdkUsage | undefined): PersistedTokenUsage | undefined {\n if (!usage) return undefined;\n\n const tokenUsage: PersistedTokenUsage = {};\n if (typeof usage.inputTokens === \"number\") tokenUsage.input = usage.inputTokens;\n if (typeof usage.outputTokens === \"number\") tokenUsage.output = usage.outputTokens;\n if (typeof usage.totalTokens === \"number\") tokenUsage.total = usage.totalTokens;\n if (typeof usage.cachedInputTokens === \"number\") tokenUsage.cached = usage.cachedInputTokens;\n\n return Object.keys(tokenUsage).length > 0 ? tokenUsage : undefined;\n}\n\nfunction summarizeFinishReason(\n finishReason: unknown,\n): { finishReason?: string; rawFinishReason?: string } {\n if (typeof finishReason === \"string\") {\n return { finishReason };\n }\n if (typeof finishReason !== \"object\" || finishReason === null) {\n return {};\n }\n\n const value = finishReason as { unified?: unknown; raw?: unknown };\n return {\n finishReason: typeof value.unified === \"string\" ? value.unified : undefined,\n rawFinishReason: typeof value.raw === \"string\" ? value.raw : undefined,\n };\n}\n\nclass AgentInspectAiSdkTelemetryIntegration {\n private readonly writer: TraceWriter | undefined;\n private readonly requestedCapture: AgentInspectAiSdkCaptureMode;\n private readonly effectiveCapture: \"metadata-only\" = \"metadata-only\";\n private readonly diagnostics: AgentInspectAiSdkDiagnostics = {\n writeFailures: 0,\n lifecycleWarnings: 0,\n flushFailures: 0,\n closeFailures: 0,\n };\n private activeRun: ActiveRun | undefined;\n private suspendedReason: string | undefined;\n\n constructor(private readonly options: AgentInspectAiSdkOptions) {\n this.requestedCapture = options.capture ?? \"metadata-only\";\n this.writer = options.writer ?? (options.traceDir ? fileWriter({ dir: options.traceDir }) : undefined);\n this.recordCaptureOptionWarnings();\n }\n\n getDiagnostics(): AgentInspectAiSdkDiagnostics {\n return { ...this.diagnostics };\n }\n\n async onStart(event: OnStartEvent): Promise<void> {\n await this.handleLifecycle(\"onStart\", async () => {\n if (this.activeRun || this.suspendedReason) {\n this.activeRun = undefined;\n this.suspendedReason =\n \"Overlapping AI SDK generation ignored; create one agentInspect() integration per concurrent generation.\";\n this.recordLifecycleWarning(this.suspendedReason);\n return;\n }\n\n const startedAt = nowIso();\n const runId = createId(\"ai_sdk_run\");\n const eventId = createId(\"event\");\n const name =\n this.options.runName ??\n event.functionId ??\n event.model.modelId ??\n \"ai-sdk-generation\";\n\n this.activeRun = {\n runId,\n eventId,\n name,\n startedAt,\n model: event.model,\n steps: new Map(),\n tools: new Map(),\n };\n\n await this.write({\n schemaVersion: \"0.2\",\n eventId,\n runId,\n kind: \"RUN\",\n name,\n status: \"running\",\n timestamp: startedAt,\n startedAt,\n confidence: \"explicit\",\n source: AI_SDK_SOURCE,\n attributes: {\n legacyEvent: \"run_started\",\n ...summarizeModel(event.model),\n functionId: event.functionId,\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 recordInputsRequired: false,\n recordOutputsRequired: false,\n toolCount: countRecordKeys(event.tools),\n hasPrompt: event.prompt !== undefined,\n hasMessages: event.messages !== undefined,\n metadataKeyCount: countRecordKeys(event.metadata),\n },\n });\n });\n }\n\n async onStepStart(event: OnStepStartEvent): Promise<void> {\n await this.handleLifecycle(\"onStepStart\", async () => {\n const run = this.getActiveRun(\"onStepStart\");\n if (!run) return;\n const startedAt = nowIso();\n const stepEventId = createId(\"event\");\n run.steps.set(event.stepNumber, {\n eventId: stepEventId,\n parentId: run.eventId,\n startedAt,\n });\n\n await this.write({\n schemaVersion: \"0.2\",\n eventId: stepEventId,\n runId: run.runId,\n parentId: run.eventId,\n kind: \"LLM\",\n name: `ai-sdk-step-${event.stepNumber}`,\n status: \"running\",\n timestamp: startedAt,\n startedAt,\n confidence: \"explicit\",\n source: AI_SDK_SOURCE,\n attributes: {\n legacyEvent: \"step_started\",\n stepId: stepEventId,\n ...summarizeModel(event.model),\n functionId: event.functionId,\n stepNumber: event.stepNumber,\n priorStepCount: event.steps.length,\n activeToolCount: event.activeTools?.length,\n toolCount: countRecordKeys(event.tools),\n messageCount: event.messages.length,\n metadataKeyCount: countRecordKeys(event.metadata),\n },\n });\n });\n }\n\n async onStepFinish(event: OnStepFinishEvent): Promise<void> {\n await this.handleLifecycle(\"onStepFinish\", async () => {\n const run = this.getActiveRun(\"onStepFinish\");\n if (!run) return;\n const endedAt = nowIso();\n const activeStep = run.steps.get(event.stepNumber);\n if (!activeStep) {\n this.recordLifecycleWarning(\n `onStepFinish ignored because step ${event.stepNumber} has no matching start callback.`,\n );\n return;\n }\n\n await this.write({\n schemaVersion: \"0.2\",\n eventId: activeStep.eventId,\n runId: run.runId,\n parentId: activeStep.parentId,\n kind: \"LLM\",\n name: `ai-sdk-step-${event.stepNumber}`,\n status: \"ok\",\n timestamp: endedAt,\n startedAt: activeStep.startedAt,\n endedAt,\n durationMs: durationMs(activeStep.startedAt, endedAt),\n confidence: \"explicit\",\n source: AI_SDK_SOURCE,\n attributes: {\n legacyEvent: \"step_completed\",\n stepId: activeStep.eventId,\n ...summarizeModel(event.model),\n functionId: event.functionId,\n stepNumber: event.stepNumber,\n ...summarizeFinishReason(event.finishReason),\n warningCount: event.warnings?.length ?? 0,\n contentPartCount: event.content.length,\n toolCallCount: event.toolCalls.length,\n toolResultCount: event.toolResults.length,\n responseId: event.response.id,\n responseModelId: event.response.modelId,\n responseTimestamp: event.response.timestamp?.toISOString(),\n metadataKeyCount: countRecordKeys(event.metadata),\n },\n tokenUsage: summarizeUsage(event.usage),\n outputSummary: {\n contentPartCount: event.content.length,\n textLength: event.text.length,\n reasoningPartCount: event.reasoning.length,\n fileCount: event.files.length,\n sourceCount: event.sources.length,\n },\n });\n });\n }\n\n async onToolCallStart(event: OnToolCallStartEvent): Promise<void> {\n await this.handleLifecycle(\"onToolCallStart\", async () => {\n const run = this.getActiveRun(\"onToolCallStart\");\n if (!run) return;\n const startedAt = nowIso();\n const eventId = createId(\"event\");\n const toolCall = event.toolCall;\n const step = event.stepNumber === undefined ? undefined : run.steps.get(event.stepNumber);\n const parentId = step?.eventId ?? run.eventId;\n if (event.stepNumber === undefined || !step) {\n this.recordLifecycleWarning(\n \"onToolCallStart attached tool to run because the AI SDK callback did not expose a matching active step.\",\n );\n }\n run.tools.set(toolCall.toolCallId, {\n eventId,\n parentId,\n startedAt,\n toolName: toolCall.toolName,\n });\n\n await this.write({\n schemaVersion: \"0.2\",\n eventId,\n runId: run.runId,\n parentId,\n kind: \"TOOL\",\n name: toolCall.toolName,\n status: \"running\",\n timestamp: startedAt,\n startedAt,\n confidence: \"explicit\",\n source: AI_SDK_SOURCE,\n attributes: {\n legacyEvent: \"step_started\",\n stepId: eventId,\n ...summarizeModel(event.model),\n functionId: event.functionId,\n stepNumber: event.stepNumber,\n toolCallId: toolCall.toolCallId,\n toolName: toolCall.toolName,\n dynamic: toolCall.dynamic === true,\n invalid: toolCall.invalid === true,\n providerExecuted: toolCall.providerExecuted === true,\n messageCount: event.messages.length,\n metadataKeyCount: countRecordKeys(event.metadata),\n providerMetadataKeyCount: countRecordKeys(toolCall.providerMetadata),\n toolMetadataKeyCount: countRecordKeys(toolCall.toolMetadata),\n },\n inputSummary: summarizeUnknown(toolCall.input),\n error: toolCall.invalid ? summarizeError(toolCall.error) : undefined,\n });\n });\n }\n\n async onToolCallFinish(event: OnToolCallFinishEvent): Promise<void> {\n await this.handleLifecycle(\"onToolCallFinish\", async () => {\n const run = this.getActiveRun(\"onToolCallFinish\");\n if (!run) return;\n const endedAt = nowIso();\n const toolCall = event.toolCall;\n const activeTool = run.tools.get(toolCall.toolCallId);\n if (!activeTool) {\n this.recordLifecycleWarning(\n `onToolCallFinish ignored because tool call ${toolCall.toolCallId} has no matching start callback.`,\n );\n return;\n }\n\n await this.write({\n schemaVersion: \"0.2\",\n eventId: activeTool.eventId,\n runId: run.runId,\n parentId: activeTool.parentId,\n kind: \"TOOL\",\n name: activeTool.toolName,\n status: event.success ? \"ok\" : \"error\",\n timestamp: endedAt,\n startedAt: activeTool.startedAt,\n endedAt,\n durationMs: event.durationMs,\n confidence: \"explicit\",\n source: AI_SDK_SOURCE,\n attributes: {\n legacyEvent: \"step_completed\",\n stepId: activeTool.eventId,\n ...summarizeModel(event.model),\n functionId: event.functionId,\n stepNumber: event.stepNumber,\n toolCallId: toolCall.toolCallId,\n toolName: toolCall.toolName,\n dynamic: toolCall.dynamic === true,\n invalid: toolCall.invalid === true,\n providerExecuted: toolCall.providerExecuted === true,\n messageCount: event.messages.length,\n metadataKeyCount: countRecordKeys(event.metadata),\n providerMetadataKeyCount: countRecordKeys(toolCall.providerMetadata),\n toolMetadataKeyCount: countRecordKeys(toolCall.toolMetadata),\n },\n outputSummary: event.success ? summarizeUnknown(event.output) : undefined,\n error: event.success ? undefined : summarizeError(event.error),\n });\n });\n }\n\n async onFinish(event: OnFinishEvent): Promise<void> {\n await this.handleLifecycle(\"onFinish\", async () => {\n if (this.suspendedReason) {\n this.suspendedReason = undefined;\n return;\n }\n const run = this.getActiveRun(\"onFinish\");\n if (!run) return;\n const endedAt = nowIso();\n\n await this.write({\n schemaVersion: \"0.2\",\n eventId: run.eventId,\n runId: run.runId,\n kind: \"RUN\",\n name: run.name,\n status: \"ok\",\n timestamp: endedAt,\n startedAt: run.startedAt,\n endedAt,\n durationMs: durationMs(run.startedAt, endedAt),\n confidence: \"explicit\",\n source: AI_SDK_SOURCE,\n attributes: {\n legacyEvent: \"run_completed\",\n ...summarizeModel(event.model ?? run.model),\n functionId: event.functionId,\n ...summarizeFinishReason(event.finishReason),\n stepCount: event.steps.length,\n warningCount: event.warnings?.length ?? 0,\n toolCallCount: event.toolCalls.length,\n toolResultCount: event.toolResults.length,\n metadataKeyCount: countRecordKeys(event.metadata),\n },\n tokenUsage: summarizeUsage(event.totalUsage),\n outputSummary: {\n contentPartCount: event.content.length,\n textLength: event.text.length,\n reasoningPartCount: event.reasoning.length,\n fileCount: event.files.length,\n sourceCount: event.sources.length,\n },\n });\n\n this.activeRun = undefined;\n });\n }\n\n getWriterStats(): TraceWriterStats | undefined {\n return this.writer?.getStats?.();\n }\n\n async flush(): 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 close(): Promise<void> {\n try {\n await this.writer?.close?.();\n } catch (error) {\n this.diagnostics.closeFailures += 1;\n this.diagnostics.lastError = normalizeError(error);\n } finally {\n this.activeRun = undefined;\n this.suspendedReason = undefined;\n }\n }\n\n private getActiveRun(callbackName: string): ActiveRun | undefined {\n if (this.suspendedReason) {\n this.recordLifecycleWarning(\n `${callbackName} ignored while integration is suspended: ${this.suspendedReason}`,\n );\n return undefined;\n }\n if (this.activeRun) return this.activeRun;\n\n this.recordLifecycleWarning(\n `${callbackName} ignored because no active AI SDK generation was started.`,\n );\n return undefined;\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 `AI SDK 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:ai-sdk] ${message}`);\n }\n return;\n }\n\n if (previewOnlyOptions.length > 0) {\n this.recordLifecycleWarning(\n `AI SDK 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 telemetry integration for the Vercel AI SDK.\n *\n * @experimental The adapter maps metadata-only generation, LLM step, and tool\n * lifecycle events. Keep AI SDK telemetry configured with\n * `recordInputs: false` and `recordOutputs: false`.\n */\nexport function agentInspect(\n options: AgentInspectAiSdkOptions = {},\n): AgentInspectAiSdkIntegration {\n const integration = new AgentInspectAiSdkTelemetryIntegration(options);\n return {\n ...bindTelemetryIntegration(integration),\n getDiagnostics: () => integration.getDiagnostics(),\n getWriterStats: () => integration.getWriterStats(),\n flush: () => integration.flush(),\n close: () => integration.close(),\n };\n}\n"]}
1
+ {"version":3,"sources":["../src/index.ts"],"names":[],"mappings":"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","file":"index.mjs","sourcesContent":["import { bindTelemetryIntegration } from \"ai\";\nimport type {\n OnFinishEvent,\n OnStartEvent,\n OnStepFinishEvent,\n OnStepStartEvent,\n OnToolCallFinishEvent,\n OnToolCallStartEvent,\n TelemetryIntegration,\n} from \"ai\";\nimport { createAdapterPreviewCapture } from \"agent-inspect/advanced\";\nimport type {\n AdapterCaptureDiagnostics,\n AdapterDiagnosticListener,\n AdapterPreviewCapture,\n RedactionProfile,\n} from \"agent-inspect/advanced\";\nimport type {\n PersistedInspectEvent,\n PersistedInspectError,\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 AI SDK adapter.\n *\n * `metadata-only` is the default. `preview` persists bounded, redacted preview\n * attributes through the shared adapter capture helper.\n *\n * @experimental This package is part of the framework adapter train.\n */\nexport type AgentInspectAiSdkCaptureMode = \"metadata-only\" | \"preview\";\n\n/**\n * Options for the experimental AI SDK telemetry integration.\n *\n * @experimental Callers must keep AI SDK telemetry configured with\n * `recordInputs: false` and `recordOutputs: false`.\n */\nexport interface AgentInspectAiSdkOptions {\n /**\n * Explicit local writer for runtime integration.\n */\n writer?: TraceWriter;\n\n /**\n * Convenience local trace directory for writer-owned persistence.\n */\n traceDir?: string;\n\n /**\n * Optional run name used by lifecycle mapping.\n */\n runName?: string;\n\n /**\n * Capture policy. Defaults to metadata-only.\n *\n * @experimental `preview` persists bounded, redacted prompt/message/output\n * previews. It never persists full content.\n */\n capture?: AgentInspectAiSdkCaptureMode;\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 AgentInspectAiSdkDiagnostics {\n writeFailures: number;\n lifecycleWarnings: number;\n flushFailures: number;\n closeFailures: number;\n lastError?: string;\n lastWarning?: string;\n /** Shared preview-capture counters (`@experimental`). */\n capture: AdapterCaptureDiagnostics;\n}\n\nexport interface AgentInspectAiSdkIntegration extends TelemetryIntegration {\n getDiagnostics(): AgentInspectAiSdkDiagnostics;\n getWriterStats(): TraceWriterStats | undefined;\n flush(): Promise<void>;\n close(): Promise<void>;\n}\n\ntype AiSdkModelInfo = {\n provider?: string;\n modelId?: string;\n};\n\ntype AiSdkUsage = {\n inputTokens?: number;\n outputTokens?: number;\n totalTokens?: number;\n cachedInputTokens?: number;\n};\n\ninterface ActiveStep {\n eventId: string;\n parentId: string;\n startedAt: string;\n}\n\ninterface ActiveTool {\n eventId: string;\n parentId: string;\n startedAt: string;\n toolName: string;\n}\n\ninterface ActiveRun {\n runId: string;\n eventId: string;\n name: string;\n startedAt: string;\n model?: AiSdkModelInfo;\n steps: Map<number, ActiveStep>;\n tools: Map<string, ActiveTool>;\n}\n\nconst AI_SDK_SOURCE = {\n type: \"ai-sdk\",\n name: \"@agent-inspect/ai-sdk\",\n version: \"experimental\",\n} as const;\n\nfunction nowIso(): string {\n return new Date().toISOString();\n}\n\nfunction createId(prefix: string): string {\n if (typeof crypto !== \"undefined\" && \"randomUUID\" in crypto) {\n return `${prefix}_${crypto.randomUUID()}`;\n }\n return `${prefix}_${Date.now()}_${Math.random().toString(16).slice(2)}`;\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 AI SDK integration 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 summarizeError(error: unknown): PersistedInspectError {\n if (error instanceof Error) {\n return {\n name: error.name || \"Error\",\n message: error.message,\n };\n }\n if (typeof error === \"string\") {\n return {\n message: error,\n };\n }\n return {\n message: \"Unknown AI SDK tool error\",\n };\n}\n\nfunction summarizeModel(model: AiSdkModelInfo | undefined): Record<string, unknown> {\n return {\n provider: model?.provider,\n modelId: model?.modelId,\n };\n}\n\nfunction summarizeUsage(usage: AiSdkUsage | undefined): PersistedTokenUsage | undefined {\n if (!usage) return undefined;\n\n const tokenUsage: PersistedTokenUsage = {};\n if (typeof usage.inputTokens === \"number\") tokenUsage.input = usage.inputTokens;\n if (typeof usage.outputTokens === \"number\") tokenUsage.output = usage.outputTokens;\n if (typeof usage.totalTokens === \"number\") tokenUsage.total = usage.totalTokens;\n if (typeof usage.cachedInputTokens === \"number\") tokenUsage.cached = usage.cachedInputTokens;\n\n return Object.keys(tokenUsage).length > 0 ? tokenUsage : undefined;\n}\n\nfunction summarizeFinishReason(\n finishReason: unknown,\n): { finishReason?: string; rawFinishReason?: string } {\n if (typeof finishReason === \"string\") {\n return { finishReason };\n }\n if (typeof finishReason !== \"object\" || finishReason === null) {\n return {};\n }\n\n const value = finishReason as { unified?: unknown; raw?: unknown };\n return {\n finishReason: typeof value.unified === \"string\" ? value.unified : undefined,\n rawFinishReason: typeof value.raw === \"string\" ? value.raw : undefined,\n };\n}\n\nclass AgentInspectAiSdkTelemetryIntegration {\n private readonly writer: TraceWriter | undefined;\n private readonly requestedCapture: AgentInspectAiSdkCaptureMode;\n private readonly preview: AdapterPreviewCapture;\n private readonly effectiveCapture: AgentInspectAiSdkCaptureMode;\n private readonly diagnostics: Omit<AgentInspectAiSdkDiagnostics, \"capture\"> = {\n writeFailures: 0,\n lifecycleWarnings: 0,\n flushFailures: 0,\n closeFailures: 0,\n };\n private activeRun: ActiveRun | undefined;\n private suspendedReason: string | undefined;\n\n constructor(private readonly options: AgentInspectAiSdkOptions) {\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 this.recordCaptureOptionWarnings();\n }\n\n getDiagnostics(): AgentInspectAiSdkDiagnostics {\n return { ...this.diagnostics, capture: this.preview.getDiagnostics() };\n }\n\n /** Bounded preview attributes for one lifecycle event (empty unless enabled). */\n private previewAttributes(\n fields: Record<string, unknown>,\n ): Record<string, unknown> {\n return this.preview.applyPreviewFields({}, fields);\n }\n\n async onStart(event: OnStartEvent): Promise<void> {\n await this.handleLifecycle(\"onStart\", async () => {\n if (this.activeRun || this.suspendedReason) {\n this.activeRun = undefined;\n this.suspendedReason =\n \"Overlapping AI SDK generation ignored; create one agentInspect() integration per concurrent generation.\";\n this.recordLifecycleWarning(this.suspendedReason);\n return;\n }\n\n const startedAt = nowIso();\n const runId = createId(\"ai_sdk_run\");\n const eventId = createId(\"event\");\n const name =\n this.options.runName ??\n event.functionId ??\n event.model.modelId ??\n \"ai-sdk-generation\";\n\n this.activeRun = {\n runId,\n eventId,\n name,\n startedAt,\n model: event.model,\n steps: new Map(),\n tools: new Map(),\n };\n\n await this.write({\n schemaVersion: \"0.2\",\n eventId,\n runId,\n kind: \"RUN\",\n name,\n status: \"running\",\n timestamp: startedAt,\n startedAt,\n confidence: \"explicit\",\n source: AI_SDK_SOURCE,\n attributes: {\n legacyEvent: \"run_started\",\n ...summarizeModel(event.model),\n functionId: event.functionId,\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 recordInputsRequired: false,\n recordOutputsRequired: false,\n toolCount: countRecordKeys(event.tools),\n hasPrompt: event.prompt !== undefined,\n hasMessages: event.messages !== undefined,\n metadataKeyCount: countRecordKeys(event.metadata),\n ...this.previewAttributes({\n input: event.prompt ?? event.messages,\n }),\n },\n });\n });\n }\n\n async onStepStart(event: OnStepStartEvent): Promise<void> {\n await this.handleLifecycle(\"onStepStart\", async () => {\n const run = this.getActiveRun(\"onStepStart\");\n if (!run) return;\n const startedAt = nowIso();\n const stepEventId = createId(\"event\");\n run.steps.set(event.stepNumber, {\n eventId: stepEventId,\n parentId: run.eventId,\n startedAt,\n });\n\n await this.write({\n schemaVersion: \"0.2\",\n eventId: stepEventId,\n runId: run.runId,\n parentId: run.eventId,\n kind: \"LLM\",\n name: `ai-sdk-step-${event.stepNumber}`,\n status: \"running\",\n timestamp: startedAt,\n startedAt,\n confidence: \"explicit\",\n source: AI_SDK_SOURCE,\n attributes: {\n legacyEvent: \"step_started\",\n stepId: stepEventId,\n ...summarizeModel(event.model),\n functionId: event.functionId,\n stepNumber: event.stepNumber,\n priorStepCount: event.steps.length,\n activeToolCount: event.activeTools?.length,\n toolCount: countRecordKeys(event.tools),\n messageCount: event.messages.length,\n metadataKeyCount: countRecordKeys(event.metadata),\n ...this.previewAttributes({ input: event.messages }),\n },\n });\n });\n }\n\n async onStepFinish(event: OnStepFinishEvent): Promise<void> {\n await this.handleLifecycle(\"onStepFinish\", async () => {\n const run = this.getActiveRun(\"onStepFinish\");\n if (!run) return;\n const endedAt = nowIso();\n const activeStep = run.steps.get(event.stepNumber);\n if (!activeStep) {\n this.recordLifecycleWarning(\n `onStepFinish ignored because step ${event.stepNumber} has no matching start callback.`,\n );\n return;\n }\n\n await this.write({\n schemaVersion: \"0.2\",\n eventId: activeStep.eventId,\n runId: run.runId,\n parentId: activeStep.parentId,\n kind: \"LLM\",\n name: `ai-sdk-step-${event.stepNumber}`,\n status: \"ok\",\n timestamp: endedAt,\n startedAt: activeStep.startedAt,\n endedAt,\n durationMs: durationMs(activeStep.startedAt, endedAt),\n confidence: \"explicit\",\n source: AI_SDK_SOURCE,\n attributes: {\n legacyEvent: \"step_completed\",\n stepId: activeStep.eventId,\n ...summarizeModel(event.model),\n functionId: event.functionId,\n stepNumber: event.stepNumber,\n ...summarizeFinishReason(event.finishReason),\n warningCount: event.warnings?.length ?? 0,\n contentPartCount: event.content.length,\n toolCallCount: event.toolCalls.length,\n toolResultCount: event.toolResults.length,\n responseId: event.response.id,\n responseModelId: event.response.modelId,\n responseTimestamp: event.response.timestamp?.toISOString(),\n metadataKeyCount: countRecordKeys(event.metadata),\n ...this.previewAttributes({ output: event.text }),\n },\n tokenUsage: summarizeUsage(event.usage),\n outputSummary: {\n contentPartCount: event.content.length,\n textLength: event.text.length,\n reasoningPartCount: event.reasoning.length,\n fileCount: event.files.length,\n sourceCount: event.sources.length,\n },\n });\n });\n }\n\n async onToolCallStart(event: OnToolCallStartEvent): Promise<void> {\n await this.handleLifecycle(\"onToolCallStart\", async () => {\n const run = this.getActiveRun(\"onToolCallStart\");\n if (!run) return;\n const startedAt = nowIso();\n const eventId = createId(\"event\");\n const toolCall = event.toolCall;\n const step = event.stepNumber === undefined ? undefined : run.steps.get(event.stepNumber);\n const parentId = step?.eventId ?? run.eventId;\n if (event.stepNumber === undefined || !step) {\n this.recordLifecycleWarning(\n \"onToolCallStart attached tool to run because the AI SDK callback did not expose a matching active step.\",\n );\n }\n run.tools.set(toolCall.toolCallId, {\n eventId,\n parentId,\n startedAt,\n toolName: toolCall.toolName,\n });\n\n await this.write({\n schemaVersion: \"0.2\",\n eventId,\n runId: run.runId,\n parentId,\n kind: \"TOOL\",\n name: toolCall.toolName,\n status: \"running\",\n timestamp: startedAt,\n startedAt,\n confidence: \"explicit\",\n source: AI_SDK_SOURCE,\n attributes: {\n legacyEvent: \"step_started\",\n stepId: eventId,\n ...summarizeModel(event.model),\n functionId: event.functionId,\n stepNumber: event.stepNumber,\n toolCallId: toolCall.toolCallId,\n toolName: toolCall.toolName,\n dynamic: toolCall.dynamic === true,\n invalid: toolCall.invalid === true,\n providerExecuted: toolCall.providerExecuted === true,\n messageCount: event.messages.length,\n metadataKeyCount: countRecordKeys(event.metadata),\n providerMetadataKeyCount: countRecordKeys(toolCall.providerMetadata),\n toolMetadataKeyCount: countRecordKeys(toolCall.toolMetadata),\n ...this.previewAttributes({ input: toolCall.input }),\n },\n inputSummary: summarizeUnknown(toolCall.input),\n error: toolCall.invalid ? summarizeError(toolCall.error) : undefined,\n });\n });\n }\n\n async onToolCallFinish(event: OnToolCallFinishEvent): Promise<void> {\n await this.handleLifecycle(\"onToolCallFinish\", async () => {\n const run = this.getActiveRun(\"onToolCallFinish\");\n if (!run) return;\n const endedAt = nowIso();\n const toolCall = event.toolCall;\n const activeTool = run.tools.get(toolCall.toolCallId);\n if (!activeTool) {\n this.recordLifecycleWarning(\n `onToolCallFinish ignored because tool call ${toolCall.toolCallId} has no matching start callback.`,\n );\n return;\n }\n\n await this.write({\n schemaVersion: \"0.2\",\n eventId: activeTool.eventId,\n runId: run.runId,\n parentId: activeTool.parentId,\n kind: \"TOOL\",\n name: activeTool.toolName,\n status: event.success ? \"ok\" : \"error\",\n timestamp: endedAt,\n startedAt: activeTool.startedAt,\n endedAt,\n durationMs: event.durationMs,\n confidence: \"explicit\",\n source: AI_SDK_SOURCE,\n attributes: {\n legacyEvent: \"step_completed\",\n stepId: activeTool.eventId,\n ...summarizeModel(event.model),\n functionId: event.functionId,\n stepNumber: event.stepNumber,\n toolCallId: toolCall.toolCallId,\n toolName: toolCall.toolName,\n dynamic: toolCall.dynamic === true,\n invalid: toolCall.invalid === true,\n providerExecuted: toolCall.providerExecuted === true,\n messageCount: event.messages.length,\n metadataKeyCount: countRecordKeys(event.metadata),\n providerMetadataKeyCount: countRecordKeys(toolCall.providerMetadata),\n toolMetadataKeyCount: countRecordKeys(toolCall.toolMetadata),\n ...this.previewAttributes({\n input: toolCall.input,\n ...(event.success ? { output: event.output } : {}),\n }),\n },\n outputSummary: event.success ? summarizeUnknown(event.output) : undefined,\n error: event.success ? undefined : summarizeError(event.error),\n });\n });\n }\n\n async onFinish(event: OnFinishEvent): Promise<void> {\n await this.handleLifecycle(\"onFinish\", async () => {\n if (this.suspendedReason) {\n this.suspendedReason = undefined;\n return;\n }\n const run = this.getActiveRun(\"onFinish\");\n if (!run) return;\n const endedAt = nowIso();\n\n await this.write({\n schemaVersion: \"0.2\",\n eventId: run.eventId,\n runId: run.runId,\n kind: \"RUN\",\n name: run.name,\n status: \"ok\",\n timestamp: endedAt,\n startedAt: run.startedAt,\n endedAt,\n durationMs: durationMs(run.startedAt, endedAt),\n confidence: \"explicit\",\n source: AI_SDK_SOURCE,\n attributes: {\n legacyEvent: \"run_completed\",\n ...summarizeModel(event.model ?? run.model),\n functionId: event.functionId,\n ...summarizeFinishReason(event.finishReason),\n stepCount: event.steps.length,\n warningCount: event.warnings?.length ?? 0,\n toolCallCount: event.toolCalls.length,\n toolResultCount: event.toolResults.length,\n metadataKeyCount: countRecordKeys(event.metadata),\n ...this.previewAttributes({ output: event.text }),\n },\n tokenUsage: summarizeUsage(event.totalUsage),\n outputSummary: {\n contentPartCount: event.content.length,\n textLength: event.text.length,\n reasoningPartCount: event.reasoning.length,\n fileCount: event.files.length,\n sourceCount: event.sources.length,\n },\n });\n\n this.activeRun = undefined;\n });\n }\n\n getWriterStats(): TraceWriterStats | undefined {\n return this.writer?.getStats?.();\n }\n\n async flush(): 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 close(): Promise<void> {\n try {\n await this.writer?.close?.();\n } catch (error) {\n this.diagnostics.closeFailures += 1;\n this.diagnostics.lastError = normalizeError(error);\n } finally {\n this.activeRun = undefined;\n this.suspendedReason = undefined;\n }\n }\n\n private getActiveRun(callbackName: string): ActiveRun | undefined {\n if (this.suspendedReason) {\n this.recordLifecycleWarning(\n `${callbackName} ignored while integration is suspended: ${this.suspendedReason}`,\n );\n return undefined;\n }\n if (this.activeRun) return this.activeRun;\n\n this.recordLifecycleWarning(\n `${callbackName} ignored because no active AI SDK generation was started.`,\n );\n return undefined;\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 `AI SDK 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 telemetry integration for the Vercel AI SDK.\n *\n * @experimental The adapter maps generation, LLM step, and tool lifecycle\n * events. Capture is metadata-only by default; `capture: \"preview\"` adds\n * bounded, redacted preview attributes. Keep AI SDK telemetry configured with\n * `recordInputs: false` and `recordOutputs: false`.\n */\nexport function agentInspect(\n options: AgentInspectAiSdkOptions = {},\n): AgentInspectAiSdkIntegration {\n const integration = new AgentInspectAiSdkTelemetryIntegration(options);\n return {\n ...bindTelemetryIntegration(integration),\n getDiagnostics: () => integration.getDiagnostics(),\n getWriterStats: () => integration.getWriterStats(),\n flush: () => integration.flush(),\n close: () => integration.close(),\n };\n}\n"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@agent-inspect/ai-sdk",
3
- "version": "6.17.7",
3
+ "version": "6.18.0",
4
4
  "license": "MIT",
5
5
  "type": "module",
6
6
  "description": "Vercel AI SDK telemetry integration for AgentInspect local traces and trajectory tests",
@@ -37,7 +37,7 @@
37
37
  "ai": "^6.0.0"
38
38
  },
39
39
  "dependencies": {
40
- "agent-inspect": "6.17.7"
40
+ "agent-inspect": "6.18.0"
41
41
  },
42
42
  "devDependencies": {
43
43
  "ai": "^6.0.210"