@llmtracer/sdk 1.1.0 → 2.1.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 (102) hide show
  1. package/dist/cjs/auto.d.ts +2 -0
  2. package/dist/cjs/auto.d.ts.map +1 -0
  3. package/dist/cjs/auto.js +5 -0
  4. package/dist/cjs/auto.js.map +1 -0
  5. package/dist/cjs/caller.d.ts +6 -0
  6. package/dist/cjs/caller.d.ts.map +1 -0
  7. package/dist/cjs/caller.js +62 -0
  8. package/dist/cjs/caller.js.map +1 -0
  9. package/dist/cjs/config.d.ts +7 -0
  10. package/dist/cjs/config.d.ts.map +1 -0
  11. package/dist/cjs/config.js +10 -0
  12. package/dist/cjs/config.js.map +1 -0
  13. package/dist/cjs/context.d.ts +9 -0
  14. package/dist/cjs/context.d.ts.map +1 -0
  15. package/dist/cjs/context.js +21 -0
  16. package/dist/cjs/context.js.map +1 -0
  17. package/dist/cjs/index.d.ts +20 -0
  18. package/dist/cjs/index.d.ts.map +1 -0
  19. package/dist/cjs/index.js +93 -0
  20. package/dist/cjs/index.js.map +1 -0
  21. package/dist/cjs/patcher.d.ts +4 -0
  22. package/dist/cjs/patcher.d.ts.map +1 -0
  23. package/dist/cjs/patcher.js +93 -0
  24. package/dist/cjs/patcher.js.map +1 -0
  25. package/dist/cjs/providers/anthropic.d.ts +4 -0
  26. package/dist/cjs/providers/anthropic.d.ts.map +1 -0
  27. package/dist/cjs/providers/anthropic.js +111 -0
  28. package/dist/cjs/providers/anthropic.js.map +1 -0
  29. package/dist/cjs/providers/index.d.ts +3 -0
  30. package/dist/cjs/providers/index.d.ts.map +1 -0
  31. package/dist/cjs/providers/index.js +10 -0
  32. package/dist/cjs/providers/index.js.map +1 -0
  33. package/dist/cjs/providers/openai.d.ts +4 -0
  34. package/dist/cjs/providers/openai.d.ts.map +1 -0
  35. package/dist/cjs/providers/openai.js +108 -0
  36. package/dist/cjs/providers/openai.js.map +1 -0
  37. package/dist/cjs/schema.d.ts +18 -0
  38. package/dist/cjs/schema.d.ts.map +1 -0
  39. package/dist/cjs/schema.js +93 -0
  40. package/dist/cjs/schema.js.map +1 -0
  41. package/dist/cjs/transport.d.ts +6 -0
  42. package/dist/cjs/transport.d.ts.map +1 -0
  43. package/dist/cjs/transport.js +69 -0
  44. package/dist/cjs/transport.js.map +1 -0
  45. package/dist/cjs/wrapper.d.ts +3 -0
  46. package/dist/cjs/wrapper.d.ts.map +1 -0
  47. package/dist/cjs/wrapper.js +86 -0
  48. package/dist/cjs/wrapper.js.map +1 -0
  49. package/dist/esm/auto.d.ts +2 -0
  50. package/dist/esm/auto.d.ts.map +1 -0
  51. package/dist/esm/auto.js +3 -0
  52. package/dist/esm/auto.js.map +1 -0
  53. package/dist/esm/caller.d.ts +6 -0
  54. package/dist/esm/caller.d.ts.map +1 -0
  55. package/dist/esm/caller.js +59 -0
  56. package/dist/esm/caller.js.map +1 -0
  57. package/dist/esm/config.d.ts +7 -0
  58. package/dist/esm/config.d.ts.map +1 -0
  59. package/dist/esm/config.js +7 -0
  60. package/dist/esm/config.js.map +1 -0
  61. package/dist/esm/context.d.ts +9 -0
  62. package/dist/esm/context.d.ts.map +1 -0
  63. package/dist/esm/context.js +17 -0
  64. package/dist/esm/context.js.map +1 -0
  65. package/dist/esm/index.d.ts +20 -0
  66. package/dist/esm/index.d.ts.map +1 -0
  67. package/dist/esm/index.js +53 -0
  68. package/dist/esm/index.js.map +1 -0
  69. package/dist/esm/package.json +1 -0
  70. package/dist/esm/patcher.d.ts +4 -0
  71. package/dist/esm/patcher.d.ts.map +1 -0
  72. package/dist/esm/patcher.js +88 -0
  73. package/dist/esm/patcher.js.map +1 -0
  74. package/dist/esm/providers/anthropic.d.ts +4 -0
  75. package/dist/esm/providers/anthropic.d.ts.map +1 -0
  76. package/dist/esm/providers/anthropic.js +74 -0
  77. package/dist/esm/providers/anthropic.js.map +1 -0
  78. package/dist/esm/providers/index.d.ts +3 -0
  79. package/dist/esm/providers/index.d.ts.map +1 -0
  80. package/dist/esm/providers/index.js +3 -0
  81. package/dist/esm/providers/index.js.map +1 -0
  82. package/dist/esm/providers/openai.d.ts +4 -0
  83. package/dist/esm/providers/openai.d.ts.map +1 -0
  84. package/dist/esm/providers/openai.js +71 -0
  85. package/dist/esm/providers/openai.js.map +1 -0
  86. package/dist/esm/schema.d.ts +18 -0
  87. package/dist/esm/schema.d.ts.map +1 -0
  88. package/dist/esm/schema.js +88 -0
  89. package/dist/esm/schema.js.map +1 -0
  90. package/dist/esm/transport.d.ts +6 -0
  91. package/dist/esm/transport.d.ts.map +1 -0
  92. package/dist/esm/transport.js +62 -0
  93. package/dist/esm/transport.js.map +1 -0
  94. package/dist/esm/wrapper.d.ts +3 -0
  95. package/dist/esm/wrapper.d.ts.map +1 -0
  96. package/dist/esm/wrapper.js +50 -0
  97. package/dist/esm/wrapper.js.map +1 -0
  98. package/package.json +56 -11
  99. package/dist/index.d.ts +0 -118
  100. package/dist/index.d.ts.map +0 -1
  101. package/dist/index.js +0 -568
  102. package/dist/index.js.map +0 -1
