@deepagents/context 7.0.1 → 7.1.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.
Files changed (80) hide show
  1. package/README.md +4 -4
  2. package/dist/browser.js +210 -77
  3. package/dist/browser.js.map +4 -4
  4. package/dist/index.js +1311 -1363
  5. package/dist/index.js.map +4 -4
  6. package/dist/lib/agent.d.ts +21 -45
  7. package/dist/lib/agent.d.ts.map +1 -1
  8. package/dist/lib/chat.d.ts +11 -5
  9. package/dist/lib/chat.d.ts.map +1 -1
  10. package/dist/lib/codec/serialized-fragments.d.ts +7 -5
  11. package/dist/lib/codec/serialized-fragments.d.ts.map +1 -1
  12. package/dist/lib/engine.d.ts.map +1 -1
  13. package/dist/lib/estimate.d.ts +8 -3
  14. package/dist/lib/estimate.d.ts.map +1 -1
  15. package/dist/lib/fragments/plan-shared.d.ts +1 -1
  16. package/dist/lib/fragments/reminders/src/predicates/tool.d.ts.map +1 -1
  17. package/dist/lib/fragments.d.ts +6 -0
  18. package/dist/lib/fragments.d.ts.map +1 -1
  19. package/dist/lib/resolvers/async-resolver.d.ts +2 -2
  20. package/dist/lib/resolvers/async-resolver.d.ts.map +1 -1
  21. package/dist/lib/resolvers/function-resolver.d.ts +2 -2
  22. package/dist/lib/resolvers/function-resolver.d.ts.map +1 -1
  23. package/dist/lib/resolvers/generator-resolver.d.ts +2 -2
  24. package/dist/lib/resolvers/generator-resolver.d.ts.map +1 -1
  25. package/dist/lib/resolvers/iterable-resolver.d.ts +1 -1
  26. package/dist/lib/resolvers/iterable-resolver.d.ts.map +1 -1
  27. package/dist/lib/resolvers/loader-resolver.d.ts.map +1 -1
  28. package/dist/lib/resolvers/promise-resolver.d.ts +1 -1
  29. package/dist/lib/resolvers/promise-resolver.d.ts.map +1 -1
  30. package/dist/lib/resolvers/types.d.ts +3 -2
  31. package/dist/lib/resolvers/types.d.ts.map +1 -1
  32. package/dist/lib/sandbox/apple-container-sandbox.d.ts.map +1 -1
  33. package/dist/lib/sandbox/ast-utils.d.ts +3 -1
  34. package/dist/lib/sandbox/ast-utils.d.ts.map +1 -1
  35. package/dist/lib/sandbox/binary-bridges.d.ts.map +1 -1
  36. package/dist/lib/sandbox/cli-process.d.ts +6 -1
  37. package/dist/lib/sandbox/cli-process.d.ts.map +1 -1
  38. package/dist/lib/sandbox/container-engine.d.ts +4 -1
  39. package/dist/lib/sandbox/container-engine.d.ts.map +1 -1
  40. package/dist/lib/sandbox/container-sandbox.d.ts.map +1 -1
  41. package/dist/lib/sandbox/docker-sandbox.d.ts +3 -3
  42. package/dist/lib/sandbox/docker-sandbox.d.ts.map +1 -1
  43. package/dist/lib/sandbox/index.d.ts +0 -1
  44. package/dist/lib/sandbox/index.d.ts.map +1 -1
  45. package/dist/lib/sandbox/installers/installer.d.ts +6 -1
  46. package/dist/lib/sandbox/installers/installer.d.ts.map +1 -1
  47. package/dist/lib/sandbox/installers/url-binary.d.ts.map +1 -1
  48. package/dist/lib/sandbox/read-file.d.ts +2 -1
  49. package/dist/lib/sandbox/read-file.d.ts.map +1 -1
  50. package/dist/lib/sandbox/strace/index.js +3 -3
  51. package/dist/lib/sandbox/strace/index.js.map +2 -2
  52. package/dist/lib/sandbox/types.d.ts +4 -5
  53. package/dist/lib/sandbox/types.d.ts.map +1 -1
  54. package/dist/lib/skills/frontmatter.d.ts.map +1 -1
  55. package/dist/lib/store/columns.d.ts +13 -0
  56. package/dist/lib/store/columns.d.ts.map +1 -0
  57. package/dist/lib/store/postgres.store.d.ts.map +1 -1
  58. package/dist/lib/store/sqlite.store.d.ts.map +1 -1
  59. package/dist/lib/store/sqlserver.store.d.ts.map +1 -1
  60. package/dist/lib/stream/postgres-notify-change-source.d.ts.map +1 -1
  61. package/dist/lib/stream/postgres.stream-store.d.ts.map +1 -1
  62. package/dist/lib/stream/rows.d.ts +16 -0
  63. package/dist/lib/stream/rows.d.ts.map +1 -0
  64. package/dist/lib/stream/sqlite.stream-store.d.ts.map +1 -1
  65. package/dist/lib/stream-buffer.d.ts +10 -1
  66. package/dist/lib/stream-buffer.d.ts.map +1 -1
  67. package/dist/lib/telemetry/file/index.js +23 -13
  68. package/dist/lib/telemetry/file/index.js.map +2 -2
  69. package/dist/lib/telemetry/index.js +23 -13
  70. package/dist/lib/telemetry/index.js.map +2 -2
  71. package/dist/lib/telemetry/redact-telemetry-event.d.ts +1 -0
  72. package/dist/lib/telemetry/redact-telemetry-event.d.ts.map +1 -1
  73. package/dist/lib/tracing/index.js +27 -24
  74. package/dist/lib/tracing/index.js.map +3 -3
  75. package/dist/lib/tracing/openai-traces-integration.d.ts.map +1 -1
  76. package/dist/lib/tracing/serialization.d.ts +2 -0
  77. package/dist/lib/tracing/serialization.d.ts.map +1 -1
  78. package/package.json +8 -16
  79. package/dist/lib/sandbox/agent-os-sandbox.d.ts +0 -85
  80. package/dist/lib/sandbox/agent-os-sandbox.d.ts.map +0 -1
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../../src/lib/telemetry/file/file-telemetry.ts", "../../../../src/lib/telemetry/redact-telemetry-event.ts", "../../../../src/lib/telemetry/create-telemetry-integration.ts", "../../../../src/lib/telemetry/safe-serialize.ts"],
4
- "sourcesContent": ["import type { Telemetry } from 'ai';\nimport { appendFile, mkdir } from 'node:fs/promises';\nimport { dirname, resolve } from 'node:path';\nimport { pathToFileURL } from 'node:url';\n\nimport { createTelemetryIntegration } from '../create-telemetry-integration.ts';\nimport {\n createTelemetryLogRecord,\n stringifyTelemetryLogRecord,\n} from '../safe-serialize.ts';\n\nexport interface FileTelemetryOptions {\n path: string;\n onWriteError?: (error: unknown) => void | PromiseLike<void>;\n}\n\nexport function createFileTelemetry(\n options: FileTelemetryOptions,\n): Telemetry & { readonly traces: { readonly path: string } } {\n const path = resolve(options.path);\n const reportWriteError = async (error: unknown): Promise<void> => {\n try {\n await options.onWriteError?.(error);\n } catch {\n // Telemetry must never affect the observed operation.\n }\n };\n const initialize = mkdir(dirname(path), { recursive: true }).then(\n () => undefined,\n reportWriteError,\n );\n let queue: Promise<void> = initialize;\n\n const write = (\n _level: 'log' | 'error',\n event: string,\n data: unknown,\n ): Promise<void> => {\n const record = createTelemetryLogRecord(event, data);\n const line = `${stringifyTelemetryLogRecord(record)}\\n`;\n const pendingWrite = queue.then(async () => {\n await appendFile(path, line);\n });\n queue = pendingWrite.catch(() => {});\n return pendingWrite.catch(reportWriteError);\n };\n\n return {\n ...createTelemetryIntegration(write),\n traces: { path: pathToFileURL(path).href },\n };\n}\n", "const REDACTED = '[Redacted]';\n\nconst INPUT_FIELDS = [\n 'system',\n 'prompt',\n 'instructions',\n 'messages',\n 'tools',\n 'toolChoice',\n 'activeTools',\n 'toolOrder',\n 'headers',\n 'providerOptions',\n 'runtimeContext',\n 'toolsContext',\n 'toolContext',\n 'promptMessages',\n 'stepTools',\n 'stepToolChoice',\n 'request',\n 'values',\n 'value',\n 'query',\n 'documents',\n 'schema',\n 'schemaDescription',\n 'schemaName',\n] as const;\n\nconst OUTPUT_FIELDS = [\n 'content',\n 'text',\n 'reasoning',\n 'reasoningText',\n 'files',\n 'sources',\n 'toolCalls',\n 'staticToolCalls',\n 'dynamicToolCalls',\n 'toolResults',\n 'staticToolResults',\n 'dynamicToolResults',\n 'response',\n 'responseMessages',\n 'providerMetadata',\n 'steps',\n 'finalStep',\n 'object',\n 'objectText',\n 'embedding',\n 'embeddings',\n 'ranking',\n 'rankings',\n 'results',\n 'error',\n] as const;\n\nconst OUTPUT_SPECIFICATION_EVENTS = new Set([\n 'onStart',\n 'onStepStart',\n 'onObjectStepStart',\n]);\n\nexport function redactTelemetryEvent(event: string, data: unknown): unknown {\n if (!isRecord(data)) return data;\n const recordInputs = data.recordInputs !== false;\n const recordOutputs = data.recordOutputs !== false;\n if (recordInputs && recordOutputs) return data;\n\n const redacted = { ...data };\n if (!recordInputs) {\n redactFields(redacted, INPUT_FIELDS);\n if (\n OUTPUT_SPECIFICATION_EVENTS.has(event) &&\n Object.hasOwn(redacted, 'output')\n ) {\n redacted.output = REDACTED;\n }\n if (Object.hasOwn(redacted, 'toolCall')) {\n redacted.toolCall = redactToolCallInput(redacted.toolCall);\n }\n if (Object.hasOwn(redacted, 'toolOutput')) {\n redacted.toolOutput = redactToolOutput(redacted.toolOutput, true, false);\n }\n if (Object.hasOwn(redacted, 'steps')) {\n redacted.steps = redactStepInputs(redacted.steps);\n }\n if (Object.hasOwn(redacted, 'finalStep')) {\n redacted.finalStep = redactStepInputs(redacted.finalStep);\n }\n }\n if (!recordOutputs) {\n redactFields(redacted, OUTPUT_FIELDS);\n if (\n !OUTPUT_SPECIFICATION_EVENTS.has(event) &&\n Object.hasOwn(redacted, 'output')\n ) {\n redacted.output = REDACTED;\n }\n if (Object.hasOwn(redacted, 'toolOutput')) {\n redacted.toolOutput = redactToolOutput(redacted.toolOutput, false, true);\n }\n }\n return redacted;\n}\n\nfunction redactFields(\n value: Record<string, unknown>,\n fields: readonly string[],\n): void {\n for (const field of fields) {\n if (Object.hasOwn(value, field)) value[field] = REDACTED;\n }\n}\n\nfunction redactToolCallInput(value: unknown): unknown {\n if (!isRecord(value) || !Object.hasOwn(value, 'input')) return value;\n return { ...value, input: REDACTED };\n}\n\nfunction redactToolOutput(\n value: unknown,\n redactInput: boolean,\n redactOutput: boolean,\n): unknown {\n if (!isRecord(value)) return value;\n const redacted = { ...value };\n if (redactInput && Object.hasOwn(redacted, 'input')) {\n redacted.input = REDACTED;\n }\n if (redactOutput) {\n if (Object.hasOwn(redacted, 'output')) redacted.output = REDACTED;\n if (Object.hasOwn(redacted, 'error')) redacted.error = REDACTED;\n }\n return redacted;\n}\n\nfunction redactStepInputs(value: unknown): unknown {\n if (Array.isArray(value)) return value.map(redactStepInputs);\n if (!isRecord(value)) return value;\n const redacted = { ...value };\n redactFields(redacted, INPUT_FIELDS);\n return redacted;\n}\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n return typeof value === 'object' && value !== null && !Array.isArray(value);\n}\n", "import type { Telemetry } from 'ai';\n\nimport { redactTelemetryEvent } from './redact-telemetry-event.ts';\n\ntype TelemetryLogLevel = 'log' | 'error';\n\ntype TelemetryEventWriter = (\n level: TelemetryLogLevel,\n event: string,\n data: unknown,\n) => void | PromiseLike<void>;\n\nexport function createTelemetryIntegration(\n write: TelemetryEventWriter,\n): Telemetry {\n const emit = (level: TelemetryLogLevel, event: string, data: unknown) =>\n write(level, event, redactTelemetryEvent(event, data));\n const log = (event: string, data: unknown) => emit('log', event, data);\n\n return {\n onStart: (event) => log('onStart', event),\n onStepStart: (event) => log('onStepStart', event),\n onLanguageModelCallStart: (event) => log('onLanguageModelCallStart', event),\n onLanguageModelCallEnd: (event) => log('onLanguageModelCallEnd', event),\n onToolExecutionStart: (event) => log('onToolExecutionStart', event),\n onToolExecutionEnd: (event) => log('onToolExecutionEnd', event),\n onStepEnd: (event) => log('onStepEnd', event),\n onObjectStepStart: (event) => log('onObjectStepStart', event),\n onObjectStepEnd: (event) => log('onObjectStepEnd', event),\n onEmbedStart: (event) => log('onEmbedStart', event),\n onEmbedEnd: (event) => log('onEmbedEnd', event),\n onRerankStart: (event) => log('onRerankStart', event),\n onRerankEnd: (event) => log('onRerankEnd', event),\n onEnd: (event) => log('onEnd', event),\n onAbort: (event) => log('onAbort', event),\n onError: (error) => emit('error', 'onError', error),\n };\n}\n", "export interface TelemetryLogRecord {\n timestamp: string;\n event: string;\n data: unknown;\n}\n\nexport function createTelemetryLogRecord(\n event: string,\n data: unknown,\n): TelemetryLogRecord {\n return {\n timestamp: new Date().toISOString(),\n event,\n data: normalizeTelemetryValue(data),\n };\n}\n\nexport function stringifyTelemetryLogRecord(\n record: TelemetryLogRecord,\n indentation?: number,\n): string {\n return JSON.stringify(record, null, indentation);\n}\n\nfunction normalizeTelemetryValue(value: unknown): unknown {\n return normalize(value, new WeakSet());\n}\n\nfunction normalize(value: unknown, ancestors: WeakSet<object>): unknown {\n if (\n value === null ||\n typeof value === 'string' ||\n typeof value === 'boolean'\n ) {\n return value;\n }\n if (typeof value === 'number') {\n if (Number.isNaN(value)) return '[NaN]';\n if (value === Infinity) return '[Infinity]';\n if (value === -Infinity) return '[-Infinity]';\n if (Object.is(value, -0)) return '[-0]';\n return value;\n }\n if (typeof value === 'undefined') return '[Undefined]';\n if (typeof value === 'bigint') return `${value}n`;\n if (typeof value === 'symbol') return String(value);\n if (typeof value === 'function') {\n return `[Function${value.name ? ` ${value.name}` : ''}]`;\n }\n if (ancestors.has(value)) return '[Circular]';\n\n ancestors.add(value);\n try {\n if (value instanceof Error) return normalizeError(value, ancestors);\n if (value instanceof Date) {\n return Number.isNaN(value.getTime())\n ? '[Invalid Date]'\n : value.toISOString();\n }\n if (value instanceof RegExp) return String(value);\n if (value instanceof URL) return value.href;\n if (value instanceof Map) {\n return {\n $type: 'Map',\n entries: [...value.entries()].map(([key, entryValue]) => [\n normalize(key, ancestors),\n normalize(entryValue, ancestors),\n ]),\n };\n }\n if (value instanceof Set) {\n return {\n $type: 'Set',\n values: [...value].map((entry) => normalize(entry, ancestors)),\n };\n }\n if (value instanceof ArrayBuffer) {\n return {\n $type: 'ArrayBuffer',\n values: [...new Uint8Array(value)],\n };\n }\n if (ArrayBuffer.isView(value)) {\n const bytes = new Uint8Array(\n value.buffer,\n value.byteOffset,\n value.byteLength,\n );\n return {\n $type: value.constructor.name,\n values: [...bytes],\n };\n }\n if (Array.isArray(value)) {\n return value.map((entry) => normalize(entry, ancestors));\n }\n return normalizeObject(value, ancestors);\n } catch (error) {\n return `[Unserializable: ${errorMessage(error)}]`;\n } finally {\n ancestors.delete(value);\n }\n}\n\nfunction normalizeError(\n error: Error,\n ancestors: WeakSet<object>,\n): Record<string, unknown> {\n const normalized = Object.create(null) as Record<string, unknown>;\n normalized.name = error.name;\n normalized.message = error.message;\n if (error.stack != null) normalized.stack = error.stack;\n if (error.cause !== undefined) {\n normalized.cause = normalize(error.cause, ancestors);\n }\n for (const [key, descriptor] of Object.entries(\n Object.getOwnPropertyDescriptors(error),\n )) {\n if (['name', 'message', 'stack', 'cause'].includes(key)) continue;\n normalized[key] = normalizeDescriptor(descriptor, ancestors);\n }\n return normalized;\n}\n\nfunction normalizeObject(\n value: object,\n ancestors: WeakSet<object>,\n): Record<string, unknown> {\n const normalized = Object.create(null) as Record<string, unknown>;\n const prototype = Object.getPrototypeOf(value) as {\n constructor?: { name?: string };\n } | null;\n const typeName = prototype?.constructor?.name;\n if (typeName && typeName !== 'Object') normalized.$type = typeName;\n\n for (const key of Reflect.ownKeys(value)) {\n const descriptor = Object.getOwnPropertyDescriptor(value, key);\n if (descriptor == null) continue;\n normalized[typeof key === 'symbol' ? String(key) : key] =\n normalizeDescriptor(descriptor, ancestors);\n }\n return normalized;\n}\n\nfunction normalizeDescriptor(\n descriptor: PropertyDescriptor,\n ancestors: WeakSet<object>,\n): unknown {\n if ('value' in descriptor) return normalize(descriptor.value, ancestors);\n const accessors = [\n descriptor.get == null ? null : 'Getter',\n descriptor.set == null ? null : 'Setter',\n ].filter(Boolean);\n return `[${accessors.join('/')}]`;\n}\n\nfunction errorMessage(error: unknown): string {\n return error instanceof Error ? error.message : String(error);\n}\n"],
5
- "mappings": "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",
4
+ "sourcesContent": ["import type { Telemetry } from 'ai';\nimport { appendFile, mkdir } from 'node:fs/promises';\nimport { dirname, resolve } from 'node:path';\nimport { pathToFileURL } from 'node:url';\n\nimport { createTelemetryIntegration } from '../create-telemetry-integration.ts';\nimport {\n createTelemetryLogRecord,\n stringifyTelemetryLogRecord,\n} from '../safe-serialize.ts';\n\nexport interface FileTelemetryOptions {\n path: string;\n onWriteError?: (error: unknown) => void | PromiseLike<void>;\n}\n\nexport function createFileTelemetry(\n options: FileTelemetryOptions,\n): Telemetry & { readonly traces: { readonly path: string } } {\n const path = resolve(options.path);\n const reportWriteError = async (error: unknown): Promise<void> => {\n try {\n await options.onWriteError?.(error);\n } catch {\n // Telemetry must never affect the observed operation.\n }\n };\n const initialize = mkdir(dirname(path), { recursive: true }).then(\n () => undefined,\n reportWriteError,\n );\n let queue: Promise<void> = initialize;\n\n const write = (\n _level: 'log' | 'error',\n event: string,\n data: unknown,\n ): Promise<void> => {\n const record = createTelemetryLogRecord(event, data);\n const line = `${stringifyTelemetryLogRecord(record)}\\n`;\n const pendingWrite = queue.then(async () => {\n await appendFile(path, line);\n });\n queue = pendingWrite.catch(() => {});\n return pendingWrite.catch(reportWriteError);\n };\n\n return {\n ...createTelemetryIntegration(write),\n traces: { path: pathToFileURL(path).href },\n };\n}\n", "const REDACTED = '[Redacted]';\n\nconst INPUT_FIELDS = [\n 'system',\n 'prompt',\n 'instructions',\n 'messages',\n 'tools',\n 'toolChoice',\n 'activeTools',\n 'toolOrder',\n 'headers',\n 'providerOptions',\n 'runtimeContext',\n 'toolsContext',\n 'toolContext',\n 'promptMessages',\n 'stepTools',\n 'stepToolChoice',\n 'request',\n 'values',\n 'value',\n 'query',\n 'documents',\n 'schema',\n 'schemaDescription',\n 'schemaName',\n] as const;\n\nconst OUTPUT_FIELDS = [\n 'content',\n 'text',\n 'reasoning',\n 'reasoningText',\n 'files',\n 'sources',\n 'toolCalls',\n 'staticToolCalls',\n 'dynamicToolCalls',\n 'toolResults',\n 'staticToolResults',\n 'dynamicToolResults',\n 'response',\n 'responseMessages',\n 'providerMetadata',\n 'steps',\n 'finalStep',\n 'object',\n 'objectText',\n 'embedding',\n 'embeddings',\n 'ranking',\n 'rankings',\n 'results',\n 'error',\n] as const;\n\nconst OUTPUT_SPECIFICATION_EVENTS = new Set([\n 'onStart',\n 'onStepStart',\n 'onObjectStepStart',\n]);\n\nexport function redactTelemetryEvent(event: string, data: unknown): unknown {\n if (!isRecord(data)) return data;\n const recordInputs = data.recordInputs !== false;\n const recordOutputs = data.recordOutputs !== false;\n if (recordInputs && recordOutputs) return data;\n\n const redacted = { ...data };\n if (!recordInputs) {\n redactFields(redacted, INPUT_FIELDS);\n if (\n OUTPUT_SPECIFICATION_EVENTS.has(event) &&\n Object.hasOwn(redacted, 'output')\n ) {\n redacted.output = REDACTED;\n }\n if (Object.hasOwn(redacted, 'toolCall')) {\n redacted.toolCall = redactToolCallInput(redacted.toolCall);\n }\n if (Object.hasOwn(redacted, 'toolOutput')) {\n redacted.toolOutput = redactToolOutput(redacted.toolOutput, true, false);\n }\n if (Object.hasOwn(redacted, 'steps')) {\n redacted.steps = redactStepInputs(redacted.steps);\n }\n if (Object.hasOwn(redacted, 'finalStep')) {\n redacted.finalStep = redactStepInputs(redacted.finalStep);\n }\n }\n if (!recordOutputs) {\n redactFields(redacted, OUTPUT_FIELDS);\n if (\n !OUTPUT_SPECIFICATION_EVENTS.has(event) &&\n Object.hasOwn(redacted, 'output')\n ) {\n redacted.output = REDACTED;\n }\n if (Object.hasOwn(redacted, 'toolOutput')) {\n redacted.toolOutput = redactToolOutput(redacted.toolOutput, false, true);\n }\n }\n return redacted;\n}\n\nfunction redactFields(\n value: Record<string, unknown>,\n fields: readonly string[],\n): void {\n for (const field of fields) {\n if (Object.hasOwn(value, field)) value[field] = REDACTED;\n }\n}\n\nfunction redactToolCallInput(value: unknown): unknown {\n if (!isRecord(value) || !Object.hasOwn(value, 'input')) return value;\n return { ...value, input: REDACTED };\n}\n\nfunction redactToolOutput(\n value: unknown,\n redactInput: boolean,\n redactOutput: boolean,\n): unknown {\n if (!isRecord(value)) return value;\n const redacted = { ...value };\n if (redactInput && Object.hasOwn(redacted, 'input')) {\n redacted.input = REDACTED;\n }\n if (redactOutput) {\n if (Object.hasOwn(redacted, 'output')) redacted.output = REDACTED;\n if (Object.hasOwn(redacted, 'error')) redacted.error = REDACTED;\n }\n return redacted;\n}\n\nfunction redactStepInputs(value: unknown): unknown {\n if (Array.isArray(value)) return value.map(redactStepInputs);\n if (!isRecord(value)) return value;\n const redacted = { ...value };\n redactFields(redacted, INPUT_FIELDS);\n return redacted;\n}\n\nexport function isRecord(value: unknown): value is Record<string, unknown> {\n return typeof value === 'object' && value !== null && !Array.isArray(value);\n}\n", "import type { Telemetry } from 'ai';\n\nimport { redactTelemetryEvent } from './redact-telemetry-event.ts';\n\ntype TelemetryLogLevel = 'log' | 'error';\n\ntype TelemetryEventWriter = (\n level: TelemetryLogLevel,\n event: string,\n data: unknown,\n) => void | PromiseLike<void>;\n\nexport function createTelemetryIntegration(\n write: TelemetryEventWriter,\n): Telemetry {\n const emit = (level: TelemetryLogLevel, event: string, data: unknown) =>\n write(level, event, redactTelemetryEvent(event, data));\n const log = (event: string, data: unknown) => emit('log', event, data);\n\n return {\n onStart: (event) => log('onStart', event),\n onStepStart: (event) => log('onStepStart', event),\n onLanguageModelCallStart: (event) => log('onLanguageModelCallStart', event),\n onLanguageModelCallEnd: (event) => log('onLanguageModelCallEnd', event),\n onToolExecutionStart: (event) => log('onToolExecutionStart', event),\n onToolExecutionEnd: (event) => log('onToolExecutionEnd', event),\n onStepEnd: (event) => log('onStepEnd', event),\n onObjectStepStart: (event) => log('onObjectStepStart', event),\n onObjectStepEnd: (event) => log('onObjectStepEnd', event),\n onEmbedStart: (event) => log('onEmbedStart', event),\n onEmbedEnd: (event) => log('onEmbedEnd', event),\n onRerankStart: (event) => log('onRerankStart', event),\n onRerankEnd: (event) => log('onRerankEnd', event),\n onEnd: (event) => log('onEnd', event),\n onAbort: (event) => log('onAbort', event),\n onError: (error) => emit('error', 'onError', error),\n };\n}\n", "export interface TelemetryLogRecord {\n timestamp: string;\n event: string;\n data: unknown;\n}\n\nexport function createTelemetryLogRecord(\n event: string,\n data: unknown,\n): TelemetryLogRecord {\n return {\n timestamp: new Date().toISOString(),\n event,\n data: normalizeTelemetryValue(data),\n };\n}\n\nexport function stringifyTelemetryLogRecord(\n record: TelemetryLogRecord,\n indentation?: number,\n): string {\n return JSON.stringify(record, null, indentation);\n}\n\nfunction normalizeTelemetryValue(value: unknown): unknown {\n return normalize(value, new WeakSet());\n}\n\nfunction normalize(value: unknown, ancestors: WeakSet<object>): unknown {\n if (\n value === null ||\n typeof value === 'string' ||\n typeof value === 'boolean'\n ) {\n return value;\n }\n if (typeof value === 'number') {\n if (Number.isNaN(value)) return '[NaN]';\n if (value === Infinity) return '[Infinity]';\n if (value === -Infinity) return '[-Infinity]';\n if (Object.is(value, -0)) return '[-0]';\n return value;\n }\n if (typeof value === 'undefined') return '[Undefined]';\n if (typeof value === 'bigint') return `${value}n`;\n if (typeof value === 'symbol') return String(value);\n if (typeof value === 'function') {\n return `[Function${value.name ? ` ${value.name}` : ''}]`;\n }\n if (ancestors.has(value)) return '[Circular]';\n\n ancestors.add(value);\n try {\n if (value instanceof Error) return normalizeError(value, ancestors);\n if (value instanceof Date) {\n return Number.isNaN(value.getTime())\n ? '[Invalid Date]'\n : value.toISOString();\n }\n if (value instanceof RegExp) return String(value);\n if (value instanceof URL) return value.href;\n if (value instanceof Map) {\n return {\n $type: 'Map',\n entries: [...value.entries()].map(([key, entryValue]) => [\n normalize(key, ancestors),\n normalize(entryValue, ancestors),\n ]),\n };\n }\n if (value instanceof Set) {\n return {\n $type: 'Set',\n values: [...value].map((entry) => normalize(entry, ancestors)),\n };\n }\n if (value instanceof ArrayBuffer) {\n return {\n $type: 'ArrayBuffer',\n values: [...new Uint8Array(value)],\n };\n }\n if (ArrayBuffer.isView(value)) {\n const bytes = new Uint8Array(\n value.buffer,\n value.byteOffset,\n value.byteLength,\n );\n return {\n $type: value.constructor.name,\n values: [...bytes],\n };\n }\n if (Array.isArray(value)) {\n return value.map((entry) => normalize(entry, ancestors));\n }\n return normalizeObject(value, ancestors);\n } catch (error) {\n return `[Unserializable: ${errorMessage(error)}]`;\n } finally {\n ancestors.delete(value);\n }\n}\n\nfunction normalizeError(\n error: Error,\n ancestors: WeakSet<object>,\n): Record<string, unknown> {\n // Object.fromEntries defines every key as an own property, so an own\n // `__proto__` key stays a key instead of replacing the prototype.\n const entries: [string, unknown][] = [\n ['name', error.name],\n ['message', error.message],\n ];\n if (error.stack != null) entries.push(['stack', error.stack]);\n if (error.cause !== undefined) {\n entries.push(['cause', normalize(error.cause, ancestors)]);\n }\n for (const [key, descriptor] of Object.entries(\n Object.getOwnPropertyDescriptors(error),\n )) {\n if (['name', 'message', 'stack', 'cause'].includes(key)) continue;\n entries.push([key, normalizeDescriptor(descriptor, ancestors)]);\n }\n return Object.fromEntries(entries);\n}\n\nfunction normalizeObject(\n value: object,\n ancestors: WeakSet<object>,\n): Record<string, unknown> {\n const typeName = prototypeConstructorName(value);\n const entries: [string, unknown][] =\n typeName && typeName !== 'Object' ? [['$type', typeName]] : [];\n\n for (const key of Reflect.ownKeys(value)) {\n const descriptor = Object.getOwnPropertyDescriptor(value, key);\n if (descriptor == null) continue;\n entries.push([\n typeof key === 'symbol' ? String(key) : key,\n normalizeDescriptor(descriptor, ancestors),\n ]);\n }\n return Object.fromEntries(entries);\n}\n\n/**\n * Reads the constructor name from the prototype, not the value, so an own\n * `constructor` field is reported as data rather than as the type.\n */\nfunction prototypeConstructorName(value: object): string | undefined {\n const prototype: unknown = Object.getPrototypeOf(value);\n if (\n typeof prototype !== 'object' ||\n prototype === null ||\n !('constructor' in prototype)\n ) {\n return undefined;\n }\n const { constructor } = prototype;\n return typeof constructor === 'function' ? constructor.name : undefined;\n}\n\nfunction normalizeDescriptor(\n descriptor: PropertyDescriptor,\n ancestors: WeakSet<object>,\n): unknown {\n if ('value' in descriptor) return normalize(descriptor.value, ancestors);\n const accessors = [\n descriptor.get == null ? null : 'Getter',\n descriptor.set == null ? null : 'Setter',\n ].filter(Boolean);\n return `[${accessors.join('/')}]`;\n}\n\nfunction errorMessage(error: unknown): string {\n return error instanceof Error ? error.message : String(error);\n}\n"],
5
+ "mappings": "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",
6
6
  "names": []
