@prefactor/core 0.1.1 → 0.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (62) hide show
  1. package/README.md +35 -2
  2. package/dist/agent/instance-manager.d.ts +19 -0
  3. package/dist/agent/instance-manager.d.ts.map +1 -0
  4. package/dist/agent/instance-manager.js +71 -0
  5. package/dist/agent/instance-manager.js.map +1 -0
  6. package/dist/agent/schema-registry.d.ts +9 -0
  7. package/dist/agent/schema-registry.d.ts.map +1 -0
  8. package/dist/agent/schema-registry.js +16 -0
  9. package/dist/agent/schema-registry.js.map +1 -0
  10. package/dist/config.d.ts +49 -25
  11. package/dist/config.d.ts.map +1 -1
  12. package/dist/config.js +13 -7
  13. package/dist/config.js.map +1 -1
  14. package/dist/create-core.d.ts +12 -0
  15. package/dist/create-core.d.ts.map +1 -0
  16. package/dist/create-core.js +49 -0
  17. package/dist/create-core.js.map +1 -0
  18. package/dist/index.cjs +390 -134
  19. package/dist/index.cjs.map +14 -9
  20. package/dist/index.d.ts +7 -1
  21. package/dist/index.d.ts.map +1 -1
  22. package/dist/index.js +391 -135
  23. package/dist/index.js.map +14 -9
  24. package/dist/queue/actions.d.ts +35 -0
  25. package/dist/queue/actions.d.ts.map +1 -0
  26. package/dist/queue/actions.js +2 -0
  27. package/dist/queue/actions.js.map +1 -0
  28. package/dist/queue/base.d.ts +7 -0
  29. package/dist/queue/base.d.ts.map +1 -0
  30. package/dist/queue/base.js +2 -0
  31. package/dist/queue/base.js.map +1 -0
  32. package/dist/queue/in-memory.d.ts +9 -0
  33. package/dist/queue/in-memory.d.ts.map +1 -0
  34. package/dist/queue/in-memory.js +18 -0
  35. package/dist/queue/in-memory.js.map +1 -0
  36. package/dist/tracing/context.d.ts +12 -0
  37. package/dist/tracing/context.d.ts.map +1 -1
  38. package/dist/tracing/context.js +41 -5
  39. package/dist/tracing/context.js.map +1 -1
  40. package/dist/tracing/span.d.ts +5 -0
  41. package/dist/tracing/span.d.ts.map +1 -1
  42. package/dist/tracing/span.js +29 -0
  43. package/dist/tracing/span.js.map +1 -1
  44. package/dist/tracing/tracer.d.ts +7 -17
  45. package/dist/tracing/tracer.d.ts.map +1 -1
  46. package/dist/tracing/tracer.js +20 -39
  47. package/dist/tracing/tracer.js.map +1 -1
  48. package/dist/transport/base.d.ts +2 -22
  49. package/dist/transport/base.d.ts.map +1 -1
  50. package/dist/transport/http.d.ts +5 -28
  51. package/dist/transport/http.d.ts.map +1 -1
  52. package/dist/transport/http.js +76 -110
  53. package/dist/transport/http.js.map +1 -1
  54. package/dist/transport/stdio.d.ts +4 -16
  55. package/dist/transport/stdio.d.ts.map +1 -1
  56. package/dist/transport/stdio.js +14 -29
  57. package/dist/transport/stdio.js.map +1 -1
  58. package/dist/transport/worker.d.ts +22 -0
  59. package/dist/transport/worker.d.ts.map +1 -0
  60. package/dist/transport/worker.js +85 -0
  61. package/dist/transport/worker.js.map +1 -0
  62. package/package.json +1 -1
