agentlens-sdk 0.1.2 → 0.1.4

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.cjs CHANGED
@@ -90,14 +90,9 @@ var BatchTransport = class {
90
90
  body: JSON.stringify({ traces: batch })
91
91
  });
92
92
  if (!response.ok) {
93
- const text = await response.text().catch(() => "");
94
- console.warn(
95
- `AgentLens: Failed to send traces (HTTP ${response.status}): ${text.slice(0, 200)}`
96
- );
93
+ await response.text().catch(() => "");
97
94
  }
98
- } catch (error) {
99
- const message = error instanceof Error ? error.message : String(error);
100
- console.warn(`AgentLens: Failed to send traces: ${message}`);
95
+ } catch {
101
96
  }
102
97
  }
103
98
  };
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/index.ts","../src/transport.ts","../src/_registry.ts","../src/models.ts","../src/trace.ts","../src/decision.ts"],"sourcesContent":["import { BatchTransport } from \"./transport.js\";\nimport { _setTransport, _getTransport } from \"./_registry.js\";\n\nexport interface InitOptions {\n apiKey: string;\n endpoint?: string;\n maxBatchSize?: number;\n flushInterval?: number;\n}\n\nexport function init(options: InitOptions): void {\n const existing = _getTransport();\n if (existing) {\n void existing.shutdown();\n }\n _setTransport(\n new BatchTransport({\n apiKey: options.apiKey,\n endpoint: options.endpoint ?? \"https://agentlens.vectry.tech\",\n maxBatchSize: options.maxBatchSize,\n flushInterval: options.flushInterval,\n }),\n );\n}\n\nexport async function shutdown(): Promise<void> {\n const transport = _getTransport();\n if (transport) {\n await transport.shutdown();\n _setTransport(null);\n }\n}\n\nexport function getClient(): BatchTransport | null {\n return _getTransport();\n}\n\nexport async function flush(): Promise<void> {\n const transport = _getTransport();\n if (transport) {\n await transport.flush();\n }\n}\n\nexport {\n TraceStatus,\n DecisionType,\n SpanType,\n SpanStatus,\n EventType,\n generateId,\n nowISO,\n} from \"./models.js\";\n\nexport type {\n JsonValue,\n DecisionPointPayload,\n SpanPayload,\n EventPayload,\n TracePayload,\n} from \"./models.js\";\n\nexport { BatchTransport } from \"./transport.js\";\nexport type { BatchTransportOptions } from \"./transport.js\";\n\nexport { TraceBuilder } from \"./trace.js\";\nexport type {\n TraceBuilderOptions,\n AddSpanInput,\n AddDecisionInput,\n AddEventInput,\n EndOptions,\n} from \"./trace.js\";\n\nexport { createDecision } from \"./decision.js\";\nexport type { CreateDecisionInput } from \"./decision.js\";\n","import type { TracePayload } from \"./models.js\";\n\nexport interface BatchTransportOptions {\n apiKey: string;\n endpoint: string;\n maxBatchSize?: number;\n flushInterval?: number;\n}\n\nexport class BatchTransport {\n private readonly apiKey: string;\n private readonly endpoint: string;\n private readonly maxBatchSize: number;\n private readonly flushInterval: number;\n private buffer: TracePayload[] = [];\n private timer: ReturnType<typeof setInterval> | null = null;\n\n constructor(options: BatchTransportOptions) {\n this.apiKey = options.apiKey;\n this.endpoint = options.endpoint.replace(/\\/+$/, \"\");\n this.maxBatchSize = options.maxBatchSize ?? 10;\n this.flushInterval = options.flushInterval ?? 5_000;\n\n this.timer = setInterval(() => {\n void this._doFlush();\n }, this.flushInterval);\n }\n\n add(trace: TracePayload): void {\n const idx = this.buffer.findIndex((t) => t.id === trace.id);\n if (idx !== -1) {\n this.buffer[idx] = trace;\n } else {\n this.buffer.push(trace);\n }\n if (this.buffer.length >= this.maxBatchSize) {\n void this._doFlush();\n }\n }\n\n async flush(): Promise<void> {\n await this._doFlush();\n }\n\n async shutdown(): Promise<void> {\n if (this.timer !== null) {\n clearInterval(this.timer);\n this.timer = null;\n }\n await this._doFlush();\n }\n\n private async _doFlush(): Promise<void> {\n if (this.buffer.length === 0) {\n return;\n }\n\n const batch = this.buffer.splice(0, this.buffer.length);\n\n try {\n const response = await fetch(`${this.endpoint}/api/traces`, {\n method: \"POST\",\n headers: {\n Authorization: `Bearer ${this.apiKey}`,\n \"Content-Type\": \"application/json\",\n },\n body: JSON.stringify({ traces: batch }),\n });\n\n if (!response.ok) {\n const text = await response.text().catch(() => \"\");\n console.warn(\n `AgentLens: Failed to send traces (HTTP ${response.status}): ${text.slice(0, 200)}`,\n );\n }\n } catch (error: unknown) {\n const message =\n error instanceof Error ? error.message : String(error);\n console.warn(`AgentLens: Failed to send traces: ${message}`);\n }\n }\n}\n","import type { BatchTransport } from \"./transport.js\";\n\nlet _transport: BatchTransport | null = null;\n\nexport function _setTransport(transport: BatchTransport | null): void {\n _transport = transport;\n}\n\nexport function _getTransport(): BatchTransport | null {\n return _transport;\n}\n","import { randomUUID } from \"crypto\";\n\n// ---------------------------------------------------------------------------\n// JSON value type (replaces Prisma.JsonValue for the SDK)\n// ---------------------------------------------------------------------------\n\nexport type JsonValue =\n | string\n | number\n | boolean\n | null\n | JsonValue[]\n | { [key: string]: JsonValue };\n\n// ---------------------------------------------------------------------------\n// Enums (as const + type union pattern — NO TypeScript enum keyword)\n// ---------------------------------------------------------------------------\n\nexport const TraceStatus = {\n RUNNING: \"RUNNING\",\n COMPLETED: \"COMPLETED\",\n ERROR: \"ERROR\",\n} as const;\nexport type TraceStatus = (typeof TraceStatus)[keyof typeof TraceStatus];\n\nexport const DecisionType = {\n TOOL_SELECTION: \"TOOL_SELECTION\",\n ROUTING: \"ROUTING\",\n RETRY: \"RETRY\",\n ESCALATION: \"ESCALATION\",\n MEMORY_RETRIEVAL: \"MEMORY_RETRIEVAL\",\n PLANNING: \"PLANNING\",\n CUSTOM: \"CUSTOM\",\n} as const;\nexport type DecisionType = (typeof DecisionType)[keyof typeof DecisionType];\n\nexport const SpanType = {\n LLM_CALL: \"LLM_CALL\",\n TOOL_CALL: \"TOOL_CALL\",\n MEMORY_OP: \"MEMORY_OP\",\n CHAIN: \"CHAIN\",\n AGENT: \"AGENT\",\n CUSTOM: \"CUSTOM\",\n} as const;\nexport type SpanType = (typeof SpanType)[keyof typeof SpanType];\n\nexport const SpanStatus = {\n RUNNING: \"RUNNING\",\n COMPLETED: \"COMPLETED\",\n ERROR: \"ERROR\",\n} as const;\nexport type SpanStatus = (typeof SpanStatus)[keyof typeof SpanStatus];\n\nexport const EventType = {\n ERROR: \"ERROR\",\n RETRY: \"RETRY\",\n FALLBACK: \"FALLBACK\",\n CONTEXT_OVERFLOW: \"CONTEXT_OVERFLOW\",\n USER_FEEDBACK: \"USER_FEEDBACK\",\n CUSTOM: \"CUSTOM\",\n} as const;\nexport type EventType = (typeof EventType)[keyof typeof EventType];\n\n// ---------------------------------------------------------------------------\n// Wire-format interfaces (camelCase, matching POST /api/traces contract)\n// ---------------------------------------------------------------------------\n\nexport interface DecisionPointPayload {\n id: string;\n type: DecisionType;\n chosen: JsonValue;\n alternatives: JsonValue[];\n reasoning?: string;\n contextSnapshot?: JsonValue;\n durationMs?: number;\n costUsd?: number;\n parentSpanId?: string;\n timestamp: string;\n}\n\nexport interface SpanPayload {\n id: string;\n parentSpanId?: string;\n name: string;\n type: SpanType;\n input?: JsonValue;\n output?: JsonValue;\n tokenCount?: number;\n costUsd?: number;\n durationMs?: number;\n status: SpanStatus;\n statusMessage?: string;\n startedAt: string;\n endedAt?: string;\n metadata?: JsonValue;\n}\n\nexport interface EventPayload {\n id: string;\n spanId?: string;\n type: EventType;\n name: string;\n metadata?: JsonValue;\n timestamp: string;\n}\n\nexport interface TracePayload {\n id: string;\n name: string;\n sessionId?: string;\n status: TraceStatus;\n tags: string[];\n metadata?: JsonValue;\n totalCost?: number;\n totalTokens?: number;\n totalDuration?: number;\n startedAt: string;\n endedAt?: string;\n decisionPoints: DecisionPointPayload[];\n spans: SpanPayload[];\n events: EventPayload[];\n}\n\n// ---------------------------------------------------------------------------\n// Helper functions\n// ---------------------------------------------------------------------------\n\n/** Generate a v4 UUID. */\nexport function generateId(): string {\n return randomUUID();\n}\n\n/** Return the current time as an ISO-8601 string. */\nexport function nowISO(): string {\n return new Date().toISOString();\n}\n","import type {\n TracePayload,\n SpanPayload,\n DecisionPointPayload,\n EventPayload,\n JsonValue,\n TraceStatus,\n SpanType,\n SpanStatus,\n DecisionType,\n EventType,\n} from \"./models.js\";\nimport {\n generateId,\n nowISO,\n TraceStatus as TraceStatusValues,\n SpanStatus as SpanStatusValues,\n} from \"./models.js\";\nimport { _getTransport } from \"./_registry.js\";\n\nexport interface TraceBuilderOptions {\n sessionId?: string;\n tags?: string[];\n metadata?: JsonValue;\n}\n\nexport interface AddSpanInput {\n id?: string;\n parentSpanId?: string;\n name: string;\n type: SpanType;\n input?: JsonValue;\n output?: JsonValue;\n tokenCount?: number;\n costUsd?: number;\n durationMs?: number;\n status?: SpanStatus;\n statusMessage?: string;\n startedAt?: string;\n endedAt?: string;\n metadata?: JsonValue;\n}\n\nexport interface AddDecisionInput {\n id?: string;\n type: DecisionType;\n chosen: JsonValue;\n alternatives?: JsonValue[];\n reasoning?: string;\n contextSnapshot?: JsonValue;\n durationMs?: number;\n costUsd?: number;\n parentSpanId?: string;\n timestamp?: string;\n}\n\nexport interface AddEventInput {\n id?: string;\n spanId?: string;\n type: EventType;\n name: string;\n metadata?: JsonValue;\n timestamp?: string;\n}\n\nexport interface EndOptions {\n status?: TraceStatus;\n metadata?: JsonValue;\n totalCost?: number;\n totalTokens?: number;\n}\n\nexport class TraceBuilder {\n private readonly trace: TracePayload;\n private readonly startMs: number;\n\n constructor(name: string, options?: TraceBuilderOptions) {\n this.startMs = Date.now();\n this.trace = {\n id: generateId(),\n name,\n sessionId: options?.sessionId,\n status: TraceStatusValues.RUNNING,\n tags: options?.tags ?? [],\n metadata: options?.metadata,\n startedAt: nowISO(),\n decisionPoints: [],\n spans: [],\n events: [],\n };\n }\n\n addSpan(input: AddSpanInput): string {\n const id = input.id ?? generateId();\n const span: SpanPayload = {\n id,\n parentSpanId: input.parentSpanId,\n name: input.name,\n type: input.type,\n input: input.input,\n output: input.output,\n tokenCount: input.tokenCount,\n costUsd: input.costUsd,\n durationMs: input.durationMs,\n status: input.status ?? SpanStatusValues.RUNNING,\n statusMessage: input.statusMessage,\n startedAt: input.startedAt ?? nowISO(),\n endedAt: input.endedAt,\n metadata: input.metadata,\n };\n this.trace.spans.push(span);\n return id;\n }\n\n addDecision(input: AddDecisionInput): string {\n const id = input.id ?? generateId();\n const decision: DecisionPointPayload = {\n id,\n type: input.type,\n chosen: input.chosen,\n alternatives: input.alternatives ?? [],\n reasoning: input.reasoning,\n contextSnapshot: input.contextSnapshot,\n durationMs: input.durationMs,\n costUsd: input.costUsd,\n parentSpanId: input.parentSpanId,\n timestamp: input.timestamp ?? nowISO(),\n };\n this.trace.decisionPoints.push(decision);\n return id;\n }\n\n addEvent(input: AddEventInput): string {\n const id = input.id ?? generateId();\n const event: EventPayload = {\n id,\n spanId: input.spanId,\n type: input.type,\n name: input.name,\n metadata: input.metadata,\n timestamp: input.timestamp ?? nowISO(),\n };\n this.trace.events.push(event);\n return id;\n }\n\n setStatus(status: TraceStatus): this {\n this.trace.status = status;\n return this;\n }\n\n setMetadata(metadata: JsonValue): this {\n this.trace.metadata = metadata;\n return this;\n }\n\n toPayload(): TracePayload {\n return { ...this.trace };\n }\n\n end(options?: EndOptions): TracePayload {\n const endedAt = nowISO();\n this.trace.endedAt = endedAt;\n this.trace.totalDuration = Date.now() - this.startMs;\n this.trace.status =\n options?.status ?? TraceStatusValues.COMPLETED;\n\n if (options?.metadata !== undefined) {\n this.trace.metadata = options.metadata;\n }\n if (options?.totalCost !== undefined) {\n this.trace.totalCost = options.totalCost;\n }\n if (options?.totalTokens !== undefined) {\n this.trace.totalTokens = options.totalTokens;\n }\n\n const transport = _getTransport();\n if (transport) {\n transport.add(this.trace);\n }\n\n return { ...this.trace };\n }\n}\n","import type { DecisionPointPayload, DecisionType, JsonValue } from \"./models.js\";\nimport { generateId, nowISO } from \"./models.js\";\n\nexport interface CreateDecisionInput {\n type: DecisionType;\n chosen: JsonValue;\n alternatives?: JsonValue[];\n reasoning?: string;\n contextSnapshot?: JsonValue;\n durationMs?: number;\n costUsd?: number;\n parentSpanId?: string;\n timestamp?: string;\n}\n\nexport function createDecision(input: CreateDecisionInput): DecisionPointPayload {\n return {\n id: generateId(),\n type: input.type,\n chosen: input.chosen,\n alternatives: input.alternatives ?? [],\n reasoning: input.reasoning,\n contextSnapshot: input.contextSnapshot,\n durationMs: input.durationMs,\n costUsd: input.costUsd,\n parentSpanId: input.parentSpanId,\n timestamp: input.timestamp ?? nowISO(),\n };\n}\n"],"mappings":"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","names":[]}
1
+ {"version":3,"sources":["../src/index.ts","../src/transport.ts","../src/_registry.ts","../src/models.ts","../src/trace.ts","../src/decision.ts"],"sourcesContent":["import { BatchTransport } from \"./transport.js\";\nimport { _setTransport, _getTransport } from \"./_registry.js\";\n\nexport interface InitOptions {\n apiKey: string;\n endpoint?: string;\n maxBatchSize?: number;\n flushInterval?: number;\n}\n\nexport function init(options: InitOptions): void {\n const existing = _getTransport();\n if (existing) {\n void existing.shutdown();\n }\n _setTransport(\n new BatchTransport({\n apiKey: options.apiKey,\n endpoint: options.endpoint ?? \"https://agentlens.vectry.tech\",\n maxBatchSize: options.maxBatchSize,\n flushInterval: options.flushInterval,\n }),\n );\n}\n\nexport async function shutdown(): Promise<void> {\n const transport = _getTransport();\n if (transport) {\n await transport.shutdown();\n _setTransport(null);\n }\n}\n\nexport function getClient(): BatchTransport | null {\n return _getTransport();\n}\n\nexport async function flush(): Promise<void> {\n const transport = _getTransport();\n if (transport) {\n await transport.flush();\n }\n}\n\nexport {\n TraceStatus,\n DecisionType,\n SpanType,\n SpanStatus,\n EventType,\n generateId,\n nowISO,\n} from \"./models.js\";\n\nexport type {\n JsonValue,\n DecisionPointPayload,\n SpanPayload,\n EventPayload,\n TracePayload,\n} from \"./models.js\";\n\nexport { BatchTransport } from \"./transport.js\";\nexport type { BatchTransportOptions } from \"./transport.js\";\n\nexport { TraceBuilder } from \"./trace.js\";\nexport type {\n TraceBuilderOptions,\n AddSpanInput,\n AddDecisionInput,\n AddEventInput,\n EndOptions,\n} from \"./trace.js\";\n\nexport { createDecision } from \"./decision.js\";\nexport type { CreateDecisionInput } from \"./decision.js\";\n","import type { TracePayload } from \"./models.js\";\n\nexport interface BatchTransportOptions {\n apiKey: string;\n endpoint: string;\n maxBatchSize?: number;\n flushInterval?: number;\n}\n\nexport class BatchTransport {\n private readonly apiKey: string;\n private readonly endpoint: string;\n private readonly maxBatchSize: number;\n private readonly flushInterval: number;\n private buffer: TracePayload[] = [];\n private timer: ReturnType<typeof setInterval> | null = null;\n\n constructor(options: BatchTransportOptions) {\n this.apiKey = options.apiKey;\n this.endpoint = options.endpoint.replace(/\\/+$/, \"\");\n this.maxBatchSize = options.maxBatchSize ?? 10;\n this.flushInterval = options.flushInterval ?? 5_000;\n\n this.timer = setInterval(() => {\n void this._doFlush();\n }, this.flushInterval);\n }\n\n add(trace: TracePayload): void {\n const idx = this.buffer.findIndex((t) => t.id === trace.id);\n if (idx !== -1) {\n this.buffer[idx] = trace;\n } else {\n this.buffer.push(trace);\n }\n if (this.buffer.length >= this.maxBatchSize) {\n void this._doFlush();\n }\n }\n\n async flush(): Promise<void> {\n await this._doFlush();\n }\n\n async shutdown(): Promise<void> {\n if (this.timer !== null) {\n clearInterval(this.timer);\n this.timer = null;\n }\n await this._doFlush();\n }\n\n private async _doFlush(): Promise<void> {\n if (this.buffer.length === 0) {\n return;\n }\n\n const batch = this.buffer.splice(0, this.buffer.length);\n\n try {\n const response = await fetch(`${this.endpoint}/api/traces`, {\n method: \"POST\",\n headers: {\n Authorization: `Bearer ${this.apiKey}`,\n \"Content-Type\": \"application/json\",\n },\n body: JSON.stringify({ traces: batch }),\n });\n\n if (!response.ok) {\n await response.text().catch(() => \"\");\n }\n } catch {\n }\n }\n}\n","import type { BatchTransport } from \"./transport.js\";\n\nlet _transport: BatchTransport | null = null;\n\nexport function _setTransport(transport: BatchTransport | null): void {\n _transport = transport;\n}\n\nexport function _getTransport(): BatchTransport | null {\n return _transport;\n}\n","import { randomUUID } from \"crypto\";\n\n// ---------------------------------------------------------------------------\n// JSON value type (replaces Prisma.JsonValue for the SDK)\n// ---------------------------------------------------------------------------\n\nexport type JsonValue =\n | string\n | number\n | boolean\n | null\n | JsonValue[]\n | { [key: string]: JsonValue };\n\n// ---------------------------------------------------------------------------\n// Enums (as const + type union pattern — NO TypeScript enum keyword)\n// ---------------------------------------------------------------------------\n\nexport const TraceStatus = {\n RUNNING: \"RUNNING\",\n COMPLETED: \"COMPLETED\",\n ERROR: \"ERROR\",\n} as const;\nexport type TraceStatus = (typeof TraceStatus)[keyof typeof TraceStatus];\n\nexport const DecisionType = {\n TOOL_SELECTION: \"TOOL_SELECTION\",\n ROUTING: \"ROUTING\",\n RETRY: \"RETRY\",\n ESCALATION: \"ESCALATION\",\n MEMORY_RETRIEVAL: \"MEMORY_RETRIEVAL\",\n PLANNING: \"PLANNING\",\n CUSTOM: \"CUSTOM\",\n} as const;\nexport type DecisionType = (typeof DecisionType)[keyof typeof DecisionType];\n\nexport const SpanType = {\n LLM_CALL: \"LLM_CALL\",\n TOOL_CALL: \"TOOL_CALL\",\n MEMORY_OP: \"MEMORY_OP\",\n CHAIN: \"CHAIN\",\n AGENT: \"AGENT\",\n CUSTOM: \"CUSTOM\",\n} as const;\nexport type SpanType = (typeof SpanType)[keyof typeof SpanType];\n\nexport const SpanStatus = {\n RUNNING: \"RUNNING\",\n COMPLETED: \"COMPLETED\",\n ERROR: \"ERROR\",\n} as const;\nexport type SpanStatus = (typeof SpanStatus)[keyof typeof SpanStatus];\n\nexport const EventType = {\n ERROR: \"ERROR\",\n RETRY: \"RETRY\",\n FALLBACK: \"FALLBACK\",\n CONTEXT_OVERFLOW: \"CONTEXT_OVERFLOW\",\n USER_FEEDBACK: \"USER_FEEDBACK\",\n CUSTOM: \"CUSTOM\",\n} as const;\nexport type EventType = (typeof EventType)[keyof typeof EventType];\n\n// ---------------------------------------------------------------------------\n// Wire-format interfaces (camelCase, matching POST /api/traces contract)\n// ---------------------------------------------------------------------------\n\nexport interface DecisionPointPayload {\n id: string;\n type: DecisionType;\n chosen: JsonValue;\n alternatives: JsonValue[];\n reasoning?: string;\n contextSnapshot?: JsonValue;\n durationMs?: number;\n costUsd?: number;\n parentSpanId?: string;\n timestamp: string;\n}\n\nexport interface SpanPayload {\n id: string;\n parentSpanId?: string;\n name: string;\n type: SpanType;\n input?: JsonValue;\n output?: JsonValue;\n tokenCount?: number;\n costUsd?: number;\n durationMs?: number;\n status: SpanStatus;\n statusMessage?: string;\n startedAt: string;\n endedAt?: string;\n metadata?: JsonValue;\n}\n\nexport interface EventPayload {\n id: string;\n spanId?: string;\n type: EventType;\n name: string;\n metadata?: JsonValue;\n timestamp: string;\n}\n\nexport interface TracePayload {\n id: string;\n name: string;\n sessionId?: string;\n status: TraceStatus;\n tags: string[];\n metadata?: JsonValue;\n totalCost?: number;\n totalTokens?: number;\n totalDuration?: number;\n startedAt: string;\n endedAt?: string;\n decisionPoints: DecisionPointPayload[];\n spans: SpanPayload[];\n events: EventPayload[];\n}\n\n// ---------------------------------------------------------------------------\n// Helper functions\n// ---------------------------------------------------------------------------\n\n/** Generate a v4 UUID. */\nexport function generateId(): string {\n return randomUUID();\n}\n\n/** Return the current time as an ISO-8601 string. */\nexport function nowISO(): string {\n return new Date().toISOString();\n}\n","import type {\n TracePayload,\n SpanPayload,\n DecisionPointPayload,\n EventPayload,\n JsonValue,\n TraceStatus,\n SpanType,\n SpanStatus,\n DecisionType,\n EventType,\n} from \"./models.js\";\nimport {\n generateId,\n nowISO,\n TraceStatus as TraceStatusValues,\n SpanStatus as SpanStatusValues,\n} from \"./models.js\";\nimport { _getTransport } from \"./_registry.js\";\n\nexport interface TraceBuilderOptions {\n sessionId?: string;\n tags?: string[];\n metadata?: JsonValue;\n}\n\nexport interface AddSpanInput {\n id?: string;\n parentSpanId?: string;\n name: string;\n type: SpanType;\n input?: JsonValue;\n output?: JsonValue;\n tokenCount?: number;\n costUsd?: number;\n durationMs?: number;\n status?: SpanStatus;\n statusMessage?: string;\n startedAt?: string;\n endedAt?: string;\n metadata?: JsonValue;\n}\n\nexport interface AddDecisionInput {\n id?: string;\n type: DecisionType;\n chosen: JsonValue;\n alternatives?: JsonValue[];\n reasoning?: string;\n contextSnapshot?: JsonValue;\n durationMs?: number;\n costUsd?: number;\n parentSpanId?: string;\n timestamp?: string;\n}\n\nexport interface AddEventInput {\n id?: string;\n spanId?: string;\n type: EventType;\n name: string;\n metadata?: JsonValue;\n timestamp?: string;\n}\n\nexport interface EndOptions {\n status?: TraceStatus;\n metadata?: JsonValue;\n totalCost?: number;\n totalTokens?: number;\n}\n\nexport class TraceBuilder {\n private readonly trace: TracePayload;\n private readonly startMs: number;\n\n constructor(name: string, options?: TraceBuilderOptions) {\n this.startMs = Date.now();\n this.trace = {\n id: generateId(),\n name,\n sessionId: options?.sessionId,\n status: TraceStatusValues.RUNNING,\n tags: options?.tags ?? [],\n metadata: options?.metadata,\n startedAt: nowISO(),\n decisionPoints: [],\n spans: [],\n events: [],\n };\n }\n\n addSpan(input: AddSpanInput): string {\n const id = input.id ?? generateId();\n const span: SpanPayload = {\n id,\n parentSpanId: input.parentSpanId,\n name: input.name,\n type: input.type,\n input: input.input,\n output: input.output,\n tokenCount: input.tokenCount,\n costUsd: input.costUsd,\n durationMs: input.durationMs,\n status: input.status ?? SpanStatusValues.RUNNING,\n statusMessage: input.statusMessage,\n startedAt: input.startedAt ?? nowISO(),\n endedAt: input.endedAt,\n metadata: input.metadata,\n };\n this.trace.spans.push(span);\n return id;\n }\n\n addDecision(input: AddDecisionInput): string {\n const id = input.id ?? generateId();\n const decision: DecisionPointPayload = {\n id,\n type: input.type,\n chosen: input.chosen,\n alternatives: input.alternatives ?? [],\n reasoning: input.reasoning,\n contextSnapshot: input.contextSnapshot,\n durationMs: input.durationMs,\n costUsd: input.costUsd,\n parentSpanId: input.parentSpanId,\n timestamp: input.timestamp ?? nowISO(),\n };\n this.trace.decisionPoints.push(decision);\n return id;\n }\n\n addEvent(input: AddEventInput): string {\n const id = input.id ?? generateId();\n const event: EventPayload = {\n id,\n spanId: input.spanId,\n type: input.type,\n name: input.name,\n metadata: input.metadata,\n timestamp: input.timestamp ?? nowISO(),\n };\n this.trace.events.push(event);\n return id;\n }\n\n setStatus(status: TraceStatus): this {\n this.trace.status = status;\n return this;\n }\n\n setMetadata(metadata: JsonValue): this {\n this.trace.metadata = metadata;\n return this;\n }\n\n toPayload(): TracePayload {\n return { ...this.trace };\n }\n\n end(options?: EndOptions): TracePayload {\n const endedAt = nowISO();\n this.trace.endedAt = endedAt;\n this.trace.totalDuration = Date.now() - this.startMs;\n this.trace.status =\n options?.status ?? TraceStatusValues.COMPLETED;\n\n if (options?.metadata !== undefined) {\n this.trace.metadata = options.metadata;\n }\n if (options?.totalCost !== undefined) {\n this.trace.totalCost = options.totalCost;\n }\n if (options?.totalTokens !== undefined) {\n this.trace.totalTokens = options.totalTokens;\n }\n\n const transport = _getTransport();\n if (transport) {\n transport.add(this.trace);\n }\n\n return { ...this.trace };\n }\n}\n","import type { DecisionPointPayload, DecisionType, JsonValue } from \"./models.js\";\nimport { generateId, nowISO } from \"./models.js\";\n\nexport interface CreateDecisionInput {\n type: DecisionType;\n chosen: JsonValue;\n alternatives?: JsonValue[];\n reasoning?: string;\n contextSnapshot?: JsonValue;\n durationMs?: number;\n costUsd?: number;\n parentSpanId?: string;\n timestamp?: string;\n}\n\nexport function createDecision(input: CreateDecisionInput): DecisionPointPayload {\n return {\n id: generateId(),\n type: input.type,\n chosen: input.chosen,\n alternatives: input.alternatives ?? [],\n reasoning: input.reasoning,\n contextSnapshot: input.contextSnapshot,\n durationMs: input.durationMs,\n costUsd: input.costUsd,\n parentSpanId: input.parentSpanId,\n timestamp: input.timestamp ?? nowISO(),\n };\n}\n"],"mappings":"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","names":[]}
package/dist/index.js CHANGED
@@ -51,14 +51,9 @@ var BatchTransport = class {
51
51
  body: JSON.stringify({ traces: batch })
52
52
  });