@@ -0,0 +1,108 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || (function () {
19
+ var ownKeys = function(o) {
20
+ ownKeys = Object.getOwnPropertyNames || function (o) {
21
+ var ar = [];
22
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
+ return ar;
24
+ };
25
+ return ownKeys(o);
26
+ };
27
+ return function (mod) {
28
+ if (mod && mod.__esModule) return mod;
29
+ var result = {};
30
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
+ __setModuleDefault(result, mod);
32
+ return result;
33
+ };
34
+ })();
35
+ Object.defineProperty(exports, "__esModule", { value: true });
36
+ exports.parseOpenAIResponse = parseOpenAIResponse;
37
+ exports.wrapOpenAIStream = wrapOpenAIStream;
38
+ const config_1 = require("../config");
39
+ const schema_1 = require("../schema");
40
+ const transport = __importStar(require("../transport"));
41
+ function parseOpenAIResponse(result) {
42
+ return {
43
+ provider: 'openai',
44
+ model: result?.model || 'unknown',
45
+ input_tokens: result?.usage?.prompt_tokens || 0,
46
+ output_tokens: result?.usage?.completion_tokens || 0,
47
+ status: 'success',
48
+ };
49
+ }
50
+ function wrapOpenAIStream(result, context, elapsedMs, args) {
51
+ const chunks = [];
52
+ function record() {
53
+ // Look for usage in final chunks (OpenAI includes it when stream_options.include_usage = true)
54
+ let usage = null;
55
+ for (let i = chunks.length - 1; i >= 0; i--) {
56
+ if (chunks[i]?.usage) {
57
+ usage = chunks[i].usage;
58
+ break;
59
+ }
60
+ }
61
+ const model = chunks[0]?.model || 'unknown';
62
+ const event = (0, schema_1.buildEvent)(context, {
63
+ provider: 'openai',
64
+ model,
65
+ input_tokens: usage?.prompt_tokens || 0,
66
+ output_tokens: usage?.completion_tokens || 0,
67
+ status: 'success',
68
+ }, elapsedMs);
69
+ transport.enqueue(event);
70
+ if (config_1.config.debug)
71
+ (0, schema_1.printCapture)(event);
72
+ }
73
+ // Create a proxy that wraps the async iterator while forwarding everything else
74
+ return new Proxy(result, {
75
+ get(target, prop) {
76
+ if (prop === Symbol.asyncIterator) {
77
+ return function () {
78
+ const originalIterator = target[Symbol.asyncIterator]();
79
+ return {
80
+ async next() {
81
+ const iterResult = await originalIterator.next();
82
+ if (!iterResult.done) {
83
+ chunks.push(iterResult.value);
84
+ }
85
+ if (iterResult.done) {
86
+ try {
87
+ record();
88
+ }
89
+ catch {
90
+ // swallow
91
+ }
92
+ }
93
+ return iterResult;
94
+ },
95
+ return: originalIterator.return?.bind(originalIterator),
96
+ throw: originalIterator.throw?.bind(originalIterator),
97
+ };
98
+ };
99
+ }
100
+ const value = target[prop];
101
+ if (typeof value === 'function') {
102
+ return value.bind(target);
103
+ }
104
+ return value;
105
+ },
106
+ });
107
+ }
108
+ //# sourceMappingURL=openai.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"openai.js","sourceRoot":"","sources":["../../../src/providers/openai.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,18 @@
1
+ import { TraceContext } from './context';
2
+ import { getCallerInfo } from './caller';
3
+ export interface ContextData {
4
+ context: TraceContext | undefined;
5
+ caller: ReturnType<typeof getCallerInfo>;
6
+ provider: string;
7
+ }
8
+ export interface ResponseData {
9
+ provider: string;
10
+ model: string;
11
+ input_tokens: number;
12
+ output_tokens: number;
13
+ status: string;
14
+ }
15
+ export declare function buildContext(provider: string, args: any[]): ContextData;
16
+ export declare function buildEvent(contextData: ContextData, responseData: ResponseData, latencyMs: number): Record<string, any>;
17
+ export declare function printCapture(event: Record<string, any>): void;
18
+ //# sourceMappingURL=schema.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"schema.d.ts","sourceRoot":"","sources":["../../src/schema.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,YAAY,EAAc,MAAM,WAAW,CAAC;AACrD,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AAKzC,MAAM,WAAW,WAAW;IAC1B,OAAO,EAAE,YAAY,GAAG,SAAS,CAAC;IAClC,MAAM,EAAE,UAAU,CAAC,OAAO,aAAa,CAAC,CAAC;IACzC,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,YAAY;IAC3B,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,EAAE,MAAM,CAAC;IACd,YAAY,EAAE,MAAM,CAAC;IACrB,aAAa,EAAE,MAAM,CAAC;IACtB,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,wBAAgB,YAAY,CAAC,QAAQ,EAAE,MAAM,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,WAAW,CAMvE;AAED,wBAAgB,UAAU,CAAC,WAAW,EAAE,WAAW,EAAE,YAAY,EAAE,YAAY,EAAE,SAAS,EAAE,MAAM,GAAG,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAuBvH;AAmCD,wBAAgB,YAAY,CAAC,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,IAAI,CAyB7D"}
@@ -0,0 +1,93 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.buildContext = buildContext;
4
+ exports.buildEvent = buildEvent;
5
+ exports.printCapture = printCapture;
6
+ const crypto_1 = require("crypto");
7
+ const context_1 = require("./context");
8
+ const caller_1 = require("./caller");
9
+ const SDK_VERSION = '2.0.0';
10
+ const SDK_LANGUAGE = 'typescript';
11
+ function buildContext(provider, args) {
12
+ return {
13
+ context: (0, context_1.getCurrent)(),
14
+ caller: (0, caller_1.getCallerInfo)(),
15
+ provider,
16
+ };
17
+ }
18
+ function buildEvent(contextData, responseData, latencyMs) {
19
+ const event = {
20
+ event_id: (0, crypto_1.randomUUID)(),
21
+ timestamp: new Date().toISOString(),
22
+ latency_ms: latencyMs,
23
+ sdk_version: SDK_VERSION,
24
+ sdk_language: SDK_LANGUAGE,
25
+ ...responseData,
26
+ ...contextData.caller,
27
+ };
28
+ if (contextData.context) {
29
+ event.trace_id = contextData.context.traceId;
30
+ event.span_id = contextData.context.spanId;
31
+ if (contextData.context.parentSpanId) {
32
+ event.parent_span_id = contextData.context.parentSpanId;
33
+ }
34
+ if (contextData.context.tags && Object.keys(contextData.context.tags).length > 0) {
35
+ event.tags = { ...contextData.context.tags };
36
+ }
37
+ }
38
+ return event;
39
+ }
40
+ // Cost lookup table for debug printing (per 1M tokens)
41
+ const COST_PER_M = {
42
+ 'gpt-4o': [2.5, 10],
43
+ 'gpt-4o-mini': [0.15, 0.6],
44
+ 'gpt-4-turbo': [10, 30],
45
+ 'gpt-4': [30, 60],
46
+ 'gpt-3.5-turbo': [0.5, 1.5],
47
+ 'o1': [15, 60],
48
+ 'o1-mini': [3, 12],
49
+ 'o3-mini': [1.1, 4.4],
50
+ 'claude-3-5-sonnet': [3, 15],
51
+ 'claude-3-5-haiku': [0.8, 4],
52
+ 'claude-3-opus': [15, 75],
53
+ 'claude-sonnet-4-5': [3, 15],
54
+ 'claude-haiku-4-5': [0.8, 4],
55
+ 'claude-opus-4-6': [15, 75],
56
+ };
57
+ function estimateCost(model, inputTokens, outputTokens) {
58
+ // Try exact match first, then prefix match
59
+ let rates = COST_PER_M[model];
60
+ if (!rates) {
61
+ for (const key of Object.keys(COST_PER_M)) {
62
+ if (model.startsWith(key)) {
63
+ rates = COST_PER_M[key];
64
+ break;
65
+ }
66
+ }
67
+ }
68
+ if (!rates)
69
+ return 0;
70
+ return (inputTokens * rates[0] + outputTokens * rates[1]) / 1000000;
71
+ }
72
+ function printCapture(event) {
73
+ const model = event.model || 'unknown';
74
+ const input = (event.input_tokens || 0).toLocaleString();
75
+ const output = (event.output_tokens || 0).toLocaleString();
76
+ const cost = estimateCost(model, event.input_tokens || 0, event.output_tokens || 0);
77
+ const latency = ((event.latency_ms || 0) / 1000).toFixed(1);
78
+ let file = '';
79
+ if (event.caller_file) {
80
+ const parts = event.caller_file.replace(/\\/g, '/').split('/');
81
+ const filename = parts[parts.length - 1];
82
+ file = event.caller_line ? `${filename}:${event.caller_line}` : filename;
83
+ }
84
+ let traceInfo = '';
85
+ if (event.tags) {
86
+ const firstValue = Object.values(event.tags)[0];
87
+ if (firstValue)
88
+ traceInfo = ` trace:${firstValue}`;
89
+ }
90
+ const costStr = cost > 0 ? ` $${cost.toFixed(4)}` : '';
91
+ console.log(`[llmtracer] ${event.provider}/${model} ${input}\u2192${output} tokens${costStr} ${latency}s (${file})${traceInfo}`);
92
+ }
93
+ //# sourceMappingURL=schema.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"schema.js","sourceRoot":"","sources":["../../src/schema.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,6 @@
1
+ export declare function start(): void;
2
+ export declare function enqueue(event: Record<string, any>): void;
3
+ export declare function flush(): Promise<void>;
4
+ export declare function stop(): void;
5
+ export declare function getQueueLength(): number;
6
+ //# sourceMappingURL=transport.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"transport.d.ts","sourceRoot":"","sources":["../../src/transport.ts"],"names":[],"mappings":"AAMA,wBAAgB,KAAK,IAAI,IAAI,CAG5B;AAED,wBAAgB,OAAO,CAAC,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,IAAI,CAWxD;AAED,wBAAsB,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC,CAE3C;AAED,wBAAgB,IAAI,IAAI,IAAI,CAO3B;AAED,wBAAgB,cAAc,IAAI,MAAM,CAEvC"}
@@ -0,0 +1,69 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.start = start;
4
+ exports.enqueue = enqueue;
5
+ exports.flush = flush;
6
+ exports.stop = stop;
7
+ exports.getQueueLength = getQueueLength;
8
+ const config_1 = require("./config");
9
+ let eventQueue = [];
10
+ let flushTimer = null;
11
+ let firstBatch = true;
12
+ function start() {
13
+ // Reset state for fresh start
14
+ firstBatch = true;
15
+ }
16
+ function enqueue(event) {
17
+ eventQueue.push(event);
18
+ if (firstBatch) {
19
+ firstBatch = false;
20
+ // Flush immediately on first event
21
+ setImmediate(() => doFlush());
22
+ // Start regular 5s interval
23
+ flushTimer = setInterval(() => doFlush(), 5000);
24
+ flushTimer.unref();
25
+ }
26
+ }
27
+ async function flush() {
28
+ await doFlush();
29
+ }
30
+ function stop() {
31
+ if (flushTimer) {
32
+ clearInterval(flushTimer);
33
+ flushTimer = null;
34
+ }
35
+ eventQueue = [];
36
+ firstBatch = true;
37
+ }
38
+ function getQueueLength() {
39
+ return eventQueue.length;
40
+ }
41
+ async function doFlush() {
42
+ if (eventQueue.length === 0)
43
+ return;
44
+ const events = eventQueue.splice(0);
45
+ try {
46
+ const payload = JSON.stringify({ events });
47
+ const response = await fetch(config_1.config.endpoint, {
48
+ method: 'POST',
49
+ headers: {
50
+ 'Content-Type': 'application/json',
51
+ 'Authorization': `Bearer ${config_1.config.apiKey}`,
52
+ },
53
+ body: payload,
54
+ signal: AbortSignal.timeout(10000),
55
+ });
56
+ if (config_1.config.debug) {
57
+ console.log(`[llmtracer] Flushed ${events.length} events \u2192 ${response.status}`);
58
+ }
59
+ }
60
+ catch (e) {
61
+ if (config_1.config.debug) {
62
+ console.log(`[llmtracer] Flush failed: ${e}`);
63
+ }
64
+ // Re-queue up to 100 events for retry
65
+ const requeue = events.slice(0, 100);
66
+ eventQueue.unshift(...requeue);
67
+ }
68
+ }
69
+ //# sourceMappingURL=transport.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"transport.js","sourceRoot":"","sources":["../../src/transport.ts"],"names":[],"mappings":";;AAMA,sBAGC;AAED,0BAWC;AAED,sBAEC;AAED,oBAOC;AAED,wCAEC;AAvCD,qCAAkC;AAElC,IAAI,UAAU,GAA0B,EAAE,CAAC;AAC3C,IAAI,UAAU,GAA0C,IAAI,CAAC;AAC7D,IAAI,UAAU,GAAG,IAAI,CAAC;AAEtB,SAAgB,KAAK;IACnB,8BAA8B;IAC9B,UAAU,GAAG,IAAI,CAAC;AACpB,CAAC;AAED,SAAgB,OAAO,CAAC,KAA0B;IAChD,UAAU,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IAEvB,IAAI,UAAU,EAAE,CAAC;QACf,UAAU,GAAG,KAAK,CAAC;QACnB,mCAAmC;QACnC,YAAY,CAAC,GAAG,EAAE,CAAC,OAAO,EAAE,CAAC,CAAC;QAC9B,4BAA4B;QAC5B,UAAU,GAAG,WAAW,CAAC,GAAG,EAAE,CAAC,OAAO,EAAE,EAAE,IAAI,CAAC,CAAC;QAChD,UAAU,CAAC,KAAK,EAAE,CAAC;IACrB,CAAC;AACH,CAAC;AAEM,KAAK,UAAU,KAAK;IACzB,MAAM,OAAO,EAAE,CAAC;AAClB,CAAC;AAED,SAAgB,IAAI;IAClB,IAAI,UAAU,EAAE,CAAC;QACf,aAAa,CAAC,UAAU,CAAC,CAAC;QAC1B,UAAU,GAAG,IAAI,CAAC;IACpB,CAAC;IACD,UAAU,GAAG,EAAE,CAAC;IAChB,UAAU,GAAG,IAAI,CAAC;AACpB,CAAC;AAED,SAAgB,cAAc;IAC5B,OAAO,UAAU,CAAC,MAAM,CAAC;AAC3B,CAAC;AAED,KAAK,UAAU,OAAO;IACpB,IAAI,UAAU,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO;IAEpC,MAAM,MAAM,GAAG,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;IAEpC,IAAI,CAAC;QACH,MAAM,OAAO,GAAG,IAAI,CAAC,SAAS,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC;QAE3C,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,eAAM,CAAC,QAAQ,EAAE;YAC5C,MAAM,EAAE,MAAM;YACd,OAAO,EAAE;gBACP,cAAc,EAAE,kBAAkB;gBAClC,eAAe,EAAE,UAAU,eAAM,CAAC,MAAM,EAAE;aAC3C;YACD,IAAI,EAAE,OAAO;YACb,MAAM,EAAE,WAAW,CAAC,OAAO,CAAC,KAAK,CAAC;SACnC,CAAC,CAAC;QAEH,IAAI,eAAM,CAAC,KAAK,EAAE,CAAC;YACjB,OAAO,CAAC,GAAG,CAAC,uBAAuB,MAAM,CAAC,MAAM,kBAAkB,QAAQ,CAAC,MAAM,EAAE,CAAC,CAAC;QACvF,CAAC;IACH,CAAC;IAAC,OAAO,CAAC,EAAE,CAAC;QACX,IAAI,eAAM,CAAC,KAAK,EAAE,CAAC;YACjB,OAAO,CAAC,GAAG,CAAC,6BAA6B,CAAC,EAAE,CAAC,CAAC;QAChD,CAAC;QACD,sCAAsC;QACtC,MAAM,OAAO,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;QACrC,UAAU,CAAC,OAAO,CAAC,GAAG,OAAO,CAAC,CAAC;IACjC,CAAC;AACH,CAAC"}
@@ -0,0 +1,3 @@
1
+ import { ResponseData } from './schema';
2
+ export declare function makeAsyncWrapper(originalFn: Function, provider: string, parseResponseFn: (result: any) => ResponseData, wrapStreamFn: (result: any, context: any, elapsedMs: number, args: any[]) => any): Function;
3
+ //# sourceMappingURL=wrapper.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"wrapper.d.ts","sourceRoot":"","sources":["../../src/wrapper.ts"],"names":[],"mappings":"AACA,OAAO,EAA0C,YAAY,EAAE,MAAM,UAAU,CAAC;AAGhF,wBAAgB,gBAAgB,CAC9B,UAAU,EAAE,QAAQ,EACpB,QAAQ,EAAE,MAAM,EAChB,eAAe,EAAE,CAAC,MAAM,EAAE,GAAG,KAAK,YAAY,EAC9C,YAAY,EAAE,CAAC,MAAM,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,SAAS,EAAE,MAAM,EAAE,IAAI,EAAE,GAAG,EAAE,KAAK,GAAG,GAC/E,QAAQ,CAgDV"}
@@ -0,0 +1,86 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || (function () {
19
+ var ownKeys = function(o) {
20
+ ownKeys = Object.getOwnPropertyNames || function (o) {
21
+ var ar = [];
22
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
+ return ar;
24
+ };
25
+ return ownKeys(o);
26
+ };
27
+ return function (mod) {
28
+ if (mod && mod.__esModule) return mod;
29
+ var result = {};
30
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
+ __setModuleDefault(result, mod);
32
+ return result;
33
+ };
34
+ })();
35
+ Object.defineProperty(exports, "__esModule", { value: true });
36
+ exports.makeAsyncWrapper = makeAsyncWrapper;
37
+ const config_1 = require("./config");
38
+ const schema_1 = require("./schema");
39
+ const transport = __importStar(require("./transport"));
40
+ function makeAsyncWrapper(originalFn, provider, parseResponseFn, wrapStreamFn) {
41
+ const wrapped = async function (...args) {
42
+ if (!config_1.config.enabled) {
43
+ return originalFn.apply(this, args);
44
+ }
45
+ // 1. Capture context (safe, no-throw)
46
+ let context = null;
47
+ try {
48
+ context = (0, schema_1.buildContext)(provider, args);
49
+ }
50
+ catch {
51
+ // context stays null
52
+ }
53
+ // 2. Detect streaming
54
+ const isStream = args[0]?.stream === true;
55
+ // 3. ALWAYS call original — never blocked, never modified
56
+ const start = performance.now();
57
+ const result = await originalFn.apply(this, args);
58
+ const elapsedMs = Math.round(performance.now() - start);
59
+ // 4. Handle streaming result
60
+ if (isStream && context) {
61
+ try {
62
+ return wrapStreamFn(result, context, elapsedMs, args);
63
+ }
64
+ catch {
65
+ return result;
66
+ }
67
+ }
68
+ // 5. Handle non-streaming result
69
+ if (context) {
70
+ try {
71
+ const event = (0, schema_1.buildEvent)(context, parseResponseFn(result), elapsedMs);
72
+ transport.enqueue(event);
73
+ if (config_1.config.debug)
74
+ (0, schema_1.printCapture)(event);
75
+ }
76
+ catch {
77
+ // swallow silently
78
+ }
79
+ }
80
+ return result;
81
+ };
82
+ // Preserve function name for debugging
83
+ Object.defineProperty(wrapped, 'name', { value: originalFn.name });
84
+ return wrapped;
85
+ }
86
+ //# sourceMappingURL=wrapper.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"wrapper.js","sourceRoot":"","sources":["../../src/wrapper.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAIA,4CAqDC;AAzDD,qCAAkC;AAClC,qCAAgF;AAChF,uDAAyC;AAEzC,SAAgB,gBAAgB,CAC9B,UAAoB,EACpB,QAAgB,EAChB,eAA8C,EAC9C,YAAgF;IAEhF,MAAM,OAAO,GAAG,KAAK,WAAsB,GAAG,IAAW;QACvD,IAAI,CAAC,eAAM,CAAC,OAAO,EAAE,CAAC;YACpB,OAAO,UAAU,CAAC,KAAK,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;QACtC,CAAC;QAED,sCAAsC;QACtC,IAAI,OAAO,GAAQ,IAAI,CAAC;QACxB,IAAI,CAAC;YACH,OAAO,GAAG,IAAA,qBAAY,EAAC,QAAQ,EAAE,IAAI,CAAC,CAAC;QACzC,CAAC;QAAC,MAAM,CAAC;YACP,qBAAqB;QACvB,CAAC;QAED,sBAAsB;QACtB,MAAM,QAAQ,GAAG,IAAI,CAAC,CAAC,CAAC,EAAE,MAAM,KAAK,IAAI,CAAC;QAE1C,0DAA0D;QAC1D,MAAM,KAAK,GAAG,WAAW,CAAC,GAAG,EAAE,CAAC;QAChC,MAAM,MAAM,GAAG,MAAM,UAAU,CAAC,KAAK,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;QAClD,MAAM,SAAS,GAAG,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,GAAG,EAAE,GAAG,KAAK,CAAC,CAAC;QAExD,6BAA6B;QAC7B,IAAI,QAAQ,IAAI,OAAO,EAAE,CAAC;YACxB,IAAI,CAAC;gBACH,OAAO,YAAY,CAAC,MAAM,EAAE,OAAO,EAAE,SAAS,EAAE,IAAI,CAAC,CAAC;YACxD,CAAC;YAAC,MAAM,CAAC;gBACP,OAAO,MAAM,CAAC;YAChB,CAAC;QACH,CAAC;QAED,iCAAiC;QACjC,IAAI,OAAO,EAAE,CAAC;YACZ,IAAI,CAAC;gBACH,MAAM,KAAK,GAAG,IAAA,mBAAU,EAAC,OAAO,EAAE,eAAe,CAAC,MAAM,CAAC,EAAE,SAAS,CAAC,CAAC;gBACtE,SAAS,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;gBACzB,IAAI,eAAM,CAAC,KAAK;oBAAE,IAAA,qBAAY,EAAC,KAAK,CAAC,CAAC;YACxC,CAAC;YAAC,MAAM,CAAC;gBACP,mBAAmB;YACrB,CAAC;QACH,CAAC;QAED,OAAO,MAAM,CAAC;IAChB,CAAC,CAAC;IAEF,uCAAuC;IACvC,MAAM,CAAC,cAAc,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE,KAAK,EAAE,UAAU,CAAC,IAAI,EAAE,CAAC,CAAC;IACnE,OAAO,OAAO,CAAC;AACjB,CAAC"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=auto.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"auto.d.ts","sourceRoot":"","sources":["../../src/auto.ts"],"names":[],"mappings":""}
@@ -0,0 +1,3 @@
1
+ import { init } from "./index";
2
+ init();
3
+ //# sourceMappingURL=auto.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"auto.js","sourceRoot":"","sources":["../../src/auto.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,SAAS,CAAC;AAE/B,IAAI,EAAE,CAAC"}
@@ -0,0 +1,6 @@
1
+ export declare function getCallerInfo(): {
2
+ caller_file?: string;
3
+ caller_function?: string;
4
+ caller_line?: number;
5
+ };
6
+ //# sourceMappingURL=caller.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"caller.d.ts","sourceRoot":"","sources":["../../src/caller.ts"],"names":[],"mappings":"AAAA,wBAAgB,aAAa,IAAI;IAAE,WAAW,CAAC,EAAE,MAAM,CAAC;IAAC,eAAe,CAAC,EAAE,MAAM,CAAC;IAAC,WAAW,CAAC,EAAE,MAAM,CAAA;CAAE,CA0CxG"}
@@ -0,0 +1,59 @@
1
+ export function getCallerInfo() {
2
+ try {
3
+ const err = new Error();
4
+ const stack = err.stack?.split('\n');
5
+ if (!stack)
6
+ return {};
7
+ for (let i = 1; i < stack.length; i++) {
8
+ const line = stack[i];
9
+ // Skip our own SDK frames (dist/ or src/ within the SDK package)
10
+ if (isInternalFrame(line)) {
11
+ continue;
12
+ }
13
+ // Skip node internals
14
+ if (line.includes('node:') || line.includes('(<anonymous>)')) {
15
+ continue;
16
+ }
17
+ // " at functionName (/path/to/file.js:line:col)"
18
+ const matchWithFn = line.match(/at\s+(.+?)\s+\((.+):(\d+):(\d+)\)/);
19
+ if (matchWithFn) {
20
+ return {
21
+ caller_function: matchWithFn[1],
22
+ caller_file: matchWithFn[2],
23
+ caller_line: parseInt(matchWithFn[3], 10),
24
+ };
25
+ }
26
+ // " at /path/to/file.js:line:col"
27
+ const matchNoFn = line.match(/at\s+(.+):(\d+):(\d+)/);
28
+ if (matchNoFn) {
29
+ return {
30
+ caller_file: matchNoFn[1],
31
+ caller_line: parseInt(matchNoFn[2], 10),
32
+ };
33
+ }
34
+ }
35
+ return {};
36
+ }
37
+ catch {
38
+ return {};
39
+ }
40
+ }
41
+ function isInternalFrame(line) {
42
+ // Match frames from our compiled output or source
43
+ // e.g. /path/to/@llmtracer/sdk/dist/cjs/wrapper.js
44
+ // or /path/to/llmtracer-sdk/dist/cjs/schema.js
45
+ // or /path/to/llmtracer-sdk/src/wrapper.ts
46
+ // Skip if it's within our dist/ or src/ directories
47
+ if (line.includes('node_modules/@llmtracer/') ||
48
+ line.includes('node_modules\\@llmtracer\\')) {
49
+ return true;
50
+ }
51
+ // When running from the repo itself (dev/test), skip dist/ and src/ paths
52
+ // but NOT test/ paths
53
+ const distOrSrc = /llmtracer-sdk[/\\](?:dist|src)[/\\]/;
54
+ if (distOrSrc.test(line)) {
55
+ return true;
56
+ }
57
+ return false;
58
+ }
59
+ //# sourceMappingURL=caller.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"caller.js","sourceRoot":"","sources":["../../src/caller.ts"],"names":[],"mappings":"AAAA,MAAM,UAAU,aAAa;IAC3B,IAAI,CAAC;QACH,MAAM,GAAG,GAAG,IAAI,KAAK,EAAE,CAAC;QACxB,MAAM,KAAK,GAAG,GAAG,CAAC,KAAK,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC;QACrC,IAAI,CAAC,KAAK;YAAE,OAAO,EAAE,CAAC;QAEtB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;YACtC,MAAM,IAAI,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;YAEtB,iEAAiE;YACjE,IAAI,eAAe,CAAC,IAAI,CAAC,EAAE,CAAC;gBAC1B,SAAS;YACX,CAAC;YAED,sBAAsB;YACtB,IAAI,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,IAAI,IAAI,CAAC,QAAQ,CAAC,eAAe,CAAC,EAAE,CAAC;gBAC7D,SAAS;YACX,CAAC;YAED,oDAAoD;YACpD,MAAM,WAAW,GAAG,IAAI,CAAC,KAAK,CAAC,mCAAmC,CAAC,CAAC;YACpE,IAAI,WAAW,EAAE,CAAC;gBAChB,OAAO;oBACL,eAAe,EAAE,WAAW,CAAC,CAAC,CAAC;oBAC/B,WAAW,EAAE,WAAW,CAAC,CAAC,CAAC;oBAC3B,WAAW,EAAE,QAAQ,CAAC,WAAW,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC;iBAC1C,CAAC;YACJ,CAAC;YAED,qCAAqC;YACrC,MAAM,SAAS,GAAG,IAAI,CAAC,KAAK,CAAC,uBAAuB,CAAC,CAAC;YACtD,IAAI,SAAS,EAAE,CAAC;gBACd,OAAO;oBACL,WAAW,EAAE,SAAS,CAAC,CAAC,CAAC;oBACzB,WAAW,EAAE,QAAQ,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC;iBACxC,CAAC;YACJ,CAAC;QACH,CAAC;QACD,OAAO,EAAE,CAAC;IACZ,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,EAAE,CAAC;IACZ,CAAC;AACH,CAAC;AAED,SAAS,eAAe,CAAC,IAAY;IACnC,kDAAkD;IAClD,mDAAmD;IACnD,iDAAiD;IACjD,6CAA6C;IAE7C,oDAAoD;IACpD,IACE,IAAI,CAAC,QAAQ,CAAC,0BAA0B,CAAC;QACzC,IAAI,CAAC,QAAQ,CAAC,4BAA4B,CAAC,EAC3C,CAAC;QACD,OAAO,IAAI,CAAC;IACd,CAAC;IAED,0EAA0E;IAC1E,sBAAsB;IACtB,MAAM,SAAS,GAAG,qCAAqC,CAAC;IACxD,IAAI,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;QACzB,OAAO,IAAI,CAAC;IACd,CAAC;IAED,OAAO,KAAK,CAAC;AACf,CAAC"}
@@ -0,0 +1,7 @@
1
+ export declare const config: {
2
+ apiKey: string;
3
+ endpoint: string;
4
+ debug: boolean;
5
+ enabled: boolean;
6
+ };
7
+ //# sourceMappingURL=config.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../src/config.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,MAAM;;;;;CAKlB,CAAC"}
@@ -0,0 +1,7 @@
1
+ export const config = {
2
+ apiKey: '',
3
+ endpoint: 'https://us-central1-llmtracer-alt.cloudfunctions.net/v1Events',
4
+ debug: false,
5
+ enabled: false,
6
+ };
7
+ //# sourceMappingURL=config.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/config.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,MAAM,GAAG;IACpB,MAAM,EAAE,EAAE;IACV,QAAQ,EAAE,+DAA+D;IACzE,KAAK,EAAE,KAAK;IACZ,OAAO,EAAE,KAAK;CACf,CAAC"}
@@ -0,0 +1,9 @@
1
+ export interface TraceContext {
2
+ traceId: string;
3
+ spanId: string;
4
+ tags: Record<string, any>;
5
+ parentSpanId?: string;
6
+ }
7
+ export declare function getCurrent(): TraceContext | undefined;
8
+ export declare function run<T>(tags: Record<string, any>, fn: () => T): T;
9
+ //# sourceMappingURL=context.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"context.d.ts","sourceRoot":"","sources":["../../src/context.ts"],"names":[],"mappings":"AAGA,MAAM,WAAW,YAAY;IAC3B,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;IAC1B,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB;AAID,wBAAgB,UAAU,IAAI,YAAY,GAAG,SAAS,CAErD;AAED,wBAAgB,GAAG,CAAC,CAAC,EAAE,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,MAAM,CAAC,GAAG,CAAC,CAWhE"}
@@ -0,0 +1,17 @@
1
+ import { AsyncLocalStorage } from 'async_hooks';
2
+ import { randomUUID } from 'crypto';
3
+ const store = new AsyncLocalStorage();
4
+ export function getCurrent() {
5
+ return store.getStore();
6
+ }
7
+ export function run(tags, fn) {
8
+ const parent = store.getStore();
9
+ const ctx = {
10
+ traceId: parent?.traceId || randomUUID(),
11
+ spanId: randomUUID(),
12
+ tags: { ...(parent?.tags || {}), ...tags },
13
+ parentSpanId: parent?.spanId,
14
+ };
15
+ return store.run(ctx, fn);
16
+ }
17
+ //# sourceMappingURL=context.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"context.js","sourceRoot":"","sources":["../../src/context.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAC;AAChD,OAAO,EAAE,UAAU,EAAE,MAAM,QAAQ,CAAC;AASpC,MAAM,KAAK,GAAG,IAAI,iBAAiB,EAAgB,CAAC;AAEpD,MAAM,UAAU,UAAU;IACxB,OAAO,KAAK,CAAC,QAAQ,EAAE,CAAC;AAC1B,CAAC;AAED,MAAM,UAAU,GAAG,CAAI,IAAyB,EAAE,EAAW;IAC3D,MAAM,MAAM,GAAG,KAAK,CAAC,QAAQ,EAAE,CAAC;IAEhC,MAAM,GAAG,GAAiB;QACxB,OAAO,EAAE,MAAM,EAAE,OAAO,IAAI,UAAU,EAAE;QACxC,MAAM,EAAE,UAAU,EAAE;QACpB,IAAI,EAAE,EAAE,GAAG,CAAC,MAAM,EAAE,IAAI,IAAI,EAAE,CAAC,EAAE,GAAG,IAAI,EAAE;QAC1C,YAAY,EAAE,MAAM,EAAE,MAAM;KAC7B,CAAC;IAEF,OAAO,KAAK,CAAC,GAAG,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC;AAC5B,CAAC"}
@@ -0,0 +1,20 @@
1
+ import { config } from './config';
2
+ import * as transport from './transport';
3
+ import * as patcher from './patcher';
4
+ export declare const __version__ = "2.0.0";
5
+ export declare function init(options?: {
6
+ apiKey?: string;
7
+ debug?: boolean;
8
+ endpoint?: string;
9
+ }): void;
10
+ export declare function trace<T>(tags: Record<string, any>, fn: () => T | Promise<T>): T | Promise<T>;
11
+ export declare function flush(): Promise<void>;
12
+ export { patcher as _patcher, transport as _transport, config as _config };
13
+ declare const llmtracer: {
14
+ init: typeof init;
15
+ trace: typeof trace;
16
+ flush: typeof flush;
17
+ __version__: string;
18
+ };
19
+ export default llmtracer;
20
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,UAAU,CAAC;AAElC,OAAO,KAAK,SAAS,MAAM,aAAa,CAAC;AACzC,OAAO,KAAK,OAAO,MAAM,WAAW,CAAC;AAErC,eAAO,MAAM,WAAW,UAAU,CAAC;AAEnC,wBAAgB,IAAI,CAAC,OAAO,CAAC,EAAE;IAAE,MAAM,CAAC,EAAE,MAAM,CAAC;IAAC,KAAK,CAAC,EAAE,OAAO,CAAC;IAAC,QAAQ,CAAC,EAAE,MAAM,CAAA;CAAE,GAAG,IAAI,CAsB5F;AAED,wBAAgB,KAAK,CAAC,CAAC,EAAE,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,MAAM,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,CAS5F;AAED,wBAAsB,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC,CAM3C;AAGD,OAAO,EAAE,OAAO,IAAI,QAAQ,EAAE,SAAS,IAAI,UAAU,EAAE,MAAM,IAAI,OAAO,EAAE,CAAC;AAG3E,QAAA,MAAM,SAAS;;;;;CAAsC,CAAC;AACtD,eAAe,SAAS,CAAC"}