package/dist/index.js.map CHANGED
@@ -1,17 +1,22 @@
1
1
  {
2
2
  "version": 3,
3
- "sources": ["../src/config.ts", "../src/tracing/context.ts", "../src/tracing/span.ts", "../src/tracing/tracer.ts", "../src/utils/logging.ts", "../src/transport/http.ts", "../src/utils/serialization.ts", "../src/transport/stdio.ts"],
3
+ "sources": ["../src/agent/instance-manager.ts", "../src/agent/schema-registry.ts", "../src/config.ts", "../src/create-core.ts", "../src/queue/in-memory.ts", "../src/tracing/tracer.ts", "../src/tracing/context.ts", "../src/tracing/span.ts", "../src/utils/logging.ts", "../src/transport/http.ts", "../src/utils/serialization.ts", "../src/transport/stdio.ts", "../src/transport/worker.ts"],
4
4
  "sourcesContent": [
5
- "import { z } from 'zod';\n\n/**\n * Configuration schema for HTTP transport\n */\nexport const HttpTransportConfigSchema = z.object({\n /** API endpoint URL */\n apiUrl: z.string().url(),\n\n /** Authentication token */\n apiToken: z.string().min(1),\n\n /** Optional agent identifier */\n agentId: z.string().optional(),\n\n /** Optional agent version */\n agentVersion: z.string().optional(),\n\n /** Optional agent name */\n agentName: z.string().optional(),\n\n /** Optional agent description */\n agentDescription: z.string().optional(),\n\n /** Optional agent schema for validation (full schema object) */\n agentSchema: z.record(z.unknown()).optional(),\n\n /** Optional agent schema version identifier (string) */\n agentSchemaVersion: z.string().optional(),\n\n /** Skip schema validation */\n skipSchema: z.boolean().default(false),\n\n /** Request timeout in milliseconds */\n requestTimeout: z.number().positive().default(30000),\n\n /** Connection timeout in milliseconds */\n connectTimeout: z.number().positive().default(10000),\n\n /** Maximum number of retry attempts */\n maxRetries: z.number().int().nonnegative().default(3),\n\n /** Initial delay between retries in milliseconds */\n initialRetryDelay: z.number().positive().default(1000),\n\n /** Maximum delay between retries in milliseconds */\n maxRetryDelay: z.number().positive().default(60000),\n\n /** Multiplier for exponential backoff */\n retryMultiplier: z.number().positive().default(2.0),\n});\n\nexport type HttpTransportConfig = z.infer<typeof HttpTransportConfigSchema>;\n\n/**\n * Partial HTTP config schema for user input (before defaults are applied)\n */\nexport const PartialHttpConfigSchema = z.object({\n apiUrl: z.string().url(),\n apiToken: z.string().min(1),\n agentId: z.string().optional(),\n agentVersion: z.string().optional(),\n agentName: z.string().optional(),\n agentDescription: z.string().optional(),\n agentSchema: z.record(z.unknown()).optional(),\n agentSchemaVersion: z.string().optional(),\n skipSchema: z.boolean().optional(),\n requestTimeout: z.number().positive().optional(),\n connectTimeout: z.number().positive().optional(),\n maxRetries: z.number().int().nonnegative().optional(),\n initialRetryDelay: z.number().positive().optional(),\n maxRetryDelay: z.number().positive().optional(),\n retryMultiplier: z.number().positive().optional(),\n});\n\nexport type PartialHttpConfig = z.infer<typeof PartialHttpConfigSchema>;\n\n/**\n * Main SDK configuration schema\n */\nexport const ConfigSchema = z.object({\n /** Transport type to use for span emission */\n transportType: z.enum(['stdio', 'http']).default('stdio'),\n\n /** Sampling rate (0.0 to 1.0) */\n sampleRate: z.number().min(0).max(1).default(1.0),\n\n /** Whether to capture span inputs */\n captureInputs: z.boolean().default(true),\n\n /** Whether to capture span outputs */\n captureOutputs: z.boolean().default(true),\n\n /** Maximum length for input strings */\n maxInputLength: z.number().int().positive().default(10000),\n\n /** Maximum length for output strings */\n maxOutputLength: z.number().int().positive().default(10000),\n\n /** HTTP transport configuration (required if transportType is 'http') */\n httpConfig: PartialHttpConfigSchema.optional(),\n});\n\nexport type Config = z.infer<typeof ConfigSchema>;\n\n/**\n * Creates a validated configuration object by merging provided options with\n * environment variables and defaults.\n *\n * @param options - Partial configuration options\n * @returns Validated configuration object\n * @throws {z.ZodError} If configuration is invalid\n *\n * @example\n * ```typescript\n * const config = createConfig({\n * transportType: 'http',\n * httpConfig: {\n * apiUrl: 'https://api.prefactor.ai',\n * apiToken: process.env.PREFACTOR_API_TOKEN!,\n * }\n * });\n * ```\n */\nexport function createConfig(options?: Partial<Config>): Config {\n const config = {\n transportType:\n options?.transportType ??\n (process.env.PREFACTOR_TRANSPORT as 'stdio' | 'http' | undefined) ??\n 'stdio',\n sampleRate: options?.sampleRate ?? parseFloat(process.env.PREFACTOR_SAMPLE_RATE ?? '1.0'),\n captureInputs: options?.captureInputs ?? process.env.PREFACTOR_CAPTURE_INPUTS !== 'false',\n captureOutputs: options?.captureOutputs ?? process.env.PREFACTOR_CAPTURE_OUTPUTS !== 'false',\n maxInputLength:\n options?.maxInputLength ?? parseInt(process.env.PREFACTOR_MAX_INPUT_LENGTH ?? '10000', 10),\n maxOutputLength:\n options?.maxOutputLength ?? parseInt(process.env.PREFACTOR_MAX_OUTPUT_LENGTH ?? '10000', 10),\n httpConfig: options?.httpConfig,\n };\n\n // Validate and return\n return ConfigSchema.parse(config);\n}\n",
6
- "import { AsyncLocalStorage } from 'node:async_hooks';\nimport type { Span } from './span.js';\n\n/**\n * Storage for the current span in async context\n */\nconst spanStorage = new AsyncLocalStorage<Span>();\n\n/**\n * SpanContext manages the current span in async execution contexts.\n * This enables automatic parent-child span relationships without manual tracking.\n *\n * Uses Node.js AsyncLocalStorage which provides async-safe context propagation.\n *\n * @example\n * ```typescript\n * const span = tracer.startSpan({ name: 'parent', ... });\n *\n * await SpanContext.runAsync(span, async () => {\n * // Inside this function, getCurrent() returns the parent span\n * const parent = SpanContext.getCurrent();\n *\n * const child = tracer.startSpan({\n * name: 'child',\n * parentSpanId: parent?.spanId,\n * traceId: parent?.traceId,\n * });\n * // ...\n * });\n * ```\n */\n// biome-ignore lint/complexity/noStaticOnlyClass: Intentional API design for namespacing context operations\nexport class SpanContext {\n /**\n * Get the current span from the async context\n *\n * @returns The current span, or undefined if no span is active\n */\n static getCurrent(): Span | undefined {\n return spanStorage.getStore();\n }\n\n /**\n * Run a synchronous function with the given span as the current context\n *\n * @param span - The span to set as current\n * @param fn - The function to execute\n * @returns The return value of the function\n */\n static run<T>(span: Span, fn: () => T): T {\n return spanStorage.run(span, fn);\n }\n\n /**\n * Run an asynchronous function with the given span as the current context\n *\n * @param span - The span to set as current\n * @param fn - The async function to execute\n * @returns A promise resolving to the return value of the function\n */\n static async runAsync<T>(span: Span, fn: () => Promise<T>): Promise<T> {\n return spanStorage.run(span, fn);\n }\n\n /**\n * Clear the current context (primarily for testing)\n */\n static clear(): void {\n spanStorage.disable();\n }\n}\n",
7
- "/**\n * Types of spans that can be traced\n */\nexport enum SpanType {\n AGENT = 'agent',\n LLM = 'llm',\n TOOL = 'tool',\n CHAIN = 'chain',\n RETRIEVER = 'retriever',\n}\n\n/**\n * Status of a span\n */\nexport enum SpanStatus {\n RUNNING = 'running',\n SUCCESS = 'success',\n ERROR = 'error',\n}\n\n/**\n * Token usage information for LLM calls\n */\nexport interface TokenUsage {\n promptTokens: number;\n completionTokens: number;\n totalTokens: number;\n}\n\n/**\n * Error information captured when a span fails\n */\nexport interface ErrorInfo {\n errorType: string;\n message: string;\n stacktrace: string;\n}\n\n/**\n * A span represents a single operation in a trace\n */\nexport interface Span {\n /** Unique identifier for this span */\n spanId: string;\n\n /** ID of the parent span, or null if this is a root span */\n parentSpanId: string | null;\n\n /** Trace ID shared by all spans in a single trace */\n traceId: string;\n\n /** Human-readable name for this span */\n name: string;\n\n /** Type of operation this span represents */\n spanType: SpanType;\n\n /** Start time in milliseconds since Unix epoch */\n startTime: number;\n\n /** End time in milliseconds since Unix epoch, or null if still running */\n endTime: number | null;\n\n /** Current status of the span */\n status: SpanStatus;\n\n /** Input data for this operation */\n inputs: Record<string, unknown>;\n\n /** Output data from this operation, or null if not completed */\n outputs: Record<string, unknown> | null;\n\n /** Token usage for LLM calls, or null if not applicable */\n tokenUsage: TokenUsage | null;\n\n /** Error information if the span failed, or null if successful */\n error: ErrorInfo | null;\n\n /** Additional metadata about this span */\n metadata: Record<string, unknown>;\n\n /** Tags for categorizing and filtering spans */\n tags: string[];\n}\n",
8
- "import { generate, generatePartition, type Partition } from '@prefactor/pfid';\nimport type { Transport } from '../transport/base.js';\nimport type { Span, SpanType, TokenUsage } from './span.js';\nimport { SpanStatus } from './span.js';\n\n/**\n * Options for starting a new span\n */\nexport interface StartSpanOptions {\n /** Name of the span */\n name: string;\n\n /** Type of operation this span represents */\n spanType: SpanType;\n\n /** Input data for this operation */\n inputs: Record<string, unknown>;\n\n /** ID of the parent span (optional) */\n parentSpanId?: string;\n\n /** Trace ID to use (optional, will generate if not provided) */\n traceId?: string;\n\n /** Additional metadata (optional) */\n metadata?: Record<string, unknown>;\n\n /** Tags for categorizing the span (optional) */\n tags?: string[];\n}\n\n/**\n * Options for ending a span\n */\nexport interface EndSpanOptions {\n /** Output data from the operation */\n outputs?: Record<string, unknown>;\n\n /** Error that occurred (if any) */\n error?: Error;\n\n /** Token usage information (for LLM calls) */\n tokenUsage?: TokenUsage;\n}\n\n/**\n * Tracer manages the lifecycle of spans.\n *\n * The tracer is responsible for:\n * - Creating spans with unique IDs\n * - Managing span lifecycle (start/end)\n * - Delegating to the transport layer for span emission\n * - Handling agent instance lifecycle\n *\n * @example\n * ```typescript\n * const tracer = new Tracer(transport);\n *\n * const span = tracer.startSpan({\n * name: 'llm-call',\n * spanType: SpanType.LLM,\n * inputs: { prompt: 'Hello' }\n * });\n *\n * try {\n * // ... do work ...\n * tracer.endSpan(span, { outputs: { response: 'Hi!' } });\n * } catch (error) {\n * tracer.endSpan(span, { error });\n * }\n * ```\n */\nexport class Tracer {\n private partition: Partition;\n\n /**\n * Initialize the tracer.\n *\n * @param transport - The transport to use for emitting spans\n * @param partition - The partition for ID generation. If not provided, a random partition will be generated.\n */\n constructor(\n private transport: Transport,\n partition?: Partition\n ) {\n this.partition = partition ?? generatePartition();\n }\n\n /**\n * Start a new span\n *\n * @param options - Span configuration options\n * @returns The created span\n */\n startSpan(options: StartSpanOptions): Span {\n const spanId = generate(this.partition);\n const traceId = options.traceId ?? generate(this.partition);\n\n const span: Span = {\n spanId,\n parentSpanId: options.parentSpanId ?? null,\n traceId,\n name: options.name,\n spanType: options.spanType,\n startTime: Date.now(),\n endTime: null,\n status: SpanStatus.RUNNING,\n inputs: options.inputs,\n outputs: null,\n tokenUsage: null,\n error: null,\n metadata: options.metadata ?? {},\n tags: options.tags ?? [],\n };\n\n // AGENT spans are emitted immediately for real-time tracking\n // They will be finished later with finishSpan()\n if (options.spanType === 'agent') {\n try {\n this.transport.emit(span);\n } catch (error) {\n console.error('Failed to emit agent span:', error);\n }\n }\n\n return span;\n }\n\n /**\n * End a span and emit it to the transport\n *\n * @param span - The span to end\n * @param options - End span options (outputs, error, token usage)\n */\n endSpan(span: Span, options?: EndSpanOptions): void {\n span.endTime = Date.now();\n span.outputs = options?.outputs ?? null;\n span.tokenUsage = options?.tokenUsage ?? null;\n\n if (options?.error) {\n span.status = SpanStatus.ERROR;\n span.error = {\n errorType: options.error.constructor.name,\n message: options.error.message,\n stacktrace: options.error.stack ?? '',\n };\n } else {\n span.status = SpanStatus.SUCCESS;\n }\n\n try {\n // AGENT spans use finishSpan API (they were already emitted on start)\n // Other span types are emitted here\n if (span.spanType === 'agent') {\n this.transport.finishSpan(span.spanId, span.endTime);\n } else {\n this.transport.emit(span);\n }\n } catch (error) {\n console.error('Failed to emit/finish span:', error);\n }\n }\n\n /**\n * Signal the start of an agent instance execution\n */\n startAgentInstance(): void {\n try {\n this.transport.startAgentInstance();\n } catch (error) {\n console.error('Failed to start agent instance:', error);\n }\n }\n\n /**\n * Signal the completion of an agent instance execution\n */\n finishAgentInstance(): void {\n try {\n this.transport.finishAgentInstance();\n } catch (error) {\n console.error('Failed to finish agent instance:', error);\n }\n }\n\n /**\n * Close the tracer and flush any pending spans\n *\n * @returns Promise that resolves when the tracer is closed\n */\n async close(): Promise<void> {\n try {\n await this.transport.close();\n } catch (error) {\n console.error('Failed to close transport:', error);\n }\n }\n}\n",
5
+ "import { isDeepStrictEqual } from 'node:util';\nimport type { AgentInstanceStart, QueueAction, SchemaRegistration } from '../queue/actions.js';\nimport type { Queue } from '../queue/base.js';\nimport { SchemaRegistry } from './schema-registry.js';\n\nconst orderInsensitiveArrayKeys = new Set(['required', 'enum', 'oneOf', 'allOf', 'anyOf', 'type']);\n\nconst stableStringify = (value: unknown): string => JSON.stringify(value) ?? 'undefined';\n\nconst normalizeSchema = (value: unknown, arrayKey?: string): unknown => {\n if (Array.isArray(value)) {\n const normalizedItems = value.map((item) => normalizeSchema(item));\n if (arrayKey && orderInsensitiveArrayKeys.has(arrayKey)) {\n return normalizedItems\n .map((item) => ({ item, key: stableStringify(item) }))\n .sort((left, right) => left.key.localeCompare(right.key))\n .map(({ item }) => item);\n }\n return normalizedItems;\n }\n\n if (value && typeof value === 'object') {\n const proto = Object.getPrototypeOf(value);\n if (proto === Object.prototype || proto === null) {\n const entries = Object.entries(value as Record<string, unknown>).sort(([left], [right]) =>\n left.localeCompare(right)\n );\n const normalized: Record<string, unknown> = {};\n for (const [key, entryValue] of entries) {\n normalized[key] = normalizeSchema(entryValue, key);\n }\n return normalized;\n }\n }\n\n return value;\n};\n\nexport type AgentInstanceManagerOptions = {\n schemaName: string;\n schemaIdentifier: string;\n allowUnregisteredSchema?: boolean;\n};\n\ntype AgentInstanceStartOptions = Omit<AgentInstanceStart, 'schemaName' | 'schemaIdentifier'>;\n\nexport class AgentInstanceManager {\n private schemaRegistry = new SchemaRegistry();\n\n constructor(\n private queue: Queue<QueueAction>,\n private options: AgentInstanceManagerOptions\n ) {}\n\n registerSchema(schema: Record<string, unknown>): void {\n if (this.schemaRegistry.has(this.options.schemaName, this.options.schemaIdentifier)) {\n const existing = this.schemaRegistry.get(\n this.options.schemaName,\n this.options.schemaIdentifier\n );\n if (\n existing &&\n !isDeepStrictEqual(normalizeSchema(existing.schema), normalizeSchema(schema))\n ) {\n console.warn(\n `Schema ${this.options.schemaName}@${this.options.schemaIdentifier} is already registered with a different payload. Ignoring registration.`\n );\n }\n return;\n }\n\n const registration: SchemaRegistration = {\n schemaName: this.options.schemaName,\n schemaIdentifier: this.options.schemaIdentifier,\n schema,\n };\n\n this.schemaRegistry.register(registration);\n this.queue.enqueue({ type: 'schema_register', data: registration });\n }\n\n startInstance(options: AgentInstanceStartOptions = {}): void {\n if (\n !this.options.allowUnregisteredSchema &&\n !this.schemaRegistry.has(this.options.schemaName, this.options.schemaIdentifier)\n ) {\n console.warn(\n `Schema ${this.options.schemaName}@${this.options.schemaIdentifier} must be registered before starting an agent instance.`\n );\n return;\n }\n\n const startData: AgentInstanceStart = {\n ...options,\n schemaName: this.options.schemaName,\n schemaIdentifier: this.options.schemaIdentifier,\n };\n\n this.queue.enqueue({ type: 'agent_start', data: startData });\n }\n\n finishInstance(): void {\n this.queue.enqueue({ type: 'agent_finish', data: {} });\n }\n}\n",
6
+ "import type { SchemaRegistration } from '../queue/actions.js';\n\nexport class SchemaRegistry {\n private schemas = new Map<string, SchemaRegistration>();\n\n register(schema: SchemaRegistration): void {\n this.schemas.set(this.getKey(schema.schemaName, schema.schemaIdentifier), schema);\n }\n\n has(schemaName: string, schemaIdentifier: string): boolean {\n return this.schemas.has(this.getKey(schemaName, schemaIdentifier));\n }\n\n get(schemaName: string, schemaIdentifier: string): SchemaRegistration | undefined {\n return this.schemas.get(this.getKey(schemaName, schemaIdentifier));\n }\n\n private getKey(schemaName: string, schemaIdentifier: string): string {\n return `${schemaName}@${schemaIdentifier}`;\n }\n}\n",
7
+ "import { z } from 'zod';\n\n/**\n * Configuration schema for HTTP transport\n */\nexport const HttpTransportConfigSchema = z.object({\n /** API endpoint URL */\n apiUrl: z.string().url(),\n\n /** Authentication token */\n apiToken: z.string().min(1),\n\n /** Optional agent instance identifier (internal ID) */\n agentId: z.string().optional(),\n\n /** Agent identifier (external identifier); defaults to v1.0.0 when omitted */\n agentIdentifier: z.string().default('v1.0.0'),\n\n /** Optional agent name */\n agentName: z.string().optional(),\n\n /** Optional agent description */\n agentDescription: z.string().optional(),\n\n /** Optional schema identifier name (used for registration/agent instance) */\n schemaName: z.string().optional(),\n\n /** Optional schema identifier (used for registration/agent instance) */\n schemaIdentifier: z.string().optional(),\n\n /** Optional agent schema for validation (full schema object) */\n agentSchema: z.record(z.unknown()).optional(),\n\n /** Optional pre-registered schema identifier (external identifier string) */\n agentSchemaIdentifier: z.string().optional(),\n\n /** Skip schema validation */\n skipSchema: z.boolean().default(false),\n\n /** Request timeout in milliseconds */\n requestTimeout: z.number().positive().default(30000),\n\n /** Connection timeout in milliseconds */\n connectTimeout: z.number().positive().default(10000),\n\n /** Maximum number of retry attempts */\n maxRetries: z.number().int().nonnegative().default(3),\n\n /** Initial delay between retries in milliseconds */\n initialRetryDelay: z.number().positive().default(1000),\n\n /** Maximum delay between retries in milliseconds */\n maxRetryDelay: z.number().positive().default(60000),\n\n /** Multiplier for exponential backoff */\n retryMultiplier: z.number().positive().default(2.0),\n});\n\nexport type HttpTransportConfig = z.infer<typeof HttpTransportConfigSchema>;\n\n/**\n * Partial HTTP config schema for user input (before defaults are applied)\n */\nexport const PartialHttpConfigSchema = z.object({\n apiUrl: z.string().url(),\n apiToken: z.string().min(1),\n agentId: z.string().optional(),\n agentIdentifier: z.string().optional(),\n agentName: z.string().optional(),\n agentDescription: z.string().optional(),\n schemaName: z.string().optional(),\n schemaIdentifier: z.string().optional(),\n agentSchema: z.record(z.unknown()).optional(),\n agentSchemaIdentifier: z.string().optional(),\n skipSchema: z.boolean().optional(),\n requestTimeout: z.number().positive().optional(),\n connectTimeout: z.number().positive().optional(),\n maxRetries: z.number().int().nonnegative().optional(),\n initialRetryDelay: z.number().positive().optional(),\n maxRetryDelay: z.number().positive().optional(),\n retryMultiplier: z.number().positive().optional(),\n});\n\nexport type PartialHttpConfig = z.infer<typeof PartialHttpConfigSchema>;\n\n/**\n * Main SDK configuration schema\n */\nexport const ConfigSchema = z.object({\n /** Transport type to use for span emission */\n transportType: z.enum(['stdio', 'http']).default('stdio'),\n\n /** Sampling rate (0.0 to 1.0) */\n sampleRate: z.number().min(0).max(1).default(1.0),\n\n /** Whether to capture span inputs */\n captureInputs: z.boolean().default(true),\n\n /** Whether to capture span outputs */\n captureOutputs: z.boolean().default(true),\n\n /** Maximum length for input strings */\n maxInputLength: z.number().int().positive().default(10000),\n\n /** Maximum length for output strings */\n maxOutputLength: z.number().int().positive().default(10000),\n\n /** HTTP transport configuration (required if transportType is 'http') */\n httpConfig: PartialHttpConfigSchema.optional(),\n});\n\nexport type Config = z.infer<typeof ConfigSchema>;\n\n/**\n * Creates a validated configuration object by merging provided options with\n * environment variables and defaults.\n *\n * @param options - Partial configuration options\n * @returns Validated configuration object\n * @throws {z.ZodError} If configuration is invalid\n *\n * @example\n * ```typescript\n * const config = createConfig({\n * transportType: 'http',\n * httpConfig: {\n * apiUrl: 'https://api.prefactor.ai',\n * apiToken: process.env.PREFACTOR_API_TOKEN!,\n * }\n * });\n * ```\n */\nexport function createConfig(options?: Partial<Config>): Config {\n const config = {\n transportType:\n options?.transportType ??\n (process.env.PREFACTOR_TRANSPORT as 'stdio' | 'http' | undefined) ??\n 'stdio',\n sampleRate: options?.sampleRate ?? parseFloat(process.env.PREFACTOR_SAMPLE_RATE ?? '1.0'),\n captureInputs: options?.captureInputs ?? process.env.PREFACTOR_CAPTURE_INPUTS !== 'false',\n captureOutputs: options?.captureOutputs ?? process.env.PREFACTOR_CAPTURE_OUTPUTS !== 'false',\n maxInputLength:\n options?.maxInputLength ?? parseInt(process.env.PREFACTOR_MAX_INPUT_LENGTH ?? '10000', 10),\n maxOutputLength:\n options?.maxOutputLength ?? parseInt(process.env.PREFACTOR_MAX_OUTPUT_LENGTH ?? '10000', 10),\n httpConfig: options?.httpConfig,\n };\n\n // Validate and return\n return ConfigSchema.parse(config);\n}\n",
8
+ "import { extractPartition, type Partition } from '@prefactor/pfid';\nimport { AgentInstanceManager } from './agent/instance-manager.js';\nimport type { Config } from './config.js';\nimport { HttpTransportConfigSchema } from './config.js';\nimport type { QueueAction } from './queue/actions.js';\nimport { InMemoryQueue } from './queue/in-memory.js';\nimport { Tracer } from './tracing/tracer.js';\nimport type { Transport } from './transport/base.js';\nimport { HttpTransport } from './transport/http.js';\nimport { StdioTransport } from './transport/stdio.js';\nimport { TransportWorker } from './transport/worker.js';\n\nexport type CoreRuntime = {\n tracer: Tracer;\n agentManager: AgentInstanceManager;\n worker: TransportWorker;\n shutdown: () => Promise<void>;\n};\n\nexport function createCore(config: Config): CoreRuntime {\n let transport: Transport;\n if (config.transportType === 'stdio') {\n transport = new StdioTransport();\n } else {\n if (!config.httpConfig) {\n throw new Error('HTTP transport requires httpConfig to be provided in configuration');\n }\n const httpConfig = HttpTransportConfigSchema.parse(config.httpConfig);\n transport = new HttpTransport(httpConfig);\n }\n\n let partition: Partition | undefined;\n if (config.httpConfig?.agentId) {\n try {\n partition = extractPartition(config.httpConfig.agentId);\n } catch {\n partition = undefined;\n }\n }\n\n const queue = new InMemoryQueue<QueueAction>();\n const worker = new TransportWorker(queue, transport, { batchSize: 25, intervalMs: 50 });\n const tracer = new Tracer(queue, partition);\n\n const schemaName = config.httpConfig?.schemaName ?? 'prefactor:agent';\n const schemaIdentifier = config.httpConfig?.schemaIdentifier ?? '1.0.0';\n const allowUnregisteredSchema =\n config.transportType === 'http' &&\n Boolean(\n config.httpConfig?.skipSchema ||\n config.httpConfig?.agentSchema ||\n config.httpConfig?.agentSchemaIdentifier\n );\n const agentManager = new AgentInstanceManager(queue, {\n schemaName,\n schemaIdentifier,\n allowUnregisteredSchema,\n });\n\n const shutdown = async (): Promise<void> => {\n await worker.close();\n };\n\n return { tracer, agentManager, worker, shutdown };\n}\n",
9
+ "import type { Queue } from './base.js';\n\nexport class InMemoryQueue<T> implements Queue<T> {\n private items: T[] = [];\n\n enqueue(item: T): void {\n this.items.push(item);\n }\n\n dequeueBatch(maxItems: number): T[] {\n if (this.items.length === 0) return [];\n return this.items.splice(0, maxItems);\n }\n\n size(): number {\n return this.items.length;\n }\n\n async flush(): Promise<void> {\n return;\n }\n}\n",
10
+ "import { generate, generatePartition, type Partition } from '@prefactor/pfid';\nimport type { QueueAction } from '../queue/actions.js';\nimport type { Queue } from '../queue/base.js';\nimport { SpanContext } from './context.js';\nimport type { Span, TokenUsage } from './span.js';\nimport { SpanStatus, SpanType } from './span.js';\n\n/**\n * Options for starting a new span\n */\nexport interface StartSpanOptions {\n /** Name of the span */\n name: string;\n\n /** Type of operation this span represents */\n spanType: SpanType;\n\n /** Input data for this operation */\n inputs: Record<string, unknown>;\n\n /** Additional metadata (optional) */\n metadata?: Record<string, unknown>;\n\n /** Tags for categorizing the span (optional) */\n tags?: string[];\n}\n\n/**\n * Options for ending a span\n */\nexport interface EndSpanOptions {\n /** Output data from the operation */\n outputs?: Record<string, unknown>;\n\n /** Error that occurred (if any) */\n error?: Error;\n\n /** Token usage information (for LLM calls) */\n tokenUsage?: TokenUsage;\n}\n\n/**\n * Tracer manages the lifecycle of spans.\n *\n * The tracer is responsible for:\n * - Creating spans with unique IDs\n * - Managing span lifecycle (start/end)\n * - Delegating to the transport layer for span emission\n * - Handling agent instance lifecycle\n *\n * @example\n * ```typescript\n * const tracer = new Tracer(transport);\n *\n * const span = tracer.startSpan({\n * name: 'llm-call',\n * spanType: SpanType.LLM,\n * inputs: { prompt: 'Hello' }\n * });\n *\n * try {\n * // ... do work ...\n * tracer.endSpan(span, { outputs: { response: 'Hi!' } });\n * } catch (error) {\n * tracer.endSpan(span, { error });\n * }\n * ```\n */\nexport class Tracer {\n private partition: Partition;\n\n /**\n * Initialize the tracer.\n *\n * @param queue - The queue to use for emitting spans\n * @param partition - The partition for ID generation. If not provided, a random partition will be generated.\n */\n constructor(\n private queue: Queue<QueueAction>,\n partition?: Partition\n ) {\n this.partition = partition ?? generatePartition();\n }\n\n /**\n * Start a new span\n *\n * @param options - Span configuration options\n * @returns The created span\n */\n startSpan(options: StartSpanOptions): Span {\n const parentSpan = SpanContext.getCurrent();\n const spanId = generate(this.partition);\n const traceId = parentSpan?.traceId ?? generate(this.partition);\n\n const span: Span = {\n spanId,\n parentSpanId: parentSpan?.spanId ?? null,\n traceId,\n name: options.name,\n spanType: options.spanType,\n startTime: Date.now(),\n endTime: null,\n status: SpanStatus.RUNNING,\n inputs: options.inputs,\n outputs: null,\n tokenUsage: null,\n error: null,\n metadata: options.metadata ?? {},\n tags: options.tags ?? [],\n };\n\n // AGENT spans are emitted immediately for real-time tracking\n // They will be finished later with finishSpan()\n if (options.spanType === SpanType.AGENT) {\n try {\n this.queue.enqueue({ type: 'span_end', data: span });\n } catch (error) {\n console.error('Failed to enqueue agent span:', error);\n }\n }\n\n return span;\n }\n\n /**\n * End a span and emit it to the transport\n *\n * @param span - The span to end\n * @param options - End span options (outputs, error, token usage)\n */\n endSpan(span: Span, options?: EndSpanOptions): void {\n const endTime = Date.now();\n span.endTime = endTime;\n span.outputs = options?.outputs ?? null;\n span.tokenUsage = options?.tokenUsage ?? null;\n\n if (options?.error) {\n span.status = SpanStatus.ERROR;\n span.error = {\n errorType: options.error.constructor.name,\n message: options.error.message,\n stacktrace: options.error.stack ?? '',\n };\n } else {\n span.status = SpanStatus.SUCCESS;\n }\n\n try {\n // AGENT spans use finishSpan API (they were already emitted on start)\n // Other span types are emitted here\n if (span.spanType === SpanType.AGENT) {\n this.queue.enqueue({ type: 'span_finish', data: { spanId: span.spanId, endTime } });\n } else {\n this.queue.enqueue({ type: 'span_end', data: span });\n }\n } catch (error) {\n console.error('Failed to enqueue span action:', error);\n }\n }\n\n /**\n * Close the tracer and flush any pending spans\n *\n * @returns Promise that resolves when the tracer is closed\n */\n async close(): Promise<void> {\n try {\n await this.queue.flush();\n } catch (error) {\n console.error('Failed to flush queue:', error);\n }\n }\n}\n",
11
+ "import { AsyncLocalStorage, AsyncResource } from 'node:async_hooks';\nimport type { Span } from './span.js';\n\n/**\n * Storage for the current span stack in async context\n */\nconst spanStorage = new AsyncLocalStorage<Span[]>();\n\n/**\n * SpanContext manages the current span in async execution contexts.\n * This enables automatic parent-child span relationships without manual tracking.\n *\n * Uses Node.js AsyncLocalStorage which provides async-safe context propagation.\n *\n * @example\n * ```typescript\n * const span = tracer.startSpan({ name: 'parent', ... });\n *\n * await SpanContext.runAsync(span, async () => {\n * // Inside this function, getCurrent() returns the parent span\n * const parent = SpanContext.getCurrent();\n *\n * const child = tracer.startSpan({\n * name: 'child',\n * parentSpanId: parent?.spanId,\n * traceId: parent?.traceId,\n * });\n * // ...\n * });\n * ```\n */\n// biome-ignore lint/complexity/noStaticOnlyClass: Intentional API design for namespacing context operations\nexport class SpanContext {\n /**\n * Get the current span from the async context\n *\n * @returns The current span, or undefined if no span is active\n */\n static getCurrent(): Span | undefined {\n const stack = spanStorage.getStore() ?? [];\n return stack[stack.length - 1];\n }\n\n /**\n * Get the full span stack from the async context\n */\n static getStack(): Span[] {\n return [...(spanStorage.getStore() ?? [])];\n }\n\n /**\n * Push a span onto the stack for the current async context\n */\n static enter(span: Span): void {\n const stack = [...(spanStorage.getStore() ?? []), span];\n spanStorage.enterWith(stack);\n }\n\n /**\n * Pop the current span from the stack for the current async context\n */\n static exit(): void {\n const stack = [...(spanStorage.getStore() ?? [])];\n stack.pop();\n spanStorage.enterWith(stack);\n }\n\n /**\n * Run a synchronous function with the given span as the current context\n *\n * @param span - The span to set as current\n * @param fn - The function to execute\n * @returns The return value of the function\n */\n static run<T>(span: Span, fn: () => T): T {\n const stack = spanStorage.getStore() ?? [];\n const resource = new AsyncResource('SpanContext.run');\n\n try {\n return resource.runInAsyncScope(() => spanStorage.run([...stack, span], fn));\n } finally {\n resource.emitDestroy();\n }\n }\n\n /**\n * Run an asynchronous function with the given span as the current context\n *\n * @param span - The span to set as current\n * @param fn - The async function to execute\n * @returns A promise resolving to the return value of the function\n */\n static async runAsync<T>(span: Span, fn: () => Promise<T>): Promise<T> {\n const stack = spanStorage.getStore() ?? [];\n const resource = new AsyncResource('SpanContext.runAsync');\n\n try {\n return await resource.runInAsyncScope(() => spanStorage.run([...stack, span], fn));\n } finally {\n resource.emitDestroy();\n }\n }\n\n /**\n * Clear the current context (primarily for testing)\n */\n static clear(): void {\n spanStorage.disable();\n }\n}\n",
12
+ "/**\n * Types of spans that can be traced\n */\nexport enum SpanType {\n AGENT = 'agent',\n LLM = 'llm',\n TOOL = 'tool',\n CHAIN = 'chain',\n RETRIEVER = 'retriever',\n}\n\n/**\n * Default agent schema (v1.0.0) with span schemas for all supported types.\n * Used when no custom schema is provided during registration.\n */\nexport const DEFAULT_AGENT_SCHEMA: Record<string, unknown> = {\n external_identifier: '1.0.0',\n span_schemas: {\n agent: {\n type: 'object',\n properties: { type: { type: 'string', const: 'agent' } },\n },\n llm: {\n type: 'object',\n properties: { type: { type: 'string', const: 'llm' } },\n },\n tool: {\n type: 'object',\n properties: { type: { type: 'string', const: 'tool' } },\n },\n chain: {\n type: 'object',\n properties: { type: { type: 'string', const: 'chain' } },\n },\n retriever: {\n type: 'object',\n properties: { type: { type: 'string', const: 'retriever' } },\n },\n },\n};\n\n/**\n * Status of a span\n */\nexport enum SpanStatus {\n RUNNING = 'running',\n SUCCESS = 'success',\n ERROR = 'error',\n}\n\n/**\n * Token usage information for LLM calls\n */\nexport interface TokenUsage {\n promptTokens: number;\n completionTokens: number;\n totalTokens: number;\n}\n\n/**\n * Error information captured when a span fails\n */\nexport interface ErrorInfo {\n errorType: string;\n message: string;\n stacktrace: string;\n}\n\n/**\n * A span represents a single operation in a trace\n */\nexport interface Span {\n /** Unique identifier for this span */\n spanId: string;\n\n /** ID of the parent span, or null if this is a root span */\n parentSpanId: string | null;\n\n /** Trace ID shared by all spans in a single trace */\n traceId: string;\n\n /** Human-readable name for this span */\n name: string;\n\n /** Type of operation this span represents */\n spanType: SpanType;\n\n /** Start time in milliseconds since Unix epoch */\n startTime: number;\n\n /** End time in milliseconds since Unix epoch, or null if still running */\n endTime: number | null;\n\n /** Current status of the span */\n status: SpanStatus;\n\n /** Input data for this operation */\n inputs: Record<string, unknown>;\n\n /** Output data from this operation, or null if not completed */\n outputs: Record<string, unknown> | null;\n\n /** Token usage for LLM calls, or null if not applicable */\n tokenUsage: TokenUsage | null;\n\n /** Error information if the span failed, or null if successful */\n error: ErrorInfo | null;\n\n /** Additional metadata about this span */\n metadata: Record<string, unknown>;\n\n /** Tags for categorizing and filtering spans */\n tags: string[];\n}\n",
9
13
  "/**\n * Log levels for the SDK\n */\nenum LogLevel {\n DEBUG = 0,\n INFO = 1,\n WARN = 2,\n ERROR = 3,\n}\n\n/**\n * Logger class for the Prefactor SDK\n */\nclass Logger {\n private static level: LogLevel = LogLevel.INFO;\n\n constructor(private namespace: string) {}\n\n debug(message: string, ...args: unknown[]): void {\n if (Logger.level <= LogLevel.DEBUG) {\n console.debug(`[prefactor:${this.namespace}] ${message}`, ...args);\n }\n }\n\n info(message: string, ...args: unknown[]): void {\n if (Logger.level <= LogLevel.INFO) {\n console.info(`[prefactor:${this.namespace}] ${message}`, ...args);\n }\n }\n\n warn(message: string, ...args: unknown[]): void {\n if (Logger.level <= LogLevel.WARN) {\n console.warn(`[prefactor:${this.namespace}] ${message}`, ...args);\n }\n }\n\n error(message: string, ...args: unknown[]): void {\n if (Logger.level <= LogLevel.ERROR) {\n console.error(`[prefactor:${this.namespace}] ${message}`, ...args);\n }\n }\n\n /**\n * Set the global log level\n */\n static setLevel(level: 'debug' | 'info' | 'warn' | 'error'): void {\n const levelMap = {\n debug: LogLevel.DEBUG,\n info: LogLevel.INFO,\n warn: LogLevel.WARN,\n error: LogLevel.ERROR,\n };\n Logger.level = levelMap[level];\n }\n}\n\n/**\n * Get a logger instance for a specific namespace\n *\n * @param namespace - The namespace for this logger\n * @returns Logger instance\n */\nexport function getLogger(namespace: string): Logger {\n return new Logger(namespace);\n}\n\n/**\n * Configure logging based on environment variables\n */\nexport function configureLogging(): void {\n const level = process.env.PREFACTOR_LOG_LEVEL?.toLowerCase() as\n | 'debug'\n | 'info'\n | 'warn'\n | 'error'\n | undefined;\n\n if (level) {\n Logger.setLevel(level);\n }\n}\n",
10
- "import type { HttpTransportConfig } from '../config.js';\nimport type { Span } from '../tracing/span.js';\nimport { getLogger } from '../utils/logging.js';\nimport type { Transport } from './base.js';\n\nconst logger = getLogger('http-transport');\n\n/**\n * Queue item types for background processing\n */\ninterface QueueItem {\n type: 'span' | 'finish_span' | 'start_agent' | 'finish_agent';\n data: unknown;\n}\n\n/**\n * HTTP transport sends spans to a remote API endpoint.\n *\n * Features:\n * - Queue-based async processing\n * - Exponential backoff retry logic\n * - Span ID mapping (SDK ID → backend ID)\n * - Agent instance lifecycle management\n * - Graceful shutdown with timeout\n *\n * @example\n * ```typescript\n * const transport = new HttpTransport({\n * apiUrl: 'https://api.prefactor.ai',\n * apiToken: process.env.PREFACTOR_API_TOKEN!,\n * });\n * ```\n */\nexport class HttpTransport implements Transport {\n private queue: QueueItem[] = [];\n private processing = false;\n private closed = false;\n private agentInstanceId: string | null = null;\n private spanIdMap = new Map<string, string>();\n\n constructor(private config: HttpTransportConfig) {\n this.startProcessing();\n }\n\n /**\n * Emit a span (adds to queue for async processing)\n *\n * @param span - The span to emit\n */\n emit(span: Span): void {\n if (this.closed) {\n return;\n }\n this.queue.push({ type: 'span', data: span });\n }\n\n /**\n * Finish a previously emitted span (for AGENT spans)\n *\n * @param spanId - ID of the span to finish\n * @param endTime - End time in milliseconds since Unix epoch\n */\n finishSpan(spanId: string, endTime: number): void {\n if (this.closed) {\n return;\n }\n const timestamp = new Date(endTime).toISOString();\n this.queue.push({ type: 'finish_span', data: { spanId, timestamp } });\n }\n\n /**\n * Signal the start of an agent instance execution\n */\n startAgentInstance(): void {\n if (this.closed) {\n return;\n }\n this.queue.push({ type: 'start_agent', data: null });\n }\n\n /**\n * Signal the completion of an agent instance execution\n */\n finishAgentInstance(): void {\n if (this.closed) {\n return;\n }\n this.queue.push({ type: 'finish_agent', data: null });\n }\n\n /**\n * Start background queue processing\n */\n private async startProcessing(): Promise<void> {\n this.processing = true;\n\n while (!this.closed || this.queue.length > 0) {\n if (this.queue.length === 0) {\n await new Promise((resolve) => setTimeout(resolve, 100));\n continue;\n }\n\n const item = this.queue.shift();\n if (!item) continue;\n\n try {\n // Ensure agent is registered before processing spans\n if (!this.agentInstanceId && item.type !== 'start_agent') {\n await this.ensureAgentRegistered();\n }\n\n switch (item.type) {\n case 'span':\n await this.sendSpan(item.data as Span);\n break;\n case 'finish_span':\n await this.finishSpanHttp(item.data as { spanId: string; timestamp: string });\n break;\n case 'start_agent':\n await this.startAgentInstanceHttp();\n break;\n case 'finish_agent':\n await this.finishAgentInstanceHttp();\n break;\n }\n } catch (error) {\n logger.error('Error processing queue item:', error);\n }\n }\n\n this.processing = false;\n }\n\n /**\n * Send a span to the API\n */\n private async sendSpan(span: Span, retry = 0): Promise<void> {\n const url = `${this.config.apiUrl}/api/v1/agent_spans`;\n const payload = this.transformSpanToApiFormat(span);\n\n try {\n const response = await fetch(url, {\n method: 'POST',\n headers: {\n Authorization: `Bearer ${this.config.apiToken}`,\n 'Content-Type': 'application/json',\n },\n body: JSON.stringify(payload),\n signal: AbortSignal.timeout(this.config.requestTimeout),\n });\n\n if (response.ok) {\n const data = (await response.json()) as { details?: { id?: string } };\n const backendSpanId = data?.details?.id;\n if (backendSpanId) {\n this.spanIdMap.set(span.spanId, backendSpanId);\n }\n return;\n }\n\n // Retry on server errors or rate limiting\n if ((response.status >= 500 || response.status === 429) && retry < this.config.maxRetries) {\n const delay = Math.min(\n this.config.initialRetryDelay * this.config.retryMultiplier ** retry,\n this.config.maxRetryDelay\n );\n logger.debug(`Retrying span send after ${delay}ms (attempt ${retry + 1})`);\n await new Promise((resolve) => setTimeout(resolve, delay));\n return this.sendSpan(span, retry + 1);\n }\n\n logger.error(`Failed to send span: ${response.status} ${response.statusText}`);\n } catch (error) {\n logger.error('Error sending span:', error);\n\n // Retry on network errors\n if (retry < this.config.maxRetries) {\n const delay = Math.min(\n this.config.initialRetryDelay * this.config.retryMultiplier ** retry,\n this.config.maxRetryDelay\n );\n await new Promise((resolve) => setTimeout(resolve, delay));\n return this.sendSpan(span, retry + 1);\n }\n }\n }\n\n /**\n * Transform span to backend API format with nested details/payload structure\n */\n private transformSpanToApiFormat(span: Span): Record<string, unknown> {\n const startedAt = new Date(span.startTime).toISOString();\n const finishedAt = span.endTime ? new Date(span.endTime).toISOString() : null;\n\n // Build payload with span data\n const payload: Record<string, unknown> = {\n span_id: span.spanId,\n trace_id: span.traceId,\n name: span.name,\n status: span.status,\n inputs: span.inputs,\n outputs: span.outputs,\n metadata: span.metadata,\n tags: span.tags,\n token_usage: null,\n error: null,\n };\n\n // Add optional token_usage\n if (span.tokenUsage) {\n payload.token_usage = {\n prompt_tokens: span.tokenUsage.promptTokens,\n completion_tokens: span.tokenUsage.completionTokens,\n total_tokens: span.tokenUsage.totalTokens,\n };\n }\n\n // Add optional error\n if (span.error) {\n payload.error = {\n error_type: span.error.errorType,\n message: span.error.message,\n stacktrace: span.error.stacktrace,\n };\n }\n\n // Resolve parent span ID to backend ID\n const parentSpanId = span.parentSpanId ? (this.spanIdMap.get(span.parentSpanId) ?? null) : null;\n\n return {\n details: {\n agent_instance_id: this.agentInstanceId,\n schema_name: span.spanType,\n payload,\n parent_span_id: parentSpanId,\n started_at: startedAt,\n finished_at: finishedAt,\n },\n };\n }\n\n /**\n * Get default schema (v1.0.0) with span schemas for all supported types\n */\n private getDefaultSchema(): Record<string, unknown> {\n return {\n external_identifier: '1.0.0',\n span_schemas: {\n agent: {\n type: 'object',\n properties: { type: { type: 'string', const: 'agent' } },\n },\n llm: {\n type: 'object',\n properties: { type: { type: 'string', const: 'llm' } },\n },\n tool: {\n type: 'object',\n properties: { type: { type: 'string', const: 'tool' } },\n },\n chain: {\n type: 'object',\n properties: { type: { type: 'string', const: 'chain' } },\n },\n retriever: {\n type: 'object',\n properties: { type: { type: 'string', const: 'retriever' } },\n },\n },\n };\n }\n\n /**\n * Ensure an agent instance is registered\n */\n private async ensureAgentRegistered(): Promise<void> {\n if (this.agentInstanceId) {\n return;\n }\n\n const url = `${this.config.apiUrl}/api/v1/agent_instance/register`;\n const payload: Record<string, unknown> = {};\n\n if (this.config.agentId) payload.agent_id = this.config.agentId;\n if (this.config.agentVersion) {\n payload.agent_version = {\n external_identifier: this.config.agentVersion,\n name: this.config.agentName || 'Agent',\n description: this.config.agentDescription || '',\n };\n }\n\n // Schema handling - four modes:\n // 1. skipSchema=true: No schema in payload (pre-registered on backend)\n // 2. agentSchema provided: Use full custom schema object\n // 3. agentSchemaVersion provided: Use version identifier only\n // 4. None of above: Use default v1.0.0 schema\n if (this.config.skipSchema) {\n logger.debug('Skipping schema in registration (skipSchema=true)');\n // Do not add agent_schema_version key\n } else if (this.config.agentSchema) {\n logger.debug('Using custom agent schema');\n payload.agent_schema_version = this.config.agentSchema;\n } else if (this.config.agentSchemaVersion) {\n logger.debug(`Using schema version: ${this.config.agentSchemaVersion}`);\n payload.agent_schema_version = {\n external_identifier: this.config.agentSchemaVersion,\n };\n } else {\n logger.debug('Using default hardcoded schema (v1.0.0)');\n payload.agent_schema_version = this.getDefaultSchema();\n }\n\n try {\n const response = await fetch(url, {\n method: 'POST',\n headers: {\n Authorization: `Bearer ${this.config.apiToken}`,\n 'Content-Type': 'application/json',\n },\n body: JSON.stringify(payload),\n signal: AbortSignal.timeout(this.config.requestTimeout),\n });\n\n if (response.ok) {\n const data = (await response.json()) as { details?: { id?: string } };\n this.agentInstanceId = data?.details?.id ?? null;\n logger.debug(`Registered agent instance: ${this.agentInstanceId}`);\n } else {\n logger.error(`Failed to register agent: ${response.status} ${response.statusText}`);\n }\n } catch (error) {\n logger.error('Error registering agent:', error);\n }\n }\n\n /**\n * Start agent instance execution\n */\n private async startAgentInstanceHttp(): Promise<void> {\n await this.ensureAgentRegistered();\n\n if (!this.agentInstanceId) {\n logger.error('Cannot start agent instance: not registered');\n return;\n }\n\n const url = `${this.config.apiUrl}/api/v1/agent_instance/${this.agentInstanceId}/start`;\n\n try {\n const response = await fetch(url, {\n method: 'POST',\n headers: {\n Authorization: `Bearer ${this.config.apiToken}`,\n 'Content-Type': 'application/json',\n },\n body: JSON.stringify({}),\n signal: AbortSignal.timeout(this.config.requestTimeout),\n });\n\n if (!response.ok) {\n logger.error(`Failed to start agent instance: ${response.status} ${response.statusText}`);\n }\n } catch (error) {\n logger.error('Error starting agent instance:', error);\n }\n }\n\n /**\n * Finish agent instance execution\n */\n private async finishAgentInstanceHttp(): Promise<void> {\n if (!this.agentInstanceId) {\n logger.error('Cannot finish agent instance: not registered');\n return;\n }\n\n const url = `${this.config.apiUrl}/api/v1/agent_instance/${this.agentInstanceId}/finish`;\n\n try {\n const response = await fetch(url, {\n method: 'POST',\n headers: {\n Authorization: `Bearer ${this.config.apiToken}`,\n 'Content-Type': 'application/json',\n },\n body: JSON.stringify({}),\n signal: AbortSignal.timeout(this.config.requestTimeout),\n });\n\n if (!response.ok) {\n logger.error(`Failed to finish agent instance: ${response.status} ${response.statusText}`);\n }\n } catch (error) {\n logger.error('Error finishing agent instance:', error);\n }\n }\n\n /**\n * Finish a span via HTTP\n */\n private async finishSpanHttp(data: { spanId: string; timestamp: string }): Promise<void> {\n const backendSpanId = this.spanIdMap.get(data.spanId);\n if (!backendSpanId) {\n logger.warn(`Cannot finish span ${data.spanId}: backend ID not found`);\n return;\n }\n\n const url = `${this.config.apiUrl}/api/v1/agent_spans/${backendSpanId}/finish`;\n\n try {\n const response = await fetch(url, {\n method: 'POST',\n headers: {\n Authorization: `Bearer ${this.config.apiToken}`,\n 'Content-Type': 'application/json',\n },\n body: JSON.stringify({ timestamp: data.timestamp }),\n signal: AbortSignal.timeout(this.config.requestTimeout),\n });\n\n if (!response.ok) {\n logger.error(`Failed to finish span: ${response.status} ${response.statusText}`);\n }\n } catch (error) {\n logger.error('Error finishing span:', error);\n }\n }\n\n /**\n * Close the transport and wait for queue to drain\n *\n * @returns Promise that resolves when transport is closed\n */\n async close(): Promise<void> {\n this.closed = true;\n\n // Wait for queue to drain (with timeout)\n const timeout = 10000;\n const start = Date.now();\n while (this.processing && Date.now() - start < timeout) {\n await new Promise((resolve) => setTimeout(resolve, 100));\n }\n\n if (this.processing) {\n logger.warn('Transport closed with pending queue items');\n }\n }\n}\n",
14
+ "import type { HttpTransportConfig } from '../config.js';\nimport type { QueueAction } from '../queue/actions.js';\nimport { DEFAULT_AGENT_SCHEMA, type Span } from '../tracing/span.js';\nimport { getLogger } from '../utils/logging.js';\nimport type { Transport } from './base.js';\n\nconst logger = getLogger('http-transport');\n\n/**\n * HTTP transport sends spans to a remote API endpoint.\n *\n * Features:\n * - Exponential backoff retry logic\n * - Span ID mapping (SDK ID → backend ID)\n * - Agent instance lifecycle management\n *\n * @example\n * ```typescript\n * const transport = new HttpTransport({\n * apiUrl: 'https://api.prefactor.ai',\n * apiToken: process.env.PREFACTOR_API_TOKEN!,\n * });\n * ```\n */\nexport class HttpTransport implements Transport {\n private closed = false;\n private agentInstanceId: string | null = null;\n private spanIdMap = new Map<string, string>();\n // Pending finishes for spans that arrived before their span_end\n private pendingFinishes = new Map<string, number>();\n\n constructor(private config: HttpTransportConfig) {}\n\n async processBatch(items: QueueAction[]): Promise<void> {\n if (this.closed || items.length === 0) {\n return;\n }\n\n // First pass: apply schema updates\n for (const item of items) {\n if (item.type === 'schema_register') {\n this.config.agentSchema = item.data.schema;\n this.config.agentSchemaIdentifier = item.data.schemaIdentifier;\n this.config.schemaName = item.data.schemaName;\n this.config.schemaIdentifier = item.data.schemaIdentifier;\n }\n }\n\n // Second pass: process actions\n for (const item of items) {\n try {\n switch (item.type) {\n case 'schema_register':\n break;\n case 'agent_start':\n this.config.agentId = item.data.agentId;\n if (item.data.agentIdentifier !== undefined)\n this.config.agentIdentifier = item.data.agentIdentifier;\n this.config.agentName = item.data.agentName;\n this.config.agentDescription = item.data.agentDescription;\n await this.startAgentInstanceHttp();\n break;\n case 'agent_finish':\n await this.finishAgentInstanceHttp();\n break;\n case 'span_end':\n if (!this.agentInstanceId) {\n await this.ensureAgentRegistered();\n }\n await this.sendSpan(item.data);\n break;\n case 'span_finish': {\n const spanId = item.data.spanId;\n const backendSpanId = this.spanIdMap.get(spanId);\n if (backendSpanId) {\n // Span mapping exists, finish immediately\n const timestamp = new Date(item.data.endTime).toISOString();\n await this.finishSpanHttp({ spanId, timestamp });\n } else {\n // Defer finish until span_end creates the mapping\n this.pendingFinishes.set(spanId, item.data.endTime);\n }\n break;\n }\n }\n } catch (error) {\n logger.error('Error processing batch item:', error);\n }\n }\n }\n\n /**\n * Process any pending finishes for a span that was just registered.\n */\n private async processPendingFinishes(spanId: string): Promise<void> {\n const pendingEndTime = this.pendingFinishes.get(spanId);\n if (!pendingEndTime) {\n return;\n }\n\n try {\n const timestamp = new Date(pendingEndTime).toISOString();\n await this.finishSpanHttp({ spanId, timestamp });\n this.pendingFinishes.delete(spanId);\n } catch (error) {\n logger.error('Error processing pending span finish:', error);\n }\n }\n\n /**\n * Send a span to the API\n */\n private async sendSpan(span: Span, retry = 0): Promise<void> {\n const url = `${this.config.apiUrl}/api/v1/agent_spans`;\n const payload = this.transformSpanToApiFormat(span);\n\n try {\n const response = await fetch(url, {\n method: 'POST',\n headers: {\n Authorization: `Bearer ${this.config.apiToken}`,\n 'Content-Type': 'application/json',\n },\n body: JSON.stringify(payload),\n signal: AbortSignal.timeout(this.config.requestTimeout),\n });\n\n if (response.ok) {\n const data = (await response.json()) as { details?: { id?: string } };\n const backendSpanId = data?.details?.id;\n if (backendSpanId) {\n this.spanIdMap.set(span.spanId, backendSpanId);\n // Process any pending finishes that arrived before this span_end\n await this.processPendingFinishes(span.spanId);\n }\n return;\n }\n\n // Retry on server errors or rate limiting\n if ((response.status >= 500 || response.status === 429) && retry < this.config.maxRetries) {\n const delay = Math.min(\n this.config.initialRetryDelay * this.config.retryMultiplier ** retry,\n this.config.maxRetryDelay\n );\n logger.debug(`Retrying span send after ${delay}ms (attempt ${retry + 1})`);\n await new Promise((resolve) => setTimeout(resolve, delay));\n return this.sendSpan(span, retry + 1);\n }\n\n logger.error(`Failed to send span: ${response.status} ${response.statusText}`);\n } catch (error) {\n logger.error('Error sending span:', error);\n\n // Retry on network errors\n if (retry < this.config.maxRetries) {\n const delay = Math.min(\n this.config.initialRetryDelay * this.config.retryMultiplier ** retry,\n this.config.maxRetryDelay\n );\n await new Promise((resolve) => setTimeout(resolve, delay));\n return this.sendSpan(span, retry + 1);\n }\n }\n }\n\n /**\n * Transform span to backend API format with nested details/payload structure\n */\n private transformSpanToApiFormat(span: Span): Record<string, unknown> {\n const startedAt = new Date(span.startTime).toISOString();\n const finishedAt = span.endTime ? new Date(span.endTime).toISOString() : null;\n\n // Build payload with span data\n const payload: Record<string, unknown> = {\n span_id: span.spanId,\n trace_id: span.traceId,\n name: span.name,\n status: span.status,\n inputs: span.inputs,\n outputs: span.outputs,\n metadata: span.metadata,\n tags: span.tags,\n token_usage: null,\n error: null,\n };\n\n // Add optional token_usage\n if (span.tokenUsage) {\n payload.token_usage = {\n prompt_tokens: span.tokenUsage.promptTokens,\n completion_tokens: span.tokenUsage.completionTokens,\n total_tokens: span.tokenUsage.totalTokens,\n };\n }\n\n // Add optional error\n if (span.error) {\n payload.error = {\n error_type: span.error.errorType,\n message: span.error.message,\n stacktrace: span.error.stacktrace,\n };\n }\n\n // Resolve parent span ID to backend ID\n const parentSpanId = span.parentSpanId ? (this.spanIdMap.get(span.parentSpanId) ?? null) : null;\n\n return {\n details: {\n agent_instance_id: this.agentInstanceId,\n schema_name: span.spanType,\n payload,\n parent_span_id: parentSpanId,\n started_at: startedAt,\n finished_at: finishedAt,\n },\n };\n }\n\n /**\n * Get default schema (v1.0.0) with span schemas for all supported types\n */\n private getDefaultSchema(): Record<string, unknown> {\n return DEFAULT_AGENT_SCHEMA;\n }\n\n /**\n * Ensure an agent instance is registered\n */\n private async ensureAgentRegistered(): Promise<void> {\n if (this.agentInstanceId) {\n return;\n }\n\n const url = `${this.config.apiUrl}/api/v1/agent_instance/register`;\n const payload: Record<string, unknown> = {};\n\n if (this.config.agentId) payload.agent_id = this.config.agentId;\n if (this.config.agentIdentifier) {\n payload.agent_version = {\n external_identifier: this.config.agentIdentifier,\n name: this.config.agentName || 'Agent',\n description: this.config.agentDescription || '',\n };\n }\n\n // Schema handling - four modes:\n // 1. skipSchema=true: No schema in payload (pre-registered on backend)\n // 2. agentSchema provided: Use full custom schema object\n // 3. agentSchemaIdentifier provided: Use version identifier only\n if (this.config.skipSchema) {\n logger.debug('Skipping schema in registration (skipSchema=true)');\n // Do not add agent_schema_version key\n } else if (this.config.agentSchema) {\n logger.debug('Using custom agent schema');\n payload.agent_schema_version = this.config.agentSchema;\n } else if (this.config.agentSchemaIdentifier) {\n logger.debug(`Using schema version: ${this.config.agentSchemaIdentifier}`);\n payload.agent_schema_version = {\n external_identifier: this.config.agentSchemaIdentifier,\n };\n } else {\n logger.debug('Using default hardcoded schema (v1.0.0)');\n payload.agent_schema_version = this.getDefaultSchema();\n }\n\n try {\n const response = await fetch(url, {\n method: 'POST',\n headers: {\n Authorization: `Bearer ${this.config.apiToken}`,\n 'Content-Type': 'application/json',\n },\n body: JSON.stringify(payload),\n signal: AbortSignal.timeout(this.config.requestTimeout),\n });\n\n if (response.ok) {\n const data = (await response.json()) as { details?: { id?: string } };\n this.agentInstanceId = data?.details?.id ?? null;\n logger.debug(`Registered agent instance: ${this.agentInstanceId}`);\n } else {\n logger.error(`Failed to register agent: ${response.status} ${response.statusText}`);\n }\n } catch (error) {\n logger.error('Error registering agent:', error);\n }\n }\n\n /**\n * Start agent instance execution\n */\n private async startAgentInstanceHttp(): Promise<void> {\n await this.ensureAgentRegistered();\n\n if (!this.agentInstanceId) {\n logger.error('Cannot start agent instance: not registered');\n return;\n }\n\n const url = `${this.config.apiUrl}/api/v1/agent_instance/${this.agentInstanceId}/start`;\n\n try {\n const response = await fetch(url, {\n method: 'POST',\n headers: {\n Authorization: `Bearer ${this.config.apiToken}`,\n 'Content-Type': 'application/json',\n },\n body: JSON.stringify({}),\n signal: AbortSignal.timeout(this.config.requestTimeout),\n });\n\n if (!response.ok) {\n logger.error(`Failed to start agent instance: ${response.status} ${response.statusText}`);\n }\n } catch (error) {\n logger.error('Error starting agent instance:', error);\n }\n }\n\n /**\n * Finish agent instance execution\n */\n private async finishAgentInstanceHttp(): Promise<void> {\n if (!this.agentInstanceId) {\n logger.error('Cannot finish agent instance: not registered');\n return;\n }\n\n const url = `${this.config.apiUrl}/api/v1/agent_instance/${this.agentInstanceId}/finish`;\n\n try {\n const response = await fetch(url, {\n method: 'POST',\n headers: {\n Authorization: `Bearer ${this.config.apiToken}`,\n 'Content-Type': 'application/json',\n },\n body: JSON.stringify({}),\n signal: AbortSignal.timeout(this.config.requestTimeout),\n });\n\n if (!response.ok) {\n logger.error(`Failed to finish agent instance: ${response.status} ${response.statusText}`);\n }\n } catch (error) {\n logger.error('Error finishing agent instance:', error);\n }\n\n // Reset so the next agent_start registers a fresh instance\n this.agentInstanceId = null;\n }\n\n /**\n * Finish a span via HTTP\n */\n private async finishSpanHttp(data: { spanId: string; timestamp: string }): Promise<void> {\n const backendSpanId = this.spanIdMap.get(data.spanId);\n if (!backendSpanId) {\n logger.warn(`Cannot finish span ${data.spanId}: backend ID not found`);\n return;\n }\n\n const url = `${this.config.apiUrl}/api/v1/agent_spans/${backendSpanId}/finish`;\n\n try {\n const response = await fetch(url, {\n method: 'POST',\n headers: {\n Authorization: `Bearer ${this.config.apiToken}`,\n 'Content-Type': 'application/json',\n },\n body: JSON.stringify({ timestamp: data.timestamp }),\n signal: AbortSignal.timeout(this.config.requestTimeout),\n });\n\n if (!response.ok) {\n logger.error(`Failed to finish span: ${response.status} ${response.statusText}`);\n }\n } catch (error) {\n logger.error('Error finishing span:', error);\n }\n }\n\n /**\n * Close the transport and wait for queue to drain\n *\n * @returns Promise that resolves when transport is closed\n */\n async close(): Promise<void> {\n this.closed = true;\n\n // Log warning for any pending finishes that will never be processed\n if (this.pendingFinishes.size > 0) {\n logger.warn(\n `Transport closed with ${this.pendingFinishes.size} pending span finish(es) that could not be processed`\n );\n this.pendingFinishes.clear();\n }\n }\n}\n",
11
15
  "/**\n * Truncate a string to a maximum length, adding an ellipsis if truncated\n *\n * @param value - The string to truncate\n * @param maxLength - Maximum length\n * @returns Truncated string\n */\nexport function truncateString(value: string, maxLength: number): string {\n if (value.length <= maxLength) {\n return value;\n }\n return `${value.slice(0, maxLength)}... [truncated]`;\n}\n\n/**\n * Serialize a value for JSON output, handling non-serializable types and\n * truncating long strings\n *\n * @param value - Value to serialize\n * @param maxLength - Maximum length for strings (null for no truncation)\n * @returns Serialized value\n *\n * @example\n * ```typescript\n * const serialized = serializeValue({ message: 'Hello'.repeat(1000) }, 100);\n * // Result: { message: 'HelloHelloHello... [truncated]' }\n * ```\n */\nexport function serializeValue(value: unknown, maxLength: number | null = 10000): unknown {\n // Handle primitives that don't need serialization\n if (value === null || value === undefined) {\n return value;\n }\n\n if (typeof value === 'boolean' || typeof value === 'number') {\n return value;\n }\n\n // Handle strings with truncation\n if (typeof value === 'string') {\n return maxLength !== null ? truncateString(value, maxLength) : value;\n }\n\n // Handle arrays\n if (Array.isArray(value)) {\n return value.map((item) => serializeValue(item, maxLength));\n }\n\n // Handle objects\n if (typeof value === 'object') {\n const result: Record<string, unknown> = {};\n for (const [key, val] of Object.entries(value)) {\n result[key] = serializeValue(val, maxLength);\n }\n return result;\n }\n\n // Handle other types by converting to string\n try {\n return String(value);\n } catch {\n return `<${typeof value} object>`;\n }\n}\n",
12
- "import type { Span } from '../tracing/span.js';\nimport { serializeValue } from '../utils/serialization.js';\nimport type { Transport } from './base.js';\n\n/**\n * STDIO transport emits spans as newline-delimited JSON to stdout.\n *\n * This is the default transport and requires no configuration.\n * It's useful for local development and for piping span data to other tools.\n *\n * Features:\n * - Newline-delimited JSON output\n * - Promise-based write locking for ordering\n * - Graceful error handling\n *\n * @example\n * ```typescript\n * const transport = new StdioTransport();\n * const tracer = new Tracer(transport);\n * ```\n */\nexport class StdioTransport implements Transport {\n private closed = false;\n private writeLock = Promise.resolve();\n\n /**\n * Emit a span to stdout as JSON\n *\n * @param span - The span to emit\n */\n emit(span: Span): void {\n if (this.closed) {\n return;\n }\n\n // Queue write to maintain ordering\n this.writeLock = this.writeLock.then(async () => {\n try {\n const serialized = serializeValue(span);\n const json = JSON.stringify(serialized);\n await Bun.write(Bun.stdout, `${json}\\n`);\n } catch (error) {\n console.error('Failed to emit span to stdout:', error);\n }\n });\n }\n\n /**\n * No-op for stdio transport (not applicable)\n */\n finishSpan(): void {\n // No-op for stdio transport\n }\n\n /**\n * No-op for stdio transport (not applicable)\n */\n startAgentInstance(): void {\n // No-op for stdio transport\n }\n\n /**\n * No-op for stdio transport (not applicable)\n */\n finishAgentInstance(): void {\n // No-op for stdio transport\n }\n\n /**\n * Close the transport and wait for pending writes to complete\n *\n * @returns Promise that resolves when all writes are complete\n */\n async close(): Promise<void> {\n this.closed = true;\n await this.writeLock;\n }\n}\n"
16
+ "import type { QueueAction } from '../queue/actions.js';\nimport { serializeValue } from '../utils/serialization.js';\nimport type { Transport } from './base.js';\n\n/**\n * STDIO transport emits spans as newline-delimited JSON to stdout.\n *\n * This is the default transport and requires no configuration.\n * It's useful for local development and for piping span data to other tools.\n *\n * Features:\n * - Newline-delimited JSON output\n * - Promise-based write locking for ordering\n * - Graceful error handling\n *\n * @example\n * ```typescript\n * const transport = new StdioTransport();\n * const tracer = new Tracer(transport);\n * ```\n */\nexport class StdioTransport implements Transport {\n private closed = false;\n private writeLock = Promise.resolve();\n\n /**\n * Emit a batch of queue actions to stdout as newline-delimited JSON\n *\n * @param items - The queue actions to emit\n */\n async processBatch(items: QueueAction[]): Promise<void> {\n if (this.closed || items.length === 0) {\n return;\n }\n\n // Queue write to maintain ordering\n this.writeLock = this.writeLock.then(async () => {\n for (const item of items) {\n try {\n const serialized = serializeValue(item);\n const json = JSON.stringify(serialized);\n await Bun.write(Bun.stdout, `${json}\\n`);\n } catch (error) {\n console.error('Failed to emit queue action to stdout:', error);\n }\n }\n });\n\n await this.writeLock;\n }\n\n /**\n * Close the transport and wait for pending writes to complete\n *\n * @returns Promise that resolves when all writes are complete\n */\n async close(): Promise<void> {\n this.closed = true;\n await this.writeLock;\n }\n}\n",
17
+ "import type { QueueAction } from '../queue/actions.js';\nimport type { Queue } from '../queue/base.js';\nimport type { Transport } from './base.js';\n\ntype WorkerConfig = { batchSize: number; intervalMs: number };\n\nexport class TransportWorker {\n private closed = false;\n private inFlightPromise: Promise<void> | null = null;\n private loopPromise: Promise<void>;\n private pendingBatch: QueueAction[] | null = null;\n\n constructor(\n private queue: Queue<QueueAction>,\n private transport: Transport,\n private config: WorkerConfig\n ) {\n this.loopPromise = this.start();\n }\n\n private async start(): Promise<void> {\n while (!this.closed || this.pendingBatch || this.queue.size() > 0 || this.inFlightPromise) {\n const batch = this.pendingBatch ?? this.queue.dequeueBatch(this.config.batchSize);\n if (batch.length === 0) {\n await new Promise((resolve) => setTimeout(resolve, this.config.intervalMs));\n continue;\n }\n\n try {\n const inFlight = this.transport.processBatch(batch);\n this.inFlightPromise = inFlight;\n await inFlight;\n this.pendingBatch = null;\n } catch (error) {\n this.pendingBatch = batch;\n console.error('TransportWorker.processBatch failed', error);\n await new Promise((resolve) => setTimeout(resolve, this.config.intervalMs));\n } finally {\n this.inFlightPromise = null;\n }\n }\n }\n\n async flush(timeoutMs: number): Promise<void> {\n const start = Date.now();\n while (\n (this.queue.size() > 0 || this.pendingBatch || this.inFlightPromise) &&\n Date.now() - start < timeoutMs\n ) {\n await new Promise((resolve) => setTimeout(resolve, this.config.intervalMs));\n }\n }\n\n async close(timeoutMs = this.config.intervalMs * 50): Promise<void> {\n this.closed = true;\n const deadline = Date.now() + timeoutMs;\n const awaitWithTimeout = async (\n promise: Promise<void> | void,\n label: string,\n timeoutMs: number,\n warnOnTimeout = true\n ): Promise<boolean> => {\n if (timeoutMs <= 0) {\n if (warnOnTimeout) {\n console.warn(`TransportWorker.close timed out waiting for ${label}`);\n }\n return false;\n }\n const resolvedPromise = Promise.resolve(promise);\n let timeoutId: ReturnType<typeof setTimeout> | null = null;\n const timeoutPromise = new Promise<false>((resolve) => {\n timeoutId = setTimeout(() => resolve(false), timeoutMs);\n });\n const completed = await Promise.race([resolvedPromise.then(() => true), timeoutPromise]);\n if (timeoutId) {\n clearTimeout(timeoutId);\n }\n if (!completed && warnOnTimeout) {\n console.warn(`TransportWorker.close timed out waiting for ${label}`);\n }\n return completed;\n };\n\n const remainingTime = () => Math.max(0, deadline - Date.now());\n const loopCompleted = await awaitWithTimeout(\n this.loopPromise,\n 'loop to finish',\n remainingTime(),\n false\n );\n if (!loopCompleted) {\n console.warn(\n 'TransportWorker.close timed out waiting for loop to finish; closing transport now may cause potential data loss'\n );\n }\n const safeTransportClose = async (): Promise<void> => {\n try {\n await this.transport.close();\n } catch (error) {\n console.error('TransportWorker.close failed', error);\n }\n };\n await awaitWithTimeout(safeTransportClose(), 'transport to close', remainingTime());\n }\n}\n"
13
18
  ],
14
- "mappings": "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",
15
- "debugId": "48E67D6DE4160D4864756E2164756E21",
19
+ "mappings": "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",
20
+ "debugId": "AE4689D591D1DB9C64756E2164756E21",
16
21
  "names": []
17
22
  }
