neatlogs 1.1.6 → 1.1.7

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 (68) hide show
  1. package/README.md +16 -27
  2. package/dist/ai-sdk.cjs +142 -54
  3. package/dist/ai-sdk.cjs.map +1 -1
  4. package/dist/ai-sdk.mjs +145 -53
  5. package/dist/ai-sdk.mjs.map +1 -1
  6. package/dist/anthropic.cjs +65 -29
  7. package/dist/anthropic.cjs.map +1 -1
  8. package/dist/anthropic.mjs +73 -36
  9. package/dist/anthropic.mjs.map +1 -1
  10. package/dist/azure-openai.cjs +65 -29
  11. package/dist/azure-openai.cjs.map +1 -1
  12. package/dist/azure-openai.mjs +73 -36
  13. package/dist/azure-openai.mjs.map +1 -1
  14. package/dist/bedrock.cjs +65 -29
  15. package/dist/bedrock.cjs.map +1 -1
  16. package/dist/bedrock.mjs +73 -36
  17. package/dist/bedrock.mjs.map +1 -1
  18. package/dist/claude-agent-sdk.cjs +55 -15
  19. package/dist/claude-agent-sdk.cjs.map +1 -1
  20. package/dist/claude-agent-sdk.mjs +52 -8
  21. package/dist/claude-agent-sdk.mjs.map +1 -1
  22. package/dist/google-genai.cjs +69 -35
  23. package/dist/google-genai.cjs.map +1 -1
  24. package/dist/google-genai.mjs +77 -42
  25. package/dist/google-genai.mjs.map +1 -1
  26. package/dist/index.cjs +951 -682
  27. package/dist/index.cjs.map +1 -1
  28. package/dist/index.d.ts +44 -2
  29. package/dist/index.mjs +881 -609
  30. package/dist/index.mjs.map +1 -1
  31. package/dist/langchain.cjs +46 -12
  32. package/dist/langchain.cjs.map +1 -1
  33. package/dist/langchain.mjs +54 -19
  34. package/dist/langchain.mjs.map +1 -1
  35. package/dist/mastra-wrap.cjs +318 -46
  36. package/dist/mastra-wrap.cjs.map +1 -1
  37. package/dist/mastra-wrap.mjs +319 -41
  38. package/dist/mastra-wrap.mjs.map +1 -1
  39. package/dist/openai-agents.cjs +45 -9
  40. package/dist/openai-agents.cjs.map +1 -1
  41. package/dist/openai-agents.mjs +45 -5
  42. package/dist/openai-agents.mjs.map +1 -1
  43. package/dist/openai.cjs +65 -29
  44. package/dist/openai.cjs.map +1 -1
  45. package/dist/openai.mjs +73 -36
  46. package/dist/openai.mjs.map +1 -1
  47. package/dist/opencode-plugin.cjs +1 -1
  48. package/dist/opencode-plugin.cjs.map +1 -1
  49. package/dist/opencode-plugin.mjs +1 -1
  50. package/dist/opencode-plugin.mjs.map +1 -1
  51. package/dist/openrouter-agent.cjs +48 -12
  52. package/dist/openrouter-agent.cjs.map +1 -1
  53. package/dist/openrouter-agent.mjs +56 -19
  54. package/dist/openrouter-agent.mjs.map +1 -1
  55. package/dist/pi-agent.cjs +45 -9
  56. package/dist/pi-agent.cjs.map +1 -1
  57. package/dist/pi-agent.mjs +45 -6
  58. package/dist/pi-agent.mjs.map +1 -1
  59. package/dist/strands.cjs +4 -136
  60. package/dist/strands.cjs.map +1 -1
  61. package/dist/strands.d.ts +5 -24
  62. package/dist/strands.mjs +4 -136
  63. package/dist/strands.mjs.map +1 -1
  64. package/dist/vertex-ai.cjs +69 -35
  65. package/dist/vertex-ai.cjs.map +1 -1
  66. package/dist/vertex-ai.mjs +77 -42
  67. package/dist/vertex-ai.mjs.map +1 -1
  68. package/package.json +2 -7
@@ -1,18 +1,15 @@
1
1
  // src/vertex-ai.ts
2
- import { trace as trace2, context as otelContext4, SpanStatusCode as SpanStatusCode3 } from "@opentelemetry/api";
2
+ import { SpanStatusCode as SpanStatusCode3 } from "@opentelemetry/api";
3
3
 
4
4
  // src/core/auto-root.ts
5
5
  import {
6
- trace as otelTrace3,
7
- context as otelContext3
6
+ trace as otelTrace3
8
7
  } from "@opentelemetry/api";
9
8
 
10
9
  // src/core/context.ts
11
10
  import {
12
- trace as otelTrace2,
13
- context as otelContext2,
14
11
  createContextKey,
15
- ROOT_CONTEXT,
12
+ ROOT_CONTEXT as ROOT_CONTEXT3,
16
13
  SpanStatusCode as SpanStatusCode2
17
14
  } from "@opentelemetry/api";