7
7
  }
@@ -232,32 +232,42 @@ function normalize(value, ancestors) {
232
232
  }
233
233
  }
234
234
  function normalizeError(error, ancestors) {
235
- const normalized = /* @__PURE__ */ Object.create(null);
236
- normalized.name = error.name;
237
- normalized.message = error.message;
238
- if (error.stack != null) normalized.stack = error.stack;
235
+ const entries = [
236
+ ["name", error.name],
237
+ ["message", error.message]
238
+ ];
239
+ if (error.stack != null) entries.push(["stack", error.stack]);
239
240
  if (error.cause !== void 0) {
240
- normalized.cause = normalize(error.cause, ancestors);
241
+ entries.push(["cause", normalize(error.cause, ancestors)]);
241
242
  }
242
243
  for (const [key, descriptor] of Object.entries(
243
244
  Object.getOwnPropertyDescriptors(error)
244
245
  )) {
245
246
  if (["name", "message", "stack", "cause"].includes(key)) continue;
246
- normalized[key] = normalizeDescriptor(descriptor, ancestors);
247
+ entries.push([key, normalizeDescriptor(descriptor, ancestors)]);
247
248
  }
248
- return normalized;
249
+ return Object.fromEntries(entries);
249
250
  }
250
251
  function normalizeObject(value, ancestors) {
251
- const normalized = /* @__PURE__ */ Object.create(null);
252
- const prototype = Object.getPrototypeOf(value);
253
- const typeName = prototype?.constructor?.name;
254
- if (typeName && typeName !== "Object") normalized.$type = typeName;
252
+ const typeName = prototypeConstructorName(value);
253
+ const entries = typeName && typeName !== "Object" ? [["$type", typeName]] : [];
255
254
  for (const key of Reflect.ownKeys(value)) {
256
255
  const descriptor = Object.getOwnPropertyDescriptor(value, key);
257
256
  if (descriptor == null) continue;
258
- normalized[typeof key === "symbol" ? String(key) : key] = normalizeDescriptor(descriptor, ancestors);
257
+ entries.push([
258
+ typeof key === "symbol" ? String(key) : key,
259
+ normalizeDescriptor(descriptor, ancestors)
260
+ ]);
261
+ }
262
+ return Object.fromEntries(entries);
263
+ }
264
+ function prototypeConstructorName(value) {
265
+ const prototype = Object.getPrototypeOf(value);
266
+ if (typeof prototype !== "object" || prototype === null || !("constructor" in prototype)) {
267
+ return void 0;
259
268
  }
260
- return normalized;
269
+ const { constructor } = prototype;
270
+ return typeof constructor === "function" ? constructor.name : void 0;
261
271
  }
