aigie-sdk 0.0.1
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/index.d.mts +2268 -0
- package/dist/index.d.ts +2268 -0
- package/dist/index.js +7807 -0
- package/dist/index.js.map +1 -0
- package/dist/index.mjs +7711 -0
- package/dist/index.mjs.map +1 -0
- package/dist/testing/index.d.mts +7 -0
- package/dist/testing/index.d.ts +7 -0
- package/dist/testing/index.js +649 -0
- package/dist/testing/index.js.map +1 -0
- package/dist/testing/index.mjs +646 -0
- package/dist/testing/index.mjs.map +1 -0
- package/package.json +143 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/utils/uuid.ts","../src/client.ts","../src/index.ts","../src/decorators.ts","../src/exceptions.ts","../src/tools.ts","../src/agent-types.ts","../src/integrations/anthropic/index.ts","../src/cost-tracking.ts","../src/integrations/http/index.ts","../src/integrations/autogen/index.ts","../src/integrations/browser-use/index.ts","../src/integrations/claude-agent-sdk/index.ts","../src/integrations/crewai/index.ts","../src/integrations/dspy/index.ts","../src/integrations/google-adk/index.ts","../src/integrations/instructor/index.ts","../src/integrations/langchain/index.ts","../src/integrations/langgraph/index.ts","../src/integrations/llamaindex/index.ts","../src/integrations/openai/index.ts","../src/integrations/openai-agents/index.ts","../src/integrations/pipecat/index.ts","../src/integrations/registry.ts","../src/integrations/semantic-kernel/index.ts","../src/integrations/strands/index.ts","../src/integrations/index.ts","../src/cache.ts","../src/annotations/client.ts","../src/feedback/client.ts","../src/media/index.ts","../src/result.ts","../src/run-context.ts","../src/runner.ts","../src/agent.ts","../src/agents/execution-cycle.ts","../src/agents/goal-tracking.ts","../src/agents/loop-detection.ts","../src/drift/monitor.ts","../src/guardrails/base.ts","../src/evaluation/client.ts","../src/evaluation/judge.ts","../src/signals.ts","../src/metrics/index.ts","../src/prompts/index.ts","../src/realtime/remediation-engine.ts","../src/rules/index.ts","../src/diagnostics.ts"],"names":["trace","GuardrailAction","SignalType","SignalSeverity","instrumented","tracedFetch","isPatched","originals","patch","unpatch","patchMethod","createTracedAgentRun","createTracedAgentExecute","tool","createTracedStream","createTracedRunnerRun","extractToolNames","getKyte","crypto","score"],"mappings":"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","file":"index.mjs","sourcesContent":["/**\n * UUID v7 Implementation\n * Time-ordered UUIDs for better database indexing\n */\n\nlet lastTimestamp = 0;\nlet sequence = 0;\n\n/**\n * Generate a UUID v7 (time-ordered)\n */\nexport function uuidv7(): string {\n let timestamp = Date.now();\n\n // Handle same-millisecond generation\n if (timestamp === lastTimestamp) {\n sequence++;\n if (sequence > 0xfff) {\n // Wait for next millisecond\n while (Date.now() === lastTimestamp) {\n // busy wait\n }\n timestamp = Date.now();\n sequence = 0;\n }\n } else {\n sequence = 0;\n lastTimestamp = timestamp;\n }\n\n // 48-bit timestamp\n const timestampHex = timestamp.toString(16).padStart(12, '0');\n\n // 12-bit sequence with version 7\n const seqHex = ((0x7 << 12) | (sequence & 0xfff)).toString(16).padStart(4, '0');\n\n // 62-bit random with variant\n const randomBits = new Uint8Array(8);\n if (typeof crypto !== 'undefined' && crypto.getRandomValues) {\n crypto.getRandomValues(randomBits);\n } else {\n for (let i = 0; i < 8; i++) {\n randomBits[i] = Math.floor(Math.random() * 256);\n }\n }\n\n // Set variant bits (10xx xxxx)\n randomBits[0] = (randomBits[0] & 0x3f) | 0x80;\n\n const randomHex = Array.from(randomBits)\n .map((b) => b.toString(16).padStart(2, '0'))\n .join('');\n\n // Format: xxxxxxxx-xxxx-7xxx-yxxx-xxxxxxxxxxxx\n return [\n timestampHex.slice(0, 8),\n timestampHex.slice(8, 12),\n seqHex,\n randomHex.slice(0, 4),\n randomHex.slice(4, 16),\n ].join('-');\n}\n\n/**\n * Validate if a string is a valid UUID v7\n */\nexport function isValidUuidv7(uuid: string): boolean {\n const regex = /^[0-9a-f]{8}-[0-9a-f]{4}-7[0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$/i;\n return regex.test(uuid);\n}\n\n/**\n * Extract timestamp from UUID v7\n */\nexport function extractTimestamp(uuid: string): number {\n const hex = uuid.replace(/-/g, '').slice(0, 12);\n return parseInt(hex, 16);\n}\n\n/**\n * Convert UUID v7 to Date\n */\nexport function uuidv7ToDate(uuid: string): Date {\n return new Date(extractTimestamp(uuid));\n}\n\n/**\n * Compare two UUID v7s by timestamp\n */\nexport function compareUuidv7(a: string, b: string): number {\n return extractTimestamp(a) - extractTimestamp(b);\n}\n\n/**\n * Generate batch of monotonically increasing UUID v7s\n */\nexport function generateBatchUuidv7(count: number): string[] {\n const uuids: string[] = [];\n for (let i = 0; i < count; i++) {\n uuids.push(uuidv7());\n }\n return uuids;\n}\n\n/**\n * Create UUID v7 with specific timestamp\n */\nexport function uuidv7WithTimestamp(timestamp: number): string {\n const timestampHex = timestamp.toString(16).padStart(12, '0');\n const seqHex = (0x7000).toString(16);\n\n const randomBits = new Uint8Array(8);\n if (typeof crypto !== 'undefined' && crypto.getRandomValues) {\n crypto.getRandomValues(randomBits);\n } else {\n for (let i = 0; i < 8; i++) {\n randomBits[i] = Math.floor(Math.random() * 256);\n }\n }\n randomBits[0] = (randomBits[0] & 0x3f) | 0x80;\n\n const randomHex = Array.from(randomBits)\n .map((b) => b.toString(16).padStart(2, '0'))\n .join('');\n\n return [\n timestampHex.slice(0, 8),\n timestampHex.slice(8, 12),\n seqHex,\n randomHex.slice(0, 4),\n randomHex.slice(4, 16),\n ].join('-');\n}\n\n/**\n * Get age of UUID v7 in milliseconds\n */\nexport function getUuidv7Age(uuid: string): number {\n return Date.now() - extractTimestamp(uuid);\n}\n","/**\n * Kyte Client - Core SDK class for tracing and monitoring\n */\n\nimport { AsyncLocalStorage } from 'node:async_hooks';\nimport type {\n ActiveSpan,\n AigieConfig,\n Score,\n Span,\n SpanBuilder,\n SpanOptions,\n SpanType,\n SpanUpdateData,\n TokenUsage,\n Trace,\n TraceOptions,\n} from './types';\nimport { uuidv7 } from './utils/uuid';\n\n// ============================================================================\n// Context Storage\n// ============================================================================\n\ninterface TracingContext {\n traceId: string;\n spanId?: string;\n parentSpanId?: string;\n}\n\nconst contextStorage = new AsyncLocalStorage<TracingContext>();\n\n// ============================================================================\n// Global Client Instance\n// ============================================================================\n\nlet globalClient: AigieClient | null = null;\n\n/**\n * Initialize the Kyte SDK\n */\nexport function initKyte(config: AigieConfig): AigieClient {\n globalClient = new AigieClient(config);\n return globalClient;\n}\n\n/**\n * Alias for initKyte\n */\nexport const initAigie = initKyte;\n\n/**\n * Get the global Kyte client\n */\nexport function getKyte(): AigieClient {\n if (!globalClient) {\n throw new Error('Kyte SDK not initialized. Call initKyte() first.');\n }\n return globalClient;\n}\n\n/**\n * Alias for getKyte\n */\nexport const getAigie = getKyte;\n\n// ============================================================================\n// Span Builder Implementation\n// ============================================================================\n\nclass SpanBuilderImpl implements SpanBuilder {\n private client: AigieClient;\n private options: SpanOptions = {};\n\n constructor(client: AigieClient, name: string) {\n this.client = client;\n this.options.name = name;\n }\n\n setName(name: string): SpanBuilder {\n this.options.name = name;\n return this;\n }\n\n setType(type: SpanType): SpanBuilder {\n this.options.type = type;\n return this;\n }\n\n setInput(input: Record<string, any>): SpanBuilder {\n this.options.input = input;\n return this;\n }\n\n setMetadata(metadata: Record<string, any>): SpanBuilder {\n this.options.metadata = metadata;\n return this;\n }\n\n addMetadata(key: string, value: any): SpanBuilder {\n this.options.metadata = { ...this.options.metadata, [key]: value };\n return this;\n }\n\n setTags(tags: string[]): SpanBuilder {\n this.options.tags = tags;\n return this;\n }\n\n addTag(tag: string): SpanBuilder {\n this.options.tags = [...(this.options.tags || []), tag];\n return this;\n }\n\n setUserId(userId: string): SpanBuilder {\n this.options.userId = userId;\n return this;\n }\n\n setSessionId(sessionId: string): SpanBuilder {\n this.options.sessionId = sessionId;\n return this;\n }\n\n setModelName(modelName: string): SpanBuilder {\n this.options.modelName = modelName;\n return this;\n }\n\n start(): ActiveSpan {\n return this.client.startSpan(this.options);\n }\n}\n\n// ============================================================================\n// Active Span Implementation\n// ============================================================================\n\nclass ActiveSpanImpl implements ActiveSpan {\n readonly id: string;\n readonly traceId: string;\n private client: AigieClient;\n private span: Span;\n private scores: Score[] = [];\n private ended = false;\n\n constructor(client: AigieClient, span: Span) {\n this.client = client;\n this.span = span;\n this.id = span.id;\n this.traceId = span.traceId;\n }\n\n update(data: Partial<SpanUpdateData>): ActiveSpan {\n if (this.ended) {\n console.warn('Cannot update ended span');\n return this;\n }\n\n if (data.output) this.span.output = data.output;\n if (data.tokens) this.span.tokens = data.tokens;\n if (data.cost) this.span.cost = data.cost;\n if (data.metadata) this.span.metadata = { ...this.span.metadata, ...data.metadata };\n if (data.tags) this.span.tags = [...this.span.tags, ...data.tags];\n if (data.modelName) this.span.modelName = data.modelName;\n\n return this;\n }\n\n setOutput(output: Record<string, any>): ActiveSpan {\n return this.update({ output });\n }\n\n setTokens(tokens: TokenUsage): ActiveSpan {\n return this.update({ tokens });\n }\n\n setCost(cost: number): ActiveSpan {\n return this.update({ cost });\n }\n\n addScore(score: Score): ActiveSpan {\n this.scores.push(score);\n return this;\n }\n\n setError(error: Error | string): ActiveSpan {\n if (this.ended) {\n console.warn('Cannot set error on ended span');\n return this;\n }\n\n this.span.status = 'failed';\n this.span.errorMessage = typeof error === 'string' ? error : error.message;\n return this;\n }\n\n async end(): Promise<void> {\n if (this.ended) {\n console.warn('Span already ended');\n return;\n }\n\n this.ended = true;\n this.span.endTime = new Date().toISOString();\n this.span.durationNs =\n (new Date(this.span.endTime).getTime() - new Date(this.span.startTime).getTime()) * 1_000_000;\n\n if (this.span.status === 'pending') {\n this.span.status = 'success';\n }\n\n await this.client.sendSpanUpdate(this.span);\n\n // Send scores\n for (const score of this.scores) {\n await this.client.addScore(this.traceId, score, this.id);\n }\n }\n}\n\n// ============================================================================\n// Main Client\n// ============================================================================\n\nexport class AigieClient {\n private config: AigieConfig;\n private eventQueue: Record<string, any>[] = [];\n private batchTimer: NodeJS.Timeout | null = null;\n private enabled: boolean;\n\n constructor(config: AigieConfig) {\n // Env var auto-detection with priority chain\n const rawUrl =\n config.apiUrl ||\n process.env.KYTTE_URL ||\n process.env.AIGIE_URL ||\n process.env.AIGIE_API_URL ||\n '';\n // Normalize: strip trailing /v or /v1 so SDK can append /v1/... paths\n const apiUrl = rawUrl.replace(/\\/v1?\\/?$/, '');\n const apiKey =\n config.apiKey ||\n process.env.KYTTE_TOKEN ||\n process.env.AIGIE_TOKEN ||\n process.env.AIGIE_API_KEY ||\n '';\n\n this.config = {\n batchEnabled: true,\n batchSize: 10,\n batchTimeout: 5000,\n maxQueueSize: 1000,\n maxRetries: 1,\n retryDelay: 2000,\n enabled: true,\n ...config,\n apiUrl,\n apiKey,\n };\n this.enabled = this.config.enabled ?? true;\n }\n\n // ============================================================================\n // Enable/Disable\n // ============================================================================\n\n isEnabled(): boolean {\n return this.enabled;\n }\n\n disable(): void {\n this.enabled = false;\n }\n\n enable(): void {\n this.enabled = true;\n }\n\n // ============================================================================\n // Context Management\n // ============================================================================\n\n getCurrentContext(): TracingContext | undefined {\n return contextStorage.getStore();\n }\n\n // ============================================================================\n // Fluent Builder API\n // ============================================================================\n\n spanBuilder(name: string): SpanBuilder {\n return new SpanBuilderImpl(this, name);\n }\n\n startSpan(options: SpanOptions): ActiveSpan {\n const context = this.getCurrentContext();\n const spanId = uuidv7();\n const traceId = context?.traceId || uuidv7();\n\n const span: Span = {\n id: spanId,\n traceId,\n parentSpanId: context?.spanId || options.parentSpanId,\n name: options.name || 'unnamed-span',\n type: options.type || 'custom',\n input: options.input || {},\n status: 'pending',\n tags: [...(this.config.defaultTags || []), ...(options.tags || [])],\n metadata: { ...this.config.defaultMetadata, ...options.metadata },\n modelName: options.modelName,\n startTime: new Date().toISOString(),\n createdAt: new Date().toISOString(),\n };\n\n // Send span-create event immediately\n this.queueEvent(this.spanToEvent(span));\n\n return new ActiveSpanImpl(this, span);\n }\n\n // ============================================================================\n // Trace API\n // ============================================================================\n\n async trace<T>(name: string, fn: () => T | Promise<T>, options: TraceOptions = {}): Promise<T> {\n if (!this.enabled) {\n return fn();\n }\n\n const traceId = uuidv7();\n const trace: Trace = {\n id: traceId,\n name,\n type: options.type || 'chain',\n input: options.input || {},\n status: 'pending',\n tags: [...(this.config.defaultTags || []), ...(options.tags || [])],\n metadata: { ...this.config.defaultMetadata, ...options.metadata },\n projectName: this.config.projectName,\n userId: options.userId || this.config.defaultUserId,\n sessionId: options.sessionId || this.config.defaultSessionId,\n startTime: new Date().toISOString(),\n createdAt: new Date().toISOString(),\n };\n\n const context: TracingContext = { traceId };\n\n // Send trace-create event immediately\n this.queueEvent(this.traceToEvent(trace));\n\n try {\n const result = await contextStorage.run(context, async () => {\n return await fn();\n });\n\n trace.status = 'success';\n trace.output = { result: typeof result === 'object' ? result : { value: result } };\n trace.endTime = new Date().toISOString();\n trace.durationNs =\n (new Date(trace.endTime).getTime() - new Date(trace.startTime).getTime()) * 1_000_000;\n\n await this.sendTraceUpdate(trace);\n return result;\n } catch (error) {\n trace.status = 'failed';\n trace.errorMessage = error instanceof Error ? error.message : String(error);\n trace.endTime = new Date().toISOString();\n trace.durationNs =\n (new Date(trace.endTime).getTime() - new Date(trace.startTime).getTime()) * 1_000_000;\n\n await this.sendTraceUpdate(trace);\n throw error;\n }\n }\n\n // ============================================================================\n // Span API\n // ============================================================================\n\n async span<T>(name: string, fn: () => T | Promise<T>, options: SpanOptions = {}): Promise<T> {\n if (!this.enabled) {\n return fn();\n }\n\n const context = this.getCurrentContext();\n if (!context) {\n // No active trace, create one\n return this.trace(name, fn, options);\n }\n\n const spanId = uuidv7();\n const span: Span = {\n id: spanId,\n traceId: context.traceId,\n parentSpanId: context.spanId || options.parentSpanId,\n name,\n type: options.type || 'custom',\n input: options.input || {},\n status: 'pending',\n tags: [...(this.config.defaultTags || []), ...(options.tags || [])],\n metadata: { ...this.config.defaultMetadata, ...options.metadata },\n modelName: options.modelName,\n startTime: new Date().toISOString(),\n createdAt: new Date().toISOString(),\n };\n\n const newContext: TracingContext = {\n traceId: context.traceId,\n spanId,\n parentSpanId: context.spanId,\n };\n\n // Send span-create event immediately\n this.queueEvent(this.spanToEvent(span));\n\n try {\n const result = await contextStorage.run(newContext, async () => {\n return await fn();\n });\n\n span.status = 'success';\n span.output = { result: typeof result === 'object' ? result : { value: result } };\n span.endTime = new Date().toISOString();\n span.durationNs =\n (new Date(span.endTime).getTime() - new Date(span.startTime).getTime()) * 1_000_000;\n\n await this.sendSpanUpdate(span);\n return result;\n } catch (error) {\n span.status = 'failed';\n span.errorMessage = error instanceof Error ? error.message : String(error);\n span.endTime = new Date().toISOString();\n span.durationNs =\n (new Date(span.endTime).getTime() - new Date(span.startTime).getTime()) * 1_000_000;\n\n await this.sendSpanUpdate(span);\n throw error;\n }\n }\n\n // ============================================================================\n // Score API\n // ============================================================================\n\n async addScore(traceId: string, score: Score, spanId?: string): Promise<void> {\n if (!this.enabled) return;\n\n try {\n await this.sendToApi('/v1/scores', {\n traceId,\n spanId,\n ...score,\n });\n } catch (error) {\n if (this.config.debug) {\n console.error('Failed to add score:', error);\n }\n }\n }\n\n // ============================================================================\n // Send APIs\n // ============================================================================\n\n async sendTraceUpdate(trace: Trace): Promise<void> {\n if (!this.enabled) return;\n\n const event = this.traceUpdateEvent(trace);\n if (this.config.batchEnabled) {\n this.queueEvent(event);\n } else {\n await this.sendToApi('/v1/ingestion', { batch: [event] });\n }\n }\n\n async sendSpanUpdate(span: Span): Promise<void> {\n if (!this.enabled) return;\n\n const event = this.spanUpdateEvent(span);\n if (this.config.batchEnabled) {\n this.queueEvent(event);\n } else {\n await this.sendToApi('/v1/ingestion', { batch: [event] });\n }\n }\n\n // ============================================================================\n // Batching\n // ============================================================================\n\n private queueEvent(event: Record<string, any>): void {\n const maxSize = this.config.maxQueueSize || 1000;\n if (this.eventQueue.length >= maxSize) {\n // Drop oldest events to prevent memory leaks\n this.eventQueue.splice(0, this.eventQueue.length - maxSize + 1);\n if (this.config.debug) {\n console.warn(`Event queue exceeded max size (${maxSize}), dropping oldest events`);\n }\n }\n\n this.eventQueue.push(event);\n\n if (this.eventQueue.length >= (this.config.batchSize || 10)) {\n this.flushBatch();\n } else if (!this.batchTimer) {\n this.batchTimer = setTimeout(() => {\n this.flushBatch();\n }, this.config.batchTimeout || 5000);\n }\n }\n\n private mapSpanType(type: string): string {\n const typeMap: Record<string, string> = {\n llm: 'generation',\n custom: 'span',\n chain: 'span',\n tool: 'tool',\n retrieval: 'retrieval',\n retriever: 'retrieval',\n agent: 'agent',\n embedding: 'generation',\n prompt: 'span',\n guardrail: 'span',\n evaluation: 'span',\n remediation: 'span',\n };\n return typeMap[type] || 'span';\n }\n\n private traceToEvent(trace: Trace): Record<string, any> {\n return {\n id: uuidv7(),\n timestamp: new Date().toISOString(),\n type: 'trace-create',\n body: {\n id: trace.id,\n name: trace.name,\n input: trace.input,\n output: trace.output,\n status: trace.status,\n status_message: trace.errorMessage,\n metadata: trace.metadata,\n tags: trace.tags,\n user_id: trace.userId,\n session_id: trace.sessionId,\n environment: this.config.environment,\n start_time: trace.startTime,\n end_time: trace.endTime,\n duration_ns: trace.durationNs,\n },\n };\n }\n\n private buildTokenUsage(tokens?: TokenUsage) {\n if (!tokens) return undefined;\n return {\n prompt_tokens: tokens.prompt,\n completion_tokens: tokens.completion,\n total_tokens: tokens.total,\n cached_tokens: tokens.cached,\n };\n }\n\n private spanToEvent(span: Span): Record<string, any> {\n return {\n id: uuidv7(),\n timestamp: new Date().toISOString(),\n type: 'span-create',\n body: {\n id: span.id,\n trace_id: span.traceId,\n parent_id: span.parentSpanId,\n name: span.name,\n type: this.mapSpanType(span.type),\n start_time: span.startTime,\n input: span.input,\n model: span.modelName,\n metadata: span.metadata,\n tags: span.tags,\n status: span.status,\n },\n };\n }\n\n private traceUpdateEvent(trace: Trace): Record<string, any> {\n return {\n id: uuidv7(),\n timestamp: new Date().toISOString(),\n type: 'trace-update',\n body: {\n id: trace.id,\n output: trace.output,\n status: trace.status,\n status_message: trace.errorMessage,\n end_time: trace.endTime,\n duration_ns: trace.durationNs,\n },\n };\n }\n\n private spanUpdateEvent(span: Span): Record<string, any> {\n return {\n id: uuidv7(),\n timestamp: new Date().toISOString(),\n type: 'span-update',\n body: {\n id: span.id,\n trace_id: span.traceId,\n output: span.output,\n status: span.status,\n status_message: span.errorMessage,\n end_time: span.endTime,\n duration_ns: span.durationNs,\n token_usage: this.buildTokenUsage(span.tokens),\n cost: span.cost,\n },\n };\n }\n\n private async flushBatch(): Promise<void> {\n if (this.batchTimer) {\n clearTimeout(this.batchTimer);\n this.batchTimer = null;\n }\n\n if (this.eventQueue.length === 0) return;\n\n const events = [...this.eventQueue];\n this.eventQueue = [];\n\n // Sort events: trace-create first, then span-create, span-update, trace-update last\n const typePriority: Record<string, number> = {\n 'trace-create': 0,\n 'span-create': 1,\n 'span-update': 2,\n 'trace-update': 3,\n };\n\n events.sort((a, b) => (typePriority[a.type] ?? 99) - (typePriority[b.type] ?? 99));\n\n const maxRetries = this.config.maxRetries ?? 1;\n const retryDelay = this.config.retryDelay ?? 2000;\n\n for (let attempt = 0; attempt <= maxRetries; attempt++) {\n try {\n await this.sendToApi('/v1/ingestion', { batch: events });\n return;\n } catch (error) {\n if (attempt < maxRetries) {\n const delay = retryDelay * 2 ** attempt;\n await new Promise((resolve) => setTimeout(resolve, delay));\n } else {\n if (this.config.onError) {\n this.config.onError(error instanceof Error ? error : new Error(String(error)));\n }\n if (this.config.debug) {\n console.error('Failed to send batch after retries:', error);\n }\n }\n }\n }\n }\n\n // ============================================================================\n // API Communication\n // ============================================================================\n\n private async sendToApi(endpoint: string, data: any): Promise<any> {\n const response = await fetch(`${this.config.apiUrl}${endpoint}`, {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json',\n 'X-API-Key': this.config.apiKey,\n 'X-Project-Name': this.config.projectName || '',\n },\n body: JSON.stringify(data),\n });\n\n if (!response.ok) {\n throw new Error(`API error: ${response.status} ${response.statusText}`);\n }\n\n return response;\n }\n\n // ============================================================================\n // Shutdown\n // ============================================================================\n\n /**\n * Force flush all pending spans and signals immediately.\n * Unlike shutdown(), this does not disable the client afterwards.\n */\n async forceFlush(): Promise<void> {\n await this.flushBatch();\n }\n\n async shutdown(): Promise<void> {\n await this.flushBatch();\n this.disable();\n }\n}\n\n// Export aliases\nexport { AigieClient as KyteClient };\n","/**\n * Kyte SDK for TypeScript/JavaScript\n *\n * Automatic tracing and monitoring for AI applications.\n *\n * @packageDocumentation\n */\n\n// ============================================================================\n// Core Exports\n// ============================================================================\n\nexport {\n AigieClient,\n AigieClient as KyteClient,\n getAigie,\n getKyte,\n initAigie,\n initKyte,\n} from './client';\n\nexport {\n observe,\n trace,\n traceable,\n withTracing,\n} from './decorators';\n\n// ============================================================================\n// Exceptions\n// ============================================================================\n\nexport {\n AgentExecutionError,\n AigieError,\n BehaviorDriftDetected,\n ConfigurationError,\n ContextDriftDetected,\n DriftError,\n GuardrailError,\n InterceptionError,\n LoopDetectedError,\n ModelRetry,\n ProviderError,\n RemediationError,\n RemediationFailed,\n RemediationRejected,\n RetryExhausted,\n TimeoutError,\n ToolExecutionError,\n TopicDriftDetected,\n TracingError,\n ValidationError,\n} from './exceptions';\n\n// ============================================================================\n// Agent Framework Tools\n// ============================================================================\n\nexport type { ToolCallHandle } from './tools';\nexport {\n startToolCall,\n tool,\n toolPlain,\n trackToolCall,\n} from './tools';\n\n// ============================================================================\n// Agent Framework Types\n// ============================================================================\n\nexport type {\n AgentConfig,\n AgentResult,\n AnthropicToolSchema,\n ApiMessage,\n CostDetails,\n CycleMetrics,\n Deviation,\n DriftDetectorConfig,\n DriftResult,\n DriftType,\n EmitSignalRequest,\n EvaluationScore,\n GuardrailContext,\n GuardrailResult,\n InputGuardrail,\n IntegrationInfo,\n JudgeConfig,\n JudgeResult,\n LoopDetectionResult,\n LoopDetectorConfig,\n Message,\n ModelSettings,\n OpenAIToolSchema,\n OutputGuardrail,\n PhaseContext,\n PlanMetrics,\n RemediationAction,\n RemediationHandler,\n RunContext,\n RunOptions,\n ScoreType,\n Signal,\n StreamChunk,\n ToolCall,\n ToolCallResult,\n ToolConfig,\n ToolDefinition,\n UsageDetails,\n UsageInfo,\n} from './types';\nexport {\n GuardrailAction,\n SignalSeverity,\n SignalType,\n} from './types';\n\n// ============================================================================\n// Type Exports\n// ============================================================================\n\nexport type {\n ActiveSpan,\n // Config\n AigieConfig,\n AigieConfig as KyteConfig,\n // Annotations\n Annotation,\n AnnotationType,\n // Auto-Instrumentation\n AutoInstrumentConfig,\n CacheEntry,\n CreateAnnotationRequest,\n CreateFeedbackRequest,\n CustomInstrumentation,\n // Feedback\n Feedback,\n FeedbackStats,\n FeedbackType,\n // Media\n MediaReference,\n // Pricing\n ModelPricing,\n ProcessedMedia,\n Score,\n // Cache\n SmartCacheConfig,\n Span,\n // Fluent Builder\n SpanBuilder,\n SpanContext,\n SpanOptions,\n SpanType,\n SpanUpdateData,\n TokenUsage,\n // Trace & Span\n Trace,\n // Decorators\n TraceableConfig,\n TraceContext,\n TraceOptions,\n TraceStatus,\n // Wrappers\n WrapperOptions,\n} from './types';\n\n// ============================================================================\n// Auto-Instrumentation\n// ============================================================================\n\nexport { wrapAnthropic } from './integrations/anthropic/index';\nexport { tracedFetch } from './integrations/http/index';\nexport {\n autoInstrument,\n createTracingProxy,\n disableAutoInstrument,\n} from './integrations/index';\n\nexport {\n AigieCallbackHandler,\n AigieCallbackHandler as KyteCallbackHandler,\n createAigieHandler,\n createAigieHandler as createKyteHandler,\n} from './integrations/langchain/index';\nexport { wrapOpenAI } from './integrations/openai/index';\n\n// ============================================================================\n// Cost Tracking\n// ============================================================================\n\nexport {\n calculateCost,\n formatCost,\n getModelPricing,\n getModelsForProvider,\n getSupportedProviders,\n isModelSupported,\n MODEL_PRICING,\n} from './cost-tracking';\n\n// ============================================================================\n// Smart Cache\n// ============================================================================\n\nexport {\n createPromptCache,\n createSmartCache,\n SmartCache,\n} from './cache';\n\n// ============================================================================\n// Annotations\n// ============================================================================\n\nexport {\n AnnotationsClient,\n createAnnotationsClient,\n} from './annotations/client';\n\n// ============================================================================\n// Feedback\n// ============================================================================\n\nexport {\n createFeedbackClient,\n createFeedbackCollector,\n FeedbackClient,\n FeedbackCollector,\n} from './feedback/client';\n\n// ============================================================================\n// Media\n// ============================================================================\n\nexport {\n createDataUrl,\n createMediaManager,\n extractBase64FromDataUrl,\n isDataUrl,\n MediaManager,\n mimeToExtension,\n} from './media/index';\n\n// ============================================================================\n// UUID\n// ============================================================================\n\nexport {\n compareUuidv7,\n extractTimestamp,\n generateBatchUuidv7,\n getUuidv7Age,\n isValidUuidv7,\n uuidv7,\n uuidv7ToDate,\n uuidv7WithTimestamp,\n} from './utils/uuid';\n\n// ============================================================================\n// Agent Framework\n// ============================================================================\n\nexport { Agent } from './agent';\nexport { AgentResultImpl } from './result';\nexport { RunContextImpl } from './run-context';\nexport type { ProviderAdapter } from './runner';\nexport { parseModelString, Runner } from './runner';\n\n// ============================================================================\n// Agent Intelligence\n// ============================================================================\n\nexport { ExecutionCycle } from './agents/execution-cycle';\nexport { GoalTracker } from './agents/goal-tracking';\nexport { LoopDetector } from './agents/loop-detection';\n\n// ============================================================================\n// Detection\n// ============================================================================\n\nexport { DriftDetector } from './drift/monitor';\nexport { inputGuardrail, outputGuardrail } from './guardrails/base';\n\n// ============================================================================\n// Signals & Evaluation\n// ============================================================================\n\nexport { EvaluationClient } from './evaluation/client';\nexport { LLMJudge } from './evaluation/judge';\nexport { SignalReporter } from './signals';\n\n// ============================================================================\n// Remediation & Advanced\n// ============================================================================\n\nexport type { ReliabilityMetrics } from './metrics/index';\nexport { MetricsAggregator } from './metrics/index';\nexport type { PromptTemplate } from './prompts/index';\nexport { PromptManager } from './prompts/index';\nexport { RemediationEngine } from './realtime/remediation-engine';\nexport type { Rule, RuleContext, RuleResult } from './rules/index';\nexport { RulesEngine } from './rules/index';\n\n// ============================================================================\n// Diagnostics\n// ============================================================================\n\nexport { createSelfDiagnosticsTool } from './diagnostics';\n\n// ============================================================================\n// Integration Registry\n// ============================================================================\n\nexport { IntegrationRegistry } from './integrations/registry';\n\n// ============================================================================\n// Version\n// ============================================================================\n\nexport const VERSION = '1.1.0';\n","/**\n * Decorators\n *\n * @traceable decorator and trace wrapper function for automatic tracing.\n */\n\nimport { getKyte } from './client';\nimport type { SpanType, TraceableConfig } from './types';\n\n/**\n * @traceable decorator - Auto-trace class methods\n *\n * @example\n * ```typescript\n * class MyService {\n * @traceable({ name: 'processData', type: 'chain' })\n * async processData(input: string) {\n * return await this.doWork(input);\n * }\n *\n * @traceable({ captureInput: true, captureOutput: true })\n * async doWork(input: string) {\n * return `processed: ${input}`;\n * }\n * }\n * ```\n */\nexport function traceable(config: TraceableConfig = {}) {\n return (_target: any, propertyKey: string, descriptor: PropertyDescriptor) => {\n const originalMethod = descriptor.value;\n const methodName = config.name || propertyKey;\n\n descriptor.value = async function (...args: any[]) {\n let client;\n try {\n client = getKyte();\n } catch {\n // SDK not initialized, call original method\n return originalMethod.apply(this, args);\n }\n\n if (!client.isEnabled()) {\n return originalMethod.apply(this, args);\n }\n\n const context = client.getCurrentContext();\n const input = config.captureInput !== false ? { args } : {};\n\n // If no context, create a trace; otherwise create a span\n if (!context) {\n return client.trace(\n methodName,\n async () => {\n const result = await originalMethod.apply(this, args);\n return result;\n },\n {\n type: config.type,\n input,\n tags: config.tags,\n metadata: config.metadata,\n },\n );\n } else {\n return client.span(\n methodName,\n async () => {\n const result = await originalMethod.apply(this, args);\n return result;\n },\n {\n type: config.type,\n input,\n tags: config.tags,\n metadata: config.metadata,\n },\n );\n }\n };\n\n return descriptor;\n };\n}\n\n/**\n * trace wrapper function - Wrap any function with tracing\n *\n * @example\n * ```typescript\n * const tracedFetch = trace(\n * async (url: string) => fetch(url),\n * { name: 'fetchData', type: 'tool' }\n * );\n *\n * const response = await tracedFetch('https://api.example.com');\n * ```\n */\nexport function trace<T extends (...args: any[]) => any>(fn: T, config: TraceableConfig = {}): T {\n const wrappedFn = async (...args: Parameters<T>): Promise<ReturnType<T>> => {\n let client;\n try {\n client = getKyte();\n } catch {\n return fn(...args);\n }\n\n if (!client.isEnabled()) {\n return fn(...args);\n }\n\n const context = client.getCurrentContext();\n const name = config.name || fn.name || 'anonymous';\n const input = config.captureInput !== false ? { args } : {};\n\n if (!context) {\n return client.trace(name, async () => fn(...args), {\n type: config.type,\n input,\n tags: config.tags,\n metadata: config.metadata,\n });\n } else {\n return client.span(name, async () => fn(...args), {\n type: config.type,\n input,\n tags: config.tags,\n metadata: config.metadata,\n });\n }\n };\n\n return wrappedFn as T;\n}\n\n/**\n * observe decorator - Simpler alternative to @traceable (Laminar-style API)\n *\n * @example\n * ```typescript\n * class MyAgent {\n * @observe()\n * async think(input: string) {\n * return await this.llm.generate(input);\n * }\n * }\n * ```\n */\nexport function observe(config: { name?: string; type?: SpanType } = {}) {\n return traceable({\n name: config.name,\n type: config.type || 'custom',\n captureInput: true,\n captureOutput: true,\n captureErrors: true,\n });\n}\n\n/**\n * withTracing - Higher-order function for wrapping functions with tracing\n *\n * @example\n * ```typescript\n * const myFunction = withTracing(\n * async (x: number) => x * 2,\n * 'doubleValue'\n * );\n * ```\n */\nexport function withTracing<T extends (...args: any[]) => any>(\n fn: T,\n name?: string,\n options?: Omit<TraceableConfig, 'name'>,\n): T {\n return trace(fn, { name: name || fn.name, ...options });\n}\n","/**\n * Error hierarchy for the Aigie SDK agent framework.\n *\n * All errors extend AigieError, which ensures correct prototype chains\n * and sets this.name to the constructor name for proper instanceof checks.\n */\n\nexport class AigieError extends Error {\n constructor(message: string) {\n super(message);\n this.name = this.constructor.name;\n Object.setPrototypeOf(this, new.target.prototype);\n }\n}\n\n// ============================================================================\n// Drift Errors\n// ============================================================================\n\nexport class DriftError extends AigieError {}\nexport class ContextDriftDetected extends DriftError {}\nexport class TopicDriftDetected extends DriftError {}\nexport class BehaviorDriftDetected extends DriftError {}\nexport class LoopDetectedError extends DriftError {}\n\n// ============================================================================\n// Remediation Errors\n// ============================================================================\n\nexport class RemediationError extends AigieError {}\nexport class RemediationFailed extends RemediationError {}\nexport class RemediationRejected extends RemediationError {}\nexport class RetryExhausted extends RemediationError {}\n\n// ============================================================================\n// Agent Errors\n// ============================================================================\n\nexport class ModelRetry extends AigieError {}\nexport class TracingError extends AigieError {}\nexport class InterceptionError extends AigieError {}\nexport class GuardrailError extends AigieError {}\nexport class AgentExecutionError extends AigieError {}\nexport class ConfigurationError extends AigieError {}\nexport class TimeoutError extends AigieError {}\nexport class ValidationError extends AigieError {}\n\nexport class ToolExecutionError extends AigieError {\n constructor(\n message: string,\n public readonly toolName: string,\n ) {\n super(message);\n }\n}\n\nexport class ProviderError extends AigieError {\n constructor(\n message: string,\n public readonly provider: string,\n public readonly statusCode?: number,\n ) {\n super(message);\n }\n}\n","/**\n * Zod-based tool system for the Aigie SDK agent framework.\n *\n * Provides `tool()` and `toolPlain()` functions for defining tools with\n * Zod schema validation and automatic JSON Schema generation.\n *\n * @packageDocumentation\n */\n\nimport type { ZodObject, ZodRawShape, ZodType, z } from 'zod';\nimport { zodToJsonSchema } from 'zod-to-json-schema';\nimport type {\n AnthropicToolSchema,\n OpenAIToolSchema,\n RunContext,\n ToolConfig,\n ToolDefinition,\n} from './agent-types';\nimport { getKyte } from './client';\nimport { ValidationError } from './exceptions';\nimport type { ActiveSpan } from './types';\n\n/**\n * Internal implementation of ToolDefinition.\n *\n * Handles Zod-to-JSON-Schema conversion, parameter validation,\n * and format conversion for OpenAI and Anthropic APIs.\n */\nclass ToolImpl<TParams = any, TContext = any> implements ToolDefinition<TParams, TContext> {\n name: string;\n description: string;\n parameters: ZodType<TParams>;\n schema: Record<string, unknown>;\n requiresContext: boolean;\n isAsync: boolean;\n private _execute: (params: TParams, ctx: RunContext<TContext>) => unknown | Promise<unknown>;\n\n constructor(config: {\n name: string;\n description: string;\n parameters: ZodType<TParams>;\n execute: (params: TParams, ctx: RunContext<TContext>) => unknown | Promise<unknown>;\n requiresContext?: boolean;\n }) {\n this.name = config.name;\n this.description = config.description;\n this.parameters = config.parameters;\n this._execute = config.execute;\n this.requiresContext = config.requiresContext ?? true;\n this.isAsync = true;\n\n // Generate JSON Schema from Zod schema\n const jsonSchema = zodToJsonSchema(config.parameters, { target: 'openApi3' });\n this.schema = jsonSchema as Record<string, unknown>;\n }\n\n async execute(params: unknown, ctx: RunContext<TContext>): Promise<unknown> {\n // Validate params with Zod before executing\n const parseResult = this.parameters.safeParse(params);\n if (!parseResult.success) {\n throw new ValidationError(\n `Invalid parameters for tool \"${this.name}\": ${parseResult.error.message}`,\n );\n }\n return this._execute(parseResult.data, ctx);\n }\n\n toOpenAITool(): OpenAIToolSchema {\n return {\n type: 'function',\n function: {\n name: this.name,\n description: this.description,\n parameters: this.schema,\n },\n };\n }\n\n toAnthropicTool(): AnthropicToolSchema {\n return {\n name: this.name,\n description: this.description,\n input_schema: this.schema,\n };\n }\n}\n\n/**\n * Create a tool definition with Zod schema validation.\n *\n * The execute function receives both the validated params and a RunContext.\n *\n * @example\n * ```ts\n * const searchTool = tool({\n * name: 'search',\n * description: 'Search the database',\n * parameters: z.object({\n * query: z.string().describe('Search query'),\n * limit: z.number().optional().describe('Max results'),\n * }),\n * execute: async (params, ctx) => {\n * return `Results for: ${params.query}`;\n * },\n * });\n * ```\n */\nexport function tool<TParams extends ZodRawShape, TContext = unknown>(\n config: ToolConfig<TParams, TContext>,\n): ToolDefinition<z.infer<ZodObject<TParams>>, TContext> {\n return new ToolImpl({\n name: config.name,\n description: config.description,\n parameters: config.parameters,\n execute: config.execute as any,\n requiresContext: true,\n });\n}\n\n/**\n * Create a tool definition without RunContext.\n *\n * The execute function receives only the validated params.\n * Sets requiresContext to false.\n *\n * @example\n * ```ts\n * const uppercaseTool = toolPlain({\n * name: 'uppercase',\n * description: 'Convert to uppercase',\n * parameters: z.object({ input: z.string() }),\n * execute: async ({ input }) => input.toUpperCase(),\n * });\n * ```\n */\nexport function toolPlain<TParams extends ZodRawShape>(\n config: Omit<ToolConfig<TParams, never>, 'execute'> & {\n execute: (params: z.infer<ZodObject<TParams>>) => unknown | Promise<unknown>;\n },\n): ToolDefinition<z.infer<ZodObject<TParams>>, never> {\n return new ToolImpl({\n name: config.name,\n description: config.description,\n parameters: config.parameters,\n execute: (params) => config.execute(params),\n requiresContext: false,\n });\n}\n\n// ============================================================================\n// Three-Tier Tool Tracking\n// ============================================================================\n\n/**\n * Handle returned by `startToolCall()` for manual lifecycle tracking (Tier 3).\n */\nexport interface ToolCallHandle {\n /** The span ID for this tool call */\n readonly spanId: string;\n /** End the tool call successfully with the given output */\n end(output: unknown): Promise<void>;\n /** End the tool call with an error */\n error(err: Error | string): Promise<void>;\n}\n\n/**\n * Tier 2 (Retroactive): Track a tool call after the fact.\n *\n * Records a completed tool invocation as a span. Use this when you already\n * have the input and output and just want to log it retroactively.\n *\n * @param name - Tool name\n * @param input - The input that was passed to the tool\n * @param output - The output that the tool returned\n * @param metadata - Optional additional metadata\n *\n * @example\n * ```ts\n * const result = await myExternalTool(params);\n * await trackToolCall('myExternalTool', params, result);\n * ```\n */\nexport async function trackToolCall(\n name: string,\n input: unknown,\n output: unknown,\n metadata?: Record<string, any>,\n): Promise<void> {\n try {\n const client = getKyte();\n const span = client\n .spanBuilder(`tool.${name}`)\n .setType('tool')\n .setInput({ input })\n .setMetadata({\n toolName: name,\n trackingTier: 'retroactive',\n ...metadata,\n })\n .start();\n\n span.setOutput({ output });\n await span.end();\n } catch (_e) {\n // SDK not initialized or error, skip silently\n }\n}\n\n/**\n * Tier 3 (Manual Lifecycle): Start a tool call and get a handle to end it later.\n *\n * Use this when you need precise control over the tool call timing,\n * for example when the tool call is long-running or streaming.\n *\n * @param name - Tool name\n * @param input - The input being passed to the tool\n * @param metadata - Optional additional metadata\n * @returns A handle with `.end(output)` and `.error(err)` methods\n *\n * @example\n * ```ts\n * const handle = startToolCall('longRunningTool', { query: 'test' });\n * try {\n * const result = await longRunningTool({ query: 'test' });\n * await handle.end(result);\n * } catch (err) {\n * await handle.error(err);\n * }\n * ```\n */\nexport function startToolCall(\n name: string,\n input: unknown,\n metadata?: Record<string, any>,\n): ToolCallHandle {\n let span: ActiveSpan | null = null;\n let ended = false;\n\n try {\n const client = getKyte();\n span = client\n .spanBuilder(`tool.${name}`)\n .setType('tool')\n .setInput({ input })\n .setMetadata({\n toolName: name,\n trackingTier: 'manual',\n ...metadata,\n })\n .start();\n } catch (_e) {\n // SDK not initialized, return a no-op handle\n }\n\n return {\n get spanId(): string {\n return span?.id ?? '';\n },\n\n async end(output: unknown): Promise<void> {\n if (ended || !span) return;\n ended = true;\n span.setOutput({ output });\n await span.end();\n },\n\n async error(err: Error | string): Promise<void> {\n if (ended || !span) return;\n ended = true;\n span.setError(err);\n await span.end();\n },\n };\n}\n","/**\n * Agent framework type definitions for the Aigie SDK.\n *\n * These types define the core abstractions for the agent system including\n * messages, tools, guardrails, signals, evaluation, drift detection,\n * loop detection, remediation, and streaming.\n *\n * @packageDocumentation\n */\n\nimport type { ZodObject, ZodRawShape, ZodType, z } from 'zod';\n\n// ============================================================================\n// Message Types\n// ============================================================================\n\nexport interface Message {\n role: 'system' | 'user' | 'assistant' | 'tool';\n content: string;\n toolCallId?: string;\n toolCalls?: ToolCall[];\n timestamp?: string;\n metadata?: Record<string, unknown>;\n}\n\nexport interface ToolCall {\n id: string;\n name: string;\n arguments: Record<string, unknown>;\n}\n\nexport interface ToolCallResult {\n toolCallId: string;\n name: string;\n result: unknown;\n error?: string;\n durationMs?: number;\n}\n\n// ============================================================================\n// Model Settings\n// ============================================================================\n\nexport interface ModelSettings {\n temperature?: number;\n maxTokens?: number;\n topP?: number;\n frequencyPenalty?: number;\n presencePenalty?: number;\n stopSequences?: string[];\n seed?: number;\n responseFormat?: 'text' | 'json';\n}\n\n// ============================================================================\n// Run Context\n// ============================================================================\n\nexport interface RunContext<T = unknown> {\n deps: T;\n model: string;\n messages: Message[];\n traceId: string;\n spanId: string;\n retryCount: number;\n maxRetries: number;\n isLastAttempt: boolean;\n addMessage(msg: Message): void;\n addUserMessage(content: string): void;\n addAssistantMessage(content: string): void;\n getMessagesForApi(): ApiMessage[];\n withRetry(): RunContext<T>;\n}\n\nexport interface ApiMessage {\n role: string;\n content: string;\n tool_call_id?: string;\n tool_calls?: Array<{\n id: string;\n type: 'function';\n function: { name: string; arguments: string };\n }>;\n}\n\n// ============================================================================\n// Tool Definition\n// ============================================================================\n\nexport interface ToolDefinition<TParams = any, TContext = any> {\n name: string;\n description: string;\n parameters: ZodType<TParams>;\n execute: (params: TParams, ctx: RunContext<TContext>) => unknown | Promise<unknown>;\n requiresContext: boolean;\n isAsync: boolean;\n schema: Record<string, unknown>; // JSON Schema\n toOpenAITool(): OpenAIToolSchema;\n toAnthropicTool(): AnthropicToolSchema;\n}\n\nexport interface ToolConfig<TParams extends ZodRawShape, TContext = unknown> {\n name: string;\n description: string;\n parameters: ZodObject<TParams>;\n execute: (\n params: z.infer<ZodObject<TParams>>,\n ctx: RunContext<TContext>,\n ) => unknown | Promise<unknown>;\n}\n\nexport interface OpenAIToolSchema {\n type: 'function';\n function: {\n name: string;\n description: string;\n parameters: Record<string, unknown>;\n };\n}\n\nexport interface AnthropicToolSchema {\n name: string;\n description: string;\n input_schema: Record<string, unknown>;\n}\n\n// ============================================================================\n// Agent Config\n// ============================================================================\n\nexport interface AgentConfig<TContext = unknown, TOutput = string> {\n name: string;\n model: string;\n systemPrompt?: string | ((ctx: RunContext<TContext>) => string | Promise<string>);\n tools?: ToolDefinition[];\n outputType?: ZodType<TOutput>;\n modelSettings?: ModelSettings;\n handoffs?: Array<{ name: string; agent: any }>;\n inputGuardrails?: InputGuardrail[];\n outputGuardrails?: OutputGuardrail[];\n maxRetries?: number;\n maxTurns?: number;\n}\n\nexport interface RunOptions<TContext = unknown> {\n deps?: TContext;\n messageHistory?: Message[];\n sessionId?: string;\n userId?: string;\n tags?: string[];\n metadata?: Record<string, unknown>;\n}\n\n// ============================================================================\n// Agent Result\n// ============================================================================\n\nexport interface AgentResult<T = string> {\n data: T;\n usage: UsageInfo;\n messages: Message[];\n traceId: string;\n durationMs: number;\n toolCalls: number;\n retries: number;\n allMessages(): Message[];\n withToolReturnContent(): Message[];\n}\n\nexport interface UsageInfo {\n requestTokens: number;\n responseTokens: number;\n totalTokens: number;\n costUsd: number;\n cacheReadTokens?: number;\n cacheCreationTokens?: number;\n model: string;\n}\n\n// ============================================================================\n// Guardrails\n// ============================================================================\n\nexport enum GuardrailAction {\n PASS = 'pass',\n WARN = 'warn',\n RETRY = 'retry',\n REDIRECT = 'redirect',\n ADJUST = 'adjust',\n ESCALATE = 'escalate',\n}\n\nexport interface GuardrailResult {\n action: GuardrailAction;\n message?: string;\n metadata?: Record<string, unknown>;\n}\n\nexport interface GuardrailContext {\n traceId: string;\n spanId: string;\n durationMs: number;\n model: string;\n metadata: Record<string, unknown>;\n}\n\nexport interface InputGuardrail {\n name: string;\n execute: (input: string, context: GuardrailContext) => Promise<GuardrailResult>;\n}\n\nexport interface OutputGuardrail {\n name: string;\n execute: (output: unknown, context: GuardrailContext) => Promise<GuardrailResult>;\n}\n\n// ============================================================================\n// Signals\n// ============================================================================\n\nexport enum SignalType {\n ERROR_CLUSTER = 'error_cluster',\n CONTEXT_DRIFT = 'context_drift',\n TOOL_LOOP = 'tool_loop',\n GOAL_DEVIATION = 'goal_deviation',\n HALLUCINATION = 'hallucination',\n QUALITY_DROP = 'quality_drop',\n LATENCY_SPIKE = 'latency_spike',\n TOKEN_OVERFLOW = 'token_overflow',\n SAFETY_VIOLATION = 'safety_violation',\n}\n\nexport enum SignalSeverity {\n LOW = 'low',\n MEDIUM = 'medium',\n HIGH = 'high',\n CRITICAL = 'critical',\n}\n\nexport interface Signal {\n id: string;\n type: SignalType;\n severity: SignalSeverity;\n message: string;\n traceId?: string;\n spanId?: string;\n metadata?: Record<string, unknown>;\n timestamp: string;\n}\n\nexport interface EmitSignalRequest {\n type: SignalType;\n severity: SignalSeverity;\n message: string;\n traceId?: string;\n spanId?: string;\n metadata?: Record<string, unknown>;\n}\n\n// ============================================================================\n// Evaluation\n// ============================================================================\n\nexport type ScoreType =\n | 'accuracy'\n | 'relevance'\n | 'coherence'\n | 'fluency'\n | 'groundedness'\n | 'hallucination'\n | 'toxicity'\n | 'helpfulness'\n | 'custom';\n\nexport interface EvaluationScore {\n traceId: string;\n spanId?: string;\n name: ScoreType | string;\n value: number;\n dataType?: 'NUMERIC' | 'CATEGORICAL' | 'BOOLEAN';\n comment?: string;\n metadata?: Record<string, unknown>;\n}\n\nexport interface JudgeConfig {\n model: string;\n criteria: ScoreType[];\n systemPrompt?: string;\n}\n\nexport interface JudgeResult {\n scores: Record<string, number>;\n reasoning: string;\n overallScore: number;\n}\n\n// ============================================================================\n// Drift Detection\n// ============================================================================\n\nexport type DriftType = 'topic' | 'behavior' | 'quality' | 'coherence';\n\nexport interface DriftDetectorConfig {\n detectors: DriftType[];\n thresholds?: Partial<Record<DriftType, number>>;\n}\n\nexport interface DriftResult {\n hasDrift: boolean;\n type?: DriftType;\n score: number;\n details: string;\n}\n\n// ============================================================================\n// Execution Cycle\n// ============================================================================\n\nexport interface PhaseContext {\n name: string;\n startTime: number;\n setOutput(output: unknown): void;\n setMetadata(metadata: Record<string, unknown>): void;\n}\n\nexport interface CycleMetrics {\n thinkDurationMs: number;\n actDurationMs: number;\n observeDurationMs: number;\n totalDurationMs: number;\n cycleCount: number;\n}\n\n// ============================================================================\n// Goal Tracking\n// ============================================================================\n\nexport interface PlanMetrics {\n completionRate: number;\n deviations: Deviation[];\n unexpectedSteps: number;\n wrongOrderSteps: number;\n totalDurationMs: number;\n}\n\nexport interface Deviation {\n type: 'unexpected_step' | 'wrong_order' | 'missing_step' | 'repeated_step';\n stepName: string;\n message: string;\n timestamp: string;\n}\n\n// ============================================================================\n// Loop Detection\n// ============================================================================\n\nexport interface LoopDetectorConfig {\n similarityThreshold?: number;\n maxConsecutiveRepeats?: number;\n action?: 'warn' | 'break' | 'auto_fix';\n}\n\nexport interface LoopDetectionResult {\n isLoop: boolean;\n similarity: number;\n repeatCount: number;\n action?: 'warn' | 'break' | 'auto_fix';\n}\n\n// ============================================================================\n// Remediation\n// ============================================================================\n\nexport interface RemediationAction {\n action: 'retry' | 'fallback' | 'reset' | 'redirect' | 'escalate';\n newSystemPrompt?: string;\n newModel?: string;\n metadata?: Record<string, unknown>;\n}\n\nexport type RemediationHandler = (signal: Signal) => Promise<RemediationAction>;\n\n// ============================================================================\n// Enhanced Cost Tracking\n// ============================================================================\n\nexport interface UsageDetails {\n input: number;\n output: number;\n cacheReadInputTokens?: number;\n total?: number;\n [key: string]: number | undefined;\n}\n\nexport interface CostDetails {\n input: number;\n output: number;\n cacheReadInputTokens?: number;\n total?: number;\n [key: string]: number | undefined;\n}\n\n// ============================================================================\n// Integration Registry\n// ============================================================================\n\nexport interface IntegrationInfo {\n name: string;\n displayName: string;\n packageName: string;\n patchFunction: string;\n handlerClass?: string;\n isPatched?: boolean;\n}\n\n// ============================================================================\n// Stream Types\n// ============================================================================\n\nexport interface StreamChunk {\n type: 'text' | 'tool_call' | 'tool_result' | 'error' | 'done';\n content?: string;\n toolCall?: ToolCall;\n toolResult?: ToolCallResult;\n error?: string;\n}\n","/**\n * Anthropic Auto-Instrumentation\n *\n * Automatically traces Anthropic SDK calls using ES Proxy pattern.\n */\n\nimport { getKyte } from '../../client';\nimport { calculateCost } from '../../cost-tracking';\n\nlet instrumented = false;\n\n/**\n * Create Anthropic instrumentation by monkey-patching the Anthropic constructor\n */\nexport function createAnthropicInstrumentation(): void {\n if (instrumented) return;\n\n try {\n const anthropicModule = require('@anthropic-ai/sdk');\n const OriginalAnthropic = anthropicModule.default || anthropicModule.Anthropic;\n\n if (!OriginalAnthropic) {\n throw new Error('Anthropic SDK not installed');\n }\n\n // Monkey-patch the constructor to auto-wrap new instances\n const PatchedAnthropic = new Proxy(OriginalAnthropic, {\n construct(target, args) {\n const instance = new target(...args);\n return wrapAnthropic(instance);\n },\n });\n\n // Replace the export\n if (anthropicModule.default) {\n anthropicModule.default = PatchedAnthropic;\n }\n if (anthropicModule.Anthropic) {\n anthropicModule.Anthropic = PatchedAnthropic;\n }\n\n instrumented = true;\n } catch (_e) {\n throw new Error('Anthropic SDK not installed');\n }\n}\n\n/**\n * Wrap an Anthropic client instance for automatic tracing\n *\n * @example\n * ```typescript\n * import Anthropic from '@anthropic-ai/sdk';\n * import { wrapAnthropic } from '@kyte/sdk';\n *\n * const anthropic = wrapAnthropic(new Anthropic());\n *\n * // All calls are now automatically traced\n * const response = await anthropic.messages.create({\n * model: 'claude-3-sonnet-20240229',\n * messages: [{ role: 'user', content: 'Hello!' }],\n * max_tokens: 1024\n * });\n * ```\n */\nexport function wrapAnthropic<T extends object>(\n client: T,\n options: {\n traceName?: string;\n userId?: string;\n sessionId?: string;\n tags?: string[];\n metadata?: Record<string, any>;\n } = {},\n): T {\n return createAnthropicProxy(client, options);\n}\n\n/**\n * Create a proxy for Anthropic client\n */\nfunction createAnthropicProxy<T extends object>(\n client: T,\n options: {\n traceName?: string;\n userId?: string;\n sessionId?: string;\n tags?: string[];\n metadata?: Record<string, any>;\n },\n): T {\n const handler: ProxyHandler<T> = {\n get(target, prop, receiver) {\n const value = Reflect.get(target, prop, receiver);\n\n // Handle messages.create\n if (prop === 'messages') {\n return createMessagesProxy(value, options);\n }\n\n // Recursively proxy nested objects\n if (value && typeof value === 'object') {\n return createAnthropicProxy(value, options);\n }\n\n return value;\n },\n };\n\n return new Proxy(client, handler);\n}\n\n/**\n * Create proxy for messages namespace\n */\nfunction createMessagesProxy(messages: any, options: any): any {\n return new Proxy(messages, {\n get(target, prop, receiver) {\n const value = Reflect.get(target, prop, receiver);\n\n if (prop === 'create' && typeof value === 'function') {\n return createTracedMessagesCreate(value.bind(target), options);\n }\n\n if (prop === 'stream' && typeof value === 'function') {\n return createTracedMessagesStream(value.bind(target), options);\n }\n\n return value;\n },\n });\n}\n\n/**\n * Create traced version of messages.create\n */\nfunction createTracedMessagesCreate(originalCreate: Function, options: any): Function {\n return async function tracedCreate(params: any) {\n let client;\n try {\n client = getKyte();\n } catch {\n return originalCreate(params);\n }\n\n const span = client\n .spanBuilder(options.traceName || 'anthropic.messages.create')\n .setType('llm')\n .setModelName(params.model)\n .setInput({\n model: params.model,\n messages: params.messages,\n system: params.system,\n temperature: params.temperature,\n max_tokens: params.max_tokens,\n stream: params.stream,\n })\n .setTags(options.tags || [])\n .setMetadata({ ...options.metadata, provider: 'anthropic' })\n .start();\n\n if (options.userId) span.update({ metadata: { userId: options.userId } });\n if (options.sessionId) span.update({ metadata: { sessionId: options.sessionId } });\n\n try {\n const response = await originalCreate(params);\n\n // Handle streaming\n if (params.stream) {\n return createTracedAnthropicStream(response, span, params.model);\n }\n\n // Non-streaming response\n const usage = response.usage;\n if (usage) {\n span.setTokens({\n prompt: usage.input_tokens,\n completion: usage.output_tokens,\n total: (usage.input_tokens || 0) + (usage.output_tokens || 0),\n cached: usage.cache_creation_input_tokens || usage.cache_read_input_tokens,\n });\n\n const cost = calculateCost(\n params.model,\n 'anthropic',\n usage.input_tokens,\n usage.output_tokens,\n );\n if (cost !== null) {\n span.setCost(cost);\n }\n }\n\n span.setOutput({\n id: response.id,\n model: response.model,\n content: response.content,\n stop_reason: response.stop_reason,\n usage,\n });\n\n await span.end();\n return response;\n } catch (error) {\n span.setError(error as Error);\n await span.end();\n throw error;\n }\n };\n}\n\n/**\n * Create traced version of messages.stream\n */\nfunction createTracedMessagesStream(originalStream: Function, options: any): Function {\n return async function tracedStream(params: any) {\n let client;\n try {\n client = getKyte();\n } catch {\n return originalStream(params);\n }\n\n const span = client\n .spanBuilder(options.traceName || 'anthropic.messages.stream')\n .setType('llm')\n .setModelName(params.model)\n .setInput({\n model: params.model,\n messages: params.messages,\n system: params.system,\n max_tokens: params.max_tokens,\n })\n .setTags(options.tags || [])\n .setMetadata({ ...options.metadata, provider: 'anthropic', streaming: true })\n .start();\n\n try {\n const stream = await originalStream(params);\n\n // Wrap the stream to capture the final message\n const originalOn = stream.on.bind(stream);\n let _finalMessage: any = null;\n\n stream.on = (event: string, callback: Function) => {\n if (event === 'finalMessage') {\n return originalOn(event, (message: any) => {\n _finalMessage = message;\n\n if (message.usage) {\n span.setTokens({\n prompt: message.usage.input_tokens,\n completion: message.usage.output_tokens,\n total: (message.usage.input_tokens || 0) + (message.usage.output_tokens || 0),\n });\n\n const cost = calculateCost(\n params.model,\n 'anthropic',\n message.usage.input_tokens,\n message.usage.output_tokens,\n );\n if (cost !== null) {\n span.setCost(cost);\n }\n }\n\n span.setOutput({\n id: message.id,\n model: message.model,\n content: message.content,\n stop_reason: message.stop_reason,\n });\n\n span.end();\n callback(message);\n });\n }\n\n if (event === 'error') {\n return originalOn(event, (error: Error) => {\n span.setError(error);\n span.end();\n callback(error);\n });\n }\n\n return originalOn(event, callback);\n };\n\n return stream;\n } catch (error) {\n span.setError(error as Error);\n await span.end();\n throw error;\n }\n };\n}\n\n/**\n * Create a traced async iterator for streaming responses\n */\nasync function* createTracedAnthropicStream(\n stream: AsyncIterable<any>,\n span: any,\n model: string,\n): AsyncIterable<any> {\n const chunks: any[] = [];\n let inputTokens = 0;\n let outputTokens = 0;\n\n try {\n for await (const event of stream) {\n chunks.push(event);\n\n // Capture usage from message_start\n if (event.type === 'message_start' && event.message?.usage) {\n inputTokens = event.message.usage.input_tokens || 0;\n }\n\n // Capture usage from message_delta\n if (event.type === 'message_delta' && event.usage) {\n outputTokens = event.usage.output_tokens || 0;\n }\n\n yield event;\n }\n\n // Build final content from chunks\n const contentBlocks = chunks\n .filter((e) => e.type === 'content_block_delta')\n .map((e) => e.delta?.text || '')\n .join('');\n\n span.setOutput({\n model,\n content: contentBlocks,\n chunks: chunks.length,\n });\n\n if (inputTokens || outputTokens) {\n span.setTokens({\n prompt: inputTokens,\n completion: outputTokens,\n total: inputTokens + outputTokens,\n });\n\n const cost = calculateCost(model, 'anthropic', inputTokens, outputTokens);\n if (cost !== null) {\n span.setCost(cost);\n }\n }\n\n await span.end();\n } catch (error) {\n span.setError(error as Error);\n await span.end();\n throw error;\n }\n}\n","/**\n * Cost Tracking\n *\n * Token counting and cost calculation for 50+ LLM models.\n */\n\nimport type { ModelPricing } from './types';\n\n// ============================================================================\n// Model Pricing Data (Updated January 2025)\n// ============================================================================\n\nexport const MODEL_PRICING: ModelPricing[] = [\n // OpenAI GPT-4 Family\n { model: 'gpt-4o', provider: 'openai', inputPricePerMillion: 2.5, outputPricePerMillion: 10 },\n {\n model: 'gpt-4o-2024-11-20',\n provider: 'openai',\n inputPricePerMillion: 2.5,\n outputPricePerMillion: 10,\n },\n {\n model: 'gpt-4o-2024-08-06',\n provider: 'openai',\n inputPricePerMillion: 2.5,\n outputPricePerMillion: 10,\n },\n {\n model: 'gpt-4o-2024-05-13',\n provider: 'openai',\n inputPricePerMillion: 5,\n outputPricePerMillion: 15,\n },\n {\n model: 'gpt-4o-mini',\n provider: 'openai',\n inputPricePerMillion: 0.15,\n outputPricePerMillion: 0.6,\n },\n {\n model: 'gpt-4o-mini-2024-07-18',\n provider: 'openai',\n inputPricePerMillion: 0.15,\n outputPricePerMillion: 0.6,\n },\n { model: 'gpt-4-turbo', provider: 'openai', inputPricePerMillion: 10, outputPricePerMillion: 30 },\n {\n model: 'gpt-4-turbo-2024-04-09',\n provider: 'openai',\n inputPricePerMillion: 10,\n outputPricePerMillion: 30,\n },\n {\n model: 'gpt-4-turbo-preview',\n provider: 'openai',\n inputPricePerMillion: 10,\n outputPricePerMillion: 30,\n },\n {\n model: 'gpt-4-0125-preview',\n provider: 'openai',\n inputPricePerMillion: 10,\n outputPricePerMillion: 30,\n },\n {\n model: 'gpt-4-1106-preview',\n provider: 'openai',\n inputPricePerMillion: 10,\n outputPricePerMillion: 30,\n },\n { model: 'gpt-4', provider: 'openai', inputPricePerMillion: 30, outputPricePerMillion: 60 },\n { model: 'gpt-4-0613', provider: 'openai', inputPricePerMillion: 30, outputPricePerMillion: 60 },\n { model: 'gpt-4-32k', provider: 'openai', inputPricePerMillion: 60, outputPricePerMillion: 120 },\n {\n model: 'gpt-4-32k-0613',\n provider: 'openai',\n inputPricePerMillion: 60,\n outputPricePerMillion: 120,\n },\n\n // OpenAI GPT-3.5 Family\n {\n model: 'gpt-3.5-turbo',\n provider: 'openai',\n inputPricePerMillion: 0.5,\n outputPricePerMillion: 1.5,\n },\n {\n model: 'gpt-3.5-turbo-0125',\n provider: 'openai',\n inputPricePerMillion: 0.5,\n outputPricePerMillion: 1.5,\n },\n {\n model: 'gpt-3.5-turbo-1106',\n provider: 'openai',\n inputPricePerMillion: 1,\n outputPricePerMillion: 2,\n },\n {\n model: 'gpt-3.5-turbo-instruct',\n provider: 'openai',\n inputPricePerMillion: 1.5,\n outputPricePerMillion: 2,\n },\n {\n model: 'gpt-3.5-turbo-16k',\n provider: 'openai',\n inputPricePerMillion: 3,\n outputPricePerMillion: 4,\n },\n\n // OpenAI o-series Family\n { model: 'o1', provider: 'openai', inputPricePerMillion: 15, outputPricePerMillion: 60 },\n {\n model: 'o1-2024-12-17',\n provider: 'openai',\n inputPricePerMillion: 15,\n outputPricePerMillion: 60,\n },\n { model: 'o1-preview', provider: 'openai', inputPricePerMillion: 15, outputPricePerMillion: 60 },\n {\n model: 'o1-preview-2024-09-12',\n provider: 'openai',\n inputPricePerMillion: 15,\n outputPricePerMillion: 60,\n },\n { model: 'o1-mini', provider: 'openai', inputPricePerMillion: 3, outputPricePerMillion: 12 },\n {\n model: 'o1-mini-2024-09-12',\n provider: 'openai',\n inputPricePerMillion: 3,\n outputPricePerMillion: 12,\n },\n { model: 'o1-pro', provider: 'openai', inputPricePerMillion: 150, outputPricePerMillion: 600 },\n { model: 'o3-mini', provider: 'openai', inputPricePerMillion: 1.1, outputPricePerMillion: 4.4 },\n {\n model: 'o3-mini-2025-01-31',\n provider: 'openai',\n inputPricePerMillion: 1.1,\n outputPricePerMillion: 4.4,\n },\n\n // OpenAI Embeddings\n {\n model: 'text-embedding-3-large',\n provider: 'openai',\n inputPricePerMillion: 0.13,\n outputPricePerMillion: 0,\n },\n {\n model: 'text-embedding-3-small',\n provider: 'openai',\n inputPricePerMillion: 0.02,\n outputPricePerMillion: 0,\n },\n {\n model: 'text-embedding-ada-002',\n provider: 'openai',\n inputPricePerMillion: 0.1,\n outputPricePerMillion: 0,\n },\n\n // Anthropic Claude 4 Family\n {\n model: 'claude-4-opus',\n provider: 'anthropic',\n inputPricePerMillion: 15,\n outputPricePerMillion: 75,\n },\n {\n model: 'claude-4-opus-20250514',\n provider: 'anthropic',\n inputPricePerMillion: 15,\n outputPricePerMillion: 75,\n },\n {\n model: 'claude-4-sonnet',\n provider: 'anthropic',\n inputPricePerMillion: 3,\n outputPricePerMillion: 15,\n },\n {\n model: 'claude-4-sonnet-20250514',\n provider: 'anthropic',\n inputPricePerMillion: 3,\n outputPricePerMillion: 15,\n },\n\n // Anthropic Claude 3.5 Family\n {\n model: 'claude-3.5-sonnet',\n provider: 'anthropic',\n inputPricePerMillion: 3,\n outputPricePerMillion: 15,\n },\n {\n model: 'claude-3-5-sonnet-20241022',\n provider: 'anthropic',\n inputPricePerMillion: 3,\n outputPricePerMillion: 15,\n },\n {\n model: 'claude-3-5-sonnet-20240620',\n provider: 'anthropic',\n inputPricePerMillion: 3,\n outputPricePerMillion: 15,\n },\n {\n model: 'claude-3.5-haiku',\n provider: 'anthropic',\n inputPricePerMillion: 0.8,\n outputPricePerMillion: 4,\n },\n {\n model: 'claude-3-5-haiku-20241022',\n provider: 'anthropic',\n inputPricePerMillion: 0.8,\n outputPricePerMillion: 4,\n },\n\n // Anthropic Claude 3 Family\n {\n model: 'claude-3-opus',\n provider: 'anthropic',\n inputPricePerMillion: 15,\n outputPricePerMillion: 75,\n },\n {\n model: 'claude-3-opus-20240229',\n provider: 'anthropic',\n inputPricePerMillion: 15,\n outputPricePerMillion: 75,\n },\n {\n model: 'claude-3-sonnet-20240229',\n provider: 'anthropic',\n inputPricePerMillion: 3,\n outputPricePerMillion: 15,\n },\n {\n model: 'claude-3-haiku-20240307',\n provider: 'anthropic',\n inputPricePerMillion: 0.25,\n outputPricePerMillion: 1.25,\n },\n\n // Anthropic Claude 2 Family\n {\n model: 'claude-2.1',\n provider: 'anthropic',\n inputPricePerMillion: 8,\n outputPricePerMillion: 24,\n },\n {\n model: 'claude-2.0',\n provider: 'anthropic',\n inputPricePerMillion: 8,\n outputPricePerMillion: 24,\n },\n {\n model: 'claude-instant-1.2',\n provider: 'anthropic',\n inputPricePerMillion: 0.8,\n outputPricePerMillion: 2.4,\n },\n\n // Google Gemini Family\n {\n model: 'gemini-2.0-pro',\n provider: 'google',\n inputPricePerMillion: 1.25,\n outputPricePerMillion: 5,\n },\n {\n model: 'gemini-2.0-pro-exp',\n provider: 'google',\n inputPricePerMillion: 1.25,\n outputPricePerMillion: 5,\n },\n {\n model: 'gemini-2.0-flash',\n provider: 'google',\n inputPricePerMillion: 0.1,\n outputPricePerMillion: 0.4,\n },\n {\n model: 'gemini-2.0-flash-001',\n provider: 'google',\n inputPricePerMillion: 0.1,\n outputPricePerMillion: 0.4,\n },\n {\n model: 'gemini-1.5-pro',\n provider: 'google',\n inputPricePerMillion: 1.25,\n outputPricePerMillion: 5,\n },\n {\n model: 'gemini-1.5-pro-latest',\n provider: 'google',\n inputPricePerMillion: 1.25,\n outputPricePerMillion: 5,\n },\n {\n model: 'gemini-1.5-flash',\n provider: 'google',\n inputPricePerMillion: 0.075,\n outputPricePerMillion: 0.3,\n },\n {\n model: 'gemini-1.5-flash-latest',\n provider: 'google',\n inputPricePerMillion: 0.075,\n outputPricePerMillion: 0.3,\n },\n {\n model: 'gemini-1.0-pro',\n provider: 'google',\n inputPricePerMillion: 0.5,\n outputPricePerMillion: 1.5,\n },\n {\n model: 'gemini-pro',\n provider: 'google',\n inputPricePerMillion: 0.5,\n outputPricePerMillion: 1.5,\n },\n {\n model: 'gemini-pro-vision',\n provider: 'google',\n inputPricePerMillion: 0.5,\n outputPricePerMillion: 1.5,\n },\n\n // Cohere Family\n {\n model: 'command-r-plus',\n provider: 'cohere',\n inputPricePerMillion: 3,\n outputPricePerMillion: 15,\n },\n { model: 'command-r', provider: 'cohere', inputPricePerMillion: 0.5, outputPricePerMillion: 1.5 },\n { model: 'command', provider: 'cohere', inputPricePerMillion: 1, outputPricePerMillion: 2 },\n {\n model: 'command-light',\n provider: 'cohere',\n inputPricePerMillion: 0.3,\n outputPricePerMillion: 0.6,\n },\n {\n model: 'command-nightly',\n provider: 'cohere',\n inputPricePerMillion: 1,\n outputPricePerMillion: 2,\n },\n {\n model: 'embed-english-v3.0',\n provider: 'cohere',\n inputPricePerMillion: 0.1,\n outputPricePerMillion: 0,\n },\n {\n model: 'embed-multilingual-v3.0',\n provider: 'cohere',\n inputPricePerMillion: 0.1,\n outputPricePerMillion: 0,\n },\n\n // AWS Bedrock - Anthropic\n {\n model: 'anthropic.claude-3-5-sonnet-20241022-v2:0',\n provider: 'bedrock',\n inputPricePerMillion: 3,\n outputPricePerMillion: 15,\n },\n {\n model: 'anthropic.claude-3-5-sonnet-20240620-v1:0',\n provider: 'bedrock',\n inputPricePerMillion: 3,\n outputPricePerMillion: 15,\n },\n {\n model: 'anthropic.claude-3-opus-20240229-v1:0',\n provider: 'bedrock',\n inputPricePerMillion: 15,\n outputPricePerMillion: 75,\n },\n {\n model: 'anthropic.claude-3-sonnet-20240229-v1:0',\n provider: 'bedrock',\n inputPricePerMillion: 3,\n outputPricePerMillion: 15,\n },\n {\n model: 'anthropic.claude-3-haiku-20240307-v1:0',\n provider: 'bedrock',\n inputPricePerMillion: 0.25,\n outputPricePerMillion: 1.25,\n },\n {\n model: 'anthropic.claude-v2:1',\n provider: 'bedrock',\n inputPricePerMillion: 8,\n outputPricePerMillion: 24,\n },\n {\n model: 'anthropic.claude-v2',\n provider: 'bedrock',\n inputPricePerMillion: 8,\n outputPricePerMillion: 24,\n },\n {\n model: 'anthropic.claude-instant-v1',\n provider: 'bedrock',\n inputPricePerMillion: 0.8,\n outputPricePerMillion: 2.4,\n },\n\n // AWS Bedrock - Amazon\n {\n model: 'amazon.titan-text-express-v1',\n provider: 'bedrock',\n inputPricePerMillion: 0.2,\n outputPricePerMillion: 0.6,\n },\n {\n model: 'amazon.titan-text-lite-v1',\n provider: 'bedrock',\n inputPricePerMillion: 0.15,\n outputPricePerMillion: 0.2,\n },\n {\n model: 'amazon.titan-embed-text-v1',\n provider: 'bedrock',\n inputPricePerMillion: 0.1,\n outputPricePerMillion: 0,\n },\n {\n model: 'amazon.titan-embed-text-v2:0',\n provider: 'bedrock',\n inputPricePerMillion: 0.02,\n outputPricePerMillion: 0,\n },\n\n // AWS Bedrock - Meta Llama\n {\n model: 'meta.llama3-2-90b-instruct-v1:0',\n provider: 'bedrock',\n inputPricePerMillion: 2,\n outputPricePerMillion: 2,\n },\n {\n model: 'meta.llama3-2-11b-instruct-v1:0',\n provider: 'bedrock',\n inputPricePerMillion: 0.35,\n outputPricePerMillion: 0.4,\n },\n {\n model: 'meta.llama3-1-405b-instruct-v1:0',\n provider: 'bedrock',\n inputPricePerMillion: 5.32,\n outputPricePerMillion: 16,\n },\n {\n model: 'meta.llama3-1-70b-instruct-v1:0',\n provider: 'bedrock',\n inputPricePerMillion: 0.99,\n outputPricePerMillion: 0.99,\n },\n {\n model: 'meta.llama3-1-8b-instruct-v1:0',\n provider: 'bedrock',\n inputPricePerMillion: 0.22,\n outputPricePerMillion: 0.22,\n },\n {\n model: 'meta.llama3-70b-instruct-v1:0',\n provider: 'bedrock',\n inputPricePerMillion: 2.65,\n outputPricePerMillion: 3.5,\n },\n {\n model: 'meta.llama3-8b-instruct-v1:0',\n provider: 'bedrock',\n inputPricePerMillion: 0.3,\n outputPricePerMillion: 0.6,\n },\n\n // AWS Bedrock - Mistral\n {\n model: 'mistral.mistral-large-2407-v1:0',\n provider: 'bedrock',\n inputPricePerMillion: 4,\n outputPricePerMillion: 12,\n },\n {\n model: 'mistral.mistral-large-2402-v1:0',\n provider: 'bedrock',\n inputPricePerMillion: 4,\n outputPricePerMillion: 12,\n },\n {\n model: 'mistral.mistral-small-2402-v1:0',\n provider: 'bedrock',\n inputPricePerMillion: 1,\n outputPricePerMillion: 3,\n },\n {\n model: 'mistral.mixtral-8x7b-instruct-v0:1',\n provider: 'bedrock',\n inputPricePerMillion: 0.45,\n outputPricePerMillion: 0.7,\n },\n {\n model: 'mistral.mistral-7b-instruct-v0:2',\n provider: 'bedrock',\n inputPricePerMillion: 0.15,\n outputPricePerMillion: 0.2,\n },\n];\n\n// Create lookup map for fast access\nconst pricingMap = new Map<string, ModelPricing>();\nfor (const pricing of MODEL_PRICING) {\n pricingMap.set(pricing.model, pricing);\n // Also add without version suffix for fuzzy matching\n const baseModel = pricing.model.split('-20')[0].split(':')[0];\n if (!pricingMap.has(baseModel)) {\n pricingMap.set(baseModel, pricing);\n }\n}\n\n/**\n * Get pricing for a model\n */\nexport function getModelPricing(model: string, provider?: string): ModelPricing | null {\n // Exact match\n let pricing = pricingMap.get(model);\n if (pricing) return pricing;\n\n // Try without version\n const baseModel = model.split('-20')[0].split(':')[0];\n pricing = pricingMap.get(baseModel);\n if (pricing) return pricing;\n\n // Try provider-prefixed\n if (provider) {\n pricing = pricingMap.get(`${provider}.${model}`);\n if (pricing) return pricing;\n }\n\n return null;\n}\n\n/**\n * Calculate cost for a model call\n *\n * @param model - Model name\n * @param provider - Provider name (openai, anthropic, google, cohere, bedrock)\n * @param inputTokens - Number of input/prompt tokens\n * @param outputTokens - Number of output/completion tokens\n * @param cachedTokens - Number of cached tokens (optional)\n * @returns Cost in USD or null if pricing not found\n */\nexport function calculateCost(\n model: string,\n provider: string,\n inputTokens: number,\n outputTokens: number,\n cachedTokens?: number,\n): number | null {\n const pricing = getModelPricing(model, provider);\n if (!pricing) return null;\n\n const inputCost = (inputTokens / 1_000_000) * pricing.inputPricePerMillion;\n const outputCost = (outputTokens / 1_000_000) * pricing.outputPricePerMillion;\n\n let cachedCost = 0;\n if (cachedTokens && pricing.cachedInputPricePerMillion) {\n cachedCost = (cachedTokens / 1_000_000) * pricing.cachedInputPricePerMillion;\n }\n\n return inputCost + outputCost + cachedCost;\n}\n\n/**\n * Get all supported models for a provider\n */\nexport function getModelsForProvider(provider: string): ModelPricing[] {\n return MODEL_PRICING.filter((p) => p.provider === provider);\n}\n\n/**\n * Get all supported providers\n */\nexport function getSupportedProviders(): string[] {\n return [...new Set(MODEL_PRICING.map((p) => p.provider))];\n}\n\n/**\n * Check if a model is supported\n */\nexport function isModelSupported(model: string, provider?: string): boolean {\n return getModelPricing(model, provider) !== null;\n}\n\n/**\n * Format cost as currency string\n */\nexport function formatCost(cost: number, currency = 'USD'): string {\n return new Intl.NumberFormat('en-US', {\n style: 'currency',\n currency,\n minimumFractionDigits: 6,\n maximumFractionDigits: 6,\n }).format(cost);\n}\n","/**\n * HTTP Auto-Instrumentation\n *\n * Traces HTTP requests made via fetch.\n */\n\nimport { getKyte } from '../../client';\n\nlet instrumented = false;\nlet originalFetch: typeof fetch | null = null;\n\n/**\n * Create HTTP instrumentation\n */\nexport function createHttpInstrumentation(): void {\n if (instrumented) return;\n\n // Store original fetch\n if (typeof globalThis.fetch === 'function') {\n originalFetch = globalThis.fetch;\n\n // Replace global fetch with traced version\n globalThis.fetch = createTracedFetch(originalFetch);\n instrumented = true;\n console.debug('HTTP fetch instrumentation enabled');\n }\n}\n\n/**\n * Disable HTTP instrumentation\n */\nexport function disableHttpInstrumentation(): void {\n if (originalFetch) {\n globalThis.fetch = originalFetch;\n originalFetch = null;\n instrumented = false;\n }\n}\n\n/**\n * Create a traced version of fetch\n */\nfunction createTracedFetch(original: typeof fetch): typeof fetch {\n return async function tracedFetch(\n input: RequestInfo | URL,\n init?: RequestInit,\n ): Promise<Response> {\n let client;\n try {\n client = getKyte();\n } catch {\n return original(input, init);\n }\n\n const url = typeof input === 'string' ? input : input instanceof URL ? input.href : input.url;\n const method = init?.method || 'GET';\n\n // Skip Kyte API calls to avoid infinite loops\n if (url.includes('/traces') || url.includes('/spans') || url.includes('/scores')) {\n return original(input, init);\n }\n\n const span = client\n .spanBuilder(`http.${method.toLowerCase()}`)\n .setType('custom')\n .setInput({\n url,\n method,\n headers: sanitizeHeaders(init?.headers),\n })\n .setMetadata({\n httpMethod: method,\n httpUrl: url,\n })\n .start();\n\n try {\n const response = await original(input, init);\n\n span.setOutput({\n status: response.status,\n statusText: response.statusText,\n headers: sanitizeHeaders(response.headers),\n });\n\n span.update({\n metadata: {\n httpStatus: response.status,\n },\n });\n\n if (!response.ok) {\n span.setError(`HTTP ${response.status}: ${response.statusText}`);\n }\n\n await span.end();\n return response;\n } catch (error) {\n span.setError(error as Error);\n await span.end();\n throw error;\n }\n };\n}\n\n/**\n * Sanitize headers for logging (remove sensitive values)\n */\nfunction sanitizeHeaders(headers?: HeadersInit | Headers): Record<string, string> {\n const result: Record<string, string> = {};\n const sensitiveKeys = ['authorization', 'x-api-key', 'api-key', 'cookie', 'set-cookie'];\n\n if (!headers) return result;\n\n const entries: Array<[string, string]> =\n headers instanceof Headers\n ? Array.from((headers as any).entries())\n : Array.isArray(headers)\n ? headers\n : Object.entries(headers);\n\n for (const [key, value] of entries) {\n const lowerKey = key.toLowerCase();\n if (sensitiveKeys.includes(lowerKey)) {\n result[key] = '[REDACTED]';\n } else {\n result[key] = String(value);\n }\n }\n\n return result;\n}\n\n/**\n * Wrap a specific fetch call with tracing\n *\n * @example\n * ```typescript\n * import { tracedFetch } from '@kyte/sdk';\n *\n * const response = await tracedFetch('https://api.example.com/data', {\n * method: 'POST',\n * body: JSON.stringify({ query: 'test' })\n * }, {\n * spanName: 'api.getData',\n * tags: ['api'],\n * });\n * ```\n */\nexport async function tracedFetch(\n input: RequestInfo | URL,\n init?: RequestInit,\n options?: {\n spanName?: string;\n tags?: string[];\n metadata?: Record<string, any>;\n },\n): Promise<Response> {\n let client;\n try {\n client = getKyte();\n } catch {\n return fetch(input, init);\n }\n\n const url = typeof input === 'string' ? input : input instanceof URL ? input.href : input.url;\n const method = init?.method || 'GET';\n\n const span = client\n .spanBuilder(options?.spanName || `http.${method.toLowerCase()}`)\n .setType('custom')\n .setInput({\n url,\n method,\n headers: sanitizeHeaders(init?.headers),\n })\n .setTags(options?.tags || [])\n .setMetadata({\n ...options?.metadata,\n httpMethod: method,\n httpUrl: url,\n })\n .start();\n\n try {\n const response = await fetch(input, init);\n\n span.setOutput({\n status: response.status,\n statusText: response.statusText,\n });\n\n if (!response.ok) {\n span.setError(`HTTP ${response.status}: ${response.statusText}`);\n }\n\n await span.end();\n return response;\n } catch (error) {\n span.setError(error as Error);\n await span.end();\n throw error;\n }\n}\n","/**\n * Auto-instrumentation for AutoGen\n *\n * Automatically traces AutoGen agent conversations, multi-agent\n * interactions, and code executions when patched.\n *\n * Wraps:\n * - ConversableAgent.run()\n * - ConversableAgent.initiate_chat() / a]_initiate_chat()\n * - GroupChat.run() / GroupChatManager.run()\n * - Tool/function call execution\n */\n\nimport { getKyte } from '../../client';\n\nlet isPatched = false;\n\nconst originals: {\n agentRun?: Function;\n agentInitiateChat?: Function;\n agentGenerateReply?: Function;\n groupChatRun?: Function;\n agentExecuteFunction?: Function;\n} = {};\n\n/**\n * Wrap an async prototype method with span tracing\n */\nfunction patchProtoMethod(\n proto: any,\n methodName: string,\n createSpanFn: (\n instance: any,\n args: any[],\n ) => { name: string; type: string; input: Record<string, any>; meta: Record<string, any> },\n extractOutput: (result: any) => Record<string, any>,\n): Function | undefined {\n const original = proto[methodName];\n if (typeof original !== 'function') return undefined;\n\n proto[methodName] = async function (this: any, ...args: any[]) {\n let client;\n try {\n client = getKyte();\n } catch {\n return original.apply(this, args);\n }\n\n const spanDef = createSpanFn(this, args);\n const span = client\n .spanBuilder(spanDef.name)\n .setType(spanDef.type as any)\n .setInput(spanDef.input)\n .setMetadata({ provider: 'autogen', ...spanDef.meta })\n .start();\n\n try {\n const result = await original.apply(this, args);\n span.setOutput(extractOutput(result));\n await span.end();\n return result;\n } catch (error) {\n span.setError(error as Error);\n await span.end();\n throw error;\n }\n };\n\n return original;\n}\n\nexport async function patch(): Promise<void> {\n if (isPatched) return;\n\n try {\n const mod: any = await import('autogen');\n\n // Patch ConversableAgent.run()\n if (mod.ConversableAgent?.prototype?.run) {\n originals.agentRun = patchProtoMethod(\n mod.ConversableAgent.prototype,\n 'run',\n (instance, args) => ({\n name: `autogen.agent.run.${instance.name || 'unknown'}`,\n type: 'agent',\n input: {\n agentName: instance.name,\n task: typeof args[0] === 'string' ? args[0]?.substring(0, 1000) : args[0],\n },\n meta: {\n agentName: instance.name,\n agentType: instance.constructor?.name,\n systemMessage: instance.system_message?.substring(0, 300),\n },\n }),\n (result) => ({\n response: typeof result === 'string' ? result.substring(0, 2000) : result,\n }),\n );\n }\n\n // Patch ConversableAgent.initiate_chat()\n if (mod.ConversableAgent?.prototype?.initiate_chat) {\n originals.agentInitiateChat = patchProtoMethod(\n mod.ConversableAgent.prototype,\n 'initiate_chat',\n (instance, args) => ({\n name: `autogen.agent.initiate_chat.${instance.name || 'unknown'}`,\n type: 'agent',\n input: {\n sender: instance.name,\n recipient: args[0]?.name || 'unknown',\n message:\n typeof args[1] === 'string'\n ? args[1]?.substring(0, 1000)\n : args[1]?.message?.substring(0, 1000),\n maxTurns: args[1]?.max_turns || args[2],\n },\n meta: {\n sender: instance.name,\n recipient: args[0]?.name,\n senderType: instance.constructor?.name,\n },\n }),\n (result) => ({\n chatHistory: Array.isArray(result?.chat_history)\n ? result.chat_history.slice(-5).map((m: any) => ({\n role: m.role,\n content: typeof m.content === 'string' ? m.content.substring(0, 500) : m.content,\n }))\n : result,\n summary: result?.summary?.substring(0, 1000),\n }),\n );\n }\n\n // Patch ConversableAgent.generate_reply()\n if (mod.ConversableAgent?.prototype?.generate_reply) {\n originals.agentGenerateReply = patchProtoMethod(\n mod.ConversableAgent.prototype,\n 'generate_reply',\n (instance, args) => ({\n name: `autogen.agent.generate_reply.${instance.name || 'unknown'}`,\n type: 'llm',\n input: {\n agentName: instance.name,\n messages: Array.isArray(args[0])\n ? args[0].slice(-3).map((m: any) => ({\n role: m.role,\n content: typeof m.content === 'string' ? m.content.substring(0, 300) : m.content,\n }))\n : args[0],\n },\n meta: {\n agentName: instance.name,\n llmConfig: instance.llm_config?.model || instance.llm_config?.config_list?.[0]?.model,\n },\n }),\n (result) => ({\n reply: typeof result === 'string' ? result.substring(0, 2000) : result,\n }),\n );\n }\n\n // Patch GroupChatManager.run() if available\n if (mod.GroupChatManager?.prototype?.run) {\n originals.groupChatRun = patchProtoMethod(\n mod.GroupChatManager.prototype,\n 'run',\n (instance, args) => ({\n name: 'autogen.groupchat.run',\n type: 'chain',\n input: {\n managerName: instance.name,\n agentCount: instance.groupchat?.agents?.length,\n agents: instance.groupchat?.agents?.map((a: any) => a.name),\n task: typeof args[0] === 'string' ? args[0]?.substring(0, 1000) : args[0],\n maxRounds: instance.groupchat?.max_round,\n },\n meta: {\n managerName: instance.name,\n speakerSelectionMethod: instance.groupchat?.speaker_selection_method,\n maxRound: instance.groupchat?.max_round,\n },\n }),\n (result) => ({\n chatHistory: Array.isArray(result?.chat_history)\n ? result.chat_history.slice(-5).map((m: any) => ({\n role: m.role,\n name: m.name,\n content: typeof m.content === 'string' ? m.content.substring(0, 500) : m.content,\n }))\n : result,\n }),\n );\n }\n\n // Patch execute_function if available\n if (mod.ConversableAgent?.prototype?.execute_function) {\n originals.agentExecuteFunction = patchProtoMethod(\n mod.ConversableAgent.prototype,\n 'execute_function',\n (instance, args) => ({\n name: `autogen.agent.execute_function.${args[0]?.name || 'unknown'}`,\n type: 'tool',\n input: {\n functionName: args[0]?.name,\n arguments: args[0]?.arguments,\n agentName: instance.name,\n },\n meta: {\n agentName: instance.name,\n functionName: args[0]?.name,\n },\n }),\n (result) => ({\n output: typeof result === 'string' ? result.substring(0, 2000) : result,\n success: result?.is_exec_success,\n }),\n );\n }\n\n isPatched = true;\n } catch {\n // Framework not installed - skip\n }\n}\n\nexport function unpatch(): void {\n if (!isPatched) return;\n\n try {\n const mod: any = require('autogen');\n\n if (originals.agentRun && mod.ConversableAgent?.prototype) {\n mod.ConversableAgent.prototype.run = originals.agentRun;\n }\n if (originals.agentInitiateChat && mod.ConversableAgent?.prototype) {\n mod.ConversableAgent.prototype.initiate_chat = originals.agentInitiateChat;\n }\n if (originals.agentGenerateReply && mod.ConversableAgent?.prototype) {\n mod.ConversableAgent.prototype.generate_reply = originals.agentGenerateReply;\n }\n if (originals.groupChatRun && mod.GroupChatManager?.prototype) {\n mod.GroupChatManager.prototype.run = originals.groupChatRun;\n }\n if (originals.agentExecuteFunction && mod.ConversableAgent?.prototype) {\n mod.ConversableAgent.prototype.execute_function = originals.agentExecuteFunction;\n }\n } catch {\n // Module not available\n }\n\n isPatched = false;\n}\n\nexport function isPatchActive(): boolean {\n return isPatched;\n}\n","/**\n * Auto-instrumentation for Browser-Use\n *\n * Automatically traces Browser-Use browser actions, page navigations,\n * and element interactions when patched.\n *\n * Wraps:\n * - Agent.run()\n * - Browser.goto() / navigate()\n * - Browser action methods (click, type, extract, etc.)\n * - Controller.act()\n */\n\nimport { getKyte } from '../../client';\n\nlet isPatched = false;\n\nconst originals: {\n agentRun?: Function;\n browserGoto?: Function;\n browserClick?: Function;\n browserType?: Function;\n browserExtract?: Function;\n controllerAct?: Function;\n browserGetState?: Function;\n} = {};\n\n/**\n * Wrap a prototype method with span tracing\n */\nfunction patchMethod(\n proto: any,\n methodName: string,\n spanName: string,\n spanType: string,\n buildInput: (instance: any, args: any[]) => Record<string, any>,\n buildOutput: (result: any) => Record<string, any>,\n buildMeta: (instance: any) => Record<string, any>,\n): Function | undefined {\n const original = proto[methodName];\n if (typeof original !== 'function') return undefined;\n\n proto[methodName] = async function (this: any, ...args: any[]) {\n let client;\n try {\n client = getKyte();\n } catch {\n return original.apply(this, args);\n }\n\n const span = client\n .spanBuilder(spanName)\n .setType(spanType as any)\n .setInput(buildInput(this, args))\n .setMetadata({ provider: 'browser-use', ...buildMeta(this) })\n .start();\n\n try {\n const result = await original.apply(this, args);\n span.setOutput(buildOutput(result));\n await span.end();\n return result;\n } catch (error) {\n span.setError(error as Error);\n await span.end();\n throw error;\n }\n };\n\n return original;\n}\n\nexport async function patch(): Promise<void> {\n if (isPatched) return;\n\n try {\n const mod: any = await import('browser-use');\n\n // Patch Agent.run() - the main entry point\n if (mod.Agent?.prototype?.run) {\n originals.agentRun = patchMethod(\n mod.Agent.prototype,\n 'run',\n 'browser-use.agent.run',\n 'agent',\n (instance, args) => ({\n task: instance.task?.substring(0, 1000) || args[0]?.substring(0, 1000),\n maxSteps: instance.max_steps || instance.maxSteps,\n model: instance.llm?.model || instance.llm?.modelName,\n }),\n (result) => ({\n finalResult:\n typeof result === 'string'\n ? result.substring(0, 2000)\n : result?.final_result?.substring(0, 2000) ||\n JSON.stringify(result)?.substring(0, 2000),\n stepsExecuted: result?.steps?.length || result?.history?.length,\n success: result?.is_done || result?.success,\n }),\n (instance) => ({\n task: instance.task?.substring(0, 200),\n model: instance.llm?.model || instance.llm?.modelName,\n maxSteps: instance.max_steps || instance.maxSteps,\n }),\n );\n }\n\n // Patch Controller.act() - handles individual browser actions\n if (mod.Controller?.prototype?.act) {\n originals.controllerAct = patchMethod(\n mod.Controller.prototype,\n 'act',\n 'browser-use.controller.act',\n 'tool',\n (_instance, args) => ({\n action: args[0]?.action || args[0],\n selector: args[0]?.selector || args[0]?.element,\n text: args[0]?.text?.substring(0, 500),\n url: args[0]?.url,\n }),\n (result) => ({\n success: result?.success !== false,\n extractedContent:\n typeof result === 'string'\n ? result.substring(0, 1000)\n : result?.extracted_content?.substring(0, 1000),\n error: result?.error,\n }),\n () => ({}),\n );\n }\n\n // Patch Browser class methods if exposed\n if (mod.Browser?.prototype) {\n // goto / navigate\n if (mod.Browser.prototype.goto) {\n originals.browserGoto = patchMethod(\n mod.Browser.prototype,\n 'goto',\n 'browser-use.browser.goto',\n 'tool',\n (_instance, args) => ({\n url: args[0],\n }),\n (result) => ({\n success: true,\n currentUrl: result?.url || result,\n }),\n () => ({}),\n );\n }\n\n // click\n if (mod.Browser.prototype.click) {\n originals.browserClick = patchMethod(\n mod.Browser.prototype,\n 'click',\n 'browser-use.browser.click',\n 'tool',\n (_instance, args) => ({\n selector: args[0],\n options: args[1],\n }),\n () => ({ success: true }),\n () => ({}),\n );\n }\n\n // type / fill\n if (mod.Browser.prototype.type) {\n originals.browserType = patchMethod(\n mod.Browser.prototype,\n 'type',\n 'browser-use.browser.type',\n 'tool',\n (_instance, args) => ({\n selector: args[0],\n text: typeof args[1] === 'string' ? args[1].substring(0, 200) : args[1],\n }),\n () => ({ success: true }),\n () => ({}),\n );\n }\n\n // extract / get_text\n if (mod.Browser.prototype.extract) {\n originals.browserExtract = patchMethod(\n mod.Browser.prototype,\n 'extract',\n 'browser-use.browser.extract',\n 'tool',\n (_instance, args) => ({\n selector: args[0],\n instruction: args[1]?.substring(0, 500),\n }),\n (result) => ({\n extractedContent:\n typeof result === 'string'\n ? result.substring(0, 2000)\n : JSON.stringify(result)?.substring(0, 2000),\n }),\n () => ({}),\n );\n }\n\n // get_state - useful for seeing page context\n if (mod.Browser.prototype.get_state) {\n originals.browserGetState = patchMethod(\n mod.Browser.prototype,\n 'get_state',\n 'browser-use.browser.get_state',\n 'tool',\n () => ({}),\n (result) => ({\n url: result?.url,\n title: result?.title,\n elementCount: result?.elements?.length,\n }),\n () => ({}),\n );\n }\n }\n\n isPatched = true;\n } catch {\n // Framework not installed - skip\n }\n}\n\nexport function unpatch(): void {\n if (!isPatched) return;\n\n try {\n const mod: any = require('browser-use');\n\n if (originals.agentRun && mod.Agent?.prototype) {\n mod.Agent.prototype.run = originals.agentRun;\n }\n if (originals.controllerAct && mod.Controller?.prototype) {\n mod.Controller.prototype.act = originals.controllerAct;\n }\n if (mod.Browser?.prototype) {\n if (originals.browserGoto) mod.Browser.prototype.goto = originals.browserGoto;\n if (originals.browserClick) mod.Browser.prototype.click = originals.browserClick;\n if (originals.browserType) mod.Browser.prototype.type = originals.browserType;\n if (originals.browserExtract) mod.Browser.prototype.extract = originals.browserExtract;\n if (originals.browserGetState) mod.Browser.prototype.get_state = originals.browserGetState;\n }\n } catch {\n // Module not available\n }\n\n isPatched = false;\n}\n\nexport function isPatchActive(): boolean {\n return isPatched;\n}\n","/**\n * Auto-instrumentation for Claude Agent SDK (@anthropic-ai/agent-sdk)\n *\n * Automatically traces agent executions, tool use, and conversation turns.\n * Patches Agent.run() and related methods to capture execution traces.\n */\n\nimport { getKyte } from '../../client';\nimport { calculateCost } from '../../cost-tracking';\n\nlet isPatched = false;\nlet originals: {\n agentRun?: Function;\n agentExecute?: Function;\n} = {};\n\nexport async function patch(): Promise<void> {\n if (isPatched) return;\n\n try {\n const mod = (await import('@anthropic-ai/agent-sdk')) as any;\n\n // Patch Agent.run() - primary execution method\n const AgentProto = mod.Agent?.prototype;\n if (AgentProto && typeof AgentProto.run === 'function') {\n originals.agentRun = AgentProto.run;\n AgentProto.run = createTracedAgentRun(originals.agentRun!);\n }\n\n // Patch Agent.execute() if it exists as an alternative entry point\n if (AgentProto && typeof AgentProto.execute === 'function') {\n originals.agentExecute = AgentProto.execute;\n AgentProto.execute = createTracedAgentExecute(originals.agentExecute!);\n }\n\n isPatched = true;\n } catch {\n // Framework not installed - skip\n }\n}\n\nexport function unpatch(): void {\n if (!isPatched) return;\n\n try {\n const mod = require('@anthropic-ai/agent-sdk') as any;\n const AgentProto = mod.Agent?.prototype;\n\n if (AgentProto && originals.agentRun) {\n AgentProto.run = originals.agentRun;\n }\n if (AgentProto && originals.agentExecute) {\n AgentProto.execute = originals.agentExecute;\n }\n } catch {\n // ignore\n }\n\n originals = {};\n isPatched = false;\n}\n\nexport function isPatchActive(): boolean {\n return isPatched;\n}\n\n/**\n * Wrap Agent.run() to trace the full agent execution lifecycle.\n */\nfunction createTracedAgentRun(originalRun: Function): Function {\n return async function tracedRun(this: any, input: any, options?: any) {\n let client;\n try {\n client = getKyte();\n } catch {\n return originalRun.call(this, input, options);\n }\n\n const agentName = this.name || this.constructor?.name || 'claude-agent';\n const modelName =\n this.model || this.modelName || options?.model || 'claude-3-5-sonnet-20241022';\n\n const span = client\n .spanBuilder('claude-agent-sdk.agent.run')\n .setType('agent' as any)\n .setModelName(modelName)\n .setInput({\n agent: agentName,\n model: modelName,\n input:\n typeof input === 'string'\n ? input.slice(0, 1000)\n : Array.isArray(input)\n ? input.map((m: any) => ({\n role: m.role,\n content: typeof m.content === 'string' ? m.content.slice(0, 500) : m.content,\n }))\n : JSON.stringify(input)?.slice(0, 1000),\n tools: this.tools?.map((t: any) => t.name || t.constructor?.name).filter(Boolean),\n })\n .setMetadata({ provider: 'anthropic', agentName, framework: 'claude-agent-sdk' })\n .start();\n\n try {\n const result = await originalRun.call(this, input, options);\n\n const output: Record<string, any> = {\n agent: agentName,\n };\n\n // Extract final response content\n if (result?.content) {\n output.content =\n typeof result.content === 'string' ? result.content.slice(0, 2000) : result.content;\n }\n\n if (result?.response) {\n output.response =\n typeof result.response === 'string' ? result.response.slice(0, 2000) : result.response;\n }\n\n // Capture tool usage\n if (result?.toolUses || result?.tool_uses) {\n const toolUses = result.toolUses || result.tool_uses;\n output.toolUses = Array.isArray(toolUses)\n ? toolUses.map((tu: any) => ({\n name: tu.name || tu.tool_name,\n id: tu.id,\n }))\n : toolUses;\n }\n\n // Capture turn/step count\n if (result?.turns !== undefined) {\n output.turns = result.turns;\n }\n if (result?.steps !== undefined) {\n output.stepCount = Array.isArray(result.steps) ? result.steps.length : result.steps;\n }\n\n // Extract token usage from result\n const usage = result?.usage || result?.meta?.usage;\n if (usage) {\n span.setTokens({\n prompt: usage.input_tokens || usage.prompt_tokens,\n completion: usage.output_tokens || usage.completion_tokens,\n total:\n (usage.input_tokens || usage.prompt_tokens || 0) +\n (usage.output_tokens || usage.completion_tokens || 0),\n cached: usage.cache_read_input_tokens || usage.cache_creation_input_tokens,\n });\n\n const cost = calculateCost(\n modelName,\n 'anthropic',\n usage.input_tokens || usage.prompt_tokens || 0,\n usage.output_tokens || usage.completion_tokens || 0,\n usage.cache_read_input_tokens,\n );\n if (cost !== null) {\n span.setCost(cost);\n }\n }\n\n span.setOutput(output);\n await span.end();\n return result;\n } catch (error) {\n span.setError(error as Error);\n await span.end();\n throw error;\n }\n };\n}\n\n/**\n * Wrap Agent.execute() as an alternative execution entry point.\n */\nfunction createTracedAgentExecute(originalExecute: Function): Function {\n return async function tracedExecute(this: any, input: any, options?: any) {\n let client;\n try {\n client = getKyte();\n } catch {\n return originalExecute.call(this, input, options);\n }\n\n const agentName = this.name || this.constructor?.name || 'claude-agent';\n const modelName = this.model || this.modelName || options?.model;\n\n const span = client\n .spanBuilder('claude-agent-sdk.agent.execute')\n .setType('agent' as any)\n .setModelName(modelName || '')\n .setInput({\n agent: agentName,\n model: modelName,\n input:\n typeof input === 'string' ? input.slice(0, 1000) : JSON.stringify(input)?.slice(0, 1000),\n })\n .setMetadata({ provider: 'anthropic', agentName, framework: 'claude-agent-sdk' })\n .start();\n\n try {\n const result = await originalExecute.call(this, input, options);\n\n span.setOutput({\n agent: agentName,\n result: typeof result === 'string' ? result.slice(0, 2000) : result,\n });\n\n const usage = result?.usage || result?.meta?.usage;\n if (usage) {\n span.setTokens({\n prompt: usage.input_tokens || usage.prompt_tokens,\n completion: usage.output_tokens || usage.completion_tokens,\n total: (usage.input_tokens || 0) + (usage.output_tokens || 0),\n });\n }\n\n await span.end();\n return result;\n } catch (error) {\n span.setError(error as Error);\n await span.end();\n throw error;\n }\n };\n}\n","/**\n * Auto-instrumentation for CrewAI\n *\n * Automatically traces CrewAI crew executions, agent tasks,\n * and tool invocations when patched.\n *\n * Wraps:\n * - Crew.kickoff() / Crew.kickoffAsync()\n * - Agent.execute_task()\n * - Task.execute()\n */\n\nimport { getKyte } from '../../client';\n\nlet isPatched = false;\n\n// Store originals so we can restore them in unpatch()\nconst originals: {\n crewKickoff?: Function;\n crewKickoffAsync?: Function;\n agentExecuteTask?: Function;\n taskExecute?: Function;\n} = {};\n\n/**\n * Helper: wrap a prototype method with tracing\n */\nfunction wrapMethod(\n proto: any,\n methodName: string,\n spanName: string,\n spanType: string,\n buildInput: (instance: any, args: any[]) => Record<string, any>,\n buildOutput: (result: any) => Record<string, any>,\n buildMeta: (instance: any) => Record<string, any>,\n): Function {\n const original = proto[methodName];\n if (typeof original !== 'function') return original;\n\n proto[methodName] = async function (this: any, ...args: any[]) {\n let client;\n try {\n client = getKyte();\n } catch {\n return original.apply(this, args);\n }\n\n const span = client\n .spanBuilder(spanName)\n .setType(spanType as any)\n .setInput(buildInput(this, args))\n .setMetadata({ provider: 'crewai', ...buildMeta(this) })\n .start();\n\n try {\n const result = await original.apply(this, args);\n span.setOutput(buildOutput(result));\n await span.end();\n return result;\n } catch (error) {\n span.setError(error as Error);\n await span.end();\n throw error;\n }\n };\n\n return original;\n}\n\nexport async function patch(): Promise<void> {\n if (isPatched) return;\n\n try {\n const mod: any = await import('crewai');\n\n // Patch Crew.kickoff()\n if (mod.Crew?.prototype?.kickoff) {\n originals.crewKickoff = wrapMethod(\n mod.Crew.prototype,\n 'kickoff',\n 'crewai.crew.kickoff',\n 'chain',\n (instance, args) => ({\n crewName: instance.name || instance.constructor?.name,\n inputs: args[0],\n agentCount: instance.agents?.length,\n taskCount: instance.tasks?.length,\n }),\n (result) => ({\n result: typeof result === 'string' ? result : JSON.stringify(result)?.substring(0, 2000),\n }),\n (instance) => ({\n crewName: instance.name,\n verbose: instance.verbose,\n process: instance.process,\n }),\n );\n }\n\n // Patch Crew.kickoffAsync()\n if (mod.Crew?.prototype?.kickoffAsync) {\n originals.crewKickoffAsync = wrapMethod(\n mod.Crew.prototype,\n 'kickoffAsync',\n 'crewai.crew.kickoffAsync',\n 'chain',\n (instance, args) => ({\n crewName: instance.name || instance.constructor?.name,\n inputs: args[0],\n agentCount: instance.agents?.length,\n taskCount: instance.tasks?.length,\n }),\n (result) => ({\n result: typeof result === 'string' ? result : JSON.stringify(result)?.substring(0, 2000),\n }),\n (instance) => ({\n crewName: instance.name,\n verbose: instance.verbose,\n process: instance.process,\n }),\n );\n }\n\n // Patch Agent.execute_task()\n if (mod.Agent?.prototype?.execute_task) {\n originals.agentExecuteTask = wrapMethod(\n mod.Agent.prototype,\n 'execute_task',\n 'crewai.agent.execute_task',\n 'agent',\n (instance, args) => ({\n agentRole: instance.role,\n agentGoal: instance.goal,\n task: args[0]?.description?.substring(0, 500),\n tools: instance.tools?.map((t: any) => t.name || t.constructor?.name),\n }),\n (result) => ({\n output: typeof result === 'string' ? result.substring(0, 2000) : result,\n }),\n (instance) => ({\n agentRole: instance.role,\n llm: instance.llm?.model || instance.llm?.model_name,\n backstory: instance.backstory?.substring(0, 200),\n }),\n );\n }\n\n // Patch Task.execute()\n if (mod.Task?.prototype?.execute) {\n originals.taskExecute = wrapMethod(\n mod.Task.prototype,\n 'execute',\n 'crewai.task.execute',\n 'chain',\n (instance, _args) => ({\n description: instance.description?.substring(0, 500),\n expectedOutput: instance.expected_output?.substring(0, 200),\n agentRole: instance.agent?.role,\n }),\n (result) => ({\n output: typeof result === 'string' ? result.substring(0, 2000) : result,\n }),\n (instance) => ({\n taskDescription: instance.description?.substring(0, 100),\n agentRole: instance.agent?.role,\n }),\n );\n }\n\n isPatched = true;\n } catch {\n // Framework not installed - skip\n }\n}\n\nexport function unpatch(): void {\n if (!isPatched) return;\n\n try {\n const mod: any = require('crewai');\n\n if (originals.crewKickoff && mod.Crew?.prototype) {\n mod.Crew.prototype.kickoff = originals.crewKickoff;\n }\n if (originals.crewKickoffAsync && mod.Crew?.prototype) {\n mod.Crew.prototype.kickoffAsync = originals.crewKickoffAsync;\n }\n if (originals.agentExecuteTask && mod.Agent?.prototype) {\n mod.Agent.prototype.execute_task = originals.agentExecuteTask;\n }\n if (originals.taskExecute && mod.Task?.prototype) {\n mod.Task.prototype.execute = originals.taskExecute;\n }\n } catch {\n // Module not available\n }\n\n isPatched = false;\n}\n\nexport function isPatchActive(): boolean {\n return isPatched;\n}\n","/**\n * Auto-instrumentation for DSPy\n *\n * Automatically traces DSPy module executions, optimizers,\n * and prediction pipelines when patched.\n *\n * Wraps:\n * - Module.forward() / Module.__call__()\n * - Predict.__call__() / Predict.forward()\n * - ChainOfThought.forward()\n * - Retrieve.forward()\n * - LM.__call__() (language model calls)\n */\n\nimport { getKyte } from '../../client';\n\nlet isPatched = false;\n\nconst originals: {\n moduleForward?: Function;\n moduleCall?: Function;\n predictForward?: Function;\n predictCall?: Function;\n cotForward?: Function;\n retrieveForward?: Function;\n lmCall?: Function;\n lmGenerate?: Function;\n} = {};\n\n/**\n * Wrap a prototype method with span tracing\n */\nfunction patchMethod(\n proto: any,\n methodName: string,\n spanName: string,\n spanType: string,\n buildInput: (instance: any, args: any[]) => Record<string, any>,\n buildOutput: (result: any) => Record<string, any>,\n buildMeta: (instance: any) => Record<string, any>,\n): Function | undefined {\n const original = proto[methodName];\n if (typeof original !== 'function') return undefined;\n\n proto[methodName] = async function (this: any, ...args: any[]) {\n let client;\n try {\n client = getKyte();\n } catch {\n return original.apply(this, args);\n }\n\n const meta = buildMeta(this);\n const spanBuilder = client\n .spanBuilder(spanName)\n .setType(spanType as any)\n .setInput(buildInput(this, args))\n .setMetadata({ provider: 'dspy', ...meta });\n\n if (meta.model) {\n spanBuilder.setModelName(meta.model);\n }\n\n const span = spanBuilder.start();\n\n try {\n const result = await original.apply(this, args);\n\n span.setOutput(buildOutput(result));\n\n // Extract token usage from DSPy's history if available\n if (result?.lm_usage || result?._lm_usage) {\n const usage = result.lm_usage || result._lm_usage;\n span.setTokens({\n prompt: usage.prompt_tokens,\n completion: usage.completion_tokens,\n total: usage.total_tokens,\n });\n }\n\n await span.end();\n return result;\n } catch (error) {\n span.setError(error as Error);\n await span.end();\n throw error;\n }\n };\n\n return original;\n}\n\nexport async function patch(): Promise<void> {\n if (isPatched) return;\n\n try {\n const mod: any = await import('dspy');\n\n // Patch Module.forward() - the core abstraction\n if (mod.Module?.prototype?.forward) {\n originals.moduleForward = patchMethod(\n mod.Module.prototype,\n 'forward',\n 'dspy.module.forward',\n 'chain',\n (instance, args) => ({\n moduleName: instance.constructor?.name || 'Module',\n args:\n args.length === 1 && typeof args[0] === 'object'\n ? Object.fromEntries(\n Object.entries(args[0]).map(([k, v]) => [\n k,\n typeof v === 'string' ? (v as string).substring(0, 500) : v,\n ]),\n )\n : args.map((a: any) => (typeof a === 'string' ? a.substring(0, 500) : a)),\n }),\n (result) => {\n if (!result) return {};\n // DSPy Predictions are dict-like objects\n if (typeof result === 'object' && result.toDict) {\n return { prediction: result.toDict() };\n }\n return {\n prediction:\n typeof result === 'string'\n ? result.substring(0, 2000)\n : JSON.stringify(result)?.substring(0, 2000),\n };\n },\n (instance) => ({\n moduleName: instance.constructor?.name,\n model: instance.lm?.model || instance.lm?.model_name,\n }),\n );\n }\n\n // Patch Module.__call__() if it exists (Python-style callable)\n if (mod.Module?.prototype?.__call__) {\n originals.moduleCall = patchMethod(\n mod.Module.prototype,\n '__call__',\n 'dspy.module.call',\n 'chain',\n (instance, args) => ({\n moduleName: instance.constructor?.name || 'Module',\n args: args.map((a: any) => (typeof a === 'string' ? a.substring(0, 500) : a)),\n }),\n (result) => ({\n prediction:\n typeof result === 'string'\n ? result.substring(0, 2000)\n : JSON.stringify(result)?.substring(0, 2000),\n }),\n (instance) => ({\n moduleName: instance.constructor?.name,\n }),\n );\n }\n\n // Patch Predict.forward()\n if (mod.Predict?.prototype?.forward) {\n originals.predictForward = patchMethod(\n mod.Predict.prototype,\n 'forward',\n 'dspy.predict.forward',\n 'llm',\n (instance, args) => ({\n signature: instance.signature?.toString?.() || instance.signature,\n inputs: args[0],\n demos: instance.demos?.length,\n }),\n (result) => {\n if (!result) return {};\n const output: Record<string, any> = {};\n if (result.completions) {\n output.completions = result.completions;\n }\n if (typeof result === 'object') {\n // Extract output fields from Prediction\n for (const key of Object.keys(result)) {\n if (key !== '_lm_usage' && key !== 'lm_usage') {\n const val = result[key];\n output[key] = typeof val === 'string' ? val.substring(0, 1000) : val;\n }\n }\n }\n return output;\n },\n (instance) => ({\n signature: instance.signature?.toString?.(),\n model: instance.lm?.model || instance.lm?.model_name,\n demoCount: instance.demos?.length,\n }),\n );\n }\n\n // Patch ChainOfThought.forward() if available\n if (mod.ChainOfThought?.prototype?.forward) {\n originals.cotForward = patchMethod(\n mod.ChainOfThought.prototype,\n 'forward',\n 'dspy.chain_of_thought.forward',\n 'llm',\n (instance, args) => ({\n signature: instance.signature?.toString?.() || instance.signature,\n inputs: args[0],\n }),\n (result) => ({\n rationale: result?.rationale?.substring(0, 1000),\n answer: result?.answer?.substring(0, 1000) || result?.output?.substring(0, 1000),\n }),\n (instance) => ({\n signature: instance.signature?.toString?.(),\n model: instance.lm?.model || instance.lm?.model_name,\n }),\n );\n }\n\n // Patch Retrieve.forward() if available\n if (mod.Retrieve?.prototype?.forward) {\n originals.retrieveForward = patchMethod(\n mod.Retrieve.prototype,\n 'forward',\n 'dspy.retrieve.forward',\n 'retriever',\n (_instance, args) => ({\n query: typeof args[0] === 'string' ? args[0].substring(0, 500) : args[0],\n k: args[1] || _instance.k,\n }),\n (result) => ({\n passageCount: Array.isArray(result?.passages) ? result.passages.length : undefined,\n passages: Array.isArray(result?.passages)\n ? result.passages\n .slice(0, 3)\n .map((p: any) => (typeof p === 'string' ? p.substring(0, 200) : p))\n : undefined,\n }),\n (instance) => ({\n retrieverType: instance.constructor?.name,\n k: instance.k,\n }),\n );\n }\n\n // Patch LM.__call__() or LM.generate() for low-level LM tracing\n if (mod.LM?.prototype) {\n if (mod.LM.prototype.__call__) {\n originals.lmCall = patchMethod(\n mod.LM.prototype,\n '__call__',\n 'dspy.lm.call',\n 'llm',\n (instance, args) => ({\n prompt: typeof args[0] === 'string' ? args[0].substring(0, 1000) : args[0],\n model: instance.model || instance.model_name,\n }),\n (result) => ({\n response:\n typeof result === 'string'\n ? result.substring(0, 2000)\n : Array.isArray(result)\n ? result\n .slice(0, 3)\n .map((r: any) => (typeof r === 'string' ? r.substring(0, 500) : r))\n : result,\n }),\n (instance) => ({\n model: instance.model || instance.model_name,\n provider: instance.provider,\n }),\n );\n }\n\n if (mod.LM.prototype.generate) {\n originals.lmGenerate = patchMethod(\n mod.LM.prototype,\n 'generate',\n 'dspy.lm.generate',\n 'llm',\n (instance, args) => ({\n prompt: typeof args[0] === 'string' ? args[0].substring(0, 1000) : args[0],\n model: instance.model || instance.model_name,\n nCompletions: args[1],\n }),\n (result) => ({\n completions: Array.isArray(result)\n ? result\n .slice(0, 3)\n .map((r: any) => (typeof r === 'string' ? r.substring(0, 500) : r))\n : typeof result === 'string'\n ? result.substring(0, 2000)\n : result,\n }),\n (instance) => ({\n model: instance.model || instance.model_name,\n provider: instance.provider,\n }),\n );\n }\n }\n\n isPatched = true;\n } catch {\n // Framework not installed - skip\n }\n}\n\nexport function unpatch(): void {\n if (!isPatched) return;\n\n try {\n const mod: any = require('dspy');\n\n if (originals.moduleForward && mod.Module?.prototype) {\n mod.Module.prototype.forward = originals.moduleForward;\n }\n if (originals.moduleCall && mod.Module?.prototype) {\n mod.Module.prototype.__call__ = originals.moduleCall;\n }\n if (originals.predictForward && mod.Predict?.prototype) {\n mod.Predict.prototype.forward = originals.predictForward;\n }\n if (originals.cotForward && mod.ChainOfThought?.prototype) {\n mod.ChainOfThought.prototype.forward = originals.cotForward;\n }\n if (originals.retrieveForward && mod.Retrieve?.prototype) {\n mod.Retrieve.prototype.forward = originals.retrieveForward;\n }\n if (mod.LM?.prototype) {\n if (originals.lmCall) mod.LM.prototype.__call__ = originals.lmCall;\n if (originals.lmGenerate) mod.LM.prototype.generate = originals.lmGenerate;\n }\n } catch {\n // Module not available\n }\n\n isPatched = false;\n}\n\nexport function isPatchActive(): boolean {\n return isPatched;\n}\n","/**\n * Auto-instrumentation for Google ADK (@google/adk)\n *\n * Automatically traces Google ADK agent runs, tool dispatches,\n * and model interactions. Patches Agent.run() and related methods.\n */\n\nimport { getKyte } from '../../client';\nimport { calculateCost } from '../../cost-tracking';\n\nlet isPatched = false;\nlet originals: {\n agentRun?: Function;\n agentExecute?: Function;\n runnerRun?: Function;\n} = {};\n\nexport async function patch(): Promise<void> {\n if (isPatched) return;\n\n try {\n const mod = (await import('@google/adk')) as any;\n\n // Patch Agent.prototype.run()\n const AgentProto = mod.Agent?.prototype;\n if (AgentProto && typeof AgentProto.run === 'function') {\n originals.agentRun = AgentProto.run;\n AgentProto.run = createTracedAgentRun(originals.agentRun!);\n }\n\n // Patch Agent.prototype.execute() if it exists\n if (AgentProto && typeof AgentProto.execute === 'function') {\n originals.agentExecute = AgentProto.execute;\n AgentProto.execute = createTracedAgentExecute(originals.agentExecute!);\n }\n\n // Patch Runner.run() if there's a separate Runner class\n const RunnerProto = mod.Runner?.prototype;\n if (RunnerProto && typeof RunnerProto.run === 'function') {\n originals.runnerRun = RunnerProto.run;\n RunnerProto.run = createTracedRunnerRun(originals.runnerRun!);\n }\n\n isPatched = true;\n } catch {\n // Framework not installed - skip\n }\n}\n\nexport function unpatch(): void {\n if (!isPatched) return;\n\n try {\n const mod = require('@google/adk') as any;\n\n const AgentProto = mod.Agent?.prototype;\n if (AgentProto) {\n if (originals.agentRun) AgentProto.run = originals.agentRun;\n if (originals.agentExecute) AgentProto.execute = originals.agentExecute;\n }\n\n const RunnerProto = mod.Runner?.prototype;\n if (RunnerProto && originals.runnerRun) {\n RunnerProto.run = originals.runnerRun;\n }\n } catch {\n // ignore\n }\n\n originals = {};\n isPatched = false;\n}\n\nexport function isPatchActive(): boolean {\n return isPatched;\n}\n\n/**\n * Wrap Agent.run() to trace the full agent execution lifecycle.\n */\nfunction createTracedAgentRun(originalRun: Function): Function {\n return async function tracedRun(this: any, input: any, options?: any) {\n let client;\n try {\n client = getKyte();\n } catch {\n return originalRun.call(this, input, options);\n }\n\n const agentName = this.name || this.agentName || this.constructor?.name || 'google-adk-agent';\n const modelName = this.model || this.modelName || options?.model;\n\n const span = client\n .spanBuilder('google-adk.agent.run')\n .setType('agent' as any)\n .setModelName(modelName || '')\n .setInput({\n agent: agentName,\n model: modelName,\n input:\n typeof input === 'string' ? input.slice(0, 1000) : JSON.stringify(input)?.slice(0, 1000),\n tools: extractToolNames(this),\n })\n .setMetadata({\n provider: 'google',\n framework: 'google-adk',\n agentName,\n })\n .start();\n\n try {\n const result = await originalRun.call(this, input, options);\n\n const output: Record<string, any> = {\n agent: agentName,\n };\n\n // Extract response content\n if (result?.response) {\n output.response =\n typeof result.response === 'string' ? result.response.slice(0, 2000) : result.response;\n }\n if (result?.content) {\n output.content =\n typeof result.content === 'string' ? result.content.slice(0, 2000) : result.content;\n }\n if (result?.output) {\n output.output =\n typeof result.output === 'string' ? result.output.slice(0, 2000) : result.output;\n }\n\n // Capture tool calls\n if (result?.toolCalls || result?.tool_calls || result?.actions) {\n const calls = result.toolCalls || result.tool_calls || result.actions;\n output.toolCalls = Array.isArray(calls)\n ? calls.map((tc: any) => ({\n name: tc.name || tc.toolName || tc.function?.name,\n type: tc.type,\n }))\n : calls;\n }\n\n // Capture steps/turns\n if (result?.steps) {\n output.stepCount = Array.isArray(result.steps) ? result.steps.length : result.steps;\n }\n\n // Extract token usage\n const usage = result?.usage || result?.usageMetadata || result?.metadata?.usage;\n if (usage) {\n span.setTokens({\n prompt: usage.promptTokenCount || usage.prompt_tokens || usage.input_tokens,\n completion: usage.candidatesTokenCount || usage.completion_tokens || usage.output_tokens,\n total:\n usage.totalTokenCount ||\n usage.total_tokens ||\n (usage.promptTokenCount || 0) + (usage.candidatesTokenCount || 0),\n });\n\n if (modelName) {\n const cost = calculateCost(\n modelName,\n 'google',\n usage.promptTokenCount || usage.prompt_tokens || usage.input_tokens || 0,\n usage.candidatesTokenCount || usage.completion_tokens || usage.output_tokens || 0,\n );\n if (cost !== null) {\n span.setCost(cost);\n }\n }\n }\n\n span.setOutput(output);\n await span.end();\n return result;\n } catch (error) {\n span.setError(error as Error);\n await span.end();\n throw error;\n }\n };\n}\n\n/**\n * Wrap Agent.execute() as an alternative entry point.\n */\nfunction createTracedAgentExecute(originalExecute: Function): Function {\n return async function tracedExecute(this: any, input: any, options?: any) {\n let client;\n try {\n client = getKyte();\n } catch {\n return originalExecute.call(this, input, options);\n }\n\n const agentName = this.name || this.agentName || 'google-adk-agent';\n const modelName = this.model || this.modelName || options?.model;\n\n const span = client\n .spanBuilder('google-adk.agent.execute')\n .setType('agent' as any)\n .setModelName(modelName || '')\n .setInput({\n agent: agentName,\n model: modelName,\n input:\n typeof input === 'string' ? input.slice(0, 1000) : JSON.stringify(input)?.slice(0, 1000),\n })\n .setMetadata({ provider: 'google', framework: 'google-adk', agentName })\n .start();\n\n try {\n const result = await originalExecute.call(this, input, options);\n\n span.setOutput({\n agent: agentName,\n result: typeof result === 'string' ? result.slice(0, 2000) : result,\n });\n\n await span.end();\n return result;\n } catch (error) {\n span.setError(error as Error);\n await span.end();\n throw error;\n }\n };\n}\n\n/**\n * Wrap Runner.run() for standalone runner execution.\n */\nfunction createTracedRunnerRun(originalRun: Function): Function {\n return async function tracedRunnerRun(this: any, agent: any, input: any, options?: any) {\n let client;\n try {\n client = getKyte();\n } catch {\n return originalRun.call(this, agent, input, options);\n }\n\n const agentName = agent?.name || agent?.agentName || 'google-adk-agent';\n\n const span = client\n .spanBuilder('google-adk.runner.run')\n .setType('agent' as any)\n .setInput({\n agent: agentName,\n input:\n typeof input === 'string' ? input.slice(0, 1000) : JSON.stringify(input)?.slice(0, 1000),\n })\n .setMetadata({ provider: 'google', framework: 'google-adk', agentName })\n .start();\n\n try {\n const result = await originalRun.call(this, agent, input, options);\n\n span.setOutput({\n agent: agentName,\n result: typeof result === 'string' ? result.slice(0, 2000) : result,\n });\n\n await span.end();\n return result;\n } catch (error) {\n span.setError(error as Error);\n await span.end();\n throw error;\n }\n };\n}\n\n/**\n * Extract tool names from an agent instance.\n */\nfunction extractToolNames(agent: any): string[] | undefined {\n try {\n const tools = agent.tools || agent._tools;\n if (Array.isArray(tools)) {\n return tools.map((t: any) => t.name || t.toolName || t.constructor?.name).filter(Boolean);\n }\n } catch {\n // ignore\n }\n return undefined;\n}\n","/**\n * Auto-instrumentation for Instructor (instructor)\n *\n * Automatically traces Instructor structured output extractions,\n * validation retries, and schema completions.\n * Patches the Instructor client's chat.completions.create() method.\n */\n\nimport { getKyte } from '../../client';\nimport { calculateCost } from '../../cost-tracking';\n\nlet isPatched = false;\nlet _originalCreate: Function | undefined;\nlet originalFromOpenAI: Function | undefined;\n\nexport async function patch(): Promise<void> {\n if (isPatched) return;\n\n try {\n const mod = (await import('instructor')) as any;\n\n // Instructor wraps an OpenAI client via Instructor() or fromOpenAI()\n // We patch the factory functions to intercept the returned client.\n\n // Patch the default export / Instructor constructor\n if (typeof mod.default === 'function') {\n const originalDefault = mod.default;\n mod.default = function patchedInstructor(...args: any[]) {\n const instructorClient = originalDefault(...args);\n return wrapInstructorClient(instructorClient);\n };\n }\n\n // Patch fromOpenAI if available\n if (typeof mod.fromOpenAI === 'function') {\n originalFromOpenAI = mod.fromOpenAI;\n mod.fromOpenAI = function patchedFromOpenAI(...args: any[]) {\n const instructorClient = (originalFromOpenAI as Function)(...args);\n return wrapInstructorClient(instructorClient);\n };\n }\n\n // Patch Instructor() named export if different from default\n if (typeof mod.Instructor === 'function' && mod.Instructor !== mod.default) {\n const originalInstructor = mod.Instructor;\n mod.Instructor = function patchedInstructorNamed(...args: any[]) {\n const instructorClient = originalInstructor(...args);\n return wrapInstructorClient(instructorClient);\n };\n }\n\n isPatched = true;\n } catch {\n // Framework not installed - skip\n }\n}\n\nexport function unpatch(): void {\n if (!isPatched) return;\n\n // Factory function patches cannot be easily reverted since\n // already-created clients retain their proxied methods.\n // We reset the flag to prevent re-patching.\n _originalCreate = undefined;\n originalFromOpenAI = undefined;\n isPatched = false;\n}\n\nexport function isPatchActive(): boolean {\n return isPatched;\n}\n\n/**\n * Wrap an Instructor client to trace chat.completions.create() calls.\n * Instructor's client proxies OpenAI's client, adding response_model support.\n */\nfunction wrapInstructorClient(client: any): any {\n if (!client || typeof client !== 'object') return client;\n\n return new Proxy(client, {\n get(target, prop, receiver) {\n const value = Reflect.get(target, prop, receiver);\n\n if (prop === 'chat') {\n return wrapChat(value);\n }\n\n // Also intercept create() if it's called directly on the client\n if (prop === 'create' && typeof value === 'function') {\n return createTracedInstructorCreate(value.bind(target));\n }\n\n return value;\n },\n });\n}\n\n/**\n * Wrap the chat namespace.\n */\nfunction wrapChat(chat: any): any {\n if (!chat || typeof chat !== 'object') return chat;\n\n return new Proxy(chat, {\n get(target, prop, receiver) {\n const value = Reflect.get(target, prop, receiver);\n\n if (prop === 'completions') {\n return wrapCompletions(value);\n }\n\n return value;\n },\n });\n}\n\n/**\n * Wrap the completions namespace.\n */\nfunction wrapCompletions(completions: any): any {\n if (!completions || typeof completions !== 'object') return completions;\n\n return new Proxy(completions, {\n get(target, prop, receiver) {\n const value = Reflect.get(target, prop, receiver);\n\n if (prop === 'create' && typeof value === 'function') {\n return createTracedInstructorCreate(value.bind(target));\n }\n\n return value;\n },\n });\n}\n\n/**\n * Create a traced version of instructor's chat.completions.create().\n * This captures the response_model, validation retries, and structured output.\n */\nfunction createTracedInstructorCreate(originalCreate: Function): Function {\n return async function tracedCreate(params: any) {\n let client;\n try {\n client = getKyte();\n } catch {\n return originalCreate(params);\n }\n\n const modelName = params.model || 'unknown';\n const responseModelName =\n params.response_model?.name || params.response_model?.constructor?.name || 'StructuredOutput';\n const maxRetries = params.max_retries ?? 1;\n\n const span = client\n .spanBuilder('instructor.chat.completions.create')\n .setType('llm' as any)\n .setModelName(modelName)\n .setInput({\n model: modelName,\n response_model: responseModelName,\n max_retries: maxRetries,\n messages: params.messages?.map((m: any) => ({\n role: m.role,\n content: typeof m.content === 'string' ? m.content.slice(0, 500) : m.content,\n })),\n temperature: params.temperature,\n stream: params.stream,\n })\n .setTags(['instructor', 'structured-output'])\n .setMetadata({\n provider: 'instructor',\n responseModel: responseModelName,\n maxRetries,\n })\n .start();\n\n try {\n const response = await originalCreate(params);\n\n const output: Record<string, any> = {\n model: modelName,\n responseModel: responseModelName,\n };\n\n // Instructor returns the validated model instance directly\n if (response !== null && response !== undefined) {\n // Try to capture the structured output\n if (typeof response === 'object') {\n try {\n const serialized = JSON.stringify(response);\n output.structuredOutput =\n serialized.length > 2000\n ? { _truncated: true, keys: Object.keys(response) }\n : response;\n } catch {\n output.structuredOutput = { _type: response.constructor?.name || typeof response };\n }\n } else {\n output.structuredOutput = response;\n }\n }\n\n // Capture usage from the _raw_response if available (Instructor attaches it)\n const rawResponse = response?._raw_response || response?.__raw_response;\n if (rawResponse?.usage) {\n const usage = rawResponse.usage;\n span.setTokens({\n prompt: usage.prompt_tokens,\n completion: usage.completion_tokens,\n total: usage.total_tokens,\n });\n\n const cost = calculateCost(\n modelName,\n 'openai',\n usage.prompt_tokens || 0,\n usage.completion_tokens || 0,\n );\n if (cost !== null) {\n span.setCost(cost);\n }\n }\n\n // Check for validation metadata (retry count)\n if (response?._retries !== undefined || response?.__retries !== undefined) {\n output.retries = response._retries || response.__retries;\n }\n\n span.setOutput(output);\n await span.end();\n return response;\n } catch (error) {\n span.setError(error as Error);\n span.setOutput({\n model: modelName,\n responseModel: responseModelName,\n error: (error as Error).message,\n validationError: (error as any).validationErrors || (error as any).errors,\n });\n await span.end();\n throw error;\n }\n };\n}\n","/**\n * LangChain Auto-Instrumentation\n *\n * Provides callback handler for automatic tracing of LangChain operations.\n */\n\nimport { getKyte } from '../../client';\nimport { calculateCost } from '../../cost-tracking';\n\nlet instrumented = false;\n\n/**\n * Create LangChain instrumentation\n */\nexport function createLangChainInstrumentation(): void {\n if (instrumented) return;\n\n try {\n require('@langchain/core');\n console.debug('LangChain instrumentation registered. Use AigieCallbackHandler for tracing.');\n instrumented = true;\n } catch (_e) {\n throw new Error('LangChain not installed');\n }\n}\n\n/**\n * LangChain Callback Handler for automatic tracing\n *\n * @example\n * ```typescript\n * import { AigieCallbackHandler } from '@kyte/sdk';\n * import { ChatOpenAI } from '@langchain/openai';\n *\n * const handler = new AigieCallbackHandler({\n * userId: 'user123',\n * sessionId: 'session456'\n * });\n *\n * const model = new ChatOpenAI();\n * const result = await model.invoke('Hello!', { callbacks: [handler] });\n * ```\n */\nexport class AigieCallbackHandler {\n private userId?: string;\n private sessionId?: string;\n private tags: string[];\n private metadata: Record<string, any>;\n private spanStack: Map<string, { span: any; modelName?: string; provider?: string }> = new Map();\n\n name = 'AigieCallbackHandler';\n\n constructor(\n options: {\n userId?: string;\n sessionId?: string;\n tags?: string[];\n metadata?: Record<string, any>;\n } = {},\n ) {\n this.userId = options.userId;\n this.sessionId = options.sessionId;\n this.tags = options.tags || [];\n this.metadata = options.metadata || {};\n }\n\n // ============================================================================\n // LLM Handlers\n // ============================================================================\n\n async handleLLMStart(\n llm: { name: string },\n prompts: string[],\n runId: string,\n parentRunId?: string,\n extraParams?: Record<string, any>,\n ): Promise<void> {\n try {\n const client = getKyte();\n\n // Extract structured model parameters from extraParams\n const invocationParams = extraParams?.invocation_params || extraParams || {};\n const modelName =\n invocationParams.model ||\n invocationParams.model_name ||\n invocationParams.modelName ||\n llm.name;\n const temperature = invocationParams.temperature;\n const maxTokens = invocationParams.max_tokens || invocationParams.maxTokens;\n const topP = invocationParams.top_p || invocationParams.topP;\n\n const builder = client\n .spanBuilder(`llm.${llm.name}`)\n .setType('llm')\n .setInput({ prompts, ...extraParams })\n .setTags(this.tags)\n .setModelName(modelName)\n .setMetadata({\n ...this.metadata,\n runId,\n parentRunId,\n llmName: llm.name,\n modelName,\n ...(temperature !== undefined && { temperature }),\n ...(maxTokens !== undefined && { maxTokens }),\n ...(topP !== undefined && { topP }),\n provider: invocationParams._type || invocationParams.provider || undefined,\n });\n\n const span = builder.start();\n\n if (this.userId) span.update({ metadata: { userId: this.userId } });\n if (this.sessionId) span.update({ metadata: { sessionId: this.sessionId } });\n\n this.spanStack.set(runId, {\n span,\n modelName,\n provider: invocationParams._type || invocationParams.provider,\n });\n } catch (_e) {\n // SDK not initialized, skip\n }\n }\n\n async handleLLMEnd(output: any, runId: string): Promise<void> {\n const entry = this.spanStack.get(runId);\n if (!entry) return;\n\n const { span, modelName, provider } = entry;\n\n span.setOutput({\n generations: output.generations,\n llmOutput: output.llmOutput,\n });\n\n // Extract token usage if available\n const tokenUsage = output.llmOutput?.tokenUsage || output.llmOutput?.usage;\n if (tokenUsage) {\n const promptTokens =\n tokenUsage.promptTokens ?? tokenUsage.prompt_tokens ?? tokenUsage.input_tokens ?? 0;\n const completionTokens =\n tokenUsage.completionTokens ??\n tokenUsage.completion_tokens ??\n tokenUsage.output_tokens ??\n 0;\n const totalTokens =\n tokenUsage.totalTokens ?? tokenUsage.total_tokens ?? promptTokens + completionTokens;\n\n span.setTokens({\n prompt: promptTokens,\n completion: completionTokens,\n total: totalTokens,\n });\n\n // Calculate cost if we have model info and token counts\n if (modelName && (promptTokens > 0 || completionTokens > 0)) {\n const cost = calculateCost(modelName, provider || '', promptTokens, completionTokens);\n if (cost !== null) {\n span.setCost(cost);\n }\n }\n }\n\n await span.end();\n this.spanStack.delete(runId);\n }\n\n async handleLLMError(error: Error, runId: string): Promise<void> {\n const entry = this.spanStack.get(runId);\n if (!entry) return;\n\n entry.span.setError(error);\n await entry.span.end();\n this.spanStack.delete(runId);\n }\n\n // ============================================================================\n // Chat Model Handlers\n // ============================================================================\n\n async handleChatModelStart(\n llm: { name: string },\n messages: any[][],\n runId: string,\n parentRunId?: string,\n extraParams?: Record<string, any>,\n ): Promise<void> {\n try {\n const client = getKyte();\n\n // Extract structured model parameters\n const invocationParams = extraParams?.invocation_params || extraParams || {};\n const modelName =\n invocationParams.model ||\n invocationParams.model_name ||\n invocationParams.modelName ||\n llm.name;\n const temperature = invocationParams.temperature;\n const maxTokens = invocationParams.max_tokens || invocationParams.maxTokens;\n const topP = invocationParams.top_p || invocationParams.topP;\n\n const span = client\n .spanBuilder(`chat.${llm.name}`)\n .setType('llm')\n .setInput({\n messages: messages.map((m) =>\n m.map((msg) => ({\n role: msg._getType?.() || msg.role || 'unknown',\n content: msg.content,\n })),\n ),\n ...extraParams,\n })\n .setTags(this.tags)\n .setModelName(modelName)\n .setMetadata({\n ...this.metadata,\n runId,\n parentRunId,\n modelName,\n ...(temperature !== undefined && { temperature }),\n ...(maxTokens !== undefined && { maxTokens }),\n ...(topP !== undefined && { topP }),\n provider: invocationParams._type || invocationParams.provider || undefined,\n })\n .start();\n\n if (this.userId) span.update({ metadata: { userId: this.userId } });\n if (this.sessionId) span.update({ metadata: { sessionId: this.sessionId } });\n\n this.spanStack.set(runId, {\n span,\n modelName,\n provider: invocationParams._type || invocationParams.provider,\n });\n } catch (_e) {\n // SDK not initialized, skip\n }\n }\n\n // ============================================================================\n // Chain Handlers\n // ============================================================================\n\n async handleChainStart(\n chain: { name: string },\n inputs: Record<string, any>,\n runId: string,\n parentRunId?: string,\n ): Promise<void> {\n try {\n const client = getKyte();\n const span = client\n .spanBuilder(`chain.${chain.name}`)\n .setType('chain')\n .setInput(inputs)\n .setTags(this.tags)\n .setMetadata({\n ...this.metadata,\n runId,\n parentRunId,\n chainName: chain.name,\n })\n .start();\n\n if (this.userId) span.update({ metadata: { userId: this.userId } });\n if (this.sessionId) span.update({ metadata: { sessionId: this.sessionId } });\n\n this.spanStack.set(runId, { span });\n } catch (_e) {\n // SDK not initialized, skip\n }\n }\n\n async handleChainEnd(outputs: Record<string, any>, runId: string): Promise<void> {\n const entry = this.spanStack.get(runId);\n if (!entry) return;\n\n entry.span.setOutput(outputs);\n await entry.span.end();\n this.spanStack.delete(runId);\n }\n\n async handleChainError(error: Error, runId: string): Promise<void> {\n const entry = this.spanStack.get(runId);\n if (!entry) return;\n\n entry.span.setError(error);\n await entry.span.end();\n this.spanStack.delete(runId);\n }\n\n // ============================================================================\n // Tool Handlers\n // ============================================================================\n\n async handleToolStart(\n tool: { name: string },\n input: string,\n runId: string,\n parentRunId?: string,\n ): Promise<void> {\n try {\n const client = getKyte();\n const span = client\n .spanBuilder(`tool.${tool.name}`)\n .setType('tool')\n .setInput({ input })\n .setTags(this.tags)\n .setMetadata({\n ...this.metadata,\n runId,\n parentRunId,\n toolName: tool.name,\n })\n .start();\n\n this.spanStack.set(runId, { span });\n } catch (_e) {\n // SDK not initialized, skip\n }\n }\n\n async handleToolEnd(output: string, runId: string): Promise<void> {\n const entry = this.spanStack.get(runId);\n if (!entry) return;\n\n entry.span.setOutput({ output });\n await entry.span.end();\n this.spanStack.delete(runId);\n }\n\n async handleToolError(error: Error, runId: string): Promise<void> {\n const entry = this.spanStack.get(runId);\n if (!entry) return;\n\n entry.span.setError(error);\n await entry.span.end();\n this.spanStack.delete(runId);\n }\n\n // ============================================================================\n // Agent Handlers\n // ============================================================================\n\n async handleAgentAction(action: any, runId: string): Promise<void> {\n try {\n const client = getKyte();\n const span = client\n .spanBuilder(`agent.action.${action.tool}`)\n .setType('agent')\n .setInput({\n tool: action.tool,\n toolInput: action.toolInput,\n log: action.log,\n })\n .setTags(this.tags)\n .setMetadata({ ...this.metadata, runId })\n .start();\n\n // Agent actions are quick, end immediately\n await span.end();\n } catch (_e) {\n // SDK not initialized, skip\n }\n }\n\n async handleAgentEnd(_action: any, _runId: string): Promise<void> {\n // Agent end is handled by chain end\n }\n\n // ============================================================================\n // Retriever Handlers\n // ============================================================================\n\n async handleRetrieverStart(\n retriever: { name: string },\n query: string,\n runId: string,\n parentRunId?: string,\n ): Promise<void> {\n try {\n const client = getKyte();\n const span = client\n .spanBuilder(`retriever.${retriever.name}`)\n .setType('retriever')\n .setInput({ query })\n .setTags(this.tags)\n .setMetadata({\n ...this.metadata,\n runId,\n parentRunId,\n retrieverName: retriever.name,\n })\n .start();\n\n this.spanStack.set(runId, { span });\n } catch (_e) {\n // SDK not initialized, skip\n }\n }\n\n async handleRetrieverEnd(documents: any[], runId: string): Promise<void> {\n const entry = this.spanStack.get(runId);\n if (!entry) return;\n\n entry.span.setOutput({\n documents: documents.map((doc) => ({\n pageContent: doc.pageContent?.substring(0, 500),\n metadata: doc.metadata,\n })),\n count: documents.length,\n });\n await entry.span.end();\n this.spanStack.delete(runId);\n }\n\n async handleRetrieverError(error: Error, runId: string): Promise<void> {\n const entry = this.spanStack.get(runId);\n if (!entry) return;\n\n entry.span.setError(error);\n await entry.span.end();\n this.spanStack.delete(runId);\n }\n}\n\n/**\n * Create a new AigieCallbackHandler\n */\nexport function createAigieHandler(options?: {\n userId?: string;\n sessionId?: string;\n tags?: string[];\n metadata?: Record<string, any>;\n}): AigieCallbackHandler {\n return new AigieCallbackHandler(options);\n}\n","/**\n * Auto-instrumentation for LangGraph (@langchain/langgraph)\n *\n * Automatically traces graph executions, node transitions, and state updates.\n * Patches StateGraph.compile(), CompiledGraph.invoke(), and stream() methods.\n */\n\nimport { getKyte } from '../../client';\n\nlet isPatched = false;\nlet originals: {\n stateGraphCompile?: Function;\n compiledGraphInvoke?: Function;\n compiledGraphStream?: Function;\n compiledGraphBatch?: Function;\n} = {};\n\nexport async function patch(): Promise<void> {\n if (isPatched) return;\n\n try {\n const mod = (await import('@langchain/langgraph')) as any;\n\n // Patch StateGraph.compile() to intercept graph compilation and wrap the result\n const StateGraphProto = mod.StateGraph?.prototype;\n if (StateGraphProto && typeof StateGraphProto.compile === 'function') {\n originals.stateGraphCompile = StateGraphProto.compile;\n StateGraphProto.compile = createTracedCompile(originals.stateGraphCompile!);\n }\n\n // Patch CompiledGraph (or CompiledStateGraph) invoke/stream directly\n const CompiledGraphProto = mod.CompiledStateGraph?.prototype || mod.CompiledGraph?.prototype;\n if (CompiledGraphProto) {\n if (typeof CompiledGraphProto.invoke === 'function') {\n originals.compiledGraphInvoke = CompiledGraphProto.invoke;\n CompiledGraphProto.invoke = createTracedInvoke(originals.compiledGraphInvoke!);\n }\n\n if (typeof CompiledGraphProto.stream === 'function') {\n originals.compiledGraphStream = CompiledGraphProto.stream;\n CompiledGraphProto.stream = createTracedStream(originals.compiledGraphStream!);\n }\n\n if (typeof CompiledGraphProto.batch === 'function') {\n originals.compiledGraphBatch = CompiledGraphProto.batch;\n CompiledGraphProto.batch = createTracedBatch(originals.compiledGraphBatch!);\n }\n }\n\n isPatched = true;\n } catch {\n // Framework not installed - skip\n }\n}\n\nexport function unpatch(): void {\n if (!isPatched) return;\n\n try {\n const mod = require('@langchain/langgraph') as any;\n\n const StateGraphProto = mod.StateGraph?.prototype;\n if (StateGraphProto && originals.stateGraphCompile) {\n StateGraphProto.compile = originals.stateGraphCompile;\n }\n\n const CompiledGraphProto = mod.CompiledStateGraph?.prototype || mod.CompiledGraph?.prototype;\n if (CompiledGraphProto) {\n if (originals.compiledGraphInvoke) {\n CompiledGraphProto.invoke = originals.compiledGraphInvoke;\n }\n if (originals.compiledGraphStream) {\n CompiledGraphProto.stream = originals.compiledGraphStream;\n }\n if (originals.compiledGraphBatch) {\n CompiledGraphProto.batch = originals.compiledGraphBatch;\n }\n }\n } catch {\n // ignore\n }\n\n originals = {};\n isPatched = false;\n}\n\nexport function isPatchActive(): boolean {\n return isPatched;\n}\n\n/**\n * Wrap StateGraph.compile() to trace graph compilation and return a traced compiled graph.\n */\nfunction createTracedCompile(originalCompile: Function): Function {\n return function tracedCompile(this: any, ...args: any[]) {\n let client;\n try {\n client = getKyte();\n } catch {\n return originalCompile.call(this, ...args);\n }\n\n const graphName = this.name || this._name || 'langgraph';\n const nodeNames = extractNodeNames(this);\n\n const span = client\n .spanBuilder('langgraph.stategraph.compile')\n .setType('custom' as any)\n .setInput({\n graph: graphName,\n nodes: nodeNames,\n })\n .setMetadata({ provider: 'langchain', framework: 'langgraph' })\n .start();\n\n try {\n const compiled = originalCompile.call(this, ...args);\n\n span.setOutput({\n graph: graphName,\n nodes: nodeNames,\n compiled: true,\n });\n span.end();\n\n return compiled;\n } catch (error) {\n span.setError(error as Error);\n span.end();\n throw error;\n }\n };\n}\n\n/**\n * Wrap CompiledGraph.invoke() to trace graph execution.\n */\nfunction createTracedInvoke(originalInvoke: Function): Function {\n return async function tracedInvoke(this: any, input: any, config?: any) {\n let client;\n try {\n client = getKyte();\n } catch {\n return originalInvoke.call(this, input, config);\n }\n\n const graphName = this.name || this._name || this.builder?.name || 'langgraph';\n\n const span = client\n .spanBuilder('langgraph.graph.invoke')\n .setType('chain' as any)\n .setInput({\n graph: graphName,\n input: sanitizeGraphInput(input),\n configurable: config?.configurable,\n recursionLimit: config?.recursionLimit,\n })\n .setMetadata({\n provider: 'langchain',\n framework: 'langgraph',\n graphName,\n threadId: config?.configurable?.thread_id,\n })\n .start();\n\n try {\n const result = await originalInvoke.call(this, input, config);\n\n span.setOutput({\n graph: graphName,\n result: sanitizeGraphOutput(result),\n });\n\n // Attempt to extract aggregated token usage from LangGraph result metadata\n const metadata = result?.__metadata || result?.metadata;\n if (metadata?.tokenUsage || metadata?.usage) {\n const usage = metadata.tokenUsage || metadata.usage;\n span.setTokens({\n prompt: usage.promptTokens || usage.input_tokens,\n completion: usage.completionTokens || usage.output_tokens,\n total: usage.totalTokens || usage.total_tokens,\n });\n }\n\n await span.end();\n return result;\n } catch (error) {\n span.setError(error as Error);\n await span.end();\n throw error;\n }\n };\n}\n\n/**\n * Wrap CompiledGraph.stream() to trace streamed graph execution.\n */\nfunction createTracedStream(originalStream: Function): Function {\n return async function tracedStream(this: any, input: any, config?: any) {\n let client;\n try {\n client = getKyte();\n } catch {\n return originalStream.call(this, input, config);\n }\n\n const graphName = this.name || this._name || this.builder?.name || 'langgraph';\n\n const span = client\n .spanBuilder('langgraph.graph.stream')\n .setType('chain' as any)\n .setInput({\n graph: graphName,\n input: sanitizeGraphInput(input),\n streamMode: config?.streamMode,\n })\n .setMetadata({\n provider: 'langchain',\n framework: 'langgraph',\n graphName,\n threadId: config?.configurable?.thread_id,\n })\n .start();\n\n try {\n const stream = await originalStream.call(this, input, config);\n\n // Wrap the async iterator to capture output\n return wrapAsyncIterator(stream, span, graphName);\n } catch (error) {\n span.setError(error as Error);\n await span.end();\n throw error;\n }\n };\n}\n\n/**\n * Wrap CompiledGraph.batch() to trace batch graph execution.\n */\nfunction createTracedBatch(originalBatch: Function): Function {\n return async function tracedBatch(this: any, inputs: any[], config?: any) {\n let client;\n try {\n client = getKyte();\n } catch {\n return originalBatch.call(this, inputs, config);\n }\n\n const graphName = this.name || this._name || 'langgraph';\n\n const span = client\n .spanBuilder('langgraph.graph.batch')\n .setType('chain' as any)\n .setInput({\n graph: graphName,\n batchSize: inputs.length,\n })\n .setMetadata({ provider: 'langchain', framework: 'langgraph', graphName })\n .start();\n\n try {\n const results = await originalBatch.call(this, inputs, config);\n\n span.setOutput({\n graph: graphName,\n batchSize: inputs.length,\n resultCount: Array.isArray(results) ? results.length : undefined,\n });\n\n await span.end();\n return results;\n } catch (error) {\n span.setError(error as Error);\n await span.end();\n throw error;\n }\n };\n}\n\n/**\n * Wrap an async iterable to capture streamed output and finalize the span.\n */\nfunction wrapAsyncIterator(stream: any, span: any, graphName: string): any {\n const chunks: any[] = [];\n\n const wrappedIterator = {\n [Symbol.asyncIterator]() {\n const iterator = stream[Symbol.asyncIterator] ? stream[Symbol.asyncIterator]() : stream;\n\n return {\n async next() {\n try {\n const result = await iterator.next();\n\n if (result.done) {\n span.setOutput({\n graph: graphName,\n chunkCount: chunks.length,\n lastChunk:\n chunks.length > 0 ? sanitizeGraphOutput(chunks[chunks.length - 1]) : undefined,\n });\n await span.end();\n return result;\n }\n\n chunks.push(result.value);\n return result;\n } catch (error) {\n span.setError(error as Error);\n await span.end();\n throw error;\n }\n },\n async return(value?: any) {\n span.setOutput({ graph: graphName, chunkCount: chunks.length, earlyReturn: true });\n await span.end();\n return iterator.return ? iterator.return(value) : { done: true, value };\n },\n async throw(error?: any) {\n span.setError(error instanceof Error ? error : new Error(String(error)));\n await span.end();\n return iterator.throw ? iterator.throw(error) : { done: true, value: undefined };\n },\n };\n },\n };\n\n // Copy over any additional properties/methods from the original stream\n for (const key of Object.keys(stream)) {\n if (!(key in wrappedIterator)) {\n (wrappedIterator as any)[key] = stream[key];\n }\n }\n\n return wrappedIterator;\n}\n\n/**\n * Extract node names from a StateGraph instance.\n */\nfunction extractNodeNames(graph: any): string[] {\n try {\n if (graph.nodes && typeof graph.nodes === 'object') {\n return Object.keys(graph.nodes);\n }\n if (graph._nodes && typeof graph._nodes === 'object') {\n return Object.keys(graph._nodes);\n }\n } catch {\n // ignore\n }\n return [];\n}\n\n/**\n * Sanitize graph input for logging (avoid huge state objects).\n */\nfunction sanitizeGraphInput(input: any): any {\n if (input === null || input === undefined) return input;\n if (typeof input === 'string') return input.slice(0, 1000);\n\n try {\n const str = JSON.stringify(input);\n if (str.length > 2000) {\n return { _truncated: true, keys: Object.keys(input), size: str.length };\n }\n return input;\n } catch {\n return { _type: typeof input, _keys: Object.keys(input || {}) };\n }\n}\n\n/**\n * Sanitize graph output for logging.\n */\nfunction sanitizeGraphOutput(output: any): any {\n if (output === null || output === undefined) return output;\n if (typeof output === 'string') return output.slice(0, 2000);\n\n try {\n const str = JSON.stringify(output);\n if (str.length > 2000) {\n return { _truncated: true, keys: Object.keys(output), size: str.length };\n }\n return output;\n } catch {\n return { _type: typeof output, _keys: Object.keys(output || {}) };\n }\n}\n","/**\n * Auto-instrumentation for LlamaIndex (llamaindex)\n *\n * Automatically traces query engines, retrievers, and index operations.\n * Patches VectorStoreIndex, QueryEngine, and Retriever prototypes.\n */\n\nimport { getKyte } from '../../client';\n\nlet isPatched = false;\nlet originals: {\n queryEngineQuery?: Function;\n retrieverRetrieve?: Function;\n vectorIndexAsQueryEngine?: Function;\n vectorIndexAsRetriever?: Function;\n vectorIndexFromDocuments?: Function;\n} = {};\n\nexport async function patch(): Promise<void> {\n if (isPatched) return;\n\n try {\n const mod = (await import('llamaindex')) as any;\n\n // Patch VectorStoreIndex.fromDocuments() - index creation\n if (mod.VectorStoreIndex && typeof mod.VectorStoreIndex.fromDocuments === 'function') {\n originals.vectorIndexFromDocuments = mod.VectorStoreIndex.fromDocuments;\n mod.VectorStoreIndex.fromDocuments = createTracedFromDocuments(\n originals.vectorIndexFromDocuments!,\n );\n }\n\n // Patch VectorStoreIndex.prototype.asQueryEngine() - query engine creation\n const VectorIndexProto = mod.VectorStoreIndex?.prototype;\n if (VectorIndexProto && typeof VectorIndexProto.asQueryEngine === 'function') {\n originals.vectorIndexAsQueryEngine = VectorIndexProto.asQueryEngine;\n VectorIndexProto.asQueryEngine = createTracedAsQueryEngine(\n originals.vectorIndexAsQueryEngine!,\n );\n }\n\n // Patch VectorStoreIndex.prototype.asRetriever() - retriever creation\n if (VectorIndexProto && typeof VectorIndexProto.asRetriever === 'function') {\n originals.vectorIndexAsRetriever = VectorIndexProto.asRetriever;\n VectorIndexProto.asRetriever = createTracedAsRetriever(originals.vectorIndexAsRetriever!);\n }\n\n // Patch RetrieverQueryEngine.prototype.query() if available\n const QueryEngineProto = mod.RetrieverQueryEngine?.prototype || mod.QueryEngine?.prototype;\n if (QueryEngineProto && typeof QueryEngineProto.query === 'function') {\n originals.queryEngineQuery = QueryEngineProto.query;\n QueryEngineProto.query = createTracedQuery(originals.queryEngineQuery!);\n }\n\n // Patch VectorIndexRetriever.prototype.retrieve() if available\n const RetrieverProto = mod.VectorIndexRetriever?.prototype || mod.Retriever?.prototype;\n if (RetrieverProto && typeof RetrieverProto.retrieve === 'function') {\n originals.retrieverRetrieve = RetrieverProto.retrieve;\n RetrieverProto.retrieve = createTracedRetrieve(originals.retrieverRetrieve!);\n }\n\n isPatched = true;\n } catch {\n // Framework not installed - skip\n }\n}\n\nexport function unpatch(): void {\n if (!isPatched) return;\n\n try {\n const mod = require('llamaindex') as any;\n\n if (mod.VectorStoreIndex && originals.vectorIndexFromDocuments) {\n mod.VectorStoreIndex.fromDocuments = originals.vectorIndexFromDocuments;\n }\n\n const VectorIndexProto = mod.VectorStoreIndex?.prototype;\n if (VectorIndexProto) {\n if (originals.vectorIndexAsQueryEngine) {\n VectorIndexProto.asQueryEngine = originals.vectorIndexAsQueryEngine;\n }\n if (originals.vectorIndexAsRetriever) {\n VectorIndexProto.asRetriever = originals.vectorIndexAsRetriever;\n }\n }\n\n const QueryEngineProto = mod.RetrieverQueryEngine?.prototype || mod.QueryEngine?.prototype;\n if (QueryEngineProto && originals.queryEngineQuery) {\n QueryEngineProto.query = originals.queryEngineQuery;\n }\n\n const RetrieverProto = mod.VectorIndexRetriever?.prototype || mod.Retriever?.prototype;\n if (RetrieverProto && originals.retrieverRetrieve) {\n RetrieverProto.retrieve = originals.retrieverRetrieve;\n }\n } catch {\n // ignore\n }\n\n originals = {};\n isPatched = false;\n}\n\nexport function isPatchActive(): boolean {\n return isPatched;\n}\n\n/**\n * Wrap VectorStoreIndex.fromDocuments() to trace index creation.\n */\nfunction createTracedFromDocuments(originalFromDocuments: Function): Function {\n return async function tracedFromDocuments(documents: any[], options?: any) {\n let client;\n try {\n client = getKyte();\n } catch {\n return originalFromDocuments(documents, options);\n }\n\n const span = client\n .spanBuilder('llamaindex.vectorstoreindex.fromDocuments')\n .setType('custom' as any)\n .setInput({\n documentCount: documents?.length,\n options: {\n storageContext: options?.storageContext ? '[StorageContext]' : undefined,\n serviceContext: options?.serviceContext ? '[ServiceContext]' : undefined,\n },\n })\n .setMetadata({ provider: 'llamaindex', framework: 'llamaindex', operation: 'index-creation' })\n .start();\n\n try {\n const index = await originalFromDocuments(documents, options);\n\n span.setOutput({\n documentCount: documents?.length,\n indexCreated: true,\n });\n\n await span.end();\n return index;\n } catch (error) {\n span.setError(error as Error);\n await span.end();\n throw error;\n }\n };\n}\n\n/**\n * Wrap asQueryEngine() to return a query engine with a traced query() method.\n */\nfunction createTracedAsQueryEngine(originalAsQueryEngine: Function): Function {\n return function tracedAsQueryEngine(this: any, options?: any) {\n const queryEngine = originalAsQueryEngine.call(this, options);\n\n if (queryEngine && typeof queryEngine.query === 'function') {\n const originalQuery = queryEngine.query.bind(queryEngine);\n queryEngine.query = createTracedQuery(originalQuery);\n }\n\n return queryEngine;\n };\n}\n\n/**\n * Wrap asRetriever() to return a retriever with a traced retrieve() method.\n */\nfunction createTracedAsRetriever(originalAsRetriever: Function): Function {\n return function tracedAsRetriever(this: any, options?: any) {\n const retriever = originalAsRetriever.call(this, options);\n\n if (retriever && typeof retriever.retrieve === 'function') {\n const originalRetrieve = retriever.retrieve.bind(retriever);\n retriever.retrieve = createTracedRetrieve(originalRetrieve);\n }\n\n return retriever;\n };\n}\n\n/**\n * Create a traced version of QueryEngine.query().\n * This is the primary RAG operation: query -> retrieve -> synthesize.\n */\nfunction createTracedQuery(originalQuery: Function): Function {\n return async function tracedQuery(this: any, queryStr: any, ...rest: any[]) {\n let client;\n try {\n client = getKyte();\n } catch {\n return originalQuery.call(this, queryStr, ...rest);\n }\n\n const queryText =\n typeof queryStr === 'string'\n ? queryStr\n : queryStr?.query || queryStr?.queryStr || JSON.stringify(queryStr)?.slice(0, 1000);\n\n const span = client\n .spanBuilder('llamaindex.queryengine.query')\n .setType('chain' as any)\n .setInput({\n query: typeof queryText === 'string' ? queryText.slice(0, 1000) : queryText,\n })\n .setMetadata({ provider: 'llamaindex', framework: 'llamaindex', operation: 'query' })\n .start();\n\n try {\n const response = await originalQuery.call(this, queryStr, ...rest);\n\n const output: Record<string, any> = {};\n\n // Extract response text\n if (response?.response) {\n output.response =\n typeof response.response === 'string'\n ? response.response.slice(0, 2000)\n : response.response;\n } else if (response?.toString) {\n const str = response.toString();\n if (str !== '[object Object]') {\n output.response = str.slice(0, 2000);\n }\n }\n\n // Extract source nodes (retrieval results)\n if (response?.sourceNodes) {\n output.sourceNodeCount = response.sourceNodes.length;\n output.sourceNodes = response.sourceNodes.slice(0, 5).map((node: any) => ({\n score: node.score,\n id: node.node?.id_ || node.node?.nodeId || node.id,\n textPreview: (node.node?.text || node.text || '').slice(0, 200),\n }));\n }\n\n // Extract metadata/usage if available\n if (response?.metadata) {\n output.metadata = response.metadata;\n }\n\n span.setOutput(output);\n await span.end();\n return response;\n } catch (error) {\n span.setError(error as Error);\n await span.end();\n throw error;\n }\n };\n}\n\n/**\n * Create a traced version of Retriever.retrieve().\n */\nfunction createTracedRetrieve(originalRetrieve: Function): Function {\n return async function tracedRetrieve(this: any, query: any, ...rest: any[]) {\n let client;\n try {\n client = getKyte();\n } catch {\n return originalRetrieve.call(this, query, ...rest);\n }\n\n const queryText =\n typeof query === 'string'\n ? query\n : query?.query || query?.queryStr || JSON.stringify(query)?.slice(0, 1000);\n\n const span = client\n .spanBuilder('llamaindex.retriever.retrieve')\n .setType('retrieval' as any)\n .setInput({\n query: typeof queryText === 'string' ? queryText.slice(0, 1000) : queryText,\n })\n .setMetadata({ provider: 'llamaindex', framework: 'llamaindex', operation: 'retrieve' })\n .start();\n\n try {\n const nodes = await originalRetrieve.call(this, query, ...rest);\n\n span.setOutput({\n nodeCount: Array.isArray(nodes) ? nodes.length : undefined,\n nodes: Array.isArray(nodes)\n ? nodes.slice(0, 5).map((node: any) => ({\n score: node.score,\n id: node.node?.id_ || node.node?.nodeId || node.id,\n textPreview: (node.node?.text || node.text || '').slice(0, 200),\n }))\n : undefined,\n });\n\n await span.end();\n return nodes;\n } catch (error) {\n span.setError(error as Error);\n await span.end();\n throw error;\n }\n };\n}\n","/**\n * OpenAI Auto-Instrumentation\n *\n * Automatically traces OpenAI SDK calls using ES Proxy pattern.\n */\n\nimport { getKyte } from '../../client';\nimport { calculateCost } from '../../cost-tracking';\n\nlet instrumented = false;\n\n/**\n * Create OpenAI instrumentation by monkey-patching the OpenAI constructor\n */\nexport function createOpenAIInstrumentation(): void {\n if (instrumented) return;\n\n try {\n const openaiModule = require('openai');\n const OriginalOpenAI = openaiModule.default || openaiModule.OpenAI;\n\n if (!OriginalOpenAI) {\n throw new Error('OpenAI SDK not installed');\n }\n\n // Monkey-patch the constructor to auto-wrap new instances\n const PatchedOpenAI = new Proxy(OriginalOpenAI, {\n construct(target, args) {\n const instance = new target(...args);\n return wrapOpenAI(instance);\n },\n });\n\n // Replace the export\n if (openaiModule.default) {\n openaiModule.default = PatchedOpenAI;\n }\n if (openaiModule.OpenAI) {\n openaiModule.OpenAI = PatchedOpenAI;\n }\n\n instrumented = true;\n } catch (_e) {\n throw new Error('OpenAI SDK not installed');\n }\n}\n\n/**\n * Wrap an OpenAI client instance for automatic tracing\n *\n * @example\n * ```typescript\n * import OpenAI from 'openai';\n * import { wrapOpenAI } from '@kyte/sdk';\n *\n * const openai = wrapOpenAI(new OpenAI());\n *\n * // All calls are now automatically traced\n * const response = await openai.chat.completions.create({\n * model: 'gpt-4',\n * messages: [{ role: 'user', content: 'Hello!' }]\n * });\n * ```\n */\nexport function wrapOpenAI<T extends object>(\n client: T,\n options: {\n traceName?: string;\n userId?: string;\n sessionId?: string;\n tags?: string[];\n metadata?: Record<string, any>;\n } = {},\n): T {\n return createOpenAIProxy(client, options);\n}\n\n/**\n * Create a proxy for OpenAI client\n */\nfunction createOpenAIProxy<T extends object>(\n client: T,\n options: {\n traceName?: string;\n userId?: string;\n sessionId?: string;\n tags?: string[];\n metadata?: Record<string, any>;\n },\n): T {\n const handler: ProxyHandler<T> = {\n get(target, prop, receiver) {\n const value = Reflect.get(target, prop, receiver);\n\n // Handle chat.completions.create\n if (prop === 'chat') {\n return createChatProxy(value, options);\n }\n\n // Handle embeddings.create\n if (prop === 'embeddings') {\n return createEmbeddingsProxy(value, options);\n }\n\n // Recursively proxy nested objects\n if (value && typeof value === 'object') {\n return createOpenAIProxy(value, options);\n }\n\n return value;\n },\n };\n\n return new Proxy(client, handler);\n}\n\n/**\n * Create proxy for chat namespace\n */\nfunction createChatProxy(chat: any, options: any): any {\n return new Proxy(chat, {\n get(target, prop, receiver) {\n const value = Reflect.get(target, prop, receiver);\n\n if (prop === 'completions') {\n return createCompletionsProxy(value, options);\n }\n\n return value;\n },\n });\n}\n\n/**\n * Create proxy for completions namespace\n */\nfunction createCompletionsProxy(completions: any, options: any): any {\n return new Proxy(completions, {\n get(target, prop, receiver) {\n const value = Reflect.get(target, prop, receiver);\n\n if (prop === 'create' && typeof value === 'function') {\n return createTracedChatCreate(value.bind(target), options);\n }\n\n return value;\n },\n });\n}\n\n/**\n * Create traced version of chat.completions.create\n */\nfunction createTracedChatCreate(originalCreate: Function, options: any): Function {\n return async function tracedCreate(params: any) {\n let client;\n try {\n client = getKyte();\n } catch {\n return originalCreate(params);\n }\n\n const span = client\n .spanBuilder(options.traceName || 'openai.chat.completions.create')\n .setType('llm')\n .setModelName(params.model)\n .setInput({\n model: params.model,\n messages: params.messages,\n temperature: params.temperature,\n max_tokens: params.max_tokens,\n stream: params.stream,\n })\n .setTags(options.tags || [])\n .setMetadata({ ...options.metadata, provider: 'openai' })\n .start();\n\n if (options.userId) span.update({ metadata: { userId: options.userId } });\n if (options.sessionId) span.update({ metadata: { sessionId: options.sessionId } });\n\n try {\n const response = await originalCreate(params);\n\n // Handle streaming\n if (params.stream) {\n return createTracedStream(response, span, params.model);\n }\n\n // Non-streaming response\n const usage = response.usage;\n if (usage) {\n span.setTokens({\n prompt: usage.prompt_tokens,\n completion: usage.completion_tokens,\n total: usage.total_tokens,\n cached: usage.prompt_tokens_details?.cached_tokens,\n });\n\n const cost = calculateCost(\n params.model,\n 'openai',\n usage.prompt_tokens,\n usage.completion_tokens,\n );\n if (cost !== null) {\n span.setCost(cost);\n }\n }\n\n span.setOutput({\n id: response.id,\n model: response.model,\n choices: response.choices?.map((c: any) => ({\n message: c.message,\n finish_reason: c.finish_reason,\n })),\n usage,\n });\n\n await span.end();\n return response;\n } catch (error) {\n span.setError(error as Error);\n await span.end();\n throw error;\n }\n };\n}\n\n/**\n * Create a traced async iterator for streaming responses\n */\nasync function* createTracedStream(\n stream: AsyncIterable<any>,\n span: any,\n model: string,\n): AsyncIterable<any> {\n const chunks: any[] = [];\n let totalTokens = 0;\n\n try {\n for await (const chunk of stream) {\n chunks.push(chunk);\n\n // Accumulate usage if available\n if (chunk.usage) {\n totalTokens = chunk.usage.total_tokens;\n }\n\n yield chunk;\n }\n\n // Reconstruct final response from chunks\n const content = chunks.map((c) => c.choices?.[0]?.delta?.content || '').join('');\n\n span.setOutput({\n model,\n content,\n chunks: chunks.length,\n });\n\n if (totalTokens > 0) {\n span.setTokens({ total: totalTokens });\n }\n\n await span.end();\n } catch (error) {\n span.setError(error as Error);\n await span.end();\n throw error;\n }\n}\n\n/**\n * Create proxy for embeddings namespace\n */\nfunction createEmbeddingsProxy(embeddings: any, options: any): any {\n return new Proxy(embeddings, {\n get(target, prop, receiver) {\n const value = Reflect.get(target, prop, receiver);\n\n if (prop === 'create' && typeof value === 'function') {\n return createTracedEmbeddingsCreate(value.bind(target), options);\n }\n\n return value;\n },\n });\n}\n\n/**\n * Create traced version of embeddings.create\n */\nfunction createTracedEmbeddingsCreate(originalCreate: Function, options: any): Function {\n return async function tracedCreate(params: any) {\n let client;\n try {\n client = getKyte();\n } catch {\n return originalCreate(params);\n }\n\n const span = client\n .spanBuilder(options.traceName || 'openai.embeddings.create')\n .setType('embedding')\n .setModelName(params.model)\n .setInput({\n model: params.model,\n input: Array.isArray(params.input) ? `[${params.input.length} inputs]` : params.input,\n })\n .setTags(options.tags || [])\n .setMetadata({ ...options.metadata, provider: 'openai' })\n .start();\n\n try {\n const response = await originalCreate(params);\n\n const usage = response.usage;\n if (usage) {\n span.setTokens({\n prompt: usage.prompt_tokens,\n total: usage.total_tokens,\n });\n }\n\n span.setOutput({\n model: response.model,\n embeddings: response.data?.length,\n dimensions: response.data?.[0]?.embedding?.length,\n });\n\n await span.end();\n return response;\n } catch (error) {\n span.setError(error as Error);\n await span.end();\n throw error;\n }\n };\n}\n","/**\n * Auto-instrumentation for OpenAI Agents SDK (@openai/agents)\n *\n * Automatically traces agent runs, tool calls, and handoffs.\n * Patches Runner.run() and Agent constructor to capture execution traces.\n */\n\nimport { getKyte } from '../../client';\nimport { calculateCost } from '../../cost-tracking';\n\nlet isPatched = false;\nlet originals: {\n runnerRun?: Function;\n runnerRunSync?: Function;\n} = {};\n\nexport async function patch(): Promise<void> {\n if (isPatched) return;\n\n try {\n const mod = (await import('@openai/agents')) as any;\n\n // Patch Runner.run() - the primary entry point for agent execution\n const RunnerProto = mod.Runner?.prototype;\n if (RunnerProto && typeof RunnerProto.run === 'function') {\n originals.runnerRun = RunnerProto.run;\n RunnerProto.run = createTracedRunnerRun(originals.runnerRun!);\n }\n\n // Patch Runner.runSync() if it exists\n if (RunnerProto && typeof RunnerProto.runSync === 'function') {\n originals.runnerRunSync = RunnerProto.runSync;\n RunnerProto.runSync = createTracedRunnerRunSync(originals.runnerRunSync!);\n }\n\n // Patch the module-level run() function if exported directly\n if (typeof mod.run === 'function') {\n const originalModuleRun = mod.run;\n mod.run = createTracedModuleRun(originalModuleRun);\n }\n\n isPatched = true;\n } catch {\n // Framework not installed - skip\n }\n}\n\nexport function unpatch(): void {\n if (!isPatched) return;\n\n try {\n const mod = require('@openai/agents') as any;\n const RunnerProto = mod.Runner?.prototype;\n\n if (RunnerProto && originals.runnerRun) {\n RunnerProto.run = originals.runnerRun;\n }\n if (RunnerProto && originals.runnerRunSync) {\n RunnerProto.runSync = originals.runnerRunSync;\n }\n } catch {\n // ignore\n }\n\n originals = {};\n isPatched = false;\n}\n\nexport function isPatchActive(): boolean {\n return isPatched;\n}\n\n/**\n * Wrap Runner.run() to trace the full agent execution lifecycle.\n */\nfunction createTracedRunnerRun(originalRun: Function): Function {\n return async function tracedRun(this: any, agent: any, input: any, options?: any) {\n let client;\n try {\n client = getKyte();\n } catch {\n return originalRun.call(this, agent, input, options);\n }\n\n const agentName = agent?.name || agent?.constructor?.name || 'unknown-agent';\n const modelName = agent?.model || agent?.modelName || options?.model;\n\n const span = client\n .spanBuilder(`openai-agents.runner.run`)\n .setType('agent' as any)\n .setInput({\n agent: agentName,\n model: modelName,\n input: typeof input === 'string' ? input : JSON.stringify(input)?.slice(0, 1000),\n })\n .setModelName(modelName || '')\n .setMetadata({ provider: 'openai-agents', agentName })\n .start();\n\n try {\n const result = await originalRun.call(this, agent, input, options);\n\n // Extract result details\n const output: Record<string, any> = {\n agent: agentName,\n };\n\n if (result?.finalOutput !== undefined) {\n output.finalOutput =\n typeof result.finalOutput === 'string'\n ? result.finalOutput.slice(0, 2000)\n : result.finalOutput;\n }\n\n if (result?.lastAgent) {\n output.lastAgent = result.lastAgent?.name || result.lastAgent?.constructor?.name;\n }\n\n // Capture tool calls if available\n if (result?.steps || result?.runSteps) {\n const steps = result.steps || result.runSteps;\n output.stepCount = Array.isArray(steps) ? steps.length : undefined;\n\n const toolCalls: any[] = [];\n if (Array.isArray(steps)) {\n for (const step of steps) {\n if (step.toolCalls || step.tool_calls) {\n const calls = step.toolCalls || step.tool_calls;\n for (const tc of Array.isArray(calls) ? calls : [calls]) {\n toolCalls.push({\n name: tc.name || tc.function?.name,\n type: tc.type,\n });\n }\n }\n }\n }\n if (toolCalls.length > 0) {\n output.toolCalls = toolCalls;\n }\n }\n\n // Capture token usage if available\n if (result?.usage) {\n span.setTokens({\n prompt: result.usage.prompt_tokens || result.usage.input_tokens,\n completion: result.usage.completion_tokens || result.usage.output_tokens,\n total: result.usage.total_tokens,\n });\n\n if (modelName) {\n const cost = calculateCost(\n modelName,\n 'openai',\n result.usage.prompt_tokens || result.usage.input_tokens || 0,\n result.usage.completion_tokens || result.usage.output_tokens || 0,\n );\n if (cost !== null) {\n span.setCost(cost);\n }\n }\n }\n\n span.setOutput(output);\n await span.end();\n return result;\n } catch (error) {\n span.setError(error as Error);\n await span.end();\n throw error;\n }\n };\n}\n\n/**\n * Wrap Runner.runSync() for synchronous agent execution.\n */\nfunction createTracedRunnerRunSync(originalRunSync: Function): Function {\n return async function tracedRunSync(this: any, agent: any, input: any, options?: any) {\n let client;\n try {\n client = getKyte();\n } catch {\n return originalRunSync.call(this, agent, input, options);\n }\n\n const agentName = agent?.name || agent?.constructor?.name || 'unknown-agent';\n\n const span = client\n .spanBuilder(`openai-agents.runner.runSync`)\n .setType('agent' as any)\n .setInput({\n agent: agentName,\n input: typeof input === 'string' ? input : JSON.stringify(input)?.slice(0, 1000),\n })\n .setMetadata({ provider: 'openai-agents', agentName })\n .start();\n\n try {\n const result = await originalRunSync.call(this, agent, input, options);\n\n span.setOutput({\n agent: agentName,\n finalOutput:\n typeof result?.finalOutput === 'string'\n ? result.finalOutput.slice(0, 2000)\n : result?.finalOutput,\n });\n\n await span.end();\n return result;\n } catch (error) {\n span.setError(error as Error);\n await span.end();\n throw error;\n }\n };\n}\n\n/**\n * Wrap module-level run() export.\n */\nfunction createTracedModuleRun(originalRun: Function): Function {\n return async function tracedModuleRun(agent: any, input: any, options?: any) {\n let client;\n try {\n client = getKyte();\n } catch {\n return originalRun(agent, input, options);\n }\n\n const agentName = agent?.name || 'unknown-agent';\n\n const span = client\n .spanBuilder(`openai-agents.run`)\n .setType('agent' as any)\n .setInput({\n agent: agentName,\n input: typeof input === 'string' ? input : JSON.stringify(input)?.slice(0, 1000),\n })\n .setMetadata({ provider: 'openai-agents', agentName })\n .start();\n\n try {\n const result = await originalRun(agent, input, options);\n\n span.setOutput({\n agent: agentName,\n finalOutput:\n typeof result?.finalOutput === 'string'\n ? result.finalOutput.slice(0, 2000)\n : result?.finalOutput,\n });\n\n await span.end();\n return result;\n } catch (error) {\n span.setError(error as Error);\n await span.end();\n throw error;\n }\n };\n}\n","/**\n * Auto-instrumentation for Pipecat\n *\n * Automatically traces Pipecat pipeline executions, frame processing,\n * and transport layer operations when patched.\n *\n * Wraps:\n * - Pipeline constructor and run()\n * - PipelineTask.run()\n * - FrameProcessor.process_frame()\n * - Transport send/receive operations\n * - LLM service calls (OpenAILLMService, etc.)\n * - TTS/STT service calls\n */\n\nimport { getKyte } from '../../client';\n\nlet isPatched = false;\n\nconst originals: {\n pipelineRun?: Function;\n pipelineTaskRun?: Function;\n frameProcessorProcess?: Function;\n llmServiceProcess?: Function;\n ttsServiceRun?: Function;\n sttServiceRun?: Function;\n transportSend?: Function;\n transportReceive?: Function;\n} = {};\n\n/**\n * Wrap a prototype method with span tracing\n */\nfunction patchMethod(\n proto: any,\n methodName: string,\n spanName: string,\n spanType: string,\n buildInput: (instance: any, args: any[]) => Record<string, any>,\n buildOutput: (result: any) => Record<string, any>,\n buildMeta: (instance: any) => Record<string, any>,\n): Function | undefined {\n const original = proto[methodName];\n if (typeof original !== 'function') return undefined;\n\n proto[methodName] = async function (this: any, ...args: any[]) {\n let client;\n try {\n client = getKyte();\n } catch {\n return original.apply(this, args);\n }\n\n const meta = buildMeta(this);\n const spanBuilder = client\n .spanBuilder(spanName)\n .setType(spanType as any)\n .setInput(buildInput(this, args))\n .setMetadata({ provider: 'pipecat', ...meta });\n\n if (meta.model) {\n spanBuilder.setModelName(meta.model);\n }\n\n const span = spanBuilder.start();\n\n try {\n const result = await original.apply(this, args);\n span.setOutput(buildOutput(result));\n await span.end();\n return result;\n } catch (error) {\n span.setError(error as Error);\n await span.end();\n throw error;\n }\n };\n\n return original;\n}\n\nexport async function patch(): Promise<void> {\n if (isPatched) return;\n\n try {\n const mod: any = await import('pipecat-ai');\n\n // Patch Pipeline.run()\n if (mod.Pipeline?.prototype?.run) {\n originals.pipelineRun = patchMethod(\n mod.Pipeline.prototype,\n 'run',\n 'pipecat.pipeline.run',\n 'chain',\n (instance, _args) => ({\n processorCount: instance.processors?.length || instance._processors?.length,\n processors: (instance.processors || instance._processors)?.map(\n (p: any) => p.constructor?.name || p.name,\n ),\n }),\n (result) => ({\n success: true,\n result: result != null ? String(result).substring(0, 1000) : undefined,\n }),\n (instance) => ({\n pipelineName: instance.name || instance.constructor?.name,\n processorCount: instance.processors?.length || instance._processors?.length,\n }),\n );\n }\n\n // Patch PipelineTask.run()\n if (mod.PipelineTask?.prototype?.run) {\n originals.pipelineTaskRun = patchMethod(\n mod.PipelineTask.prototype,\n 'run',\n 'pipecat.pipeline_task.run',\n 'chain',\n (instance, _args) => ({\n taskName: instance.name,\n pipelineProcessors: instance.pipeline?.processors?.length,\n }),\n (result) => ({\n success: true,\n result: result != null ? String(result).substring(0, 1000) : undefined,\n }),\n (instance) => ({\n taskName: instance.name,\n }),\n );\n }\n\n // Patch FrameProcessor.process_frame() - core frame processing\n if (mod.FrameProcessor?.prototype?.process_frame) {\n originals.frameProcessorProcess = patchMethod(\n mod.FrameProcessor.prototype,\n 'process_frame',\n 'pipecat.frame_processor.process_frame',\n 'custom',\n (instance, args) => ({\n processorName: instance.name || instance.constructor?.name,\n frameType: args[0]?.constructor?.name || args[0]?.type,\n direction: args[1],\n }),\n (result) => ({\n outputFrameType: result?.constructor?.name || result?.type,\n }),\n (instance) => ({\n processorName: instance.name || instance.constructor?.name,\n processorType: instance.constructor?.name,\n }),\n );\n }\n\n // Patch LLM services (OpenAILLMService, AnthropicLLMService, etc.)\n const llmServiceClasses = [\n 'OpenAILLMService',\n 'AnthropicLLMService',\n 'GoogleLLMService',\n 'LLMService',\n ];\n for (const className of llmServiceClasses) {\n if (mod[className]?.prototype?.process_frame) {\n originals.llmServiceProcess = patchMethod(\n mod[className].prototype,\n 'process_frame',\n `pipecat.llm.${className}.process_frame`,\n 'llm',\n (instance, args) => ({\n serviceName: instance.name || className,\n model: instance.model || instance._model || instance.model_name,\n frameType: args[0]?.constructor?.name,\n messages: args[0]?.messages?.slice(-3)?.map((m: any) => ({\n role: m.role,\n content: typeof m.content === 'string' ? m.content.substring(0, 300) : m.content,\n })),\n }),\n (result) => {\n const output: Record<string, any> = {\n frameType: result?.constructor?.name,\n };\n if (result?.text) output.text = result.text.substring(0, 1000);\n if (result?.usage) {\n output.usage = result.usage;\n }\n return output;\n },\n (instance) => ({\n model: instance.model || instance._model || instance.model_name,\n serviceName: instance.name || className,\n }),\n );\n break; // Only patch the first found LLM service base\n }\n }\n\n // Patch TTS services\n const ttsServiceClasses = ['ElevenLabsTTSService', 'OpenAITTSService', 'TTSService'];\n for (const className of ttsServiceClasses) {\n if (mod[className]?.prototype?.run_tts) {\n originals.ttsServiceRun = patchMethod(\n mod[className].prototype,\n 'run_tts',\n `pipecat.tts.${className}.run_tts`,\n 'custom',\n (instance, args) => ({\n serviceName: instance.name || className,\n text:\n typeof args[0] === 'string'\n ? args[0].substring(0, 500)\n : args[0]?.text?.substring(0, 500),\n voice: instance.voice || instance._voice,\n }),\n (result) => ({\n audioGenerated: true,\n audioDuration: result?.duration,\n audioSize: result?.length || result?.byteLength,\n }),\n (instance) => ({\n serviceName: instance.name || className,\n voice: instance.voice || instance._voice,\n model: instance.model || instance._model,\n }),\n );\n break;\n }\n }\n\n // Patch STT services\n const sttServiceClasses = ['DeepgramSTTService', 'WhisperSTTService', 'STTService'];\n for (const className of sttServiceClasses) {\n if (mod[className]?.prototype?.run_stt) {\n originals.sttServiceRun = patchMethod(\n mod[className].prototype,\n 'run_stt',\n `pipecat.stt.${className}.run_stt`,\n 'custom',\n (instance, args) => ({\n serviceName: instance.name || className,\n audioLength: args[0]?.length || args[0]?.byteLength,\n language: instance.language || instance._language,\n }),\n (result) => ({\n transcript:\n typeof result === 'string'\n ? result.substring(0, 1000)\n : result?.text?.substring(0, 1000),\n confidence: result?.confidence,\n isFinal: result?.is_final,\n }),\n (instance) => ({\n serviceName: instance.name || className,\n language: instance.language || instance._language,\n model: instance.model || instance._model,\n }),\n );\n break;\n }\n }\n\n // Patch Transport send/receive if available\n if (mod.Transport?.prototype) {\n if (mod.Transport.prototype.send) {\n originals.transportSend = patchMethod(\n mod.Transport.prototype,\n 'send',\n 'pipecat.transport.send',\n 'custom',\n (_instance, args) => ({\n frameType: args[0]?.constructor?.name || args[0]?.type,\n dataSize: args[0]?.data?.length || args[0]?.data?.byteLength,\n }),\n () => ({ sent: true }),\n (instance) => ({\n transportType: instance.constructor?.name,\n }),\n );\n }\n\n if (mod.Transport.prototype.receive) {\n originals.transportReceive = patchMethod(\n mod.Transport.prototype,\n 'receive',\n 'pipecat.transport.receive',\n 'custom',\n (instance, _args) => ({\n transportType: instance.constructor?.name,\n }),\n (result) => ({\n frameType: result?.constructor?.name || result?.type,\n dataSize: result?.data?.length || result?.data?.byteLength,\n }),\n (instance) => ({\n transportType: instance.constructor?.name,\n }),\n );\n }\n }\n\n isPatched = true;\n } catch {\n // Framework not installed - skip\n }\n}\n\nexport function unpatch(): void {\n if (!isPatched) return;\n\n try {\n const mod: any = require('pipecat-ai');\n\n if (originals.pipelineRun && mod.Pipeline?.prototype) {\n mod.Pipeline.prototype.run = originals.pipelineRun;\n }\n if (originals.pipelineTaskRun && mod.PipelineTask?.prototype) {\n mod.PipelineTask.prototype.run = originals.pipelineTaskRun;\n }\n if (originals.frameProcessorProcess && mod.FrameProcessor?.prototype) {\n mod.FrameProcessor.prototype.process_frame = originals.frameProcessorProcess;\n }\n\n // Restore LLM services\n const llmClasses = [\n 'OpenAILLMService',\n 'AnthropicLLMService',\n 'GoogleLLMService',\n 'LLMService',\n ];\n if (originals.llmServiceProcess) {\n for (const cls of llmClasses) {\n if (mod[cls]?.prototype) {\n mod[cls].prototype.process_frame = originals.llmServiceProcess;\n }\n }\n }\n\n // Restore TTS\n const ttsClasses = ['ElevenLabsTTSService', 'OpenAITTSService', 'TTSService'];\n if (originals.ttsServiceRun) {\n for (const cls of ttsClasses) {\n if (mod[cls]?.prototype) {\n mod[cls].prototype.run_tts = originals.ttsServiceRun;\n }\n }\n }\n\n // Restore STT\n const sttClasses = ['DeepgramSTTService', 'WhisperSTTService', 'STTService'];\n if (originals.sttServiceRun) {\n for (const cls of sttClasses) {\n if (mod[cls]?.prototype) {\n mod[cls].prototype.run_stt = originals.sttServiceRun;\n }\n }\n }\n\n if (mod.Transport?.prototype) {\n if (originals.transportSend) mod.Transport.prototype.send = originals.transportSend;\n if (originals.transportReceive) mod.Transport.prototype.receive = originals.transportReceive;\n }\n } catch {\n // Module not available\n }\n\n isPatched = false;\n}\n\nexport function isPatchActive(): boolean {\n return isPatched;\n}\n","import type { IntegrationInfo } from '../agent-types';\n\nclass IntegrationRegistryImpl {\n private integrations: Map<string, IntegrationInfo> = new Map();\n private patchedSet: Set<string> = new Set();\n\n register(info: IntegrationInfo): void {\n this.integrations.set(info.name, info);\n }\n\n get(name: string): IntegrationInfo | undefined {\n return this.integrations.get(name);\n }\n\n getAll(): IntegrationInfo[] {\n return Array.from(this.integrations.values());\n }\n\n markPatched(name: string): void {\n this.patchedSet.add(name);\n const info = this.integrations.get(name);\n if (info) info.isPatched = true;\n }\n\n isPatched(name: string): boolean {\n return this.patchedSet.has(name);\n }\n\n async patch(...names: string[]): Promise<void> {\n for (const name of names) {\n if (this.isPatched(name)) continue;\n const info = this.integrations.get(name);\n if (!info) {\n console.warn(`Unknown integration: ${name}`);\n continue;\n }\n try {\n // Dynamic import of the patch module\n const mod = await import(`./${name}/index`);\n if (mod.patch) await mod.patch();\n this.markPatched(name);\n } catch (_error) {\n // Package not installed or patch failed - skip silently\n }\n }\n }\n\n async patchAll(): Promise<void> {\n await this.patch(...Array.from(this.integrations.keys()));\n }\n}\n\nexport const IntegrationRegistry = new IntegrationRegistryImpl();\n\n// Register all known integrations\nconst knownIntegrations: IntegrationInfo[] = [\n { name: 'langchain', displayName: 'LangChain', packageName: 'langchain', patchFunction: 'patch' },\n {\n name: 'langgraph',\n displayName: 'LangGraph',\n packageName: '@langchain/langgraph',\n patchFunction: 'patch',\n },\n { name: 'crewai', displayName: 'CrewAI', packageName: 'crewai', patchFunction: 'patch' },\n { name: 'autogen', displayName: 'AutoGen', packageName: 'autogen', patchFunction: 'patch' },\n {\n name: 'openai-agents',\n displayName: 'OpenAI Agents',\n packageName: '@openai/agents',\n patchFunction: 'patch',\n },\n {\n name: 'claude-agent-sdk',\n displayName: 'Claude Agent SDK',\n packageName: '@anthropic-ai/agent-sdk',\n patchFunction: 'patch',\n },\n {\n name: 'browser-use',\n displayName: 'Browser-Use',\n packageName: 'browser-use',\n patchFunction: 'patch',\n },\n {\n name: 'llamaindex',\n displayName: 'LlamaIndex',\n packageName: 'llamaindex',\n patchFunction: 'patch',\n },\n { name: 'dspy', displayName: 'DSPy', packageName: 'dspy', patchFunction: 'patch' },\n { name: 'pipecat', displayName: 'Pipecat', packageName: 'pipecat-ai', patchFunction: 'patch' },\n {\n name: 'instructor',\n displayName: 'Instructor',\n packageName: 'instructor',\n patchFunction: 'patch',\n },\n {\n name: 'semantic-kernel',\n displayName: 'Semantic Kernel',\n packageName: 'semantic-kernel',\n patchFunction: 'patch',\n },\n {\n name: 'strands',\n displayName: 'Strands',\n packageName: 'strands-agents',\n patchFunction: 'patch',\n },\n {\n name: 'google-adk',\n displayName: 'Google ADK',\n packageName: '@google/adk',\n patchFunction: 'patch',\n },\n];\n\nfor (const info of knownIntegrations) {\n IntegrationRegistry.register(info);\n}\n","/**\n * Auto-instrumentation for Semantic Kernel\n *\n * Automatically traces Semantic Kernel plugin invocations, planner executions,\n * and kernel function calls when patched.\n *\n * Wraps:\n * - Kernel.invokeAsync() / Kernel.invoke()\n * - Kernel.invokePromptAsync() / Kernel.invokePrompt()\n * - KernelFunction.invokeAsync()\n * - Planner.createPlan() / executePlan()\n * - ChatCompletionService.getChatMessageContents()\n */\n\nimport { getKyte } from '../../client';\n\nlet isPatched = false;\n\nconst originals: {\n kernelInvoke?: Function;\n kernelInvokeAsync?: Function;\n kernelInvokePrompt?: Function;\n kernelInvokePromptAsync?: Function;\n kernelFunctionInvoke?: Function;\n plannerCreatePlan?: Function;\n plannerExecutePlan?: Function;\n chatCompletionGetContents?: Function;\n textCompletionGetContents?: Function;\n} = {};\n\n/**\n * Wrap a prototype method with span tracing\n */\nfunction patchMethod(\n proto: any,\n methodName: string,\n spanName: string,\n spanType: string,\n buildInput: (instance: any, args: any[]) => Record<string, any>,\n buildOutput: (result: any) => Record<string, any>,\n buildMeta: (instance: any) => Record<string, any>,\n): Function | undefined {\n const original = proto[methodName];\n if (typeof original !== 'function') return undefined;\n\n proto[methodName] = async function (this: any, ...args: any[]) {\n let client;\n try {\n client = getKyte();\n } catch {\n return original.apply(this, args);\n }\n\n const meta = buildMeta(this);\n const spanBuilder = client\n .spanBuilder(spanName)\n .setType(spanType as any)\n .setInput(buildInput(this, args))\n .setMetadata({ provider: 'semantic-kernel', ...meta });\n\n if (meta.model) {\n spanBuilder.setModelName(meta.model);\n }\n\n const span = spanBuilder.start();\n\n try {\n const result = await original.apply(this, args);\n\n span.setOutput(buildOutput(result));\n\n // Extract token usage if present in result metadata\n const usage = result?.metadata?.usage || result?.metadata?.tokenUsage;\n if (usage) {\n span.setTokens({\n prompt: usage.promptTokens || usage.prompt_tokens,\n completion: usage.completionTokens || usage.completion_tokens,\n total: usage.totalTokens || usage.total_tokens,\n });\n }\n\n await span.end();\n return result;\n } catch (error) {\n span.setError(error as Error);\n await span.end();\n throw error;\n }\n };\n\n return original;\n}\n\nexport async function patch(): Promise<void> {\n if (isPatched) return;\n\n try {\n const mod: any = await import('semantic-kernel');\n\n // Patch Kernel.invoke()\n if (mod.Kernel?.prototype?.invoke) {\n originals.kernelInvoke = patchMethod(\n mod.Kernel.prototype,\n 'invoke',\n 'semantic-kernel.kernel.invoke',\n 'chain',\n (instance, args) => ({\n functionName: args[0]?.name || args[0]?.metadata?.name || args[0],\n pluginName: args[0]?.pluginName || args[0]?.metadata?.pluginName,\n arguments: sanitizeKernelArgs(args[1]),\n pluginCount: instance.plugins?.count || Object.keys(instance.plugins || {}).length,\n }),\n (result) => ({\n value: extractFunctionResult(result),\n resultType: result?.valueType || typeof result?.value,\n }),\n (instance) => ({\n registeredPlugins: getPluginNames(instance),\n }),\n );\n }\n\n // Patch Kernel.invokeAsync()\n if (mod.Kernel?.prototype?.invokeAsync) {\n originals.kernelInvokeAsync = patchMethod(\n mod.Kernel.prototype,\n 'invokeAsync',\n 'semantic-kernel.kernel.invokeAsync',\n 'chain',\n (instance, args) => ({\n functionName: args[0]?.name || args[0]?.metadata?.name || args[0],\n pluginName: args[0]?.pluginName || args[0]?.metadata?.pluginName,\n arguments: sanitizeKernelArgs(args[1]),\n pluginCount: instance.plugins?.count || Object.keys(instance.plugins || {}).length,\n }),\n (result) => ({\n value: extractFunctionResult(result),\n resultType: result?.valueType || typeof result?.value,\n }),\n (instance) => ({\n registeredPlugins: getPluginNames(instance),\n }),\n );\n }\n\n // Patch Kernel.invokePrompt()\n if (mod.Kernel?.prototype?.invokePrompt) {\n originals.kernelInvokePrompt = patchMethod(\n mod.Kernel.prototype,\n 'invokePrompt',\n 'semantic-kernel.kernel.invokePrompt',\n 'llm',\n (_instance, args) => ({\n prompt: typeof args[0] === 'string' ? args[0].substring(0, 1000) : args[0],\n arguments: sanitizeKernelArgs(args[1]),\n }),\n (result) => ({\n value: extractFunctionResult(result),\n }),\n (instance) => ({\n registeredPlugins: getPluginNames(instance),\n }),\n );\n }\n\n // Patch Kernel.invokePromptAsync()\n if (mod.Kernel?.prototype?.invokePromptAsync) {\n originals.kernelInvokePromptAsync = patchMethod(\n mod.Kernel.prototype,\n 'invokePromptAsync',\n 'semantic-kernel.kernel.invokePromptAsync',\n 'llm',\n (_instance, args) => ({\n prompt: typeof args[0] === 'string' ? args[0].substring(0, 1000) : args[0],\n arguments: sanitizeKernelArgs(args[1]),\n }),\n (result) => ({\n value: extractFunctionResult(result),\n }),\n (instance) => ({\n registeredPlugins: getPluginNames(instance),\n }),\n );\n }\n\n // Patch KernelFunction.invokeAsync() if available\n if (mod.KernelFunction?.prototype?.invokeAsync) {\n originals.kernelFunctionInvoke = patchMethod(\n mod.KernelFunction.prototype,\n 'invokeAsync',\n 'semantic-kernel.function.invokeAsync',\n 'tool',\n (instance, args) => ({\n functionName: instance.name || instance.metadata?.name,\n pluginName: instance.pluginName || instance.metadata?.pluginName,\n description: instance.description || instance.metadata?.description,\n arguments: sanitizeKernelArgs(args[0]?.arguments || args[1]),\n }),\n (result) => ({\n value: extractFunctionResult(result),\n resultType: result?.valueType || typeof result?.value,\n }),\n (instance) => ({\n functionName: instance.name || instance.metadata?.name,\n pluginName: instance.pluginName || instance.metadata?.pluginName,\n }),\n );\n }\n\n // Patch Planner classes if available\n const plannerClasses = [\n 'SequentialPlanner',\n 'StepwisePlanner',\n 'HandlebarsPlanner',\n 'FunctionCallingStepwisePlanner',\n ];\n for (const className of plannerClasses) {\n if (mod[className]?.prototype) {\n if (mod[className].prototype.createPlan) {\n originals.plannerCreatePlan = patchMethod(\n mod[className].prototype,\n 'createPlan',\n `semantic-kernel.planner.${className}.createPlan`,\n 'chain',\n (_instance, args) => ({\n goal:\n typeof args[0] === 'string'\n ? args[0].substring(0, 1000)\n : args[0]?.goal?.substring(0, 1000),\n plannerType: className,\n }),\n (result) => ({\n planStepCount: result?.steps?.length,\n planDescription: result?.description?.substring(0, 500),\n planSteps: result?.steps?.map((s: any) => s.name || s.description?.substring(0, 100)),\n }),\n () => ({ plannerType: className }),\n );\n }\n\n if (mod[className].prototype.executePlan) {\n originals.plannerExecutePlan = patchMethod(\n mod[className].prototype,\n 'executePlan',\n `semantic-kernel.planner.${className}.executePlan`,\n 'chain',\n (_instance, args) => ({\n plannerType: className,\n planStepCount: args[0]?.steps?.length,\n }),\n (result) => ({\n value: extractFunctionResult(result),\n success: result?.status !== 'failed',\n }),\n () => ({ plannerType: className }),\n );\n }\n break; // Only patch the first found planner\n }\n }\n\n // Patch ChatCompletionService if available\n if (mod.ChatCompletionService?.prototype?.getChatMessageContents) {\n originals.chatCompletionGetContents = patchMethod(\n mod.ChatCompletionService.prototype,\n 'getChatMessageContents',\n 'semantic-kernel.chat_completion.getChatMessageContents',\n 'llm',\n (instance, args) => ({\n model: instance.modelId || instance.model,\n messageCount: args[0]?.length,\n messages: args[0]?.slice(-5)?.map((m: any) => ({\n role: m.role,\n content: typeof m.content === 'string' ? m.content.substring(0, 300) : m.content,\n })),\n settings: {\n temperature: args[1]?.temperature,\n maxTokens: args[1]?.maxTokens || args[1]?.max_tokens,\n topP: args[1]?.topP || args[1]?.top_p,\n },\n }),\n (result) => ({\n responseCount: Array.isArray(result) ? result.length : 1,\n content: Array.isArray(result)\n ? result.map((r: any) => ({\n role: r.role,\n content: typeof r.content === 'string' ? r.content.substring(0, 1000) : r.content,\n }))\n : typeof result?.content === 'string'\n ? result.content.substring(0, 1000)\n : result,\n }),\n (instance) => ({\n model: instance.modelId || instance.model,\n serviceType: instance.constructor?.name,\n }),\n );\n }\n\n // Patch TextCompletionService if available\n if (mod.TextCompletionService?.prototype?.getTextContents) {\n originals.textCompletionGetContents = patchMethod(\n mod.TextCompletionService.prototype,\n 'getTextContents',\n 'semantic-kernel.text_completion.getTextContents',\n 'llm',\n (instance, args) => ({\n model: instance.modelId || instance.model,\n prompt: typeof args[0] === 'string' ? args[0].substring(0, 1000) : args[0],\n settings: {\n temperature: args[1]?.temperature,\n maxTokens: args[1]?.maxTokens || args[1]?.max_tokens,\n },\n }),\n (result) => ({\n responseCount: Array.isArray(result) ? result.length : 1,\n text: Array.isArray(result)\n ? result.map((r: any) =>\n typeof r === 'string' ? r.substring(0, 1000) : r?.text?.substring(0, 1000),\n )\n : typeof result === 'string'\n ? result.substring(0, 1000)\n : result?.text?.substring(0, 1000),\n }),\n (instance) => ({\n model: instance.modelId || instance.model,\n serviceType: instance.constructor?.name,\n }),\n );\n }\n\n isPatched = true;\n } catch {\n // Framework not installed - skip\n }\n}\n\n/**\n * Safely extract plugin names from a Kernel instance\n */\nfunction getPluginNames(kernel: any): string[] | undefined {\n try {\n if (kernel.plugins) {\n if (typeof kernel.plugins.getNames === 'function') return kernel.plugins.getNames();\n if (Array.isArray(kernel.plugins)) return kernel.plugins.map((p: any) => p.name);\n return Object.keys(kernel.plugins);\n }\n } catch {\n // ignore\n }\n return undefined;\n}\n\n/**\n * Safely sanitize kernel arguments for span input\n */\nfunction sanitizeKernelArgs(args: any): Record<string, any> | undefined {\n if (!args) return undefined;\n try {\n if (typeof args === 'object' && args.constructor?.name === 'KernelArguments') {\n const result: Record<string, any> = {};\n if (typeof args.entries === 'function') {\n for (const [key, value] of args.entries()) {\n result[key] = typeof value === 'string' ? value.substring(0, 500) : value;\n }\n } else if (typeof args.toJSON === 'function') {\n return args.toJSON();\n }\n return result;\n }\n if (typeof args === 'object') {\n const result: Record<string, any> = {};\n for (const [key, value] of Object.entries(args)) {\n result[key] = typeof value === 'string' ? (value as string).substring(0, 500) : value;\n }\n return result;\n }\n } catch {\n // ignore\n }\n return undefined;\n}\n\n/**\n * Safely extract the value from a FunctionResult\n */\nfunction extractFunctionResult(result: any): any {\n if (!result) return undefined;\n try {\n if (typeof result.getValue === 'function') {\n const val = result.getValue();\n return typeof val === 'string' ? val.substring(0, 2000) : val;\n }\n if (result.value !== undefined) {\n return typeof result.value === 'string' ? result.value.substring(0, 2000) : result.value;\n }\n if (typeof result.toString === 'function' && result.constructor?.name !== 'Object') {\n return result.toString().substring(0, 2000);\n }\n return JSON.stringify(result)?.substring(0, 2000);\n } catch {\n return '[Non-serializable result]';\n }\n}\n\nexport function unpatch(): void {\n if (!isPatched) return;\n\n try {\n const mod: any = require('semantic-kernel');\n\n if (mod.Kernel?.prototype) {\n if (originals.kernelInvoke) mod.Kernel.prototype.invoke = originals.kernelInvoke;\n if (originals.kernelInvokeAsync)\n mod.Kernel.prototype.invokeAsync = originals.kernelInvokeAsync;\n if (originals.kernelInvokePrompt)\n mod.Kernel.prototype.invokePrompt = originals.kernelInvokePrompt;\n if (originals.kernelInvokePromptAsync)\n mod.Kernel.prototype.invokePromptAsync = originals.kernelInvokePromptAsync;\n }\n\n if (originals.kernelFunctionInvoke && mod.KernelFunction?.prototype) {\n mod.KernelFunction.prototype.invokeAsync = originals.kernelFunctionInvoke;\n }\n\n // Restore planners\n const plannerClasses = [\n 'SequentialPlanner',\n 'StepwisePlanner',\n 'HandlebarsPlanner',\n 'FunctionCallingStepwisePlanner',\n ];\n for (const cls of plannerClasses) {\n if (mod[cls]?.prototype) {\n if (originals.plannerCreatePlan)\n mod[cls].prototype.createPlan = originals.plannerCreatePlan;\n if (originals.plannerExecutePlan)\n mod[cls].prototype.executePlan = originals.plannerExecutePlan;\n }\n }\n\n if (originals.chatCompletionGetContents && mod.ChatCompletionService?.prototype) {\n mod.ChatCompletionService.prototype.getChatMessageContents =\n originals.chatCompletionGetContents;\n }\n if (originals.textCompletionGetContents && mod.TextCompletionService?.prototype) {\n mod.TextCompletionService.prototype.getTextContents = originals.textCompletionGetContents;\n }\n } catch {\n // Module not available\n }\n\n isPatched = false;\n}\n\nexport function isPatchActive(): boolean {\n return isPatched;\n}\n","/**\n * Auto-instrumentation for Strands Agents (strands-agents)\n *\n * Automatically traces Strands agent executions, tool orchestration,\n * and multi-step reasoning. Patches Agent creation and execution methods.\n */\n\nimport { getKyte } from '../../client';\nimport { calculateCost } from '../../cost-tracking';\n\nlet isPatched = false;\nlet originals: {\n agentRun?: Function;\n agentInvoke?: Function;\n agentCall?: Function;\n agentConstructor?: Function;\n} = {};\n\nexport async function patch(): Promise<void> {\n if (isPatched) return;\n\n try {\n const mod = (await import('strands-agents')) as any;\n\n // Patch Agent.prototype.run()\n const AgentProto = mod.Agent?.prototype;\n if (AgentProto) {\n if (typeof AgentProto.run === 'function') {\n originals.agentRun = AgentProto.run;\n AgentProto.run = createTracedAgentRun(originals.agentRun!);\n }\n\n // Patch invoke() if it exists\n if (typeof AgentProto.invoke === 'function') {\n originals.agentInvoke = AgentProto.invoke;\n AgentProto.invoke = createTracedAgentInvoke(originals.agentInvoke!);\n }\n\n // Patch __call__ or call() if the agent is callable\n if (typeof AgentProto.call === 'function') {\n originals.agentCall = AgentProto.call;\n AgentProto.call = createTracedAgentCall(originals.agentCall!);\n }\n }\n\n // Patch module-level createAgent() or agent() factory if available\n if (typeof mod.createAgent === 'function') {\n const originalCreateAgent = mod.createAgent;\n mod.createAgent = function tracedCreateAgent(...args: any[]) {\n const agent = originalCreateAgent(...args);\n return wrapAgentInstance(agent);\n };\n }\n\n if (typeof mod.agent === 'function' && mod.agent !== mod.createAgent) {\n const originalAgentFactory = mod.agent;\n mod.agent = function tracedAgentFactory(...args: any[]) {\n const agent = originalAgentFactory(...args);\n return wrapAgentInstance(agent);\n };\n }\n\n isPatched = true;\n } catch {\n // Framework not installed - skip\n }\n}\n\nexport function unpatch(): void {\n if (!isPatched) return;\n\n try {\n const mod = require('strands-agents') as any;\n const AgentProto = mod.Agent?.prototype;\n\n if (AgentProto) {\n if (originals.agentRun) AgentProto.run = originals.agentRun;\n if (originals.agentInvoke) AgentProto.invoke = originals.agentInvoke;\n if (originals.agentCall) AgentProto.call = originals.agentCall;\n }\n } catch {\n // ignore\n }\n\n originals = {};\n isPatched = false;\n}\n\nexport function isPatchActive(): boolean {\n return isPatched;\n}\n\n/**\n * Wrap an agent instance returned from a factory function.\n * Ensures run/invoke/call methods are traced even if prototype patching missed them.\n */\nfunction wrapAgentInstance(agent: any): any {\n if (!agent || typeof agent !== 'object') return agent;\n\n // If the agent already has patched methods via prototype, skip\n if (agent.__kyteInstrumented) return agent;\n\n return new Proxy(agent, {\n get(target, prop, receiver) {\n const value = Reflect.get(target, prop, receiver);\n\n if (prop === 'run' && typeof value === 'function') {\n return createTracedAgentRun(value.bind(target));\n }\n if (prop === 'invoke' && typeof value === 'function') {\n return createTracedAgentInvoke(value.bind(target));\n }\n if (prop === 'call' && typeof value === 'function') {\n return createTracedAgentCall(value.bind(target));\n }\n\n return value;\n },\n });\n}\n\n/**\n * Wrap Agent.run() to trace agent execution.\n */\nfunction createTracedAgentRun(originalRun: Function): Function {\n return async function tracedRun(this: any, input: any, options?: any) {\n let client;\n try {\n client = getKyte();\n } catch {\n return originalRun.call(this, input, options);\n }\n\n const agentName = this?.name || this?.agentName || this?.config?.name || 'strands-agent';\n const modelName = this?.model || this?.modelName || this?.config?.model || options?.model;\n\n const span = client\n .spanBuilder('strands.agent.run')\n .setType('agent' as any)\n .setModelName(modelName || '')\n .setInput({\n agent: agentName,\n model: modelName,\n input:\n typeof input === 'string' ? input.slice(0, 1000) : JSON.stringify(input)?.slice(0, 1000),\n tools: extractToolNames(this),\n })\n .setMetadata({\n provider: 'strands-agents',\n framework: 'strands-agents',\n agentName,\n })\n .start();\n\n try {\n const result = await originalRun.call(this, input, options);\n\n const output: Record<string, any> = {\n agent: agentName,\n };\n\n // Extract response\n if (result?.response !== undefined) {\n output.response =\n typeof result.response === 'string' ? result.response.slice(0, 2000) : result.response;\n }\n if (result?.output !== undefined) {\n output.output =\n typeof result.output === 'string' ? result.output.slice(0, 2000) : result.output;\n }\n if (result?.content !== undefined) {\n output.content =\n typeof result.content === 'string' ? result.content.slice(0, 2000) : result.content;\n }\n\n // Capture tool calls\n if (result?.toolCalls || result?.tool_calls) {\n const calls = result.toolCalls || result.tool_calls;\n output.toolCalls = Array.isArray(calls)\n ? calls.map((tc: any) => ({\n name: tc.name || tc.toolName,\n type: tc.type,\n }))\n : calls;\n }\n\n // Capture reasoning steps\n if (result?.steps || result?.reasoning) {\n const steps = result.steps || result.reasoning;\n output.stepCount = Array.isArray(steps) ? steps.length : undefined;\n }\n\n // Extract token usage\n const usage = result?.usage || result?.tokenUsage || result?.metadata?.usage;\n if (usage) {\n span.setTokens({\n prompt: usage.prompt_tokens || usage.input_tokens || usage.promptTokens,\n completion: usage.completion_tokens || usage.output_tokens || usage.completionTokens,\n total:\n usage.total_tokens ||\n usage.totalTokens ||\n (usage.prompt_tokens || usage.input_tokens || 0) +\n (usage.completion_tokens || usage.output_tokens || 0),\n });\n\n if (modelName) {\n const inputTokens = usage.prompt_tokens || usage.input_tokens || usage.promptTokens || 0;\n const outputTokens =\n usage.completion_tokens || usage.output_tokens || usage.completionTokens || 0;\n // Try multiple providers since Strands is model-agnostic\n let cost = calculateCost(modelName, 'openai', inputTokens, outputTokens);\n if (cost === null)\n cost = calculateCost(modelName, 'anthropic', inputTokens, outputTokens);\n if (cost === null) cost = calculateCost(modelName, 'google', inputTokens, outputTokens);\n if (cost !== null) {\n span.setCost(cost);\n }\n }\n }\n\n span.setOutput(output);\n await span.end();\n return result;\n } catch (error) {\n span.setError(error as Error);\n await span.end();\n throw error;\n }\n };\n}\n\n/**\n * Wrap Agent.invoke() as an alternative execution method.\n */\nfunction createTracedAgentInvoke(originalInvoke: Function): Function {\n return async function tracedInvoke(this: any, input: any, options?: any) {\n let client;\n try {\n client = getKyte();\n } catch {\n return originalInvoke.call(this, input, options);\n }\n\n const agentName = this?.name || this?.agentName || 'strands-agent';\n const modelName = this?.model || this?.modelName || options?.model;\n\n const span = client\n .spanBuilder('strands.agent.invoke')\n .setType('agent' as any)\n .setModelName(modelName || '')\n .setInput({\n agent: agentName,\n model: modelName,\n input:\n typeof input === 'string' ? input.slice(0, 1000) : JSON.stringify(input)?.slice(0, 1000),\n })\n .setMetadata({ provider: 'strands-agents', framework: 'strands-agents', agentName })\n .start();\n\n try {\n const result = await originalInvoke.call(this, input, options);\n\n span.setOutput({\n agent: agentName,\n result: typeof result === 'string' ? result.slice(0, 2000) : result,\n });\n\n await span.end();\n return result;\n } catch (error) {\n span.setError(error as Error);\n await span.end();\n throw error;\n }\n };\n}\n\n/**\n * Wrap Agent.call() for callable agent pattern.\n */\nfunction createTracedAgentCall(originalCall: Function): Function {\n return async function tracedCall(this: any, input: any, ...rest: any[]) {\n let client;\n try {\n client = getKyte();\n } catch {\n return originalCall.call(this, input, ...rest);\n }\n\n const agentName = this?.name || this?.agentName || 'strands-agent';\n\n const span = client\n .spanBuilder('strands.agent.call')\n .setType('agent' as any)\n .setInput({\n agent: agentName,\n input:\n typeof input === 'string' ? input.slice(0, 1000) : JSON.stringify(input)?.slice(0, 1000),\n })\n .setMetadata({ provider: 'strands-agents', framework: 'strands-agents', agentName })\n .start();\n\n try {\n const result = await originalCall.call(this, input, ...rest);\n\n span.setOutput({\n agent: agentName,\n result: typeof result === 'string' ? result.slice(0, 2000) : result,\n });\n\n await span.end();\n return result;\n } catch (error) {\n span.setError(error as Error);\n await span.end();\n throw error;\n }\n };\n}\n\n/**\n * Extract tool names from an agent instance.\n */\nfunction extractToolNames(agent: any): string[] | undefined {\n try {\n const tools = agent?.tools || agent?.config?.tools || agent?._tools;\n if (Array.isArray(tools)) {\n return tools.map((t: any) => t.name || t.toolName || t.constructor?.name).filter(Boolean);\n }\n } catch {\n // ignore\n }\n return undefined;\n}\n","/**\n * Auto-Instrumentation System\n *\n * Zero-code tracing using ES Proxy pattern.\n * Automatically instruments LLM SDKs without modifying original code.\n */\n\nimport type { AutoInstrumentConfig, CustomInstrumentation } from '../types';\nimport { createAnthropicInstrumentation } from './anthropic/index';\nimport { patch as patchAutogen, unpatch as unpatchAutogen } from './autogen/index';\nimport { patch as patchBrowserUse, unpatch as unpatchBrowserUse } from './browser-use/index';\nimport {\n patch as patchClaudeAgentSdk,\n unpatch as unpatchClaudeAgentSdk,\n} from './claude-agent-sdk/index';\nimport { patch as patchCrewai, unpatch as unpatchCrewai } from './crewai/index';\nimport { patch as patchDspy, unpatch as unpatchDspy } from './dspy/index';\nimport { patch as patchGoogleAdk, unpatch as unpatchGoogleAdk } from './google-adk/index';\nimport { createHttpInstrumentation } from './http/index';\nimport { patch as patchInstructor, unpatch as unpatchInstructor } from './instructor/index';\nimport { createLangChainInstrumentation } from './langchain/index';\nimport { patch as patchLanggraph, unpatch as unpatchLanggraph } from './langgraph/index';\nimport { patch as patchLlamaindex, unpatch as unpatchLlamaindex } from './llamaindex/index';\nimport { createOpenAIInstrumentation } from './openai/index';\nimport { patch as patchOpenaiAgents, unpatch as unpatchOpenaiAgents } from './openai-agents/index';\nimport { patch as patchPipecat, unpatch as unpatchPipecat } from './pipecat/index';\nimport { IntegrationRegistry } from './registry';\nimport {\n patch as patchSemanticKernel,\n unpatch as unpatchSemanticKernel,\n} from './semantic-kernel/index';\nimport { patch as patchStrands, unpatch as unpatchStrands } from './strands/index';\n\n// Store original modules for restoration\nconst originalModules = new Map<string, any>();\n\n/**\n * Enable auto-instrumentation for specified SDKs\n *\n * @example\n * ```typescript\n * import { autoInstrument } from '@kyte/sdk';\n *\n * autoInstrument({\n * openai: true,\n * anthropic: true,\n * langchain: true\n * });\n *\n * // All subsequent SDK usage is automatically traced\n * import OpenAI from 'openai';\n * const openai = new OpenAI();\n * // Calls are now automatically traced!\n * ```\n */\nexport async function autoInstrument(config: AutoInstrumentConfig = {}): Promise<void> {\n // If patchAll is enabled, use the IntegrationRegistry to patch everything\n if (config.patchAll) {\n await IntegrationRegistry.patchAll();\n // Still apply custom instrumentations below\n if (config.custom) {\n for (const instrumentation of config.custom) {\n try {\n applyCustomInstrumentation(instrumentation);\n } catch (_e) {\n console.debug(`Failed to apply custom instrumentation: ${instrumentation.name}`);\n }\n }\n }\n return;\n }\n\n // Legacy integrations (backward compatible - explicit opt-in)\n if (config.openai) {\n try {\n createOpenAIInstrumentation();\n } catch (_e) {\n console.debug('OpenAI SDK not found, skipping instrumentation');\n }\n }\n\n if (config.anthropic) {\n try {\n createAnthropicInstrumentation();\n } catch (_e) {\n console.debug('Anthropic SDK not found, skipping instrumentation');\n }\n }\n\n if (config.langchain) {\n try {\n createLangChainInstrumentation();\n } catch (_e) {\n console.debug('LangChain not found, skipping instrumentation');\n }\n }\n\n if (config.http) {\n try {\n createHttpInstrumentation();\n } catch (_e) {\n console.debug('Failed to instrument HTTP, skipping');\n }\n }\n\n // JS-native framework integrations (default to patching if not explicitly disabled)\n if (config.langgraph !== false) {\n try {\n await patchLanggraph();\n } catch (_e) {\n console.debug('LangGraph not found, skipping instrumentation');\n }\n }\n\n if (config.openaiAgents !== false) {\n try {\n await patchOpenaiAgents();\n } catch (_e) {\n console.debug('OpenAI Agents SDK not found, skipping instrumentation');\n }\n }\n\n if (config.llamaindex !== false) {\n try {\n await patchLlamaindex();\n } catch (_e) {\n console.debug('LlamaIndex not found, skipping instrumentation');\n }\n }\n\n if (config.instructor !== false) {\n try {\n await patchInstructor();\n } catch (_e) {\n console.debug('Instructor not found, skipping instrumentation');\n }\n }\n\n if (config.semanticKernel !== false) {\n try {\n await patchSemanticKernel();\n } catch (_e) {\n console.debug('Semantic Kernel not found, skipping instrumentation');\n }\n }\n\n // Python-primary integrations (explicit opt-in only)\n if (config.crewai) {\n try {\n await patchCrewai();\n } catch (_e) {\n console.debug('CrewAI not found, skipping instrumentation');\n }\n }\n\n if (config.autogen) {\n try {\n await patchAutogen();\n } catch (_e) {\n console.debug('AutoGen not found, skipping instrumentation');\n }\n }\n\n if (config.claudeAgentSdk) {\n try {\n await patchClaudeAgentSdk();\n } catch (_e) {\n console.debug('Claude Agent SDK not found, skipping instrumentation');\n }\n }\n\n if (config.browserUse) {\n try {\n await patchBrowserUse();\n } catch (_e) {\n console.debug('Browser-Use not found, skipping instrumentation');\n }\n }\n\n if (config.dspy) {\n try {\n await patchDspy();\n } catch (_e) {\n console.debug('DSPy not found, skipping instrumentation');\n }\n }\n\n if (config.pipecat) {\n try {\n await patchPipecat();\n } catch (_e) {\n console.debug('Pipecat not found, skipping instrumentation');\n }\n }\n\n if (config.strands) {\n try {\n await patchStrands();\n } catch (_e) {\n console.debug('Strands not found, skipping instrumentation');\n }\n }\n\n if (config.googleAdk) {\n try {\n await patchGoogleAdk();\n } catch (_e) {\n console.debug('Google ADK not found, skipping instrumentation');\n }\n }\n\n // Apply custom instrumentations\n if (config.custom) {\n for (const instrumentation of config.custom) {\n try {\n applyCustomInstrumentation(instrumentation);\n } catch (_e) {\n console.debug(`Failed to apply custom instrumentation: ${instrumentation.name}`);\n }\n }\n }\n}\n\n/**\n * Disable all auto-instrumentation and restore original modules\n */\nexport function disableAutoInstrument(): void {\n // Restore original modules (legacy integrations)\n for (const [moduleName, _original] of originalModules) {\n try {\n console.debug(`Restored ${moduleName}`);\n } catch (_e) {\n console.debug(`Failed to restore ${moduleName}`);\n }\n }\n originalModules.clear();\n\n // Unpatch all new framework integrations\n const unpatchFns: Array<{ name: string; fn: () => void }> = [\n { name: 'LangGraph', fn: unpatchLanggraph },\n { name: 'CrewAI', fn: unpatchCrewai },\n { name: 'AutoGen', fn: unpatchAutogen },\n { name: 'OpenAI Agents', fn: unpatchOpenaiAgents },\n { name: 'Claude Agent SDK', fn: unpatchClaudeAgentSdk },\n { name: 'Browser-Use', fn: unpatchBrowserUse },\n { name: 'LlamaIndex', fn: unpatchLlamaindex },\n { name: 'DSPy', fn: unpatchDspy },\n { name: 'Pipecat', fn: unpatchPipecat },\n { name: 'Instructor', fn: unpatchInstructor },\n { name: 'Semantic Kernel', fn: unpatchSemanticKernel },\n { name: 'Strands', fn: unpatchStrands },\n { name: 'Google ADK', fn: unpatchGoogleAdk },\n ];\n\n for (const { name, fn } of unpatchFns) {\n try {\n fn();\n console.debug(`Unpatched ${name}`);\n } catch (_e) {\n console.debug(`Failed to unpatch ${name}`);\n }\n }\n}\n\n/**\n * Apply a custom instrumentation\n */\nfunction applyCustomInstrumentation(instrumentation: CustomInstrumentation): void {\n const module = require(instrumentation.module);\n\n for (const methodName of instrumentation.methods) {\n const original = module[methodName];\n if (typeof original === 'function') {\n module[methodName] = instrumentation.wrapper(original, methodName);\n }\n }\n}\n\n/**\n * Create a proxy wrapper that traces all method calls\n * This is the core pattern used by Langfuse\n */\nexport function createTracingProxy<T extends object>(\n target: T,\n options: {\n name?: string;\n spanType?: string;\n captureArgs?: boolean;\n captureResult?: boolean;\n } = {},\n): T {\n const handler: ProxyHandler<T> = {\n get(obj, prop, receiver) {\n const value = Reflect.get(obj, prop, receiver);\n\n // If it's a function, wrap it with tracing\n if (typeof value === 'function') {\n return createTracedFunction(value.bind(obj), {\n name: `${options.name || 'proxy'}.${String(prop)}`,\n spanType: options.spanType,\n captureArgs: options.captureArgs,\n captureResult: options.captureResult,\n });\n }\n\n // If it's an object (nested), recursively wrap\n if (value && typeof value === 'object' && !Array.isArray(value)) {\n return createTracingProxy(value, {\n ...options,\n name: `${options.name || 'proxy'}.${String(prop)}`,\n });\n }\n\n return value;\n },\n };\n\n return new Proxy(target, handler);\n}\n\n/**\n * Create a traced version of a function\n */\nfunction createTracedFunction(\n fn: Function,\n options: {\n name: string;\n spanType?: string;\n captureArgs?: boolean;\n captureResult?: boolean;\n },\n): Function {\n const { getKyte } = require('../client');\n\n return async function tracedFunction(...args: any[]) {\n let client;\n try {\n client = getKyte();\n } catch {\n // SDK not initialized, call original function\n return fn(...args);\n }\n\n const span = client\n .spanBuilder(options.name)\n .setType((options.spanType as any) || 'custom')\n .setInput(options.captureArgs !== false ? { args: sanitizeArgs(args) } : {})\n .start();\n\n try {\n const result = await fn(...args);\n\n if (options.captureResult !== false) {\n span.setOutput({ result: sanitizeResult(result) });\n }\n\n await span.end();\n return result;\n } catch (error) {\n span.setError(error as Error);\n await span.end();\n throw error;\n }\n };\n}\n\n/**\n * Sanitize function arguments for logging\n */\nfunction sanitizeArgs(args: any[]): any[] {\n return args.map((arg) => {\n if (arg === undefined) return undefined;\n if (arg === null) return null;\n if (typeof arg === 'function') return '[Function]';\n if (typeof arg === 'symbol') return arg.toString();\n if (Buffer.isBuffer(arg)) return '[Buffer]';\n if (arg instanceof Uint8Array) return '[Uint8Array]';\n\n try {\n // Test if serializable\n JSON.stringify(arg);\n return arg;\n } catch {\n return '[Non-serializable]';\n }\n });\n}\n\n/**\n * Sanitize function result for logging\n */\nfunction sanitizeResult(result: any): any {\n if (result === undefined) return undefined;\n if (result === null) return null;\n if (typeof result === 'function') return '[Function]';\n if (typeof result === 'symbol') return result.toString();\n if (Buffer.isBuffer(result)) return '[Buffer]';\n if (result instanceof Uint8Array) return '[Uint8Array]';\n\n // Handle async iterators (streaming)\n if (result && typeof result[Symbol.asyncIterator] === 'function') {\n return '[AsyncIterator/Stream]';\n }\n\n try {\n JSON.stringify(result);\n return result;\n } catch {\n return '[Non-serializable]';\n }\n}\n\n// Export utilities\nexport { createTracedFunction, sanitizeArgs, sanitizeResult };\n","/**\n * Smart Cache\n *\n * Implements stale-while-revalidate pattern with background refresh.\n * Inspired by Langfuse's sophisticated caching strategy.\n */\n\nimport type { CacheEntry, SmartCacheConfig } from './types';\n\n/**\n * Smart Cache with stale-while-revalidate and background refresh\n *\n * @example\n * ```typescript\n * const cache = new SmartCache<Prompt>({\n * ttl: 60000, // 1 minute\n * staleWhileRevalidate: true,\n * backgroundRefresh: true,\n * onRefresh: async (key) => fetchPromptFromServer(key)\n * });\n *\n * // First call fetches from server\n * const prompt1 = await cache.get('my-prompt');\n *\n * // Subsequent calls return cached value\n * const prompt2 = await cache.get('my-prompt'); // Instant!\n *\n * // After TTL expires, returns stale data while refreshing in background\n * const prompt3 = await cache.get('my-prompt'); // Returns stale, refreshes async\n * ```\n */\nexport class SmartCache<T> {\n private cache = new Map<string, CacheEntry<T>>();\n private refreshing = new Set<string>();\n private config: Required<SmartCacheConfig<T>>;\n\n constructor(config: SmartCacheConfig<T>) {\n this.config = {\n ttl: config.ttl,\n staleWhileRevalidate: config.staleWhileRevalidate ?? true,\n backgroundRefresh: config.backgroundRefresh ?? true,\n maxSize: config.maxSize ?? 1000,\n onRefresh: config.onRefresh ?? (() => Promise.reject(new Error('No refresh function'))),\n onExpire: config.onExpire ?? (() => {}),\n };\n }\n\n /**\n * Get a value from cache\n * If expired and staleWhileRevalidate is true, returns stale value while refreshing\n */\n async get(key: string, fallback?: () => Promise<T>): Promise<T | undefined> {\n const entry = this.cache.get(key);\n const now = Date.now();\n\n // Cache hit - fresh\n if (entry && entry.expiresAt > now) {\n entry.lastAccessed = now;\n return entry.value;\n }\n\n // Cache hit - stale\n if (entry && this.config.staleWhileRevalidate) {\n entry.lastAccessed = now;\n\n // Trigger background refresh if not already refreshing\n if (this.config.backgroundRefresh && !this.refreshing.has(key)) {\n this.refreshInBackground(key);\n }\n\n return entry.value;\n }\n\n // Cache miss - fetch fresh data\n const refreshFn = fallback || this.config.onRefresh;\n try {\n const value = await refreshFn(key);\n this.set(key, value);\n return value;\n } catch (error) {\n // If we have stale data, return it on error\n if (entry) {\n return entry.value;\n }\n throw error;\n }\n }\n\n /**\n * Set a value in cache\n */\n set(key: string, value: T, ttl?: number): void {\n // Enforce max size with LRU eviction\n if (this.cache.size >= this.config.maxSize) {\n this.evictLRU();\n }\n\n const now = Date.now();\n this.cache.set(key, {\n value,\n expiresAt: now + (ttl ?? this.config.ttl),\n createdAt: now,\n lastAccessed: now,\n });\n }\n\n /**\n * Delete a value from cache\n */\n delete(key: string): boolean {\n const entry = this.cache.get(key);\n if (entry) {\n this.config.onExpire(key, entry.value);\n }\n return this.cache.delete(key);\n }\n\n /**\n * Clear entire cache\n */\n clear(): void {\n for (const [key, entry] of this.cache) {\n this.config.onExpire(key, entry.value);\n }\n this.cache.clear();\n }\n\n /**\n * Check if key exists and is fresh\n */\n has(key: string): boolean {\n const entry = this.cache.get(key);\n return entry !== undefined && entry.expiresAt > Date.now();\n }\n\n /**\n * Check if key exists (even if stale)\n */\n hasStale(key: string): boolean {\n return this.cache.has(key);\n }\n\n /**\n * Get cache size\n */\n get size(): number {\n return this.cache.size;\n }\n\n /**\n * Get cache statistics\n */\n getStats(): {\n size: number;\n freshCount: number;\n staleCount: number;\n oldestEntry: number | null;\n newestEntry: number | null;\n } {\n const now = Date.now();\n let freshCount = 0;\n let staleCount = 0;\n let oldestEntry: number | null = null;\n let newestEntry: number | null = null;\n\n for (const entry of this.cache.values()) {\n if (entry.expiresAt > now) {\n freshCount++;\n } else {\n staleCount++;\n }\n\n if (oldestEntry === null || entry.createdAt < oldestEntry) {\n oldestEntry = entry.createdAt;\n }\n if (newestEntry === null || entry.createdAt > newestEntry) {\n newestEntry = entry.createdAt;\n }\n }\n\n return {\n size: this.cache.size,\n freshCount,\n staleCount,\n oldestEntry,\n newestEntry,\n };\n }\n\n /**\n * Manually trigger refresh for a key\n */\n async refresh(key: string): Promise<T> {\n const value = await this.config.onRefresh(key);\n this.set(key, value);\n return value;\n }\n\n /**\n * Refresh in background (non-blocking)\n */\n private refreshInBackground(key: string): void {\n if (this.refreshing.has(key)) return;\n\n this.refreshing.add(key);\n\n this.config\n .onRefresh(key)\n .then((value) => {\n this.set(key, value);\n })\n .catch((error) => {\n console.debug(`Background refresh failed for ${key}:`, error);\n })\n .finally(() => {\n this.refreshing.delete(key);\n });\n }\n\n /**\n * Evict least recently used entry\n */\n private evictLRU(): void {\n let oldestKey: string | null = null;\n let oldestTime = Infinity;\n\n for (const [key, entry] of this.cache) {\n if (entry.lastAccessed < oldestTime) {\n oldestTime = entry.lastAccessed;\n oldestKey = key;\n }\n }\n\n if (oldestKey) {\n this.delete(oldestKey);\n }\n }\n\n /**\n * Prune expired entries\n */\n prune(): number {\n const now = Date.now();\n let pruned = 0;\n\n for (const [key, entry] of this.cache) {\n if (entry.expiresAt < now) {\n this.delete(key);\n pruned++;\n }\n }\n\n return pruned;\n }\n\n /**\n * Get all keys\n */\n keys(): string[] {\n return [...this.cache.keys()];\n }\n\n /**\n * Get all entries (for serialization)\n */\n entries(): Array<[string, CacheEntry<T>]> {\n return [...this.cache.entries()];\n }\n\n /**\n * Restore cache from serialized data\n */\n restore(entries: Array<[string, CacheEntry<T>]>): void {\n for (const [key, entry] of entries) {\n this.cache.set(key, entry);\n }\n }\n}\n\n/**\n * Create a smart cache with default settings\n */\nexport function createSmartCache<T>(options: SmartCacheConfig<T>): SmartCache<T> {\n return new SmartCache(options);\n}\n\n/**\n * Create a prompt cache with sensible defaults\n */\nexport function createPromptCache<T>(\n onRefresh: (promptName: string) => Promise<T>,\n ttl = 60000,\n): SmartCache<T> {\n return new SmartCache({\n ttl,\n staleWhileRevalidate: true,\n backgroundRefresh: true,\n maxSize: 100,\n onRefresh,\n });\n}\n","/**\n * Annotations Client\n *\n * Human feedback and corrections on traces and spans.\n */\n\nimport { getKyte } from '../client';\nimport type { Annotation, AnnotationType, CreateAnnotationRequest } from '../types';\n\n/**\n * Annotations API Client\n *\n * @example\n * ```typescript\n * import { AnnotationsClient } from '@kyte/sdk';\n *\n * const annotations = new AnnotationsClient();\n *\n * // Create a correction annotation\n * await annotations.create({\n * traceId: 'trace_123',\n * type: 'correction',\n * value: 'The correct answer should be 42',\n * annotatorId: 'user@example.com'\n * });\n *\n * // List all annotations for a trace\n * const items = await annotations.list({ traceId: 'trace_123' });\n * ```\n */\nexport class AnnotationsClient {\n private baseUrl: string;\n private apiKey: string;\n\n constructor() {\n const client = getKyte();\n // Access config through client (would need to expose this)\n this.baseUrl = (client as any).config?.apiUrl || '';\n this.apiKey = (client as any).config?.apiKey || '';\n }\n\n /**\n * Create a new annotation\n */\n async create(request: CreateAnnotationRequest): Promise<Annotation> {\n const response = await fetch(`${this.baseUrl}/annotations`, {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json',\n 'X-API-Key': this.apiKey,\n },\n body: JSON.stringify(request),\n });\n\n if (!response.ok) {\n throw new Error(`Failed to create annotation: ${response.statusText}`);\n }\n\n return response.json();\n }\n\n /**\n * Get annotation by ID\n */\n async get(annotationId: string): Promise<Annotation> {\n const response = await fetch(`${this.baseUrl}/annotations/${annotationId}`, {\n headers: {\n 'X-API-Key': this.apiKey,\n },\n });\n\n if (!response.ok) {\n throw new Error(`Failed to get annotation: ${response.statusText}`);\n }\n\n return response.json();\n }\n\n /**\n * List annotations\n */\n async list(filters?: {\n traceId?: string;\n spanId?: string;\n type?: AnnotationType;\n annotatorId?: string;\n limit?: number;\n offset?: number;\n }): Promise<{ annotations: Annotation[]; total: number }> {\n const params = new URLSearchParams();\n if (filters?.traceId) params.set('traceId', filters.traceId);\n if (filters?.spanId) params.set('spanId', filters.spanId);\n if (filters?.type) params.set('type', filters.type);\n if (filters?.annotatorId) params.set('annotatorId', filters.annotatorId);\n if (filters?.limit) params.set('limit', String(filters.limit));\n if (filters?.offset) params.set('offset', String(filters.offset));\n\n const response = await fetch(`${this.baseUrl}/annotations?${params}`, {\n headers: {\n 'X-API-Key': this.apiKey,\n },\n });\n\n if (!response.ok) {\n throw new Error(`Failed to list annotations: ${response.statusText}`);\n }\n\n return response.json();\n }\n\n /**\n * Update an annotation\n */\n async update(\n annotationId: string,\n updates: Partial<Pick<Annotation, 'value' | 'comment' | 'metadata'>>,\n ): Promise<Annotation> {\n const response = await fetch(`${this.baseUrl}/annotations/${annotationId}`, {\n method: 'PATCH',\n headers: {\n 'Content-Type': 'application/json',\n 'X-API-Key': this.apiKey,\n },\n body: JSON.stringify(updates),\n });\n\n if (!response.ok) {\n throw new Error(`Failed to update annotation: ${response.statusText}`);\n }\n\n return response.json();\n }\n\n /**\n * Delete an annotation\n */\n async delete(annotationId: string): Promise<void> {\n const response = await fetch(`${this.baseUrl}/annotations/${annotationId}`, {\n method: 'DELETE',\n headers: {\n 'X-API-Key': this.apiKey,\n },\n });\n\n if (!response.ok) {\n throw new Error(`Failed to delete annotation: ${response.statusText}`);\n }\n }\n\n // ============================================================================\n // Convenience Methods\n // ============================================================================\n\n /**\n * Add a correction to a trace\n */\n async addCorrection(\n traceId: string,\n correction: string,\n options?: {\n spanId?: string;\n annotatorId?: string;\n metadata?: Record<string, any>;\n },\n ): Promise<Annotation> {\n return this.create({\n traceId,\n spanId: options?.spanId,\n type: 'correction',\n value: correction,\n annotatorId: options?.annotatorId,\n metadata: options?.metadata,\n });\n }\n\n /**\n * Approve a trace/span\n */\n async approve(\n traceId: string,\n options?: {\n spanId?: string;\n comment?: string;\n annotatorId?: string;\n },\n ): Promise<Annotation> {\n return this.create({\n traceId,\n spanId: options?.spanId,\n type: 'approval',\n value: true,\n comment: options?.comment,\n annotatorId: options?.annotatorId,\n });\n }\n\n /**\n * Reject a trace/span\n */\n async reject(\n traceId: string,\n reason: string,\n options?: {\n spanId?: string;\n annotatorId?: string;\n },\n ): Promise<Annotation> {\n return this.create({\n traceId,\n spanId: options?.spanId,\n type: 'rejection',\n value: false,\n comment: reason,\n annotatorId: options?.annotatorId,\n });\n }\n\n /**\n * Add a comment to a trace\n */\n async addComment(\n traceId: string,\n comment: string,\n options?: {\n spanId?: string;\n annotatorId?: string;\n metadata?: Record<string, any>;\n },\n ): Promise<Annotation> {\n return this.create({\n traceId,\n spanId: options?.spanId,\n type: 'comment',\n value: comment,\n annotatorId: options?.annotatorId,\n metadata: options?.metadata,\n });\n }\n\n /**\n * Add a label to a trace\n */\n async addLabel(\n traceId: string,\n label: string,\n options?: {\n spanId?: string;\n annotatorId?: string;\n metadata?: Record<string, any>;\n },\n ): Promise<Annotation> {\n return this.create({\n traceId,\n spanId: options?.spanId,\n type: 'label',\n value: label,\n annotatorId: options?.annotatorId,\n metadata: options?.metadata,\n });\n }\n\n /**\n * Add a numeric score annotation\n */\n async addScore(\n traceId: string,\n score: number,\n options?: {\n spanId?: string;\n comment?: string;\n annotatorId?: string;\n metadata?: Record<string, any>;\n },\n ): Promise<Annotation> {\n return this.create({\n traceId,\n spanId: options?.spanId,\n type: 'score',\n value: score,\n comment: options?.comment,\n annotatorId: options?.annotatorId,\n metadata: options?.metadata,\n });\n }\n\n /**\n * Add thumbs up/down annotation\n */\n async addThumbs(\n traceId: string,\n thumbs: 'up' | 'down',\n options?: {\n spanId?: string;\n comment?: string;\n annotatorId?: string;\n },\n ): Promise<Annotation> {\n return this.create({\n traceId,\n spanId: options?.spanId,\n type: 'thumbs',\n value: thumbs,\n comment: options?.comment,\n annotatorId: options?.annotatorId,\n });\n }\n\n /**\n * Get annotation statistics for a trace\n */\n async getStats(traceId: string): Promise<{\n total: number;\n byType: Record<AnnotationType, number>;\n approvalRate: number | null;\n averageScore: number | null;\n }> {\n const { annotations } = await this.list({ traceId, limit: 1000 });\n\n const byType: Record<AnnotationType, number> = {\n correction: 0,\n approval: 0,\n rejection: 0,\n comment: 0,\n label: 0,\n score: 0,\n thumbs: 0,\n };\n\n let approvals = 0;\n let rejections = 0;\n let scoreSum = 0;\n let scoreCount = 0;\n\n for (const annotation of annotations) {\n byType[annotation.type]++;\n\n if (annotation.type === 'approval') approvals++;\n if (annotation.type === 'rejection') rejections++;\n if (annotation.type === 'score' && typeof annotation.value === 'number') {\n scoreSum += annotation.value;\n scoreCount++;\n }\n }\n\n const totalVotes = approvals + rejections;\n\n return {\n total: annotations.length,\n byType,\n approvalRate: totalVotes > 0 ? approvals / totalVotes : null,\n averageScore: scoreCount > 0 ? scoreSum / scoreCount : null,\n };\n }\n}\n\n/**\n * Create an annotations client\n */\nexport function createAnnotationsClient(): AnnotationsClient {\n return new AnnotationsClient();\n}\n","/**\n * Feedback Client\n *\n * Structured feedback collection with rating scales, categories, and analytics.\n */\n\nimport { getKyte } from '../client';\nimport type { CreateFeedbackRequest, Feedback, FeedbackStats, FeedbackType } from '../types';\n\n/**\n * Feedback API Client\n *\n * @example\n * ```typescript\n * import { FeedbackClient } from '@kyte/sdk';\n *\n * const feedback = new FeedbackClient();\n *\n * // Simple thumbs up/down\n * await feedback.thumbsUp('trace_123', { userId: 'user_456' });\n *\n * // Detailed rating\n * await feedback.rating('trace_123', 4, {\n * scale: [1, 5],\n * comment: 'Good response but could be more detailed',\n * userId: 'user_456'\n * });\n *\n * // Get feedback stats\n * const stats = await feedback.getStats({ traceIds: ['trace_123'] });\n * ```\n */\nexport class FeedbackClient {\n private baseUrl: string;\n private apiKey: string;\n\n constructor() {\n const client = getKyte();\n this.baseUrl = (client as any).config?.apiUrl || '';\n this.apiKey = (client as any).config?.apiKey || '';\n }\n\n /**\n * Create feedback\n */\n async create(request: CreateFeedbackRequest): Promise<Feedback> {\n const response = await fetch(`${this.baseUrl}/feedback`, {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json',\n 'X-API-Key': this.apiKey,\n },\n body: JSON.stringify(request),\n });\n\n if (!response.ok) {\n throw new Error(`Failed to create feedback: ${response.statusText}`);\n }\n\n return response.json();\n }\n\n /**\n * Get feedback by ID\n */\n async get(feedbackId: string): Promise<Feedback> {\n const response = await fetch(`${this.baseUrl}/feedback/${feedbackId}`, {\n headers: {\n 'X-API-Key': this.apiKey,\n },\n });\n\n if (!response.ok) {\n throw new Error(`Failed to get feedback: ${response.statusText}`);\n }\n\n return response.json();\n }\n\n /**\n * List feedback\n */\n async list(filters?: {\n traceId?: string;\n spanId?: string;\n type?: FeedbackType;\n userId?: string;\n limit?: number;\n offset?: number;\n }): Promise<{ feedback: Feedback[]; total: number }> {\n const params = new URLSearchParams();\n if (filters?.traceId) params.set('traceId', filters.traceId);\n if (filters?.spanId) params.set('spanId', filters.spanId);\n if (filters?.type) params.set('type', filters.type);\n if (filters?.userId) params.set('userId', filters.userId);\n if (filters?.limit) params.set('limit', String(filters.limit));\n if (filters?.offset) params.set('offset', String(filters.offset));\n\n const response = await fetch(`${this.baseUrl}/feedback?${params}`, {\n headers: {\n 'X-API-Key': this.apiKey,\n },\n });\n\n if (!response.ok) {\n throw new Error(`Failed to list feedback: ${response.statusText}`);\n }\n\n return response.json();\n }\n\n /**\n * Delete feedback\n */\n async delete(feedbackId: string): Promise<void> {\n const response = await fetch(`${this.baseUrl}/feedback/${feedbackId}`, {\n method: 'DELETE',\n headers: {\n 'X-API-Key': this.apiKey,\n },\n });\n\n if (!response.ok) {\n throw new Error(`Failed to delete feedback: ${response.statusText}`);\n }\n }\n\n // ============================================================================\n // Convenience Methods\n // ============================================================================\n\n /**\n * Add thumbs up feedback\n */\n async thumbsUp(\n traceId: string,\n options?: {\n spanId?: string;\n comment?: string;\n userId?: string;\n metadata?: Record<string, any>;\n },\n ): Promise<Feedback> {\n return this.create({\n traceId,\n spanId: options?.spanId,\n type: 'thumbs',\n value: 'up',\n comment: options?.comment,\n userId: options?.userId,\n metadata: options?.metadata,\n });\n }\n\n /**\n * Add thumbs down feedback\n */\n async thumbsDown(\n traceId: string,\n options?: {\n spanId?: string;\n comment?: string;\n userId?: string;\n metadata?: Record<string, any>;\n },\n ): Promise<Feedback> {\n return this.create({\n traceId,\n spanId: options?.spanId,\n type: 'thumbs',\n value: 'down',\n comment: options?.comment,\n userId: options?.userId,\n metadata: options?.metadata,\n });\n }\n\n /**\n * Add rating feedback\n */\n async rating(\n traceId: string,\n value: number,\n options?: {\n spanId?: string;\n scale?: [number, number];\n comment?: string;\n userId?: string;\n metadata?: Record<string, any>;\n },\n ): Promise<Feedback> {\n return this.create({\n traceId,\n spanId: options?.spanId,\n type: 'rating',\n value,\n scale: options?.scale || [1, 5],\n comment: options?.comment,\n userId: options?.userId,\n metadata: options?.metadata,\n });\n }\n\n /**\n * Add categorical feedback\n */\n async categorical(\n traceId: string,\n category: string,\n options?: {\n spanId?: string;\n categories?: string[];\n comment?: string;\n userId?: string;\n metadata?: Record<string, any>;\n },\n ): Promise<Feedback> {\n return this.create({\n traceId,\n spanId: options?.spanId,\n type: 'categorical',\n value: category,\n categories: options?.categories,\n comment: options?.comment,\n userId: options?.userId,\n metadata: options?.metadata,\n });\n }\n\n /**\n * Add text feedback\n */\n async text(\n traceId: string,\n text: string,\n options?: {\n spanId?: string;\n userId?: string;\n metadata?: Record<string, any>;\n },\n ): Promise<Feedback> {\n return this.create({\n traceId,\n spanId: options?.spanId,\n type: 'text',\n value: text,\n userId: options?.userId,\n metadata: options?.metadata,\n });\n }\n\n /**\n * Get feedback statistics\n */\n async getStats(filters: {\n traceIds?: string[];\n spanIds?: string[];\n userId?: string;\n startDate?: Date;\n endDate?: Date;\n groupBy?: 'day' | 'week' | 'month';\n }): Promise<FeedbackStats> {\n const params = new URLSearchParams();\n if (filters.traceIds) params.set('traceIds', filters.traceIds.join(','));\n if (filters.spanIds) params.set('spanIds', filters.spanIds.join(','));\n if (filters.userId) params.set('userId', filters.userId);\n if (filters.startDate) params.set('startDate', filters.startDate.toISOString());\n if (filters.endDate) params.set('endDate', filters.endDate.toISOString());\n if (filters.groupBy) params.set('groupBy', filters.groupBy);\n\n const response = await fetch(`${this.baseUrl}/feedback/stats?${params}`, {\n headers: {\n 'X-API-Key': this.apiKey,\n },\n });\n\n if (!response.ok) {\n throw new Error(`Failed to get feedback stats: ${response.statusText}`);\n }\n\n return response.json();\n }\n\n /**\n * Calculate local statistics from feedback list\n */\n calculateStats(feedbackList: Feedback[]): FeedbackStats {\n let thumbsUp = 0;\n let thumbsDown = 0;\n let ratingSum = 0;\n let ratingCount = 0;\n const categoryBreakdown: Record<string, number> = {};\n\n for (const fb of feedbackList) {\n if (fb.type === 'thumbs') {\n if (fb.value === 'up') thumbsUp++;\n if (fb.value === 'down') thumbsDown++;\n }\n\n if (fb.type === 'rating' && typeof fb.value === 'number') {\n ratingSum += fb.value;\n ratingCount++;\n }\n\n if (fb.type === 'categorical' && typeof fb.value === 'string') {\n categoryBreakdown[fb.value] = (categoryBreakdown[fb.value] || 0) + 1;\n }\n }\n\n return {\n totalCount: feedbackList.length,\n thumbsUp,\n thumbsDown,\n averageRating: ratingCount > 0 ? ratingSum / ratingCount : undefined,\n categoryBreakdown: Object.keys(categoryBreakdown).length > 0 ? categoryBreakdown : undefined,\n };\n }\n}\n\n/**\n * Create a feedback client\n */\nexport function createFeedbackClient(): FeedbackClient {\n return new FeedbackClient();\n}\n\n/**\n * Feedback Collector - Higher-level abstraction for collecting feedback\n *\n * @example\n * ```typescript\n * const collector = new FeedbackCollector({\n * traceId: 'trace_123',\n * userId: 'user_456'\n * });\n *\n * // Collect feedback at end of conversation\n * await collector.collectRating(4, 'Good response!');\n * ```\n */\nexport class FeedbackCollector {\n private client: FeedbackClient;\n private traceId: string;\n private spanId?: string;\n private userId?: string;\n private sessionId?: string;\n\n constructor(options: {\n traceId: string;\n spanId?: string;\n userId?: string;\n sessionId?: string;\n }) {\n this.client = new FeedbackClient();\n this.traceId = options.traceId;\n this.spanId = options.spanId;\n this.userId = options.userId;\n this.sessionId = options.sessionId;\n }\n\n async collectThumbsUp(comment?: string): Promise<Feedback> {\n return this.client.thumbsUp(this.traceId, {\n spanId: this.spanId,\n comment,\n userId: this.userId,\n metadata: { sessionId: this.sessionId },\n });\n }\n\n async collectThumbsDown(comment?: string): Promise<Feedback> {\n return this.client.thumbsDown(this.traceId, {\n spanId: this.spanId,\n comment,\n userId: this.userId,\n metadata: { sessionId: this.sessionId },\n });\n }\n\n async collectRating(value: number, comment?: string): Promise<Feedback> {\n return this.client.rating(this.traceId, value, {\n spanId: this.spanId,\n comment,\n userId: this.userId,\n metadata: { sessionId: this.sessionId },\n });\n }\n\n async collectCategory(category: string, comment?: string): Promise<Feedback> {\n return this.client.categorical(this.traceId, category, {\n spanId: this.spanId,\n comment,\n userId: this.userId,\n metadata: { sessionId: this.sessionId },\n });\n }\n\n async collectText(text: string): Promise<Feedback> {\n return this.client.text(this.traceId, text, {\n spanId: this.spanId,\n userId: this.userId,\n metadata: { sessionId: this.sessionId },\n });\n }\n}\n\n/**\n * Create a feedback collector\n */\nexport function createFeedbackCollector(options: {\n traceId: string;\n spanId?: string;\n userId?: string;\n sessionId?: string;\n}): FeedbackCollector {\n return new FeedbackCollector(options);\n}\n","/**\n * Media Handling\n *\n * Base64 extraction, SHA256 deduplication, and media upload.\n * Inspired by Langfuse's media handling capabilities.\n */\n\nimport { getKyte } from '../client';\nimport type { MediaReference, ProcessedMedia } from '../types';\nimport { uuidv7 } from '../utils/uuid';\n\n/**\n * Media Manager for handling multimodal content\n *\n * @example\n * ```typescript\n * import { MediaManager } from '@kyte/sdk';\n *\n * const media = new MediaManager();\n *\n * // Process messages with images\n * const processed = await media.processMessages(messages);\n *\n * // Upload media with deduplication\n * const ref = await media.upload(base64Data, 'image/png');\n * ```\n */\nexport class MediaManager {\n private baseUrl: string;\n private apiKey: string;\n private uploadedHashes = new Map<string, MediaReference>();\n\n constructor() {\n try {\n const client = getKyte();\n this.baseUrl = (client as any).config?.apiUrl || '';\n this.apiKey = (client as any).config?.apiKey || '';\n } catch {\n this.baseUrl = '';\n this.apiKey = '';\n }\n }\n\n /**\n * Process messages and extract media\n */\n async processMessages(messages: any[]): Promise<ProcessedMedia> {\n const mediaRefs: MediaReference[] = [];\n const processedMessages = [];\n\n for (const message of messages) {\n const processed = await this.processMessage(message, mediaRefs);\n processedMessages.push(processed);\n }\n\n return {\n messages: processedMessages,\n mediaRefs,\n };\n }\n\n /**\n * Process a single message\n */\n private async processMessage(message: any, mediaRefs: MediaReference[]): Promise<any> {\n if (!message || typeof message !== 'object') {\n return message;\n }\n\n // Handle OpenAI format with content array\n if (Array.isArray(message.content)) {\n const processedContent = [];\n for (const part of message.content) {\n if (part.type === 'image_url' && part.image_url?.url) {\n const url = part.image_url.url;\n if (url.startsWith('data:')) {\n const ref = await this.processBase64Url(url);\n if (ref) {\n mediaRefs.push(ref);\n processedContent.push({\n type: 'image_url',\n image_url: { url: `media://${ref.id}` },\n });\n continue;\n }\n }\n }\n processedContent.push(part);\n }\n return { ...message, content: processedContent };\n }\n\n // Handle Anthropic format with source\n if (message.type === 'image' && message.source?.type === 'base64') {\n const ref = await this.processBase64Source(message.source);\n if (ref) {\n mediaRefs.push(ref);\n return {\n type: 'image',\n source: { type: 'media_ref', id: ref.id },\n };\n }\n }\n\n return message;\n }\n\n /**\n * Process a data URL (data:image/png;base64,...)\n */\n private async processBase64Url(dataUrl: string): Promise<MediaReference | null> {\n const match = dataUrl.match(/^data:([^;]+);base64,(.+)$/);\n if (!match) return null;\n\n const mimeType = match[1];\n const base64Data = match[2];\n\n return this.upload(base64Data, mimeType);\n }\n\n /**\n * Process Anthropic-style base64 source\n */\n private async processBase64Source(source: {\n type: string;\n media_type: string;\n data: string;\n }): Promise<MediaReference | null> {\n return this.upload(source.data, source.media_type);\n }\n\n /**\n * Upload media with deduplication\n */\n async upload(base64Data: string, mimeType: string): Promise<MediaReference> {\n // Calculate SHA256 hash for deduplication\n const hash = await this.calculateHash(base64Data);\n\n // Check if already uploaded\n const existing = this.uploadedHashes.get(hash);\n if (existing) {\n return existing;\n }\n\n // Calculate size\n const size = Math.ceil((base64Data.length * 3) / 4);\n\n // Create reference\n const ref: MediaReference = {\n id: uuidv7(),\n hash,\n mimeType,\n size,\n createdAt: new Date().toISOString(),\n };\n\n // Upload to backend\n try {\n const response = await fetch(`${this.baseUrl}/media`, {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json',\n 'X-API-Key': this.apiKey,\n },\n body: JSON.stringify({\n id: ref.id,\n hash,\n mimeType,\n size,\n data: base64Data,\n }),\n });\n\n if (response.ok) {\n const result = await response.json();\n ref.url = result.url;\n }\n } catch (error) {\n console.debug('Failed to upload media:', error);\n }\n\n // Cache the reference\n this.uploadedHashes.set(hash, ref);\n\n return ref;\n }\n\n /**\n * Calculate SHA256 hash of base64 data\n */\n private async calculateHash(base64Data: string): Promise<string> {\n // Use Web Crypto API if available\n if (typeof crypto !== 'undefined' && crypto.subtle) {\n const data = Uint8Array.from(atob(base64Data), (c) => c.charCodeAt(0));\n const hashBuffer = await crypto.subtle.digest('SHA-256', data);\n const hashArray = Array.from(new Uint8Array(hashBuffer));\n return hashArray.map((b) => b.toString(16).padStart(2, '0')).join('');\n }\n\n // Fallback: use Node.js crypto\n try {\n const crypto = require('node:crypto');\n const buffer = Buffer.from(base64Data, 'base64');\n return crypto.createHash('sha256').update(buffer).digest('hex');\n } catch {\n // Last resort: simple hash\n let hash = 0;\n for (let i = 0; i < base64Data.length; i++) {\n const char = base64Data.charCodeAt(i);\n hash = (hash << 5) - hash + char;\n hash = hash & hash;\n }\n return Math.abs(hash).toString(16);\n }\n }\n\n /**\n * Get media by ID\n */\n async get(mediaId: string): Promise<MediaReference | null> {\n try {\n const response = await fetch(`${this.baseUrl}/media/${mediaId}`, {\n headers: {\n 'X-API-Key': this.apiKey,\n },\n });\n\n if (!response.ok) return null;\n return response.json();\n } catch {\n return null;\n }\n }\n\n /**\n * Resolve media references in an object\n */\n async resolveReferences(\n obj: any,\n options: {\n mode?: 'url' | 'base64DataUri';\n maxTraversalDepth?: number;\n } = {},\n ): Promise<any> {\n const { mode = 'url', maxTraversalDepth = 10 } = options;\n\n return this.traverseAndResolve(obj, mode, 0, maxTraversalDepth);\n }\n\n /**\n * Recursively traverse and resolve media references\n */\n private async traverseAndResolve(\n obj: any,\n mode: 'url' | 'base64DataUri',\n depth: number,\n maxDepth: number,\n ): Promise<any> {\n if (depth >= maxDepth) return obj;\n if (!obj || typeof obj !== 'object') return obj;\n\n if (Array.isArray(obj)) {\n return Promise.all(\n obj.map((item) => this.traverseAndResolve(item, mode, depth + 1, maxDepth)),\n );\n }\n\n // Check for media reference\n if (obj.type === 'media_ref' && obj.id) {\n const media = await this.get(obj.id);\n if (media?.url) {\n return mode === 'url' ? media.url : await this.urlToDataUri(media.url);\n }\n return obj;\n }\n\n // Check for media:// URL\n if (typeof obj === 'string' && obj.startsWith('media://')) {\n const mediaId = obj.slice(8);\n const media = await this.get(mediaId);\n if (media?.url) {\n return mode === 'url' ? media.url : await this.urlToDataUri(media.url);\n }\n return obj;\n }\n\n // Recursively process object properties\n const result: any = {};\n for (const [key, value] of Object.entries(obj)) {\n result[key] = await this.traverseAndResolve(value, mode, depth + 1, maxDepth);\n }\n return result;\n }\n\n /**\n * Convert URL to data URI\n */\n private async urlToDataUri(url: string): Promise<string> {\n try {\n const response = await fetch(url);\n const blob = await response.blob();\n const buffer = await blob.arrayBuffer();\n const base64 = Buffer.from(buffer).toString('base64');\n return `data:${blob.type};base64,${base64}`;\n } catch {\n return url;\n }\n }\n\n /**\n * Clear the hash cache\n */\n clearCache(): void {\n this.uploadedHashes.clear();\n }\n\n /**\n * Get cache statistics\n */\n getCacheStats(): { size: number; totalBytes: number } {\n let totalBytes = 0;\n for (const ref of this.uploadedHashes.values()) {\n totalBytes += ref.size;\n }\n return {\n size: this.uploadedHashes.size,\n totalBytes,\n };\n }\n}\n\n/**\n * Create a media manager\n */\nexport function createMediaManager(): MediaManager {\n return new MediaManager();\n}\n\n/**\n * Extract base64 data from a data URL\n */\nexport function extractBase64FromDataUrl(dataUrl: string): {\n mimeType: string;\n data: string;\n} | null {\n const match = dataUrl.match(/^data:([^;]+);base64,(.+)$/);\n if (!match) return null;\n return {\n mimeType: match[1],\n data: match[2],\n };\n}\n\n/**\n * Create a data URL from base64 data\n */\nexport function createDataUrl(base64Data: string, mimeType: string): string {\n return `data:${mimeType};base64,${base64Data}`;\n}\n\n/**\n * Check if a string is a valid data URL\n */\nexport function isDataUrl(str: string): boolean {\n return /^data:[^;]+;base64,.+$/.test(str);\n}\n\n/**\n * Get file extension from MIME type\n */\nexport function mimeToExtension(mimeType: string): string {\n const map: Record<string, string> = {\n 'image/jpeg': 'jpg',\n 'image/png': 'png',\n 'image/gif': 'gif',\n 'image/webp': 'webp',\n 'image/svg+xml': 'svg',\n 'audio/mpeg': 'mp3',\n 'audio/wav': 'wav',\n 'audio/ogg': 'ogg',\n 'video/mp4': 'mp4',\n 'video/webm': 'webm',\n 'application/pdf': 'pdf',\n };\n return map[mimeType] || 'bin';\n}\n","import type { AgentResult, Message, UsageInfo } from './agent-types';\n\ninterface AgentResultOptions<T> {\n data: T;\n usage: UsageInfo;\n messages: Message[];\n traceId: string;\n durationMs: number;\n toolCalls: number;\n retries: number;\n}\n\nexport class AgentResultImpl<T = string> implements AgentResult<T> {\n data: T;\n usage: UsageInfo;\n messages: Message[];\n traceId: string;\n durationMs: number;\n toolCalls: number;\n retries: number;\n\n constructor(options: AgentResultOptions<T>) {\n this.data = options.data;\n this.usage = options.usage;\n this.messages = options.messages;\n this.traceId = options.traceId;\n this.durationMs = options.durationMs;\n this.toolCalls = options.toolCalls;\n this.retries = options.retries;\n }\n\n allMessages(): Message[] {\n return [...this.messages];\n }\n\n withToolReturnContent(): Message[] {\n return this.messages.filter((msg) => msg.role === 'tool' || msg.role === 'assistant');\n }\n}\n","import type { ApiMessage, Message, RunContext } from './agent-types';\n\ninterface RunContextOptions<T> {\n deps: T;\n model: string;\n traceId: string;\n spanId: string;\n messages?: Message[];\n retryCount?: number;\n maxRetries?: number;\n}\n\nexport class RunContextImpl<T = unknown> implements RunContext<T> {\n deps: T;\n model: string;\n messages: Message[];\n traceId: string;\n spanId: string;\n retryCount: number;\n maxRetries: number;\n\n constructor(options: RunContextOptions<T>) {\n this.deps = options.deps;\n this.model = options.model;\n this.traceId = options.traceId;\n this.spanId = options.spanId;\n this.messages = options.messages ? [...options.messages] : [];\n this.retryCount = options.retryCount ?? 0;\n this.maxRetries = options.maxRetries ?? 3;\n }\n\n get isLastAttempt(): boolean {\n return this.retryCount >= this.maxRetries;\n }\n\n addMessage(msg: Message): void {\n this.messages.push({ ...msg, timestamp: msg.timestamp ?? new Date().toISOString() });\n }\n\n addUserMessage(content: string): void {\n this.addMessage({ role: 'user', content });\n }\n\n addAssistantMessage(content: string): void {\n this.addMessage({ role: 'assistant', content });\n }\n\n getMessagesForApi(): ApiMessage[] {\n return this.messages.map((msg) => {\n const apiMsg: ApiMessage = { role: msg.role, content: msg.content };\n if (msg.toolCallId) apiMsg.tool_call_id = msg.toolCallId;\n if (msg.toolCalls) {\n apiMsg.tool_calls = msg.toolCalls.map((tc) => ({\n id: tc.id,\n type: 'function' as const,\n function: { name: tc.name, arguments: JSON.stringify(tc.arguments) },\n }));\n }\n return apiMsg;\n });\n }\n\n withRetry(): RunContext<T> {\n return new RunContextImpl<T>({\n deps: this.deps,\n model: this.model,\n traceId: this.traceId,\n spanId: this.spanId,\n messages: this.messages,\n retryCount: this.retryCount + 1,\n maxRetries: this.maxRetries,\n });\n }\n}\n","import type {\n AgentResult,\n InputGuardrail,\n Message,\n ModelSettings,\n OutputGuardrail,\n ToolCall,\n ToolDefinition,\n UsageInfo,\n} from './agent-types';\nimport { GuardrailError, ModelRetry, ProviderError } from './exceptions';\nimport { AgentResultImpl } from './result';\nimport { RunContextImpl } from './run-context';\nimport { uuidv7 } from './utils/uuid';\n\nexport function parseModelString(modelString: string): { provider: string; model: string } {\n const colonIndex = modelString.indexOf(':');\n if (colonIndex === -1) {\n return { provider: 'openai', model: modelString };\n }\n return {\n provider: modelString.slice(0, colonIndex),\n model: modelString.slice(colonIndex + 1),\n };\n}\n\nexport interface ProviderAdapter {\n chat(params: {\n model: string;\n messages: Array<{ role: string; content: string; tool_call_id?: string; tool_calls?: any[] }>;\n tools?: any[];\n settings?: ModelSettings;\n outputSchema?: any;\n }): Promise<{\n content: string;\n toolCalls?: ToolCall[];\n usage: { promptTokens: number; completionTokens: number; totalTokens: number };\n finishReason: 'stop' | 'tool_calls' | 'length' | 'error';\n }>;\n}\n\nexport class Runner {\n private adapters: Map<string, ProviderAdapter> = new Map();\n\n registerAdapter(provider: string, adapter: ProviderAdapter): void {\n this.adapters.set(provider, adapter);\n }\n\n getAdapter(provider: string): ProviderAdapter | undefined {\n return this.adapters.get(provider);\n }\n\n async run<TContext, TOutput>(params: {\n model: string;\n systemPrompt?: string;\n prompt: string;\n tools?: ToolDefinition[];\n outputType?: any;\n modelSettings?: ModelSettings;\n deps?: TContext;\n messageHistory?: Message[];\n inputGuardrails?: InputGuardrail[];\n outputGuardrails?: OutputGuardrail[];\n maxRetries?: number;\n maxTurns?: number;\n onToolCall?: (name: string, args: Record<string, unknown>) => void;\n onToolResult?: (name: string, result: unknown) => void;\n }): Promise<AgentResult<TOutput>> {\n const { provider, model } = parseModelString(params.model);\n const adapter = this.adapters.get(provider);\n if (!adapter) {\n throw new ProviderError(\n `No adapter registered for provider \"${provider}\". Call runner.registerAdapter() first.`,\n provider,\n );\n }\n\n const traceId = uuidv7();\n const spanId = uuidv7();\n const startTime = Date.now();\n const maxTurns = params.maxTurns ?? 10;\n const maxRetries = params.maxRetries ?? 3;\n\n const ctx = new RunContextImpl<TContext>({\n deps: params.deps as TContext,\n model: params.model,\n traceId,\n spanId,\n messages: params.messageHistory ?? [],\n maxRetries,\n });\n\n if (params.systemPrompt) {\n ctx.addMessage({ role: 'system', content: params.systemPrompt });\n }\n ctx.addUserMessage(params.prompt);\n\n // Input guardrails\n if (params.inputGuardrails) {\n for (const guard of params.inputGuardrails) {\n const result = await guard.execute(params.prompt, {\n traceId,\n spanId,\n durationMs: 0,\n model: params.model,\n metadata: {},\n });\n if (result.action !== 'pass') {\n throw new GuardrailError(`Input guardrail \"${guard.name}\" triggered: ${result.message}`);\n }\n }\n }\n\n const toolMap = new Map<string, ToolDefinition>();\n for (const t of params.tools ?? []) toolMap.set(t.name, t);\n const toolSchemas = params.tools?.map((t) => t.toOpenAITool());\n\n const totalUsage: UsageInfo = {\n requestTokens: 0,\n responseTokens: 0,\n totalTokens: 0,\n costUsd: 0,\n model,\n };\n let toolCallCount = 0;\n let retryCount = 0;\n let lastContent = '';\n\n for (let turn = 0; turn < maxTurns; turn++) {\n const response = await adapter.chat({\n model,\n messages: ctx.getMessagesForApi(),\n tools: toolSchemas?.length ? toolSchemas : undefined,\n settings: params.modelSettings,\n outputSchema: params.outputType,\n });\n\n totalUsage.requestTokens += response.usage.promptTokens;\n totalUsage.responseTokens += response.usage.completionTokens;\n totalUsage.totalTokens += response.usage.totalTokens;\n lastContent = response.content;\n\n if (response.finishReason === 'tool_calls' && response.toolCalls) {\n ctx.addMessage({\n role: 'assistant',\n content: response.content || '',\n toolCalls: response.toolCalls,\n });\n\n for (const tc of response.toolCalls) {\n const toolDef = toolMap.get(tc.name);\n if (!toolDef) {\n ctx.addMessage({\n role: 'tool',\n content: `Error: Unknown tool \"${tc.name}\"`,\n toolCallId: tc.id,\n });\n continue;\n }\n toolCallCount++;\n params.onToolCall?.(tc.name, tc.arguments);\n try {\n const result = await toolDef.execute(tc.arguments, ctx);\n const resultStr = typeof result === 'string' ? result : JSON.stringify(result);\n ctx.addMessage({\n role: 'tool',\n content: resultStr,\n toolCallId: tc.id,\n });\n params.onToolResult?.(tc.name, result);\n } catch (error) {\n if (error instanceof ModelRetry) {\n ctx.addMessage({\n role: 'tool',\n content: `Error: ${error.message}. Please retry.`,\n toolCallId: tc.id,\n });\n retryCount++;\n } else {\n const errMsg = error instanceof Error ? error.message : String(error);\n ctx.addMessage({\n role: 'tool',\n content: `Error: ${errMsg}`,\n toolCallId: tc.id,\n });\n }\n }\n }\n continue;\n }\n\n ctx.addAssistantMessage(response.content);\n break;\n }\n\n let data: TOutput;\n if (params.outputType) {\n try {\n const parsed = JSON.parse(lastContent);\n data = params.outputType.parse(parsed) as TOutput;\n } catch {\n data = lastContent as unknown as TOutput;\n }\n } else {\n data = lastContent as unknown as TOutput;\n }\n\n if (params.outputGuardrails) {\n for (const guard of params.outputGuardrails) {\n const result = await guard.execute(data, {\n traceId,\n spanId,\n durationMs: Date.now() - startTime,\n model: params.model,\n metadata: {},\n });\n if (result.action !== 'pass') {\n throw new GuardrailError(`Output guardrail \"${guard.name}\" triggered: ${result.message}`);\n }\n }\n }\n\n return new AgentResultImpl<TOutput>({\n data,\n usage: totalUsage,\n messages: ctx.messages,\n traceId,\n durationMs: Date.now() - startTime,\n toolCalls: toolCallCount,\n retries: retryCount,\n });\n }\n}\n","import { type ZodType, z } from 'zod';\nimport type {\n AgentConfig,\n AgentResult,\n InputGuardrail,\n ModelSettings,\n OutputGuardrail,\n RunContext,\n RunOptions,\n StreamChunk,\n ToolDefinition,\n} from './agent-types';\nimport { Runner } from './runner';\nimport { tool as createTool } from './tools';\n\nexport class Agent<TContext = unknown, TOutput = string> {\n readonly name: string;\n readonly model: string;\n private _systemPrompt?: string | ((ctx: RunContext<TContext>) => string | Promise<string>);\n private _tools: ToolDefinition[] = [];\n private _outputType?: ZodType<TOutput>;\n private _modelSettings?: ModelSettings;\n private _inputGuardrails: InputGuardrail[] = [];\n private _outputGuardrails: OutputGuardrail[] = [];\n private _maxRetries: number;\n private _maxTurns: number;\n private _instructionsFn?: (ctx: RunContext<TContext>) => string | Promise<string>;\n private _resultValidatorFn?: (\n ctx: RunContext<TContext>,\n result: TOutput,\n ) => TOutput | Promise<TOutput>;\n private _runner: Runner;\n\n constructor(config: AgentConfig<TContext, TOutput>) {\n this.name = config.name;\n this.model = config.model;\n this._systemPrompt = config.systemPrompt;\n this._tools = config.tools ? [...config.tools] : [];\n this._outputType = config.outputType;\n this._modelSettings = config.modelSettings;\n this._inputGuardrails = config.inputGuardrails ?? [];\n this._outputGuardrails = config.outputGuardrails ?? [];\n this._maxRetries = config.maxRetries ?? 3;\n this._maxTurns = config.maxTurns ?? 10;\n this._runner = new Runner();\n }\n\n get tools(): ToolDefinition[] {\n return [...this._tools];\n }\n\n get hasInstructions(): boolean {\n return this._instructionsFn !== undefined;\n }\n\n get hasResultValidator(): boolean {\n return this._resultValidatorFn !== undefined;\n }\n\n addTool(toolDef: ToolDefinition): void {\n this._tools.push(toolDef);\n }\n\n setInstructions(fn: (ctx: RunContext<TContext>) => string | Promise<string>): void {\n this._instructionsFn = fn;\n }\n\n setResultValidator(\n fn: (ctx: RunContext<TContext>, result: TOutput) => TOutput | Promise<TOutput>,\n ): void {\n this._resultValidatorFn = fn;\n }\n\n setRunner(runner: Runner): void {\n this._runner = runner;\n }\n\n async run(prompt: string, options?: RunOptions<TContext>): Promise<AgentResult<TOutput>> {\n // Resolve system prompt\n let systemPrompt: string | undefined;\n if (typeof this._systemPrompt === 'function') {\n // Need a temporary context to resolve dynamic prompt\n const tempCtx = {\n deps: options?.deps as TContext,\n model: this.model,\n } as RunContext<TContext>;\n systemPrompt = await this._systemPrompt(tempCtx);\n } else {\n systemPrompt = this._systemPrompt;\n }\n\n // Resolve dynamic instructions\n if (this._instructionsFn) {\n const tempCtx = {\n deps: options?.deps as TContext,\n model: this.model,\n } as RunContext<TContext>;\n const instructions = await this._instructionsFn(tempCtx);\n systemPrompt = systemPrompt ? `${systemPrompt}\\n\\n${instructions}` : instructions;\n }\n\n return this._runner.run<TContext, TOutput>({\n model: this.model,\n systemPrompt,\n prompt,\n tools: this._tools,\n outputType: this._outputType,\n modelSettings: this._modelSettings,\n deps: options?.deps,\n messageHistory: options?.messageHistory,\n inputGuardrails: this._inputGuardrails,\n outputGuardrails: this._outputGuardrails,\n maxRetries: this._maxRetries,\n maxTurns: this._maxTurns,\n });\n }\n\n async *runStream(prompt: string, options?: RunOptions<TContext>): AsyncIterable<StreamChunk> {\n // Streaming is a future enhancement -- for now, yield the full result as a single chunk\n const result = await this.run(prompt, options);\n yield {\n type: 'text',\n content: typeof result.data === 'string' ? result.data : JSON.stringify(result.data),\n };\n yield { type: 'done' };\n }\n\n clone(): Agent<TContext, TOutput> {\n const cloned = new Agent<TContext, TOutput>({\n name: this.name,\n model: this.model,\n systemPrompt: this._systemPrompt,\n tools: [...this._tools],\n outputType: this._outputType,\n modelSettings: this._modelSettings ? { ...this._modelSettings } : undefined,\n inputGuardrails: [...this._inputGuardrails],\n outputGuardrails: [...this._outputGuardrails],\n maxRetries: this._maxRetries,\n maxTurns: this._maxTurns,\n });\n cloned._instructionsFn = this._instructionsFn;\n cloned._resultValidatorFn = this._resultValidatorFn;\n return cloned;\n }\n\n asTool(config: { description: string }): ToolDefinition {\n return createTool({\n name: this.name,\n description: config.description,\n parameters: z.object({ input: z.string().describe('The input to send to the agent') }),\n execute: async ({ input }, ctx) => {\n const result = await this.run(input, { deps: ctx.deps as TContext });\n return result.data;\n },\n });\n }\n}\n","import type { CycleMetrics, PhaseContext } from '../agent-types';\n\nclass PhaseContextImpl implements PhaseContext {\n name: string;\n startTime: number;\n private _output: unknown = undefined;\n private _metadata: Record<string, unknown> = {};\n\n constructor(name: string) {\n this.name = name;\n this.startTime = Date.now();\n }\n\n setOutput(output: unknown): void {\n this._output = output;\n }\n\n setMetadata(metadata: Record<string, unknown>): void {\n this._metadata = { ...this._metadata, ...metadata };\n }\n\n getOutput(): unknown {\n return this._output;\n }\n\n getMetadata(): Record<string, unknown> {\n return this._metadata;\n }\n}\n\nexport class ExecutionCycle {\n currentPhase: string = 'idle';\n private thinkDurationMs = 0;\n private actDurationMs = 0;\n private observeDurationMs = 0;\n private cycleCount = 0;\n\n async think<T>(fn: (phase: PhaseContext) => Promise<T>): Promise<T> {\n this.currentPhase = 'think';\n const ctx = new PhaseContextImpl('think');\n try {\n const result = await fn(ctx);\n const duration = Date.now() - ctx.startTime;\n this.thinkDurationMs += duration;\n return result;\n } finally {\n this.currentPhase = 'idle';\n }\n }\n\n async act<T>(fn: (phase: PhaseContext) => Promise<T>): Promise<T> {\n this.currentPhase = 'act';\n const ctx = new PhaseContextImpl('act');\n try {\n const result = await fn(ctx);\n const duration = Date.now() - ctx.startTime;\n this.actDurationMs += duration;\n return result;\n } finally {\n this.currentPhase = 'idle';\n }\n }\n\n async observe<T>(fn: (phase: PhaseContext) => Promise<T>): Promise<T> {\n this.currentPhase = 'observe';\n const ctx = new PhaseContextImpl('observe');\n try {\n const result = await fn(ctx);\n const duration = Date.now() - ctx.startTime;\n this.observeDurationMs += duration;\n this.cycleCount++;\n return result;\n } finally {\n this.currentPhase = 'idle';\n }\n }\n\n getMetrics(): CycleMetrics {\n return {\n thinkDurationMs: this.thinkDurationMs,\n actDurationMs: this.actDurationMs,\n observeDurationMs: this.observeDurationMs,\n totalDurationMs: this.thinkDurationMs + this.actDurationMs + this.observeDurationMs,\n cycleCount: this.cycleCount,\n };\n }\n}\n","import type { Deviation, PlanMetrics } from '../agent-types';\n\nexport class GoalTracker {\n goal = '';\n private expectedSteps: string[] = [];\n private completedSteps: string[] = [];\n private deviations: Deviation[] = [];\n private startTime = 0;\n private nextExpectedIndex = 0;\n\n setPlan(goal: string, expectedSteps: string[]): void {\n this.goal = goal;\n this.expectedSteps = [...expectedSteps];\n this.completedSteps = [];\n this.deviations = [];\n this.nextExpectedIndex = 0;\n this.startTime = Date.now();\n }\n\n markStepComplete(stepName: string): void {\n const now = new Date().toISOString();\n const expectedIndex = this.expectedSteps.indexOf(stepName);\n\n // Check for repeated step\n if (this.completedSteps.includes(stepName)) {\n this.deviations.push({\n type: 'repeated_step',\n stepName,\n message: `Step \"${stepName}\" has already been completed`,\n timestamp: now,\n });\n this.completedSteps.push(stepName);\n return;\n }\n\n // Check for unexpected step\n if (expectedIndex === -1) {\n this.deviations.push({\n type: 'unexpected_step',\n stepName,\n message: `Step \"${stepName}\" was not in the original plan`,\n timestamp: now,\n });\n this.completedSteps.push(stepName);\n return;\n }\n\n // Check for wrong order\n if (expectedIndex < this.nextExpectedIndex) {\n this.deviations.push({\n type: 'wrong_order',\n stepName,\n message: `Step \"${stepName}\" completed out of expected order (expected index ${expectedIndex}, current progress at ${this.nextExpectedIndex})`,\n timestamp: now,\n });\n } else if (expectedIndex > this.nextExpectedIndex) {\n // Steps were skipped - record wrong_order for this step\n this.deviations.push({\n type: 'wrong_order',\n stepName,\n message: `Step \"${stepName}\" completed out of order; expected \"${this.expectedSteps[this.nextExpectedIndex]}\" first`,\n timestamp: now,\n });\n }\n\n this.completedSteps.push(stepName);\n\n // Advance nextExpectedIndex past all completed steps\n if (expectedIndex >= this.nextExpectedIndex) {\n this.nextExpectedIndex = expectedIndex + 1;\n }\n }\n\n getMetrics(): PlanMetrics {\n const now = Date.now();\n const uniqueCompletedExpected = this.completedSteps.filter(\n (step, index, arr) => this.expectedSteps.includes(step) && arr.indexOf(step) === index,\n );\n const completionRate =\n this.expectedSteps.length > 0\n ? uniqueCompletedExpected.length / this.expectedSteps.length\n : 0;\n\n // Add missing_step deviations for expected steps not yet completed\n const missingDeviations: Deviation[] = [];\n const completedSet = new Set(this.completedSteps);\n for (const step of this.expectedSteps) {\n if (!completedSet.has(step)) {\n missingDeviations.push({\n type: 'missing_step',\n stepName: step,\n message: `Expected step \"${step}\" has not been completed`,\n timestamp: new Date().toISOString(),\n });\n }\n }\n\n const allDeviations = [...this.deviations, ...missingDeviations];\n\n const unexpectedSteps = allDeviations.filter((d) => d.type === 'unexpected_step').length;\n const wrongOrderSteps = allDeviations.filter((d) => d.type === 'wrong_order').length;\n\n return {\n completionRate,\n deviations: allDeviations,\n unexpectedSteps,\n wrongOrderSteps,\n totalDurationMs: this.startTime > 0 ? now - this.startTime : 0,\n };\n }\n}\n","import type { LoopDetectionResult, LoopDetectorConfig, Message, ToolCall } from '../agent-types';\n\nexport class LoopDetector {\n private similarityThreshold: number;\n private maxConsecutiveRepeats: number;\n private action: 'warn' | 'break' | 'auto_fix';\n\n constructor(config: LoopDetectorConfig = {}) {\n this.similarityThreshold = config.similarityThreshold ?? 0.85;\n this.maxConsecutiveRepeats = config.maxConsecutiveRepeats ?? 3;\n this.action = config.action ?? 'warn';\n }\n\n checkState(_messages: Message[], toolCalls: ToolCall[]): LoopDetectionResult {\n if (toolCalls.length < 2) {\n return { isLoop: false, similarity: 0, repeatCount: 0 };\n }\n\n // Build sequences of tool calls to compare\n // We look at consecutive windows of tool calls and check for repetition\n const windowSize = Math.min(Math.ceil(toolCalls.length / 2), this.maxConsecutiveRepeats);\n\n let maxSimilarity = 0;\n let maxRepeatCount = 0;\n\n // Compare sliding windows of tool call sequences\n for (let size = 1; size <= windowSize; size++) {\n const sequences = this.buildSequences(toolCalls, size);\n if (sequences.length < 2) continue;\n\n // Count consecutive repeats from the end\n let repeatCount = 1;\n const lastSeq = sequences[sequences.length - 1];\n\n for (let i = sequences.length - 2; i >= 0; i--) {\n const similarity = this.computeJaccardSimilarity(lastSeq, sequences[i]);\n if (similarity >= this.similarityThreshold) {\n repeatCount++;\n if (similarity > maxSimilarity) {\n maxSimilarity = similarity;\n }\n } else {\n break;\n }\n }\n\n if (repeatCount > maxRepeatCount) {\n maxRepeatCount = repeatCount;\n // Ensure maxSimilarity is at least threshold if we found repeats\n if (maxRepeatCount >= 2 && maxSimilarity === 0) {\n maxSimilarity = this.similarityThreshold;\n }\n }\n }\n\n const isLoop = maxRepeatCount >= this.maxConsecutiveRepeats;\n\n return {\n isLoop,\n similarity: maxSimilarity,\n repeatCount: maxRepeatCount,\n action: isLoop ? this.action : undefined,\n };\n }\n\n /**\n * Build non-overlapping sequences of the given window size from the tool calls.\n */\n private buildSequences(toolCalls: ToolCall[], windowSize: number): Set<string>[] {\n const sequences: Set<string>[] = [];\n for (let i = 0; i <= toolCalls.length - windowSize; i += windowSize) {\n const window = toolCalls.slice(i, i + windowSize);\n sequences.push(this.toolCallsToFeatureSet(window));\n }\n // If there's a remaining partial window, include it as the last sequence\n const remainder = toolCalls.length % windowSize;\n if (remainder > 0 && sequences.length > 0) {\n const lastWindow = toolCalls.slice(toolCalls.length - windowSize);\n // Replace the last entry with a full-size window from the end\n if (toolCalls.length >= windowSize) {\n sequences[sequences.length - 1] = this.toolCallsToFeatureSet(lastWindow);\n }\n }\n return sequences;\n }\n\n /**\n * Convert a set of tool calls into a feature set of tool names and argument keys\n * for Jaccard similarity comparison.\n */\n private toolCallsToFeatureSet(calls: ToolCall[]): Set<string> {\n const features = new Set<string>();\n for (const call of calls) {\n features.add(`name:${call.name}`);\n for (const key of Object.keys(call.arguments)) {\n features.add(`arg:${call.name}:${key}`);\n }\n }\n return features;\n }\n\n /**\n * Compute Jaccard similarity between two feature sets.\n * J(A, B) = |A intersection B| / |A union B|\n */\n private computeJaccardSimilarity(a: Set<string>, b: Set<string>): number {\n if (a.size === 0 && b.size === 0) return 1;\n\n let intersectionSize = 0;\n for (const item of a) {\n if (b.has(item)) {\n intersectionSize++;\n }\n }\n\n const unionSize = a.size + b.size - intersectionSize;\n if (unionSize === 0) return 1;\n\n return intersectionSize / unionSize;\n }\n}\n","import type { DriftDetectorConfig, DriftResult, DriftType, Message } from '../agent-types';\n\n/**\n * Context passed to the drift detector for comparison.\n */\nexport interface DriftCheckInput {\n /** The expected conversation context (e.g., system prompt, goal description, or reference messages). */\n expectedContext: string | Message[];\n /** The actual conversation context (e.g., recent messages or current output). */\n actualContext: string | Message[];\n}\n\n/**\n * Default threshold above which drift is considered detected.\n */\nconst DEFAULT_THRESHOLD = 0.7;\n\n/**\n * Tokenizes a string into lowercase alphanumeric words.\n */\nfunction tokenize(text: string): Set<string> {\n const words = text\n .toLowerCase()\n .replace(/[^a-z0-9\\s]/g, ' ')\n .split(/\\s+/)\n .filter((w) => w.length > 0);\n return new Set(words);\n}\n\n/**\n * Computes the Jaccard similarity between two sets.\n * Returns a value between 0 (no overlap) and 1 (identical).\n */\nfunction jaccardSimilarity(a: Set<string>, b: Set<string>): number {\n if (a.size === 0 && b.size === 0) return 1;\n let intersectionSize = 0;\n for (const item of a) {\n if (b.has(item)) intersectionSize++;\n }\n const unionSize = a.size + b.size - intersectionSize;\n return unionSize === 0 ? 1 : intersectionSize / unionSize;\n}\n\n/**\n * Converts messages or a string into a flat text representation.\n */\nfunction toText(input: string | Message[]): string {\n if (typeof input === 'string') return input;\n return input.map((m) => m.content).join(' ');\n}\n\n/**\n * Extracts message-level statistics from a list of messages.\n */\nfunction getMessageStats(messages: Message[]) {\n const assistantMessages = messages.filter((m) => m.role === 'assistant');\n const lengths = assistantMessages.map((m) => m.content.length);\n const avgLength = lengths.length > 0 ? lengths.reduce((a, b) => a + b, 0) / lengths.length : 0;\n const variance =\n lengths.length > 1\n ? lengths.reduce((sum, l) => sum + (l - avgLength) ** 2, 0) / (lengths.length - 1)\n : 0;\n\n const toolCallCount = messages.reduce((count, m) => count + (m.toolCalls?.length ?? 0), 0);\n const errorCount = messages.filter(\n (m) => m.role === 'tool' && m.content.toLowerCase().includes('error'),\n ).length;\n\n return { avgLength, variance, lengths, toolCallCount, errorCount, messageCount: messages.length };\n}\n\n/**\n * Lightweight drift detection engine.\n *\n * Supports four drift detection strategies: topic, behavior, quality, and coherence.\n * Each detector produces a score between 0 and 1, where higher values indicate\n * greater drift from the expected context.\n */\nexport class DriftDetector {\n private readonly detectors: DriftType[];\n private readonly thresholds: Record<DriftType, number>;\n\n constructor(config: DriftDetectorConfig) {\n this.detectors = config.detectors;\n this.thresholds = {\n topic: config.thresholds?.topic ?? DEFAULT_THRESHOLD,\n behavior: config.thresholds?.behavior ?? DEFAULT_THRESHOLD,\n quality: config.thresholds?.quality ?? DEFAULT_THRESHOLD,\n coherence: config.thresholds?.coherence ?? DEFAULT_THRESHOLD,\n };\n }\n\n /**\n * Checks for drift between expected and actual context.\n *\n * Runs all configured detectors and returns the result of the first one\n * whose score exceeds its threshold. If no detector triggers, returns\n * a no-drift result with the highest observed score.\n */\n async checkDrift(input: DriftCheckInput): Promise<DriftResult> {\n const results: Array<{ type: DriftType; score: number; details: string }> = [];\n\n for (const detector of this.detectors) {\n const result = this.runDetector(detector, input);\n results.push(result);\n\n if (result.score >= this.thresholds[detector]) {\n return {\n hasDrift: true,\n type: detector,\n score: result.score,\n details: result.details,\n };\n }\n }\n\n // No drift detected; return the highest score among all detectors.\n const highest = results.reduce((max, r) => (r.score > max.score ? r : max), {\n type: 'topic' as DriftType,\n score: 0,\n details: 'No drift detected',\n });\n\n return {\n hasDrift: false,\n score: highest.score,\n details: highest.details,\n };\n }\n\n private runDetector(\n type: DriftType,\n input: DriftCheckInput,\n ): { type: DriftType; score: number; details: string } {\n switch (type) {\n case 'topic':\n return this.detectTopicDrift(input);\n case 'behavior':\n return this.detectBehaviorDrift(input);\n case 'quality':\n return this.detectQualityDrift(input);\n case 'coherence':\n return this.detectCoherenceDrift(input);\n }\n }\n\n // ---------------------------------------------------------------------------\n // Topic Drift: keyword overlap scoring via Jaccard similarity\n // ---------------------------------------------------------------------------\n\n private detectTopicDrift(input: DriftCheckInput): {\n type: DriftType;\n score: number;\n details: string;\n } {\n const expectedText = toText(input.expectedContext);\n const actualText = toText(input.actualContext);\n const expectedTokens = tokenize(expectedText);\n const actualTokens = tokenize(actualText);\n const similarity = jaccardSimilarity(expectedTokens, actualTokens);\n\n // Drift score is the inverse of similarity: low overlap = high drift.\n const score = 1 - similarity;\n\n return {\n type: 'topic',\n score,\n details: `Topic similarity: ${(similarity * 100).toFixed(1)}%. Keyword overlap score indicates ${score >= this.thresholds.topic ? 'significant' : 'acceptable'} topic drift.`,\n };\n }\n\n // ---------------------------------------------------------------------------\n // Behavior Drift: shifts in message patterns (length variance, tool usage)\n // ---------------------------------------------------------------------------\n\n private detectBehaviorDrift(input: DriftCheckInput): {\n type: DriftType;\n score: number;\n details: string;\n } {\n const expectedMessages = Array.isArray(input.expectedContext) ? input.expectedContext : [];\n const actualMessages = Array.isArray(input.actualContext) ? input.actualContext : [];\n\n // If either side is a plain string, fall back to a token-based comparison.\n if (expectedMessages.length === 0 || actualMessages.length === 0) {\n const expectedText = toText(input.expectedContext);\n const actualText = toText(input.actualContext);\n const lengthRatio =\n expectedText.length > 0\n ? Math.abs(actualText.length - expectedText.length) / Math.max(expectedText.length, 1)\n : 0;\n const score = Math.min(lengthRatio, 1);\n return {\n type: 'behavior',\n score,\n details: `Behavior comparison based on text length ratio: ${score.toFixed(2)}.`,\n };\n }\n\n const expectedStats = getMessageStats(expectedMessages);\n const actualStats = getMessageStats(actualMessages);\n\n // Length variance drift: compare average response lengths.\n const lengthDrift =\n expectedStats.avgLength > 0\n ? Math.abs(actualStats.avgLength - expectedStats.avgLength) /\n Math.max(expectedStats.avgLength, 1)\n : 0;\n\n // Tool usage drift: compare tool call frequency.\n const expectedToolRate =\n expectedStats.messageCount > 0 ? expectedStats.toolCallCount / expectedStats.messageCount : 0;\n const actualToolRate =\n actualStats.messageCount > 0 ? actualStats.toolCallCount / actualStats.messageCount : 0;\n const toolDrift = Math.abs(actualToolRate - expectedToolRate);\n\n // Combined score (weighted average).\n const score = Math.min(lengthDrift * 0.6 + toolDrift * 0.4, 1);\n\n return {\n type: 'behavior',\n score,\n details: `Behavior drift: avg length shift ${lengthDrift.toFixed(2)}, tool usage shift ${toolDrift.toFixed(2)}, combined ${score.toFixed(2)}.`,\n };\n }\n\n // ---------------------------------------------------------------------------\n // Quality Drift: degrading response quality signals\n // ---------------------------------------------------------------------------\n\n private detectQualityDrift(input: DriftCheckInput): {\n type: DriftType;\n score: number;\n details: string;\n } {\n const expectedMessages = Array.isArray(input.expectedContext) ? input.expectedContext : [];\n const actualMessages = Array.isArray(input.actualContext) ? input.actualContext : [];\n\n if (expectedMessages.length === 0 || actualMessages.length === 0) {\n return {\n type: 'quality',\n score: 0,\n details: 'Insufficient message data for quality drift detection.',\n };\n }\n\n const expectedStats = getMessageStats(expectedMessages);\n const actualStats = getMessageStats(actualMessages);\n\n // Shorter responses signal: are actual responses significantly shorter?\n const shorterScore =\n expectedStats.avgLength > 0\n ? Math.max(0, (expectedStats.avgLength - actualStats.avgLength) / expectedStats.avgLength)\n : 0;\n\n // Error rate signal.\n const expectedErrorRate =\n expectedStats.messageCount > 0 ? expectedStats.errorCount / expectedStats.messageCount : 0;\n const actualErrorRate =\n actualStats.messageCount > 0 ? actualStats.errorCount / actualStats.messageCount : 0;\n const errorIncrease = Math.max(0, actualErrorRate - expectedErrorRate);\n\n // Combined quality score.\n const score = Math.min(shorterScore * 0.5 + errorIncrease * 0.5, 1);\n\n return {\n type: 'quality',\n score,\n details: `Quality drift: response shortening ${shorterScore.toFixed(2)}, error rate increase ${errorIncrease.toFixed(2)}, combined ${score.toFixed(2)}.`,\n };\n }\n\n // ---------------------------------------------------------------------------\n // Coherence Drift: logical consistency (contradictions, topic jumping)\n // ---------------------------------------------------------------------------\n\n private detectCoherenceDrift(input: DriftCheckInput): {\n type: DriftType;\n score: number;\n details: string;\n } {\n const actualMessages = Array.isArray(input.actualContext) ? input.actualContext : [];\n\n if (actualMessages.length < 2) {\n // Not enough messages to detect coherence issues from text alone.\n const expectedText = toText(input.expectedContext);\n const actualText = toText(input.actualContext);\n if (expectedText && actualText) {\n const similarity = jaccardSimilarity(tokenize(expectedText), tokenize(actualText));\n const score = 1 - similarity;\n return {\n type: 'coherence',\n score,\n details: `Coherence check (text mode): similarity ${(similarity * 100).toFixed(1)}%.`,\n };\n }\n return { type: 'coherence', score: 0, details: 'Insufficient data for coherence detection.' };\n }\n\n const assistantMessages = actualMessages.filter((m) => m.role === 'assistant');\n if (assistantMessages.length < 2) {\n return {\n type: 'coherence',\n score: 0,\n details: 'Not enough assistant messages to evaluate coherence.',\n };\n }\n\n // Topic jumping: measure pairwise similarity between consecutive assistant messages.\n let totalSimilarity = 0;\n let pairs = 0;\n for (let i = 1; i < assistantMessages.length; i++) {\n const prev = tokenize(assistantMessages[i - 1].content);\n const curr = tokenize(assistantMessages[i].content);\n totalSimilarity += jaccardSimilarity(prev, curr);\n pairs++;\n }\n const avgPairwiseSimilarity = pairs > 0 ? totalSimilarity / pairs : 1;\n\n // Repetition / contradiction detection: check for near-duplicate consecutive messages\n // which can signal a stuck loop or contradictory outputs.\n let repetitionCount = 0;\n for (let i = 1; i < assistantMessages.length; i++) {\n const prev = tokenize(assistantMessages[i - 1].content);\n const curr = tokenize(assistantMessages[i].content);\n const sim = jaccardSimilarity(prev, curr);\n if (sim > 0.9) repetitionCount++;\n }\n const repetitionRate = pairs > 0 ? repetitionCount / pairs : 0;\n\n // Low pairwise similarity indicates topic jumping; high repetition indicates loops.\n // Both are coherence issues.\n const topicJumpScore = 1 - avgPairwiseSimilarity;\n const score = Math.min(topicJumpScore * 0.6 + repetitionRate * 0.4, 1);\n\n return {\n type: 'coherence',\n score,\n details: `Coherence drift: avg pairwise similarity ${(avgPairwiseSimilarity * 100).toFixed(1)}%, repetition rate ${(repetitionRate * 100).toFixed(1)}%, combined ${score.toFixed(2)}.`,\n };\n }\n}\n","import type {\n GuardrailContext,\n GuardrailResult,\n InputGuardrail,\n OutputGuardrail,\n} from '../agent-types';\n\nexport function inputGuardrail(config: {\n name: string;\n execute: (input: string, context: GuardrailContext) => Promise<GuardrailResult>;\n}): InputGuardrail {\n return { name: config.name, execute: config.execute };\n}\n\nexport function outputGuardrail(config: {\n name: string;\n execute: (output: unknown, context: GuardrailContext) => Promise<GuardrailResult>;\n}): OutputGuardrail {\n return { name: config.name, execute: config.execute };\n}\n","import type { EvaluationScore } from '../agent-types';\n\nexport class EvaluationClient {\n private apiUrl: string;\n private apiKey: string;\n\n constructor(config: { apiUrl: string; apiKey: string }) {\n this.apiUrl = config.apiUrl;\n this.apiKey = config.apiKey;\n }\n\n async addScore(score: EvaluationScore): Promise<void> {\n try {\n await fetch(`${this.apiUrl}/v1/scores`, {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json',\n 'X-API-Key': this.apiKey,\n },\n body: JSON.stringify(score),\n });\n } catch (_error) {\n // Graceful degradation\n }\n }\n\n async addScores(scores: EvaluationScore[]): Promise<void> {\n try {\n await fetch(`${this.apiUrl}/v1/scores/batch`, {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json',\n 'X-API-Key': this.apiKey,\n },\n body: JSON.stringify({ scores }),\n });\n } catch (_error) {\n // Graceful degradation\n }\n }\n}\n","import type { JudgeConfig, JudgeResult } from '../agent-types';\nimport { type ProviderAdapter, Runner } from '../runner';\n\nexport class LLMJudge {\n private config: JudgeConfig;\n private runner: Runner;\n\n constructor(config: JudgeConfig) {\n this.config = config;\n this.runner = new Runner();\n }\n\n setAdapter(provider: string, adapter: ProviderAdapter): void {\n this.runner.registerAdapter(provider, adapter);\n }\n\n async evaluate(params: {\n input: string;\n output: string;\n context?: string;\n reference?: string;\n }): Promise<JudgeResult> {\n const criteriaList = this.config.criteria.join(', ');\n const systemPrompt =\n this.config.systemPrompt ??\n `You are an expert evaluator. Score the following output on these criteria: ${criteriaList}.\n Return a JSON object with \"scores\" (object mapping criterion to 0-1 score), \"reasoning\" (string), and \"overallScore\" (0-1 number).`;\n\n const prompt = [\n `Input: ${params.input}`,\n `Output: ${params.output}`,\n params.context ? `Context: ${params.context}` : '',\n params.reference ? `Reference: ${params.reference}` : '',\n `Evaluate on: ${criteriaList}`,\n 'Return JSON only.',\n ]\n .filter(Boolean)\n .join('\\n\\n');\n\n try {\n const result = await this.runner.run<unknown, string>({\n model: this.config.model,\n systemPrompt,\n prompt,\n });\n const parsed = JSON.parse(result.data as string) as JudgeResult;\n return parsed;\n } catch {\n // Fallback: return default scores\n const scores: Record<string, number> = {};\n for (const c of this.config.criteria) scores[c] = 0;\n return { scores, reasoning: 'Evaluation failed', overallScore: 0 };\n }\n }\n}\n","import type { EmitSignalRequest, Signal } from './agent-types';\nimport { uuidv7 } from './utils/uuid';\n\nexport class SignalReporter {\n private apiUrl: string;\n private apiKey: string;\n private queue: Signal[] = [];\n private flushTimer: NodeJS.Timeout | null = null;\n private batchSize: number;\n private flushInterval: number;\n\n constructor(config: {\n apiUrl: string;\n apiKey: string;\n batchSize?: number;\n flushInterval?: number;\n }) {\n this.apiUrl = config.apiUrl;\n this.apiKey = config.apiKey;\n this.batchSize = config.batchSize ?? 50;\n this.flushInterval = config.flushInterval ?? 5000;\n }\n\n async emit(request: EmitSignalRequest): Promise<Signal> {\n const signal: Signal = {\n id: uuidv7(),\n ...request,\n timestamp: new Date().toISOString(),\n };\n this.queue.push(signal);\n if (this.queue.length >= this.batchSize) {\n await this.flush();\n } else if (!this.flushTimer) {\n this.flushTimer = setTimeout(() => this.flush(), this.flushInterval);\n }\n return signal;\n }\n\n async flush(): Promise<void> {\n if (this.flushTimer) {\n clearTimeout(this.flushTimer);\n this.flushTimer = null;\n }\n if (this.queue.length === 0) return;\n\n const batch = [...this.queue];\n this.queue = [];\n\n try {\n await fetch(`${this.apiUrl}/v1/signals/batch`, {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json',\n 'X-API-Key': this.apiKey,\n },\n body: JSON.stringify({ signals: batch }),\n });\n } catch (_error) {\n // Graceful degradation - re-queue on failure\n this.queue.unshift(...batch);\n }\n }\n\n async shutdown(): Promise<void> {\n await this.flush();\n }\n}\n","/**\n * Reliability Metrics - Aggregate plan, cycle, loop, and drift metrics\n * into a single reliability score.\n *\n * @packageDocumentation\n */\n\nimport type { CycleMetrics, DriftResult, LoopDetectionResult, PlanMetrics } from '../agent-types';\n\n// ---------------------------------------------------------------------------\n// Types\n// ---------------------------------------------------------------------------\n\nexport interface ReliabilityMetrics {\n planMetrics?: PlanMetrics;\n cycleMetrics?: CycleMetrics;\n loopMetrics?: LoopDetectionResult;\n driftMetrics?: DriftResult;\n overallScore: number;\n}\n\n// ---------------------------------------------------------------------------\n// MetricsAggregator\n// ---------------------------------------------------------------------------\n\nexport class MetricsAggregator {\n private _planMetrics?: PlanMetrics;\n private _cycleMetrics?: CycleMetrics;\n private _loopMetrics?: LoopDetectionResult;\n private _driftMetrics?: DriftResult;\n\n setPlanMetrics(metrics: PlanMetrics): void {\n this._planMetrics = metrics;\n }\n\n setCycleMetrics(metrics: CycleMetrics): void {\n this._cycleMetrics = metrics;\n }\n\n setLoopMetrics(metrics: LoopDetectionResult): void {\n this._loopMetrics = metrics;\n }\n\n setDriftMetrics(metrics: DriftResult): void {\n this._driftMetrics = metrics;\n }\n\n getMetrics(): ReliabilityMetrics {\n const scores: number[] = [];\n\n if (this._planMetrics) scores.push(this._planMetrics.completionRate);\n if (this._loopMetrics) scores.push(this._loopMetrics.isLoop ? 0.3 : 1.0);\n if (this._driftMetrics) scores.push(this._driftMetrics.hasDrift ? 0.4 : 1.0);\n\n const overallScore =\n scores.length > 0 ? scores.reduce((a, b) => a + b, 0) / scores.length : 1.0;\n\n return {\n planMetrics: this._planMetrics,\n cycleMetrics: this._cycleMetrics,\n loopMetrics: this._loopMetrics,\n driftMetrics: this._driftMetrics,\n overallScore,\n };\n }\n\n reset(): void {\n this._planMetrics = undefined;\n this._cycleMetrics = undefined;\n this._loopMetrics = undefined;\n this._driftMetrics = undefined;\n }\n}\n","/**\n * Prompt Management - Versioned prompt template registration and rendering.\n *\n * @packageDocumentation\n */\n\n// ---------------------------------------------------------------------------\n// Types\n// ---------------------------------------------------------------------------\n\nexport interface PromptTemplate {\n name: string;\n template: string;\n variables: string[];\n version: number;\n createdAt: string;\n}\n\n// ---------------------------------------------------------------------------\n// PromptManager\n// ---------------------------------------------------------------------------\n\nexport class PromptManager {\n private templates: Map<string, PromptTemplate[]> = new Map();\n\n register(name: string, template: string, variables: string[]): PromptTemplate {\n const versions = this.templates.get(name) ?? [];\n const promptTemplate: PromptTemplate = {\n name,\n template,\n variables,\n version: versions.length + 1,\n createdAt: new Date().toISOString(),\n };\n versions.push(promptTemplate);\n this.templates.set(name, versions);\n return promptTemplate;\n }\n\n render(name: string, values: Record<string, string>, version?: number): string {\n const template = this.getVersion(name, version);\n let rendered = template.template;\n for (const [key, value] of Object.entries(values)) {\n rendered = rendered.replaceAll(`{{${key}}}`, value);\n }\n return rendered;\n }\n\n getVersion(name: string, version?: number): PromptTemplate {\n const versions = this.templates.get(name);\n if (!versions || versions.length === 0) {\n throw new Error(`Prompt template \"${name}\" not found`);\n }\n if (version) {\n const found = versions.find((v) => v.version === version);\n if (!found) throw new Error(`Version ${version} of \"${name}\" not found`);\n return found;\n }\n return versions[versions.length - 1]; // latest\n }\n\n list(): string[] {\n return Array.from(this.templates.keys());\n }\n}\n","/**\n * Remediation Engine - Real-time signal handling and automated remediation.\n *\n * Connects to the backend via WebSocket, receives signals, and dispatches\n * them to registered remediation handlers.\n *\n * @packageDocumentation\n */\n\nimport type { RemediationAction, RemediationHandler, Signal, SignalType } from '../agent-types';\n\n// ---------------------------------------------------------------------------\n// Types\n// ---------------------------------------------------------------------------\n\nexport interface RemediationEngineConfig {\n url: string;\n token: string;\n}\n\nexport interface RetryConfig {\n maxRetries: number;\n backoffMs: number;\n}\n\nexport interface FallbackConfig {\n fallbackModel: string;\n}\n\n// ---------------------------------------------------------------------------\n// WebSocket abstraction\n// ---------------------------------------------------------------------------\n\n/**\n * Minimal WebSocket interface so we can work in both browser and Node\n * environments without hard-coding a dependency.\n */\ninterface MinimalWebSocket {\n onopen: ((ev: any) => void) | null;\n onmessage: ((ev: { data: any }) => void) | null;\n onerror: ((ev: any) => void) | null;\n onclose: ((ev: any) => void) | null;\n close(): void;\n send(data: string): void;\n readyState: number;\n}\n\nfunction getWebSocketCtor():\n | (new (\n url: string,\n protocols?: string | string[],\n ) => MinimalWebSocket)\n | undefined {\n // Browser or Deno\n if (typeof globalThis !== 'undefined' && (globalThis as any).WebSocket) {\n return (globalThis as any).WebSocket;\n }\n return undefined;\n}\n\n// ---------------------------------------------------------------------------\n// RemediationEngine\n// ---------------------------------------------------------------------------\n\nexport class RemediationEngine {\n private readonly config: RemediationEngineConfig;\n private ws: MinimalWebSocket | null = null;\n private handlers: Map<SignalType, RemediationHandler[]> = new Map();\n private actionListeners: Array<(action: RemediationAction, signal: Signal) => void> = [];\n\n constructor(config: RemediationEngineConfig) {\n this.config = config;\n }\n\n // -----------------------------------------------------------------------\n // Connection\n // -----------------------------------------------------------------------\n\n async connect(): Promise<void> {\n const WS = getWebSocketCtor();\n if (!WS) {\n throw new Error(\n 'WebSocket is not available in this environment. ' +\n 'Please provide a global WebSocket implementation.',\n );\n }\n\n return new Promise<void>((resolve, reject) => {\n const urlWithToken = `${this.config.url}?token=${encodeURIComponent(this.config.token)}`;\n const ws = new WS(urlWithToken);\n\n ws.onopen = () => {\n this.ws = ws;\n resolve();\n };\n\n ws.onerror = (err: any) => {\n if (!this.ws) {\n reject(new Error(`WebSocket connection failed: ${String(err)}`));\n }\n };\n\n ws.onmessage = (event: { data: any }) => {\n this.handleMessage(event.data);\n };\n\n ws.onclose = () => {\n this.ws = null;\n };\n });\n }\n\n disconnect(): void {\n if (this.ws) {\n this.ws.close();\n this.ws = null;\n }\n }\n\n // -----------------------------------------------------------------------\n // Handler registration\n // -----------------------------------------------------------------------\n\n onSignal(type: SignalType, handler: RemediationHandler): void {\n const existing = this.handlers.get(type) ?? [];\n existing.push(handler);\n this.handlers.set(type, existing);\n }\n\n /**\n * Register a listener that is called whenever a remediation action is\n * emitted after a signal is processed.\n */\n onAction(listener: (action: RemediationAction, signal: Signal) => void): void {\n this.actionListeners.push(listener);\n }\n\n // -----------------------------------------------------------------------\n // Built-in static strategies\n // -----------------------------------------------------------------------\n\n static retry(config: RetryConfig): RemediationHandler {\n let attempts = 0;\n return async (_signal: Signal): Promise<RemediationAction> => {\n attempts += 1;\n if (attempts > config.maxRetries) {\n return { action: 'escalate', metadata: { reason: 'max retries exceeded', attempts } };\n }\n // Apply exponential backoff\n const delayMs = config.backoffMs * 2 ** (attempts - 1);\n await new Promise((r) => setTimeout(r, delayMs));\n return {\n action: 'retry',\n metadata: { attempt: attempts, delayMs },\n };\n };\n }\n\n static fallback(config: FallbackConfig): RemediationHandler {\n return async (_signal: Signal): Promise<RemediationAction> => ({\n action: 'fallback',\n newModel: config.fallbackModel,\n metadata: { fallbackModel: config.fallbackModel },\n });\n }\n\n static contextReset(): RemediationHandler {\n return async (_signal: Signal): Promise<RemediationAction> => ({\n action: 'reset',\n metadata: { reason: 'context reset triggered' },\n });\n }\n\n static goalReinjection(goal: string): RemediationHandler {\n return async (_signal: Signal): Promise<RemediationAction> => ({\n action: 'redirect',\n newSystemPrompt: `Stay focused on the following goal: ${goal}`,\n metadata: { reinjectedGoal: goal },\n });\n }\n\n static checkpointRestore(checkpointId: string): RemediationHandler {\n return async (_signal: Signal): Promise<RemediationAction> => ({\n action: 'reset',\n metadata: { checkpointId, reason: 'checkpoint restore' },\n });\n }\n\n // -----------------------------------------------------------------------\n // Internal\n // -----------------------------------------------------------------------\n\n private async handleMessage(raw: any): Promise<void> {\n let signal: Signal;\n try {\n signal = typeof raw === 'string' ? JSON.parse(raw) : raw;\n } catch {\n return; // Ignore malformed messages\n }\n\n await this.dispatch(signal);\n }\n\n private async dispatch(signal: Signal): Promise<void> {\n const handlers = this.handlers.get(signal.type);\n if (!handlers || handlers.length === 0) {\n return;\n }\n\n for (const handler of handlers) {\n try {\n const action = await handler(signal);\n this.emitAction(action, signal);\n } catch {\n // Handler errors are silently swallowed to avoid breaking the loop\n }\n }\n }\n\n private emitAction(action: RemediationAction, signal: Signal): void {\n for (const listener of this.actionListeners) {\n try {\n listener(action, signal);\n } catch {\n // Listener errors are silently swallowed\n }\n }\n }\n}\n","/**\n * Local Rules Engine - Evaluate guardrail rules against a runtime context.\n *\n * @packageDocumentation\n */\n\nimport type { GuardrailAction } from '../agent-types';\n\n// ---------------------------------------------------------------------------\n// Types\n// ---------------------------------------------------------------------------\n\nexport interface Rule {\n name: string;\n condition: (ctx: RuleContext) => boolean;\n action: GuardrailAction;\n message: string;\n}\n\nexport interface RuleContext {\n input?: string;\n output?: string;\n toolCalls?: Array<{ name: string; arguments: Record<string, unknown> }>;\n durationMs?: number;\n tokenCount?: number;\n metadata?: Record<string, unknown>;\n}\n\nexport interface RuleResult {\n ruleName: string;\n triggered: boolean;\n action: GuardrailAction;\n message: string;\n}\n\n// ---------------------------------------------------------------------------\n// RulesEngine\n// ---------------------------------------------------------------------------\n\nexport class RulesEngine {\n private rules: Rule[] = [];\n\n addRule(rule: Rule): void {\n this.rules.push(rule);\n }\n\n removeRule(name: string): void {\n this.rules = this.rules.filter((r) => r.name !== name);\n }\n\n evaluate(context: RuleContext): RuleResult[] {\n return this.rules\n .map((rule) => ({\n ruleName: rule.name,\n triggered: rule.condition(context),\n action: rule.action,\n message: rule.message,\n }))\n .filter((r) => r.triggered);\n }\n\n evaluateAll(context: RuleContext): RuleResult[] {\n return this.rules.map((rule) => ({\n ruleName: rule.name,\n triggered: rule.condition(context),\n action: rule.action,\n message: rule.message,\n }));\n }\n}\n","interface DiagnosticSignal {\n description: string;\n sentiment: 'POSITIVE' | 'NEGATIVE' | 'NEUTRAL';\n}\n\ninterface DiagnosticsConfig {\n signals: Record<string, DiagnosticSignal>;\n}\n\nexport function createSelfDiagnosticsTool(config: DiagnosticsConfig) {\n const signalNames = Object.keys(config.signals);\n\n const executeDiagnostic = async (params: { signal_name: string; details?: string }) => {\n const signal = config.signals[params.signal_name];\n if (!signal) return { error: `Unknown signal: ${params.signal_name}` };\n return {\n signal_name: params.signal_name,\n description: signal.description,\n sentiment: signal.sentiment,\n details: params.details,\n timestamp: new Date().toISOString(),\n };\n };\n\n return {\n forOpenAI(): {\n type: 'function';\n function: { name: string; description: string; parameters: Record<string, any> };\n } {\n return {\n type: 'function',\n function: {\n name: 'report_diagnostic',\n description:\n 'Report a diagnostic signal about your own execution quality or issues encountered',\n parameters: {\n type: 'object',\n properties: {\n signal_name: {\n type: 'string',\n enum: signalNames,\n description: 'The type of diagnostic signal to report',\n },\n details: {\n type: 'string',\n description: 'Additional details about the issue',\n },\n },\n required: ['signal_name'],\n },\n },\n };\n },\n\n forAnthropic(): { name: string; description: string; input_schema: Record<string, any> } {\n return {\n name: 'report_diagnostic',\n description:\n 'Report a diagnostic signal about your own execution quality or issues encountered',\n input_schema: {\n type: 'object',\n properties: {\n signal_name: {\n type: 'string',\n enum: signalNames,\n description: 'The type of diagnostic signal to report',\n },\n details: {\n type: 'string',\n description: 'Additional details about the issue',\n },\n },\n required: ['signal_name'],\n },\n };\n },\n\n forVercelAI(): {\n description: string;\n parameters: any;\n execute: (params: any) => Promise<any>;\n } {\n // Returns a shape compatible with Vercel AI SDK tool() format\n return {\n description:\n 'Report a diagnostic signal about your own execution quality or issues encountered',\n parameters: {\n type: 'object',\n properties: {\n signal_name: { type: 'string', enum: signalNames },\n details: { type: 'string' },\n },\n required: ['signal_name'],\n },\n execute: executeDiagnostic,\n };\n },\n\n execute: executeDiagnostic,\n signals: config.signals,\n };\n}\n"]}
|