promptlayer 1.2.2 → 1.3.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/claude-agents.js +1 -1
- package/dist/claude-agents.js.map +1 -1
- package/dist/esm/{chunk-7Y65WGSZ.js → chunk-KDVM55TG.js} +2 -2
- package/dist/esm/{chunk-7Y65WGSZ.js.map → chunk-KDVM55TG.js.map} +1 -1
- package/dist/esm/claude-agents.js +1 -1
- package/dist/esm/index.js +2 -2
- package/dist/esm/index.js.map +1 -1
- package/dist/esm/openai-agents.js +1 -1
- package/dist/esm/openai-agents.js.map +1 -1
- package/dist/index.d.mts +98 -1
- package/dist/index.d.ts +98 -1
- package/dist/index.js +2 -2
- package/dist/index.js.map +1 -1
- package/dist/openai-agents.js +1 -1
- package/dist/openai-agents.js.map +1 -1
- package/package.json +1 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/integrations/openai-agents/mapping.ts","../../src/integrations/openai-agents/otlp-json.ts","../../src/integrations/openai-agents/ids.ts","../../src/integrations/openai-agents/time.ts","../../src/integrations/openai-agents/url.ts","../../src/integrations/openai-agents/processor.ts","../../src/integrations/openai-agents/instrumentation.ts"],"sourcesContent":["import { SDK_VERSION } from \"@/utils/utils\";\nimport type {\n Span as AgentsSpan,\n SpanData,\n Trace as AgentsTrace,\n} from \"@openai/agents\";\nimport type { AttributeValue } from \"@/integrations/openai-agents/types\";\n\nconst SPAN_KIND_INTERNAL = 1;\nconst SPAN_KIND_CLIENT = 3;\n\ntype AttributeMap = Record<string, AttributeValue>;\ntype NormalizedMessage = Record<string, AttributeValue>;\ntype NormalizedToolCall = {\n id: string;\n type: \"tool_call\";\n name: string;\n arguments: AttributeValue;\n};\n\nconst isPlainObject = (value: unknown): value is Record<string, unknown> => {\n return typeof value === \"object\" && value !== null && !Array.isArray(value);\n};\n\nconst isScalar = (value: unknown): value is string | number | boolean => {\n return (\n typeof value === \"string\" ||\n typeof value === \"number\" ||\n typeof value === \"boolean\"\n );\n};\n\nconst sanitizeKey = (key: string): string => {\n return key.replace(/[^a-zA-Z0-9_.-]/g, \"_\");\n};\n\nconst toJsonable = (value: unknown): AttributeValue => {\n if (\n value === null ||\n typeof value === \"string\" ||\n typeof value === \"number\" ||\n typeof value === \"boolean\"\n ) {\n return value;\n }\n\n if (Array.isArray(value)) {\n return value.map((item) => toJsonable(item));\n }\n\n if (isPlainObject(value)) {\n return Object.fromEntries(\n Object.entries(value).map(([key, item]) => [key, toJsonable(item)])\n );\n }\n\n return String(value);\n};\n\nconst stableStringify = (value: unknown): string => {\n const normalize = (input: unknown): unknown => {\n if (Array.isArray(input)) {\n return input.map((item) => normalize(item));\n }\n\n if (isPlainObject(input)) {\n return Object.keys(input)\n .sort()\n .reduce<Record<string, unknown>>((acc, key) => {\n acc[key] = normalize(input[key]);\n return acc;\n }, {});\n }\n\n return input;\n };\n\n return JSON.stringify(normalize(toJsonable(value)));\n};\n\nconst setStringAttr = (attrs: AttributeMap, key: string, value: unknown) => {\n if (value !== undefined && value !== null && value !== \"\") {\n attrs[key] = String(value);\n }\n};\n\nconst setNumberAttr = (attrs: AttributeMap, key: string, value: unknown) => {\n if (value !== undefined && value !== null && value !== \"\") {\n const numericValue = Number(value);\n if (!Number.isNaN(numericValue)) {\n attrs[key] = numericValue;\n }\n }\n};\n\nconst setJsonAttr = (\n attrs: AttributeMap,\n key: string,\n value: unknown,\n includeRawPayloads: boolean\n) => {\n if (includeRawPayloads && value !== undefined && value !== null) {\n attrs[key] = stableStringify(value);\n }\n};\n\nconst flattenIndexedMessages = (\n prefix: string,\n messages: NormalizedMessage[],\n attrs: AttributeMap\n) => {\n messages.forEach((message, index) => {\n Object.entries(message).forEach(([key, value]) => {\n attrs[`${prefix}.${index}.${key}`] = isScalar(value)\n ? value\n : stableStringify(value);\n });\n });\n};\n\nconst normalizeToolCalls = (toolCalls: unknown): NormalizedToolCall[] => {\n if (!Array.isArray(toolCalls)) {\n return [];\n }\n\n return toolCalls\n .map((call) => {\n if (!isPlainObject(call)) {\n return null;\n }\n\n const functionData = isPlainObject(call.function) ? call.function : null;\n const name = functionData?.name ?? call.name ?? \"tool\";\n let argumentsValue =\n functionData?.arguments ?? call.arguments ?? {};\n\n if (typeof argumentsValue === \"string\") {\n try {\n argumentsValue = JSON.parse(argumentsValue);\n } catch {\n argumentsValue = argumentsValue;\n }\n }\n\n return {\n id: String(call.id ?? \"\"),\n type: \"tool_call\",\n name: String(name),\n arguments: toJsonable(argumentsValue),\n };\n })\n .filter((call): call is NormalizedToolCall => call !== null);\n};\n\nconst getCallId = (item: Record<string, unknown>): string | undefined => {\n const value = item.call_id ?? item.callId ?? item.id;\n return value !== undefined && value !== null ? String(value) : undefined;\n};\n\nconst normalizeToolOutputContent = (output: unknown): string | undefined => {\n if (output === undefined || output === null) {\n return undefined;\n }\n\n if (typeof output === \"string\") {\n return output;\n }\n\n if (Array.isArray(output)) {\n const textContent = extractTextContent(output);\n return textContent ?? stableStringify(output);\n }\n\n if (isPlainObject(output)) {\n const textContent = extractTextContent([output]);\n return textContent ?? stableStringify(output);\n }\n\n const textContent = extractTextContent(output);\n if (textContent !== undefined) {\n return textContent;\n }\n\n return stableStringify(output);\n};\n\nconst normalizeToolCallMessage = (\n item: Record<string, unknown>\n): NormalizedMessage | null => {\n let argumentsValue = item.arguments ?? {};\n if (typeof argumentsValue === \"string\") {\n try {\n argumentsValue = JSON.parse(argumentsValue);\n } catch {\n argumentsValue = argumentsValue;\n }\n }\n\n return {\n role: \"assistant\",\n tool_calls: [\n {\n id: getCallId(item) ?? \"\",\n type: \"tool_call\",\n name: String(item.name ?? \"tool\"),\n arguments: toJsonable(argumentsValue),\n },\n ],\n };\n};\n\nconst normalizeToolResultMessage = (\n item: Record<string, unknown>,\n outputOverride?: unknown\n): NormalizedMessage | null => {\n const toolCallId = getCallId(item);\n const content = normalizeToolOutputContent(\n outputOverride ?? item.output ?? item.content\n );\n\n if (!toolCallId && !content) {\n return null;\n }\n\n const message: NormalizedMessage = {\n role: \"tool\",\n };\n\n if (toolCallId) {\n message.tool_call_id = toolCallId;\n }\n\n if (content !== undefined) {\n message.content = content;\n }\n\n return message;\n};\n\nfunction extractTextContent(content: unknown): string | undefined {\n if (content === undefined || content === null) {\n return undefined;\n }\n\n if (typeof content === \"string\") {\n return content;\n }\n\n if (Array.isArray(content)) {\n const textParts = content\n .map((part) => {\n if (!isPlainObject(part)) {\n return null;\n }\n\n const partType = part.type;\n if (\n partType === \"text\" ||\n partType === \"input_text\" ||\n partType === \"output_text\"\n ) {\n const text = part.text ?? part.content;\n return text !== undefined && text !== null ? String(text) : null;\n }\n\n return null;\n })\n .filter((part): part is string => part !== null);\n\n return textParts.length > 0 ? textParts.join(\"\\n\") : undefined;\n }\n\n return String(content);\n}\n\nexport const normalizeMessages = (items: unknown): NormalizedMessage[] => {\n if (!Array.isArray(items)) {\n return [];\n }\n\n return items\n .map((item) => {\n if (!isPlainObject(item)) {\n return null;\n }\n\n const normalized: NormalizedMessage = {};\n if (item.role !== undefined) {\n normalized.role = String(item.role);\n }\n\n const content = extractTextContent(item.content);\n if (content) {\n normalized.content = content;\n }\n\n const toolCalls = normalizeToolCalls(item.tool_calls);\n if (toolCalls.length > 0) {\n normalized.tool_calls = toolCalls;\n }\n\n if (item.tool_call_id) {\n normalized.tool_call_id = String(item.tool_call_id);\n }\n\n return Object.keys(normalized).length > 0 ? normalized : null;\n })\n .filter((message): message is NormalizedMessage => message !== null);\n};\n\nconst normalizeResponseMessage = (\n item: Record<string, unknown>\n): NormalizedMessage | null => {\n const message: NormalizedMessage = {};\n const role = item.role;\n const content = extractTextContent(item.content);\n const toolCalls = normalizeToolCalls(item.tool_calls);\n\n if (role !== undefined && role !== null) {\n message.role = String(role);\n } else if (content || toolCalls.length > 0) {\n message.role = \"assistant\";\n }\n\n if (content) {\n message.content = content;\n }\n\n if (toolCalls.length > 0) {\n message.tool_calls = toolCalls;\n }\n\n if (item.tool_call_id) {\n message.tool_call_id = String(item.tool_call_id);\n }\n\n return Object.keys(message).length > 0 ? message : null;\n};\n\nconst RAW_TOOL_CALL_ITEM_TYPES = new Set([\n \"function_call\",\n \"computer_call\",\n \"shell_call\",\n \"apply_patch_call\",\n \"custom_tool_call\",\n \"mcp_call\",\n]);\n\nconst RAW_TOOL_RESULT_ITEM_TYPES = new Set([\n \"function_call_output\",\n \"function_call_result\",\n \"computer_call_output\",\n \"computer_call_result\",\n \"shell_call_output\",\n \"apply_patch_call_output\",\n \"custom_tool_call_output\",\n]);\n\nexport const normalizeResponseItems = (items: unknown): NormalizedMessage[] => {\n if (typeof items === \"string\") {\n return [{ role: \"user\", content: items }];\n }\n\n if (!Array.isArray(items)) {\n return [];\n }\n\n return items\n .flatMap((item) => {\n if (!isPlainObject(item)) {\n return [];\n }\n\n if (item.type === \"message_output_item\" && isPlainObject(item.rawItem)) {\n const message = normalizeResponseMessage(item.rawItem);\n return message ? [message] : [];\n }\n\n if (item.type === \"tool_call_item\" && isPlainObject(item.rawItem)) {\n const message = normalizeToolCallMessage(item.rawItem);\n return message ? [message] : [];\n }\n\n if (item.type === \"tool_call_output_item\" && isPlainObject(item.rawItem)) {\n const message = normalizeToolResultMessage(item.rawItem, item.output);\n return message ? [message] : [];\n }\n\n if (typeof item.type === \"string\" && RAW_TOOL_CALL_ITEM_TYPES.has(item.type)) {\n const message = normalizeToolCallMessage(item);\n return message ? [message] : [];\n }\n\n if (\n typeof item.type === \"string\" &&\n RAW_TOOL_RESULT_ITEM_TYPES.has(item.type)\n ) {\n const message = normalizeToolResultMessage(item);\n return message ? [message] : [];\n }\n\n const message = normalizeResponseMessage(item);\n return message ? [message] : [];\n })\n .filter((message): message is NormalizedMessage => message !== null);\n};\n\nconst applyUsageAttributes = (attrs: AttributeMap, usage: unknown) => {\n if (!isPlainObject(usage)) {\n return;\n }\n\n setNumberAttr(\n attrs,\n \"gen_ai.usage.input_tokens\",\n usage.input_tokens ?? usage.prompt_tokens\n );\n setNumberAttr(\n attrs,\n \"gen_ai.usage.output_tokens\",\n usage.output_tokens ?? usage.completion_tokens\n );\n};\n\nconst generationAttributes = (\n spanData: Extract<SpanData, { type: \"generation\" }>,\n includeRawPayloads: boolean\n): AttributeMap => {\n const attrs: AttributeMap = {\n \"gen_ai.provider.name\": \"openai.responses\",\n };\n\n setStringAttr(attrs, \"gen_ai.request.model\", spanData.model);\n applyUsageAttributes(attrs, spanData.usage);\n flattenIndexedMessages(\"gen_ai.prompt\", normalizeMessages(spanData.input), attrs);\n flattenIndexedMessages(\n \"gen_ai.completion\",\n normalizeMessages(spanData.output),\n attrs\n );\n setJsonAttr(\n attrs,\n \"openai_agents.model_config_json\",\n spanData.model_config,\n includeRawPayloads\n );\n setJsonAttr(\n attrs,\n \"openai_agents.generation.raw_input_json\",\n spanData.input,\n includeRawPayloads\n );\n setJsonAttr(\n attrs,\n \"openai_agents.generation.raw_output_json\",\n spanData.output,\n includeRawPayloads\n );\n\n return attrs;\n};\n\nconst responseAttributes = (\n spanData: Extract<SpanData, { type: \"response\" }>,\n includeRawPayloads: boolean\n): AttributeMap => {\n const attrs: AttributeMap = {\n \"gen_ai.provider.name\": \"openai.responses\",\n };\n const responseObject = isPlainObject(spanData._response) ? spanData._response : {};\n const usage =\n isPlainObject(responseObject.usage) ? responseObject.usage : undefined;\n\n setStringAttr(\n attrs,\n \"gen_ai.request.model\",\n responseObject.model\n );\n setStringAttr(\n attrs,\n \"gen_ai.response.model\",\n responseObject.model\n );\n setStringAttr(\n attrs,\n \"gen_ai.response.id\",\n spanData.response_id ?? responseObject.id ?? responseObject.response_id\n );\n applyUsageAttributes(attrs, usage);\n flattenIndexedMessages(\n \"gen_ai.prompt\",\n normalizeResponseItems(spanData._input ?? responseObject.input),\n attrs\n );\n flattenIndexedMessages(\n \"gen_ai.completion\",\n normalizeResponseItems(responseObject.output),\n attrs\n );\n setJsonAttr(\n attrs,\n \"openai_agents.response.raw_json\",\n responseObject,\n includeRawPayloads\n );\n setStringAttr(\n attrs,\n \"openai_agents.response.object\",\n responseObject.object\n );\n\n return attrs;\n};\n\nconst functionAttributes = (\n spanData: Extract<SpanData, { type: \"function\" }>,\n includeRawPayloads: boolean\n): AttributeMap => {\n const attrs: AttributeMap = {\n node_type: \"CODE_EXECUTION\",\n tool_name: spanData.name,\n \"openai_agents.function.name\": spanData.name,\n };\n\n setStringAttr(attrs, \"function_input\", spanData.input);\n setStringAttr(attrs, \"function_output\", spanData.output);\n setStringAttr(attrs, \"openai_agents.function.input\", spanData.input);\n setStringAttr(attrs, \"openai_agents.function.output\", spanData.output);\n setJsonAttr(\n attrs,\n \"openai_agents.function.mcp_data_json\",\n spanData.mcp_data,\n includeRawPayloads\n );\n\n return attrs;\n};\n\nconst agentAttributes = (\n spanData: Extract<SpanData, { type: \"agent\" }>,\n includeRawPayloads: boolean\n): AttributeMap => {\n const attrs: AttributeMap = {\n \"openai_agents.agent.name\": spanData.name,\n };\n\n setStringAttr(attrs, \"openai_agents.agent.output_type\", spanData.output_type);\n setJsonAttr(\n attrs,\n \"openai_agents.agent.handoffs_json\",\n spanData.handoffs,\n includeRawPayloads\n );\n setJsonAttr(\n attrs,\n \"openai_agents.agent.tools_json\",\n spanData.tools,\n includeRawPayloads\n );\n\n return attrs;\n};\n\nconst handoffAttributes = (\n spanData: Extract<SpanData, { type: \"handoff\" }>\n): AttributeMap => {\n const attrs: AttributeMap = {};\n setStringAttr(attrs, \"openai_agents.handoff.from_agent\", spanData.from_agent);\n setStringAttr(attrs, \"openai_agents.handoff.to_agent\", spanData.to_agent);\n return attrs;\n};\n\nconst guardrailAttributes = (\n spanData: Extract<SpanData, { type: \"guardrail\" }>\n): AttributeMap => {\n return {\n \"openai_agents.guardrail.name\": spanData.name,\n \"openai_agents.guardrail.triggered\": spanData.triggered,\n };\n};\n\nconst customAttributes = (\n spanData: Extract<SpanData, { type: \"custom\" }>,\n includeRawPayloads: boolean\n): AttributeMap => {\n const attrs: AttributeMap = {\n \"openai_agents.custom.name\": spanData.name,\n };\n setJsonAttr(\n attrs,\n \"openai_agents.custom.data_json\",\n spanData.data,\n includeRawPayloads\n );\n return attrs;\n};\n\nconst rawSpanDataAttributes = (\n spanData: SpanData,\n includeRawPayloads: boolean\n): AttributeMap => {\n if (!includeRawPayloads) {\n return {};\n }\n\n return {\n \"openai_agents.raw_json\": stableStringify(spanData),\n };\n};\n\nexport const telemetrySourceVersion = (): string => {\n return SDK_VERSION;\n};\n\nexport const spanKindFor = (span: Pick<AgentsSpan<any>, \"spanData\">): number => {\n return span.spanData.type === \"generation\" || span.spanData.type === \"response\"\n ? SPAN_KIND_CLIENT\n : SPAN_KIND_INTERNAL;\n};\n\nexport const spanNameFor = (span: Pick<AgentsSpan<any>, \"spanData\">): string => {\n switch (span.spanData.type) {\n case \"function\":\n return `Function: ${span.spanData.name}`;\n case \"agent\":\n return `Agent: ${span.spanData.name}`;\n case \"guardrail\":\n return `Guardrail: ${span.spanData.name}`;\n case \"custom\":\n return String(span.spanData.name);\n default:\n return span.spanData.type\n .split(\"_\")\n .map((part: string) => part.charAt(0).toUpperCase() + part.slice(1))\n .join(\" \");\n }\n};\n\nexport const baseTraceAttributes = (\n trace: Pick<AgentsTrace, \"traceId\" | \"name\" | \"groupId\" | \"metadata\">,\n includeRawPayloads: boolean\n): AttributeMap => {\n const attrs: AttributeMap = {\n \"promptlayer.telemetry.source\": \"openai-agents-js\",\n \"promptlayer.telemetry.source_version\": telemetrySourceVersion(),\n \"openai_agents.trace_id_original\": trace.traceId,\n \"openai_agents.workflow_name\": trace.name,\n };\n\n if (trace.groupId) {\n attrs[\"openai_agents.group_id\"] = trace.groupId;\n }\n\n if (isPlainObject(trace.metadata)) {\n Object.entries(trace.metadata).forEach(([key, value]) => {\n if (isScalar(value)) {\n attrs[`openai_agents.metadata.${sanitizeKey(key)}`] = value;\n }\n });\n setJsonAttr(\n attrs,\n \"openai_agents.metadata_json\",\n trace.metadata,\n includeRawPayloads\n );\n }\n\n return attrs;\n};\n\nexport const baseSpanAttributes = (\n span: Pick<AgentsSpan<any>, \"spanId\" | \"parentId\" | \"spanData\">\n): AttributeMap => {\n const attrs: AttributeMap = {\n \"promptlayer.telemetry.source\": \"openai-agents-js\",\n \"promptlayer.telemetry.source_version\": telemetrySourceVersion(),\n \"openai_agents.span_id_original\": span.spanId,\n \"openai_agents.span_type\": span.spanData.type,\n };\n\n if (span.parentId) {\n attrs[\"openai_agents.parent_id_original\"] = span.parentId;\n }\n\n return attrs;\n};\n\nexport const spanDataAttributes = (\n spanData: SpanData,\n includeRawPayloads: boolean\n): AttributeMap => {\n switch (spanData.type) {\n case \"generation\":\n return generationAttributes(spanData, includeRawPayloads);\n case \"response\":\n return responseAttributes(spanData, includeRawPayloads);\n case \"function\":\n return functionAttributes(spanData, includeRawPayloads);\n case \"agent\":\n return agentAttributes(spanData, includeRawPayloads);\n case \"handoff\":\n return handoffAttributes(spanData);\n case \"guardrail\":\n return guardrailAttributes(spanData);\n case \"custom\":\n return customAttributes(spanData, includeRawPayloads);\n default:\n return rawSpanDataAttributes(spanData, includeRawPayloads);\n }\n};\n\nexport const OTLP_STATUS_CODE_UNSET = 0;\nexport const OTLP_STATUS_CODE_OK = 1;\nexport const OTLP_STATUS_CODE_ERROR = 2;\n","import { SDK_VERSION } from \"@/utils/utils\";\nimport type {\n AttributeValue,\n OtlpJsonPayload,\n OtlpSpanRecord,\n} from \"@/integrations/openai-agents/types\";\n\nconst toAnyValue = (value: AttributeValue): Record<string, unknown> => {\n if (typeof value === \"string\") {\n return { stringValue: value };\n }\n\n if (typeof value === \"boolean\") {\n return { boolValue: value };\n }\n\n if (typeof value === \"number\") {\n if (Number.isInteger(value)) {\n return { intValue: String(value) };\n }\n return { doubleValue: value };\n }\n\n if (value === null) {\n return { stringValue: \"null\" };\n }\n\n if (Array.isArray(value)) {\n return {\n arrayValue: {\n values: value.map((item) => toAnyValue(item)),\n },\n };\n }\n\n return {\n kvlistValue: {\n values: Object.entries(value).map(([key, nestedValue]) => ({\n key,\n value: toAnyValue(nestedValue),\n })),\n },\n };\n};\n\nconst toKeyValues = (attributes: Record<string, AttributeValue>) => {\n return Object.entries(attributes).map(([key, value]) => ({\n key,\n value: toAnyValue(value),\n }));\n};\n\nexport interface BuildOtlpJsonPayloadOptions {\n serviceName?: string;\n scopeName?: string;\n scopeVersion?: string;\n}\n\nexport const buildOtlpJsonPayload = (\n spans: OtlpSpanRecord[],\n {\n serviceName = \"promptlayer-openai-agents-js\",\n scopeName = \"promptlayer.integrations.openai_agents\",\n scopeVersion = SDK_VERSION,\n }: BuildOtlpJsonPayloadOptions = {}\n): OtlpJsonPayload => {\n return {\n resourceSpans: [\n {\n resource: {\n attributes: toKeyValues({\n \"service.name\": serviceName,\n }),\n },\n scopeSpans: [\n {\n scope: {\n name: scopeName,\n version: scopeVersion,\n },\n spans: spans.map((span) => {\n const payload: Record<string, unknown> = {\n traceId: span.traceId,\n spanId: span.spanId,\n name: span.name,\n kind: span.kind,\n startTimeUnixNano: span.startTimeUnixNano,\n endTimeUnixNano: span.endTimeUnixNano ?? span.startTimeUnixNano,\n attributes: toKeyValues(span.attributes),\n events: (span.events ?? []).map((event) => ({\n name: event.name,\n timeUnixNano: event.timeUnixNano,\n attributes: toKeyValues(event.attributes ?? {}),\n })),\n links: [],\n };\n\n if (span.parentSpanId) {\n payload.parentSpanId = span.parentSpanId;\n }\n\n if (span.traceState) {\n payload.traceState = span.traceState;\n }\n\n if (span.status) {\n payload.status = {\n code: span.status.code,\n ...(span.status.message ? { message: span.status.message } : {}),\n };\n }\n\n return payload;\n }),\n },\n ],\n },\n ],\n };\n};\n","import { createHash } from \"crypto\";\n\nconst TRACE_HEX_RE = /^[0-9a-f]{32}$/i;\n\nconst sha256Hex = (value: string): string => {\n return createHash(\"sha256\").update(value, \"utf8\").digest(\"hex\");\n};\n\nexport const mapTraceId = (originalTraceId: string): string => {\n const suffix = originalTraceId.startsWith(\"trace_\")\n ? originalTraceId.slice(\"trace_\".length)\n : originalTraceId;\n\n if (TRACE_HEX_RE.test(suffix)) {\n return suffix.toLowerCase();\n }\n\n return sha256Hex(originalTraceId).slice(0, 32);\n};\n\nexport const mapSpanId = (originalSpanId: string): string => {\n return sha256Hex(originalSpanId).slice(0, 16);\n};\n\nexport const syntheticRootSpanId = (originalTraceId: string): string => {\n return sha256Hex(`${originalTraceId}:root`).slice(0, 16);\n};\n","const ISO_TIMESTAMP_RE =\n /^(\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}:\\d{2})(?:\\.(\\d{1,9}))?(Z|[+-]\\d{2}:\\d{2})?$/;\n\nexport const nowUnixNano = (): string => {\n return (BigInt(Date.now()) * BigInt(1_000_000)).toString();\n};\n\nexport const isoToUnixNano = (\n timestamp: string | null | undefined\n): string | undefined => {\n if (!timestamp) {\n return undefined;\n }\n\n const match = ISO_TIMESTAMP_RE.exec(timestamp);\n if (!match) {\n const millis = Date.parse(timestamp);\n if (Number.isNaN(millis)) {\n return undefined;\n }\n return (BigInt(millis) * BigInt(1_000_000)).toString();\n }\n\n const [, base, fraction = \"\", timezone = \"Z\"] = match;\n const millis = Date.parse(`${base}${timezone}`);\n if (Number.isNaN(millis)) {\n return undefined;\n }\n\n const fractionalNanos = BigInt(\n (fraction + \"000000000\").slice(0, 9)\n );\n return (BigInt(millis) * BigInt(1_000_000) + fractionalNanos).toString();\n};\n\nexport const minUnixNano = (...values: Array<string | undefined>): string => {\n const filtered = values.filter((value): value is string => value !== undefined);\n if (filtered.length === 0) {\n return nowUnixNano();\n }\n\n return filtered.reduce((min, current) =>\n BigInt(current) < BigInt(min) ? current : min\n );\n};\n\nexport const maxUnixNano = (...values: Array<string | undefined>): string => {\n const filtered = values.filter((value): value is string => value !== undefined);\n if (filtered.length === 0) {\n return nowUnixNano();\n }\n\n return filtered.reduce((max, current) =>\n BigInt(current) > BigInt(max) ? current : max\n );\n};\n","export const trimTrailingSlashes = (value: string): string => {\n let end = value.length;\n\n while (end > 0 && value.charCodeAt(end - 1) === 47) {\n end -= 1;\n }\n\n return value.slice(0, end);\n};\n","import {\n OTLP_STATUS_CODE_ERROR,\n OTLP_STATUS_CODE_OK,\n OTLP_STATUS_CODE_UNSET,\n baseSpanAttributes,\n baseTraceAttributes,\n spanDataAttributes,\n spanKindFor,\n spanNameFor,\n} from \"@/integrations/openai-agents/mapping\";\nimport { buildOtlpJsonPayload } from \"@/integrations/openai-agents/otlp-json\";\nimport { mapSpanId, mapTraceId, syntheticRootSpanId } from \"@/integrations/openai-agents/ids\";\nimport {\n isoToUnixNano,\n maxUnixNano,\n minUnixNano,\n nowUnixNano,\n} from \"@/integrations/openai-agents/time\";\nimport { trimTrailingSlashes } from \"@/integrations/openai-agents/url\";\nimport type {\n OtlpSpanRecord,\n OtlpStatusRecord,\n} from \"@/integrations/openai-agents/types\";\nimport { fetchWithRetry, getCommonHeaders } from \"@/utils/utils\";\nimport type {\n Span as AgentsSpan,\n Trace as AgentsTrace,\n TracingProcessor,\n} from \"@openai/agents\";\n\nconst TRACEPARENT_RE = /^([0-9a-f]{2})-([0-9a-f]{32})-([0-9a-f]{16})-([0-9a-f]{2})$/i;\nconst ZERO_TRACE_ID = \"0\".repeat(32);\nconst ZERO_SPAN_ID = \"0\".repeat(16);\n\ninterface UpstreamTraceContext {\n traceId: string;\n parentSpanId: string;\n traceState?: string;\n}\n\ntype TraceMetadataRecord = Record<string, unknown>;\n\ninterface TraceState {\n rootSpan: OtlpSpanRecord;\n spans: Map<string, OtlpSpanRecord>;\n}\n\nexport interface PromptLayerOpenAIAgentsProcessorOptions {\n apiKey: string;\n baseURL: string;\n includeRawPayloads?: boolean;\n}\n\nexport class PromptLayerOpenAIAgentsProcessor implements TracingProcessor {\n private readonly apiKey: string;\n private readonly baseURL: string;\n private readonly includeRawPayloads: boolean;\n private readonly traceStates = new Map<string, TraceState>();\n private readonly completedTraceQueue = new Map<\n string,\n ReturnType<typeof buildOtlpJsonPayload>\n >();\n private readonly pendingExports = new Map<string, Promise<void>>();\n\n constructor({\n apiKey,\n baseURL,\n includeRawPayloads = true,\n }: PromptLayerOpenAIAgentsProcessorOptions) {\n this.apiKey = apiKey;\n this.baseURL = trimTrailingSlashes(baseURL);\n this.includeRawPayloads = includeRawPayloads;\n }\n\n start(): void {}\n\n async onTraceStart(trace: AgentsTrace): Promise<void> {\n if (this.traceStates.has(trace.traceId)) {\n return;\n }\n\n const upstreamContext = this.resolveUpstreamTraceContext(trace.metadata);\n const traceId = upstreamContext?.traceId ?? mapTraceId(trace.traceId);\n this.traceStates.set(trace.traceId, {\n rootSpan: {\n traceId,\n spanId: syntheticRootSpanId(trace.traceId),\n name: trace.name || \"OpenAI Agents Trace\",\n kind: 1,\n startTimeUnixNano: nowUnixNano(),\n parentSpanId: upstreamContext?.parentSpanId,\n traceState: upstreamContext?.traceState,\n attributes: baseTraceAttributes(trace, this.includeRawPayloads),\n status: { code: OTLP_STATUS_CODE_UNSET },\n events: [],\n },\n spans: new Map(),\n });\n }\n\n async onTraceEnd(trace: AgentsTrace): Promise<void> {\n const state = this.traceStates.get(trace.traceId);\n if (!state) {\n return;\n }\n\n const childSpans = Array.from(state.spans.values()).sort((left, right) => {\n return BigInt(left.startTimeUnixNano) < BigInt(right.startTimeUnixNano)\n ? -1\n : 1;\n });\n const childStarts = childSpans.map((span) => span.startTimeUnixNano);\n const childEnds = childSpans.map(\n (span) => span.endTimeUnixNano ?? span.startTimeUnixNano\n );\n const rootEnd = maxUnixNano(nowUnixNano(), ...childEnds);\n\n state.rootSpan.startTimeUnixNano = minUnixNano(\n state.rootSpan.startTimeUnixNano,\n ...childStarts\n );\n state.rootSpan.endTimeUnixNano = rootEnd;\n\n const payload = buildOtlpJsonPayload([state.rootSpan, ...childSpans]);\n this.traceStates.delete(trace.traceId);\n this.completedTraceQueue.set(trace.traceId, payload);\n this.startExportForTrace(trace.traceId);\n }\n\n async onSpanStart(span: AgentsSpan<any>): Promise<void> {\n const state = this.ensureTraceStateForSpan(span);\n const existing = state.spans.get(span.spanId);\n const record = existing ?? this.createSpanRecord(span, state.rootSpan.spanId);\n\n record.traceId = state.rootSpan.traceId;\n record.traceState = state.rootSpan.traceState;\n record.name = spanNameFor(span);\n record.kind = spanKindFor(span);\n record.startTimeUnixNano = isoToUnixNano(span.startedAt) ?? record.startTimeUnixNano;\n record.parentSpanId = span.parentId\n ? mapSpanId(span.parentId)\n : state.rootSpan.spanId;\n record.attributes = {\n ...record.attributes,\n ...baseSpanAttributes(span),\n };\n\n state.spans.set(span.spanId, record);\n }\n\n async onSpanEnd(span: AgentsSpan<any>): Promise<void> {\n const state = this.ensureTraceStateForSpan(span);\n const record =\n state.spans.get(span.spanId) ??\n this.createSpanRecord(span, state.rootSpan.spanId);\n\n record.attributes = {\n ...record.attributes,\n ...spanDataAttributes(span.spanData, this.includeRawPayloads),\n };\n record.endTimeUnixNano =\n isoToUnixNano(span.endedAt) ?? record.endTimeUnixNano ?? nowUnixNano();\n record.status = this.statusForSpan(span);\n\n if (span.error) {\n record.events = [\n ...(record.events ?? []),\n {\n name: \"exception\",\n timeUnixNano: record.endTimeUnixNano,\n attributes: {\n \"exception.type\": \"OpenAIAgentsError\",\n \"exception.message\": span.error.message,\n \"openai_agents.error_json\": JSON.stringify(span.error),\n },\n },\n ];\n }\n\n state.spans.set(span.spanId, record);\n }\n\n async shutdown(): Promise<void> {\n await this.forceFlush();\n }\n\n async forceFlush(): Promise<void> {\n for (let pass = 0; pass < 2; pass += 1) {\n for (const traceId of this.completedTraceQueue.keys()) {\n this.startExportForTrace(traceId);\n }\n\n if (this.pendingExports.size === 0) {\n return;\n }\n\n await Promise.all(Array.from(this.pendingExports.values()));\n\n if (this.completedTraceQueue.size === 0) {\n return;\n }\n }\n }\n\n private traceLikeFromSpan(\n span: AgentsSpan<any>\n ): Pick<AgentsTrace, \"traceId\" | \"name\" | \"groupId\" | \"metadata\"> {\n const rawMetadata = this.asRecord(span.traceMetadata);\n const nestedMetadata = this.asRecord(rawMetadata?.metadata);\n\n return {\n traceId: span.traceId,\n name:\n this.readString(rawMetadata?.workflow_name) ??\n this.readString(rawMetadata?.workflowName) ??\n \"OpenAI Agents Trace\",\n groupId:\n this.readString(rawMetadata?.group_id) ??\n this.readString(rawMetadata?.groupId) ??\n null,\n metadata: nestedMetadata ?? rawMetadata ?? {},\n };\n }\n\n private ensureTraceStateForSpan(span: AgentsSpan<any>): TraceState {\n const existing = this.traceStates.get(span.traceId);\n if (existing) {\n return existing;\n }\n\n const traceLike = this.traceLikeFromSpan(span);\n\n const upstreamContext = this.resolveUpstreamTraceContext(traceLike.metadata);\n const traceId = upstreamContext?.traceId ?? mapTraceId(span.traceId);\n const state: TraceState = {\n rootSpan: {\n traceId,\n spanId: syntheticRootSpanId(span.traceId),\n name: traceLike.name,\n kind: 1,\n startTimeUnixNano: isoToUnixNano(span.startedAt) ?? nowUnixNano(),\n parentSpanId: upstreamContext?.parentSpanId,\n traceState: upstreamContext?.traceState,\n attributes: baseTraceAttributes(traceLike, this.includeRawPayloads),\n status: { code: OTLP_STATUS_CODE_UNSET },\n events: [],\n },\n spans: new Map(),\n };\n\n this.traceStates.set(span.traceId, state);\n return state;\n }\n\n private createSpanRecord(\n span: AgentsSpan<any>,\n rootSpanId: string\n ): OtlpSpanRecord {\n return {\n traceId:\n this.traceStates.get(span.traceId)?.rootSpan.traceId ?? mapTraceId(span.traceId),\n spanId: mapSpanId(span.spanId),\n parentSpanId: span.parentId ? mapSpanId(span.parentId) : rootSpanId,\n name: spanNameFor(span),\n kind: spanKindFor(span),\n startTimeUnixNano: isoToUnixNano(span.startedAt) ?? nowUnixNano(),\n traceState: this.traceStates.get(span.traceId)?.rootSpan.traceState,\n attributes: {\n ...baseSpanAttributes(span),\n },\n status: { code: OTLP_STATUS_CODE_UNSET },\n events: [],\n };\n }\n\n private statusForSpan(span: AgentsSpan<any>): OtlpStatusRecord {\n if (span.error) {\n return {\n code: OTLP_STATUS_CODE_ERROR,\n message: span.error.message,\n };\n }\n\n return {\n code: OTLP_STATUS_CODE_OK,\n };\n }\n\n private async exportPayload(payload: ReturnType<typeof buildOtlpJsonPayload>) {\n const response = await fetchWithRetry(`${this.baseURL}/v1/traces`, {\n method: \"POST\",\n headers: {\n \"Content-Type\": \"application/json\",\n \"X-API-KEY\": this.apiKey,\n \"X-PromptLayer-Integration\": \"openai-agents-js\",\n ...getCommonHeaders(),\n },\n body: JSON.stringify(payload),\n });\n\n if (!response.ok) {\n throw new Error(\n `Failed to export OpenAI Agents traces: ${response.status} ${response.statusText}`\n );\n }\n }\n\n private startExportForTrace(traceId: string): void {\n if (this.pendingExports.has(traceId)) {\n return;\n }\n\n const payload = this.completedTraceQueue.get(traceId);\n if (!payload) {\n return;\n }\n\n const exportPromise = this.exportPayload(payload)\n .then(() => {\n this.completedTraceQueue.delete(traceId);\n })\n .catch((error) => {\n console.error(\n `Failed to export OpenAI Agents trace '${traceId}'.`,\n error\n );\n })\n .finally(() => {\n this.pendingExports.delete(traceId);\n });\n\n this.pendingExports.set(traceId, exportPromise);\n }\n\n private resolveUpstreamTraceContext(\n metadata: AgentsTrace[\"metadata\"] | AgentsSpan<any>[\"traceMetadata\"]\n ): UpstreamTraceContext | null {\n const metadataRecord = this.asRecord(metadata);\n if (!metadataRecord) {\n return null;\n }\n\n const traceparent = metadataRecord.traceparent;\n if (typeof traceparent !== \"string\" || !traceparent.trim()) {\n return null;\n }\n\n const match = traceparent.trim().match(TRACEPARENT_RE);\n if (!match) {\n return null;\n }\n\n const [, version, traceId, parentSpanId] = match;\n const normalizedVersion = version.toLowerCase();\n const normalizedTraceId = traceId.toLowerCase();\n const normalizedParentSpanId = parentSpanId.toLowerCase();\n if (\n normalizedVersion === \"ff\" ||\n normalizedTraceId === ZERO_TRACE_ID ||\n normalizedParentSpanId === ZERO_SPAN_ID\n ) {\n return null;\n }\n\n const traceState =\n typeof metadataRecord.tracestate === \"string\" && metadataRecord.tracestate.trim()\n ? metadataRecord.tracestate.trim()\n : undefined;\n\n return {\n traceId: normalizedTraceId,\n parentSpanId: normalizedParentSpanId,\n traceState,\n };\n }\n\n private asRecord(value: unknown): TraceMetadataRecord | null {\n if (!value || typeof value !== \"object\" || Array.isArray(value)) {\n return null;\n }\n\n return value as TraceMetadataRecord;\n }\n\n private readString(value: unknown): string | undefined {\n return typeof value === \"string\" && value.trim() ? value : undefined;\n }\n}\n","import { PromptLayerOpenAIAgentsProcessor } from \"@/integrations/openai-agents/processor\";\nimport { trimTrailingSlashes } from \"@/integrations/openai-agents/url\";\nimport { readEnv, requirePromptLayerApiKey } from \"@/utils/utils\";\n\nexport interface InstrumentOpenAIAgentsOptions {\n apiKey?: string;\n baseURL?: string;\n exclusive?: boolean;\n includeRawPayloads?: boolean;\n}\n\nconst resolveBaseURL = (baseURL?: string): string => {\n return trimTrailingSlashes(\n baseURL ?? readEnv(\"PROMPTLAYER_BASE_URL\") ?? \"https://api.promptlayer.com\"\n );\n};\n\nexport const instrumentOpenAIAgents = async ({\n apiKey,\n baseURL,\n exclusive = true,\n includeRawPayloads = true,\n}: InstrumentOpenAIAgentsOptions = {}): Promise<PromptLayerOpenAIAgentsProcessor> => {\n const resolvedApiKey = requirePromptLayerApiKey(apiKey);\n\n const agentsModule: typeof import(\"@openai/agents\") = await import(\n \"@openai/agents\"\n );\n\n const processor = new PromptLayerOpenAIAgentsProcessor({\n apiKey: resolvedApiKey,\n baseURL: resolveBaseURL(baseURL),\n includeRawPayloads,\n });\n\n if (exclusive) {\n agentsModule.setTraceProcessors([processor]);\n } else {\n agentsModule.addTraceProcessor(processor);\n }\n\n return processor;\n};\n"],"mappings":"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","names":["SPAN_KIND_INTERNAL","SPAN_KIND_CLIENT","isPlainObject","value","isScalar","sanitizeKey","key","toJsonable","item","stableStringify","normalize","input","acc","setStringAttr","attrs","setNumberAttr","numericValue","setJsonAttr","includeRawPayloads","flattenIndexedMessages","prefix","messages","message","index","normalizeToolCalls","toolCalls","call","_a","_b","_c","_d","_e","functionData","name","argumentsValue","e","getCallId","normalizeToolOutputContent","output","textContent","extractTextContent","normalizeToolCallMessage","normalizeToolResultMessage","outputOverride","toolCallId","content","textParts","part","partType","text","normalizeMessages","items","normalized","normalizeResponseMessage","role","RAW_TOOL_CALL_ITEM_TYPES","RAW_TOOL_RESULT_ITEM_TYPES","normalizeResponseItems","applyUsageAttributes","usage","generationAttributes","spanData","responseAttributes","responseObject","functionAttributes","agentAttributes","handoffAttributes","guardrailAttributes","customAttributes","rawSpanDataAttributes","telemetrySourceVersion","SDK_VERSION","spanKindFor","span","spanNameFor","baseTraceAttributes","trace","baseSpanAttributes","spanDataAttributes","OTLP_STATUS_CODE_UNSET","OTLP_STATUS_CODE_OK","OTLP_STATUS_CODE_ERROR","toAnyValue","value","item","key","nestedValue","toKeyValues","attributes","buildOtlpJsonPayload","spans","serviceName","scopeName","scopeVersion","SDK_VERSION","span","_a","_b","payload","event","__spreadValues","createHash","TRACE_HEX_RE","sha256Hex","value","mapTraceId","originalTraceId","suffix","mapSpanId","originalSpanId","syntheticRootSpanId","ISO_TIMESTAMP_RE","nowUnixNano","isoToUnixNano","timestamp","match","millis","base","fraction","timezone","fractionalNanos","minUnixNano","values","filtered","value","min","current","maxUnixNano","max","trimTrailingSlashes","value","end","TRACEPARENT_RE","ZERO_TRACE_ID","ZERO_SPAN_ID","PromptLayerOpenAIAgentsProcessor","apiKey","baseURL","includeRawPayloads","trimTrailingSlashes","trace","__async","_a","upstreamContext","traceId","mapTraceId","syntheticRootSpanId","nowUnixNano","baseTraceAttributes","OTLP_STATUS_CODE_UNSET","state","childSpans","left","right","childStarts","span","childEnds","rootEnd","maxUnixNano","minUnixNano","payload","buildOtlpJsonPayload","existing","record","spanNameFor","spanKindFor","isoToUnixNano","mapSpanId","__spreadValues","baseSpanAttributes","_b","_c","_d","spanDataAttributes","pass","_e","rawMetadata","nestedMetadata","traceLike","rootSpanId","OTLP_STATUS_CODE_ERROR","OTLP_STATUS_CODE_OK","response","fetchWithRetry","getCommonHeaders","exportPromise","error","metadata","metadataRecord","traceparent","match","version","parentSpanId","normalizedVersion","normalizedTraceId","normalizedParentSpanId","traceState","value","resolveBaseURL","baseURL","_a","trimTrailingSlashes","readEnv","instrumentOpenAIAgents","_0","__async","apiKey","exclusive","includeRawPayloads","resolvedApiKey","requirePromptLayerApiKey","agentsModule","processor","PromptLayerOpenAIAgentsProcessor"]}
|
|
1
|
+
{"version":3,"sources":["../../src/integrations/openai-agents/mapping.ts","../../src/integrations/openai-agents/otlp-json.ts","../../src/integrations/openai-agents/ids.ts","../../src/integrations/openai-agents/time.ts","../../src/integrations/openai-agents/url.ts","../../src/integrations/openai-agents/processor.ts","../../src/integrations/openai-agents/instrumentation.ts"],"sourcesContent":["import { SDK_VERSION } from \"@/utils/utils\";\nimport type {\n Span as AgentsSpan,\n SpanData,\n Trace as AgentsTrace,\n} from \"@openai/agents\";\nimport type { AttributeValue } from \"@/integrations/openai-agents/types\";\n\nconst SPAN_KIND_INTERNAL = 1;\nconst SPAN_KIND_CLIENT = 3;\n\ntype AttributeMap = Record<string, AttributeValue>;\ntype NormalizedMessage = Record<string, AttributeValue>;\ntype NormalizedToolCall = {\n id: string;\n type: \"tool_call\";\n name: string;\n arguments: AttributeValue;\n};\n\nconst isPlainObject = (value: unknown): value is Record<string, unknown> => {\n return typeof value === \"object\" && value !== null && !Array.isArray(value);\n};\n\nconst isScalar = (value: unknown): value is string | number | boolean => {\n return (\n typeof value === \"string\" ||\n typeof value === \"number\" ||\n typeof value === \"boolean\"\n );\n};\n\nconst sanitizeKey = (key: string): string => {\n return key.replace(/[^a-zA-Z0-9_.-]/g, \"_\");\n};\n\nconst toJsonable = (value: unknown): AttributeValue => {\n if (\n value === null ||\n typeof value === \"string\" ||\n typeof value === \"number\" ||\n typeof value === \"boolean\"\n ) {\n return value;\n }\n\n if (Array.isArray(value)) {\n return value.map((item) => toJsonable(item));\n }\n\n if (isPlainObject(value)) {\n return Object.fromEntries(\n Object.entries(value).map(([key, item]) => [key, toJsonable(item)])\n );\n }\n\n return String(value);\n};\n\nconst stableStringify = (value: unknown): string => {\n const normalize = (input: unknown): unknown => {\n if (Array.isArray(input)) {\n return input.map((item) => normalize(item));\n }\n\n if (isPlainObject(input)) {\n return Object.keys(input)\n .sort()\n .reduce<Record<string, unknown>>((acc, key) => {\n acc[key] = normalize(input[key]);\n return acc;\n }, {});\n }\n\n return input;\n };\n\n return JSON.stringify(normalize(toJsonable(value)));\n};\n\nconst setStringAttr = (attrs: AttributeMap, key: string, value: unknown) => {\n if (value !== undefined && value !== null && value !== \"\") {\n attrs[key] = String(value);\n }\n};\n\nconst setNumberAttr = (attrs: AttributeMap, key: string, value: unknown) => {\n if (value !== undefined && value !== null && value !== \"\") {\n const numericValue = Number(value);\n if (!Number.isNaN(numericValue)) {\n attrs[key] = numericValue;\n }\n }\n};\n\nconst setJsonAttr = (\n attrs: AttributeMap,\n key: string,\n value: unknown,\n includeRawPayloads: boolean\n) => {\n if (includeRawPayloads && value !== undefined && value !== null) {\n attrs[key] = stableStringify(value);\n }\n};\n\nconst flattenIndexedMessages = (\n prefix: string,\n messages: NormalizedMessage[],\n attrs: AttributeMap\n) => {\n messages.forEach((message, index) => {\n Object.entries(message).forEach(([key, value]) => {\n attrs[`${prefix}.${index}.${key}`] = isScalar(value)\n ? value\n : stableStringify(value);\n });\n });\n};\n\nconst normalizeToolCalls = (toolCalls: unknown): NormalizedToolCall[] => {\n if (!Array.isArray(toolCalls)) {\n return [];\n }\n\n return toolCalls\n .map((call) => {\n if (!isPlainObject(call)) {\n return null;\n }\n\n const functionData = isPlainObject(call.function) ? call.function : null;\n const name = functionData?.name ?? call.name ?? \"tool\";\n let argumentsValue =\n functionData?.arguments ?? call.arguments ?? {};\n\n if (typeof argumentsValue === \"string\") {\n try {\n argumentsValue = JSON.parse(argumentsValue);\n } catch {\n argumentsValue = argumentsValue;\n }\n }\n\n return {\n id: String(call.id ?? \"\"),\n type: \"tool_call\",\n name: String(name),\n arguments: toJsonable(argumentsValue),\n };\n })\n .filter((call): call is NormalizedToolCall => call !== null);\n};\n\nconst getCallId = (item: Record<string, unknown>): string | undefined => {\n const value = item.call_id ?? item.callId ?? item.id;\n return value !== undefined && value !== null ? String(value) : undefined;\n};\n\nconst normalizeToolOutputContent = (output: unknown): string | undefined => {\n if (output === undefined || output === null) {\n return undefined;\n }\n\n if (typeof output === \"string\") {\n return output;\n }\n\n if (Array.isArray(output)) {\n const textContent = extractTextContent(output);\n return textContent ?? stableStringify(output);\n }\n\n if (isPlainObject(output)) {\n const textContent = extractTextContent([output]);\n return textContent ?? stableStringify(output);\n }\n\n const textContent = extractTextContent(output);\n if (textContent !== undefined) {\n return textContent;\n }\n\n return stableStringify(output);\n};\n\nconst normalizeToolCallMessage = (\n item: Record<string, unknown>\n): NormalizedMessage | null => {\n let argumentsValue = item.arguments ?? {};\n if (typeof argumentsValue === \"string\") {\n try {\n argumentsValue = JSON.parse(argumentsValue);\n } catch {\n argumentsValue = argumentsValue;\n }\n }\n\n return {\n role: \"assistant\",\n tool_calls: [\n {\n id: getCallId(item) ?? \"\",\n type: \"tool_call\",\n name: String(item.name ?? \"tool\"),\n arguments: toJsonable(argumentsValue),\n },\n ],\n };\n};\n\nconst normalizeToolResultMessage = (\n item: Record<string, unknown>,\n outputOverride?: unknown\n): NormalizedMessage | null => {\n const toolCallId = getCallId(item);\n const content = normalizeToolOutputContent(\n outputOverride ?? item.output ?? item.content\n );\n\n if (!toolCallId && !content) {\n return null;\n }\n\n const message: NormalizedMessage = {\n role: \"tool\",\n };\n\n if (toolCallId) {\n message.tool_call_id = toolCallId;\n }\n\n if (content !== undefined) {\n message.content = content;\n }\n\n return message;\n};\n\nfunction extractTextContent(content: unknown): string | undefined {\n if (content === undefined || content === null) {\n return undefined;\n }\n\n if (typeof content === \"string\") {\n return content;\n }\n\n if (Array.isArray(content)) {\n const textParts = content\n .map((part) => {\n if (!isPlainObject(part)) {\n return null;\n }\n\n const partType = part.type;\n if (\n partType === \"text\" ||\n partType === \"input_text\" ||\n partType === \"output_text\"\n ) {\n const text = part.text ?? part.content;\n return text !== undefined && text !== null ? String(text) : null;\n }\n\n return null;\n })\n .filter((part): part is string => part !== null);\n\n return textParts.length > 0 ? textParts.join(\"\\n\") : undefined;\n }\n\n return String(content);\n}\n\nexport const normalizeMessages = (items: unknown): NormalizedMessage[] => {\n if (!Array.isArray(items)) {\n return [];\n }\n\n return items\n .map((item) => {\n if (!isPlainObject(item)) {\n return null;\n }\n\n const normalized: NormalizedMessage = {};\n if (item.role !== undefined) {\n normalized.role = String(item.role);\n }\n\n const content = extractTextContent(item.content);\n if (content) {\n normalized.content = content;\n }\n\n const toolCalls = normalizeToolCalls(item.tool_calls);\n if (toolCalls.length > 0) {\n normalized.tool_calls = toolCalls;\n }\n\n if (item.tool_call_id) {\n normalized.tool_call_id = String(item.tool_call_id);\n }\n\n return Object.keys(normalized).length > 0 ? normalized : null;\n })\n .filter((message): message is NormalizedMessage => message !== null);\n};\n\nconst normalizeResponseMessage = (\n item: Record<string, unknown>\n): NormalizedMessage | null => {\n const message: NormalizedMessage = {};\n const role = item.role;\n const content = extractTextContent(item.content);\n const toolCalls = normalizeToolCalls(item.tool_calls);\n\n if (role !== undefined && role !== null) {\n message.role = String(role);\n } else if (content || toolCalls.length > 0) {\n message.role = \"assistant\";\n }\n\n if (content) {\n message.content = content;\n }\n\n if (toolCalls.length > 0) {\n message.tool_calls = toolCalls;\n }\n\n if (item.tool_call_id) {\n message.tool_call_id = String(item.tool_call_id);\n }\n\n return Object.keys(message).length > 0 ? message : null;\n};\n\nconst RAW_TOOL_CALL_ITEM_TYPES = new Set([\n \"function_call\",\n \"computer_call\",\n \"shell_call\",\n \"apply_patch_call\",\n \"custom_tool_call\",\n \"mcp_call\",\n]);\n\nconst RAW_TOOL_RESULT_ITEM_TYPES = new Set([\n \"function_call_output\",\n \"function_call_result\",\n \"computer_call_output\",\n \"computer_call_result\",\n \"shell_call_output\",\n \"apply_patch_call_output\",\n \"custom_tool_call_output\",\n]);\n\nexport const normalizeResponseItems = (items: unknown): NormalizedMessage[] => {\n if (typeof items === \"string\") {\n return [{ role: \"user\", content: items }];\n }\n\n if (!Array.isArray(items)) {\n return [];\n }\n\n return items\n .flatMap((item) => {\n if (!isPlainObject(item)) {\n return [];\n }\n\n if (item.type === \"message_output_item\" && isPlainObject(item.rawItem)) {\n const message = normalizeResponseMessage(item.rawItem);\n return message ? [message] : [];\n }\n\n if (item.type === \"tool_call_item\" && isPlainObject(item.rawItem)) {\n const message = normalizeToolCallMessage(item.rawItem);\n return message ? [message] : [];\n }\n\n if (item.type === \"tool_call_output_item\" && isPlainObject(item.rawItem)) {\n const message = normalizeToolResultMessage(item.rawItem, item.output);\n return message ? [message] : [];\n }\n\n if (typeof item.type === \"string\" && RAW_TOOL_CALL_ITEM_TYPES.has(item.type)) {\n const message = normalizeToolCallMessage(item);\n return message ? [message] : [];\n }\n\n if (\n typeof item.type === \"string\" &&\n RAW_TOOL_RESULT_ITEM_TYPES.has(item.type)\n ) {\n const message = normalizeToolResultMessage(item);\n return message ? [message] : [];\n }\n\n const message = normalizeResponseMessage(item);\n return message ? [message] : [];\n })\n .filter((message): message is NormalizedMessage => message !== null);\n};\n\nconst applyUsageAttributes = (attrs: AttributeMap, usage: unknown) => {\n if (!isPlainObject(usage)) {\n return;\n }\n\n setNumberAttr(\n attrs,\n \"gen_ai.usage.input_tokens\",\n usage.input_tokens ?? usage.prompt_tokens\n );\n setNumberAttr(\n attrs,\n \"gen_ai.usage.output_tokens\",\n usage.output_tokens ?? usage.completion_tokens\n );\n};\n\nconst generationAttributes = (\n spanData: Extract<SpanData, { type: \"generation\" }>,\n includeRawPayloads: boolean\n): AttributeMap => {\n const attrs: AttributeMap = {\n \"gen_ai.provider.name\": \"openai.responses\",\n };\n\n setStringAttr(attrs, \"gen_ai.request.model\", spanData.model);\n applyUsageAttributes(attrs, spanData.usage);\n flattenIndexedMessages(\"gen_ai.prompt\", normalizeMessages(spanData.input), attrs);\n flattenIndexedMessages(\n \"gen_ai.completion\",\n normalizeMessages(spanData.output),\n attrs\n );\n setJsonAttr(\n attrs,\n \"openai_agents.model_config_json\",\n spanData.model_config,\n includeRawPayloads\n );\n setJsonAttr(\n attrs,\n \"openai_agents.generation.raw_input_json\",\n spanData.input,\n includeRawPayloads\n );\n setJsonAttr(\n attrs,\n \"openai_agents.generation.raw_output_json\",\n spanData.output,\n includeRawPayloads\n );\n\n return attrs;\n};\n\nconst responseAttributes = (\n spanData: Extract<SpanData, { type: \"response\" }>,\n includeRawPayloads: boolean\n): AttributeMap => {\n const attrs: AttributeMap = {\n \"gen_ai.provider.name\": \"openai.responses\",\n };\n const responseObject = isPlainObject(spanData._response) ? spanData._response : {};\n const usage =\n isPlainObject(responseObject.usage) ? responseObject.usage : undefined;\n\n setStringAttr(\n attrs,\n \"gen_ai.request.model\",\n responseObject.model\n );\n setStringAttr(\n attrs,\n \"gen_ai.response.model\",\n responseObject.model\n );\n setStringAttr(\n attrs,\n \"gen_ai.response.id\",\n spanData.response_id ?? responseObject.id ?? responseObject.response_id\n );\n applyUsageAttributes(attrs, usage);\n flattenIndexedMessages(\n \"gen_ai.prompt\",\n normalizeResponseItems(spanData._input ?? responseObject.input),\n attrs\n );\n flattenIndexedMessages(\n \"gen_ai.completion\",\n normalizeResponseItems(responseObject.output),\n attrs\n );\n setJsonAttr(\n attrs,\n \"openai_agents.response.raw_json\",\n responseObject,\n includeRawPayloads\n );\n setStringAttr(\n attrs,\n \"openai_agents.response.object\",\n responseObject.object\n );\n\n return attrs;\n};\n\nconst functionAttributes = (\n spanData: Extract<SpanData, { type: \"function\" }>,\n includeRawPayloads: boolean\n): AttributeMap => {\n const attrs: AttributeMap = {\n node_type: \"CODE_EXECUTION\",\n tool_name: spanData.name,\n \"openai_agents.function.name\": spanData.name,\n };\n\n setStringAttr(attrs, \"function_input\", spanData.input);\n setStringAttr(attrs, \"function_output\", spanData.output);\n setStringAttr(attrs, \"openai_agents.function.input\", spanData.input);\n setStringAttr(attrs, \"openai_agents.function.output\", spanData.output);\n setJsonAttr(\n attrs,\n \"openai_agents.function.mcp_data_json\",\n spanData.mcp_data,\n includeRawPayloads\n );\n\n return attrs;\n};\n\nconst agentAttributes = (\n spanData: Extract<SpanData, { type: \"agent\" }>,\n includeRawPayloads: boolean\n): AttributeMap => {\n const attrs: AttributeMap = {\n \"openai_agents.agent.name\": spanData.name,\n };\n\n setStringAttr(attrs, \"openai_agents.agent.output_type\", spanData.output_type);\n setJsonAttr(\n attrs,\n \"openai_agents.agent.handoffs_json\",\n spanData.handoffs,\n includeRawPayloads\n );\n setJsonAttr(\n attrs,\n \"openai_agents.agent.tools_json\",\n spanData.tools,\n includeRawPayloads\n );\n\n return attrs;\n};\n\nconst handoffAttributes = (\n spanData: Extract<SpanData, { type: \"handoff\" }>\n): AttributeMap => {\n const attrs: AttributeMap = {};\n setStringAttr(attrs, \"openai_agents.handoff.from_agent\", spanData.from_agent);\n setStringAttr(attrs, \"openai_agents.handoff.to_agent\", spanData.to_agent);\n return attrs;\n};\n\nconst guardrailAttributes = (\n spanData: Extract<SpanData, { type: \"guardrail\" }>\n): AttributeMap => {\n return {\n \"openai_agents.guardrail.name\": spanData.name,\n \"openai_agents.guardrail.triggered\": spanData.triggered,\n };\n};\n\nconst customAttributes = (\n spanData: Extract<SpanData, { type: \"custom\" }>,\n includeRawPayloads: boolean\n): AttributeMap => {\n const attrs: AttributeMap = {\n \"openai_agents.custom.name\": spanData.name,\n };\n setJsonAttr(\n attrs,\n \"openai_agents.custom.data_json\",\n spanData.data,\n includeRawPayloads\n );\n return attrs;\n};\n\nconst rawSpanDataAttributes = (\n spanData: SpanData,\n includeRawPayloads: boolean\n): AttributeMap => {\n if (!includeRawPayloads) {\n return {};\n }\n\n return {\n \"openai_agents.raw_json\": stableStringify(spanData),\n };\n};\n\nexport const telemetrySourceVersion = (): string => {\n return SDK_VERSION;\n};\n\nexport const spanKindFor = (span: Pick<AgentsSpan<any>, \"spanData\">): number => {\n return span.spanData.type === \"generation\" || span.spanData.type === \"response\"\n ? SPAN_KIND_CLIENT\n : SPAN_KIND_INTERNAL;\n};\n\nexport const spanNameFor = (span: Pick<AgentsSpan<any>, \"spanData\">): string => {\n switch (span.spanData.type) {\n case \"function\":\n return `Function: ${span.spanData.name}`;\n case \"agent\":\n return `Agent: ${span.spanData.name}`;\n case \"guardrail\":\n return `Guardrail: ${span.spanData.name}`;\n case \"custom\":\n return String(span.spanData.name);\n default:\n return span.spanData.type\n .split(\"_\")\n .map((part: string) => part.charAt(0).toUpperCase() + part.slice(1))\n .join(\" \");\n }\n};\n\nexport const baseTraceAttributes = (\n trace: Pick<AgentsTrace, \"traceId\" | \"name\" | \"groupId\" | \"metadata\">,\n includeRawPayloads: boolean\n): AttributeMap => {\n const attrs: AttributeMap = {\n \"promptlayer.telemetry.source\": \"openai-agents-js\",\n \"promptlayer.telemetry.source_version\": telemetrySourceVersion(),\n \"openai_agents.trace_id_original\": trace.traceId,\n \"openai_agents.workflow_name\": trace.name,\n };\n\n if (trace.groupId) {\n attrs[\"openai_agents.group_id\"] = trace.groupId;\n }\n\n if (isPlainObject(trace.metadata)) {\n Object.entries(trace.metadata).forEach(([key, value]) => {\n if (isScalar(value)) {\n attrs[`openai_agents.metadata.${sanitizeKey(key)}`] = value;\n }\n });\n setJsonAttr(\n attrs,\n \"openai_agents.metadata_json\",\n trace.metadata,\n includeRawPayloads\n );\n }\n\n return attrs;\n};\n\nexport const baseSpanAttributes = (\n span: Pick<AgentsSpan<any>, \"spanId\" | \"parentId\" | \"spanData\">\n): AttributeMap => {\n const attrs: AttributeMap = {\n \"promptlayer.telemetry.source\": \"openai-agents-js\",\n \"promptlayer.telemetry.source_version\": telemetrySourceVersion(),\n \"openai_agents.span_id_original\": span.spanId,\n \"openai_agents.span_type\": span.spanData.type,\n };\n\n if (span.parentId) {\n attrs[\"openai_agents.parent_id_original\"] = span.parentId;\n }\n\n return attrs;\n};\n\nexport const spanDataAttributes = (\n spanData: SpanData,\n includeRawPayloads: boolean\n): AttributeMap => {\n switch (spanData.type) {\n case \"generation\":\n return generationAttributes(spanData, includeRawPayloads);\n case \"response\":\n return responseAttributes(spanData, includeRawPayloads);\n case \"function\":\n return functionAttributes(spanData, includeRawPayloads);\n case \"agent\":\n return agentAttributes(spanData, includeRawPayloads);\n case \"handoff\":\n return handoffAttributes(spanData);\n case \"guardrail\":\n return guardrailAttributes(spanData);\n case \"custom\":\n return customAttributes(spanData, includeRawPayloads);\n default:\n return rawSpanDataAttributes(spanData, includeRawPayloads);\n }\n};\n\nexport const OTLP_STATUS_CODE_UNSET = 0;\nexport const OTLP_STATUS_CODE_OK = 1;\nexport const OTLP_STATUS_CODE_ERROR = 2;\n","import { SDK_VERSION } from \"@/utils/utils\";\nimport type {\n AttributeValue,\n OtlpJsonPayload,\n OtlpSpanRecord,\n} from \"@/integrations/openai-agents/types\";\n\nconst toAnyValue = (value: AttributeValue): Record<string, unknown> => {\n if (typeof value === \"string\") {\n return { stringValue: value };\n }\n\n if (typeof value === \"boolean\") {\n return { boolValue: value };\n }\n\n if (typeof value === \"number\") {\n if (Number.isInteger(value)) {\n return { intValue: String(value) };\n }\n return { doubleValue: value };\n }\n\n if (value === null) {\n return { stringValue: \"null\" };\n }\n\n if (Array.isArray(value)) {\n return {\n arrayValue: {\n values: value.map((item) => toAnyValue(item)),\n },\n };\n }\n\n return {\n kvlistValue: {\n values: Object.entries(value).map(([key, nestedValue]) => ({\n key,\n value: toAnyValue(nestedValue),\n })),\n },\n };\n};\n\nconst toKeyValues = (attributes: Record<string, AttributeValue>) => {\n return Object.entries(attributes).map(([key, value]) => ({\n key,\n value: toAnyValue(value),\n }));\n};\n\nexport interface BuildOtlpJsonPayloadOptions {\n serviceName?: string;\n scopeName?: string;\n scopeVersion?: string;\n}\n\nexport const buildOtlpJsonPayload = (\n spans: OtlpSpanRecord[],\n {\n serviceName = \"promptlayer-openai-agents-js\",\n scopeName = \"promptlayer.integrations.openai_agents\",\n scopeVersion = SDK_VERSION,\n }: BuildOtlpJsonPayloadOptions = {}\n): OtlpJsonPayload => {\n return {\n resourceSpans: [\n {\n resource: {\n attributes: toKeyValues({\n \"service.name\": serviceName,\n }),\n },\n scopeSpans: [\n {\n scope: {\n name: scopeName,\n version: scopeVersion,\n },\n spans: spans.map((span) => {\n const payload: Record<string, unknown> = {\n traceId: span.traceId,\n spanId: span.spanId,\n name: span.name,\n kind: span.kind,\n startTimeUnixNano: span.startTimeUnixNano,\n endTimeUnixNano: span.endTimeUnixNano ?? span.startTimeUnixNano,\n attributes: toKeyValues(span.attributes),\n events: (span.events ?? []).map((event) => ({\n name: event.name,\n timeUnixNano: event.timeUnixNano,\n attributes: toKeyValues(event.attributes ?? {}),\n })),\n links: [],\n };\n\n if (span.parentSpanId) {\n payload.parentSpanId = span.parentSpanId;\n }\n\n if (span.traceState) {\n payload.traceState = span.traceState;\n }\n\n if (span.status) {\n payload.status = {\n code: span.status.code,\n ...(span.status.message ? { message: span.status.message } : {}),\n };\n }\n\n return payload;\n }),\n },\n ],\n },\n ],\n };\n};\n","import { createHash } from \"crypto\";\n\nconst TRACE_HEX_RE = /^[0-9a-f]{32}$/i;\n\nconst sha256Hex = (value: string): string => {\n return createHash(\"sha256\").update(value, \"utf8\").digest(\"hex\");\n};\n\nexport const mapTraceId = (originalTraceId: string): string => {\n const suffix = originalTraceId.startsWith(\"trace_\")\n ? originalTraceId.slice(\"trace_\".length)\n : originalTraceId;\n\n if (TRACE_HEX_RE.test(suffix)) {\n return suffix.toLowerCase();\n }\n\n return sha256Hex(originalTraceId).slice(0, 32);\n};\n\nexport const mapSpanId = (originalSpanId: string): string => {\n return sha256Hex(originalSpanId).slice(0, 16);\n};\n\nexport const syntheticRootSpanId = (originalTraceId: string): string => {\n return sha256Hex(`${originalTraceId}:root`).slice(0, 16);\n};\n","const ISO_TIMESTAMP_RE =\n /^(\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}:\\d{2})(?:\\.(\\d{1,9}))?(Z|[+-]\\d{2}:\\d{2})?$/;\n\nexport const nowUnixNano = (): string => {\n return (BigInt(Date.now()) * BigInt(1_000_000)).toString();\n};\n\nexport const isoToUnixNano = (\n timestamp: string | null | undefined\n): string | undefined => {\n if (!timestamp) {\n return undefined;\n }\n\n const match = ISO_TIMESTAMP_RE.exec(timestamp);\n if (!match) {\n const millis = Date.parse(timestamp);\n if (Number.isNaN(millis)) {\n return undefined;\n }\n return (BigInt(millis) * BigInt(1_000_000)).toString();\n }\n\n const [, base, fraction = \"\", timezone = \"Z\"] = match;\n const millis = Date.parse(`${base}${timezone}`);\n if (Number.isNaN(millis)) {\n return undefined;\n }\n\n const fractionalNanos = BigInt(\n (fraction + \"000000000\").slice(0, 9)\n );\n return (BigInt(millis) * BigInt(1_000_000) + fractionalNanos).toString();\n};\n\nexport const minUnixNano = (...values: Array<string | undefined>): string => {\n const filtered = values.filter((value): value is string => value !== undefined);\n if (filtered.length === 0) {\n return nowUnixNano();\n }\n\n return filtered.reduce((min, current) =>\n BigInt(current) < BigInt(min) ? current : min\n );\n};\n\nexport const maxUnixNano = (...values: Array<string | undefined>): string => {\n const filtered = values.filter((value): value is string => value !== undefined);\n if (filtered.length === 0) {\n return nowUnixNano();\n }\n\n return filtered.reduce((max, current) =>\n BigInt(current) > BigInt(max) ? current : max\n );\n};\n","export const trimTrailingSlashes = (value: string): string => {\n let end = value.length;\n\n while (end > 0 && value.charCodeAt(end - 1) === 47) {\n end -= 1;\n }\n\n return value.slice(0, end);\n};\n","import {\n OTLP_STATUS_CODE_ERROR,\n OTLP_STATUS_CODE_OK,\n OTLP_STATUS_CODE_UNSET,\n baseSpanAttributes,\n baseTraceAttributes,\n spanDataAttributes,\n spanKindFor,\n spanNameFor,\n} from \"@/integrations/openai-agents/mapping\";\nimport { buildOtlpJsonPayload } from \"@/integrations/openai-agents/otlp-json\";\nimport { mapSpanId, mapTraceId, syntheticRootSpanId } from \"@/integrations/openai-agents/ids\";\nimport {\n isoToUnixNano,\n maxUnixNano,\n minUnixNano,\n nowUnixNano,\n} from \"@/integrations/openai-agents/time\";\nimport { trimTrailingSlashes } from \"@/integrations/openai-agents/url\";\nimport type {\n OtlpSpanRecord,\n OtlpStatusRecord,\n} from \"@/integrations/openai-agents/types\";\nimport { fetchWithRetry, getCommonHeaders } from \"@/utils/utils\";\nimport type {\n Span as AgentsSpan,\n Trace as AgentsTrace,\n TracingProcessor,\n} from \"@openai/agents\";\n\nconst TRACEPARENT_RE = /^([0-9a-f]{2})-([0-9a-f]{32})-([0-9a-f]{16})-([0-9a-f]{2})$/i;\nconst ZERO_TRACE_ID = \"0\".repeat(32);\nconst ZERO_SPAN_ID = \"0\".repeat(16);\n\ninterface UpstreamTraceContext {\n traceId: string;\n parentSpanId: string;\n traceState?: string;\n}\n\ntype TraceMetadataRecord = Record<string, unknown>;\n\ninterface TraceState {\n rootSpan: OtlpSpanRecord;\n spans: Map<string, OtlpSpanRecord>;\n}\n\nexport interface PromptLayerOpenAIAgentsProcessorOptions {\n apiKey: string;\n baseURL: string;\n includeRawPayloads?: boolean;\n}\n\nexport class PromptLayerOpenAIAgentsProcessor implements TracingProcessor {\n private readonly apiKey: string;\n private readonly baseURL: string;\n private readonly includeRawPayloads: boolean;\n private readonly traceStates = new Map<string, TraceState>();\n private readonly completedTraceQueue = new Map<\n string,\n ReturnType<typeof buildOtlpJsonPayload>\n >();\n private readonly pendingExports = new Map<string, Promise<void>>();\n\n constructor({\n apiKey,\n baseURL,\n includeRawPayloads = true,\n }: PromptLayerOpenAIAgentsProcessorOptions) {\n this.apiKey = apiKey;\n this.baseURL = trimTrailingSlashes(baseURL);\n this.includeRawPayloads = includeRawPayloads;\n }\n\n start(): void {}\n\n async onTraceStart(trace: AgentsTrace): Promise<void> {\n if (this.traceStates.has(trace.traceId)) {\n return;\n }\n\n const upstreamContext = this.resolveUpstreamTraceContext(trace.metadata);\n const traceId = upstreamContext?.traceId ?? mapTraceId(trace.traceId);\n this.traceStates.set(trace.traceId, {\n rootSpan: {\n traceId,\n spanId: syntheticRootSpanId(trace.traceId),\n name: trace.name || \"OpenAI Agents Trace\",\n kind: 1,\n startTimeUnixNano: nowUnixNano(),\n parentSpanId: upstreamContext?.parentSpanId,\n traceState: upstreamContext?.traceState,\n attributes: baseTraceAttributes(trace, this.includeRawPayloads),\n status: { code: OTLP_STATUS_CODE_UNSET },\n events: [],\n },\n spans: new Map(),\n });\n }\n\n async onTraceEnd(trace: AgentsTrace): Promise<void> {\n const state = this.traceStates.get(trace.traceId);\n if (!state) {\n return;\n }\n\n const childSpans = Array.from(state.spans.values()).sort((left, right) => {\n return BigInt(left.startTimeUnixNano) < BigInt(right.startTimeUnixNano)\n ? -1\n : 1;\n });\n const childStarts = childSpans.map((span) => span.startTimeUnixNano);\n const childEnds = childSpans.map(\n (span) => span.endTimeUnixNano ?? span.startTimeUnixNano\n );\n const rootEnd = maxUnixNano(nowUnixNano(), ...childEnds);\n\n state.rootSpan.startTimeUnixNano = minUnixNano(\n state.rootSpan.startTimeUnixNano,\n ...childStarts\n );\n state.rootSpan.endTimeUnixNano = rootEnd;\n\n const payload = buildOtlpJsonPayload([state.rootSpan, ...childSpans]);\n this.traceStates.delete(trace.traceId);\n this.completedTraceQueue.set(trace.traceId, payload);\n this.startExportForTrace(trace.traceId);\n }\n\n async onSpanStart(span: AgentsSpan<any>): Promise<void> {\n const state = this.ensureTraceStateForSpan(span);\n const existing = state.spans.get(span.spanId);\n const record = existing ?? this.createSpanRecord(span, state.rootSpan.spanId);\n\n record.traceId = state.rootSpan.traceId;\n record.traceState = state.rootSpan.traceState;\n record.name = spanNameFor(span);\n record.kind = spanKindFor(span);\n record.startTimeUnixNano = isoToUnixNano(span.startedAt) ?? record.startTimeUnixNano;\n record.parentSpanId = span.parentId\n ? mapSpanId(span.parentId)\n : state.rootSpan.spanId;\n record.attributes = {\n ...record.attributes,\n ...baseSpanAttributes(span),\n };\n\n state.spans.set(span.spanId, record);\n }\n\n async onSpanEnd(span: AgentsSpan<any>): Promise<void> {\n const state = this.ensureTraceStateForSpan(span);\n const record =\n state.spans.get(span.spanId) ??\n this.createSpanRecord(span, state.rootSpan.spanId);\n\n record.attributes = {\n ...record.attributes,\n ...spanDataAttributes(span.spanData, this.includeRawPayloads),\n };\n record.endTimeUnixNano =\n isoToUnixNano(span.endedAt) ?? record.endTimeUnixNano ?? nowUnixNano();\n record.status = this.statusForSpan(span);\n\n if (span.error) {\n record.events = [\n ...(record.events ?? []),\n {\n name: \"exception\",\n timeUnixNano: record.endTimeUnixNano,\n attributes: {\n \"exception.type\": \"OpenAIAgentsError\",\n \"exception.message\": span.error.message,\n \"openai_agents.error_json\": JSON.stringify(span.error),\n },\n },\n ];\n }\n\n state.spans.set(span.spanId, record);\n }\n\n async shutdown(): Promise<void> {\n await this.forceFlush();\n }\n\n async forceFlush(): Promise<void> {\n for (let pass = 0; pass < 2; pass += 1) {\n for (const traceId of this.completedTraceQueue.keys()) {\n this.startExportForTrace(traceId);\n }\n\n if (this.pendingExports.size === 0) {\n return;\n }\n\n await Promise.all(Array.from(this.pendingExports.values()));\n\n if (this.completedTraceQueue.size === 0) {\n return;\n }\n }\n }\n\n private traceLikeFromSpan(\n span: AgentsSpan<any>\n ): Pick<AgentsTrace, \"traceId\" | \"name\" | \"groupId\" | \"metadata\"> {\n const rawMetadata = this.asRecord(span.traceMetadata);\n const nestedMetadata = this.asRecord(rawMetadata?.metadata);\n\n return {\n traceId: span.traceId,\n name:\n this.readString(rawMetadata?.workflow_name) ??\n this.readString(rawMetadata?.workflowName) ??\n \"OpenAI Agents Trace\",\n groupId:\n this.readString(rawMetadata?.group_id) ??\n this.readString(rawMetadata?.groupId) ??\n null,\n metadata: nestedMetadata ?? rawMetadata ?? {},\n };\n }\n\n private ensureTraceStateForSpan(span: AgentsSpan<any>): TraceState {\n const existing = this.traceStates.get(span.traceId);\n if (existing) {\n return existing;\n }\n\n const traceLike = this.traceLikeFromSpan(span);\n\n const upstreamContext = this.resolveUpstreamTraceContext(traceLike.metadata);\n const traceId = upstreamContext?.traceId ?? mapTraceId(span.traceId);\n const state: TraceState = {\n rootSpan: {\n traceId,\n spanId: syntheticRootSpanId(span.traceId),\n name: traceLike.name,\n kind: 1,\n startTimeUnixNano: isoToUnixNano(span.startedAt) ?? nowUnixNano(),\n parentSpanId: upstreamContext?.parentSpanId,\n traceState: upstreamContext?.traceState,\n attributes: baseTraceAttributes(traceLike, this.includeRawPayloads),\n status: { code: OTLP_STATUS_CODE_UNSET },\n events: [],\n },\n spans: new Map(),\n };\n\n this.traceStates.set(span.traceId, state);\n return state;\n }\n\n private createSpanRecord(\n span: AgentsSpan<any>,\n rootSpanId: string\n ): OtlpSpanRecord {\n return {\n traceId:\n this.traceStates.get(span.traceId)?.rootSpan.traceId ?? mapTraceId(span.traceId),\n spanId: mapSpanId(span.spanId),\n parentSpanId: span.parentId ? mapSpanId(span.parentId) : rootSpanId,\n name: spanNameFor(span),\n kind: spanKindFor(span),\n startTimeUnixNano: isoToUnixNano(span.startedAt) ?? nowUnixNano(),\n traceState: this.traceStates.get(span.traceId)?.rootSpan.traceState,\n attributes: {\n ...baseSpanAttributes(span),\n },\n status: { code: OTLP_STATUS_CODE_UNSET },\n events: [],\n };\n }\n\n private statusForSpan(span: AgentsSpan<any>): OtlpStatusRecord {\n if (span.error) {\n return {\n code: OTLP_STATUS_CODE_ERROR,\n message: span.error.message,\n };\n }\n\n return {\n code: OTLP_STATUS_CODE_OK,\n };\n }\n\n private async exportPayload(payload: ReturnType<typeof buildOtlpJsonPayload>) {\n const response = await fetchWithRetry(`${this.baseURL}/v1/traces`, {\n method: \"POST\",\n headers: {\n \"Content-Type\": \"application/json\",\n \"X-API-KEY\": this.apiKey,\n \"X-PromptLayer-Integration\": \"openai-agents-js\",\n ...getCommonHeaders(),\n },\n body: JSON.stringify(payload),\n });\n\n if (!response.ok) {\n throw new Error(\n `Failed to export OpenAI Agents traces: ${response.status} ${response.statusText}`\n );\n }\n }\n\n private startExportForTrace(traceId: string): void {\n if (this.pendingExports.has(traceId)) {\n return;\n }\n\n const payload = this.completedTraceQueue.get(traceId);\n if (!payload) {\n return;\n }\n\n const exportPromise = this.exportPayload(payload)\n .then(() => {\n this.completedTraceQueue.delete(traceId);\n })\n .catch((error) => {\n console.error(\n `Failed to export OpenAI Agents trace '${traceId}'.`,\n error\n );\n })\n .finally(() => {\n this.pendingExports.delete(traceId);\n });\n\n this.pendingExports.set(traceId, exportPromise);\n }\n\n private resolveUpstreamTraceContext(\n metadata: AgentsTrace[\"metadata\"] | AgentsSpan<any>[\"traceMetadata\"]\n ): UpstreamTraceContext | null {\n const metadataRecord = this.asRecord(metadata);\n if (!metadataRecord) {\n return null;\n }\n\n const traceparent = metadataRecord.traceparent;\n if (typeof traceparent !== \"string\" || !traceparent.trim()) {\n return null;\n }\n\n const match = traceparent.trim().match(TRACEPARENT_RE);\n if (!match) {\n return null;\n }\n\n const [, version, traceId, parentSpanId] = match;\n const normalizedVersion = version.toLowerCase();\n const normalizedTraceId = traceId.toLowerCase();\n const normalizedParentSpanId = parentSpanId.toLowerCase();\n if (\n normalizedVersion === \"ff\" ||\n normalizedTraceId === ZERO_TRACE_ID ||\n normalizedParentSpanId === ZERO_SPAN_ID\n ) {\n return null;\n }\n\n const traceState =\n typeof metadataRecord.tracestate === \"string\" && metadataRecord.tracestate.trim()\n ? metadataRecord.tracestate.trim()\n : undefined;\n\n return {\n traceId: normalizedTraceId,\n parentSpanId: normalizedParentSpanId,\n traceState,\n };\n }\n\n private asRecord(value: unknown): TraceMetadataRecord | null {\n if (!value || typeof value !== \"object\" || Array.isArray(value)) {\n return null;\n }\n\n return value as TraceMetadataRecord;\n }\n\n private readString(value: unknown): string | undefined {\n return typeof value === \"string\" && value.trim() ? value : undefined;\n }\n}\n","import { PromptLayerOpenAIAgentsProcessor } from \"@/integrations/openai-agents/processor\";\nimport { trimTrailingSlashes } from \"@/integrations/openai-agents/url\";\nimport { readEnv, requirePromptLayerApiKey } from \"@/utils/utils\";\n\nexport interface InstrumentOpenAIAgentsOptions {\n apiKey?: string;\n baseURL?: string;\n exclusive?: boolean;\n includeRawPayloads?: boolean;\n}\n\nconst resolveBaseURL = (baseURL?: string): string => {\n return trimTrailingSlashes(\n baseURL ?? readEnv(\"PROMPTLAYER_BASE_URL\") ?? \"https://api.promptlayer.com\"\n );\n};\n\nexport const instrumentOpenAIAgents = async ({\n apiKey,\n baseURL,\n exclusive = true,\n includeRawPayloads = true,\n}: InstrumentOpenAIAgentsOptions = {}): Promise<PromptLayerOpenAIAgentsProcessor> => {\n const resolvedApiKey = requirePromptLayerApiKey(apiKey);\n\n const agentsModule: typeof import(\"@openai/agents\") = await import(\n \"@openai/agents\"\n );\n\n const processor = new PromptLayerOpenAIAgentsProcessor({\n apiKey: resolvedApiKey,\n baseURL: resolveBaseURL(baseURL),\n includeRawPayloads,\n });\n\n if (exclusive) {\n agentsModule.setTraceProcessors([processor]);\n } else {\n agentsModule.addTraceProcessor(processor);\n }\n\n return processor;\n};\n"],"mappings":"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","names":["SPAN_KIND_INTERNAL","SPAN_KIND_CLIENT","isPlainObject","value","isScalar","sanitizeKey","key","toJsonable","item","stableStringify","normalize","input","acc","setStringAttr","attrs","setNumberAttr","numericValue","setJsonAttr","includeRawPayloads","flattenIndexedMessages","prefix","messages","message","index","normalizeToolCalls","toolCalls","call","_a","_b","_c","_d","_e","functionData","name","argumentsValue","e","getCallId","normalizeToolOutputContent","output","textContent","extractTextContent","normalizeToolCallMessage","normalizeToolResultMessage","outputOverride","toolCallId","content","textParts","part","partType","text","normalizeMessages","items","normalized","normalizeResponseMessage","role","RAW_TOOL_CALL_ITEM_TYPES","RAW_TOOL_RESULT_ITEM_TYPES","normalizeResponseItems","applyUsageAttributes","usage","generationAttributes","spanData","responseAttributes","responseObject","functionAttributes","agentAttributes","handoffAttributes","guardrailAttributes","customAttributes","rawSpanDataAttributes","telemetrySourceVersion","SDK_VERSION","spanKindFor","span","spanNameFor","baseTraceAttributes","trace","baseSpanAttributes","spanDataAttributes","OTLP_STATUS_CODE_UNSET","OTLP_STATUS_CODE_OK","OTLP_STATUS_CODE_ERROR","toAnyValue","value","item","key","nestedValue","toKeyValues","attributes","buildOtlpJsonPayload","spans","serviceName","scopeName","scopeVersion","SDK_VERSION","span","_a","_b","payload","event","__spreadValues","createHash","TRACE_HEX_RE","sha256Hex","value","mapTraceId","originalTraceId","suffix","mapSpanId","originalSpanId","syntheticRootSpanId","ISO_TIMESTAMP_RE","nowUnixNano","isoToUnixNano","timestamp","match","millis","base","fraction","timezone","fractionalNanos","minUnixNano","values","filtered","value","min","current","maxUnixNano","max","trimTrailingSlashes","value","end","TRACEPARENT_RE","ZERO_TRACE_ID","ZERO_SPAN_ID","PromptLayerOpenAIAgentsProcessor","apiKey","baseURL","includeRawPayloads","trimTrailingSlashes","trace","__async","_a","upstreamContext","traceId","mapTraceId","syntheticRootSpanId","nowUnixNano","baseTraceAttributes","OTLP_STATUS_CODE_UNSET","state","childSpans","left","right","childStarts","span","childEnds","rootEnd","maxUnixNano","minUnixNano","payload","buildOtlpJsonPayload","existing","record","spanNameFor","spanKindFor","isoToUnixNano","mapSpanId","__spreadValues","baseSpanAttributes","_b","_c","_d","spanDataAttributes","pass","_e","rawMetadata","nestedMetadata","traceLike","rootSpanId","OTLP_STATUS_CODE_ERROR","OTLP_STATUS_CODE_OK","response","fetchWithRetry","getCommonHeaders","exportPromise","error","metadata","metadataRecord","traceparent","match","version","parentSpanId","normalizedVersion","normalizedTraceId","normalizedParentSpanId","traceState","value","resolveBaseURL","baseURL","_a","trimTrailingSlashes","readEnv","instrumentOpenAIAgents","_0","__async","apiKey","exclusive","includeRawPayloads","resolvedApiKey","requirePromptLayerApiKey","agentsModule","processor","PromptLayerOpenAIAgentsProcessor"]}
|
package/dist/index.d.mts
CHANGED
|
@@ -23,6 +23,90 @@ interface Pagination {
|
|
|
23
23
|
per_page?: number;
|
|
24
24
|
label?: string;
|
|
25
25
|
}
|
|
26
|
+
interface PullSkillCollectionParams {
|
|
27
|
+
label?: string;
|
|
28
|
+
version?: number;
|
|
29
|
+
format?: string;
|
|
30
|
+
}
|
|
31
|
+
interface InitialSkillFileUpdate {
|
|
32
|
+
path: string;
|
|
33
|
+
content: string;
|
|
34
|
+
[k: string]: unknown;
|
|
35
|
+
}
|
|
36
|
+
interface SkillFileUpdate extends InitialSkillFileUpdate {
|
|
37
|
+
}
|
|
38
|
+
interface SkillFileMove {
|
|
39
|
+
from: string;
|
|
40
|
+
to: string;
|
|
41
|
+
[k: string]: unknown;
|
|
42
|
+
}
|
|
43
|
+
type SkillCollectionProvider = "claude_code" | "openai" | "openclaw";
|
|
44
|
+
interface CreateSkillCollection {
|
|
45
|
+
name: string;
|
|
46
|
+
folderId?: number;
|
|
47
|
+
provider: SkillCollectionProvider;
|
|
48
|
+
files?: InitialSkillFileUpdate[];
|
|
49
|
+
commitMessage?: string;
|
|
50
|
+
}
|
|
51
|
+
type SkillCollectionZipSource = Blob | ArrayBuffer | Uint8Array;
|
|
52
|
+
interface PublishSkillCollectionFromZip {
|
|
53
|
+
name: string;
|
|
54
|
+
zipFile: SkillCollectionZipSource;
|
|
55
|
+
fileName?: string;
|
|
56
|
+
folderId?: number;
|
|
57
|
+
provider: SkillCollectionProvider;
|
|
58
|
+
commitMessage?: string;
|
|
59
|
+
}
|
|
60
|
+
type PublishSkillCollection = CreateSkillCollection | PublishSkillCollectionFromZip;
|
|
61
|
+
interface SaveSkillCollectionVersion {
|
|
62
|
+
fileUpdates?: SkillFileUpdate[];
|
|
63
|
+
moves?: SkillFileMove[];
|
|
64
|
+
deletes?: string[];
|
|
65
|
+
commitMessage?: string;
|
|
66
|
+
releaseLabel?: string;
|
|
67
|
+
provider?: SkillCollectionProvider;
|
|
68
|
+
}
|
|
69
|
+
interface UpdateSkillCollection extends SaveSkillCollectionVersion {
|
|
70
|
+
name?: string;
|
|
71
|
+
}
|
|
72
|
+
interface SkillCollection {
|
|
73
|
+
id: string | number;
|
|
74
|
+
name: string;
|
|
75
|
+
provider?: SkillCollectionProvider | null;
|
|
76
|
+
folder_id?: number | null;
|
|
77
|
+
created_at?: string;
|
|
78
|
+
updated_at?: string;
|
|
79
|
+
[k: string]: unknown;
|
|
80
|
+
}
|
|
81
|
+
interface SkillCollectionVersion {
|
|
82
|
+
id?: string | number;
|
|
83
|
+
version?: number;
|
|
84
|
+
provider?: SkillCollectionProvider | null;
|
|
85
|
+
release_label?: string | null;
|
|
86
|
+
commit_message?: string | null;
|
|
87
|
+
created_at?: string;
|
|
88
|
+
[k: string]: unknown;
|
|
89
|
+
}
|
|
90
|
+
interface CreateSkillCollectionResponse {
|
|
91
|
+
success: boolean;
|
|
92
|
+
skill_collection: SkillCollection;
|
|
93
|
+
version?: SkillCollectionVersion | null;
|
|
94
|
+
[k: string]: unknown;
|
|
95
|
+
}
|
|
96
|
+
type PublishSkillCollectionResponse = CreateSkillCollectionResponse;
|
|
97
|
+
interface PullSkillCollectionResponse {
|
|
98
|
+
success: boolean;
|
|
99
|
+
skill_collection: SkillCollection;
|
|
100
|
+
files: Record<string, string>;
|
|
101
|
+
version: SkillCollectionVersion | null;
|
|
102
|
+
[k: string]: unknown;
|
|
103
|
+
}
|
|
104
|
+
interface UpdateSkillCollectionResponse {
|
|
105
|
+
success: boolean;
|
|
106
|
+
skill_collection: SkillCollection;
|
|
107
|
+
version?: SkillCollectionVersion | null;
|
|
108
|
+
[k: string]: unknown;
|
|
109
|
+
}
|
|
26
110
|
interface CustomProvider {
|
|
27
111
|
id: number;
|
|
28
112
|
name: string;
|
|
@@ -506,6 +590,18 @@ declare class GroupManager {
|
|
|
506
590
|
create: () => Promise<number | boolean>;
|
|
507
591
|
}
|
|
508
592
|
|
|
593
|
+
type PullSkillCollectionResult = PullSkillCollectionResponse | ArrayBuffer | null;
|
|
594
|
+
|
|
595
|
+
declare class SkillManager {
|
|
596
|
+
apiKey: string;
|
|
597
|
+
baseURL: string;
|
|
598
|
+
throwOnError: boolean;
|
|
599
|
+
constructor(apiKey: string, baseURL: string, throwOnError?: boolean);
|
|
600
|
+
pull: (identifier: string, params?: Partial<PullSkillCollectionParams>) => Promise<PullSkillCollectionResult>;
|
|
601
|
+
publish: (body: PublishSkillCollection) => Promise<PublishSkillCollectionResponse | null>;
|
|
602
|
+
update: (identifier: string, body: UpdateSkillCollection) => Promise<UpdateSkillCollectionResponse | null>;
|
|
603
|
+
}
|
|
604
|
+
|
|
509
605
|
declare const wrapWithSpan: (functionName: string, func: Function, attributes?: Record<string, any>) => (...args: any[]) => any;
|
|
510
606
|
|
|
511
607
|
declare class TemplateManager {
|
|
@@ -540,6 +636,7 @@ declare class PromptLayer {
|
|
|
540
636
|
apiKey: string;
|
|
541
637
|
baseURL: string;
|
|
542
638
|
templates: TemplateManager;
|
|
639
|
+
skills: SkillManager;
|
|
543
640
|
group: GroupManager;
|
|
544
641
|
track: TrackManager;
|
|
545
642
|
enableTracing: boolean;
|
|
@@ -562,4 +659,4 @@ declare class PromptLayer {
|
|
|
562
659
|
logRequest(body: LogRequest): Promise<RequestLog | null>;
|
|
563
660
|
}
|
|
564
661
|
|
|
565
|
-
export { type ClientOptions, PromptLayer };
|
|
662
|
+
export { type ClientOptions, type CreateSkillCollection, type CreateSkillCollectionResponse, type InitialSkillFileUpdate, PromptLayer, type PublishSkillCollection, type PublishSkillCollectionFromZip, type PublishSkillCollectionResponse, type PullSkillCollectionParams, type PullSkillCollectionResponse, type SaveSkillCollectionVersion, type SkillCollection, type SkillCollectionVersion, type SkillFileMove, type SkillFileUpdate, type UpdateSkillCollection, type UpdateSkillCollectionResponse };
|
package/dist/index.d.ts
CHANGED
|
@@ -23,6 +23,90 @@ interface Pagination {
|
|
|
23
23
|
per_page?: number;
|
|
24
24
|
label?: string;
|
|
25
25
|
}
|
|
26
|
+
interface PullSkillCollectionParams {
|
|
27
|
+
label?: string;
|
|
28
|
+
version?: number;
|
|
29
|
+
format?: string;
|
|
30
|
+
}
|
|
31
|
+
interface InitialSkillFileUpdate {
|
|
32
|
+
path: string;
|
|
33
|
+
content: string;
|
|
34
|
+
[k: string]: unknown;
|
|
35
|
+
}
|
|
36
|
+
interface SkillFileUpdate extends InitialSkillFileUpdate {
|
|
37
|
+
}
|
|
38
|
+
interface SkillFileMove {
|
|
39
|
+
from: string;
|
|
40
|
+
to: string;
|
|
41
|
+
[k: string]: unknown;
|
|
42
|
+
}
|
|
43
|
+
type SkillCollectionProvider = "claude_code" | "openai" | "openclaw";
|
|
44
|
+
interface CreateSkillCollection {
|
|
45
|
+
name: string;
|
|
46
|
+
folderId?: number;
|
|
47
|
+
provider: SkillCollectionProvider;
|
|
48
|
+
files?: InitialSkillFileUpdate[];
|
|
49
|
+
commitMessage?: string;
|
|
50
|
+
}
|
|
51
|
+
type SkillCollectionZipSource = Blob | ArrayBuffer | Uint8Array;
|
|
52
|
+
interface PublishSkillCollectionFromZip {
|
|
53
|
+
name: string;
|
|
54
|
+
zipFile: SkillCollectionZipSource;
|
|
55
|
+
fileName?: string;
|
|
56
|
+
folderId?: number;
|
|
57
|
+
provider: SkillCollectionProvider;
|
|
58
|
+
commitMessage?: string;
|
|
59
|
+
}
|
|
60
|
+
type PublishSkillCollection = CreateSkillCollection | PublishSkillCollectionFromZip;
|
|
61
|
+
interface SaveSkillCollectionVersion {
|
|
62
|
+
fileUpdates?: SkillFileUpdate[];
|
|
63
|
+
moves?: SkillFileMove[];
|
|
64
|
+
deletes?: string[];
|
|
65
|
+
commitMessage?: string;
|
|
66
|
+
releaseLabel?: string;
|
|
67
|
+
provider?: SkillCollectionProvider;
|
|
68
|
+
}
|
|
69
|
+
interface UpdateSkillCollection extends SaveSkillCollectionVersion {
|
|
70
|
+
name?: string;
|
|
71
|
+
}
|
|
72
|
+
interface SkillCollection {
|
|
73
|
+
id: string | number;
|
|
74
|
+
name: string;
|
|
75
|
+
provider?: SkillCollectionProvider | null;
|
|
76
|
+
folder_id?: number | null;
|
|
77
|
+
created_at?: string;
|
|
78
|
+
updated_at?: string;
|
|
79
|
+
[k: string]: unknown;
|
|
80
|
+
}
|
|
81
|
+
interface SkillCollectionVersion {
|
|
82
|
+
id?: string | number;
|
|
83
|
+
version?: number;
|
|
84
|
+
provider?: SkillCollectionProvider | null;
|
|
85
|
+
release_label?: string | null;
|
|
86
|
+
commit_message?: string | null;
|
|
87
|
+
created_at?: string;
|
|
88
|
+
[k: string]: unknown;
|
|
89
|
+
}
|
|
90
|
+
interface CreateSkillCollectionResponse {
|
|
91
|
+
success: boolean;
|
|
92
|
+
skill_collection: SkillCollection;
|
|
93
|
+
version?: SkillCollectionVersion | null;
|
|
94
|
+
[k: string]: unknown;
|
|
95
|
+
}
|
|
96
|
+
type PublishSkillCollectionResponse = CreateSkillCollectionResponse;
|
|
97
|
+
interface PullSkillCollectionResponse {
|
|
98
|
+
success: boolean;
|
|
99
|
+
skill_collection: SkillCollection;
|
|
100
|
+
files: Record<string, string>;
|
|
101
|
+
version: SkillCollectionVersion | null;
|
|
102
|
+
[k: string]: unknown;
|
|
103
|
+
}
|
|
104
|
+
interface UpdateSkillCollectionResponse {
|
|
105
|
+
success: boolean;
|
|
106
|
+
skill_collection: SkillCollection;
|
|
107
|
+
version?: SkillCollectionVersion | null;
|
|
108
|
+
[k: string]: unknown;
|
|
109
|
+
}
|
|
26
110
|
interface CustomProvider {
|
|
27
111
|
id: number;
|
|
28
112
|
name: string;
|
|
@@ -506,6 +590,18 @@ declare class GroupManager {
|
|
|
506
590
|
create: () => Promise<number | boolean>;
|
|
507
591
|
}
|
|
508
592
|
|
|
593
|
+
type PullSkillCollectionResult = PullSkillCollectionResponse | ArrayBuffer | null;
|
|
594
|
+
|
|
595
|
+
declare class SkillManager {
|
|
596
|
+
apiKey: string;
|
|
597
|
+
baseURL: string;
|
|
598
|
+
throwOnError: boolean;
|
|
599
|
+
constructor(apiKey: string, baseURL: string, throwOnError?: boolean);
|
|
600
|
+
pull: (identifier: string, params?: Partial<PullSkillCollectionParams>) => Promise<PullSkillCollectionResult>;
|
|
601
|
+
publish: (body: PublishSkillCollection) => Promise<PublishSkillCollectionResponse | null>;
|
|
602
|
+
update: (identifier: string, body: UpdateSkillCollection) => Promise<UpdateSkillCollectionResponse | null>;
|
|
603
|
+
}
|
|
604
|
+
|
|
509
605
|
declare const wrapWithSpan: (functionName: string, func: Function, attributes?: Record<string, any>) => (...args: any[]) => any;
|
|
510
606
|
|
|
511
607
|
declare class TemplateManager {
|
|
@@ -540,6 +636,7 @@ declare class PromptLayer {
|
|
|
540
636
|
apiKey: string;
|
|
541
637
|
baseURL: string;
|
|
542
638
|
templates: TemplateManager;
|
|
639
|
+
skills: SkillManager;
|
|
543
640
|
group: GroupManager;
|
|
544
641
|
track: TrackManager;
|
|
545
642
|
enableTracing: boolean;
|
|
@@ -562,4 +659,4 @@ declare class PromptLayer {
|
|
|
562
659
|
logRequest(body: LogRequest): Promise<RequestLog | null>;
|
|
563
660
|
}
|
|
564
661
|
|
|
565
|
-
export { type ClientOptions, PromptLayer };
|
|
662
|
+
export { type ClientOptions, type CreateSkillCollection, type CreateSkillCollectionResponse, type InitialSkillFileUpdate, PromptLayer, type PublishSkillCollection, type PublishSkillCollectionFromZip, type PublishSkillCollectionResponse, type PullSkillCollectionParams, type PullSkillCollectionResponse, type SaveSkillCollectionVersion, type SkillCollection, type SkillCollectionVersion, type SkillFileMove, type SkillFileUpdate, type UpdateSkillCollection, type UpdateSkillCollectionResponse };
|