262
272
  function normalizeDescriptor(descriptor, ancestors) {
263
273
  if ("value" in descriptor) return normalize(descriptor.value, ancestors);
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../src/lib/telemetry/redact-telemetry-event.ts", "../../../src/lib/telemetry/create-telemetry-integration.ts", "../../../src/lib/telemetry/safe-serialize.ts", "../../../src/lib/telemetry/console-telemetry.ts"],
4
- "sourcesContent": ["const REDACTED = '[Redacted]';\n\nconst INPUT_FIELDS = [\n 'system',\n 'prompt',\n 'instructions',\n 'messages',\n 'tools',\n 'toolChoice',\n 'activeTools',\n 'toolOrder',\n 'headers',\n 'providerOptions',\n 'runtimeContext',\n 'toolsContext',\n 'toolContext',\n 'promptMessages',\n 'stepTools',\n 'stepToolChoice',\n 'request',\n 'values',\n 'value',\n 'query',\n 'documents',\n 'schema',\n 'schemaDescription',\n 'schemaName',\n] as const;\n\nconst OUTPUT_FIELDS = [\n 'content',\n 'text',\n 'reasoning',\n 'reasoningText',\n 'files',\n 'sources',\n 'toolCalls',\n 'staticToolCalls',\n 'dynamicToolCalls',\n 'toolResults',\n 'staticToolResults',\n 'dynamicToolResults',\n 'response',\n 'responseMessages',\n 'providerMetadata',\n 'steps',\n 'finalStep',\n 'object',\n 'objectText',\n 'embedding',\n 'embeddings',\n 'ranking',\n 'rankings',\n 'results',\n 'error',\n] as const;\n\nconst OUTPUT_SPECIFICATION_EVENTS = new Set([\n 'onStart',\n 'onStepStart',\n 'onObjectStepStart',\n]);\n\nexport function redactTelemetryEvent(event: string, data: unknown): unknown {\n if (!isRecord(data)) return data;\n const recordInputs = data.recordInputs !== false;\n const recordOutputs = data.recordOutputs !== false;\n if (recordInputs && recordOutputs) return data;\n\n const redacted = { ...data };\n if (!recordInputs) {\n redactFields(redacted, INPUT_FIELDS);\n if (\n OUTPUT_SPECIFICATION_EVENTS.has(event) &&\n Object.hasOwn(redacted, 'output')\n ) {\n redacted.output = REDACTED;\n }\n if (Object.hasOwn(redacted, 'toolCall')) {\n redacted.toolCall = redactToolCallInput(redacted.toolCall);\n }\n if (Object.hasOwn(redacted, 'toolOutput')) {\n redacted.toolOutput = redactToolOutput(redacted.toolOutput, true, false);\n }\n if (Object.hasOwn(redacted, 'steps')) {\n redacted.steps = redactStepInputs(redacted.steps);\n }\n if (Object.hasOwn(redacted, 'finalStep')) {\n redacted.finalStep = redactStepInputs(redacted.finalStep);\n }\n }\n if (!recordOutputs) {\n redactFields(redacted, OUTPUT_FIELDS);\n if (\n !OUTPUT_SPECIFICATION_EVENTS.has(event) &&\n Object.hasOwn(redacted, 'output')\n ) {\n redacted.output = REDACTED;\n }\n if (Object.hasOwn(redacted, 'toolOutput')) {\n redacted.toolOutput = redactToolOutput(redacted.toolOutput, false, true);\n }\n }\n return redacted;\n}\n\nfunction redactFields(\n value: Record<string, unknown>,\n fields: readonly string[],\n): void {\n for (const field of fields) {\n if (Object.hasOwn(value, field)) value[field] = REDACTED;\n }\n}\n\nfunction redactToolCallInput(value: unknown): unknown {\n if (!isRecord(value) || !Object.hasOwn(value, 'input')) return value;\n return { ...value, input: REDACTED };\n}\n\nfunction redactToolOutput(\n value: unknown,\n redactInput: boolean,\n redactOutput: boolean,\n): unknown {\n if (!isRecord(value)) return value;\n const redacted = { ...value };\n if (redactInput && Object.hasOwn(redacted, 'input')) {\n redacted.input = REDACTED;\n }\n if (redactOutput) {\n if (Object.hasOwn(redacted, 'output')) redacted.output = REDACTED;\n if (Object.hasOwn(redacted, 'error')) redacted.error = REDACTED;\n }\n return redacted;\n}\n\nfunction redactStepInputs(value: unknown): unknown {\n if (Array.isArray(value)) return value.map(redactStepInputs);\n if (!isRecord(value)) return value;\n const redacted = { ...value };\n redactFields(redacted, INPUT_FIELDS);\n return redacted;\n}\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n return typeof value === 'object' && value !== null && !Array.isArray(value);\n}\n", "import type { Telemetry } from 'ai';\n\nimport { redactTelemetryEvent } from './redact-telemetry-event.ts';\n\ntype TelemetryLogLevel = 'log' | 'error';\n\ntype TelemetryEventWriter = (\n level: TelemetryLogLevel,\n event: string,\n data: unknown,\n) => void | PromiseLike<void>;\n\nexport function createTelemetryIntegration(\n write: TelemetryEventWriter,\n): Telemetry {\n const emit = (level: TelemetryLogLevel, event: string, data: unknown) =>\n write(level, event, redactTelemetryEvent(event, data));\n const log = (event: string, data: unknown) => emit('log', event, data);\n\n return {\n onStart: (event) => log('onStart', event),\n onStepStart: (event) => log('onStepStart', event),\n onLanguageModelCallStart: (event) => log('onLanguageModelCallStart', event),\n onLanguageModelCallEnd: (event) => log('onLanguageModelCallEnd', event),\n onToolExecutionStart: (event) => log('onToolExecutionStart', event),\n onToolExecutionEnd: (event) => log('onToolExecutionEnd', event),\n onStepEnd: (event) => log('onStepEnd', event),\n onObjectStepStart: (event) => log('onObjectStepStart', event),\n onObjectStepEnd: (event) => log('onObjectStepEnd', event),\n onEmbedStart: (event) => log('onEmbedStart', event),\n onEmbedEnd: (event) => log('onEmbedEnd', event),\n onRerankStart: (event) => log('onRerankStart', event),\n onRerankEnd: (event) => log('onRerankEnd', event),\n onEnd: (event) => log('onEnd', event),\n onAbort: (event) => log('onAbort', event),\n onError: (error) => emit('error', 'onError', error),\n };\n}\n", "export interface TelemetryLogRecord {\n timestamp: string;\n event: string;\n data: unknown;\n}\n\nexport function createTelemetryLogRecord(\n event: string,\n data: unknown,\n): TelemetryLogRecord {\n return {\n timestamp: new Date().toISOString(),\n event,\n data: normalizeTelemetryValue(data),\n };\n}\n\nexport function stringifyTelemetryLogRecord(\n record: TelemetryLogRecord,\n indentation?: number,\n): string {\n return JSON.stringify(record, null, indentation);\n}\n\nfunction normalizeTelemetryValue(value: unknown): unknown {\n return normalize(value, new WeakSet());\n}\n\nfunction normalize(value: unknown, ancestors: WeakSet<object>): unknown {\n if (\n value === null ||\n typeof value === 'string' ||\n typeof value === 'boolean'\n ) {\n return value;\n }\n if (typeof value === 'number') {\n if (Number.isNaN(value)) return '[NaN]';\n if (value === Infinity) return '[Infinity]';\n if (value === -Infinity) return '[-Infinity]';\n if (Object.is(value, -0)) return '[-0]';\n return value;\n }\n if (typeof value === 'undefined') return '[Undefined]';\n if (typeof value === 'bigint') return `${value}n`;\n if (typeof value === 'symbol') return String(value);\n if (typeof value === 'function') {\n return `[Function${value.name ? ` ${value.name}` : ''}]`;\n }\n if (ancestors.has(value)) return '[Circular]';\n\n ancestors.add(value);\n try {\n if (value instanceof Error) return normalizeError(value, ancestors);\n if (value instanceof Date) {\n return Number.isNaN(value.getTime())\n ? '[Invalid Date]'\n : value.toISOString();\n }\n if (value instanceof RegExp) return String(value);\n if (value instanceof URL) return value.href;\n if (value instanceof Map) {\n return {\n $type: 'Map',\n entries: [...value.entries()].map(([key, entryValue]) => [\n normalize(key, ancestors),\n normalize(entryValue, ancestors),\n ]),\n };\n }\n if (value instanceof Set) {\n return {\n $type: 'Set',\n values: [...value].map((entry) => normalize(entry, ancestors)),\n };\n }\n if (value instanceof ArrayBuffer) {\n return {\n $type: 'ArrayBuffer',\n values: [...new Uint8Array(value)],\n };\n }\n if (ArrayBuffer.isView(value)) {\n const bytes = new Uint8Array(\n value.buffer,\n value.byteOffset,\n value.byteLength,\n );\n return {\n $type: value.constructor.name,\n values: [...bytes],\n };\n }\n if (Array.isArray(value)) {\n return value.map((entry) => normalize(entry, ancestors));\n }\n return normalizeObject(value, ancestors);\n } catch (error) {\n return `[Unserializable: ${errorMessage(error)}]`;\n } finally {\n ancestors.delete(value);\n }\n}\n\nfunction normalizeError(\n error: Error,\n ancestors: WeakSet<object>,\n): Record<string, unknown> {\n const normalized = Object.create(null) as Record<string, unknown>;\n normalized.name = error.name;\n normalized.message = error.message;\n if (error.stack != null) normalized.stack = error.stack;\n if (error.cause !== undefined) {\n normalized.cause = normalize(error.cause, ancestors);\n }\n for (const [key, descriptor] of Object.entries(\n Object.getOwnPropertyDescriptors(error),\n )) {\n if (['name', 'message', 'stack', 'cause'].includes(key)) continue;\n normalized[key] = normalizeDescriptor(descriptor, ancestors);\n }\n return normalized;\n}\n\nfunction normalizeObject(\n value: object,\n ancestors: WeakSet<object>,\n): Record<string, unknown> {\n const normalized = Object.create(null) as Record<string, unknown>;\n const prototype = Object.getPrototypeOf(value) as {\n constructor?: { name?: string };\n } | null;\n const typeName = prototype?.constructor?.name;\n if (typeName && typeName !== 'Object') normalized.$type = typeName;\n\n for (const key of Reflect.ownKeys(value)) {\n const descriptor = Object.getOwnPropertyDescriptor(value, key);\n if (descriptor == null) continue;\n normalized[typeof key === 'symbol' ? String(key) : key] =\n normalizeDescriptor(descriptor, ancestors);\n }\n return normalized;\n}\n\nfunction normalizeDescriptor(\n descriptor: PropertyDescriptor,\n ancestors: WeakSet<object>,\n): unknown {\n if ('value' in descriptor) return normalize(descriptor.value, ancestors);\n const accessors = [\n descriptor.get == null ? null : 'Getter',\n descriptor.set == null ? null : 'Setter',\n ].filter(Boolean);\n return `[${accessors.join('/')}]`;\n}\n\nfunction errorMessage(error: unknown): string {\n return error instanceof Error ? error.message : String(error);\n}\n", "import type { Telemetry } from 'ai';\n\nimport { createTelemetryIntegration } from './create-telemetry-integration.ts';\nimport {\n createTelemetryLogRecord,\n stringifyTelemetryLogRecord,\n} from './safe-serialize.ts';\n\nexport interface ConsoleTelemetryOptions {\n pretty?: boolean;\n logger?: Pick<Console, 'log' | 'error'>;\n}\n\nexport function createConsoleTelemetry(\n options: ConsoleTelemetryOptions = {},\n): Telemetry {\n const logger = options.logger ?? console;\n const indentation = (options.pretty ?? true) ? 2 : undefined;\n const write = (method: 'log' | 'error', event: string, data: unknown) => {\n const record = createTelemetryLogRecord(event, data);\n try {\n logger[method](stringifyTelemetryLogRecord(record, indentation));\n } catch {\n // Telemetry must never affect the observed operation.\n }\n };\n return createTelemetryIntegration(write);\n}\n"],
5
- "mappings": "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",
4
+ "sourcesContent": ["const REDACTED = '[Redacted]';\n\nconst INPUT_FIELDS = [\n 'system',\n 'prompt',\n 'instructions',\n 'messages',\n 'tools',\n 'toolChoice',\n 'activeTools',\n 'toolOrder',\n 'headers',\n 'providerOptions',\n 'runtimeContext',\n 'toolsContext',\n 'toolContext',\n 'promptMessages',\n 'stepTools',\n 'stepToolChoice',\n 'request',\n 'values',\n 'value',\n 'query',\n 'documents',\n 'schema',\n 'schemaDescription',\n 'schemaName',\n] as const;\n\nconst OUTPUT_FIELDS = [\n 'content',\n 'text',\n 'reasoning',\n 'reasoningText',\n 'files',\n 'sources',\n 'toolCalls',\n 'staticToolCalls',\n 'dynamicToolCalls',\n 'toolResults',\n 'staticToolResults',\n 'dynamicToolResults',\n 'response',\n 'responseMessages',\n 'providerMetadata',\n 'steps',\n 'finalStep',\n 'object',\n 'objectText',\n 'embedding',\n 'embeddings',\n 'ranking',\n 'rankings',\n 'results',\n 'error',\n] as const;\n\nconst OUTPUT_SPECIFICATION_EVENTS = new Set([\n 'onStart',\n 'onStepStart',\n 'onObjectStepStart',\n]);\n\nexport function redactTelemetryEvent(event: string, data: unknown): unknown {\n if (!isRecord(data)) return data;\n const recordInputs = data.recordInputs !== false;\n const recordOutputs = data.recordOutputs !== false;\n if (recordInputs && recordOutputs) return data;\n\n const redacted = { ...data };\n if (!recordInputs) {\n redactFields(redacted, INPUT_FIELDS);\n if (\n OUTPUT_SPECIFICATION_EVENTS.has(event) &&\n Object.hasOwn(redacted, 'output')\n ) {\n redacted.output = REDACTED;\n }\n if (Object.hasOwn(redacted, 'toolCall')) {\n redacted.toolCall = redactToolCallInput(redacted.toolCall);\n }\n if (Object.hasOwn(redacted, 'toolOutput')) {\n redacted.toolOutput = redactToolOutput(redacted.toolOutput, true, false);\n }\n if (Object.hasOwn(redacted, 'steps')) {\n redacted.steps = redactStepInputs(redacted.steps);\n }\n if (Object.hasOwn(redacted, 'finalStep')) {\n redacted.finalStep = redactStepInputs(redacted.finalStep);\n }\n }\n if (!recordOutputs) {\n redactFields(redacted, OUTPUT_FIELDS);\n if (\n !OUTPUT_SPECIFICATION_EVENTS.has(event) &&\n Object.hasOwn(redacted, 'output')\n ) {\n redacted.output = REDACTED;\n }\n if (Object.hasOwn(redacted, 'toolOutput')) {\n redacted.toolOutput = redactToolOutput(redacted.toolOutput, false, true);\n }\n }\n return redacted;\n}\n\nfunction redactFields(\n value: Record<string, unknown>,\n fields: readonly string[],\n): void {\n for (const field of fields) {\n if (Object.hasOwn(value, field)) value[field] = REDACTED;\n }\n}\n\nfunction redactToolCallInput(value: unknown): unknown {\n if (!isRecord(value) || !Object.hasOwn(value, 'input')) return value;\n return { ...value, input: REDACTED };\n}\n\nfunction redactToolOutput(\n value: unknown,\n redactInput: boolean,\n redactOutput: boolean,\n): unknown {\n if (!isRecord(value)) return value;\n const redacted = { ...value };\n if (redactInput && Object.hasOwn(redacted, 'input')) {\n redacted.input = REDACTED;\n }\n if (redactOutput) {\n if (Object.hasOwn(redacted, 'output')) redacted.output = REDACTED;\n if (Object.hasOwn(redacted, 'error')) redacted.error = REDACTED;\n }\n return redacted;\n}\n\nfunction redactStepInputs(value: unknown): unknown {\n if (Array.isArray(value)) return value.map(redactStepInputs);\n if (!isRecord(value)) return value;\n const redacted = { ...value };\n redactFields(redacted, INPUT_FIELDS);\n return redacted;\n}\n\nexport function isRecord(value: unknown): value is Record<string, unknown> {\n return typeof value === 'object' && value !== null && !Array.isArray(value);\n}\n", "import type { Telemetry } from 'ai';\n\nimport { redactTelemetryEvent } from './redact-telemetry-event.ts';\n\ntype TelemetryLogLevel = 'log' | 'error';\n\ntype TelemetryEventWriter = (\n level: TelemetryLogLevel,\n event: string,\n data: unknown,\n) => void | PromiseLike<void>;\n\nexport function createTelemetryIntegration(\n write: TelemetryEventWriter,\n): Telemetry {\n const emit = (level: TelemetryLogLevel, event: string, data: unknown) =>\n write(level, event, redactTelemetryEvent(event, data));\n const log = (event: string, data: unknown) => emit('log', event, data);\n\n return {\n onStart: (event) => log('onStart', event),\n onStepStart: (event) => log('onStepStart', event),\n onLanguageModelCallStart: (event) => log('onLanguageModelCallStart', event),\n onLanguageModelCallEnd: (event) => log('onLanguageModelCallEnd', event),\n onToolExecutionStart: (event) => log('onToolExecutionStart', event),\n onToolExecutionEnd: (event) => log('onToolExecutionEnd', event),\n onStepEnd: (event) => log('onStepEnd', event),\n onObjectStepStart: (event) => log('onObjectStepStart', event),\n onObjectStepEnd: (event) => log('onObjectStepEnd', event),\n onEmbedStart: (event) => log('onEmbedStart', event),\n onEmbedEnd: (event) => log('onEmbedEnd', event),\n onRerankStart: (event) => log('onRerankStart', event),\n onRerankEnd: (event) => log('onRerankEnd', event),\n onEnd: (event) => log('onEnd', event),\n onAbort: (event) => log('onAbort', event),\n onError: (error) => emit('error', 'onError', error),\n };\n}\n", "export interface TelemetryLogRecord {\n timestamp: string;\n event: string;\n data: unknown;\n}\n\nexport function createTelemetryLogRecord(\n event: string,\n data: unknown,\n): TelemetryLogRecord {\n return {\n timestamp: new Date().toISOString(),\n event,\n data: normalizeTelemetryValue(data),\n };\n}\n\nexport function stringifyTelemetryLogRecord(\n record: TelemetryLogRecord,\n indentation?: number,\n): string {\n return JSON.stringify(record, null, indentation);\n}\n\nfunction normalizeTelemetryValue(value: unknown): unknown {\n return normalize(value, new WeakSet());\n}\n\nfunction normalize(value: unknown, ancestors: WeakSet<object>): unknown {\n if (\n value === null ||\n typeof value === 'string' ||\n typeof value === 'boolean'\n ) {\n return value;\n }\n if (typeof value === 'number') {\n if (Number.isNaN(value)) return '[NaN]';\n if (value === Infinity) return '[Infinity]';\n if (value === -Infinity) return '[-Infinity]';\n if (Object.is(value, -0)) return '[-0]';\n return value;\n }\n if (typeof value === 'undefined') return '[Undefined]';\n if (typeof value === 'bigint') return `${value}n`;\n if (typeof value === 'symbol') return String(value);\n if (typeof value === 'function') {\n return `[Function${value.name ? ` ${value.name}` : ''}]`;\n }\n if (ancestors.has(value)) return '[Circular]';\n\n ancestors.add(value);\n try {\n if (value instanceof Error) return normalizeError(value, ancestors);\n if (value instanceof Date) {\n return Number.isNaN(value.getTime())\n ? '[Invalid Date]'\n : value.toISOString();\n }\n if (value instanceof RegExp) return String(value);\n if (value instanceof URL) return value.href;\n if (value instanceof Map) {\n return {\n $type: 'Map',\n entries: [...value.entries()].map(([key, entryValue]) => [\n normalize(key, ancestors),\n normalize(entryValue, ancestors),\n ]),\n };\n }\n if (value instanceof Set) {\n return {\n $type: 'Set',\n values: [...value].map((entry) => normalize(entry, ancestors)),\n };\n }\n if (value instanceof ArrayBuffer) {\n return {\n $type: 'ArrayBuffer',\n values: [...new Uint8Array(value)],\n };\n }\n if (ArrayBuffer.isView(value)) {\n const bytes = new Uint8Array(\n value.buffer,\n value.byteOffset,\n value.byteLength,\n );\n return {\n $type: value.constructor.name,\n values: [...bytes],\n };\n }\n if (Array.isArray(value)) {\n return value.map((entry) => normalize(entry, ancestors));\n }\n return normalizeObject(value, ancestors);\n } catch (error) {\n return `[Unserializable: ${errorMessage(error)}]`;\n } finally {\n ancestors.delete(value);\n }\n}\n\nfunction normalizeError(\n error: Error,\n ancestors: WeakSet<object>,\n): Record<string, unknown> {\n // Object.fromEntries defines every key as an own property, so an own\n // `__proto__` key stays a key instead of replacing the prototype.\n const entries: [string, unknown][] = [\n ['name', error.name],\n ['message', error.message],\n ];\n if (error.stack != null) entries.push(['stack', error.stack]);\n if (error.cause !== undefined) {\n entries.push(['cause', normalize(error.cause, ancestors)]);\n }\n for (const [key, descriptor] of Object.entries(\n Object.getOwnPropertyDescriptors(error),\n )) {\n if (['name', 'message', 'stack', 'cause'].includes(key)) continue;\n entries.push([key, normalizeDescriptor(descriptor, ancestors)]);\n }\n return Object.fromEntries(entries);\n}\n\nfunction normalizeObject(\n value: object,\n ancestors: WeakSet<object>,\n): Record<string, unknown> {\n const typeName = prototypeConstructorName(value);\n const entries: [string, unknown][] =\n typeName && typeName !== 'Object' ? [['$type', typeName]] : [];\n\n for (const key of Reflect.ownKeys(value)) {\n const descriptor = Object.getOwnPropertyDescriptor(value, key);\n if (descriptor == null) continue;\n entries.push([\n typeof key === 'symbol' ? String(key) : key,\n normalizeDescriptor(descriptor, ancestors),\n ]);\n }\n return Object.fromEntries(entries);\n}\n\n/**\n * Reads the constructor name from the prototype, not the value, so an own\n * `constructor` field is reported as data rather than as the type.\n */\nfunction prototypeConstructorName(value: object): string | undefined {\n const prototype: unknown = Object.getPrototypeOf(value);\n if (\n typeof prototype !== 'object' ||\n prototype === null ||\n !('constructor' in prototype)\n ) {\n return undefined;\n }\n const { constructor } = prototype;\n return typeof constructor === 'function' ? constructor.name : undefined;\n}\n\nfunction normalizeDescriptor(\n descriptor: PropertyDescriptor,\n ancestors: WeakSet<object>,\n): unknown {\n if ('value' in descriptor) return normalize(descriptor.value, ancestors);\n const accessors = [\n descriptor.get == null ? null : 'Getter',\n descriptor.set == null ? null : 'Setter',\n ].filter(Boolean);\n return `[${accessors.join('/')}]`;\n}\n\nfunction errorMessage(error: unknown): string {\n return error instanceof Error ? error.message : String(error);\n}\n", "import type { Telemetry } from 'ai';\n\nimport { createTelemetryIntegration } from './create-telemetry-integration.ts';\nimport {\n createTelemetryLogRecord,\n stringifyTelemetryLogRecord,\n} from './safe-serialize.ts';\n\nexport interface ConsoleTelemetryOptions {\n pretty?: boolean;\n logger?: Pick<Console, 'log' | 'error'>;\n}\n\nexport function createConsoleTelemetry(\n options: ConsoleTelemetryOptions = {},\n): Telemetry {\n const logger = options.logger ?? console;\n const indentation = (options.pretty ?? true) ? 2 : undefined;\n const write = (method: 'log' | 'error', event: string, data: unknown) => {\n const record = createTelemetryLogRecord(event, data);\n try {\n logger[method](stringifyTelemetryLogRecord(record, indentation));\n } catch {\n // Telemetry must never affect the observed operation.\n }\n };\n return createTelemetryIntegration(write);\n}\n"],
5
+ "mappings": "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",
6
6
  "names": []
7
7
  }
