@llmtracer/sdk 1.1.0 → 2.0.8

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/caller.d.ts +6 -0
  2. package/dist/cjs/caller.d.ts.map +1 -0
  3. package/dist/cjs/caller.js +62 -0
  4. package/dist/cjs/caller.js.map +1 -0
  5. package/dist/cjs/config.d.ts +7 -0
  6. package/dist/cjs/config.d.ts.map +1 -0
  7. package/dist/cjs/config.js +10 -0
  8. package/dist/cjs/config.js.map +1 -0
  9. package/dist/cjs/context.d.ts +9 -0
  10. package/dist/cjs/context.d.ts.map +1 -0
  11. package/dist/cjs/context.js +21 -0
  12. package/dist/cjs/context.js.map +1 -0
  13. package/dist/cjs/index.d.ts +20 -0
  14. package/dist/cjs/index.d.ts.map +1 -0
  15. package/dist/cjs/index.js +94 -0
  16. package/dist/cjs/index.js.map +1 -0
  17. package/dist/cjs/patcher.d.ts +5 -0
  18. package/dist/cjs/patcher.d.ts.map +1 -0
  19. package/dist/cjs/patcher.js +131 -0
  20. package/dist/cjs/patcher.js.map +1 -0
  21. package/dist/cjs/providers/anthropic.d.ts +4 -0
  22. package/dist/cjs/providers/anthropic.d.ts.map +1 -0
  23. package/dist/cjs/providers/anthropic.js +126 -0
  24. package/dist/cjs/providers/anthropic.js.map +1 -0
  25. package/dist/cjs/providers/google.d.ts +4 -0
  26. package/dist/cjs/providers/google.d.ts.map +1 -0
  27. package/dist/cjs/providers/google.js +133 -0
  28. package/dist/cjs/providers/google.js.map +1 -0
  29. package/dist/cjs/providers/index.d.ts +4 -0
  30. package/dist/cjs/providers/index.d.ts.map +1 -0
  31. package/dist/cjs/providers/index.js +13 -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 +123 -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 +98 -0
  40. package/dist/cjs/schema.js.map +1 -0
  41. package/dist/cjs/transport.d.ts +15 -0
  42. package/dist/cjs/transport.d.ts.map +1 -0
  43. package/dist/cjs/transport.js +130 -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 +97 -0
  48. package/dist/cjs/wrapper.js.map +1 -0
  49. package/dist/esm/caller.d.ts +6 -0
  50. package/dist/esm/caller.d.ts.map +1 -0
  51. package/dist/esm/caller.js +59 -0
  52. package/dist/esm/caller.js.map +1 -0
  53. package/dist/esm/config.d.ts +7 -0
  54. package/dist/esm/config.d.ts.map +1 -0
  55. package/dist/esm/config.js +7 -0
  56. package/dist/esm/config.js.map +1 -0
  57. package/dist/esm/context.d.ts +9 -0
  58. package/dist/esm/context.d.ts.map +1 -0
  59. package/dist/esm/context.js +17 -0
  60. package/dist/esm/context.js.map +1 -0
  61. package/dist/esm/index.d.ts +20 -0
  62. package/dist/esm/index.d.ts.map +1 -0
  63. package/dist/esm/index.js +54 -0
  64. package/dist/esm/index.js.map +1 -0
  65. package/dist/esm/package.json +1 -0
  66. package/dist/esm/patcher.d.ts +5 -0
  67. package/dist/esm/patcher.d.ts.map +1 -0
  68. package/dist/esm/patcher.js +125 -0
  69. package/dist/esm/patcher.js.map +1 -0
  70. package/dist/esm/providers/anthropic.d.ts +4 -0
  71. package/dist/esm/providers/anthropic.d.ts.map +1 -0
  72. package/dist/esm/providers/anthropic.js +89 -0
  73. package/dist/esm/providers/anthropic.js.map +1 -0
  74. package/dist/esm/providers/google.d.ts +4 -0
  75. package/dist/esm/providers/google.d.ts.map +1 -0
  76. package/dist/esm/providers/google.js +96 -0
  77. package/dist/esm/providers/google.js.map +1 -0
  78. package/dist/esm/providers/index.d.ts +4 -0
  79. package/dist/esm/providers/index.d.ts.map +1 -0
  80. package/dist/esm/providers/index.js +4 -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 +86 -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 +93 -0
  89. package/dist/esm/schema.js.map +1 -0
  90. package/dist/esm/transport.d.ts +15 -0
  91. package/dist/esm/transport.d.ts.map +1 -0
  92. package/dist/esm/transport.js +122 -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 +61 -0
  97. package/dist/esm/wrapper.js.map +1 -0
  98. package/package.json +52 -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,97 @@
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
+ // 2b. For OpenAI streams, inject stream_options to get usage data
56
+ if (isStream && provider === 'openai') {
57
+ try {
58
+ if (!args[0].stream_options?.include_usage) {
59
+ args[0] = { ...args[0], stream_options: { ...args[0].stream_options, include_usage: true } };
60
+ }
61
+ }
62
+ catch {
63
+ // swallow — never modify args if something goes wrong
64
+ }
65
+ }
66
+ // 3. ALWAYS call original — never blocked, never modified
67
+ const start = performance.now();
68
+ const result = await originalFn.apply(this, args);
69
+ const elapsedMs = Math.round(performance.now() - start);
70
+ // 4. Handle streaming result
71
+ if (isStream && context) {
72
+ try {
73
+ return wrapStreamFn(result, context, elapsedMs, args);
74
+ }
75
+ catch {
76
+ return result;
77
+ }
78
+ }
79
+ // 5. Handle non-streaming result
80
+ if (context) {
81
+ try {
82
+ const event = (0, schema_1.buildEvent)(context, parseResponseFn(result), elapsedMs);
83
+ transport.enqueue(event);
84
+ if (config_1.config.debug)
85
+ (0, schema_1.printCapture)(event);
86
+ }
87
+ catch {
88
+ // swallow silently
89
+ }
90
+ }
91
+ return result;
92
+ };
93
+ // Preserve function name for debugging
94
+ Object.defineProperty(wrapped, 'name', { value: originalFn.name });
95
+ return wrapped;
96
+ }
97
+ //# sourceMappingURL=wrapper.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"wrapper.js","sourceRoot":"","sources":["../../src/wrapper.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAIA,4CAgEC;AApED,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,kEAAkE;QAClE,IAAI,QAAQ,IAAI,QAAQ,KAAK,QAAQ,EAAE,CAAC;YACtC,IAAI,CAAC;gBACH,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,cAAc,EAAE,aAAa,EAAE,CAAC;oBAC3C,IAAI,CAAC,CAAC,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,CAAC,CAAC,EAAE,cAAc,EAAE,EAAE,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC,cAAc,EAAE,aAAa,EAAE,IAAI,EAAE,EAAE,CAAC;gBAC/F,CAAC;YACH,CAAC;YAAC,MAAM,CAAC;gBACP,sDAAsD;YACxD,CAAC;QACH,CAAC;QAED,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,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.8";
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,CAuB5F;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"}
@@ -0,0 +1,54 @@
1
+ import { config } from './config';
2
+ import * as context from './context';
3
+ import * as transport from './transport';
4
+ import * as patcher from './patcher';
5
+ export const __version__ = '2.0.8';
6
+ export function init(options) {
7
+ try {
8
+ config.apiKey = options?.apiKey || process.env.LLMTRACER_API_KEY || '';
9
+ config.debug = options?.debug || false;
10
+ config.endpoint = options?.endpoint || 'https://us-central1-llmtracer-alt.cloudfunctions.net/v1Events';
11
+ config.enabled = Boolean(config.apiKey);
12
+ if (!config.enabled) {
13
+ if (config.debug)
14
+ console.log('[llmtracer] No API key found. Tracing disabled.');
15
+ return;
16
+ }
17
+ transport.start();
18
+ patcher.patchOpenAI(config.debug);
19
+ patcher.patchAnthropic(config.debug);
20
+ patcher.patchGoogle(config.debug);
21
+ if (config.debug)
22
+ console.log('[llmtracer] Ready. Events \u2192 dashboard.llmtracer.com');
23
+ }
24
+ catch (e) {
25
+ config.enabled = false;
26
+ if (config.debug)
27
+ console.log(`[llmtracer] init() failed: ${e}. Tracing disabled.`);
28
+ }
29
+ }
30
+ export function trace(tags, fn) {
31
+ try {
32
+ if (!config.enabled) {
33
+ return fn();
34
+ }
35
+ return context.run(tags, fn);
36
+ }
37
+ catch {
38
+ return fn();
39
+ }
40
+ }
41
+ export async function flush() {
42
+ try {
43
+ await transport.flush();
44
+ }
45
+ catch {
46
+ // crash-proof: never throw
47
+ }
48
+ }
49
+ // For testing only — not part of public API
50
+ export { patcher as _patcher, transport as _transport, config as _config };
51
+ // Default export for ESM: import llmtracer from 'llmtracer'
52
+ const llmtracer = { init, trace, flush, __version__ };
53
+ export default llmtracer;
54
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,UAAU,CAAC;AAClC,OAAO,KAAK,OAAO,MAAM,WAAW,CAAC;AACrC,OAAO,KAAK,SAAS,MAAM,aAAa,CAAC;AACzC,OAAO,KAAK,OAAO,MAAM,WAAW,CAAC;AAErC,MAAM,CAAC,MAAM,WAAW,GAAG,OAAO,CAAC;AAEnC,MAAM,UAAU,IAAI,CAAC,OAAiE;IACpF,IAAI,CAAC;QACH,MAAM,CAAC,MAAM,GAAG,OAAO,EAAE,MAAM,IAAI,OAAO,CAAC,GAAG,CAAC,iBAAiB,IAAI,EAAE,CAAC;QACvE,MAAM,CAAC,KAAK,GAAG,OAAO,EAAE,KAAK,IAAI,KAAK,CAAC;QACvC,MAAM,CAAC,QAAQ,GAAG,OAAO,EAAE,QAAQ,IAAI,+DAA+D,CAAC;QACvG,MAAM,CAAC,OAAO,GAAG,OAAO,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;QAExC,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC;YACpB,IAAI,MAAM,CAAC,KAAK;gBAAE,OAAO,CAAC,GAAG,CAAC,iDAAiD,CAAC,CAAC;YACjF,OAAO;QACT,CAAC;QAED,SAAS,CAAC,KAAK,EAAE,CAAC;QAElB,OAAO,CAAC,WAAW,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;QAClC,OAAO,CAAC,cAAc,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;QACrC,OAAO,CAAC,WAAW,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;QAElC,IAAI,MAAM,CAAC,KAAK;YAAE,OAAO,CAAC,GAAG,CAAC,0DAA0D,CAAC,CAAC;IAC5F,CAAC;IAAC,OAAO,CAAC,EAAE,CAAC;QACX,MAAM,CAAC,OAAO,GAAG,KAAK,CAAC;QACvB,IAAI,MAAM,CAAC,KAAK;YAAE,OAAO,CAAC,GAAG,CAAC,8BAA8B,CAAC,qBAAqB,CAAC,CAAC;IACtF,CAAC;AACH,CAAC;AAED,MAAM,UAAU,KAAK,CAAI,IAAyB,EAAE,EAAwB;IAC1E,IAAI,CAAC;QACH,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC;YACpB,OAAO,EAAE,EAAE,CAAC;QACd,CAAC;QACD,OAAO,OAAO,CAAC,GAAG,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;IAC/B,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,EAAE,EAAE,CAAC;IACd,CAAC;AACH,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,KAAK;IACzB,IAAI,CAAC;QACH,MAAM,SAAS,CAAC,KAAK,EAAE,CAAC;IAC1B,CAAC;IAAC,MAAM,CAAC;QACP,2BAA2B;IAC7B,CAAC;AACH,CAAC;AAED,4CAA4C;AAC5C,OAAO,EAAE,OAAO,IAAI,QAAQ,EAAE,SAAS,IAAI,UAAU,EAAE,MAAM,IAAI,OAAO,EAAE,CAAC;AAE3E,4DAA4D;AAC5D,MAAM,SAAS,GAAG,EAAE,IAAI,EAAE,KAAK,EAAE,KAAK,EAAE,WAAW,EAAE,CAAC;AACtD,eAAe,SAAS,CAAC"}
@@ -0,0 +1 @@
1
+ {"type":"module"}
@@ -0,0 +1,5 @@
1
+ export declare function patchOpenAI(debug: boolean): void;
2
+ export declare function patchAnthropic(debug: boolean): void;
3
+ export declare function patchGoogle(debug: boolean): void;
4
+ export declare function unpatchAll(): void;
5
+ //# sourceMappingURL=patcher.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"patcher.d.ts","sourceRoot":"","sources":["../../src/patcher.ts"],"names":[],"mappings":"AA6BA,wBAAgB,WAAW,CAAC,KAAK,EAAE,OAAO,GAAG,IAAI,CAyBhD;AAED,wBAAgB,cAAc,CAAC,KAAK,EAAE,OAAO,GAAG,IAAI,CAyBnD;AAED,wBAAgB,WAAW,CAAC,KAAK,EAAE,OAAO,GAAG,IAAI,CAqChD;AAED,wBAAgB,UAAU,IAAI,IAAI,CAMjC"}
@@ -0,0 +1,125 @@
1
+ import { makeAsyncWrapper } from './wrapper';
2
+ import { parseOpenAIResponse, wrapOpenAIStream } from './providers/openai';
3
+ import { parseAnthropicResponse, wrapAnthropicStream } from './providers/anthropic';
4
+ import { parseGoogleResponse, wrapGoogleStream } from './providers/google';
5
+ const originals = new Map();
6
+ function getPackageVersion(packageName) {
7
+ try {
8
+ const path = require('path');
9
+ const fs = require('fs');
10
+ const entryPoint = require.resolve(packageName);
11
+ let dir = path.dirname(entryPoint);
12
+ while (dir !== path.dirname(dir)) {
13
+ const pkgPath = path.join(dir, 'package.json');
14
+ try {
15
+ const pkg = JSON.parse(fs.readFileSync(pkgPath, 'utf8'));
16
+ if (pkg.name === packageName)
17
+ return pkg.version || 'unknown';
18
+ }
19
+ catch {
20
+ // no package.json here, keep walking up
21
+ }
22
+ dir = path.dirname(dir);
23
+ }
24
+ }
25
+ catch {
26
+ // ignore
27
+ }
28
+ return 'unknown';
29
+ }
30
+ export function patchOpenAI(debug) {
31
+ try {
32
+ const completionsModule = require('openai/resources/chat/completions');
33
+ const CompletionsProto = completionsModule.Completions?.prototype;
34
+ if (!CompletionsProto)
35
+ throw new Error('Completions prototype not found');
36
+ if (CompletionsProto._llmtracer_patched)
37
+ return;
38
+ const originalCreate = CompletionsProto.create;
39
+ CompletionsProto.create = makeAsyncWrapper(originalCreate, 'openai', parseOpenAIResponse, wrapOpenAIStream);
40
+ CompletionsProto._llmtracer_patched = true;
41
+ originals.set('openai.Completions.create', {
42
+ target: CompletionsProto,
43
+ methodName: 'create',
44
+ original: originalCreate,
45
+ });
46
+ if (debug) {
47
+ const version = getPackageVersion('openai');
48
+ console.log(`[llmtracer] \u2713 Patched openai (v${version})`);
49
+ }
50
+ }
51
+ catch (e) {
52
+ if (debug)
53
+ console.log(`[llmtracer] \u2717 openai not found or patch failed: ${e}`);
54
+ }
55
+ }
56
+ export function patchAnthropic(debug) {
57
+ try {
58
+ const messagesModule = require('@anthropic-ai/sdk/resources/messages');
59
+ const MessagesProto = messagesModule.Messages?.prototype;
60
+ if (!MessagesProto)
61
+ throw new Error('Messages prototype not found');
62
+ if (MessagesProto._llmtracer_patched)
63
+ return;
64
+ const originalCreate = MessagesProto.create;
65
+ MessagesProto.create = makeAsyncWrapper(originalCreate, 'anthropic', parseAnthropicResponse, wrapAnthropicStream);
66
+ MessagesProto._llmtracer_patched = true;
67
+ originals.set('anthropic.Messages.create', {
68
+ target: MessagesProto,
69
+ methodName: 'create',
70
+ original: originalCreate,
71
+ });
72
+ if (debug) {
73
+ const version = getPackageVersion('@anthropic-ai/sdk');
74
+ console.log(`[llmtracer] \u2713 Patched anthropic (v${version})`);
75
+ }
76
+ }
77
+ catch (e) {
78
+ if (debug)
79
+ console.log(`[llmtracer] \u2717 anthropic not found or patch failed: ${e}`);
80
+ }
81
+ }
82
+ export function patchGoogle(debug) {
83
+ try {
84
+ const googleModule = require('@google/genai');
85
+ const GenModel = googleModule.GenerativeModel?.prototype;
86
+ if (!GenModel)
87
+ throw new Error('GenerativeModel prototype not found');
88
+ if (GenModel._llmtracer_patched)
89
+ return;
90
+ const originalGenerate = GenModel.generateContent;
91
+ GenModel.generateContent = makeAsyncWrapper(originalGenerate, 'google', parseGoogleResponse, wrapGoogleStream);
92
+ GenModel._llmtracer_patched = true;
93
+ originals.set('google.GenerativeModel.generateContent', {
94
+ target: GenModel,
95
+ methodName: 'generateContent',
96
+ original: originalGenerate,
97
+ });
98
+ // Also patch generateContentStream if it exists
99
+ if (typeof GenModel.generateContentStream === 'function') {
100
+ const originalStream = GenModel.generateContentStream;
101
+ GenModel.generateContentStream = makeAsyncWrapper(originalStream, 'google', parseGoogleResponse, wrapGoogleStream);
102
+ originals.set('google.GenerativeModel.generateContentStream', {
103
+ target: GenModel,
104
+ methodName: 'generateContentStream',
105
+ original: originalStream,
106
+ });
107
+ }
108
+ if (debug) {
109
+ const version = getPackageVersion('@google/genai');
110
+ console.log(`[llmtracer] \u2713 Patched google (v${version})`);
111
+ }
112
+ }
113
+ catch (e) {
114
+ if (debug)
115
+ console.log(`[llmtracer] \u2717 google not found or patch failed: ${e}`);
116
+ }
117
+ }
118
+ export function unpatchAll() {
119
+ for (const [, entry] of originals) {
120
+ entry.target[entry.methodName] = entry.original;
121
+ delete entry.target._llmtracer_patched;
122
+ }
123
+ originals.clear();
124
+ }
125
+ //# sourceMappingURL=patcher.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"patcher.js","sourceRoot":"","sources":["../../src/patcher.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,4 @@
1
+ import { ContextData, ResponseData } from '../schema';
2
+ export declare function parseAnthropicResponse(result: any): ResponseData;
3
+ export declare function wrapAnthropicStream(result: any, context: ContextData, elapsedMs: number, args: any[]): any;
4
+ //# sourceMappingURL=anthropic.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"anthropic.d.ts","sourceRoot":"","sources":["../../../src/providers/anthropic.ts"],"names":[],"mappings":"AACA,OAAO,EAA4B,WAAW,EAAE,YAAY,EAAE,MAAM,WAAW,CAAC;AAGhF,wBAAgB,sBAAsB,CAAC,MAAM,EAAE,GAAG,GAAG,YAAY,CAoBhE;AAED,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,GAAG,EAAE,OAAO,EAAE,WAAW,EAAE,SAAS,EAAE,MAAM,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,GAAG,CAsE1G"}
@@ -0,0 +1,89 @@
1
+ import { config } from '../config';
2
+ import { buildEvent, printCapture } from '../schema';
3
+ import * as transport from '../transport';
4
+ export function parseAnthropicResponse(result) {
5
+ const usage = result?.usage;
6
+ const baseInput = usage?.input_tokens || 0;
7
+ const baseOutput = usage?.output_tokens || 0;
8
+ const cacheCreation = usage?.cache_creation_input_tokens || 0;
9
+ const cacheRead = usage?.cache_read_input_tokens || 0;
10
+ if (config.debug) {
11
+ console.log(`[llmtracer] Anthropic tokens — in=${baseInput} out=${baseOutput} cache_create=${cacheCreation} cache_read=${cacheRead}`);
12
+ }
13
+ return {
14
+ provider: 'anthropic',
15
+ model: result?.model || 'unknown',
16
+ input_tokens: baseInput + cacheCreation + cacheRead,
17
+ output_tokens: baseOutput,
18
+ status: result?.stop_reason ? 'success' : 'error',
19
+ };
20
+ }
21
+ export function wrapAnthropicStream(result, context, elapsedMs, args) {
22
+ let model = 'unknown';
23
+ let inputTokens = 0;
24
+ let outputTokens = 0;
25
+ let cacheCreation = 0;
26
+ let cacheRead = 0;
27
+ function record() {
28
+ if (config.debug) {
29
+ console.log(`[llmtracer] Anthropic tokens — in=${inputTokens} out=${outputTokens} cache_create=${cacheCreation} cache_read=${cacheRead}`);
30
+ }
31
+ const event = buildEvent(context, {
32
+ provider: 'anthropic',
33
+ model,
34
+ input_tokens: inputTokens + cacheCreation + cacheRead,
35
+ output_tokens: outputTokens,
36
+ status: 'success',
37
+ }, elapsedMs);
38
+ transport.enqueue(event);
39
+ if (config.debug)
40
+ printCapture(event);
41
+ }
42
+ return new Proxy(result, {
43
+ get(target, prop) {
44
+ if (prop === Symbol.asyncIterator) {
45
+ return function () {
46
+ const originalIterator = target[Symbol.asyncIterator]();
47
+ return {
48
+ async next() {
49
+ const iterResult = await originalIterator.next();
50
+ if (!iterResult.done) {
51
+ const event = iterResult.value;
52
+ // Anthropic stream events:
53
+ // - message_start: contains model and input token count
54
+ // - message_delta: contains output token count
55
+ // - content_block_delta: contains text deltas
56
+ if (event?.type === 'message_start' && event.message) {
57
+ model = event.message.model || model;
58
+ inputTokens = event.message.usage?.input_tokens || inputTokens;
59
+ cacheCreation = event.message.usage?.cache_creation_input_tokens || cacheCreation;
60
+ cacheRead = event.message.usage?.cache_read_input_tokens || cacheRead;
61
+ }
62
+ if (event?.type === 'message_delta' && event.usage) {
63
+ outputTokens = event.usage.output_tokens || outputTokens;
64
+ }
65
+ }
66
+ if (iterResult.done) {
67
+ try {
68
+ record();
69
+ }
70
+ catch {
71
+ // swallow
72
+ }
73
+ }
74
+ return iterResult;
75
+ },
76
+ return: originalIterator.return?.bind(originalIterator),
77
+ throw: originalIterator.throw?.bind(originalIterator),
78
+ };
79
+ };
80
+ }
81
+ const value = target[prop];
82
+ if (typeof value === 'function') {
83
+ return value.bind(target);
84
+ }
85
+ return value;
86
+ },
87
+ });
88
+ }
89
+ //# sourceMappingURL=anthropic.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"anthropic.js","sourceRoot":"","sources":["../../../src/providers/anthropic.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,4 @@
1
+ import { ContextData, ResponseData } from '../schema';
2
+ export declare function parseGoogleResponse(result: any): ResponseData;
3
+ export declare function wrapGoogleStream(result: any, context: ContextData, elapsedMs: number, args: any[]): any;
4
+ //# sourceMappingURL=google.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"google.d.ts","sourceRoot":"","sources":["../../../src/providers/google.ts"],"names":[],"mappings":"AACA,OAAO,EAA4B,WAAW,EAAE,YAAY,EAAE,MAAM,WAAW,CAAC;AAiChF,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,GAAG,GAAG,YAAY,CAmB7D;AAED,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,GAAG,EAAE,OAAO,EAAE,WAAW,EAAE,SAAS,EAAE,MAAM,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,GAAG,CAkEvG"}