@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,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,62 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.getCallerInfo = getCallerInfo;
4
+ function getCallerInfo() {
5
+ try {
6
+ const err = new Error();
7
+ const stack = err.stack?.split('\n');
8
+ if (!stack)
9
+ return {};
10
+ for (let i = 1; i < stack.length; i++) {
11
+ const line = stack[i];
12
+ // Skip our own SDK frames (dist/ or src/ within the SDK package)
13
+ if (isInternalFrame(line)) {
14
+ continue;
15
+ }
16
+ // Skip node internals
17
+ if (line.includes('node:') || line.includes('(<anonymous>)')) {
18
+ continue;
19
+ }
20
+ // " at functionName (/path/to/file.js:line:col)"
21
+ const matchWithFn = line.match(/at\s+(.+?)\s+\((.+):(\d+):(\d+)\)/);
22
+ if (matchWithFn) {
23
+ return {
24
+ caller_function: matchWithFn[1],
25
+ caller_file: matchWithFn[2],
26
+ caller_line: parseInt(matchWithFn[3], 10),
27
+ };
28
+ }
29
+ // " at /path/to/file.js:line:col"
30
+ const matchNoFn = line.match(/at\s+(.+):(\d+):(\d+)/);
31
+ if (matchNoFn) {
32
+ return {
33
+ caller_file: matchNoFn[1],
34
+ caller_line: parseInt(matchNoFn[2], 10),
35
+ };
36
+ }
37
+ }
38
+ return {};
39
+ }
40
+ catch {
41
+ return {};
42
+ }
43
+ }
44
+ function isInternalFrame(line) {
45
+ // Match frames from our compiled output or source
46
+ // e.g. /path/to/@llmtracer/sdk/dist/cjs/wrapper.js
47
+ // or /path/to/llmtracer-sdk/dist/cjs/schema.js
48
+ // or /path/to/llmtracer-sdk/src/wrapper.ts
49
+ // Skip if it's within our dist/ or src/ directories
50
+ if (line.includes('node_modules/@llmtracer/') ||
51
+ line.includes('node_modules\\@llmtracer\\')) {
52
+ return true;
53
+ }
54
+ // When running from the repo itself (dev/test), skip dist/ and src/ paths
55
+ // but NOT test/ paths
56
+ const distOrSrc = /llmtracer-sdk[/\\](?:dist|src)[/\\]/;
57
+ if (distOrSrc.test(line)) {
58
+ return true;
59
+ }
60
+ return false;
61
+ }
62
+ //# sourceMappingURL=caller.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"caller.js","sourceRoot":"","sources":["../../src/caller.ts"],"names":[],"mappings":";;AAAA,sCA0CC;AA1CD,SAAgB,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,10 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.config = void 0;
4
+ exports.config = {
5
+ apiKey: '',
6
+ endpoint: 'https://us-central1-llmtracer-alt.cloudfunctions.net/v1Events',
7
+ debug: false,
8
+ enabled: false,
9
+ };
10
+ //# sourceMappingURL=config.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/config.ts"],"names":[],"mappings":";;;AAAa,QAAA,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,21 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.getCurrent = getCurrent;
4
+ exports.run = run;
5
+ const async_hooks_1 = require("async_hooks");
6
+ const crypto_1 = require("crypto");
7
+ const store = new async_hooks_1.AsyncLocalStorage();
8
+ function getCurrent() {
9
+ return store.getStore();
10
+ }
11
+ function run(tags, fn) {
12
+ const parent = store.getStore();
13
+ const ctx = {
14
+ traceId: parent?.traceId || (0, crypto_1.randomUUID)(),
15
+ spanId: (0, crypto_1.randomUUID)(),
16
+ tags: { ...(parent?.tags || {}), ...tags },
17
+ parentSpanId: parent?.spanId,
18
+ };
19
+ return store.run(ctx, fn);
20
+ }
21
+ //# sourceMappingURL=context.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"context.js","sourceRoot":"","sources":["../../src/context.ts"],"names":[],"mappings":";;AAYA,gCAEC;AAED,kBAWC;AA3BD,6CAAgD;AAChD,mCAAoC;AASpC,MAAM,KAAK,GAAG,IAAI,+BAAiB,EAAgB,CAAC;AAEpD,SAAgB,UAAU;IACxB,OAAO,KAAK,CAAC,QAAQ,EAAE,CAAC;AAC1B,CAAC;AAED,SAAgB,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,IAAA,mBAAU,GAAE;QACxC,MAAM,EAAE,IAAA,mBAAU,GAAE;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,94 @@
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._config = exports._transport = exports._patcher = exports.__version__ = void 0;
37
+ exports.init = init;
38
+ exports.trace = trace;
39
+ exports.flush = flush;
40
+ const config_1 = require("./config");
41
+ Object.defineProperty(exports, "_config", { enumerable: true, get: function () { return config_1.config; } });
42
+ const context = __importStar(require("./context"));
43
+ const transport = __importStar(require("./transport"));
44
+ exports._transport = transport;
45
+ const patcher = __importStar(require("./patcher"));
46
+ exports._patcher = patcher;
47
+ exports.__version__ = '2.0.8';
48
+ function init(options) {
49
+ try {
50
+ config_1.config.apiKey = options?.apiKey || process.env.LLMTRACER_API_KEY || '';
51
+ config_1.config.debug = options?.debug || false;
52
+ config_1.config.endpoint = options?.endpoint || 'https://us-central1-llmtracer-alt.cloudfunctions.net/v1Events';
53
+ config_1.config.enabled = Boolean(config_1.config.apiKey);
54
+ if (!config_1.config.enabled) {
55
+ if (config_1.config.debug)
56
+ console.log('[llmtracer] No API key found. Tracing disabled.');
57
+ return;
58
+ }
59
+ transport.start();
60
+ patcher.patchOpenAI(config_1.config.debug);
61
+ patcher.patchAnthropic(config_1.config.debug);
62
+ patcher.patchGoogle(config_1.config.debug);
63
+ if (config_1.config.debug)
64
+ console.log('[llmtracer] Ready. Events \u2192 dashboard.llmtracer.com');
65
+ }
66
+ catch (e) {
67
+ config_1.config.enabled = false;
68
+ if (config_1.config.debug)
69
+ console.log(`[llmtracer] init() failed: ${e}. Tracing disabled.`);
70
+ }
71
+ }
72
+ function trace(tags, fn) {
73
+ try {
74
+ if (!config_1.config.enabled) {
75
+ return fn();
76
+ }
77
+ return context.run(tags, fn);
78
+ }
79
+ catch {
80
+ return fn();
81
+ }
82
+ }
83
+ async function flush() {
84
+ try {
85
+ await transport.flush();
86
+ }
87
+ catch {
88
+ // crash-proof: never throw
89
+ }
90
+ }
91
+ // Default export for ESM: import llmtracer from 'llmtracer'
92
+ const llmtracer = { init, trace, flush, __version__: exports.__version__ };
93
+ exports.default = llmtracer;
94
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAOA,oBAuBC;AAED,sBASC;AAED,sBAMC;AAjDD,qCAAkC;AAoD+B,wFApDxD,eAAM,OAoDyD;AAnDxE,mDAAqC;AACrC,uDAAyC;AAkDE,+BAAU;AAjDrD,mDAAqC;AAiDjB,2BAAQ;AA/Cf,QAAA,WAAW,GAAG,OAAO,CAAC;AAEnC,SAAgB,IAAI,CAAC,OAAiE;IACpF,IAAI,CAAC;QACH,eAAM,CAAC,MAAM,GAAG,OAAO,EAAE,MAAM,IAAI,OAAO,CAAC,GAAG,CAAC,iBAAiB,IAAI,EAAE,CAAC;QACvE,eAAM,CAAC,KAAK,GAAG,OAAO,EAAE,KAAK,IAAI,KAAK,CAAC;QACvC,eAAM,CAAC,QAAQ,GAAG,OAAO,EAAE,QAAQ,IAAI,+DAA+D,CAAC;QACvG,eAAM,CAAC,OAAO,GAAG,OAAO,CAAC,eAAM,CAAC,MAAM,CAAC,CAAC;QAExC,IAAI,CAAC,eAAM,CAAC,OAAO,EAAE,CAAC;YACpB,IAAI,eAAM,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,eAAM,CAAC,KAAK,CAAC,CAAC;QAClC,OAAO,CAAC,cAAc,CAAC,eAAM,CAAC,KAAK,CAAC,CAAC;QACrC,OAAO,CAAC,WAAW,CAAC,eAAM,CAAC,KAAK,CAAC,CAAC;QAElC,IAAI,eAAM,CAAC,KAAK;YAAE,OAAO,CAAC,GAAG,CAAC,0DAA0D,CAAC,CAAC;IAC5F,CAAC;IAAC,OAAO,CAAC,EAAE,CAAC;QACX,eAAM,CAAC,OAAO,GAAG,KAAK,CAAC;QACvB,IAAI,eAAM,CAAC,KAAK;YAAE,OAAO,CAAC,GAAG,CAAC,8BAA8B,CAAC,qBAAqB,CAAC,CAAC;IACtF,CAAC;AACH,CAAC;AAED,SAAgB,KAAK,CAAI,IAAyB,EAAE,EAAwB;IAC1E,IAAI,CAAC;QACH,IAAI,CAAC,eAAM,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;AAEM,KAAK,UAAU,KAAK;IACzB,IAAI,CAAC;QACH,MAAM,SAAS,CAAC,KAAK,EAAE,CAAC;IAC1B,CAAC;IAAC,MAAM,CAAC;QACP,2BAA2B;IAC7B,CAAC;AACH,CAAC;AAKD,4DAA4D;AAC5D,MAAM,SAAS,GAAG,EAAE,IAAI,EAAE,KAAK,EAAE,KAAK,EAAE,WAAW,EAAX,mBAAW,EAAE,CAAC;AACtD,kBAAe,SAAS,CAAC"}
@@ -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,131 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.patchOpenAI = patchOpenAI;
4
+ exports.patchAnthropic = patchAnthropic;
5
+ exports.patchGoogle = patchGoogle;
6
+ exports.unpatchAll = unpatchAll;
7
+ const wrapper_1 = require("./wrapper");
8
+ const openai_1 = require("./providers/openai");
9
+ const anthropic_1 = require("./providers/anthropic");
10
+ const google_1 = require("./providers/google");
11
+ const originals = new Map();
12
+ function getPackageVersion(packageName) {
13
+ try {
14
+ const path = require('path');
15
+ const fs = require('fs');
16
+ const entryPoint = require.resolve(packageName);
17
+ let dir = path.dirname(entryPoint);
18
+ while (dir !== path.dirname(dir)) {
19
+ const pkgPath = path.join(dir, 'package.json');
20
+ try {
21
+ const pkg = JSON.parse(fs.readFileSync(pkgPath, 'utf8'));
22
+ if (pkg.name === packageName)
23
+ return pkg.version || 'unknown';
24
+ }
25
+ catch {
26
+ // no package.json here, keep walking up
27
+ }
28
+ dir = path.dirname(dir);
29
+ }
30
+ }
31
+ catch {
32
+ // ignore
33
+ }
34
+ return 'unknown';
35
+ }
36
+ function patchOpenAI(debug) {
37
+ try {
38
+ const completionsModule = require('openai/resources/chat/completions');
39
+ const CompletionsProto = completionsModule.Completions?.prototype;
40
+ if (!CompletionsProto)
41
+ throw new Error('Completions prototype not found');
42
+ if (CompletionsProto._llmtracer_patched)
43
+ return;
44
+ const originalCreate = CompletionsProto.create;
45
+ CompletionsProto.create = (0, wrapper_1.makeAsyncWrapper)(originalCreate, 'openai', openai_1.parseOpenAIResponse, openai_1.wrapOpenAIStream);
46
+ CompletionsProto._llmtracer_patched = true;
47
+ originals.set('openai.Completions.create', {
48
+ target: CompletionsProto,
49
+ methodName: 'create',
50
+ original: originalCreate,
51
+ });
52
+ if (debug) {
53
+ const version = getPackageVersion('openai');
54
+ console.log(`[llmtracer] \u2713 Patched openai (v${version})`);
55
+ }
56
+ }
57
+ catch (e) {
58
+ if (debug)
59
+ console.log(`[llmtracer] \u2717 openai not found or patch failed: ${e}`);
60
+ }
61
+ }
62
+ function patchAnthropic(debug) {
63
+ try {
64
+ const messagesModule = require('@anthropic-ai/sdk/resources/messages');
65
+ const MessagesProto = messagesModule.Messages?.prototype;
66
+ if (!MessagesProto)
67
+ throw new Error('Messages prototype not found');
68
+ if (MessagesProto._llmtracer_patched)
69
+ return;
70
+ const originalCreate = MessagesProto.create;
71
+ MessagesProto.create = (0, wrapper_1.makeAsyncWrapper)(originalCreate, 'anthropic', anthropic_1.parseAnthropicResponse, anthropic_1.wrapAnthropicStream);
72
+ MessagesProto._llmtracer_patched = true;
73
+ originals.set('anthropic.Messages.create', {
74
+ target: MessagesProto,
75
+ methodName: 'create',
76
+ original: originalCreate,
77
+ });
78
+ if (debug) {
79
+ const version = getPackageVersion('@anthropic-ai/sdk');
80
+ console.log(`[llmtracer] \u2713 Patched anthropic (v${version})`);
81
+ }
82
+ }
83
+ catch (e) {
84
+ if (debug)
85
+ console.log(`[llmtracer] \u2717 anthropic not found or patch failed: ${e}`);
86
+ }
87
+ }
88
+ function patchGoogle(debug) {
89
+ try {
90
+ const googleModule = require('@google/genai');
91
+ const GenModel = googleModule.GenerativeModel?.prototype;
92
+ if (!GenModel)
93
+ throw new Error('GenerativeModel prototype not found');
94
+ if (GenModel._llmtracer_patched)
95
+ return;
96
+ const originalGenerate = GenModel.generateContent;
97
+ GenModel.generateContent = (0, wrapper_1.makeAsyncWrapper)(originalGenerate, 'google', google_1.parseGoogleResponse, google_1.wrapGoogleStream);
98
+ GenModel._llmtracer_patched = true;
99
+ originals.set('google.GenerativeModel.generateContent', {
100
+ target: GenModel,
101
+ methodName: 'generateContent',
102
+ original: originalGenerate,
103
+ });
104
+ // Also patch generateContentStream if it exists
105
+ if (typeof GenModel.generateContentStream === 'function') {
106
+ const originalStream = GenModel.generateContentStream;
107
+ GenModel.generateContentStream = (0, wrapper_1.makeAsyncWrapper)(originalStream, 'google', google_1.parseGoogleResponse, google_1.wrapGoogleStream);
108
+ originals.set('google.GenerativeModel.generateContentStream', {
109
+ target: GenModel,
110
+ methodName: 'generateContentStream',
111
+ original: originalStream,
112
+ });
113
+ }
114
+ if (debug) {
115
+ const version = getPackageVersion('@google/genai');
116
+ console.log(`[llmtracer] \u2713 Patched google (v${version})`);
117
+ }
118
+ }
119
+ catch (e) {
120
+ if (debug)
121
+ console.log(`[llmtracer] \u2717 google not found or patch failed: ${e}`);
122
+ }
123
+ }
124
+ function unpatchAll() {
125
+ for (const [, entry] of originals) {
126
+ entry.target[entry.methodName] = entry.original;
127
+ delete entry.target._llmtracer_patched;
128
+ }
129
+ originals.clear();
130
+ }
131
+ //# 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,126 @@
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.parseAnthropicResponse = parseAnthropicResponse;
37
+ exports.wrapAnthropicStream = wrapAnthropicStream;
38
+ const config_1 = require("../config");
39
+ const schema_1 = require("../schema");
40
+ const transport = __importStar(require("../transport"));
41
+ function parseAnthropicResponse(result) {
42
+ const usage = result?.usage;
43
+ const baseInput = usage?.input_tokens || 0;
44
+ const baseOutput = usage?.output_tokens || 0;
45
+ const cacheCreation = usage?.cache_creation_input_tokens || 0;
46
+ const cacheRead = usage?.cache_read_input_tokens || 0;
47
+ if (config_1.config.debug) {
48
+ console.log(`[llmtracer] Anthropic tokens — in=${baseInput} out=${baseOutput} cache_create=${cacheCreation} cache_read=${cacheRead}`);
49
+ }
50
+ return {
51
+ provider: 'anthropic',
52
+ model: result?.model || 'unknown',
53
+ input_tokens: baseInput + cacheCreation + cacheRead,
54
+ output_tokens: baseOutput,
55
+ status: result?.stop_reason ? 'success' : 'error',
56
+ };
57
+ }
58
+ function wrapAnthropicStream(result, context, elapsedMs, args) {
59
+ let model = 'unknown';
60
+ let inputTokens = 0;
61
+ let outputTokens = 0;
62
+ let cacheCreation = 0;
63
+ let cacheRead = 0;
64
+ function record() {
65
+ if (config_1.config.debug) {
66
+ console.log(`[llmtracer] Anthropic tokens — in=${inputTokens} out=${outputTokens} cache_create=${cacheCreation} cache_read=${cacheRead}`);
67
+ }
68
+ const event = (0, schema_1.buildEvent)(context, {
69
+ provider: 'anthropic',
70
+ model,
71
+ input_tokens: inputTokens + cacheCreation + cacheRead,
72
+ output_tokens: outputTokens,
73
+ status: 'success',
74
+ }, elapsedMs);
75
+ transport.enqueue(event);
76
+ if (config_1.config.debug)
77
+ (0, schema_1.printCapture)(event);
78
+ }
79
+ return new Proxy(result, {
80
+ get(target, prop) {
81
+ if (prop === Symbol.asyncIterator) {
82
+ return function () {
83
+ const originalIterator = target[Symbol.asyncIterator]();
84
+ return {
85
+ async next() {
86
+ const iterResult = await originalIterator.next();
87
+ if (!iterResult.done) {
88
+ const event = iterResult.value;
89
+ // Anthropic stream events:
90
+ // - message_start: contains model and input token count
91
+ // - message_delta: contains output token count
92
+ // - content_block_delta: contains text deltas
93
+ if (event?.type === 'message_start' && event.message) {
94
+ model = event.message.model || model;
95
+ inputTokens = event.message.usage?.input_tokens || inputTokens;
96
+ cacheCreation = event.message.usage?.cache_creation_input_tokens || cacheCreation;
97
+ cacheRead = event.message.usage?.cache_read_input_tokens || cacheRead;
98
+ }
99
+ if (event?.type === 'message_delta' && event.usage) {
100
+ outputTokens = event.usage.output_tokens || outputTokens;
101
+ }
102
+ }
103
+ if (iterResult.done) {
104
+ try {
105
+ record();
106
+ }
107
+ catch {
108
+ // swallow
109
+ }
110
+ }
111
+ return iterResult;
112
+ },
113
+ return: originalIterator.return?.bind(originalIterator),
114
+ throw: originalIterator.throw?.bind(originalIterator),
115
+ };
116
+ };
117
+ }
118
+ const value = target[prop];
119
+ if (typeof value === 'function') {
120
+ return value.bind(target);
121
+ }
122
+ return value;
123
+ },
124
+ });
125
+ }
126
+ //# 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"}