@@ -1,2 +1,3 @@
1
1
  export declare function redactTelemetryEvent(event: string, data: unknown): unknown;
2
+ export declare function isRecord(value: unknown): value is Record<string, unknown>;
2
3
  //# sourceMappingURL=redact-telemetry-event.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"redact-telemetry-event.d.ts","sourceRoot":"","sources":["../../../src/lib/telemetry/redact-telemetry-event.ts"],"names":[],"mappings":"AA+DA,wBAAgB,oBAAoB,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,GAAG,OAAO,CAyC1E"}
1
+ {"version":3,"file":"redact-telemetry-event.d.ts","sourceRoot":"","sources":["../../../src/lib/telemetry/redact-telemetry-event.ts"],"names":[],"mappings":"AA+DA,wBAAgB,oBAAoB,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,GAAG,OAAO,CAyC1E;AAyCD,wBAAgB,QAAQ,CAAC,KAAK,EAAE,OAAO,GAAG,KAAK,IAAI,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAEzE"}
@@ -272,6 +272,11 @@ function createTracingProcessor(processors) {
272
272
  return list.length === 1 ? list[0] : new CompositeTraceProcessor(list);
273
273
  }
274
274
 
275
+ // packages/context/src/lib/telemetry/redact-telemetry-event.ts
276
+ function isRecord(value) {
277
+ return typeof value === "object" && value !== null && !Array.isArray(value);
278
+ }
279
+
275
280
  // packages/context/src/lib/tracing/serialization.ts
