@deepagents/context 7.1.1 → 7.1.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/browser.js +7 -4
- package/dist/browser.js.map +2 -2
- package/dist/index.d.ts +1 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +695 -808
- package/dist/index.js.map +4 -4
- package/dist/lib/chain-summary.d.ts +2 -6
- package/dist/lib/chain-summary.d.ts.map +1 -1
- package/dist/lib/engine.d.ts +1 -1
- package/dist/lib/engine.d.ts.map +1 -1
- package/dist/lib/estimate.d.ts.map +1 -1
- package/dist/lib/fragments.d.ts +8 -6
- package/dist/lib/fragments.d.ts.map +1 -1
- package/dist/lib/resolvers/index.d.ts +0 -1
- package/dist/lib/resolvers/index.d.ts.map +1 -1
- package/dist/lib/save/save-pipeline.d.ts +2 -2
- package/dist/lib/save/save-pipeline.d.ts.map +1 -1
- package/dist/lib/store/ddl.sqlserver.d.ts.map +1 -1
- package/dist/lib/store/postgres-schema-lock.d.ts +12 -0
- package/dist/lib/store/postgres-schema-lock.d.ts.map +1 -0
- package/dist/lib/store/postgres.store.d.ts +3 -2
- package/dist/lib/store/postgres.store.d.ts.map +1 -1
- package/dist/lib/store/sqlite.store.d.ts +9 -0
- package/dist/lib/store/sqlite.store.d.ts.map +1 -1
- package/dist/lib/store/sqlserver-schema-lock.d.ts +14 -0
- package/dist/lib/store/sqlserver-schema-lock.d.ts.map +1 -0
- package/dist/lib/store/sqlserver.store.d.ts +3 -2
- package/dist/lib/store/sqlserver.store.d.ts.map +1 -1
- package/dist/lib/stream/postgres-notify-change-source.d.ts +3 -2
- package/dist/lib/stream/postgres-notify-change-source.d.ts.map +1 -1
- package/dist/lib/stream/postgres.stream-store.d.ts +3 -2
- package/dist/lib/stream/postgres.stream-store.d.ts.map +1 -1
- package/dist/lib/stream/sqlite.stream-store.d.ts.map +1 -1
- package/dist/lib/tracing/batch-processor.d.ts.map +1 -1
- package/dist/lib/tracing/index.js +49 -29
- package/dist/lib/tracing/index.js.map +2 -2
- package/package.json +17 -9
- package/dist/lib/resolvers/promise-resolver.d.ts +0 -7
- package/dist/lib/resolvers/promise-resolver.d.ts.map +0 -1
- package/dist/scripts/scripts/generate-models-type.d.ts +0 -2
- package/dist/scripts/scripts/generate-models-type.d.ts.map +0 -1
- package/dist/scripts/scripts/probe-tool-output-reminders.d.ts +0 -2
- package/dist/scripts/scripts/probe-tool-output-reminders.d.ts.map +0 -1
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
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/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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",
|
|
4
|
+
"sourcesContent": ["import pMemoize from 'p-memoize';\n\nimport 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\n/** A phase of the processor: each phase decides what start, stop and an ended item do. */\ninterface BatchPhase {\n start(delayMs: number, tick: () => void): BatchPhase;\n stop(): BatchPhase;\n /** Adds an ended item to the queue, unless this phase takes no more items. */\n admit(queue: TraceItem[], item: TraceItem): void;\n}\n\n/** After shutdown(): items that end later are dropped, as OpenTelemetry's batch processor does. */\nclass ShutDown implements BatchPhase {\n start(): BatchPhase {\n return this;\n }\n\n stop(): BatchPhase {\n return this;\n }\n\n admit(): void {}\n}\n\nconst SHUT_DOWN = new ShutDown();\n\n/** After start(): a timer flushes the queue on the schedule. */\nclass Running implements BatchPhase {\n readonly #timer: NodeJS.Timeout;\n\n constructor(delayMs: number, tick: () => void) {\n this.#timer = setInterval(tick, delayMs);\n this.#timer.unref?.();\n }\n\n start(): BatchPhase {\n return this;\n }\n\n stop(): BatchPhase {\n clearInterval(this.#timer);\n return SHUT_DOWN;\n }\n\n admit(queue: TraceItem[], item: TraceItem): void {\n queue.push(item);\n }\n}\n\n/** Before start(): items queue, and only a full queue or forceFlush() exports them. */\nclass Idle implements BatchPhase {\n start(delayMs: number, tick: () => void): BatchPhase {\n return new Running(delayMs, tick);\n }\n\n stop(): BatchPhase {\n return SHUT_DOWN;\n }\n\n admit(queue: TraceItem[], item: TraceItem): void {\n queue.push(item);\n }\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 readonly #queue: TraceItem[] = [];\n #phase: BatchPhase = new Idle();\n /** Joins a flush in flight; a call after it settles starts the next one. */\n readonly #flushOnce = pMemoize(() => this.#flush(), { cache: 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 this.#phase = this.#phase.start(this.#scheduleDelayMs, () => {\n void this.forceFlush();\n });\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 forceFlush(): Promise<void> {\n return this.#flushOnce();\n }\n\n async shutdown(): Promise<void> {\n this.#phase = this.#phase.stop();\n await this.forceFlush();\n }\n\n #enqueue(item: TraceItem): void {\n if (this.#queue.length >= this.#maxQueueSize) {\n return;\n }\n\n this.#phase.admit(this.#queue, 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
|
}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@deepagents/context",
|
|
3
|
-
"version": "7.1.
|
|
3
|
+
"version": "7.1.3",
|
|
4
4
|
"license": "MIT",
|
|
5
5
|
"repository": {
|
|
6
6
|
"type": "git",
|
|
@@ -18,31 +18,37 @@
|
|
|
18
18
|
"exports": {
|
|
19
19
|
"./package.json": "./package.json",
|
|
20
20
|
".": {
|
|
21
|
+
"@deepagents/source": "./src/index.ts",
|
|
21
22
|
"types": "./dist/index.d.ts",
|
|
22
23
|
"import": "./dist/index.js",
|
|
23
24
|
"default": "./dist/index.js"
|
|
24
25
|
},
|
|
25
26
|
"./browser": {
|
|
27
|
+
"@deepagents/source": "./src/browser.ts",
|
|
26
28
|
"types": "./dist/browser.d.ts",
|
|
27
29
|
"import": "./dist/browser.js",
|
|
28
30
|
"default": "./dist/browser.js"
|
|
29
31
|
},
|
|
30
32
|
"./tracing": {
|
|
33
|
+
"@deepagents/source": "./src/lib/tracing/index.ts",
|
|
31
34
|
"types": "./dist/lib/tracing/index.d.ts",
|
|
32
35
|
"import": "./dist/lib/tracing/index.js",
|
|
33
36
|
"default": "./dist/lib/tracing/index.js"
|
|
34
37
|
},
|
|
35
38
|
"./telemetry": {
|
|
39
|
+
"@deepagents/source": "./src/lib/telemetry/index.ts",
|
|
36
40
|
"types": "./dist/lib/telemetry/index.d.ts",
|
|
37
41
|
"import": "./dist/lib/telemetry/index.js",
|
|
38
42
|
"default": "./dist/lib/telemetry/index.js"
|
|
39
43
|
},
|
|
40
44
|
"./telemetry/file": {
|
|
45
|
+
"@deepagents/source": "./src/lib/telemetry/file/index.ts",
|
|
41
46
|
"types": "./dist/lib/telemetry/file/index.d.ts",
|
|
42
47
|
"import": "./dist/lib/telemetry/file/index.js",
|
|
43
48
|
"default": "./dist/lib/telemetry/file/index.js"
|
|
44
49
|
},
|
|
45
50
|
"./sandbox/strace": {
|
|
51
|
+
"@deepagents/source": "./src/lib/sandbox/strace/index.ts",
|
|
46
52
|
"types": "./dist/lib/sandbox/strace/index.d.ts",
|
|
47
53
|
"import": "./dist/lib/sandbox/strace/index.js",
|
|
48
54
|
"default": "./dist/lib/sandbox/strace/index.js"
|
|
@@ -58,11 +64,12 @@
|
|
|
58
64
|
"access": "public"
|
|
59
65
|
},
|
|
60
66
|
"dependencies": {
|
|
61
|
-
"@ai-sdk/groq": "^4.0.
|
|
62
|
-
"@ai-sdk/provider": "^4.0.
|
|
63
|
-
"@ai-sdk/provider-utils": "^5.0.
|
|
64
|
-
"@deepagents/agent": "7.1.
|
|
65
|
-
"
|
|
67
|
+
"@ai-sdk/groq": "^4.0.66",
|
|
68
|
+
"@ai-sdk/provider": "^4.0.31",
|
|
69
|
+
"@ai-sdk/provider-utils": "^5.0.64",
|
|
70
|
+
"@deepagents/agent": "7.1.3",
|
|
71
|
+
"@zukhruf/sqlite-transaction": "^0.3.33",
|
|
72
|
+
"ai": "^7.0.147",
|
|
66
73
|
"chalk": "^5.6.2",
|
|
67
74
|
"dedent": "^1.7.2",
|
|
68
75
|
"fast-glob": "^3.3.3",
|
|
@@ -74,19 +81,20 @@
|
|
|
74
81
|
"tiny-tfidf": "^1.0.0",
|
|
75
82
|
"yaml": "^2.9.0",
|
|
76
83
|
"zod": "^4.4.3",
|
|
77
|
-
"@ai-sdk/openai": "^4.0.
|
|
84
|
+
"@ai-sdk/openai": "^4.0.98",
|
|
85
|
+
"p-memoize": "^8.0.0"
|
|
78
86
|
},
|
|
79
87
|
"devDependencies": {
|
|
80
88
|
"@daytona/sdk": "^0.198.0",
|
|
81
89
|
"@types/debug": "^4.1.13",
|
|
82
90
|
"@types/mssql": "^12.3.0",
|
|
83
91
|
"@types/pg": "^8.20.0",
|
|
84
|
-
"microsandbox": "^0.
|
|
92
|
+
"microsandbox": "^0.7.8",
|
|
85
93
|
"msw": "^3.0.2"
|
|
86
94
|
},
|
|
87
95
|
"peerDependencies": {
|
|
88
96
|
"@daytona/sdk": "^0.198.0",
|
|
89
|
-
"microsandbox": "^0.
|
|
97
|
+
"microsandbox": "^0.7.8",
|
|
90
98
|
"mssql": "^12.7.0",
|
|
91
99
|
"pg": "^8.22.0"
|
|
92
100
|
},
|
|
@@ -1,7 +0,0 @@
|
|
|
1
|
-
import type { LoadContext, ValueResolver } from './types.ts';
|
|
2
|
-
export declare class PromiseResolver implements ValueResolver {
|
|
3
|
-
readonly name = "PromiseResolver";
|
|
4
|
-
canResolve(value: unknown): value is Promise<unknown>;
|
|
5
|
-
resolve(value: unknown, _ctx: LoadContext): Promise<unknown>;
|
|
6
|
-
}
|
|
7
|
-
//# sourceMappingURL=promise-resolver.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"promise-resolver.d.ts","sourceRoot":"","sources":["../../../src/lib/resolvers/promise-resolver.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAE7D,qBAAa,eAAgB,YAAW,aAAa;IACnD,QAAQ,CAAC,IAAI,qBAAqB;IAElC,UAAU,CAAC,KAAK,EAAE,OAAO,GAAG,KAAK,IAAI,OAAO,CAAC,OAAO,CAAC;IAI/C,OAAO,CAAC,KAAK,EAAE,OAAO,EAAE,IAAI,EAAE,WAAW,GAAG,OAAO,CAAC,OAAO,CAAC;CAMnE"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"generate-models-type.d.ts","sourceRoot":"","sources":["../../../scripts/generate-models-type.ts"],"names":[],"mappings":""}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"probe-tool-output-reminders.d.ts","sourceRoot":"","sources":["../../../scripts/probe-tool-output-reminders.ts"],"names":[],"mappings":""}
|