@@ -0,0 +1,35 @@
1
+ import type { Span } from '../tracing/span.js';
2
+ export type SchemaRegistration = {
3
+ schemaName: string;
4
+ schemaIdentifier: string;
5
+ schema: Record<string, unknown>;
6
+ };
7
+ export type AgentInstanceStart = {
8
+ agentId?: string;
9
+ agentIdentifier?: string;
10
+ agentName?: string;
11
+ agentDescription?: string;
12
+ schemaName: string;
13
+ schemaIdentifier: string;
14
+ };
15
+ export type AgentInstanceFinish = Record<string, never>;
16
+ export type QueueAction = {
17
+ type: 'schema_register';
18
+ data: SchemaRegistration;
19
+ } | {
20
+ type: 'agent_start';
21
+ data: AgentInstanceStart;
22
+ } | {
23
+ type: 'agent_finish';
24
+ data: AgentInstanceFinish;
25
+ } | {
26
+ type: 'span_end';
27
+ data: Span;
28
+ } | {
29
+ type: 'span_finish';
30
+ data: {
31
+ spanId: string;
32
+ endTime: number;
33
+ };
34
+ };
35
+ //# sourceMappingURL=actions.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"actions.d.ts","sourceRoot":"","sources":["../../src/queue/actions.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,oBAAoB,CAAC;AAE/C,MAAM,MAAM,kBAAkB,GAAG;IAC/B,UAAU,EAAE,MAAM,CAAC;IACnB,gBAAgB,EAAE,MAAM,CAAC;IACzB,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACjC,CAAC;AAEF,MAAM,MAAM,kBAAkB,GAAG;IAC/B,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,UAAU,EAAE,MAAM,CAAC;IACnB,gBAAgB,EAAE,MAAM,CAAC;CAC1B,CAAC;AAEF,MAAM,MAAM,mBAAmB,GAAG,MAAM,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;AAExD,MAAM,MAAM,WAAW,GACnB;IAAE,IAAI,EAAE,iBAAiB,CAAC;IAAC,IAAI,EAAE,kBAAkB,CAAA;CAAE,GACrD;IAAE,IAAI,EAAE,aAAa,CAAC;IAAC,IAAI,EAAE,kBAAkB,CAAA;CAAE,GACjD;IAAE,IAAI,EAAE,cAAc,CAAC;IAAC,IAAI,EAAE,mBAAmB,CAAA;CAAE,GACnD;IAAE,IAAI,EAAE,UAAU,CAAC;IAAC,IAAI,EAAE,IAAI,CAAA;CAAE,GAChC;IAAE,IAAI,EAAE,aAAa,CAAC;IAAC,IAAI,EAAE;QAAE,MAAM,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAA;KAAE,CAAA;CAAE,CAAC"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=actions.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"actions.js","sourceRoot":"","sources":["../../src/queue/actions.ts"],"names":[],"mappings":""}
@@ -0,0 +1,7 @@
1
+ export interface Queue<T> {
2
+ enqueue(item: T): void;
3
+ dequeueBatch(maxItems: number): T[];
4
+ size(): number;
5
+ flush(timeoutMs?: number): Promise<void>;
6
+ }
7
+ //# sourceMappingURL=base.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"base.d.ts","sourceRoot":"","sources":["../../src/queue/base.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,KAAK,CAAC,CAAC;IACtB,OAAO,CAAC,IAAI,EAAE,CAAC,GAAG,IAAI,CAAC;IACvB,YAAY,CAAC,QAAQ,EAAE,MAAM,GAAG,CAAC,EAAE,CAAC;IACpC,IAAI,IAAI,MAAM,CAAC;IACf,KAAK,CAAC,SAAS,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;CAC1C"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=base.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"base.js","sourceRoot":"","sources":["../../src/queue/base.ts"],"names":[],"mappings":""}
@@ -0,0 +1,9 @@
1
+ import type { Queue } from './base.js';
2
+ export declare class InMemoryQueue<T> implements Queue<T> {
3
+ private items;
4
+ enqueue(item: T): void;
5
+ dequeueBatch(maxItems: number): T[];
6
+ size(): number;
7
+ flush(): Promise<void>;
8
+ }
9
+ //# sourceMappingURL=in-memory.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"in-memory.d.ts","sourceRoot":"","sources":["../../src/queue/in-memory.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,WAAW,CAAC;AAEvC,qBAAa,aAAa,CAAC,CAAC,CAAE,YAAW,KAAK,CAAC,CAAC,CAAC;IAC/C,OAAO,CAAC,KAAK,CAAW;IAExB,OAAO,CAAC,IAAI,EAAE,CAAC,GAAG,IAAI;IAItB,YAAY,CAAC,QAAQ,EAAE,MAAM,GAAG,CAAC,EAAE;IAKnC,IAAI,IAAI,MAAM;IAIR,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;CAG7B"}
@@ -0,0 +1,18 @@
1
+ export class InMemoryQueue {
2
+ items = [];
3
+ enqueue(item) {
4
+ this.items.push(item);
5
+ }
6
+ dequeueBatch(maxItems) {
7
+ if (this.items.length === 0)
8
+ return [];
9
+ return this.items.splice(0, maxItems);
10
+ }
11
+ size() {
12
+ return this.items.length;
13
+ }
14
+ async flush() {
15
+ return;
16
+ }
17
+ }
18
+ //# sourceMappingURL=in-memory.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"in-memory.js","sourceRoot":"","sources":["../../src/queue/in-memory.ts"],"names":[],"mappings":"AAEA,MAAM,OAAO,aAAa;IAChB,KAAK,GAAQ,EAAE,CAAC;IAExB,OAAO,CAAC,IAAO;QACb,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACxB,CAAC;IAED,YAAY,CAAC,QAAgB;QAC3B,IAAI,IAAI,CAAC,KAAK,CAAC,MAAM,KAAK,CAAC;YAAE,OAAO,EAAE,CAAC;QACvC,OAAO,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,EAAE,QAAQ,CAAC,CAAC;IACxC,CAAC;IAED,IAAI;QACF,OAAO,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC;IAC3B,CAAC;IAED,KAAK,CAAC,KAAK;QACT,OAAO;IACT,CAAC;CACF"}
@@ -29,6 +29,18 @@ export declare class SpanContext {
29
29
  * @returns The current span, or undefined if no span is active
30
30
  */
31
31
  static getCurrent(): Span | undefined;
32
+ /**
33
+ * Get the full span stack from the async context
34
+ */
35
+ static getStack(): Span[];
36
+ /**
37
+ * Push a span onto the stack for the current async context
38
+ */
39
+ static enter(span: Span): void;
40
+ /**
41
+ * Pop the current span from the stack for the current async context
42
+ */
43
+ static exit(): void;
32
44
  /**
33
45
  * Run a synchronous function with the given span as the current context
34
46
  *
@@ -1 +1 @@
1
- {"version":3,"file":"context.d.ts","sourceRoot":"","sources":["../../src/tracing/context.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAOtC;;;;;;;;;;;;;;;;;;;;;;GAsBG;AAEH,qBAAa,WAAW;IACtB;;;;OAIG;IACH,MAAM,CAAC,UAAU,IAAI,IAAI,GAAG,SAAS;IAIrC;;;;;;OAMG;IACH,MAAM,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,EAAE,EAAE,MAAM,CAAC,GAAG,CAAC;IAIzC;;;;;;OAMG;WACU,QAAQ,CAAC,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,EAAE,EAAE,MAAM,OAAO,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC;IAItE;;OAEG;IACH,MAAM,CAAC,KAAK,IAAI,IAAI;CAGrB"}
1
+ {"version":3,"file":"context.d.ts","sourceRoot":"","sources":["../../src/tracing/context.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAOtC;;;;;;;;;;;;;;;;;;;;;;GAsBG;AAEH,qBAAa,WAAW;IACtB;;;;OAIG;IACH,MAAM,CAAC,UAAU,IAAI,IAAI,GAAG,SAAS;IAKrC;;OAEG;IACH,MAAM,CAAC,QAAQ,IAAI,IAAI,EAAE;IAIzB;;OAEG;IACH,MAAM,CAAC,KAAK,CAAC,IAAI,EAAE,IAAI,GAAG,IAAI;IAK9B;;OAEG;IACH,MAAM,CAAC,IAAI,IAAI,IAAI;IAMnB;;;;;;OAMG;IACH,MAAM,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,EAAE,EAAE,MAAM,CAAC,GAAG,CAAC;IAWzC;;;;;;OAMG;WACU,QAAQ,CAAC,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,EAAE,EAAE,MAAM,OAAO,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC;IAWtE;;OAEG;IACH,MAAM,CAAC,KAAK,IAAI,IAAI;CAGrB"}
@@ -1,6 +1,6 @@
1
- import { AsyncLocalStorage } from 'node:async_hooks';
1
+ import { AsyncLocalStorage, AsyncResource } from 'node:async_hooks';
2
2
  /**
3
- * Storage for the current span in async context
3
+ * Storage for the current span stack in async context
4
4
  */
5
5
  const spanStorage = new AsyncLocalStorage();
6
6
  /**
@@ -34,7 +34,29 @@ export class SpanContext {
34
34
  * @returns The current span, or undefined if no span is active
35
35
  */
36
36
  static getCurrent() {
37
- return spanStorage.getStore();
37
+ const stack = spanStorage.getStore() ?? [];
38
+ return stack[stack.length - 1];
39
+ }
40
+ /**
41
+ * Get the full span stack from the async context
42
+ */
43
+ static getStack() {
44
+ return [...(spanStorage.getStore() ?? [])];
45
+ }
46
+ /**
47
+ * Push a span onto the stack for the current async context
48
+ */
49
+ static enter(span) {
50
+ const stack = [...(spanStorage.getStore() ?? []), span];
51
+ spanStorage.enterWith(stack);
52
+ }
53
+ /**
54
+ * Pop the current span from the stack for the current async context
55
+ */
56
+ static exit() {
57
+ const stack = [...(spanStorage.getStore() ?? [])];
58
+ stack.pop();
59
+ spanStorage.enterWith(stack);
38
60
  }
39
61
  /**
40
62
  * Run a synchronous function with the given span as the current context
@@ -44,7 +66,14 @@ export class SpanContext {
44
66
  * @returns The return value of the function
45
67
  */
46
68
  static run(span, fn) {
47
- return spanStorage.run(span, fn);
69
+ const stack = spanStorage.getStore() ?? [];
70
+ const resource = new AsyncResource('SpanContext.run');
71
+ try {
72
+ return resource.runInAsyncScope(() => spanStorage.run([...stack, span], fn));
73
+ }
74
+ finally {
75
+ resource.emitDestroy();
76
+ }
48
77
  }
49
78
  /**
50
79
  * Run an asynchronous function with the given span as the current context
@@ -54,7 +83,14 @@ export class SpanContext {
54
83
  * @returns A promise resolving to the return value of the function
55
84
  */
56
85
  static async runAsync(span, fn) {
57
- return spanStorage.run(span, fn);
86
+ const stack = spanStorage.getStore() ?? [];
87
+ const resource = new AsyncResource('SpanContext.runAsync');
88
+ try {
89
+ return await resource.runInAsyncScope(() => spanStorage.run([...stack, span], fn));
90
+ }
91
+ finally {
92
+ resource.emitDestroy();
93
+ }
58
94
  }
59
95
  /**
60
96
  * Clear the current context (primarily for testing)
@@ -1 +1 @@
1
- {"version":3,"file":"context.js","sourceRoot":"","sources":["../../src/tracing/context.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAC;AAGrD;;GAEG;AACH,MAAM,WAAW,GAAG,IAAI,iBAAiB,EAAQ,CAAC;AAElD;;;;;;;;;;;;;;;;;;;;;;GAsBG;AACH,4GAA4G;AAC5G,MAAM,OAAO,WAAW;IACtB;;;;OAIG;IACH,MAAM,CAAC,UAAU;QACf,OAAO,WAAW,CAAC,QAAQ,EAAE,CAAC;IAChC,CAAC;IAED;;;;;;OAMG;IACH,MAAM,CAAC,GAAG,CAAI,IAAU,EAAE,EAAW;QACnC,OAAO,WAAW,CAAC,GAAG,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;IACnC,CAAC;IAED;;;;;;OAMG;IACH,MAAM,CAAC,KAAK,CAAC,QAAQ,CAAI,IAAU,EAAE,EAAoB;QACvD,OAAO,WAAW,CAAC,GAAG,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;IACnC,CAAC;IAED;;OAEG;IACH,MAAM,CAAC,KAAK;QACV,WAAW,CAAC,OAAO,EAAE,CAAC;IACxB,CAAC;CACF"}
1
+ {"version":3,"file":"context.js","sourceRoot":"","sources":["../../src/tracing/context.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AAGpE;;GAEG;AACH,MAAM,WAAW,GAAG,IAAI,iBAAiB,EAAU,CAAC;AAEpD;;;;;;;;;;;;;;;;;;;;;;GAsBG;AACH,4GAA4G;AAC5G,MAAM,OAAO,WAAW;IACtB;;;;OAIG;IACH,MAAM,CAAC,UAAU;QACf,MAAM,KAAK,GAAG,WAAW,CAAC,QAAQ,EAAE,IAAI,EAAE,CAAC;QAC3C,OAAO,KAAK,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;IACjC,CAAC;IAED;;OAEG;IACH,MAAM,CAAC,QAAQ;QACb,OAAO,CAAC,GAAG,CAAC,WAAW,CAAC,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC;IAC7C,CAAC;IAED;;OAEG;IACH,MAAM,CAAC,KAAK,CAAC,IAAU;QACrB,MAAM,KAAK,GAAG,CAAC,GAAG,CAAC,WAAW,CAAC,QAAQ,EAAE,IAAI,EAAE,CAAC,EAAE,IAAI,CAAC,CAAC;QACxD,WAAW,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;IAC/B,CAAC;IAED;;OAEG;IACH,MAAM,CAAC,IAAI;QACT,MAAM,KAAK,GAAG,CAAC,GAAG,CAAC,WAAW,CAAC,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC;QAClD,KAAK,CAAC,GAAG,EAAE,CAAC;QACZ,WAAW,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;IAC/B,CAAC;IAED;;;;;;OAMG;IACH,MAAM,CAAC,GAAG,CAAI,IAAU,EAAE,EAAW;QACnC,MAAM,KAAK,GAAG,WAAW,CAAC,QAAQ,EAAE,IAAI,EAAE,CAAC;QAC3C,MAAM,QAAQ,GAAG,IAAI,aAAa,CAAC,iBAAiB,CAAC,CAAC;QAEtD,IAAI,CAAC;YACH,OAAO,QAAQ,CAAC,eAAe,CAAC,GAAG,EAAE,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC,GAAG,KAAK,EAAE,IAAI,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC;QAC/E,CAAC;gBAAS,CAAC;YACT,QAAQ,CAAC,WAAW,EAAE,CAAC;QACzB,CAAC;IACH,CAAC;IAED;;;;;;OAMG;IACH,MAAM,CAAC,KAAK,CAAC,QAAQ,CAAI,IAAU,EAAE,EAAoB;QACvD,MAAM,KAAK,GAAG,WAAW,CAAC,QAAQ,EAAE,IAAI,EAAE,CAAC;QAC3C,MAAM,QAAQ,GAAG,IAAI,aAAa,CAAC,sBAAsB,CAAC,CAAC;QAE3D,IAAI,CAAC;YACH,OAAO,MAAM,QAAQ,CAAC,eAAe,CAAC,GAAG,EAAE,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC,GAAG,KAAK,EAAE,IAAI,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC;QACrF,CAAC;gBAAS,CAAC;YACT,QAAQ,CAAC,WAAW,EAAE,CAAC;QACzB,CAAC;IACH,CAAC;IAED;;OAEG;IACH,MAAM,CAAC,KAAK;QACV,WAAW,CAAC,OAAO,EAAE,CAAC;IACxB,CAAC;CACF"}
@@ -8,6 +8,11 @@ export declare enum SpanType {
8
8
  CHAIN = "chain",
9
9
  RETRIEVER = "retriever"
10
10
  }
11
+ /**
12
+ * Default agent schema (v1.0.0) with span schemas for all supported types.
13
+ * Used when no custom schema is provided during registration.
14
+ */
15
+ export declare const DEFAULT_AGENT_SCHEMA: Record<string, unknown>;
11
16
  /**
12
17
  * Status of a span
13
18
  */
@@ -1 +1 @@
1
- {"version":3,"file":"span.d.ts","sourceRoot":"","sources":["../../src/tracing/span.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,oBAAY,QAAQ;IAClB,KAAK,UAAU;IACf,GAAG,QAAQ;IACX,IAAI,SAAS;IACb,KAAK,UAAU;IACf,SAAS,cAAc;CACxB;AAED;;GAEG;AACH,oBAAY,UAAU;IACpB,OAAO,YAAY;IACnB,OAAO,YAAY;IACnB,KAAK,UAAU;CAChB;AAED;;GAEG;AACH,MAAM,WAAW,UAAU;IACzB,YAAY,EAAE,MAAM,CAAC;IACrB,gBAAgB,EAAE,MAAM,CAAC;IACzB,WAAW,EAAE,MAAM,CAAC;CACrB;AAED;;GAEG;AACH,MAAM,WAAW,SAAS;IACxB,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,MAAM,CAAC;IAChB,UAAU,EAAE,MAAM,CAAC;CACpB;AAED;;GAEG;AACH,MAAM,WAAW,IAAI;IACnB,sCAAsC;IACtC,MAAM,EAAE,MAAM,CAAC;IAEf,4DAA4D;IAC5D,YAAY,EAAE,MAAM,GAAG,IAAI,CAAC;IAE5B,qDAAqD;IACrD,OAAO,EAAE,MAAM,CAAC;IAEhB,wCAAwC;IACxC,IAAI,EAAE,MAAM,CAAC;IAEb,6CAA6C;IAC7C,QAAQ,EAAE,QAAQ,CAAC;IAEnB,kDAAkD;IAClD,SAAS,EAAE,MAAM,CAAC;IAElB,0EAA0E;IAC1E,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;IAEvB,iCAAiC;IACjC,MAAM,EAAE,UAAU,CAAC;IAEnB,oCAAoC;IACpC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAEhC,gEAAgE;IAChE,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI,CAAC;IAExC,2DAA2D;IAC3D,UAAU,EAAE,UAAU,GAAG,IAAI,CAAC;IAE9B,kEAAkE;IAClE,KAAK,EAAE,SAAS,GAAG,IAAI,CAAC;IAExB,0CAA0C;IAC1C,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAElC,gDAAgD;IAChD,IAAI,EAAE,MAAM,EAAE,CAAC;CAChB"}
1
+ {"version":3,"file":"span.d.ts","sourceRoot":"","sources":["../../src/tracing/span.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,oBAAY,QAAQ;IAClB,KAAK,UAAU;IACf,GAAG,QAAQ;IACX,IAAI,SAAS;IACb,KAAK,UAAU;IACf,SAAS,cAAc;CACxB;AAED;;;GAGG;AACH,eAAO,MAAM,oBAAoB,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAwBxD,CAAC;AAEF;;GAEG;AACH,oBAAY,UAAU;IACpB,OAAO,YAAY;IACnB,OAAO,YAAY;IACnB,KAAK,UAAU;CAChB;AAED;;GAEG;AACH,MAAM,WAAW,UAAU;IACzB,YAAY,EAAE,MAAM,CAAC;IACrB,gBAAgB,EAAE,MAAM,CAAC;IACzB,WAAW,EAAE,MAAM,CAAC;CACrB;AAED;;GAEG;AACH,MAAM,WAAW,SAAS;IACxB,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,MAAM,CAAC;IAChB,UAAU,EAAE,MAAM,CAAC;CACpB;AAED;;GAEG;AACH,MAAM,WAAW,IAAI;IACnB,sCAAsC;IACtC,MAAM,EAAE,MAAM,CAAC;IAEf,4DAA4D;IAC5D,YAAY,EAAE,MAAM,GAAG,IAAI,CAAC;IAE5B,qDAAqD;IACrD,OAAO,EAAE,MAAM,CAAC;IAEhB,wCAAwC;IACxC,IAAI,EAAE,MAAM,CAAC;IAEb,6CAA6C;IAC7C,QAAQ,EAAE,QAAQ,CAAC;IAEnB,kDAAkD;IAClD,SAAS,EAAE,MAAM,CAAC;IAElB,0EAA0E;IAC1E,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;IAEvB,iCAAiC;IACjC,MAAM,EAAE,UAAU,CAAC;IAEnB,oCAAoC;IACpC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAEhC,gEAAgE;IAChE,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI,CAAC;IAExC,2DAA2D;IAC3D,UAAU,EAAE,UAAU,GAAG,IAAI,CAAC;IAE9B,kEAAkE;IAClE,KAAK,EAAE,SAAS,GAAG,IAAI,CAAC;IAExB,0CAA0C;IAC1C,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAElC,gDAAgD;IAChD,IAAI,EAAE,MAAM,EAAE,CAAC;CAChB"}
@@ -9,6 +9,35 @@ export var SpanType;
9
9
  SpanType["CHAIN"] = "chain";
10
10
  SpanType["RETRIEVER"] = "retriever";
11
11
  })(SpanType || (SpanType = {}));
12
+ /**
13
+ * Default agent schema (v1.0.0) with span schemas for all supported types.
14
+ * Used when no custom schema is provided during registration.
15
+ */
16
+ export const DEFAULT_AGENT_SCHEMA = {
17
+ external_identifier: '1.0.0',
18
+ span_schemas: {
19
+ agent: {
20
+ type: 'object',
21
+ properties: { type: { type: 'string', const: 'agent' } },
22
+ },
23
+ llm: {
24
+ type: 'object',
25
+ properties: { type: { type: 'string', const: 'llm' } },
26
+ },
27
+ tool: {
28
+ type: 'object',
29
+ properties: { type: { type: 'string', const: 'tool' } },
30
+ },
31
+ chain: {
32
+ type: 'object',
33
+ properties: { type: { type: 'string', const: 'chain' } },
34
+ },
35
+ retriever: {
36
+ type: 'object',
37
+ properties: { type: { type: 'string', const: 'retriever' } },
38
+ },
39
+ },
40
+ };
12
41
  /**
13
42
  * Status of a span
14
43
  */