trodo-node 1.2.0 → 2.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +182 -2
- package/dist/cjs/TrodoClient.js +85 -102
- package/dist/cjs/TrodoClient.js.map +1 -1
- package/dist/cjs/api/ApiClient.js +20 -2
- package/dist/cjs/api/ApiClient.js.map +1 -1
- package/dist/cjs/api/endpoints.js +7 -1
- package/dist/cjs/api/endpoints.js.map +1 -1
- package/dist/cjs/index.js +115 -29
- package/dist/cjs/index.js.map +1 -1
- package/dist/cjs/otel/autoInstrument.js +253 -0
- package/dist/cjs/otel/autoInstrument.js.map +1 -0
- package/dist/cjs/otel/context.js +49 -0
- package/dist/cjs/otel/context.js.map +1 -0
- package/dist/cjs/otel/helpers.js +254 -0
- package/dist/cjs/otel/helpers.js.map +1 -0
- package/dist/cjs/otel/processor.js +153 -0
- package/dist/cjs/otel/processor.js.map +1 -0
- package/dist/cjs/otel/uuid.js +24 -0
- package/dist/cjs/otel/uuid.js.map +1 -0
- package/dist/cjs/otel/wrapAgent.js +460 -0
- package/dist/cjs/otel/wrapAgent.js.map +1 -0
- package/dist/esm/TrodoClient.d.ts +44 -11
- package/dist/esm/TrodoClient.d.ts.map +1 -1
- package/dist/esm/TrodoClient.js +85 -102
- package/dist/esm/TrodoClient.js.map +1 -1
- package/dist/esm/api/ApiClient.d.ts +9 -1
- package/dist/esm/api/ApiClient.d.ts.map +1 -1
- package/dist/esm/api/ApiClient.js +20 -2
- package/dist/esm/api/ApiClient.js.map +1 -1
- package/dist/esm/api/endpoints.d.ts +6 -1
- package/dist/esm/api/endpoints.d.ts.map +1 -1
- package/dist/esm/api/endpoints.js +7 -1
- package/dist/esm/api/endpoints.js.map +1 -1
- package/dist/esm/index.d.ts +96 -19
- package/dist/esm/index.d.ts.map +1 -1
- package/dist/esm/index.js +98 -23
- package/dist/esm/index.js.map +1 -1
- package/dist/esm/otel/autoInstrument.d.ts +61 -0
- package/dist/esm/otel/autoInstrument.d.ts.map +1 -0
- package/dist/esm/otel/autoInstrument.js +248 -0
- package/dist/esm/otel/autoInstrument.js.map +1 -0
- package/dist/esm/otel/context.d.ts +26 -0
- package/dist/esm/otel/context.d.ts.map +1 -0
- package/dist/esm/otel/context.js +44 -0
- package/dist/esm/otel/context.js.map +1 -0
- package/dist/esm/otel/helpers.d.ts +119 -0
- package/dist/esm/otel/helpers.d.ts.map +1 -0
- package/dist/esm/otel/helpers.js +244 -0
- package/dist/esm/otel/helpers.js.map +1 -0
- package/dist/esm/otel/processor.d.ts +104 -0
- package/dist/esm/otel/processor.d.ts.map +1 -0
- package/dist/esm/otel/processor.js +149 -0
- package/dist/esm/otel/processor.js.map +1 -0
- package/dist/esm/otel/uuid.d.ts +7 -0
- package/dist/esm/otel/uuid.d.ts.map +1 -0
- package/dist/esm/otel/uuid.js +21 -0
- package/dist/esm/otel/uuid.js.map +1 -0
- package/dist/esm/otel/wrapAgent.d.ts +133 -0
- package/dist/esm/otel/wrapAgent.d.ts.map +1 -0
- package/dist/esm/otel/wrapAgent.js +448 -0
- package/dist/esm/otel/wrapAgent.js.map +1 -0
- package/dist/esm/types/index.d.ts +24 -48
- package/dist/esm/types/index.d.ts.map +1 -1
- package/package.json +1 -1
package/dist/cjs/index.js
CHANGED
|
@@ -2,15 +2,49 @@
|
|
|
2
2
|
/**
|
|
3
3
|
* trodo-node — Trodo Analytics SDK for Node.js
|
|
4
4
|
*
|
|
5
|
-
*
|
|
5
|
+
* Quick start (any stack):
|
|
6
6
|
* import trodo from 'trodo-node';
|
|
7
|
-
* trodo.init({ siteId: 'your-site-id' });
|
|
8
|
-
* const user = trodo.forUser('user-123');
|
|
9
|
-
* await user.track('purchase_completed', { amount: 99.99 });
|
|
7
|
+
* trodo.init({ siteId: 'your-site-id' }); // autoInstrument on by default
|
|
10
8
|
*
|
|
11
|
-
*
|
|
12
|
-
*
|
|
13
|
-
*
|
|
9
|
+
* // OpenAI / Anthropic / LangChain / Vercel AI SDK — nothing else to do.
|
|
10
|
+
* const { result, runId } = await trodo.wrapAgent(
|
|
11
|
+
* 'customer-support',
|
|
12
|
+
* async (run) => {
|
|
13
|
+
* run.setInput({ query });
|
|
14
|
+
* const answer = await agent.run(query);
|
|
15
|
+
* run.setOutput(answer);
|
|
16
|
+
* return answer;
|
|
17
|
+
* },
|
|
18
|
+
* { distinctId, conversationId },
|
|
19
|
+
* );
|
|
20
|
+
*
|
|
21
|
+
* await trodo.feedback(runId, { satisfaction: 'positive', rating: 5 });
|
|
22
|
+
*
|
|
23
|
+
* Raw-HTTP LLM caller:
|
|
24
|
+
* const resp = await fetch(url, { body }).then(r => r.json());
|
|
25
|
+
* await trodo.trackLlmCall({
|
|
26
|
+
* model: 'gemini-2.5-flash', provider: 'google',
|
|
27
|
+
* inputTokens: resp.usageMetadata.promptTokenCount,
|
|
28
|
+
* outputTokens: resp.usageMetadata.candidatesTokenCount,
|
|
29
|
+
* prompt: body, completion: resp,
|
|
30
|
+
* });
|
|
31
|
+
*
|
|
32
|
+
* Custom tool:
|
|
33
|
+
* const runFunnelQuery = trodo.tool(
|
|
34
|
+
* async (teamId, preset) => { ... },
|
|
35
|
+
* { name: 'run_funnel_query' },
|
|
36
|
+
* );
|
|
37
|
+
*
|
|
38
|
+
* Downstream microservice (join the caller's run instead of creating a new one):
|
|
39
|
+
* // Express:
|
|
40
|
+
* app.use(trodo.expressMiddleware());
|
|
41
|
+
*
|
|
42
|
+
* // Or manually:
|
|
43
|
+
* await trodo.joinRun(
|
|
44
|
+
* headers['x-trodo-run-id'],
|
|
45
|
+
* headers['x-trodo-parent-span-id'],
|
|
46
|
+
* async () => { ... },
|
|
47
|
+
* );
|
|
14
48
|
*/
|
|
15
49
|
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
16
50
|
if (k2 === undefined) k2 = k;
|
|
@@ -27,7 +61,7 @@ var __exportStar = (this && this.__exportStar) || function(m, exports) {
|
|
|
27
61
|
for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
|
|
28
62
|
};
|
|
29
63
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
30
|
-
exports.people = exports.UserContext = exports.TrodoClient = void 0;
|
|
64
|
+
exports.people = exports.getTracer = exports.retrieval = exports.llm = exports.trace = exports.propagationHeaders = exports.currentSpanId = exports.currentRunId = exports.getActiveContext = exports.UserContext = exports.TrodoClient = void 0;
|
|
31
65
|
exports.init = init;
|
|
32
66
|
exports.forUser = forUser;
|
|
33
67
|
exports.track = track;
|
|
@@ -42,17 +76,32 @@ exports.enableAutoEvents = enableAutoEvents;
|
|
|
42
76
|
exports.disableAutoEvents = disableAutoEvents;
|
|
43
77
|
exports.flush = flush;
|
|
44
78
|
exports.shutdown = shutdown;
|
|
45
|
-
exports.
|
|
46
|
-
exports.
|
|
47
|
-
exports.
|
|
48
|
-
exports.
|
|
49
|
-
exports.
|
|
79
|
+
exports.wrapAgent = wrapAgent;
|
|
80
|
+
exports.withSpan = withSpan;
|
|
81
|
+
exports.joinRun = joinRun;
|
|
82
|
+
exports.startRun = startRun;
|
|
83
|
+
exports.endRun = endRun;
|
|
84
|
+
exports.tool = tool;
|
|
85
|
+
exports.trackLlmCall = trackLlmCall;
|
|
86
|
+
exports.expressMiddleware = expressMiddleware;
|
|
87
|
+
exports.feedback = feedback;
|
|
50
88
|
var TrodoClient_js_1 = require("./TrodoClient.js");
|
|
51
89
|
Object.defineProperty(exports, "TrodoClient", { enumerable: true, get: function () { return TrodoClient_js_1.TrodoClient; } });
|
|
52
90
|
var UserContext_js_1 = require("./UserContext.js");
|
|
53
91
|
Object.defineProperty(exports, "UserContext", { enumerable: true, get: function () { return UserContext_js_1.UserContext; } });
|
|
54
92
|
__exportStar(require("./types/index.js"), exports);
|
|
55
93
|
const TrodoClient_js_2 = require("./TrodoClient.js");
|
|
94
|
+
var context_js_1 = require("./otel/context.js");
|
|
95
|
+
Object.defineProperty(exports, "getActiveContext", { enumerable: true, get: function () { return context_js_1.getActiveContext; } });
|
|
96
|
+
var wrapAgent_js_1 = require("./otel/wrapAgent.js");
|
|
97
|
+
Object.defineProperty(exports, "currentRunId", { enumerable: true, get: function () { return wrapAgent_js_1.currentRunId; } });
|
|
98
|
+
Object.defineProperty(exports, "currentSpanId", { enumerable: true, get: function () { return wrapAgent_js_1.currentSpanId; } });
|
|
99
|
+
const helpers_js_1 = require("./otel/helpers.js");
|
|
100
|
+
Object.defineProperty(exports, "propagationHeaders", { enumerable: true, get: function () { return helpers_js_1.propagationHeaders; } });
|
|
101
|
+
Object.defineProperty(exports, "trace", { enumerable: true, get: function () { return helpers_js_1.trace; } });
|
|
102
|
+
Object.defineProperty(exports, "llm", { enumerable: true, get: function () { return helpers_js_1.llm; } });
|
|
103
|
+
Object.defineProperty(exports, "retrieval", { enumerable: true, get: function () { return helpers_js_1.retrieval; } });
|
|
104
|
+
Object.defineProperty(exports, "getTracer", { enumerable: true, get: function () { return helpers_js_1.getTracer; } });
|
|
56
105
|
// ============================================================================
|
|
57
106
|
// Singleton convenience API
|
|
58
107
|
// ============================================================================
|
|
@@ -125,22 +174,51 @@ async function shutdown() {
|
|
|
125
174
|
return getClient().shutdown();
|
|
126
175
|
}
|
|
127
176
|
// ----------------------------------------------------------------------------
|
|
128
|
-
// Agent
|
|
177
|
+
// Agent Runs — unified surface
|
|
129
178
|
// ----------------------------------------------------------------------------
|
|
130
|
-
|
|
131
|
-
|
|
179
|
+
/**
|
|
180
|
+
* Wrap an async function as an agent run. All OTel-instrumented LLM/tool
|
|
181
|
+
* calls and nested withSpan calls are auto-captured as child spans.
|
|
182
|
+
*/
|
|
183
|
+
function wrapAgent(agentName, fn, options) {
|
|
184
|
+
return getClient().wrapAgent(agentName, fn, options);
|
|
185
|
+
}
|
|
186
|
+
/** Create a nested span inside the current run. */
|
|
187
|
+
function withSpan(name, fn, options) {
|
|
188
|
+
return getClient().withSpan(name, fn, options);
|
|
189
|
+
}
|
|
190
|
+
/** Join an existing run owned by a remote service — spans nest under it. */
|
|
191
|
+
function joinRun(runId, parentSpanId, fn, options) {
|
|
192
|
+
return getClient().joinRun(runId, parentSpanId, fn, options);
|
|
193
|
+
}
|
|
194
|
+
/**
|
|
195
|
+
* Open a Run record without a context manager. Returns the runId.
|
|
196
|
+
*
|
|
197
|
+
* Pairs with {@link endRun} for sessions that span multiple processes or
|
|
198
|
+
* HTTP requests. Between startRun and endRun any process can use
|
|
199
|
+
* `joinRun(runId, ...)` to add spans.
|
|
200
|
+
*/
|
|
201
|
+
function startRun(agentName, options) {
|
|
202
|
+
return getClient().startRun(agentName, options);
|
|
203
|
+
}
|
|
204
|
+
/** Finalise a Run opened by {@link startRun}. */
|
|
205
|
+
function endRun(runId, options) {
|
|
206
|
+
return getClient().endRun(runId, options);
|
|
132
207
|
}
|
|
133
|
-
function
|
|
134
|
-
return
|
|
208
|
+
function tool(a, b) {
|
|
209
|
+
return (0, helpers_js_1.tool)(a, b);
|
|
135
210
|
}
|
|
136
|
-
|
|
137
|
-
|
|
211
|
+
/** Record a one-shot LLM span for a raw-HTTP caller. */
|
|
212
|
+
function trackLlmCall(params) {
|
|
213
|
+
return getClient().trackLlmCall(params);
|
|
138
214
|
}
|
|
139
|
-
|
|
140
|
-
|
|
215
|
+
/** Return an Express/Connect middleware that auto-joins inbound runs. */
|
|
216
|
+
function expressMiddleware() {
|
|
217
|
+
return getClient().expressMiddleware();
|
|
141
218
|
}
|
|
142
|
-
|
|
143
|
-
|
|
219
|
+
/** Attach feedback to a completed run. */
|
|
220
|
+
function feedback(runId, props) {
|
|
221
|
+
return getClient().feedback(runId, props);
|
|
144
222
|
}
|
|
145
223
|
// Default export: the singleton namespace (matches frontend SDK pattern)
|
|
146
224
|
const trodo = {
|
|
@@ -159,11 +237,19 @@ const trodo = {
|
|
|
159
237
|
disableAutoEvents,
|
|
160
238
|
flush,
|
|
161
239
|
shutdown,
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
240
|
+
wrapAgent,
|
|
241
|
+
withSpan,
|
|
242
|
+
joinRun,
|
|
243
|
+
startRun,
|
|
244
|
+
endRun,
|
|
245
|
+
tool,
|
|
246
|
+
trace: helpers_js_1.trace,
|
|
247
|
+
llm: helpers_js_1.llm,
|
|
248
|
+
retrieval: helpers_js_1.retrieval,
|
|
249
|
+
getTracer: helpers_js_1.getTracer,
|
|
250
|
+
trackLlmCall,
|
|
251
|
+
expressMiddleware,
|
|
252
|
+
feedback,
|
|
167
253
|
};
|
|
168
254
|
exports.default = trodo;
|
|
169
255
|
//# sourceMappingURL=index.js.map
|
package/dist/cjs/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":";AAAA
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,253 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.otelSpanToTrodoSpan = otelSpanToTrodoSpan;
|
|
4
|
+
exports.otelAdapter = otelAdapter;
|
|
5
|
+
exports.enableAutoInstrument = enableAutoInstrument;
|
|
6
|
+
const context_js_1 = require("./context.js");
|
|
7
|
+
function hrToIso(hr) {
|
|
8
|
+
if (!hr)
|
|
9
|
+
return undefined;
|
|
10
|
+
const ms = hr[0] * 1000 + Math.floor(hr[1] / 1e6);
|
|
11
|
+
return new Date(ms).toISOString();
|
|
12
|
+
}
|
|
13
|
+
function inferKind(attrs) {
|
|
14
|
+
if (!attrs)
|
|
15
|
+
return 'generic';
|
|
16
|
+
if (attrs['gen_ai.tool.name'])
|
|
17
|
+
return 'tool';
|
|
18
|
+
if (attrs['gen_ai.operation.name'] || attrs['gen_ai.request.model'])
|
|
19
|
+
return 'llm';
|
|
20
|
+
if (attrs['db.system'] || attrs['retrieval.query'])
|
|
21
|
+
return 'retrieval';
|
|
22
|
+
return 'generic';
|
|
23
|
+
}
|
|
24
|
+
function pickNum(attrs, keys) {
|
|
25
|
+
for (const k of keys) {
|
|
26
|
+
const v = attrs[k];
|
|
27
|
+
if (typeof v === 'number')
|
|
28
|
+
return v;
|
|
29
|
+
if (typeof v === 'string' && v !== '' && !isNaN(Number(v)))
|
|
30
|
+
return Number(v);
|
|
31
|
+
}
|
|
32
|
+
return undefined;
|
|
33
|
+
}
|
|
34
|
+
function pickStr(attrs, keys) {
|
|
35
|
+
for (const k of keys) {
|
|
36
|
+
const v = attrs[k];
|
|
37
|
+
if (typeof v === 'string' && v.length)
|
|
38
|
+
return v;
|
|
39
|
+
}
|
|
40
|
+
return undefined;
|
|
41
|
+
}
|
|
42
|
+
/**
|
|
43
|
+
* Translate an OTel span to our TrodoSpan shape using GenAI semantic
|
|
44
|
+
* conventions (gen_ai.*). Accepts both stable and legacy/experimental keys.
|
|
45
|
+
*/
|
|
46
|
+
function otelSpanToTrodoSpan(otel) {
|
|
47
|
+
const ctx = (0, context_js_1.getActiveContext)();
|
|
48
|
+
if (!ctx)
|
|
49
|
+
return null; // outside of wrapAgent — drop
|
|
50
|
+
const sc = otel.spanContext?.();
|
|
51
|
+
if (!sc)
|
|
52
|
+
return null;
|
|
53
|
+
const attrs = otel.attributes || {};
|
|
54
|
+
const kind = inferKind(attrs);
|
|
55
|
+
const startedAt = hrToIso(otel.startTime) || new Date().toISOString();
|
|
56
|
+
const endedAt = hrToIso(otel.endTime);
|
|
57
|
+
const durationMs = otel.startTime && otel.endTime
|
|
58
|
+
? Math.max(0, (otel.endTime[0] - otel.startTime[0]) * 1000 +
|
|
59
|
+
(otel.endTime[1] - otel.startTime[1]) / 1e6)
|
|
60
|
+
: undefined;
|
|
61
|
+
const model = pickStr(attrs, [
|
|
62
|
+
'gen_ai.request.model',
|
|
63
|
+
'gen_ai.response.model',
|
|
64
|
+
'llm.request.model',
|
|
65
|
+
]);
|
|
66
|
+
const provider = pickStr(attrs, ['gen_ai.system', 'llm.vendor']);
|
|
67
|
+
const inputTokens = pickNum(attrs, [
|
|
68
|
+
'gen_ai.usage.input_tokens',
|
|
69
|
+
'gen_ai.usage.prompt_tokens',
|
|
70
|
+
'llm.usage.prompt_tokens',
|
|
71
|
+
]);
|
|
72
|
+
const outputTokens = pickNum(attrs, [
|
|
73
|
+
'gen_ai.usage.output_tokens',
|
|
74
|
+
'gen_ai.usage.completion_tokens',
|
|
75
|
+
'llm.usage.completion_tokens',
|
|
76
|
+
]);
|
|
77
|
+
const temperature = pickNum(attrs, ['gen_ai.request.temperature']);
|
|
78
|
+
const toolName = pickStr(attrs, ['gen_ai.tool.name']);
|
|
79
|
+
const input = pickStr(attrs, ['gen_ai.prompt', 'llm.prompts']);
|
|
80
|
+
const output = pickStr(attrs, ['gen_ai.completion', 'llm.completion']);
|
|
81
|
+
const span = {
|
|
82
|
+
span_id: sc.spanId,
|
|
83
|
+
run_id: ctx.runId,
|
|
84
|
+
parent_span_id: otel.parentSpanId || ctx.spanId,
|
|
85
|
+
kind,
|
|
86
|
+
name: otel.name,
|
|
87
|
+
status: otel.status?.code === 2 ? 'error' : 'ok',
|
|
88
|
+
started_at: startedAt,
|
|
89
|
+
ended_at: endedAt,
|
|
90
|
+
duration_ms: durationMs,
|
|
91
|
+
model,
|
|
92
|
+
provider,
|
|
93
|
+
input_tokens: inputTokens,
|
|
94
|
+
output_tokens: outputTokens,
|
|
95
|
+
temperature,
|
|
96
|
+
tool_name: toolName,
|
|
97
|
+
input,
|
|
98
|
+
output,
|
|
99
|
+
attributes: attrs,
|
|
100
|
+
};
|
|
101
|
+
return span;
|
|
102
|
+
}
|
|
103
|
+
/**
|
|
104
|
+
* Adapter that lets the OTel SDK push spans into our processor.
|
|
105
|
+
* Register with `sdk.addSpanProcessor(otelAdapter(processor))` in your app
|
|
106
|
+
* bootstrap.
|
|
107
|
+
*/
|
|
108
|
+
function otelAdapter(processor) {
|
|
109
|
+
return {
|
|
110
|
+
onStart() {
|
|
111
|
+
/* noop */
|
|
112
|
+
},
|
|
113
|
+
onEnd(otel) {
|
|
114
|
+
const span = otelSpanToTrodoSpan(otel);
|
|
115
|
+
if (span)
|
|
116
|
+
processor.enqueueSpan(span);
|
|
117
|
+
},
|
|
118
|
+
async forceFlush() {
|
|
119
|
+
await processor.forceFlush();
|
|
120
|
+
},
|
|
121
|
+
async shutdown() {
|
|
122
|
+
await processor.shutdown();
|
|
123
|
+
},
|
|
124
|
+
};
|
|
125
|
+
}
|
|
126
|
+
function buildInstrumentors() {
|
|
127
|
+
return [
|
|
128
|
+
{
|
|
129
|
+
id: 'anthropic',
|
|
130
|
+
factory: () => {
|
|
131
|
+
// eslint-disable-next-line @typescript-eslint/no-var-requires
|
|
132
|
+
const m = require('@opentelemetry/instrumentation-anthropic');
|
|
133
|
+
return new m.AnthropicInstrumentation();
|
|
134
|
+
},
|
|
135
|
+
},
|
|
136
|
+
{
|
|
137
|
+
id: 'openai',
|
|
138
|
+
factory: () => {
|
|
139
|
+
// eslint-disable-next-line @typescript-eslint/no-var-requires
|
|
140
|
+
const m = require('@opentelemetry/instrumentation-openai');
|
|
141
|
+
return new m.OpenAIInstrumentation();
|
|
142
|
+
},
|
|
143
|
+
},
|
|
144
|
+
{
|
|
145
|
+
id: 'langchain',
|
|
146
|
+
factory: () => {
|
|
147
|
+
// eslint-disable-next-line @typescript-eslint/no-var-requires
|
|
148
|
+
const m = require('@opentelemetry/instrumentation-langchain');
|
|
149
|
+
return new m.LangChainInstrumentation();
|
|
150
|
+
},
|
|
151
|
+
},
|
|
152
|
+
{
|
|
153
|
+
id: 'bedrock',
|
|
154
|
+
factory: () => {
|
|
155
|
+
// eslint-disable-next-line @typescript-eslint/no-var-requires
|
|
156
|
+
const m = require('@opentelemetry/instrumentation-bedrock');
|
|
157
|
+
return new m.BedrockInstrumentation();
|
|
158
|
+
},
|
|
159
|
+
},
|
|
160
|
+
{
|
|
161
|
+
id: 'cohere',
|
|
162
|
+
factory: () => {
|
|
163
|
+
// eslint-disable-next-line @typescript-eslint/no-var-requires
|
|
164
|
+
const m = require('@opentelemetry/instrumentation-cohere');
|
|
165
|
+
return new m.CohereInstrumentation();
|
|
166
|
+
},
|
|
167
|
+
},
|
|
168
|
+
{
|
|
169
|
+
id: 'google-generativeai',
|
|
170
|
+
factory: () => {
|
|
171
|
+
// eslint-disable-next-line @typescript-eslint/no-var-requires
|
|
172
|
+
const m = require('@opentelemetry/instrumentation-google-generativeai');
|
|
173
|
+
return new m.GoogleGenerativeAIInstrumentation();
|
|
174
|
+
},
|
|
175
|
+
},
|
|
176
|
+
{
|
|
177
|
+
id: 'vertexai',
|
|
178
|
+
factory: () => {
|
|
179
|
+
// eslint-disable-next-line @typescript-eslint/no-var-requires
|
|
180
|
+
const m = require('@opentelemetry/instrumentation-vertexai');
|
|
181
|
+
return new m.VertexAIInstrumentation();
|
|
182
|
+
},
|
|
183
|
+
},
|
|
184
|
+
{
|
|
185
|
+
id: 'llama-index',
|
|
186
|
+
factory: () => {
|
|
187
|
+
// eslint-disable-next-line @typescript-eslint/no-var-requires
|
|
188
|
+
const m = require('@opentelemetry/instrumentation-llamaindex');
|
|
189
|
+
return new m.LlamaIndexInstrumentation();
|
|
190
|
+
},
|
|
191
|
+
},
|
|
192
|
+
{
|
|
193
|
+
id: 'http',
|
|
194
|
+
factory: () => {
|
|
195
|
+
// eslint-disable-next-line @typescript-eslint/no-var-requires
|
|
196
|
+
const m = require('@opentelemetry/instrumentation-http');
|
|
197
|
+
return new m.HttpInstrumentation();
|
|
198
|
+
},
|
|
199
|
+
},
|
|
200
|
+
{
|
|
201
|
+
id: 'fetch',
|
|
202
|
+
factory: () => {
|
|
203
|
+
// eslint-disable-next-line @typescript-eslint/no-var-requires
|
|
204
|
+
const m = require('@opentelemetry/instrumentation-fetch');
|
|
205
|
+
return new m.FetchInstrumentation();
|
|
206
|
+
},
|
|
207
|
+
},
|
|
208
|
+
];
|
|
209
|
+
}
|
|
210
|
+
/**
|
|
211
|
+
* Best-effort: register OTel auto-instrumentations if the user has them
|
|
212
|
+
* installed. This is optional — users can also configure OTel themselves and
|
|
213
|
+
* pass `otelAdapter(processor)` as a span processor.
|
|
214
|
+
*
|
|
215
|
+
* Returns the list of instrumentation ids that were successfully registered.
|
|
216
|
+
*
|
|
217
|
+
* Vercel AI SDK note: if you set `experimental_telemetry: { isEnabled: true,
|
|
218
|
+
* tracer: trace.getTracer('ai') }` on generateText/streamText calls, those
|
|
219
|
+
* spans flow through the SDK-registered OTel SpanProcessor automatically.
|
|
220
|
+
*/
|
|
221
|
+
function enableAutoInstrument(opts) {
|
|
222
|
+
const disabled = new Set(opts.disable || []);
|
|
223
|
+
const active = [];
|
|
224
|
+
try {
|
|
225
|
+
// eslint-disable-next-line @typescript-eslint/no-var-requires
|
|
226
|
+
const { NodeSDK } = require('@opentelemetry/sdk-node');
|
|
227
|
+
// eslint-disable-next-line @typescript-eslint/no-var-requires
|
|
228
|
+
const { Resource } = require('@opentelemetry/resources');
|
|
229
|
+
const instrumentations = [];
|
|
230
|
+
for (const spec of buildInstrumentors()) {
|
|
231
|
+
if (disabled.has(spec.id))
|
|
232
|
+
continue;
|
|
233
|
+
try {
|
|
234
|
+
instrumentations.push(spec.factory());
|
|
235
|
+
active.push(spec.id);
|
|
236
|
+
}
|
|
237
|
+
catch {
|
|
238
|
+
/* package not installed — skip */
|
|
239
|
+
}
|
|
240
|
+
}
|
|
241
|
+
const sdk = new NodeSDK({
|
|
242
|
+
resource: new Resource({ 'service.name': 'trodo-agent' }),
|
|
243
|
+
spanProcessor: otelAdapter(opts.processor),
|
|
244
|
+
instrumentations,
|
|
245
|
+
});
|
|
246
|
+
sdk.start();
|
|
247
|
+
}
|
|
248
|
+
catch {
|
|
249
|
+
// @opentelemetry/sdk-node not installed; wrapAgent + withSpan still work.
|
|
250
|
+
}
|
|
251
|
+
return active;
|
|
252
|
+
}
|
|
253
|
+
//# sourceMappingURL=autoInstrument.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"autoInstrument.js","sourceRoot":"","sources":["../../../src/otel/autoInstrument.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.getActiveContext = getActiveContext;
|
|
4
|
+
exports.runWithContext = runWithContext;
|
|
5
|
+
exports.runWithContextAsync = runWithContextAsync;
|
|
6
|
+
let AsyncLocalStorageCtor = null;
|
|
7
|
+
try {
|
|
8
|
+
// eslint-disable-next-line @typescript-eslint/no-var-requires
|
|
9
|
+
AsyncLocalStorageCtor = require('node:async_hooks').AsyncLocalStorage;
|
|
10
|
+
}
|
|
11
|
+
catch {
|
|
12
|
+
try {
|
|
13
|
+
// eslint-disable-next-line @typescript-eslint/no-var-requires
|
|
14
|
+
AsyncLocalStorageCtor = require('async_hooks').AsyncLocalStorage;
|
|
15
|
+
}
|
|
16
|
+
catch {
|
|
17
|
+
AsyncLocalStorageCtor = null;
|
|
18
|
+
}
|
|
19
|
+
}
|
|
20
|
+
const als = AsyncLocalStorageCtor ? new AsyncLocalStorageCtor() : null;
|
|
21
|
+
let fallbackStore = null;
|
|
22
|
+
function getActiveContext() {
|
|
23
|
+
if (als)
|
|
24
|
+
return als.getStore() ?? null;
|
|
25
|
+
return fallbackStore;
|
|
26
|
+
}
|
|
27
|
+
function runWithContext(ctx, fn) {
|
|
28
|
+
if (als)
|
|
29
|
+
return als.run(ctx, fn);
|
|
30
|
+
const prev = fallbackStore;
|
|
31
|
+
fallbackStore = ctx;
|
|
32
|
+
try {
|
|
33
|
+
return fn();
|
|
34
|
+
}
|
|
35
|
+
finally {
|
|
36
|
+
fallbackStore = prev;
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
/** Async variant — context is preserved across awaits via AsyncLocalStorage. */
|
|
40
|
+
function runWithContextAsync(ctx, fn) {
|
|
41
|
+
if (als)
|
|
42
|
+
return als.run(ctx, fn);
|
|
43
|
+
const prev = fallbackStore;
|
|
44
|
+
fallbackStore = ctx;
|
|
45
|
+
return fn().finally(() => {
|
|
46
|
+
fallbackStore = prev;
|
|
47
|
+
});
|
|
48
|
+
}
|
|
49
|
+
//# sourceMappingURL=context.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"context.js","sourceRoot":"","sources":["../../../src/otel/context.ts"],"names":[],"mappings":";;AA2CA,4CAGC;AAED,wCASC;AAGD,kDAUC;AA/CD,IAAI,qBAAqB,GAGb,IAAI,CAAC;AAEjB,IAAI,CAAC;IACH,8DAA8D;IAC9D,qBAAqB,GAAG,OAAO,CAAC,kBAAkB,CAAC,CAAC,iBAAiB,CAAC;AACxE,CAAC;AAAC,MAAM,CAAC;IACP,IAAI,CAAC;QACH,8DAA8D;QAC9D,qBAAqB,GAAG,OAAO,CAAC,aAAa,CAAC,CAAC,iBAAiB,CAAC;IACnE,CAAC;IAAC,MAAM,CAAC;QACP,qBAAqB,GAAG,IAAI,CAAC;IAC/B,CAAC;AACH,CAAC;AAED,MAAM,GAAG,GAAG,qBAAqB,CAAC,CAAC,CAAC,IAAI,qBAAqB,EAAqB,CAAC,CAAC,CAAC,IAAI,CAAC;AAC1F,IAAI,aAAa,GAA6B,IAAI,CAAC;AAEnD,SAAgB,gBAAgB;IAC9B,IAAI,GAAG;QAAE,OAAO,GAAG,CAAC,QAAQ,EAAE,IAAI,IAAI,CAAC;IACvC,OAAO,aAAa,CAAC;AACvB,CAAC;AAED,SAAgB,cAAc,CAAI,GAAsB,EAAE,EAAW;IACnE,IAAI,GAAG;QAAE,OAAO,GAAG,CAAC,GAAG,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC;IACjC,MAAM,IAAI,GAAG,aAAa,CAAC;IAC3B,aAAa,GAAG,GAAG,CAAC;IACpB,IAAI,CAAC;QACH,OAAO,EAAE,EAAE,CAAC;IACd,CAAC;YAAS,CAAC;QACT,aAAa,GAAG,IAAI,CAAC;IACvB,CAAC;AACH,CAAC;AAED,gFAAgF;AAChF,SAAgB,mBAAmB,CACjC,GAAsB,EACtB,EAAoB;IAEpB,IAAI,GAAG;QAAE,OAAO,GAAG,CAAC,GAAG,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC;IACjC,MAAM,IAAI,GAAG,aAAa,CAAC;IAC3B,aAAa,GAAG,GAAG,CAAC;IACpB,OAAO,EAAE,EAAE,CAAC,OAAO,CAAC,GAAG,EAAE;QACvB,aAAa,GAAG,IAAI,CAAC;IACvB,CAAC,CAAC,CAAC;AACL,CAAC"}
|