53
53
  if (!response.ok) {
54
- const text = await response.text().catch(() => "");
55
- console.warn(
56
- `AgentLens: Failed to send traces (HTTP ${response.status}): ${text.slice(0, 200)}`
57
- );
54
+ await response.text().catch(() => "");
58
55
  }
59
- } catch (error) {
60
- const message = error instanceof Error ? error.message : String(error);
61
- console.warn(`AgentLens: Failed to send traces: ${message}`);
56
+ } catch {
62
57
  }
63
58
  }
64
59
  };
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/transport.ts","../src/_registry.ts","../src/models.ts","../src/trace.ts","../src/decision.ts","../src/index.ts"],"sourcesContent":["import type { TracePayload } from \"./models.js\";\n\nexport interface BatchTransportOptions {\n apiKey: string;\n endpoint: string;\n maxBatchSize?: number;\n flushInterval?: number;\n}\n\nexport class BatchTransport {\n private readonly apiKey: string;\n private readonly endpoint: string;\n private readonly maxBatchSize: number;\n private readonly flushInterval: number;\n private buffer: TracePayload[] = [];\n private timer: ReturnType<typeof setInterval> | null = null;\n\n constructor(options: BatchTransportOptions) {\n this.apiKey = options.apiKey;\n this.endpoint = options.endpoint.replace(/\\/+$/, \"\");\n this.maxBatchSize = options.maxBatchSize ?? 10;\n this.flushInterval = options.flushInterval ?? 5_000;\n\n this.timer = setInterval(() => {\n void this._doFlush();\n }, this.flushInterval);\n }\n\n add(trace: TracePayload): void {\n const idx = this.buffer.findIndex((t) => t.id === trace.id);\n if (idx !== -1) {\n this.buffer[idx] = trace;\n } else {\n this.buffer.push(trace);\n }\n if (this.buffer.length >= this.maxBatchSize) {\n void this._doFlush();\n }\n }\n\n async flush(): Promise<void> {\n await this._doFlush();\n }\n\n async shutdown(): Promise<void> {\n if (this.timer !== null) {\n clearInterval(this.timer);\n this.timer = null;\n }\n await this._doFlush();\n }\n\n private async _doFlush(): Promise<void> {\n if (this.buffer.length === 0) {\n return;\n }\n\n const batch = this.buffer.splice(0, this.buffer.length);\n\n try {\n const response = await fetch(`${this.endpoint}/api/traces`, {\n method: \"POST\",\n headers: {\n Authorization: `Bearer ${this.apiKey}`,\n \"Content-Type\": \"application/json\",\n },\n body: JSON.stringify({ traces: batch }),\n });\n\n if (!response.ok) {\n const text = await response.text().catch(() => \"\");\n console.warn(\n `AgentLens: Failed to send traces (HTTP ${response.status}): ${text.slice(0, 200)}`,\n );\n }\n } catch (error: unknown) {\n const message =\n error instanceof Error ? error.message : String(error);\n console.warn(`AgentLens: Failed to send traces: ${message}`);\n }\n }\n}\n","import type { BatchTransport } from \"./transport.js\";\n\nlet _transport: BatchTransport | null = null;\n\nexport function _setTransport(transport: BatchTransport | null): void {\n _transport = transport;\n}\n\nexport function _getTransport(): BatchTransport | null {\n return _transport;\n}\n","import { randomUUID } from \"crypto\";\n\n// ---------------------------------------------------------------------------\n// JSON value type (replaces Prisma.JsonValue for the SDK)\n// ---------------------------------------------------------------------------\n\nexport type JsonValue =\n | string\n | number\n | boolean\n | null\n | JsonValue[]\n | { [key: string]: JsonValue };\n\n// ---------------------------------------------------------------------------\n// Enums (as const + type union pattern — NO TypeScript enum keyword)\n// ---------------------------------------------------------------------------\n\nexport const TraceStatus = {\n RUNNING: \"RUNNING\",\n COMPLETED: \"COMPLETED\",\n ERROR: \"ERROR\",\n} as const;\nexport type TraceStatus = (typeof TraceStatus)[keyof typeof TraceStatus];\n\nexport const DecisionType = {\n TOOL_SELECTION: \"TOOL_SELECTION\",\n ROUTING: \"ROUTING\",\n RETRY: \"RETRY\",\n ESCALATION: \"ESCALATION\",\n MEMORY_RETRIEVAL: \"MEMORY_RETRIEVAL\",\n PLANNING: \"PLANNING\",\n CUSTOM: \"CUSTOM\",\n} as const;\nexport type DecisionType = (typeof DecisionType)[keyof typeof DecisionType];\n\nexport const SpanType = {\n LLM_CALL: \"LLM_CALL\",\n TOOL_CALL: \"TOOL_CALL\",\n MEMORY_OP: \"MEMORY_OP\",\n CHAIN: \"CHAIN\",\n AGENT: \"AGENT\",\n CUSTOM: \"CUSTOM\",\n} as const;\nexport type SpanType = (typeof SpanType)[keyof typeof SpanType];\n\nexport const SpanStatus = {\n RUNNING: \"RUNNING\",\n COMPLETED: \"COMPLETED\",\n ERROR: \"ERROR\",\n} as const;\nexport type SpanStatus = (typeof SpanStatus)[keyof typeof SpanStatus];\n\nexport const EventType = {\n ERROR: \"ERROR\",\n RETRY: \"RETRY\",\n FALLBACK: \"FALLBACK\",\n CONTEXT_OVERFLOW: \"CONTEXT_OVERFLOW\",\n USER_FEEDBACK: \"USER_FEEDBACK\",\n CUSTOM: \"CUSTOM\",\n} as const;\nexport type EventType = (typeof EventType)[keyof typeof EventType];\n\n// ---------------------------------------------------------------------------\n// Wire-format interfaces (camelCase, matching POST /api/traces contract)\n// ---------------------------------------------------------------------------\n\nexport interface DecisionPointPayload {\n id: string;\n type: DecisionType;\n chosen: JsonValue;\n alternatives: JsonValue[];\n reasoning?: string;\n contextSnapshot?: JsonValue;\n durationMs?: number;\n costUsd?: number;\n parentSpanId?: string;\n timestamp: string;\n}\n\nexport interface SpanPayload {\n id: string;\n parentSpanId?: string;\n name: string;\n type: SpanType;\n input?: JsonValue;\n output?: JsonValue;\n tokenCount?: number;\n costUsd?: number;\n durationMs?: number;\n status: SpanStatus;\n statusMessage?: string;\n startedAt: string;\n endedAt?: string;\n metadata?: JsonValue;\n}\n\nexport interface EventPayload {\n id: string;\n spanId?: string;\n type: EventType;\n name: string;\n metadata?: JsonValue;\n timestamp: string;\n}\n\nexport interface TracePayload {\n id: string;\n name: string;\n sessionId?: string;\n status: TraceStatus;\n tags: string[];\n metadata?: JsonValue;\n totalCost?: number;\n totalTokens?: number;\n totalDuration?: number;\n startedAt: string;\n endedAt?: string;\n decisionPoints: DecisionPointPayload[];\n spans: SpanPayload[];\n events: EventPayload[];\n}\n\n// ---------------------------------------------------------------------------\n// Helper functions\n// ---------------------------------------------------------------------------\n\n/** Generate a v4 UUID. */\nexport function generateId(): string {\n return randomUUID();\n}\n\n/** Return the current time as an ISO-8601 string. */\nexport function nowISO(): string {\n return new Date().toISOString();\n}\n","import type {\n TracePayload,\n SpanPayload,\n DecisionPointPayload,\n EventPayload,\n JsonValue,\n TraceStatus,\n SpanType,\n SpanStatus,\n DecisionType,\n EventType,\n} from \"./models.js\";\nimport {\n generateId,\n nowISO,\n TraceStatus as TraceStatusValues,\n SpanStatus as SpanStatusValues,\n} from \"./models.js\";\nimport { _getTransport } from \"./_registry.js\";\n\nexport interface TraceBuilderOptions {\n sessionId?: string;\n tags?: string[];\n metadata?: JsonValue;\n}\n\nexport interface AddSpanInput {\n id?: string;\n parentSpanId?: string;\n name: string;\n type: SpanType;\n input?: JsonValue;\n output?: JsonValue;\n tokenCount?: number;\n costUsd?: number;\n durationMs?: number;\n status?: SpanStatus;\n statusMessage?: string;\n startedAt?: string;\n endedAt?: string;\n metadata?: JsonValue;\n}\n\nexport interface AddDecisionInput {\n id?: string;\n type: DecisionType;\n chosen: JsonValue;\n alternatives?: JsonValue[];\n reasoning?: string;\n contextSnapshot?: JsonValue;\n durationMs?: number;\n costUsd?: number;\n parentSpanId?: string;\n timestamp?: string;\n}\n\nexport interface AddEventInput {\n id?: string;\n spanId?: string;\n type: EventType;\n name: string;\n metadata?: JsonValue;\n timestamp?: string;\n}\n\nexport interface EndOptions {\n status?: TraceStatus;\n metadata?: JsonValue;\n totalCost?: number;\n totalTokens?: number;\n}\n\nexport class TraceBuilder {\n private readonly trace: TracePayload;\n private readonly startMs: number;\n\n constructor(name: string, options?: TraceBuilderOptions) {\n this.startMs = Date.now();\n this.trace = {\n id: generateId(),\n name,\n sessionId: options?.sessionId,\n status: TraceStatusValues.RUNNING,\n tags: options?.tags ?? [],\n metadata: options?.metadata,\n startedAt: nowISO(),\n decisionPoints: [],\n spans: [],\n events: [],\n };\n }\n\n addSpan(input: AddSpanInput): string {\n const id = input.id ?? generateId();\n const span: SpanPayload = {\n id,\n parentSpanId: input.parentSpanId,\n name: input.name,\n type: input.type,\n input: input.input,\n output: input.output,\n tokenCount: input.tokenCount,\n costUsd: input.costUsd,\n durationMs: input.durationMs,\n status: input.status ?? SpanStatusValues.RUNNING,\n statusMessage: input.statusMessage,\n startedAt: input.startedAt ?? nowISO(),\n endedAt: input.endedAt,\n metadata: input.metadata,\n };\n this.trace.spans.push(span);\n return id;\n }\n\n addDecision(input: AddDecisionInput): string {\n const id = input.id ?? generateId();\n const decision: DecisionPointPayload = {\n id,\n type: input.type,\n chosen: input.chosen,\n alternatives: input.alternatives ?? [],\n reasoning: input.reasoning,\n contextSnapshot: input.contextSnapshot,\n durationMs: input.durationMs,\n costUsd: input.costUsd,\n parentSpanId: input.parentSpanId,\n timestamp: input.timestamp ?? nowISO(),\n };\n this.trace.decisionPoints.push(decision);\n return id;\n }\n\n addEvent(input: AddEventInput): string {\n const id = input.id ?? generateId();\n const event: EventPayload = {\n id,\n spanId: input.spanId,\n type: input.type,\n name: input.name,\n metadata: input.metadata,\n timestamp: input.timestamp ?? nowISO(),\n };\n this.trace.events.push(event);\n return id;\n }\n\n setStatus(status: TraceStatus): this {\n this.trace.status = status;\n return this;\n }\n\n setMetadata(metadata: JsonValue): this {\n this.trace.metadata = metadata;\n return this;\n }\n\n toPayload(): TracePayload {\n return { ...this.trace };\n }\n\n end(options?: EndOptions): TracePayload {\n const endedAt = nowISO();\n this.trace.endedAt = endedAt;\n this.trace.totalDuration = Date.now() - this.startMs;\n this.trace.status =\n options?.status ?? TraceStatusValues.COMPLETED;\n\n if (options?.metadata !== undefined) {\n this.trace.metadata = options.metadata;\n }\n if (options?.totalCost !== undefined) {\n this.trace.totalCost = options.totalCost;\n }\n if (options?.totalTokens !== undefined) {\n this.trace.totalTokens = options.totalTokens;\n }\n\n const transport = _getTransport();\n if (transport) {\n transport.add(this.trace);\n }\n\n return { ...this.trace };\n }\n}\n","import type { DecisionPointPayload, DecisionType, JsonValue } from \"./models.js\";\nimport { generateId, nowISO } from \"./models.js\";\n\nexport interface CreateDecisionInput {\n type: DecisionType;\n chosen: JsonValue;\n alternatives?: JsonValue[];\n reasoning?: string;\n contextSnapshot?: JsonValue;\n durationMs?: number;\n costUsd?: number;\n parentSpanId?: string;\n timestamp?: string;\n}\n\nexport function createDecision(input: CreateDecisionInput): DecisionPointPayload {\n return {\n id: generateId(),\n type: input.type,\n chosen: input.chosen,\n alternatives: input.alternatives ?? [],\n reasoning: input.reasoning,\n contextSnapshot: input.contextSnapshot,\n durationMs: input.durationMs,\n costUsd: input.costUsd,\n parentSpanId: input.parentSpanId,\n timestamp: input.timestamp ?? nowISO(),\n };\n}\n","import { BatchTransport } from \"./transport.js\";\nimport { _setTransport, _getTransport } from \"./_registry.js\";\n\nexport interface InitOptions {\n apiKey: string;\n endpoint?: string;\n maxBatchSize?: number;\n flushInterval?: number;\n}\n\nexport function init(options: InitOptions): void {\n const existing = _getTransport();\n if (existing) {\n void existing.shutdown();\n }\n _setTransport(\n new BatchTransport({\n apiKey: options.apiKey,\n endpoint: options.endpoint ?? \"https://agentlens.vectry.tech\",\n maxBatchSize: options.maxBatchSize,\n flushInterval: options.flushInterval,\n }),\n );\n}\n\nexport async function shutdown(): Promise<void> {\n const transport = _getTransport();\n if (transport) {\n await transport.shutdown();\n _setTransport(null);\n }\n}\n\nexport function getClient(): BatchTransport | null {\n return _getTransport();\n}\n\nexport async function flush(): Promise<void> {\n const transport = _getTransport();\n if (transport) {\n await transport.flush();\n }\n}\n\nexport {\n TraceStatus,\n DecisionType,\n SpanType,\n SpanStatus,\n EventType,\n generateId,\n nowISO,\n} from \"./models.js\";\n\nexport type {\n JsonValue,\n DecisionPointPayload,\n SpanPayload,\n EventPayload,\n TracePayload,\n} from \"./models.js\";\n\nexport { BatchTransport } from \"./transport.js\";\nexport type { BatchTransportOptions } from \"./transport.js\";\n\nexport { TraceBuilder } from \"./trace.js\";\nexport type {\n TraceBuilderOptions,\n AddSpanInput,\n AddDecisionInput,\n AddEventInput,\n EndOptions,\n} from \"./trace.js\";\n\nexport { createDecision } from \"./decision.js\";\nexport type { CreateDecisionInput } from \"./decision.js\";\n"],"mappings":"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","names":[]}
1
+ {"version":3,"sources":["../src/transport.ts","../src/_registry.ts","../src/models.ts","../src/trace.ts","../src/decision.ts","../src/index.ts"],"sourcesContent":["import type { TracePayload } from \"./models.js\";\n\nexport interface BatchTransportOptions {\n apiKey: string;\n endpoint: string;\n maxBatchSize?: number;\n flushInterval?: number;\n}\n\nexport class BatchTransport {\n private readonly apiKey: string;\n private readonly endpoint: string;\n private readonly maxBatchSize: number;\n private readonly flushInterval: number;\n private buffer: TracePayload[] = [];\n private timer: ReturnType<typeof setInterval> | null = null;\n\n constructor(options: BatchTransportOptions) {\n this.apiKey = options.apiKey;\n this.endpoint = options.endpoint.replace(/\\/+$/, \"\");\n this.maxBatchSize = options.maxBatchSize ?? 10;\n this.flushInterval = options.flushInterval ?? 5_000;\n\n this.timer = setInterval(() => {\n void this._doFlush();\n }, this.flushInterval);\n }\n\n add(trace: TracePayload): void {\n const idx = this.buffer.findIndex((t) => t.id === trace.id);\n if (idx !== -1) {\n this.buffer[idx] = trace;\n } else {\n this.buffer.push(trace);\n }\n if (this.buffer.length >= this.maxBatchSize) {\n void this._doFlush();\n }\n }\n\n async flush(): Promise<void> {\n await this._doFlush();\n }\n\n async shutdown(): Promise<void> {\n if (this.timer !== null) {\n clearInterval(this.timer);\n this.timer = null;\n }\n await this._doFlush();\n }\n\n private async _doFlush(): Promise<void> {\n if (this.buffer.length === 0) {\n return;\n }\n\n const batch = this.buffer.splice(0, this.buffer.length);\n\n try {\n const response = await fetch(`${this.endpoint}/api/traces`, {\n method: \"POST\",\n headers: {\n Authorization: `Bearer ${this.apiKey}`,\n \"Content-Type\": \"application/json\",\n },\n body: JSON.stringify({ traces: batch }),\n });\n\n if (!response.ok) {\n await response.text().catch(() => \"\");\n }\n } catch {\n }\n }\n}\n","import type { BatchTransport } from \"./transport.js\";\n\nlet _transport: BatchTransport | null = null;\n\nexport function _setTransport(transport: BatchTransport | null): void {\n _transport = transport;\n}\n\nexport function _getTransport(): BatchTransport | null {\n return _transport;\n}\n","import { randomUUID } from \"crypto\";\n\n// ---------------------------------------------------------------------------\n// JSON value type (replaces Prisma.JsonValue for the SDK)\n// ---------------------------------------------------------------------------\n\nexport type JsonValue =\n | string\n | number\n | boolean\n | null\n | JsonValue[]\n | { [key: string]: JsonValue };\n\n// ---------------------------------------------------------------------------\n// Enums (as const + type union pattern — NO TypeScript enum keyword)\n// ---------------------------------------------------------------------------\n\nexport const TraceStatus = {\n RUNNING: \"RUNNING\",\n COMPLETED: \"COMPLETED\",\n ERROR: \"ERROR\",\n} as const;\nexport type TraceStatus = (typeof TraceStatus)[keyof typeof TraceStatus];\n\nexport const DecisionType = {\n TOOL_SELECTION: \"TOOL_SELECTION\",\n ROUTING: \"ROUTING\",\n RETRY: \"RETRY\",\n ESCALATION: \"ESCALATION\",\n MEMORY_RETRIEVAL: \"MEMORY_RETRIEVAL\",\n PLANNING: \"PLANNING\",\n CUSTOM: \"CUSTOM\",\n} as const;\nexport type DecisionType = (typeof DecisionType)[keyof typeof DecisionType];\n\nexport const SpanType = {\n LLM_CALL: \"LLM_CALL\",\n TOOL_CALL: \"TOOL_CALL\",\n MEMORY_OP: \"MEMORY_OP\",\n CHAIN: \"CHAIN\",\n AGENT: \"AGENT\",\n CUSTOM: \"CUSTOM\",\n} as const;\nexport type SpanType = (typeof SpanType)[keyof typeof SpanType];\n\nexport const SpanStatus = {\n RUNNING: \"RUNNING\",\n COMPLETED: \"COMPLETED\",\n ERROR: \"ERROR\",\n} as const;\nexport type SpanStatus = (typeof SpanStatus)[keyof typeof SpanStatus];\n\nexport const EventType = {\n ERROR: \"ERROR\",\n RETRY: \"RETRY\",\n FALLBACK: \"FALLBACK\",\n CONTEXT_OVERFLOW: \"CONTEXT_OVERFLOW\",\n USER_FEEDBACK: \"USER_FEEDBACK\",\n CUSTOM: \"CUSTOM\",\n} as const;\nexport type EventType = (typeof EventType)[keyof typeof EventType];\n\n// ---------------------------------------------------------------------------\n// Wire-format interfaces (camelCase, matching POST /api/traces contract)\n// ---------------------------------------------------------------------------\n\nexport interface DecisionPointPayload {\n id: string;\n type: DecisionType;\n chosen: JsonValue;\n alternatives: JsonValue[];\n reasoning?: string;\n contextSnapshot?: JsonValue;\n durationMs?: number;\n costUsd?: number;\n parentSpanId?: string;\n timestamp: string;\n}\n\nexport interface SpanPayload {\n id: string;\n parentSpanId?: string;\n name: string;\n type: SpanType;\n input?: JsonValue;\n output?: JsonValue;\n tokenCount?: number;\n costUsd?: number;\n durationMs?: number;\n status: SpanStatus;\n statusMessage?: string;\n startedAt: string;\n endedAt?: string;\n metadata?: JsonValue;\n}\n\nexport interface EventPayload {\n id: string;\n spanId?: string;\n type: EventType;\n name: string;\n metadata?: JsonValue;\n timestamp: string;\n}\n\nexport interface TracePayload {\n id: string;\n name: string;\n sessionId?: string;\n status: TraceStatus;\n tags: string[];\n metadata?: JsonValue;\n totalCost?: number;\n totalTokens?: number;\n totalDuration?: number;\n startedAt: string;\n endedAt?: string;\n decisionPoints: DecisionPointPayload[];\n spans: SpanPayload[];\n events: EventPayload[];\n}\n\n// ---------------------------------------------------------------------------\n// Helper functions\n// ---------------------------------------------------------------------------\n\n/** Generate a v4 UUID. */\nexport function generateId(): string {\n return randomUUID();\n}\n\n/** Return the current time as an ISO-8601 string. */\nexport function nowISO(): string {\n return new Date().toISOString();\n}\n","import type {\n TracePayload,\n SpanPayload,\n DecisionPointPayload,\n EventPayload,\n JsonValue,\n TraceStatus,\n SpanType,\n SpanStatus,\n DecisionType,\n EventType,\n} from \"./models.js\";\nimport {\n generateId,\n nowISO,\n TraceStatus as TraceStatusValues,\n SpanStatus as SpanStatusValues,\n} from \"./models.js\";\nimport { _getTransport } from \"./_registry.js\";\n\nexport interface TraceBuilderOptions {\n sessionId?: string;\n tags?: string[];\n metadata?: JsonValue;\n}\n\nexport interface AddSpanInput {\n id?: string;\n parentSpanId?: string;\n name: string;\n type: SpanType;\n input?: JsonValue;\n output?: JsonValue;\n tokenCount?: number;\n costUsd?: number;\n durationMs?: number;\n status?: SpanStatus;\n statusMessage?: string;\n startedAt?: string;\n endedAt?: string;\n metadata?: JsonValue;\n}\n\nexport interface AddDecisionInput {\n id?: string;\n type: DecisionType;\n chosen: JsonValue;\n alternatives?: JsonValue[];\n reasoning?: string;\n contextSnapshot?: JsonValue;\n durationMs?: number;\n costUsd?: number;\n parentSpanId?: string;\n timestamp?: string;\n}\n\nexport interface AddEventInput {\n id?: string;\n spanId?: string;\n type: EventType;\n name: string;\n metadata?: JsonValue;\n timestamp?: string;\n}\n\nexport interface EndOptions {\n status?: TraceStatus;\n metadata?: JsonValue;\n totalCost?: number;\n totalTokens?: number;\n}\n\nexport class TraceBuilder {\n private readonly trace: TracePayload;\n private readonly startMs: number;\n\n constructor(name: string, options?: TraceBuilderOptions) {\n this.startMs = Date.now();\n this.trace = {\n id: generateId(),\n name,\n sessionId: options?.sessionId,\n status: TraceStatusValues.RUNNING,\n tags: options?.tags ?? [],\n metadata: options?.metadata,\n startedAt: nowISO(),\n decisionPoints: [],\n spans: [],\n events: [],\n };\n }\n\n addSpan(input: AddSpanInput): string {\n const id = input.id ?? generateId();\n const span: SpanPayload = {\n id,\n parentSpanId: input.parentSpanId,\n name: input.name,\n type: input.type,\n input: input.input,\n output: input.output,\n tokenCount: input.tokenCount,\n costUsd: input.costUsd,\n durationMs: input.durationMs,\n status: input.status ?? SpanStatusValues.RUNNING,\n statusMessage: input.statusMessage,\n startedAt: input.startedAt ?? nowISO(),\n endedAt: input.endedAt,\n metadata: input.metadata,\n };\n this.trace.spans.push(span);\n return id;\n }\n\n addDecision(input: AddDecisionInput): string {\n const id = input.id ?? generateId();\n const decision: DecisionPointPayload = {\n id,\n type: input.type,\n chosen: input.chosen,\n alternatives: input.alternatives ?? [],\n reasoning: input.reasoning,\n contextSnapshot: input.contextSnapshot,\n durationMs: input.durationMs,\n costUsd: input.costUsd,\n parentSpanId: input.parentSpanId,\n timestamp: input.timestamp ?? nowISO(),\n };\n this.trace.decisionPoints.push(decision);\n return id;\n }\n\n addEvent(input: AddEventInput): string {\n const id = input.id ?? generateId();\n const event: EventPayload = {\n id,\n spanId: input.spanId,\n type: input.type,\n name: input.name,\n metadata: input.metadata,\n timestamp: input.timestamp ?? nowISO(),\n };\n this.trace.events.push(event);\n return id;\n }\n\n setStatus(status: TraceStatus): this {\n this.trace.status = status;\n return this;\n }\n\n setMetadata(metadata: JsonValue): this {\n this.trace.metadata = metadata;\n return this;\n }\n\n toPayload(): TracePayload {\n return { ...this.trace };\n }\n\n end(options?: EndOptions): TracePayload {\n const endedAt = nowISO();\n this.trace.endedAt = endedAt;\n this.trace.totalDuration = Date.now() - this.startMs;\n this.trace.status =\n options?.status ?? TraceStatusValues.COMPLETED;\n\n if (options?.metadata !== undefined) {\n this.trace.metadata = options.metadata;\n }\n if (options?.totalCost !== undefined) {\n this.trace.totalCost = options.totalCost;\n }\n if (options?.totalTokens !== undefined) {\n this.trace.totalTokens = options.totalTokens;\n }\n\n const transport = _getTransport();\n if (transport) {\n transport.add(this.trace);\n }\n\n return { ...this.trace };\n }\n}\n","import type { DecisionPointPayload, DecisionType, JsonValue } from \"./models.js\";\nimport { generateId, nowISO } from \"./models.js\";\n\nexport interface CreateDecisionInput {\n type: DecisionType;\n chosen: JsonValue;\n alternatives?: JsonValue[];\n reasoning?: string;\n contextSnapshot?: JsonValue;\n durationMs?: number;\n costUsd?: number;\n parentSpanId?: string;\n timestamp?: string;\n}\n\nexport function createDecision(input: CreateDecisionInput): DecisionPointPayload {\n return {\n id: generateId(),\n type: input.type,\n chosen: input.chosen,\n alternatives: input.alternatives ?? [],\n reasoning: input.reasoning,\n contextSnapshot: input.contextSnapshot,\n durationMs: input.durationMs,\n costUsd: input.costUsd,\n parentSpanId: input.parentSpanId,\n timestamp: input.timestamp ?? nowISO(),\n };\n}\n","import { BatchTransport } from \"./transport.js\";\nimport { _setTransport, _getTransport } from \"./_registry.js\";\n\nexport interface InitOptions {\n apiKey: string;\n endpoint?: string;\n maxBatchSize?: number;\n flushInterval?: number;\n}\n\nexport function init(options: InitOptions): void {\n const existing = _getTransport();\n if (existing) {\n void existing.shutdown();\n }\n _setTransport(\n new BatchTransport({\n apiKey: options.apiKey,\n endpoint: options.endpoint ?? \"https://agentlens.vectry.tech\",\n maxBatchSize: options.maxBatchSize,\n flushInterval: options.flushInterval,\n }),\n );\n}\n\nexport async function shutdown(): Promise<void> {\n const transport = _getTransport();\n if (transport) {\n await transport.shutdown();\n _setTransport(null);\n }\n}\n\nexport function getClient(): BatchTransport | null {\n return _getTransport();\n}\n\nexport async function flush(): Promise<void> {\n const transport = _getTransport();\n if (transport) {\n await transport.flush();\n }\n}\n\nexport {\n TraceStatus,\n DecisionType,\n SpanType,\n SpanStatus,\n EventType,\n generateId,\n nowISO,\n} from \"./models.js\";\n\nexport type {\n JsonValue,\n DecisionPointPayload,\n SpanPayload,\n EventPayload,\n TracePayload,\n} from \"./models.js\";\n\nexport { BatchTransport } from \"./transport.js\";\nexport type { BatchTransportOptions } from \"./transport.js\";\n\nexport { TraceBuilder } from \"./trace.js\";\nexport type {\n TraceBuilderOptions,\n AddSpanInput,\n AddDecisionInput,\n AddEventInput,\n EndOptions,\n} from \"./trace.js\";\n\nexport { createDecision } from \"./decision.js\";\nexport type { CreateDecisionInput } from \"./decision.js\";\n"],"mappings":"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","names":[]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "agentlens-sdk",
3
- "version": "0.1.2",
3
+ "version": "0.1.4",
4
4
  "description": "AgentLens TypeScript SDK — Agent observability that traces decisions, not just API calls.",
5
5
  "type": "module",
6
6
  "main": "./dist/index.cjs",