@traceroot-ai/traceroot 0.1.0-alpha.3 → 0.1.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +201 -0
- package/README.md +3 -3
- package/dist/constants.d.ts +38 -0
- package/dist/constants.d.ts.map +1 -0
- package/dist/constants.js +52 -0
- package/dist/constants.js.map +1 -0
- package/dist/context.d.ts +24 -2
- package/dist/context.d.ts.map +1 -1
- package/dist/context.js +86 -6
- package/dist/context.js.map +1 -1
- package/dist/git_context.d.ts +21 -0
- package/dist/git_context.d.ts.map +1 -0
- package/dist/git_context.js +100 -0
- package/dist/git_context.js.map +1 -0
- package/dist/index.d.ts +4 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +7 -1
- package/dist/index.js.map +1 -1
- package/dist/instrumentation.d.ts.map +1 -1
- package/dist/instrumentation.js.map +1 -1
- package/dist/observe.d.ts +25 -6
- package/dist/observe.d.ts.map +1 -1
- package/dist/observe.js +165 -26
- package/dist/observe.js.map +1 -1
- package/dist/processor.d.ts +9 -1
- package/dist/processor.d.ts.map +1 -1
- package/dist/processor.js +16 -1
- package/dist/processor.js.map +1 -1
- package/dist/traceroot.d.ts.map +1 -1
- package/dist/traceroot.js +37 -3
- package/dist/traceroot.js.map +1 -1
- package/dist/types.d.ts +46 -2
- package/dist/types.d.ts.map +1 -1
- package/dist/usingAttributes.d.ts +29 -0
- package/dist/usingAttributes.d.ts.map +1 -0
- package/dist/usingAttributes.js +40 -0
- package/dist/usingAttributes.js.map +1 -0
- package/package.json +30 -14
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AACxC,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AACxC,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EACL,iBAAiB,EACjB,kBAAkB,EAClB,iBAAiB,EACjB,gBAAgB,GACjB,MAAM,WAAW,CAAC;AACnB,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AACpD,OAAO,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAC7C,YAAY,EAAE,QAAQ,EAAE,cAAc,EAAE,iBAAiB,EAAE,MAAM,SAAS,CAAC;AAC3E,YAAY,EAAE,sBAAsB,EAAE,MAAM,mBAAmB,CAAC"}
|
package/dist/index.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.updateCurrentTrace = exports.updateCurrentSpan = exports.observe = exports.TraceRoot = void 0;
|
|
3
|
+
exports.SpanAttributes = exports.usingAttributes = exports.getCurrentSpanId = exports.getCurrentTraceId = exports.updateCurrentTrace = exports.updateCurrentSpan = exports.observe = exports.TraceRoot = void 0;
|
|
4
4
|
// src/index.ts
|
|
5
5
|
var traceroot_1 = require("./traceroot");
|
|
6
6
|
Object.defineProperty(exports, "TraceRoot", { enumerable: true, get: function () { return traceroot_1.TraceRoot; } });
|
|
@@ -9,4 +9,10 @@ Object.defineProperty(exports, "observe", { enumerable: true, get: function () {
|
|
|
9
9
|
var context_1 = require("./context");
|
|
10
10
|
Object.defineProperty(exports, "updateCurrentSpan", { enumerable: true, get: function () { return context_1.updateCurrentSpan; } });
|
|
11
11
|
Object.defineProperty(exports, "updateCurrentTrace", { enumerable: true, get: function () { return context_1.updateCurrentTrace; } });
|
|
12
|
+
Object.defineProperty(exports, "getCurrentTraceId", { enumerable: true, get: function () { return context_1.getCurrentTraceId; } });
|
|
13
|
+
Object.defineProperty(exports, "getCurrentSpanId", { enumerable: true, get: function () { return context_1.getCurrentSpanId; } });
|
|
14
|
+
var usingAttributes_1 = require("./usingAttributes");
|
|
15
|
+
Object.defineProperty(exports, "usingAttributes", { enumerable: true, get: function () { return usingAttributes_1.usingAttributes; } });
|
|
16
|
+
var constants_1 = require("./constants");
|
|
17
|
+
Object.defineProperty(exports, "SpanAttributes", { enumerable: true, get: function () { return constants_1.SpanAttributes; } });
|
|
12
18
|
//# sourceMappingURL=index.js.map
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;AAAA,eAAe;AACf,yCAAwC;AAA/B,sGAAA,SAAS,OAAA;AAClB,qCAAoC;AAA3B,kGAAA,OAAO,OAAA;AAChB,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;AAAA,eAAe;AACf,yCAAwC;AAA/B,sGAAA,SAAS,OAAA;AAClB,qCAAoC;AAA3B,kGAAA,OAAO,OAAA;AAChB,qCAKmB;AAJjB,4GAAA,iBAAiB,OAAA;AACjB,6GAAA,kBAAkB,OAAA;AAClB,4GAAA,iBAAiB,OAAA;AACjB,2GAAA,gBAAgB,OAAA;AAElB,qDAAoD;AAA3C,kHAAA,eAAe,OAAA;AACxB,yCAA6C;AAApC,2GAAA,cAAc,OAAA"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"instrumentation.d.ts","sourceRoot":"","sources":["../src/instrumentation.ts"],"names":[],"mappings":"AAOA,OAAO,EAAE,iBAAiB,EAAE,MAAM,SAAS,CAAC;
|
|
1
|
+
{"version":3,"file":"instrumentation.d.ts","sourceRoot":"","sources":["../src/instrumentation.ts"],"names":[],"mappings":"AAOA,OAAO,EAAE,iBAAiB,EAAE,MAAM,SAAS,CAAC;AAE5C;;;;;;;;GAQG;AACH,wBAAgB,oBAAoB,CAClC,iBAAiB,EAAE,iBAAiB,CAAC,mBAAmB,CAAC,GACxD,IAAI,CAsDN"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"instrumentation.js","sourceRoot":"","sources":["../src/instrumentation.ts"],"names":[],"mappings":";;
|
|
1
|
+
{"version":3,"file":"instrumentation.js","sourceRoot":"","sources":["../src/instrumentation.ts"],"names":[],"mappings":";;AAkBA,oDAwDC;AA1ED,yBAAyB;AACzB,oEAA0E;AAC1E,8GAA4F;AAC5F,0GAAwF;AACxF,4HAAwG;AACxG,8GAA4F;AAC5F,wGAAsF;AAGtF;;;;;;;;GAQG;AACH,SAAgB,oBAAoB,CAClC,iBAAyD;IAEzD,IAAI,iBAAiB,KAAK,SAAS,EAAE,CAAC;QACpC,6DAA6D;QAC7D,4CAA4C;QAC5C,IAAA,0CAAwB,EAAC;YACvB,gBAAgB,EAAE;gBAChB,IAAI,4DAAqB,EAAE;gBAC3B,IAAI,kEAAwB,EAAE;gBAC9B,IAAI,kEAAwB,EAAE;gBAC9B,IAAI,8EAA6B,EAAE;gBACnC,IAAI,8DAAsB,EAAE;aAC7B;SACF,CAAC,CAAC;QACH,OAAO;IACT,CAAC;IAED,MAAM,MAAM,GAMN,EAAE,CAAC;IAET,IAAI,iBAAiB,CAAC,MAAM,EAAE,CAAC;QAC7B,MAAM,KAAK,GAAG,IAAI,4DAAqB,EAAE,CAAC;QAC1C,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QACnB,KAAK,CAAC,kBAAkB,CAAC,iBAAiB,CAAC,MAAa,CAAC,CAAC;IAC5D,CAAC;IACD,IAAI,iBAAiB,CAAC,SAAS,EAAE,CAAC;QAChC,MAAM,KAAK,GAAG,IAAI,kEAAwB,EAAE,CAAC;QAC7C,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QACnB,KAAK,CAAC,kBAAkB,CAAC,iBAAiB,CAAC,SAAgB,CAAC,CAAC;IAC/D,CAAC;IACD,IAAI,iBAAiB,CAAC,SAAS,EAAE,CAAC;QAChC,4FAA4F;QAC5F,MAAM,KAAK,GAAG,IAAI,kEAAwB,EAAE,CAAC;QAC7C,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QACnB,KAAK,CAAC,kBAAkB,CAAC,iBAAiB,CAAC,SAAgB,CAAC,CAAC;IAC/D,CAAC;IACD,IAAI,iBAAiB,CAAC,cAAc,EAAE,CAAC;QACrC,MAAM,KAAK,GAAG,IAAI,8EAA6B,EAAE,CAAC;QAClD,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QACnB,KAAK,CAAC,kBAAkB,CAAC,iBAAiB,CAAC,cAAqB,CAAC,CAAC;IACpE,CAAC;IACD,IAAI,iBAAiB,CAAC,OAAO,EAAE,CAAC;QAC9B,MAAM,KAAK,GAAG,IAAI,8DAAsB,EAAE,CAAC;QAC3C,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QACnB,KAAK,CAAC,kBAAkB,CAAC,iBAAiB,CAAC,OAAc,CAAC,CAAC;IAC7D,CAAC;IAED,IAAI,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACtB,IAAA,0CAAwB,EAAC,EAAE,gBAAgB,EAAE,MAAM,EAAE,CAAC,CAAC;IACzD,CAAC;AACH,CAAC"}
|
package/dist/observe.d.ts
CHANGED
|
@@ -1,13 +1,32 @@
|
|
|
1
1
|
import { ObserveOptions } from './types';
|
|
2
2
|
/**
|
|
3
|
-
* Wraps fn() in an OpenTelemetry span, capturing input
|
|
4
|
-
*
|
|
5
|
-
* via AsyncLocalStorage context propagation.
|
|
3
|
+
* Wraps fn(...args) in an OpenTelemetry span, auto-capturing arguments as input
|
|
4
|
+
* and the return value as output using OpenInference semconv.
|
|
6
5
|
*
|
|
7
|
-
*
|
|
8
|
-
*
|
|
6
|
+
* API: observe(options, fn, ...args)
|
|
7
|
+
* - Input is auto-captured from args (single arg → direct value, multiple → array).
|
|
8
|
+
* Pass captureInput: false to suppress.
|
|
9
|
+
* - Output is auto-captured from the return value (pass captureOutput: false to suppress).
|
|
10
|
+
* - If fn is an async generator function, the span stays open until the generator is
|
|
11
|
+
* exhausted and all yielded items are collected as output.
|
|
12
|
+
* - Nested calls automatically become child spans via AsyncLocalStorage context propagation.
|
|
13
|
+
* - Works as a no-op if TraceRoot is not initialized. Auto-initializes if TRACEROOT_API_KEY is set.
|
|
14
|
+
*
|
|
15
|
+
* @example
|
|
16
|
+
* // Auto-capture args as input, return value as output:
|
|
17
|
+
* const result = await observe({ name: 'search', type: 'tool' }, search, query, k);
|
|
18
|
+
*
|
|
19
|
+
* // Zero-arg thunk (backward compat — no input captured):
|
|
20
|
+
* const result = await observe({ name: 'work' }, async () => doWork());
|
|
21
|
+
*
|
|
22
|
+
* // Suppress PII input or large output:
|
|
23
|
+
* await observe({ name: 'handle', captureInput: false, captureOutput: false }, fn, arg);
|
|
24
|
+
*
|
|
25
|
+
* // Associate with a session/user:
|
|
26
|
+
* await observe({ name: 'chat', sessionId: 'sess-123', userId: 'user-abc' }, handler, msg);
|
|
9
27
|
*/
|
|
10
|
-
export declare function observe<T>(options: ObserveOptions, fn: () => T
|
|
28
|
+
export declare function observe<A extends unknown[], T>(options: ObserveOptions, fn: (...args: A) => AsyncGenerator<T>, ...args: A): AsyncGenerator<T>;
|
|
29
|
+
export declare function observe<A extends unknown[], T>(options: ObserveOptions, fn: (...args: A) => T | Promise<T>, ...args: A): Promise<T>;
|
|
11
30
|
/** @internal — reset module state between tests */
|
|
12
31
|
export declare function _resetObserveState(): void;
|
|
13
32
|
//# sourceMappingURL=observe.d.ts.map
|
package/dist/observe.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"observe.d.ts","sourceRoot":"","sources":["../src/observe.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"observe.d.ts","sourceRoot":"","sources":["../src/observe.ts"],"names":[],"mappings":"AAWA,OAAO,EAAE,cAAc,EAAY,MAAM,SAAS,CAAC;AAiCnD;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AAEH,wBAAgB,OAAO,CAAC,CAAC,SAAS,OAAO,EAAE,EAAE,CAAC,EAC5C,OAAO,EAAE,cAAc,EACvB,EAAE,EAAE,CAAC,GAAG,IAAI,EAAE,CAAC,KAAK,cAAc,CAAC,CAAC,CAAC,EACrC,GAAG,IAAI,EAAE,CAAC,GACT,cAAc,CAAC,CAAC,CAAC,CAAC;AAGrB,wBAAgB,OAAO,CAAC,CAAC,SAAS,OAAO,EAAE,EAAE,CAAC,EAC5C,OAAO,EAAE,cAAc,EACvB,EAAE,EAAE,CAAC,GAAG,IAAI,EAAE,CAAC,KAAK,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,EAClC,GAAG,IAAI,EAAE,CAAC,GACT,OAAO,CAAC,CAAC,CAAC,CAAC;AAoKd,mDAAmD;AACnD,wBAAgB,kBAAkB,IAAI,IAAI,CAGzC"}
|
package/dist/observe.js
CHANGED
|
@@ -1,10 +1,46 @@
|
|
|
1
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
|
+
})();
|
|
2
35
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
36
|
exports.observe = observe;
|
|
4
37
|
exports._resetObserveState = _resetObserveState;
|
|
5
38
|
// src/observe.ts
|
|
6
39
|
const api_1 = require("@opentelemetry/api");
|
|
40
|
+
const openinference_core_1 = require("@arizeai/openinference-core");
|
|
7
41
|
const openinference_semantic_conventions_1 = require("@arizeai/openinference-semantic-conventions");
|
|
42
|
+
const constants_1 = require("./constants");
|
|
43
|
+
const git_context_1 = require("./git_context");
|
|
8
44
|
const OPENINFERENCE_SPAN_KIND = openinference_semantic_conventions_1.SemanticConventions.OPENINFERENCE_SPAN_KIND;
|
|
9
45
|
const SPAN_KIND_MAP = {
|
|
10
46
|
agent: 'AGENT',
|
|
@@ -15,47 +51,58 @@ const SPAN_KIND_MAP = {
|
|
|
15
51
|
// Cached once after the first call; the tracer name never changes.
|
|
16
52
|
let _tracer;
|
|
17
53
|
let _hasWarnedUninit = false;
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
54
|
+
const AsyncGeneratorFunction = Object.getPrototypeOf(async function* () { })
|
|
55
|
+
.constructor;
|
|
56
|
+
/** Returns true if fn is declared as `async function*` — without calling it. */
|
|
57
|
+
function isAsyncGeneratorFunction(fn) {
|
|
58
|
+
return typeof fn === 'function' && fn instanceof AsyncGeneratorFunction;
|
|
59
|
+
}
|
|
60
|
+
/** Serialize a value for a span attribute, returning undefined on failure. */
|
|
61
|
+
function trySerialize(value) {
|
|
62
|
+
try {
|
|
63
|
+
return JSON.stringify(value);
|
|
64
|
+
}
|
|
65
|
+
catch {
|
|
66
|
+
return undefined;
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
// Implementation
|
|
70
|
+
function observe(options, fn, ...args) {
|
|
27
71
|
const name = options.name ?? (fn.name || 'anonymous');
|
|
28
72
|
_tracer ??= api_1.trace.getTracer('traceroot-ts');
|
|
73
|
+
if (isAsyncGeneratorFunction(fn)) {
|
|
74
|
+
return _observeAsyncGenerator(name, options, fn, args);
|
|
75
|
+
}
|
|
76
|
+
return _observeRegular(name, options, fn, args);
|
|
77
|
+
}
|
|
78
|
+
/** Handle a regular (non-generator) function. fn is called inside the span. */
|
|
79
|
+
async function _observeRegular(name, options, fn, args) {
|
|
80
|
+
if (process.env['TRACEROOT_API_KEY']) {
|
|
81
|
+
const { TraceRoot } = await Promise.resolve().then(() => __importStar(require('./traceroot')));
|
|
82
|
+
if (!TraceRoot.isInitialized())
|
|
83
|
+
TraceRoot.initialize();
|
|
84
|
+
}
|
|
85
|
+
_tracer ??= api_1.trace.getTracer('traceroot-ts');
|
|
29
86
|
return _tracer.startActiveSpan(name, async (span) => {
|
|
30
87
|
if (!span.isRecording()) {
|
|
31
88
|
if (!_hasWarnedUninit) {
|
|
32
89
|
_hasWarnedUninit = true;
|
|
33
90
|
console.warn('[TraceRoot] observe() called but TraceRoot.initialize() was not called. Spans will not be recorded.');
|
|
34
91
|
}
|
|
35
|
-
// No-op path: just run fn() and return.
|
|
36
92
|
try {
|
|
37
|
-
return await fn();
|
|
93
|
+
return await fn(...args);
|
|
38
94
|
}
|
|
39
95
|
finally {
|
|
40
96
|
span.end();
|
|
41
97
|
}
|
|
42
98
|
}
|
|
43
99
|
try {
|
|
44
|
-
span
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
// Non-serializable input — skip attribute
|
|
51
|
-
}
|
|
52
|
-
}
|
|
53
|
-
const result = await fn();
|
|
54
|
-
try {
|
|
55
|
-
span.setAttribute(openinference_semantic_conventions_1.OUTPUT_VALUE, JSON.stringify(result));
|
|
56
|
-
}
|
|
57
|
-
catch {
|
|
58
|
-
// Non-serializable output — skip attribute
|
|
100
|
+
_applyCommonAttributes(span, options, args);
|
|
101
|
+
const result = await fn(...args);
|
|
102
|
+
if (options.captureOutput !== false) {
|
|
103
|
+
const serialized = trySerialize(result);
|
|
104
|
+
if (serialized !== undefined)
|
|
105
|
+
span.setAttribute(openinference_semantic_conventions_1.OUTPUT_VALUE, serialized);
|
|
59
106
|
}
|
|
60
107
|
return result;
|
|
61
108
|
}
|
|
@@ -69,6 +116,98 @@ async function observe(options, fn) {
|
|
|
69
116
|
}
|
|
70
117
|
});
|
|
71
118
|
}
|
|
119
|
+
/**
|
|
120
|
+
* Handle an async generator fn: manually manage the span so it stays open
|
|
121
|
+
* across yields. Returns an AsyncGenerator the caller can iterate.
|
|
122
|
+
*/
|
|
123
|
+
async function* _observeAsyncGenerator(name, options, fn, args) {
|
|
124
|
+
if (process.env['TRACEROOT_API_KEY']) {
|
|
125
|
+
const { TraceRoot } = await Promise.resolve().then(() => __importStar(require('./traceroot')));
|
|
126
|
+
if (!TraceRoot.isInitialized())
|
|
127
|
+
TraceRoot.initialize();
|
|
128
|
+
}
|
|
129
|
+
_tracer ??= api_1.trace.getTracer('traceroot-ts');
|
|
130
|
+
const span = _tracer.startSpan(name);
|
|
131
|
+
if (!span.isRecording()) {
|
|
132
|
+
if (!_hasWarnedUninit) {
|
|
133
|
+
_hasWarnedUninit = true;
|
|
134
|
+
console.warn('[TraceRoot] observe() called but TraceRoot.initialize() was not called. Spans will not be recorded.');
|
|
135
|
+
}
|
|
136
|
+
yield* fn(...args);
|
|
137
|
+
return;
|
|
138
|
+
}
|
|
139
|
+
_applyCommonAttributes(span, options, args);
|
|
140
|
+
// Activate the span in the OTel context so that updateCurrentSpan() and
|
|
141
|
+
// nested observe() calls inside the generator body target the correct span.
|
|
142
|
+
// We must wrap each .next() call in context.with() because AsyncLocalStorage
|
|
143
|
+
// does not preserve context across generator yield boundaries when resumed
|
|
144
|
+
// from outside the original run scope.
|
|
145
|
+
const spanCtx = api_1.trace.setSpan(api_1.context.active(), span);
|
|
146
|
+
const innerGen = fn(...args);
|
|
147
|
+
const collected = [];
|
|
148
|
+
try {
|
|
149
|
+
while (true) {
|
|
150
|
+
const { value, done } = await api_1.context.with(spanCtx, () => innerGen.next());
|
|
151
|
+
if (done)
|
|
152
|
+
break;
|
|
153
|
+
collected.push(value);
|
|
154
|
+
yield value;
|
|
155
|
+
}
|
|
156
|
+
if (options.captureOutput !== false && collected.length > 0) {
|
|
157
|
+
const serialized = trySerialize(collected);
|
|
158
|
+
if (serialized !== undefined)
|
|
159
|
+
span.setAttribute(openinference_semantic_conventions_1.OUTPUT_VALUE, serialized);
|
|
160
|
+
}
|
|
161
|
+
}
|
|
162
|
+
catch (err) {
|
|
163
|
+
span.recordException(err instanceof Error ? err : new Error(String(err)));
|
|
164
|
+
span.setStatus({ code: api_1.SpanStatusCode.ERROR });
|
|
165
|
+
throw err;
|
|
166
|
+
}
|
|
167
|
+
finally {
|
|
168
|
+
span.end();
|
|
169
|
+
}
|
|
170
|
+
}
|
|
171
|
+
/**
|
|
172
|
+
* Apply attributes common to all span types: kind, ambient context, session/user,
|
|
173
|
+
* input from args, metadata, tags, git source location.
|
|
174
|
+
*/
|
|
175
|
+
function _applyCommonAttributes(span, options, args) {
|
|
176
|
+
span.setAttribute(OPENINFERENCE_SPAN_KIND, SPAN_KIND_MAP[options.type ?? 'span']);
|
|
177
|
+
// Propagate any ambient attributes set by usingAttributes() in the call stack.
|
|
178
|
+
const ctxAttrs = (0, openinference_core_1.getAttributesFromContext)(api_1.context.active());
|
|
179
|
+
if (ctxAttrs && Object.keys(ctxAttrs).length > 0) {
|
|
180
|
+
span.setAttributes(ctxAttrs);
|
|
181
|
+
}
|
|
182
|
+
if (options.sessionId !== undefined)
|
|
183
|
+
span.setAttribute(openinference_semantic_conventions_1.SESSION_ID, options.sessionId);
|
|
184
|
+
if (options.userId !== undefined)
|
|
185
|
+
span.setAttribute(openinference_semantic_conventions_1.USER_ID, options.userId);
|
|
186
|
+
// Auto-capture input from args. Single arg → use directly; multiple → array.
|
|
187
|
+
if (options.captureInput !== false && args.length > 0) {
|
|
188
|
+
const inputValue = args.length === 1 ? args[0] : args;
|
|
189
|
+
const serialized = trySerialize(inputValue);
|
|
190
|
+
if (serialized !== undefined)
|
|
191
|
+
span.setAttribute(openinference_semantic_conventions_1.INPUT_VALUE, serialized);
|
|
192
|
+
}
|
|
193
|
+
if (options.metadata !== undefined) {
|
|
194
|
+
const s = trySerialize(options.metadata);
|
|
195
|
+
if (s !== undefined)
|
|
196
|
+
span.setAttribute(constants_1.SPAN_METADATA, s);
|
|
197
|
+
}
|
|
198
|
+
if (options.tags !== undefined) {
|
|
199
|
+
const s = trySerialize(options.tags);
|
|
200
|
+
if (s !== undefined)
|
|
201
|
+
span.setAttribute(constants_1.SPAN_TAGS, s);
|
|
202
|
+
}
|
|
203
|
+
const loc = (0, git_context_1.captureSourceLocation)();
|
|
204
|
+
if (loc.file !== undefined)
|
|
205
|
+
span.setAttribute('traceroot.git.source_file', loc.file);
|
|
206
|
+
if (loc.line !== undefined)
|
|
207
|
+
span.setAttribute('traceroot.git.source_line', loc.line);
|
|
208
|
+
if (loc.functionName !== undefined)
|
|
209
|
+
span.setAttribute('traceroot.git.source_function', loc.functionName);
|
|
210
|
+
}
|
|
72
211
|
/** @internal — reset module state between tests */
|
|
73
212
|
function _resetObserveState() {
|
|
74
213
|
_tracer = undefined;
|
package/dist/observe.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"observe.js","sourceRoot":"","sources":["../src/observe.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"observe.js","sourceRoot":"","sources":["../src/observe.ts"],"names":[],"mappings":"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"}
|
package/dist/processor.d.ts
CHANGED
|
@@ -2,6 +2,11 @@ import { Context, Span } from '@opentelemetry/api';
|
|
|
2
2
|
import { BatchSpanProcessor, ReadableSpan, SimpleSpanProcessor, SpanProcessor } from '@opentelemetry/sdk-trace-base';
|
|
3
3
|
export declare const SDK_NAME = "traceroot-ts";
|
|
4
4
|
export declare const SDK_VERSION: string;
|
|
5
|
+
export interface TraceRootSpanProcessorOptions {
|
|
6
|
+
environment?: string;
|
|
7
|
+
gitRepo?: string;
|
|
8
|
+
gitRef?: string;
|
|
9
|
+
}
|
|
5
10
|
/**
|
|
6
11
|
* Wraps an inner SpanProcessor (Batch or Simple) and injects TraceRoot SDK
|
|
7
12
|
* metadata attributes on every span start. This is the only processor TraceRoot
|
|
@@ -9,7 +14,10 @@ export declare const SDK_VERSION: string;
|
|
|
9
14
|
*/
|
|
10
15
|
export declare class TraceRootSpanProcessor implements SpanProcessor {
|
|
11
16
|
private readonly inner;
|
|
12
|
-
|
|
17
|
+
private readonly _environment;
|
|
18
|
+
private readonly _gitRepo;
|
|
19
|
+
private readonly _gitRef;
|
|
20
|
+
constructor(inner: BatchSpanProcessor | SimpleSpanProcessor, opts?: TraceRootSpanProcessorOptions);
|
|
13
21
|
onStart(span: Span, parentContext: Context): void;
|
|
14
22
|
onEnd(span: ReadableSpan): void;
|
|
15
23
|
forceFlush(): Promise<void>;
|
package/dist/processor.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"processor.d.ts","sourceRoot":"","sources":["../src/processor.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,oBAAoB,CAAC;AACnD,OAAO,EACL,kBAAkB,EAClB,YAAY,EACZ,mBAAmB,EACnB,aAAa,EACd,MAAM,+BAA+B,CAAC;AAKvC,eAAO,MAAM,QAAQ,iBAAiB,CAAC;AACvC,eAAO,MAAM,WAAW,QAAU,CAAC;AAEnC;;;;GAIG;AACH,qBAAa,sBAAuB,YAAW,aAAa;IAC1D,OAAO,CAAC,QAAQ,CAAC,KAAK,CAA2C;
|
|
1
|
+
{"version":3,"file":"processor.d.ts","sourceRoot":"","sources":["../src/processor.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,oBAAoB,CAAC;AACnD,OAAO,EACL,kBAAkB,EAClB,YAAY,EACZ,mBAAmB,EACnB,aAAa,EACd,MAAM,+BAA+B,CAAC;AAKvC,eAAO,MAAM,QAAQ,iBAAiB,CAAC;AACvC,eAAO,MAAM,WAAW,QAAU,CAAC;AAEnC,MAAM,WAAW,6BAA6B;IAC5C,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED;;;;GAIG;AACH,qBAAa,sBAAuB,YAAW,aAAa;IAC1D,OAAO,CAAC,QAAQ,CAAC,KAAK,CAA2C;IACjE,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAqB;IAClD,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAqB;IAC9C,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAqB;gBAG3C,KAAK,EAAE,kBAAkB,GAAG,mBAAmB,EAC/C,IAAI,GAAE,6BAAkC;IAQ1C,OAAO,CAAC,IAAI,EAAE,IAAI,EAAE,aAAa,EAAE,OAAO,GAAG,IAAI;IAoBjD,KAAK,CAAC,IAAI,EAAE,YAAY,GAAG,IAAI;IAI/B,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC;IAI3B,QAAQ,IAAI,OAAO,CAAC,IAAI,CAAC;CAG1B"}
|
package/dist/processor.js
CHANGED
|
@@ -12,14 +12,29 @@ exports.SDK_VERSION = version;
|
|
|
12
12
|
*/
|
|
13
13
|
class TraceRootSpanProcessor {
|
|
14
14
|
inner;
|
|
15
|
-
|
|
15
|
+
_environment;
|
|
16
|
+
_gitRepo;
|
|
17
|
+
_gitRef;
|
|
18
|
+
constructor(inner, opts = {}) {
|
|
16
19
|
this.inner = inner;
|
|
20
|
+
this._environment = opts.environment;
|
|
21
|
+
this._gitRepo = opts.gitRepo;
|
|
22
|
+
this._gitRef = opts.gitRef;
|
|
17
23
|
}
|
|
18
24
|
onStart(span, parentContext) {
|
|
19
25
|
span.setAttributes({
|
|
20
26
|
'traceroot.sdk.name': exports.SDK_NAME,
|
|
21
27
|
'traceroot.sdk.version': exports.SDK_VERSION,
|
|
22
28
|
});
|
|
29
|
+
if (this._environment !== undefined) {
|
|
30
|
+
span.setAttribute('deployment.environment', this._environment);
|
|
31
|
+
}
|
|
32
|
+
if (this._gitRepo !== undefined) {
|
|
33
|
+
span.setAttribute('traceroot.git.repo', this._gitRepo);
|
|
34
|
+
}
|
|
35
|
+
if (this._gitRef !== undefined) {
|
|
36
|
+
span.setAttribute('traceroot.git.ref', this._gitRef);
|
|
37
|
+
}
|
|
23
38
|
// Cast required: inner processor expects the internal sdk-trace-base Span,
|
|
24
39
|
// but the SpanProcessor interface uses the public @opentelemetry/api Span.
|
|
25
40
|
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
package/dist/processor.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"processor.js","sourceRoot":"","sources":["../src/processor.ts"],"names":[],"mappings":";;;AASA,iEAAiE;AACjE,MAAM,EAAE,OAAO,EAAE,GAAG,OAAO,CAAC,iBAAiB,CAAwB,CAAC;AAEzD,QAAA,QAAQ,GAAG,cAAc,CAAC;AAC1B,QAAA,WAAW,GAAG,OAAO,CAAC;
|
|
1
|
+
{"version":3,"file":"processor.js","sourceRoot":"","sources":["../src/processor.ts"],"names":[],"mappings":";;;AASA,iEAAiE;AACjE,MAAM,EAAE,OAAO,EAAE,GAAG,OAAO,CAAC,iBAAiB,CAAwB,CAAC;AAEzD,QAAA,QAAQ,GAAG,cAAc,CAAC;AAC1B,QAAA,WAAW,GAAG,OAAO,CAAC;AAQnC;;;;GAIG;AACH,MAAa,sBAAsB;IAChB,KAAK,CAA2C;IAChD,YAAY,CAAqB;IACjC,QAAQ,CAAqB;IAC7B,OAAO,CAAqB;IAE7C,YACE,KAA+C,EAC/C,OAAsC,EAAE;QAExC,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;QACnB,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,WAAW,CAAC;QACrC,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,OAAO,CAAC;QAC7B,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,MAAM,CAAC;IAC7B,CAAC;IAED,OAAO,CAAC,IAAU,EAAE,aAAsB;QACxC,IAAI,CAAC,aAAa,CAAC;YACjB,oBAAoB,EAAE,gBAAQ;YAC9B,uBAAuB,EAAE,mBAAW;SACrC,CAAC,CAAC;QACH,IAAI,IAAI,CAAC,YAAY,KAAK,SAAS,EAAE,CAAC;YACpC,IAAI,CAAC,YAAY,CAAC,wBAAwB,EAAE,IAAI,CAAC,YAAY,CAAC,CAAC;QACjE,CAAC;QACD,IAAI,IAAI,CAAC,QAAQ,KAAK,SAAS,EAAE,CAAC;YAChC,IAAI,CAAC,YAAY,CAAC,oBAAoB,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC;QACzD,CAAC;QACD,IAAI,IAAI,CAAC,OAAO,KAAK,SAAS,EAAE,CAAC;YAC/B,IAAI,CAAC,YAAY,CAAC,mBAAmB,EAAE,IAAI,CAAC,OAAO,CAAC,CAAC;QACvD,CAAC;QACD,2EAA2E;QAC3E,2EAA2E;QAC3E,8DAA8D;QAC9D,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,IAAW,EAAE,aAAa,CAAC,CAAC;IACjD,CAAC;IAED,KAAK,CAAC,IAAkB;QACtB,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IACzB,CAAC;IAED,UAAU;QACR,OAAO,IAAI,CAAC,KAAK,CAAC,UAAU,EAAE,CAAC;IACjC,CAAC;IAED,QAAQ;QACN,OAAO,IAAI,CAAC,KAAK,CAAC,QAAQ,EAAE,CAAC;IAC/B,CAAC;CACF;AA/CD,wDA+CC"}
|
package/dist/traceroot.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"traceroot.d.ts","sourceRoot":"","sources":["../src/traceroot.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"traceroot.d.ts","sourceRoot":"","sources":["../src/traceroot.ts"],"names":[],"mappings":"AAYA,OAAO,EAAE,iBAAiB,EAAE,MAAM,SAAS,CAAC;AAW5C,qBAAa,SAAS;IACpB,OAAO;IAEP,MAAM,CAAC,aAAa,IAAI,OAAO;IAI/B,MAAM,CAAC,UAAU,CAAC,OAAO,GAAE,iBAAsB,GAAG,IAAI;WA4F3C,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;WAItB,QAAQ,IAAI,OAAO,CAAC,IAAI,CAAC;CAMvC;AAED,gBAAgB;AAChB,wBAAgB,gBAAgB,IAAI,IAAI,CAQvC"}
|
package/dist/traceroot.js
CHANGED
|
@@ -10,6 +10,7 @@ const sdk_trace_node_1 = require("@opentelemetry/sdk-trace-node");
|
|
|
10
10
|
const processor_1 = require("./processor");
|
|
11
11
|
const instrumentation_1 = require("./instrumentation");
|
|
12
12
|
const observe_1 = require("./observe");
|
|
13
|
+
const git_context_1 = require("./git_context");
|
|
13
14
|
const DEFAULT_BASE_URL = 'https://app.traceroot.ai';
|
|
14
15
|
let _isInitialized = false;
|
|
15
16
|
let _provider;
|
|
@@ -19,6 +20,10 @@ class TraceRoot {
|
|
|
19
20
|
return _isInitialized;
|
|
20
21
|
}
|
|
21
22
|
static initialize(options = {}) {
|
|
23
|
+
const enabled = options.enabled ?? process.env['TRACEROOT_ENABLED'] !== 'false';
|
|
24
|
+
if (!enabled) {
|
|
25
|
+
return;
|
|
26
|
+
}
|
|
22
27
|
if (_isInitialized) {
|
|
23
28
|
console.warn('[TraceRoot] Already initialized. Skipping duplicate initialize() call.');
|
|
24
29
|
return;
|
|
@@ -35,7 +40,9 @@ class TraceRoot {
|
|
|
35
40
|
error: api_1.DiagLogLevel.ERROR,
|
|
36
41
|
};
|
|
37
42
|
api_1.diag.setLogger(new api_1.DiagConsoleLogger(), logLevelMap[options.logLevel ?? 'error'] ?? api_1.DiagLogLevel.ERROR);
|
|
38
|
-
const baseUrl = (options.baseUrl ??
|
|
43
|
+
const baseUrl = (options.baseUrl ??
|
|
44
|
+
process.env['TRACEROOT_HOST_URL'] ??
|
|
45
|
+
DEFAULT_BASE_URL).replace(/\/$/, '');
|
|
39
46
|
const headers = {
|
|
40
47
|
'x-traceroot-sdk-name': processor_1.SDK_NAME,
|
|
41
48
|
'x-traceroot-sdk-version': processor_1.SDK_VERSION,
|
|
@@ -49,14 +56,40 @@ class TraceRoot {
|
|
|
49
56
|
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
50
57
|
compression: 'gzip',
|
|
51
58
|
});
|
|
59
|
+
const environment = options.environment ?? process.env['TRACEROOT_ENVIRONMENT'];
|
|
60
|
+
const gitRepoOverride = options.gitRepo ?? process.env['TRACEROOT_GIT_REPO'];
|
|
61
|
+
const gitRefOverride = options.gitRef ?? process.env['TRACEROOT_GIT_REF'];
|
|
62
|
+
let gitRepo = gitRepoOverride;
|
|
63
|
+
let gitRef = gitRefOverride;
|
|
64
|
+
if (gitRepo === undefined || gitRef === undefined) {
|
|
65
|
+
const autoGit = (0, git_context_1.autoDetectGitContext)(); // also warms the git root cache
|
|
66
|
+
gitRepo ??= autoGit.gitRepo;
|
|
67
|
+
gitRef ??= autoGit.gitRef;
|
|
68
|
+
}
|
|
69
|
+
else {
|
|
70
|
+
(0, git_context_1.getGitRoot)(); // warm git root cache for captureSourceLocation without shelling out for repo/ref
|
|
71
|
+
}
|
|
72
|
+
// Flush/batch tuning — env vars take precedence over hardcoded defaults.
|
|
73
|
+
const flushIntervalSec = Number(process.env['TRACEROOT_FLUSH_INTERVAL'] || '5');
|
|
74
|
+
const flushAt = Number(process.env['TRACEROOT_FLUSH_AT'] || '100');
|
|
75
|
+
const timeoutSec = Number(process.env['TRACEROOT_TIMEOUT'] || '30');
|
|
52
76
|
const innerProcessor = options.disableBatch
|
|
53
77
|
? new sdk_trace_base_1.SimpleSpanProcessor(exporter)
|
|
54
|
-
: new sdk_trace_base_1.BatchSpanProcessor(exporter
|
|
78
|
+
: new sdk_trace_base_1.BatchSpanProcessor(exporter, {
|
|
79
|
+
scheduledDelayMillis: flushIntervalSec * 1000,
|
|
80
|
+
maxExportBatchSize: flushAt,
|
|
81
|
+
exportTimeoutMillis: timeoutSec * 1000,
|
|
82
|
+
});
|
|
55
83
|
_provider = new sdk_trace_node_1.NodeTracerProvider();
|
|
56
|
-
_provider.addSpanProcessor(new processor_1.TraceRootSpanProcessor(innerProcessor));
|
|
84
|
+
_provider.addSpanProcessor(new processor_1.TraceRootSpanProcessor(innerProcessor, { environment, gitRepo, gitRef }));
|
|
57
85
|
_provider.register();
|
|
58
86
|
(0, instrumentation_1.wireInstrumentations)(options.instrumentModules);
|
|
59
87
|
_isInitialized = true;
|
|
88
|
+
// forceFlush() is async and keeps the event loop alive via its HTTP export request,
|
|
89
|
+
// so beforeExit + forceFlush() is sufficient — no keepAlive timer needed.
|
|
90
|
+
process.once('beforeExit', () => {
|
|
91
|
+
void _provider?.forceFlush();
|
|
92
|
+
});
|
|
60
93
|
}
|
|
61
94
|
static async flush() {
|
|
62
95
|
await _provider?.forceFlush();
|
|
@@ -74,6 +107,7 @@ function _resetForTesting() {
|
|
|
74
107
|
_isInitialized = false;
|
|
75
108
|
_provider = undefined;
|
|
76
109
|
(0, observe_1._resetObserveState)();
|
|
110
|
+
(0, git_context_1._resetGitContextCache)();
|
|
77
111
|
api_1.trace.disable();
|
|
78
112
|
api_1.context.disable();
|
|
79
113
|
api_1.propagation.disable();
|
package/dist/traceroot.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"traceroot.js","sourceRoot":"","sources":["../src/traceroot.ts"],"names":[],"mappings":";;;
|
|
1
|
+
{"version":3,"file":"traceroot.js","sourceRoot":"","sources":["../src/traceroot.ts"],"names":[],"mappings":"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"}
|
package/dist/types.d.ts
CHANGED
|
@@ -4,8 +4,31 @@ export interface ObserveOptions {
|
|
|
4
4
|
name?: string;
|
|
5
5
|
/** Span kind. Defaults to 'span' → openinference.span.kind = 'CHAIN'. */
|
|
6
6
|
type?: SpanType;
|
|
7
|
-
/**
|
|
8
|
-
|
|
7
|
+
/** Arbitrary metadata to attach to this span. */
|
|
8
|
+
metadata?: Record<string, unknown>;
|
|
9
|
+
/** Tags to attach to this span. */
|
|
10
|
+
tags?: string[];
|
|
11
|
+
/**
|
|
12
|
+
* Whether to auto-capture function arguments as input.value. Defaults to true.
|
|
13
|
+
* Set to false to suppress input recording (e.g. for PII or non-serializable args).
|
|
14
|
+
* Only applies when args are passed: observe(opts, fn, arg1, arg2).
|
|
15
|
+
*/
|
|
16
|
+
captureInput?: boolean;
|
|
17
|
+
/**
|
|
18
|
+
* Whether to capture the return value as output.value. Defaults to true.
|
|
19
|
+
* Set to false to suppress output recording (e.g. for large or sensitive responses).
|
|
20
|
+
*/
|
|
21
|
+
captureOutput?: boolean;
|
|
22
|
+
/**
|
|
23
|
+
* Session / conversation ID to associate with this span.
|
|
24
|
+
* Equivalent to calling updateCurrentTrace({ sessionId }) inside fn.
|
|
25
|
+
*/
|
|
26
|
+
sessionId?: string;
|
|
27
|
+
/**
|
|
28
|
+
* User ID to associate with this span.
|
|
29
|
+
* Equivalent to calling updateCurrentTrace({ userId }) inside fn.
|
|
30
|
+
*/
|
|
31
|
+
userId?: string;
|
|
9
32
|
}
|
|
10
33
|
export interface InitializeOptions {
|
|
11
34
|
/** API key for TraceRoot. Falls back to TRACEROOT_API_KEY env var. */
|
|
@@ -32,5 +55,26 @@ export interface InitializeOptions {
|
|
|
32
55
|
disableBatch?: boolean;
|
|
33
56
|
/** OTel diagnostic log level. Defaults to 'error'. */
|
|
34
57
|
logLevel?: 'debug' | 'info' | 'warn' | 'error';
|
|
58
|
+
/**
|
|
59
|
+
* Disable all tracing. Falls back to TRACEROOT_ENABLED env var ('false' disables).
|
|
60
|
+
* When false, initialize() is a no-op and no spans are recorded.
|
|
61
|
+
*/
|
|
62
|
+
enabled?: boolean;
|
|
63
|
+
/**
|
|
64
|
+
* Deployment environment tag (e.g. 'production', 'staging').
|
|
65
|
+
* Falls back to TRACEROOT_ENVIRONMENT env var.
|
|
66
|
+
* Stamped on every span as 'deployment.environment'.
|
|
67
|
+
*/
|
|
68
|
+
environment?: string;
|
|
69
|
+
/**
|
|
70
|
+
* Git repository in normalized 'owner/repo' form (e.g. 'acme/my-service').
|
|
71
|
+
* Falls back to TRACEROOT_GIT_REPO env var, then auto-detected via `git remote get-url origin`.
|
|
72
|
+
*/
|
|
73
|
+
gitRepo?: string;
|
|
74
|
+
/**
|
|
75
|
+
* Git commit SHA (typically a 40-character hash). Falls back to TRACEROOT_GIT_REF env var,
|
|
76
|
+
* then auto-detected via `git rev-parse HEAD`.
|
|
77
|
+
*/
|
|
78
|
+
gitRef?: string;
|
|
35
79
|
}
|
|
36
80
|
//# sourceMappingURL=types.d.ts.map
|
package/dist/types.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAEA,MAAM,MAAM,QAAQ,GAAG,MAAM,GAAG,OAAO,GAAG,MAAM,GAAG,KAAK,CAAC;AAEzD,MAAM,WAAW,cAAc;IAC7B,wDAAwD;IACxD,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,yEAAyE;IACzE,IAAI,CAAC,EAAE,QAAQ,CAAC;IAChB,
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAEA,MAAM,MAAM,QAAQ,GAAG,MAAM,GAAG,OAAO,GAAG,MAAM,GAAG,KAAK,CAAC;AAEzD,MAAM,WAAW,cAAc;IAC7B,wDAAwD;IACxD,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,yEAAyE;IACzE,IAAI,CAAC,EAAE,QAAQ,CAAC;IAChB,iDAAiD;IACjD,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACnC,mCAAmC;IACnC,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC;IAChB;;;;OAIG;IACH,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB;;;OAGG;IACH,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB;;;OAGG;IACH,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB;;;OAGG;IACH,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,iBAAiB;IAChC,sEAAsE;IACtE,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,+EAA+E;IAC/E,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB;;;;;;;;OAQG;IACH,iBAAiB,CAAC,EAAE;QAClB,MAAM,CAAC,EAAE,OAAO,CAAC;QACjB,SAAS,CAAC,EAAE,OAAO,CAAC;QACpB,SAAS,CAAC,EAAE,OAAO,CAAC;QACpB,cAAc,CAAC,EAAE,OAAO,CAAC;QACzB,OAAO,CAAC,EAAE,OAAO,CAAC;KACnB,CAAC;IACF,uFAAuF;IACvF,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,sDAAsD;IACtD,QAAQ,CAAC,EAAE,OAAO,GAAG,MAAM,GAAG,MAAM,GAAG,OAAO,CAAC;IAC/C;;;OAGG;IACH,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB;;;;OAIG;IACH,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB;;;OAGG;IACH,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB;;;OAGG;IACH,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB"}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
export interface UsingAttributesOptions {
|
|
2
|
+
/** Associate all spans in this block with a session / conversation ID. */
|
|
3
|
+
sessionId?: string;
|
|
4
|
+
/** Associate all spans in this block with a user. */
|
|
5
|
+
userId?: string;
|
|
6
|
+
/** Tag all spans in this block. */
|
|
7
|
+
tags?: string[];
|
|
8
|
+
/** Attach arbitrary metadata to all spans in this block. */
|
|
9
|
+
metadata?: Record<string, unknown>;
|
|
10
|
+
}
|
|
11
|
+
/**
|
|
12
|
+
* Runs `fn` in an OpenTelemetry context that carries the given OpenInference
|
|
13
|
+
* attributes. Every span created inside `fn` — including those produced by
|
|
14
|
+
* auto-instrumented libraries (OpenAI, Anthropic, LangChain, …) — inherits
|
|
15
|
+
* sessionId, userId, tags, and metadata automatically.
|
|
16
|
+
*
|
|
17
|
+
* Spans created *before* entering this call are not retroactively updated.
|
|
18
|
+
* `usingAttributes` calls can be nested; the innermost value for each field wins.
|
|
19
|
+
*
|
|
20
|
+
* @example
|
|
21
|
+
* ```typescript
|
|
22
|
+
* const answer = await usingAttributes(
|
|
23
|
+
* { sessionId: 'conv-123', userId: 'u-456', tags: ['prod'] },
|
|
24
|
+
* () => myPipeline.run(userMessage),
|
|
25
|
+
* );
|
|
26
|
+
* ```
|
|
27
|
+
*/
|
|
28
|
+
export declare function usingAttributes<T>(attrs: UsingAttributesOptions, fn: () => T | Promise<T>): Promise<T>;
|
|
29
|
+
//# sourceMappingURL=usingAttributes.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"usingAttributes.d.ts","sourceRoot":"","sources":["../src/usingAttributes.ts"],"names":[],"mappings":"AAIA,MAAM,WAAW,sBAAsB;IACrC,0EAA0E;IAC1E,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,qDAAqD;IACrD,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,mCAAmC;IACnC,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC;IAChB,4DAA4D;IAC5D,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACpC;AAED;;;;;;;;;;;;;;;;GAgBG;AACH,wBAAsB,eAAe,CAAC,CAAC,EACrC,KAAK,EAAE,sBAAsB,EAC7B,EAAE,EAAE,MAAM,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,GACvB,OAAO,CAAC,CAAC,CAAC,CAiBZ"}
|