@agent-inspect/ai-sdk 6.17.8 → 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 +5 -3
- package/dist/index.cjs +38 -24
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +55 -10
- package/dist/index.d.ts +55 -10
- package/dist/index.mjs +38 -24
- package/dist/index.mjs.map +1 -1
- package/package.json +2 -2
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
|
|
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
|
|
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
|
-
- **
|
|
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
|
-
|
|
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:
|
|
169
|
-
|
|
170
|
-
|
|
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(", ")}.`
|
package/dist/index.cjs.map
CHANGED
|
@@ -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`
|
|
36
|
-
*
|
|
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
|
|
76
|
+
* Redaction profile applied to preview attributes before persistence.
|
|
77
|
+
* `share` and `strict` also cap `maxPreviewChars`.
|
|
41
78
|
*
|
|
42
|
-
* @experimental
|
|
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
|
-
*
|
|
83
|
+
* Upper bound for each serialized preview attribute. Defaults to 200.
|
|
48
84
|
*
|
|
49
|
-
* @experimental
|
|
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
|
|
72
|
-
*
|
|
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`
|
|
36
|
-
*
|
|
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
|
|
76
|
+
* Redaction profile applied to preview attributes before persistence.
|
|
77
|
+
* `share` and `strict` also cap `maxPreviewChars`.
|
|
41
78
|
*
|
|
42
|
-
* @experimental
|
|
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
|
-
*
|
|
83
|
+
* Upper bound for each serialized preview attribute. Defaults to 200.
|
|
48
84
|
*
|
|
49
|
-
* @experimental
|
|
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
|
|
72
|
-
*
|
|
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
|
-
|
|
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:
|
|
167
|
-
|
|
168
|
-
|
|
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(", ")}.`
|
package/dist/index.mjs.map
CHANGED
|
@@ -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.
|
|
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.
|
|
40
|
+
"agent-inspect": "6.18.0"
|
|
41
41
|
},
|
|
42
42
|
"devDependencies": {
|
|
43
43
|
"ai": "^6.0.210"
|