18
15
 
@@ -67,9 +64,6 @@ function getLogger() {
67
64
  // src/core/mask.ts
68
65
  var logger = getLogger();
69
66
 
70
- // src/core/end-user.ts
71
- import { trace as otelTrace, context as otelContext } from "@opentelemetry/api";
72
-
73
67
  // src/core/identity.ts
74
68
  import { AsyncLocalStorage as AsyncLocalStorage2 } from "async_hooks";
75
69
  var _GLOBAL_KEY = /* @__PURE__ */ Symbol.for("neatlogs.identity.storage");
@@ -85,6 +79,51 @@ function currentEndUserMetadata() {
85
79
  return _storage.getStore()?.endUserMetadata;
86
80
  }
87
81
 
82
+ // src/core/provider.ts
83
+ import { AsyncLocalStorage as AsyncLocalStorage3 } from "async_hooks";
84
+ import {
85
+ ROOT_CONTEXT,
86
+ INVALID_SPAN_CONTEXT,
87
+ trace as otelTrace
88
+ } from "@opentelemetry/api";
89
+ var PRIVATE_SPAN_STORAGE_KEY = /* @__PURE__ */ Symbol.for(
90
+ "neatlogs.private_span_async_local_storage"
91
+ );
92
+ var PRIVATE_PROVIDER_STATE_KEY = /* @__PURE__ */ Symbol.for(
93
+ "neatlogs.private_provider_state"
94
+ );
95
+ var neatlogsGlobal = globalThis;
96
+ var privateContextStorage = neatlogsGlobal[PRIVATE_SPAN_STORAGE_KEY] ?? (neatlogsGlobal[PRIVATE_SPAN_STORAGE_KEY] = new AsyncLocalStorage3());
97
+ var providerState = neatlogsGlobal[PRIVATE_PROVIDER_STATE_KEY] ?? (neatlogsGlobal[PRIVATE_PROVIDER_STATE_KEY] = {
98
+ provider: null
99
+ });
100
+ var preInitTracer = {
101
+ startSpan() {
102
+ return otelTrace.wrapSpanContext(INVALID_SPAN_CONTEXT);
103
+ },
104
+ startActiveSpan(_name, arg2, arg3, arg4) {
105
+ const fn = typeof arg2 === "function" ? arg2 : typeof arg3 === "function" ? arg3 : arg4;
106
+ return fn(otelTrace.wrapSpanContext(INVALID_SPAN_CONTEXT));
107
+ }
108
+ };
109
+ function getNeatlogsTracer(name) {
110
+ return providerState.provider?.getTracer(name) ?? preInitTracer;
111
+ }
112
+ function getNeatlogsActiveContext() {
113
+ return privateContextStorage.getStore() ?? ROOT_CONTEXT;
114
+ }
115
+ function getActiveNeatlogsSpan() {
116
+ return otelTrace.getSpan(getNeatlogsActiveContext());
117
+ }
118
+ function getNeatlogsParentContext(baseContext) {
119
+ return baseContext ?? getNeatlogsActiveContext();
120
+ }
121
+ function withNeatlogsSpan(span, fn, baseContext) {
122
+ const base = baseContext ?? getNeatlogsActiveContext();
123
+ const ctx = otelTrace.setSpan(base, span);
124
+ return privateContextStorage.run(ctx, fn);
125
+ }
126
+
88
127
  // src/core/end-user.ts
89
128
  var logger2 = getLogger();
90
129
  var END_USER_ID_KEY = "neatlogs.end_user.id";
@@ -133,7 +172,7 @@ function applySessionAttributes(span, sessionId, isRoot = true) {
133
172
  }
134
173
 
135
174
  // src/decorators/base.ts
136
- import { trace, SpanStatusCode } from "@opentelemetry/api";
175
+ import { ROOT_CONTEXT as ROOT_CONTEXT2, SpanStatusCode } from "@opentelemetry/api";
137
176
  var logger4 = getLogger();
138
177
 
139
178
  // src/core/context.ts
@@ -198,11 +237,11 @@ var AutoRootTracer = class {
198
237
  const kind = String(
199
238
  options?.attributes?.["neatlogs.span.kind"] ?? ""
200
239
  ).toLowerCase();
201
- const ctx = context ?? otelContext3.active();
202
- const parent = otelTrace3.getSpan(ctx);
240
+ const ctx = context ?? getNeatlogsParentContext();
241
+ const parent = getActiveNeatlogsSpan();
203
242
  const needsRoot = autoRootEnabled() && !ROOT_KINDS.has(kind) && !(parent !== void 0 && parent.isRecording());
204
243
  if (!needsRoot) {
205
- return this._tracer.startSpan(name, options, context);
244
+ return this._tracer.startSpan(name, options, ctx);
206
245
  }
207
246
  const root = this._tracer.startSpan(
208
247
  resolveRootWorkflowName(),
@@ -221,7 +260,7 @@ var AutoRootTracer = class {
221
260
  ));
222
261
  };
223
262
  function getProviderTracer(name) {
224
- return new AutoRootTracer(otelTrace3.getTracer(name));
263
+ return new AutoRootTracer(getNeatlogsTracer(name));
225
264
  }
226
265
 
227
266
  // src/vertex-ai.ts
@@ -233,8 +272,8 @@ function wrapVertexAI(client) {
233
272
  }
234
273
  function traceTool(name, fn) {
235
274
  return async function tracedTool(args) {
236
- const tracer = getProviderTracer(TRACER_NAME);
237
- return tracer.startActiveSpan(
275
+ const tracer = getNeatlogsTracer(TRACER_NAME);
276
+ const span = tracer.startSpan(
238
277
  `tool.${name}`,
239
278
  {
240
279
  attributes: {
@@ -243,21 +282,21 @@ function traceTool(name, fn) {
243
282
  "input.value": safeStringify(args)
244
283
  }
245
284
  },
246
- otelContext4.active(),
247
- async (span) => {
248
- try {
249
- const result = await fn(args);
250
- span.setAttribute("output.value", safeStringify(result));
251
- span.setStatus({ code: SpanStatusCode3.OK });
252
- return result;
253
- } catch (err) {
254
- recordError(span, err);
255
- throw err;
256
- } finally {
257
- span.end();
258
- }
259
- }
285
+ getNeatlogsParentContext()
260
286
  );
287
+ return withNeatlogsSpan(span, async () => {
288
+ try {
289
+ const result = await fn(args);
290
+ span.setAttribute("output.value", safeStringify(result));
291
+ span.setStatus({ code: SpanStatusCode3.OK });
292
+ return result;
293
+ } catch (err) {
294
+ recordError(span, err);
295
+ throw err;
296
+ } finally {
297
+ span.end();
298
+ }
299
+ });
261
300
  };
262
301
  }
263
302
  function wrapNamespace(target, path) {
@@ -319,15 +358,14 @@ function tracedChatSend(original, chat, params, rest, isStream) {
319
358
  "neatlogs.llm.model_name": model,
320
359
  "neatlogs.llm.is_streaming": isStream
321
360
  }
322
- }, otelContext4.active());
361
+ }, getNeatlogsParentContext());
323
362
  const message = params?.message ?? params;