276
281
  function normalizeForJson(value) {
277
282
  if (value == null) {
@@ -293,27 +298,26 @@ function normalizeForJson(value) {
293
298
  return value.map((item) => normalizeForJson(item)).filter((item) => item !== void 0);
294
299
  }
295
300
  if (typeof value === "object") {
296
- const normalized = {};
297
- for (const [key, entry] of Object.entries(
298
- value
299
- )) {
300
- const result = normalizeForJson(entry);
301
- if (result !== void 0) {
302
- normalized[key] = result;
303
- }
304
- }
305
- return normalized;
301
+ return normalizeObjectForJson(value);
306
302
  }
307
303
  return String(value);
308
304
  }
305
+ function normalizeObjectForJson(value) {
306
+ const normalized = {};
307
+ for (const [key, entry] of Object.entries(value)) {
308
+ const result = normalizeForJson(entry);
309
+ if (result !== void 0) {
310
+ normalized[key] = result;
311
+ }
312
+ }
313
+ return normalized;
314
+ }
309
315
  function normalizeRecordArray(value) {
310
316
  const normalized = normalizeForJson(value);
311
317
  if (!Array.isArray(normalized)) {
312
318
  return void 0;
313
319
  }
314
- return normalized.map(
315
- (item) => typeof item === "object" && item != null ? item : { value: item }
316
- );
320
+ return normalized.map((item) => isRecord(item) ? item : { value: item });
317
321
  }
318
322
  function normalizeUsage(usage) {
319
323
  if (usage == null) {
@@ -344,7 +348,7 @@ function normalizeUsage(usage) {
344
348
  }
345
349
  function errorToSpanError(error) {
346
350
  if (error instanceof Error) {
347
- const data = normalizeForJson({
351
+ const data = normalizeObjectForJson({
348
352
  name: error.name,
349
353
  stack: error.stack,
350
354
  cause: error.cause
@@ -494,7 +498,7 @@ function createOpenAITracesIntegration(options = {}) {
494
498
  span.ended_at = now();
495
499
  const data = span.span_data;
496
500
  if (event.toolOutput.type === "tool-result") {
497
- if (includeSensitive && event.recordOutputs !== false) {
501
+ if (data.type === "function" && includeSensitive && event.recordOutputs !== false) {
498
502
  data.output = normalizeForJson(event.toolOutput.output);
499
503
  }
500
504
  } else {
@@ -517,10 +521,12 @@ function createOpenAITracesIntegration(options = {}) {
517
521
  }
518
522
  span.ended_at = now();
519
523
  const data = span.span_data;
520
- if (includeSensitive && event.recordOutputs !== false) {
521
- data.output = normalizeRecordArray(event.response.messages);
524
+ if (data.type === "generation") {
525
+ if (includeSensitive && event.recordOutputs !== false) {
526
+ data.output = normalizeRecordArray(event.response.messages);
527
+ }
528
+ data.usage = normalizeUsage(event.usage);
522
529
  }
523
- data.usage = normalizeUsage(event.usage);
524
530
  if (event.response.id != null) {
525
531
  state.responseIds.add(event.response.id);
526
532
  responseIdToRun.set(event.response.id, state);
@@ -606,10 +612,10 @@ function createOpenAITracesIntegration(options = {}) {
606
612
  }
607
613
  }
608
614
  function isGenerateTextStartEvent(event) {
609
- if (event == null || typeof event !== "object") {
615
+ if (event == null || typeof event !== "object" || !("operationId" in event)) {
610
616
  return false;
611
617
  }
612
- const operationId = event.operationId;
618
+ const { operationId } = event;
613
619
  return operationId === "ai.generateText" || operationId === "ai.streamText";
614
620
  }
615
621
  function isGenerateTextEndEvent(event) {
@@ -622,10 +628,7 @@ function normalizeMetadata(metadata) {
622
628
  if (metadata == null) {
623
629
  return void 0;
624
630
  }
625
- const normalized = normalizeForJson(metadata);
626
- if (normalized == null || typeof normalized !== "object" || Array.isArray(normalized)) {
627
- return void 0;
628
- }
631
+ const normalized = normalizeObjectForJson(metadata);
629
632
  return Object.keys(normalized).length > 0 ? normalized : void 0;
630
633
  }
631
634
  function getOutputType(output) {
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
- "sources": ["../../../src/lib/tracing/batch-processor.ts", "../../../src/lib/tracing/exporter.ts", "../../../src/lib/tracing/ids.ts", "../../../src/lib/tracing/processor.ts", "../../../src/lib/tracing/serialization.ts", "../../../src/lib/tracing/openai-traces-integration.ts"],
4
- "sourcesContent": ["import type { TracingExporter, TracingProcessor } from './processor.ts';\nimport type { OpenAISpan, OpenAITrace, TraceItem } from './types.ts';\n\nexport interface BatchTraceProcessorOptions {\n maxQueueSize?: number;\n maxBatchSize?: number;\n scheduleDelayMs?: number;\n exportTriggerRatio?: number;\n exportTimeoutMs?: number;\n}\n\nexport class BatchTraceProcessor implements TracingProcessor {\n readonly #exporter: TracingExporter;\n readonly #maxQueueSize: number;\n readonly #maxBatchSize: number;\n readonly #scheduleDelayMs: number;\n readonly #exportTimeoutMs: number;\n readonly #flushThreshold: number;\n\n #queue: TraceItem[] = [];\n #flushTimer?: NodeJS.Timeout;\n #flushPromise?: Promise<void>;\n #shutdown = false;\n\n constructor(\n exporter: TracingExporter,\n options: BatchTraceProcessorOptions = {},\n ) {\n this.#exporter = exporter;\n this.#maxQueueSize = options.maxQueueSize ?? 8192;\n this.#maxBatchSize = options.maxBatchSize ?? 128;\n this.#scheduleDelayMs = options.scheduleDelayMs ?? 5000;\n this.#exportTimeoutMs = options.exportTimeoutMs ?? 30000;\n this.#flushThreshold = Math.max(\n 1,\n Math.floor(this.#maxQueueSize * (options.exportTriggerRatio ?? 0.7)),\n );\n }\n\n start(): void {\n if (this.#shutdown || this.#flushTimer != null) {\n return;\n }\n\n this.#flushTimer = setInterval(() => {\n void this.forceFlush();\n }, this.#scheduleDelayMs);\n this.#flushTimer.unref?.();\n }\n\n onTraceEnd(trace: OpenAITrace): void {\n this.#enqueue(trace);\n }\n\n onSpanEnd(span: OpenAISpan): void {\n this.#enqueue(span);\n }\n\n async forceFlush(): Promise<void> {\n if (this.#flushPromise != null) {\n await this.#flushPromise;\n return;\n }\n\n if (this.#queue.length === 0) {\n return;\n }\n\n this.#flushPromise = this.#flush();\n\n try {\n await this.#flushPromise;\n } finally {\n this.#flushPromise = undefined;\n }\n }\n\n async shutdown(): Promise<void> {\n this.#shutdown = true;\n\n if (this.#flushTimer != null) {\n clearInterval(this.#flushTimer);\n this.#flushTimer = undefined;\n }\n\n await this.forceFlush();\n }\n\n #enqueue(item: TraceItem): void {\n if (this.#queue.length >= this.#maxQueueSize) {\n return;\n }\n\n this.#queue.push(item);\n\n if (this.#queue.length >= this.#flushThreshold) {\n void this.forceFlush();\n }\n }\n\n async #flush(): Promise<void> {\n while (this.#queue.length > 0) {\n const batch = this.#queue.slice(0, this.#maxBatchSize);\n await this.#exporter.export(\n batch,\n AbortSignal.timeout(this.#exportTimeoutMs),\n );\n this.#queue.splice(0, batch.length);\n }\n }\n}\n", "import type { TracingExporter } from './processor.ts';\nimport type {\n FunctionSpanData,\n OpenAISpan,\n OpenAITrace,\n SpanData,\n TraceItem,\n TranscriptionSpanData,\n} from './types.ts';\n\ntype StringifiedIOSpan = FunctionSpanData | TranscriptionSpanData;\ntype StringifiedIOSpanType = StringifiedIOSpan['type'];\n\nconst STRINGIFIED_IO_TYPES = {\n function: true,\n transcription: true,\n} as const satisfies Record<StringifiedIOSpanType, true>;\n\ntype WireSpanData =\n | Exclude<SpanData, StringifiedIOSpan>\n | (Omit<StringifiedIOSpan, 'input' | 'output'> & {\n input?: string;\n output?: string;\n });\n\ntype WireSpan = Omit<OpenAISpan, 'span_data'> & { span_data: WireSpanData };\ntype WireTrace = Omit<OpenAITrace, 'metadata'> & {\n metadata?: Record<string, string>;\n};\ntype WireTraceItem = WireTrace | WireSpan;\n\nfunction hasStringifiedIO(data: SpanData): data is StringifiedIOSpan {\n return data.type in STRINGIFIED_IO_TYPES;\n}\n\nfunction encodeField(value: unknown): string | undefined {\n if (value == null) return undefined;\n return typeof value === 'string' ? value : JSON.stringify(value);\n}\n\nfunction encodeMetadata(\n metadata: Record<string, unknown> | undefined,\n): Record<string, string> | undefined {\n if (metadata == null) return undefined;\n const encoded: Record<string, string> = {};\n for (const [key, value] of Object.entries(metadata)) {\n const result = encodeField(value);\n if (result !== undefined) {\n encoded[key] = result;\n }\n }\n return Object.keys(encoded).length > 0 ? encoded : undefined;\n}\n\nfunction toWireItem(item: TraceItem): WireTraceItem {\n if (item.object === 'trace') {\n const encoded = encodeMetadata(item.metadata);\n const { metadata: _ignored, ...rest } = item;\n return encoded != null ? { ...rest, metadata: encoded } : rest;\n }\n const spanData = item.span_data;\n if (!hasStringifiedIO(spanData)) {\n return { ...item, span_data: spanData };\n }\n return {\n ...item,\n span_data: {\n ...spanData,\n input: encodeField(spanData.input),\n output: encodeField(spanData.output),\n },\n };\n}\n\nexport class OpenAIExportError extends Error {\n readonly status: number;\n\n constructor(status: number, body: string) {\n super(`OpenAI traces export failed (${status}): ${body}`);\n this.name = 'OpenAIExportError';\n this.status = status;\n }\n}\n\nexport interface OpenAITracesExporterOptions {\n apiKey?: string | (() => string | Promise<string>);\n endpoint?: string;\n baseURL?: string;\n organization?: string;\n project?: string;\n maxRetries?: number;\n baseDelayMs?: number;\n maxDelayMs?: number;\n}\n\nexport class OpenAITracesExporter implements TracingExporter {\n #apiKey: string | (() => string | Promise<string>);\n #endpoint: string;\n #organization?: string;\n #project?: string;\n #maxRetries: number;\n #baseDelayMs: number;\n #maxDelayMs: number;\n\n constructor(options: OpenAITracesExporterOptions = {}) {\n this.#apiKey = options.apiKey ?? process.env.OPENAI_API_KEY ?? '';\n this.#endpoint =\n options.endpoint ??\n `${options.baseURL ?? 'https://api.openai.com'}/v1/traces/ingest`;\n this.#organization = options.organization;\n this.#project = options.project;\n this.#maxRetries = options.maxRetries ?? 3;\n this.#baseDelayMs = options.baseDelayMs ?? 1000;\n this.#maxDelayMs = options.maxDelayMs ?? 30000;\n }\n\n async export(items: TraceItem[], signal?: AbortSignal): Promise<void> {\n if (items.length === 0) return;\n const apiKey = await this.#resolveApiKey();\n if (!apiKey) {\n throw new Error(\n 'OpenAI API key is required. Set OPENAI_API_KEY or pass apiKey option.',\n );\n }\n\n const headers: Record<string, string> = {\n 'Content-Type': 'application/json',\n Authorization: `Bearer ${apiKey}`,\n 'OpenAI-Beta': 'traces=v1',\n };\n if (this.#organization) {\n headers['OpenAI-Organization'] = this.#organization;\n }\n if (this.#project) {\n headers['OpenAI-Project'] = this.#project;\n }\n\n const body = JSON.stringify({ data: items.map(toWireItem) });\n await this.#fetchWithRetry(this.#endpoint, {\n method: 'POST',\n headers,\n body,\n signal,\n });\n }\n\n async #resolveApiKey(): Promise<string> {\n return typeof this.#apiKey === 'function'\n ? await this.#apiKey()\n : this.#apiKey;\n }\n\n async #fetchWithRetry(url: string, init: RequestInit): Promise<Response> {\n let lastError: unknown;\n for (let attempt = 0; attempt < this.#maxRetries; attempt++) {\n try {\n const response = await fetch(url, init);\n if (response.ok) return response;\n if (response.status >= 400 && response.status < 500) {\n const text = await response.text().catch(() => '');\n throw new OpenAIExportError(response.status, text);\n }\n lastError = new Error(`Server error ${response.status}`);\n } catch (error) {\n if (error instanceof OpenAIExportError) {\n throw error;\n }\n lastError = error;\n }\n if (attempt < this.#maxRetries - 1) {\n const delay = Math.min(\n this.#baseDelayMs * 2 ** attempt,\n this.#maxDelayMs,\n );\n const jitter = delay * (0.9 + Math.random() * 0.2);\n await new Promise((r) => setTimeout(r, jitter));\n }\n }\n throw lastError;\n }\n}\n", "import { randomUUID } from 'node:crypto';\n\nexport function traceId(): string {\n return `trace_${randomUUID().replace(/-/g, '')}`;\n}\n\nexport function spanId(): string {\n return `span_${randomUUID().replace(/-/g, '').slice(0, 24)}`;\n}\n\nexport function groupId(): string {\n return `group_${randomUUID().replace(/-/g, '').slice(0, 24)}`;\n}\n", "import type { OpenAISpan, OpenAITrace, TraceItem } from './types.ts';\n\nexport interface TracingExporter {\n export(items: TraceItem[], signal?: AbortSignal): Promise<void>;\n}\n\nexport interface TracingProcessor {\n start?(): Promise<void> | void;\n onTraceStart?(trace: OpenAITrace): Promise<void> | void;\n onTraceEnd?(trace: OpenAITrace): Promise<void> | void;\n onSpanStart?(span: OpenAISpan): Promise<void> | void;\n onSpanEnd?(span: OpenAISpan): Promise<void> | void;\n forceFlush?(): Promise<void> | void;\n shutdown?(): Promise<void> | void;\n}\n\nexport class CompositeTraceProcessor implements TracingProcessor {\n readonly #processors: TracingProcessor[];\n\n constructor(processors: TracingProcessor[]) {\n this.#processors = processors.filter(Boolean);\n }\n\n async start(): Promise<void> {\n for (const processor of this.#processors) {\n await processor.start?.();\n }\n }\n\n async onTraceStart(trace: OpenAITrace): Promise<void> {\n for (const processor of this.#processors) {\n await processor.onTraceStart?.(trace);\n }\n }\n\n async onTraceEnd(trace: OpenAITrace): Promise<void> {\n for (const processor of this.#processors) {\n await processor.onTraceEnd?.(trace);\n }\n }\n\n async onSpanStart(span: OpenAISpan): Promise<void> {\n for (const processor of this.#processors) {\n await processor.onSpanStart?.(span);\n }\n }\n\n async onSpanEnd(span: OpenAISpan): Promise<void> {\n for (const processor of this.#processors) {\n await processor.onSpanEnd?.(span);\n }\n }\n\n async forceFlush(): Promise<void> {\n for (const processor of this.#processors) {\n await processor.forceFlush?.();\n }\n }\n\n async shutdown(): Promise<void> {\n for (const processor of this.#processors) {\n await processor.shutdown?.();\n }\n }\n}\n\nexport function createTracingProcessor(\n processors: TracingProcessor | TracingProcessor[] | undefined,\n): TracingProcessor | undefined {\n if (processors == null) {\n return undefined;\n }\n\n const list = Array.isArray(processors) ? processors : [processors];\n if (list.length === 0) {\n return undefined;\n }\n\n return list.length === 1 ? list[0] : new CompositeTraceProcessor(list);\n}\n", "import type { LanguageModelUsage } from 'ai';\n\nimport type { GenerationUsageData, OpenAISpanError } from './types.ts';\n\nexport function normalizeForJson(value: unknown): unknown {\n if (value == null) {\n return value;\n }\n\n if (\n typeof value === 'string' ||\n typeof value === 'number' ||\n typeof value === 'boolean'\n ) {\n return value;\n }\n\n if (typeof value === 'bigint') {\n return value.toString();\n }\n\n if (value instanceof Date) {\n return value.toISOString();\n }\n\n if (value instanceof Error) {\n return errorToSpanError(value);\n }\n\n if (Array.isArray(value)) {\n return value\n .map((item) => normalizeForJson(item))\n .filter((item) => item !== undefined);\n }\n\n if (typeof value === 'object') {\n const normalized: Record<string, unknown> = {};\n for (const [key, entry] of Object.entries(\n value as Record<string, unknown>,\n )) {\n const result = normalizeForJson(entry);\n if (result !== undefined) {\n normalized[key] = result;\n }\n }\n return normalized;\n }\n\n return String(value);\n}\n\nexport function normalizeRecordArray(\n value: unknown,\n): Record<string, unknown>[] | undefined {\n const normalized = normalizeForJson(value);\n if (!Array.isArray(normalized)) {\n return undefined;\n }\n\n return normalized.map((item) =>\n typeof item === 'object' && item != null\n ? (item as Record<string, unknown>)\n : { value: item },\n );\n}\n\nexport function normalizeUsage(\n usage: LanguageModelUsage | undefined,\n): GenerationUsageData | undefined {\n if (usage == null) {\n return undefined;\n }\n\n const details: Record<string, unknown> = {};\n\n if (hasDefinedValue(usage.inputTokenDetails)) {\n details.input_token_details = normalizeForJson({\n no_cache_tokens: usage.inputTokenDetails.noCacheTokens,\n cache_read_tokens: usage.inputTokenDetails.cacheReadTokens,\n cache_write_tokens: usage.inputTokenDetails.cacheWriteTokens,\n });\n }\n\n if (hasDefinedValue(usage.outputTokenDetails)) {\n details.output_token_details = normalizeForJson({\n text_tokens: usage.outputTokenDetails.textTokens,\n reasoning_tokens: usage.outputTokenDetails.reasoningTokens,\n });\n }\n\n if (usage.raw != null) {\n details.raw = normalizeForJson(usage.raw);\n }\n\n return {\n input_tokens: usage.inputTokens,\n output_tokens: usage.outputTokens,\n ...(Object.keys(details).length > 0 ? { details } : {}),\n };\n}\n\nexport function errorToSpanError(error: unknown): OpenAISpanError {\n if (error instanceof Error) {\n const data = normalizeForJson({\n name: error.name,\n stack: error.stack,\n cause: error.cause,\n }) as Record<string, unknown>;\n\n return {\n message: error.message,\n ...(Object.keys(data).length > 0 ? { data } : {}),\n };\n }\n\n return {\n message: String(error),\n };\n}\n\nfunction hasDefinedValue(value: Record<string, unknown> | undefined): boolean {\n if (value == null) {\n return false;\n }\n\n return Object.values(value).some((entry) => entry !== undefined);\n}\n", "import type {\n GenerateTextEndEvent,\n GenerateTextStartEvent,\n Telemetry,\n} from 'ai';\n\nimport {\n BatchTraceProcessor,\n type BatchTraceProcessorOptions,\n} from './batch-processor.ts';\nimport { OpenAITracesExporter } from './exporter.ts';\nimport { spanId, traceId } from './ids.ts';\nimport { type TracingProcessor, createTracingProcessor } from './processor.ts';\nimport {\n errorToSpanError,\n normalizeForJson,\n normalizeRecordArray,\n normalizeUsage,\n} from './serialization.ts';\nimport type {\n AgentSpanData,\n FunctionSpanData,\n GenerationSpanData,\n OpenAISpan,\n OpenAITrace,\n} from './types.ts';\n\ninterface TraceRunState {\n callId: string;\n trace: OpenAITrace;\n rootSpan: OpenAISpan;\n responseIds: Set<string>;\n stepSpans: string[];\n spansById: Map<string, OpenAISpan>;\n toolCallSpans: Map<string, string>;\n}\n\ninterface ResolvableEvent {\n callId?: string;\n response?: { id?: string };\n toolCall?: { toolCallId: string };\n}\n\nexport interface OpenAITracesIntegrationOptions {\n apiKey?: string | (() => string | Promise<string>);\n baseURL?: string;\n endpoint?: string;\n organization?: string;\n project?: string;\n workflowName?: string;\n groupId?: string;\n metadata?: Record<string, unknown>;\n exporter?: OpenAITracesExporter;\n processor?: TracingProcessor | TracingProcessor[];\n batch?: BatchTraceProcessorOptions;\n includeSensitiveData?: boolean;\n}\n\nexport function createOpenAITracesIntegration(\n options: OpenAITracesIntegrationOptions = {},\n): Telemetry {\n if (process.env.OPENAI_AGENTS_DISABLE_TRACING === '1') {\n return {};\n }\n\n const exporter =\n options.exporter ??\n new OpenAITracesExporter({\n apiKey: options.apiKey,\n baseURL: options.baseURL,\n endpoint: options.endpoint,\n organization: options.organization,\n project: options.project,\n });\n\n const processor: TracingProcessor =\n createTracingProcessor(options.processor) ??\n new BatchTraceProcessor(exporter, options.batch);\n\n const includeSensitive =\n options.includeSensitiveData ??\n process.env.OPENAI_AGENTS_TRACE_INCLUDE_SENSITIVE_DATA !== '0';\n const openRuns: TraceRunState[] = [];\n const callIdToRun = new Map<string, TraceRunState>();\n const responseIdToRun = new Map<string, TraceRunState>();\n const toolCallIdToRun = new Map<string, TraceRunState>();\n\n void processor.start?.();\n\n const integration: Telemetry = {\n onStart: async (event) => {\n if (!isGenerateTextStartEvent(event)) {\n return;\n }\n\n const trace: OpenAITrace = {\n object: 'trace',\n id: traceId(),\n workflow_name:\n options.workflowName ?? event.functionId ?? 'ai-sdk-workflow',\n group_id: options.groupId ?? null,\n metadata: normalizeMetadata({\n ...options.metadata,\n }),\n };\n\n const rootSpan: OpenAISpan = {\n object: 'trace.span',\n id: spanId(),\n trace_id: trace.id,\n parent_id: null,\n started_at: now(),\n span_data: {\n type: 'agent',\n name: trace.workflow_name,\n tools: event.tools ? Object.keys(event.tools) : undefined,\n output_type: getOutputType(event.output),\n } satisfies AgentSpanData,\n };\n\n const state: TraceRunState = {\n callId: event.callId,\n trace,\n rootSpan,\n responseIds: new Set(),\n stepSpans: [],\n spansById: new Map([[rootSpan.id, rootSpan]]),\n toolCallSpans: new Map(),\n };\n\n openRuns.push(state);\n callIdToRun.set(event.callId, state);\n\n await processor.onTraceStart?.(trace);\n await processor.onSpanStart?.(rootSpan);\n },\n\n onStepStart: async (event) => {\n const state = resolveRunState(event);\n if (state == null) {\n return;\n }\n\n const span: OpenAISpan = {\n object: 'trace.span',\n id: spanId(),\n trace_id: state.trace.id,\n parent_id: currentParentId(state),\n started_at: now(),\n span_data: {\n type: 'generation',\n model: event.modelId,\n model_config: normalizeMetadata({\n provider: event.provider,\n tool_choice: event.toolChoice,\n active_tools: event.activeTools,\n provider_options: event.providerOptions,\n }),\n ...(includeSensitive && event.recordInputs !== false\n ? { input: normalizeRecordArray(event.messages) }\n : {}),\n } satisfies GenerationSpanData,\n };\n\n state.stepSpans.push(span.id);\n state.spansById.set(span.id, span);\n\n await processor.onSpanStart?.(span);\n },\n\n onToolExecutionStart: async (event) => {\n const state = resolveRunState(event);\n if (state == null) {\n return;\n }\n\n const span: OpenAISpan = {\n object: 'trace.span',\n id: spanId(),\n trace_id: state.trace.id,\n parent_id: currentParentId(state),\n started_at: now(),\n span_data: {\n type: 'function',\n name: event.toolCall.toolName,\n ...(includeSensitive && event.recordInputs !== false\n ? {\n input: normalizeForJson(event.toolCall.input),\n }\n : {}),\n } satisfies FunctionSpanData,\n };\n\n state.toolCallSpans.set(event.toolCall.toolCallId, span.id);\n toolCallIdToRun.set(event.toolCall.toolCallId, state);\n state.spansById.set(span.id, span);\n\n await processor.onSpanStart?.(span);\n },\n\n onToolExecutionEnd: async (event) => {\n const state =\n toolCallIdToRun.get(event.toolCall.toolCallId) ??\n resolveRunState(event);\n if (state == null) {\n return;\n }\n\n const id = state.toolCallSpans.get(event.toolCall.toolCallId);\n if (id == null) {\n return;\n }\n\n state.toolCallSpans.delete(event.toolCall.toolCallId);\n toolCallIdToRun.delete(event.toolCall.toolCallId);\n\n const span = state.spansById.get(id);\n if (span == null) {\n return;\n }\n\n span.ended_at = now();\n\n const data = span.span_data as FunctionSpanData;\n if (event.toolOutput.type === 'tool-result') {\n if (includeSensitive && event.recordOutputs !== false) {\n data.output = normalizeForJson(event.toolOutput.output);\n }\n } else {\n span.error = errorToSpanError(event.toolOutput.error);\n }\n\n await processor.onSpanEnd?.(span);\n },\n\n onStepEnd: async (event) => {\n const state = resolveRunState(event);\n if (state == null) {\n return;\n }\n\n const id = state.stepSpans.pop();\n if (id == null) {\n return;\n }\n\n const span = state.spansById.get(id);\n if (span == null) {\n return;\n }\n\n span.ended_at = now();\n\n const data = span.span_data as GenerationSpanData;\n if (includeSensitive && event.recordOutputs !== false) {\n data.output = normalizeRecordArray(event.response.messages);\n }\n data.usage = normalizeUsage(event.usage);\n if (event.response.id != null) {\n state.responseIds.add(event.response.id);\n responseIdToRun.set(event.response.id, state);\n }\n\n await processor.onSpanEnd?.(span);\n },\n\n onEnd: async (event) => {\n if (!isGenerateTextEndEvent(event)) {\n return;\n }\n\n const state = resolveRunState(event);\n if (state == null) {\n return;\n }\n\n try {\n while (state.stepSpans.length > 0) {\n const openStepId = state.stepSpans.pop();\n if (openStepId == null) {\n continue;\n }\n\n const openStep = state.spansById.get(openStepId);\n if (openStep == null || openStep.ended_at != null) {\n continue;\n }\n\n openStep.ended_at = now();\n await processor.onSpanEnd?.(openStep);\n }\n\n state.rootSpan.ended_at = now();\n state.trace.metadata = normalizeMetadata({\n ...state.trace.metadata,\n total_usage: normalizeUsage(event.usage),\n steps: event.steps.length,\n finish_reason: event.finishReason,\n });\n\n await processor.onSpanEnd?.(state.rootSpan);\n await processor.onTraceEnd?.(state.trace);\n await processor.forceFlush?.();\n } finally {\n closeRunState(state);\n }\n },\n };\n\n return integration;\n\n function resolveRunState(event: ResolvableEvent): TraceRunState | undefined {\n if (event.callId != null) {\n const state = callIdToRun.get(event.callId);\n if (state != null) {\n return state;\n }\n }\n\n if (event.response?.id != null) {\n const state = responseIdToRun.get(event.response.id);\n if (state != null) {\n return state;\n }\n }\n\n if (event.toolCall?.toolCallId != null) {\n const state = toolCallIdToRun.get(event.toolCall.toolCallId);\n if (state != null) {\n return state;\n }\n }\n\n if (openRuns.length === 0) {\n return undefined;\n }\n if (openRuns.length === 1) {\n return openRuns[0];\n }\n\n return undefined;\n }\n\n function closeRunState(state: TraceRunState): void {\n callIdToRun.delete(state.callId);\n const index = openRuns.indexOf(state);\n if (index >= 0) {\n openRuns.splice(index, 1);\n }\n\n for (const responseId of state.responseIds) {\n responseIdToRun.delete(responseId);\n }\n\n for (const toolCallId of state.toolCallSpans.keys()) {\n toolCallIdToRun.delete(toolCallId);\n }\n }\n}\n\nfunction isGenerateTextStartEvent(\n event: unknown,\n): event is GenerateTextStartEvent {\n if (event == null || typeof event !== 'object') {\n return false;\n }\n const operationId = (event as { operationId?: unknown }).operationId;\n return operationId === 'ai.generateText' || operationId === 'ai.streamText';\n}\n\nfunction isGenerateTextEndEvent(event: unknown): event is GenerateTextEndEvent {\n return (\n event != null &&\n typeof event === 'object' &&\n 'finalStep' in event &&\n 'steps' in event &&\n 'usage' in event\n );\n}\n\nfunction currentParentId(state: TraceRunState): string {\n return state.stepSpans[state.stepSpans.length - 1] ?? state.rootSpan.id;\n}\n\nfunction normalizeMetadata(\n metadata: Record<string, unknown> | undefined,\n): Record<string, unknown> | undefined {\n if (metadata == null) {\n return undefined;\n }\n\n const normalized = normalizeForJson(metadata);\n if (\n normalized == null ||\n typeof normalized !== 'object' ||\n Array.isArray(normalized)\n ) {\n return undefined;\n }\n\n return Object.keys(normalized).length > 0\n ? (normalized as Record<string, unknown>)\n : undefined;\n}\n\nfunction getOutputType(output: unknown): string | undefined {\n if (output == null) {\n return undefined;\n }\n\n if (\n typeof output === 'object' &&\n 'type' in (output as Record<string, unknown>) &&\n typeof (output as Record<string, unknown>).type === 'string'\n ) {\n return (output as Record<string, unknown>).type as string;\n }\n\n if (typeof output === 'object' && output.constructor?.name != null) {\n return output.constructor.name;\n }\n\n return typeof output;\n}\n\nfunction now(): string {\n return new Date().toISOString();\n}\n"],
5
- "mappings": "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",
3
+ "sources": ["../../../src/lib/tracing/batch-processor.ts", "../../../src/lib/tracing/exporter.ts", "../../../src/lib/tracing/ids.ts", "../../../src/lib/tracing/processor.ts", "../../../src/lib/telemetry/redact-telemetry-event.ts", "../../../src/lib/tracing/serialization.ts", "../../../src/lib/tracing/openai-traces-integration.ts"],
4
+ "sourcesContent": ["import type { TracingExporter, TracingProcessor } from './processor.ts';\nimport type { OpenAISpan, OpenAITrace, TraceItem } from './types.ts';\n\nexport interface BatchTraceProcessorOptions {\n maxQueueSize?: number;\n maxBatchSize?: number;\n scheduleDelayMs?: number;\n exportTriggerRatio?: number;\n exportTimeoutMs?: number;\n}\n\nexport class BatchTraceProcessor implements TracingProcessor {\n readonly #exporter: TracingExporter;\n readonly #maxQueueSize: number;\n readonly #maxBatchSize: number;\n readonly #scheduleDelayMs: number;\n readonly #exportTimeoutMs: number;\n readonly #flushThreshold: number;\n\n #queue: TraceItem[] = [];\n #flushTimer?: NodeJS.Timeout;\n #flushPromise?: Promise<void>;\n #shutdown = false;\n\n constructor(\n exporter: TracingExporter,\n options: BatchTraceProcessorOptions = {},\n ) {\n this.#exporter = exporter;\n this.#maxQueueSize = options.maxQueueSize ?? 8192;\n this.#maxBatchSize = options.maxBatchSize ?? 128;\n this.#scheduleDelayMs = options.scheduleDelayMs ?? 5000;\n this.#exportTimeoutMs = options.exportTimeoutMs ?? 30000;\n this.#flushThreshold = Math.max(\n 1,\n Math.floor(this.#maxQueueSize * (options.exportTriggerRatio ?? 0.7)),\n );\n }\n\n start(): void {\n if (this.#shutdown || this.#flushTimer != null) {\n return;\n }\n\n this.#flushTimer = setInterval(() => {\n void this.forceFlush();\n }, this.#scheduleDelayMs);\n this.#flushTimer.unref?.();\n }\n\n onTraceEnd(trace: OpenAITrace): void {\n this.#enqueue(trace);\n }\n\n onSpanEnd(span: OpenAISpan): void {\n this.#enqueue(span);\n }\n\n async forceFlush(): Promise<void> {\n if (this.#flushPromise != null) {\n await this.#flushPromise;\n return;\n }\n\n if (this.#queue.length === 0) {\n return;\n }\n\n this.#flushPromise = this.#flush();\n\n try {\n await this.#flushPromise;\n } finally {\n this.#flushPromise = undefined;\n }\n }\n\n async shutdown(): Promise<void> {\n this.#shutdown = true;\n\n if (this.#flushTimer != null) {\n clearInterval(this.#flushTimer);\n this.#flushTimer = undefined;\n }\n\n await this.forceFlush();\n }\n\n #enqueue(item: TraceItem): void {\n if (this.#queue.length >= this.#maxQueueSize) {\n return;\n }\n\n this.#queue.push(item);\n\n if (this.#queue.length >= this.#flushThreshold) {\n void this.forceFlush();\n }\n }\n\n async #flush(): Promise<void> {\n while (this.#queue.length > 0) {\n const batch = this.#queue.slice(0, this.#maxBatchSize);\n await this.#exporter.export(\n batch,\n AbortSignal.timeout(this.#exportTimeoutMs),\n );\n this.#queue.splice(0, batch.length);\n }\n }\n}\n", "import type { TracingExporter } from './processor.ts';\nimport type {\n FunctionSpanData,\n OpenAISpan,\n OpenAITrace,\n SpanData,\n TraceItem,\n TranscriptionSpanData,\n} from './types.ts';\n\ntype StringifiedIOSpan = FunctionSpanData | TranscriptionSpanData;\ntype StringifiedIOSpanType = StringifiedIOSpan['type'];\n\nconst STRINGIFIED_IO_TYPES = {\n function: true,\n transcription: true,\n} as const satisfies Record<StringifiedIOSpanType, true>;\n\ntype WireSpanData =\n | Exclude<SpanData, StringifiedIOSpan>\n | (Omit<StringifiedIOSpan, 'input' | 'output'> & {\n input?: string;\n output?: string;\n });\n\ntype WireSpan = Omit<OpenAISpan, 'span_data'> & { span_data: WireSpanData };\ntype WireTrace = Omit<OpenAITrace, 'metadata'> & {\n metadata?: Record<string, string>;\n};\ntype WireTraceItem = WireTrace | WireSpan;\n\nfunction hasStringifiedIO(data: SpanData): data is StringifiedIOSpan {\n return data.type in STRINGIFIED_IO_TYPES;\n}\n\nfunction encodeField(value: unknown): string | undefined {\n if (value == null) return undefined;\n return typeof value === 'string' ? value : JSON.stringify(value);\n}\n\nfunction encodeMetadata(\n metadata: Record<string, unknown> | undefined,\n): Record<string, string> | undefined {\n if (metadata == null) return undefined;\n const encoded: Record<string, string> = {};\n for (const [key, value] of Object.entries(metadata)) {\n const result = encodeField(value);\n if (result !== undefined) {\n encoded[key] = result;\n }\n }\n return Object.keys(encoded).length > 0 ? encoded : undefined;\n}\n\nfunction toWireItem(item: TraceItem): WireTraceItem {\n if (item.object === 'trace') {\n const encoded = encodeMetadata(item.metadata);\n const { metadata: _ignored, ...rest } = item;\n return encoded != null ? { ...rest, metadata: encoded } : rest;\n }\n const spanData = item.span_data;\n if (!hasStringifiedIO(spanData)) {\n return { ...item, span_data: spanData };\n }\n return {\n ...item,\n span_data: {\n ...spanData,\n input: encodeField(spanData.input),\n output: encodeField(spanData.output),\n },\n };\n}\n\nexport class OpenAIExportError extends Error {\n readonly status: number;\n\n constructor(status: number, body: string) {\n super(`OpenAI traces export failed (${status}): ${body}`);\n this.name = 'OpenAIExportError';\n this.status = status;\n }\n}\n\nexport interface OpenAITracesExporterOptions {\n apiKey?: string | (() => string | Promise<string>);\n endpoint?: string;\n baseURL?: string;\n organization?: string;\n project?: string;\n maxRetries?: number;\n baseDelayMs?: number;\n maxDelayMs?: number;\n}\n\nexport class OpenAITracesExporter implements TracingExporter {\n #apiKey: string | (() => string | Promise<string>);\n #endpoint: string;\n #organization?: string;\n #project?: string;\n #maxRetries: number;\n #baseDelayMs: number;\n #maxDelayMs: number;\n\n constructor(options: OpenAITracesExporterOptions = {}) {\n this.#apiKey = options.apiKey ?? process.env.OPENAI_API_KEY ?? '';\n this.#endpoint =\n options.endpoint ??\n `${options.baseURL ?? 'https://api.openai.com'}/v1/traces/ingest`;\n this.#organization = options.organization;\n this.#project = options.project;\n this.#maxRetries = options.maxRetries ?? 3;\n this.#baseDelayMs = options.baseDelayMs ?? 1000;\n this.#maxDelayMs = options.maxDelayMs ?? 30000;\n }\n\n async export(items: TraceItem[], signal?: AbortSignal): Promise<void> {\n if (items.length === 0) return;\n const apiKey = await this.#resolveApiKey();\n if (!apiKey) {\n throw new Error(\n 'OpenAI API key is required. Set OPENAI_API_KEY or pass apiKey option.',\n );\n }\n\n const headers: Record<string, string> = {\n 'Content-Type': 'application/json',\n Authorization: `Bearer ${apiKey}`,\n 'OpenAI-Beta': 'traces=v1',\n };\n if (this.#organization) {\n headers['OpenAI-Organization'] = this.#organization;\n }\n if (this.#project) {\n headers['OpenAI-Project'] = this.#project;\n }\n\n const body = JSON.stringify({ data: items.map(toWireItem) });\n await this.#fetchWithRetry(this.#endpoint, {\n method: 'POST',\n headers,\n body,\n signal,\n });\n }\n\n async #resolveApiKey(): Promise<string> {\n return typeof this.#apiKey === 'function'\n ? await this.#apiKey()\n : this.#apiKey;\n }\n\n async #fetchWithRetry(url: string, init: RequestInit): Promise<Response> {\n let lastError: unknown;\n for (let attempt = 0; attempt < this.#maxRetries; attempt++) {\n try {\n const response = await fetch(url, init);\n if (response.ok) return response;\n if (response.status >= 400 && response.status < 500) {\n const text = await response.text().catch(() => '');\n throw new OpenAIExportError(response.status, text);\n }\n lastError = new Error(`Server error ${response.status}`);\n } catch (error) {\n if (error instanceof OpenAIExportError) {\n throw error;\n }\n lastError = error;\n }\n if (attempt < this.#maxRetries - 1) {\n const delay = Math.min(\n this.#baseDelayMs * 2 ** attempt,\n this.#maxDelayMs,\n );\n const jitter = delay * (0.9 + Math.random() * 0.2);\n await new Promise((r) => setTimeout(r, jitter));\n }\n }\n throw lastError;\n }\n}\n", "import { randomUUID } from 'node:crypto';\n\nexport function traceId(): string {\n return `trace_${randomUUID().replace(/-/g, '')}`;\n}\n\nexport function spanId(): string {\n return `span_${randomUUID().replace(/-/g, '').slice(0, 24)}`;\n}\n\nexport function groupId(): string {\n return `group_${randomUUID().replace(/-/g, '').slice(0, 24)}`;\n}\n", "import type { OpenAISpan, OpenAITrace, TraceItem } from './types.ts';\n\nexport interface TracingExporter {\n export(items: TraceItem[], signal?: AbortSignal): Promise<void>;\n}\n\nexport interface TracingProcessor {\n start?(): Promise<void> | void;\n onTraceStart?(trace: OpenAITrace): Promise<void> | void;\n onTraceEnd?(trace: OpenAITrace): Promise<void> | void;\n onSpanStart?(span: OpenAISpan): Promise<void> | void;\n onSpanEnd?(span: OpenAISpan): Promise<void> | void;\n forceFlush?(): Promise<void> | void;\n shutdown?(): Promise<void> | void;\n}\n\nexport class CompositeTraceProcessor implements TracingProcessor {\n readonly #processors: TracingProcessor[];\n\n constructor(processors: TracingProcessor[]) {\n this.#processors = processors.filter(Boolean);\n }\n\n async start(): Promise<void> {\n for (const processor of this.#processors) {\n await processor.start?.();\n }\n }\n\n async onTraceStart(trace: OpenAITrace): Promise<void> {\n for (const processor of this.#processors) {\n await processor.onTraceStart?.(trace);\n }\n }\n\n async onTraceEnd(trace: OpenAITrace): Promise<void> {\n for (const processor of this.#processors) {\n await processor.onTraceEnd?.(trace);\n }\n }\n\n async onSpanStart(span: OpenAISpan): Promise<void> {\n for (const processor of this.#processors) {\n await processor.onSpanStart?.(span);\n }\n }\n\n async onSpanEnd(span: OpenAISpan): Promise<void> {\n for (const processor of this.#processors) {\n await processor.onSpanEnd?.(span);\n }\n }\n\n async forceFlush(): Promise<void> {\n for (const processor of this.#processors) {\n await processor.forceFlush?.();\n }\n }\n\n async shutdown(): Promise<void> {\n for (const processor of this.#processors) {\n await processor.shutdown?.();\n }\n }\n}\n\nexport function createTracingProcessor(\n processors: TracingProcessor | TracingProcessor[] | undefined,\n): TracingProcessor | undefined {\n if (processors == null) {\n return undefined;\n }\n\n const list = Array.isArray(processors) ? processors : [processors];\n if (list.length === 0) {\n return undefined;\n }\n\n return list.length === 1 ? list[0] : new CompositeTraceProcessor(list);\n}\n", "const REDACTED = '[Redacted]';\n\nconst INPUT_FIELDS = [\n 'system',\n 'prompt',\n 'instructions',\n 'messages',\n 'tools',\n 'toolChoice',\n 'activeTools',\n 'toolOrder',\n 'headers',\n 'providerOptions',\n 'runtimeContext',\n 'toolsContext',\n 'toolContext',\n 'promptMessages',\n 'stepTools',\n 'stepToolChoice',\n 'request',\n 'values',\n 'value',\n 'query',\n 'documents',\n 'schema',\n 'schemaDescription',\n 'schemaName',\n] as const;\n\nconst OUTPUT_FIELDS = [\n 'content',\n 'text',\n 'reasoning',\n 'reasoningText',\n 'files',\n 'sources',\n 'toolCalls',\n 'staticToolCalls',\n 'dynamicToolCalls',\n 'toolResults',\n 'staticToolResults',\n 'dynamicToolResults',\n 'response',\n 'responseMessages',\n 'providerMetadata',\n 'steps',\n 'finalStep',\n 'object',\n 'objectText',\n 'embedding',\n 'embeddings',\n 'ranking',\n 'rankings',\n 'results',\n 'error',\n] as const;\n\nconst OUTPUT_SPECIFICATION_EVENTS = new Set([\n 'onStart',\n 'onStepStart',\n 'onObjectStepStart',\n]);\n\nexport function redactTelemetryEvent(event: string, data: unknown): unknown {\n if (!isRecord(data)) return data;\n const recordInputs = data.recordInputs !== false;\n const recordOutputs = data.recordOutputs !== false;\n if (recordInputs && recordOutputs) return data;\n\n const redacted = { ...data };\n if (!recordInputs) {\n redactFields(redacted, INPUT_FIELDS);\n if (\n OUTPUT_SPECIFICATION_EVENTS.has(event) &&\n Object.hasOwn(redacted, 'output')\n ) {\n redacted.output = REDACTED;\n }\n if (Object.hasOwn(redacted, 'toolCall')) {\n redacted.toolCall = redactToolCallInput(redacted.toolCall);\n }\n if (Object.hasOwn(redacted, 'toolOutput')) {\n redacted.toolOutput = redactToolOutput(redacted.toolOutput, true, false);\n }\n if (Object.hasOwn(redacted, 'steps')) {\n redacted.steps = redactStepInputs(redacted.steps);\n }\n if (Object.hasOwn(redacted, 'finalStep')) {\n redacted.finalStep = redactStepInputs(redacted.finalStep);\n }\n }\n if (!recordOutputs) {\n redactFields(redacted, OUTPUT_FIELDS);\n if (\n !OUTPUT_SPECIFICATION_EVENTS.has(event) &&\n Object.hasOwn(redacted, 'output')\n ) {\n redacted.output = REDACTED;\n }\n if (Object.hasOwn(redacted, 'toolOutput')) {\n redacted.toolOutput = redactToolOutput(redacted.toolOutput, false, true);\n }\n }\n return redacted;\n}\n\nfunction redactFields(\n value: Record<string, unknown>,\n fields: readonly string[],\n): void {\n for (const field of fields) {\n if (Object.hasOwn(value, field)) value[field] = REDACTED;\n }\n}\n\nfunction redactToolCallInput(value: unknown): unknown {\n if (!isRecord(value) || !Object.hasOwn(value, 'input')) return value;\n return { ...value, input: REDACTED };\n}\n\nfunction redactToolOutput(\n value: unknown,\n redactInput: boolean,\n redactOutput: boolean,\n): unknown {\n if (!isRecord(value)) return value;\n const redacted = { ...value };\n if (redactInput && Object.hasOwn(redacted, 'input')) {\n redacted.input = REDACTED;\n }\n if (redactOutput) {\n if (Object.hasOwn(redacted, 'output')) redacted.output = REDACTED;\n if (Object.hasOwn(redacted, 'error')) redacted.error = REDACTED;\n }\n return redacted;\n}\n\nfunction redactStepInputs(value: unknown): unknown {\n if (Array.isArray(value)) return value.map(redactStepInputs);\n if (!isRecord(value)) return value;\n const redacted = { ...value };\n redactFields(redacted, INPUT_FIELDS);\n return redacted;\n}\n\nexport function isRecord(value: unknown): value is Record<string, unknown> {\n return typeof value === 'object' && value !== null && !Array.isArray(value);\n}\n", "import type { LanguageModelUsage } from 'ai';\n\nimport { isRecord } from '../telemetry/redact-telemetry-event.ts';\nimport type { GenerationUsageData, OpenAISpanError } from './types.ts';\n\nexport function normalizeForJson(value: unknown): unknown {\n if (value == null) {\n return value;\n }\n\n if (\n typeof value === 'string' ||\n typeof value === 'number' ||\n typeof value === 'boolean'\n ) {\n return value;\n }\n\n if (typeof value === 'bigint') {\n return value.toString();\n }\n\n if (value instanceof Date) {\n return value.toISOString();\n }\n\n if (value instanceof Error) {\n return errorToSpanError(value);\n }\n\n if (Array.isArray(value)) {\n return value\n .map((item) => normalizeForJson(item))\n .filter((item) => item !== undefined);\n }\n\n if (typeof value === 'object') {\n return normalizeObjectForJson(value);\n }\n\n return String(value);\n}\n\n/** Normalizes each own enumerable property, dropping undefined results. */\nexport function normalizeObjectForJson(value: object): Record<string, unknown> {\n const normalized: Record<string, unknown> = {};\n for (const [key, entry] of Object.entries(value)) {\n const result = normalizeForJson(entry);\n if (result !== undefined) {\n normalized[key] = result;\n }\n }\n return normalized;\n}\n\nexport function normalizeRecordArray(\n value: unknown,\n): Record<string, unknown>[] | undefined {\n const normalized = normalizeForJson(value);\n if (!Array.isArray(normalized)) {\n return undefined;\n }\n\n return normalized.map((item) => (isRecord(item) ? item : { value: item }));\n}\n\nexport function normalizeUsage(\n usage: LanguageModelUsage | undefined,\n): GenerationUsageData | undefined {\n if (usage == null) {\n return undefined;\n }\n\n const details: Record<string, unknown> = {};\n\n if (hasDefinedValue(usage.inputTokenDetails)) {\n details.input_token_details = normalizeForJson({\n no_cache_tokens: usage.inputTokenDetails.noCacheTokens,\n cache_read_tokens: usage.inputTokenDetails.cacheReadTokens,\n cache_write_tokens: usage.inputTokenDetails.cacheWriteTokens,\n });\n }\n\n if (hasDefinedValue(usage.outputTokenDetails)) {\n details.output_token_details = normalizeForJson({\n text_tokens: usage.outputTokenDetails.textTokens,\n reasoning_tokens: usage.outputTokenDetails.reasoningTokens,\n });\n }\n\n if (usage.raw != null) {\n details.raw = normalizeForJson(usage.raw);\n }\n\n return {\n input_tokens: usage.inputTokens,\n output_tokens: usage.outputTokens,\n ...(Object.keys(details).length > 0 ? { details } : {}),\n };\n}\n\nexport function errorToSpanError(error: unknown): OpenAISpanError {\n if (error instanceof Error) {\n const data = normalizeObjectForJson({\n name: error.name,\n stack: error.stack,\n cause: error.cause,\n });\n\n return {\n message: error.message,\n ...(Object.keys(data).length > 0 ? { data } : {}),\n };\n }\n\n return {\n message: String(error),\n };\n}\n\nfunction hasDefinedValue(value: Record<string, unknown> | undefined): boolean {\n if (value == null) {\n return false;\n }\n\n return Object.values(value).some((entry) => entry !== undefined);\n}\n", "import type {\n GenerateTextEndEvent,\n GenerateTextStartEvent,\n Telemetry,\n} from 'ai';\n\nimport {\n BatchTraceProcessor,\n type BatchTraceProcessorOptions,\n} from './batch-processor.ts';\nimport { OpenAITracesExporter } from './exporter.ts';\nimport { spanId, traceId } from './ids.ts';\nimport { type TracingProcessor, createTracingProcessor } from './processor.ts';\nimport {\n errorToSpanError,\n normalizeForJson,\n normalizeObjectForJson,\n normalizeRecordArray,\n normalizeUsage,\n} from './serialization.ts';\nimport type {\n AgentSpanData,\n FunctionSpanData,\n GenerationSpanData,\n OpenAISpan,\n OpenAITrace,\n} from './types.ts';\n\ninterface TraceRunState {\n callId: string;\n trace: OpenAITrace;\n rootSpan: OpenAISpan;\n responseIds: Set<string>;\n stepSpans: string[];\n spansById: Map<string, OpenAISpan>;\n toolCallSpans: Map<string, string>;\n}\n\ninterface ResolvableEvent {\n callId?: string;\n response?: { id?: string };\n toolCall?: { toolCallId: string };\n}\n\nexport interface OpenAITracesIntegrationOptions {\n apiKey?: string | (() => string | Promise<string>);\n baseURL?: string;\n endpoint?: string;\n organization?: string;\n project?: string;\n workflowName?: string;\n groupId?: string;\n metadata?: Record<string, unknown>;\n exporter?: OpenAITracesExporter;\n processor?: TracingProcessor | TracingProcessor[];\n batch?: BatchTraceProcessorOptions;\n includeSensitiveData?: boolean;\n}\n\nexport function createOpenAITracesIntegration(\n options: OpenAITracesIntegrationOptions = {},\n): Telemetry {\n if (process.env.OPENAI_AGENTS_DISABLE_TRACING === '1') {\n return {};\n }\n\n const exporter =\n options.exporter ??\n new OpenAITracesExporter({\n apiKey: options.apiKey,\n baseURL: options.baseURL,\n endpoint: options.endpoint,\n organization: options.organization,\n project: options.project,\n });\n\n const processor: TracingProcessor =\n createTracingProcessor(options.processor) ??\n new BatchTraceProcessor(exporter, options.batch);\n\n const includeSensitive =\n options.includeSensitiveData ??\n process.env.OPENAI_AGENTS_TRACE_INCLUDE_SENSITIVE_DATA !== '0';\n const openRuns: TraceRunState[] = [];\n const callIdToRun = new Map<string, TraceRunState>();\n const responseIdToRun = new Map<string, TraceRunState>();\n const toolCallIdToRun = new Map<string, TraceRunState>();\n\n void processor.start?.();\n\n const integration: Telemetry = {\n onStart: async (event) => {\n if (!isGenerateTextStartEvent(event)) {\n return;\n }\n\n const trace: OpenAITrace = {\n object: 'trace',\n id: traceId(),\n workflow_name:\n options.workflowName ?? event.functionId ?? 'ai-sdk-workflow',\n group_id: options.groupId ?? null,\n metadata: normalizeMetadata({\n ...options.metadata,\n }),\n };\n\n const rootSpan: OpenAISpan = {\n object: 'trace.span',\n id: spanId(),\n trace_id: trace.id,\n parent_id: null,\n started_at: now(),\n span_data: {\n type: 'agent',\n name: trace.workflow_name,\n tools: event.tools ? Object.keys(event.tools) : undefined,\n output_type: getOutputType(event.output),\n } satisfies AgentSpanData,\n };\n\n const state: TraceRunState = {\n callId: event.callId,\n trace,\n rootSpan,\n responseIds: new Set(),\n stepSpans: [],\n spansById: new Map([[rootSpan.id, rootSpan]]),\n toolCallSpans: new Map(),\n };\n\n openRuns.push(state);\n callIdToRun.set(event.callId, state);\n\n await processor.onTraceStart?.(trace);\n await processor.onSpanStart?.(rootSpan);\n },\n\n onStepStart: async (event) => {\n const state = resolveRunState(event);\n if (state == null) {\n return;\n }\n\n const span: OpenAISpan = {\n object: 'trace.span',\n id: spanId(),\n trace_id: state.trace.id,\n parent_id: currentParentId(state),\n started_at: now(),\n span_data: {\n type: 'generation',\n model: event.modelId,\n model_config: normalizeMetadata({\n provider: event.provider,\n tool_choice: event.toolChoice,\n active_tools: event.activeTools,\n provider_options: event.providerOptions,\n }),\n ...(includeSensitive && event.recordInputs !== false\n ? { input: normalizeRecordArray(event.messages) }\n : {}),\n } satisfies GenerationSpanData,\n };\n\n state.stepSpans.push(span.id);\n state.spansById.set(span.id, span);\n\n await processor.onSpanStart?.(span);\n },\n\n onToolExecutionStart: async (event) => {\n const state = resolveRunState(event);\n if (state == null) {\n return;\n }\n\n const span: OpenAISpan = {\n object: 'trace.span',\n id: spanId(),\n trace_id: state.trace.id,\n parent_id: currentParentId(state),\n started_at: now(),\n span_data: {\n type: 'function',\n name: event.toolCall.toolName,\n ...(includeSensitive && event.recordInputs !== false\n ? {\n input: normalizeForJson(event.toolCall.input),\n }\n : {}),\n } satisfies FunctionSpanData,\n };\n\n state.toolCallSpans.set(event.toolCall.toolCallId, span.id);\n toolCallIdToRun.set(event.toolCall.toolCallId, state);\n state.spansById.set(span.id, span);\n\n await processor.onSpanStart?.(span);\n },\n\n onToolExecutionEnd: async (event) => {\n const state =\n toolCallIdToRun.get(event.toolCall.toolCallId) ??\n resolveRunState(event);\n if (state == null) {\n return;\n }\n\n const id = state.toolCallSpans.get(event.toolCall.toolCallId);\n if (id == null) {\n return;\n }\n\n state.toolCallSpans.delete(event.toolCall.toolCallId);\n toolCallIdToRun.delete(event.toolCall.toolCallId);\n\n const span = state.spansById.get(id);\n if (span == null) {\n return;\n }\n\n span.ended_at = now();\n\n const data = span.span_data;\n if (event.toolOutput.type === 'tool-result') {\n if (\n data.type === 'function' &&\n includeSensitive &&\n event.recordOutputs !== false\n ) {\n data.output = normalizeForJson(event.toolOutput.output);\n }\n } else {\n span.error = errorToSpanError(event.toolOutput.error);\n }\n\n await processor.onSpanEnd?.(span);\n },\n\n onStepEnd: async (event) => {\n const state = resolveRunState(event);\n if (state == null) {\n return;\n }\n\n const id = state.stepSpans.pop();\n if (id == null) {\n return;\n }\n\n const span = state.spansById.get(id);\n if (span == null) {\n return;\n }\n\n span.ended_at = now();\n\n const data = span.span_data;\n if (data.type === 'generation') {\n if (includeSensitive && event.recordOutputs !== false) {\n data.output = normalizeRecordArray(event.response.messages);\n }\n data.usage = normalizeUsage(event.usage);\n }\n if (event.response.id != null) {\n state.responseIds.add(event.response.id);\n responseIdToRun.set(event.response.id, state);\n }\n\n await processor.onSpanEnd?.(span);\n },\n\n onEnd: async (event) => {\n if (!isGenerateTextEndEvent(event)) {\n return;\n }\n\n const state = resolveRunState(event);\n if (state == null) {\n return;\n }\n\n try {\n while (state.stepSpans.length > 0) {\n const openStepId = state.stepSpans.pop();\n if (openStepId == null) {\n continue;\n }\n\n const openStep = state.spansById.get(openStepId);\n if (openStep == null || openStep.ended_at != null) {\n continue;\n }\n\n openStep.ended_at = now();\n await processor.onSpanEnd?.(openStep);\n }\n\n state.rootSpan.ended_at = now();\n state.trace.metadata = normalizeMetadata({\n ...state.trace.metadata,\n total_usage: normalizeUsage(event.usage),\n steps: event.steps.length,\n finish_reason: event.finishReason,\n });\n\n await processor.onSpanEnd?.(state.rootSpan);\n await processor.onTraceEnd?.(state.trace);\n await processor.forceFlush?.();\n } finally {\n closeRunState(state);\n }\n },\n };\n\n return integration;\n\n function resolveRunState(event: ResolvableEvent): TraceRunState | undefined {\n if (event.callId != null) {\n const state = callIdToRun.get(event.callId);\n if (state != null) {\n return state;\n }\n }\n\n if (event.response?.id != null) {\n const state = responseIdToRun.get(event.response.id);\n if (state != null) {\n return state;\n }\n }\n\n if (event.toolCall?.toolCallId != null) {\n const state = toolCallIdToRun.get(event.toolCall.toolCallId);\n if (state != null) {\n return state;\n }\n }\n\n if (openRuns.length === 0) {\n return undefined;\n }\n if (openRuns.length === 1) {\n return openRuns[0];\n }\n\n return undefined;\n }\n\n function closeRunState(state: TraceRunState): void {\n callIdToRun.delete(state.callId);\n const index = openRuns.indexOf(state);\n if (index >= 0) {\n openRuns.splice(index, 1);\n }\n\n for (const responseId of state.responseIds) {\n responseIdToRun.delete(responseId);\n }\n\n for (const toolCallId of state.toolCallSpans.keys()) {\n toolCallIdToRun.delete(toolCallId);\n }\n }\n}\n\nfunction isGenerateTextStartEvent(\n event: unknown,\n): event is GenerateTextStartEvent {\n if (event == null || typeof event !== 'object' || !('operationId' in event)) {\n return false;\n }\n const { operationId } = event;\n return operationId === 'ai.generateText' || operationId === 'ai.streamText';\n}\n\nfunction isGenerateTextEndEvent(event: unknown): event is GenerateTextEndEvent {\n return (\n event != null &&\n typeof event === 'object' &&\n 'finalStep' in event &&\n 'steps' in event &&\n 'usage' in event\n );\n}\n\nfunction currentParentId(state: TraceRunState): string {\n return state.stepSpans[state.stepSpans.length - 1] ?? state.rootSpan.id;\n}\n\nfunction normalizeMetadata(\n metadata: Record<string, unknown> | undefined,\n): Record<string, unknown> | undefined {\n if (metadata == null) {\n return undefined;\n }\n\n const normalized = normalizeObjectForJson(metadata);\n return Object.keys(normalized).length > 0 ? normalized : undefined;\n}\n\nfunction getOutputType(output: unknown): string | undefined {\n if (output == null) {\n return undefined;\n }\n\n if (\n typeof output === 'object' &&\n 'type' in output &&\n typeof output.type === 'string'\n ) {\n return output.type;\n }\n\n if (typeof output === 'object' && output.constructor?.name != null) {\n return output.constructor.name;\n }\n\n return typeof output;\n}\n\nfunction now(): string {\n return new Date().toISOString();\n}\n"],
5
+ "mappings": "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",
6
6
  "names": []
7
7
  }
@@ -1 +1 @@
1
- {"version":3,"file":"openai-traces-integration.d.ts","sourceRoot":"","sources":["../../../src/lib/tracing/openai-traces-integration.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAGV,SAAS,EACV,MAAM,IAAI,CAAC;AAEZ,OAAO,EAEL,KAAK,0BAA0B,EAChC,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EAAE,oBAAoB,EAAE,MAAM,eAAe,CAAC;AAErD,OAAO,EAAE,KAAK,gBAAgB,EAA0B,MAAM,gBAAgB,CAAC;AA+B/E,MAAM,WAAW,8BAA8B;IAC7C,MAAM,CAAC,EAAE,MAAM,GAAG,CAAC,MAAM,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC;IACnD,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACnC,QAAQ,CAAC,EAAE,oBAAoB,CAAC;IAChC,SAAS,CAAC,EAAE,gBAAgB,GAAG,gBAAgB,EAAE,CAAC;IAClD,KAAK,CAAC,EAAE,0BAA0B,CAAC;IACnC,oBAAoB,CAAC,EAAE,OAAO,CAAC;CAChC;AAED,wBAAgB,6BAA6B,CAC3C,OAAO,GAAE,8BAAmC,GAC3C,SAAS,CA0SX"}
1
+ {"version":3,"file":"openai-traces-integration.d.ts","sourceRoot":"","sources":["../../../src/lib/tracing/openai-traces-integration.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAGV,SAAS,EACV,MAAM,IAAI,CAAC;AAEZ,OAAO,EAEL,KAAK,0BAA0B,EAChC,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EAAE,oBAAoB,EAAE,MAAM,eAAe,CAAC;AAErD,OAAO,EAAE,KAAK,gBAAgB,EAA0B,MAAM,gBAAgB,CAAC;AAgC/E,MAAM,WAAW,8BAA8B;IAC7C,MAAM,CAAC,EAAE,MAAM,GAAG,CAAC,MAAM,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC;IACnD,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACnC,QAAQ,CAAC,EAAE,oBAAoB,CAAC;IAChC,SAAS,CAAC,EAAE,gBAAgB,GAAG,gBAAgB,EAAE,CAAC;IAClD,KAAK,CAAC,EAAE,0BAA0B,CAAC;IACnC,oBAAoB,CAAC,EAAE,OAAO,CAAC;CAChC;AAED,wBAAgB,6BAA6B,CAC3C,OAAO,GAAE,8BAAmC,GAC3C,SAAS,CAgTX"}
@@ -1,6 +1,8 @@
1
1
  import type { LanguageModelUsage } from 'ai';
2
2
  import type { GenerationUsageData, OpenAISpanError } from './types.ts';
3
3
  export declare function normalizeForJson(value: unknown): unknown;
4
+ /** Normalizes each own enumerable property, dropping undefined results. */
5
+ export declare function normalizeObjectForJson(value: object): Record<string, unknown>;
4
6
  export declare function normalizeRecordArray(value: unknown): Record<string, unknown>[] | undefined;
5
7
  export declare function normalizeUsage(usage: LanguageModelUsage | undefined): GenerationUsageData | undefined;
6
8
  export declare function errorToSpanError(error: unknown): OpenAISpanError;