324
363
  span.setAttribute("neatlogs.llm.input_messages.0.role", "user");
325
364
  span.setAttribute(
326
365
  "neatlogs.llm.input_messages.0.content",
327
366
  typeof message === "string" ? message : safeStringify(message)
328
367
  );
329
- const ctx = trace2.setSpan(otelContext4.active(), span);
330
- const result = otelContext4.with(ctx, () => original(params, ...rest));
368
+ const result = withNeatlogsSpan(span, () => original(params, ...rest));
331
369
  return Promise.resolve(result).then(
332
370
  (response) => {
333
371
  if (isStream) return wrapStream(response, span);
@@ -350,9 +388,8 @@ function tracedEmbedContent(original) {
350
388
  "neatlogs.embedding.model_name": opts?.model ?? "",
351
389
  "neatlogs.embedding.text": safeStringify(opts?.contents ?? "")
352
390
  }
353
- }, otelContext4.active());
354
- const ctx = trace2.setSpan(otelContext4.active(), span);
355
- const result = otelContext4.with(ctx, () => original(opts, ...rest));
391
+ }, getNeatlogsParentContext());
392
+ const result = withNeatlogsSpan(span, () => original(opts, ...rest));
356
393
  return Promise.resolve(result).then(
357
394
  (response) => {
358
395
  const embeddings = response?.embeddings;
@@ -382,9 +419,8 @@ function tracedCountTokens(original) {
382
419
  "neatlogs.llm.task": "count_tokens",
383
420
  "neatlogs.llm.model_name": opts?.model ?? ""
384
421
  }
385
- }, otelContext4.active());
386
- const ctx = trace2.setSpan(otelContext4.active(), span);
387
- const result = otelContext4.with(ctx, () => original(opts, ...rest));
422
+ }, getNeatlogsParentContext());
423
+ const result = withNeatlogsSpan(span, () => original(opts, ...rest));
388
424
  return Promise.resolve(result).then(
389
425
  (response) => {
390
426
  if (response?.totalTokens != null) span.setAttribute("neatlogs.llm.token_count.prompt", response.totalTokens);
@@ -411,10 +447,9 @@ function tracedGenerateContent(original, isStream) {
411
447
  "neatlogs.llm.model_name": model,
412
448
  "neatlogs.llm.is_streaming": isStream
413
449
  }
414
- }, otelContext4.active());
450
+ }, getNeatlogsParentContext());
415
451
  setInputAttributes(span, opts);
416
- const ctx = trace2.setSpan(otelContext4.active(), span);
417
- const result = otelContext4.with(ctx, () => original(opts, ...rest));
452
+ const result = withNeatlogsSpan(span, () => original(opts, ...rest));
418
453
  return Promise.resolve(result).then(
419
454
  (response) => {
420
455
  if (isStream) {