neatlogs 1.1.19 → 1.1.21

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 (69) hide show
  1. package/README.md +34 -2
  2. package/dist/ai-sdk.cjs +186 -11
  3. package/dist/ai-sdk.cjs.map +1 -1
  4. package/dist/ai-sdk.d.ts +17 -7
  5. package/dist/ai-sdk.mjs +189 -12
  6. package/dist/ai-sdk.mjs.map +1 -1
  7. package/dist/anthropic.cjs +31 -14
  8. package/dist/anthropic.cjs.map +1 -1
  9. package/dist/anthropic.mjs +31 -14
  10. package/dist/anthropic.mjs.map +1 -1
  11. package/dist/azure-openai.cjs +31 -14
  12. package/dist/azure-openai.cjs.map +1 -1
  13. package/dist/azure-openai.mjs +31 -14
  14. package/dist/azure-openai.mjs.map +1 -1
  15. package/dist/bedrock.cjs +31 -14
  16. package/dist/bedrock.cjs.map +1 -1
  17. package/dist/bedrock.mjs +31 -14
  18. package/dist/bedrock.mjs.map +1 -1
  19. package/dist/browser.cjs +26 -1
  20. package/dist/browser.cjs.map +1 -1
  21. package/dist/browser.d.ts +1 -1
  22. package/dist/browser.mjs +26 -1
  23. package/dist/browser.mjs.map +1 -1
  24. package/dist/claude-agent-sdk.cjs +2 -2
  25. package/dist/claude-agent-sdk.cjs.map +1 -1
  26. package/dist/claude-agent-sdk.mjs +2 -2
  27. package/dist/claude-agent-sdk.mjs.map +1 -1
  28. package/dist/cli.cjs +452 -200
  29. package/dist/cli.cjs.map +1 -1
  30. package/dist/cli.mjs +427 -173
  31. package/dist/cli.mjs.map +1 -1
  32. package/dist/google-genai.cjs +31 -14
  33. package/dist/google-genai.cjs.map +1 -1
  34. package/dist/google-genai.mjs +31 -14
  35. package/dist/google-genai.mjs.map +1 -1
  36. package/dist/index.cjs +652 -333
  37. package/dist/index.cjs.map +1 -1
  38. package/dist/index.d.ts +15 -6
  39. package/dist/index.mjs +505 -184
  40. package/dist/index.mjs.map +1 -1
  41. package/dist/langchain.cjs +3 -3
  42. package/dist/langchain.cjs.map +1 -1
  43. package/dist/langchain.mjs +3 -3
  44. package/dist/langchain.mjs.map +1 -1
  45. package/dist/mastra-wrap.cjs +2 -2
  46. package/dist/mastra-wrap.cjs.map +1 -1
  47. package/dist/mastra-wrap.mjs +2 -2
  48. package/dist/mastra-wrap.mjs.map +1 -1
  49. package/dist/openai-agents.cjs.map +1 -1
  50. package/dist/openai-agents.mjs.map +1 -1
  51. package/dist/openai.cjs +31 -14
  52. package/dist/openai.cjs.map +1 -1
  53. package/dist/openai.mjs +31 -14
  54. package/dist/openai.mjs.map +1 -1
  55. package/dist/opencode-plugin.cjs +1 -1
  56. package/dist/opencode-plugin.cjs.map +1 -1
  57. package/dist/opencode-plugin.mjs +1 -1
  58. package/dist/opencode-plugin.mjs.map +1 -1
  59. package/dist/openrouter-agent.cjs +31 -14
  60. package/dist/openrouter-agent.cjs.map +1 -1
  61. package/dist/openrouter-agent.mjs +31 -14
  62. package/dist/openrouter-agent.mjs.map +1 -1
  63. package/dist/pi-agent.cjs.map +1 -1
  64. package/dist/pi-agent.mjs.map +1 -1
  65. package/dist/vertex-ai.cjs +31 -14
  66. package/dist/vertex-ai.cjs.map +1 -1
  67. package/dist/vertex-ai.mjs +31 -14
  68. package/dist/vertex-ai.mjs.map +1 -1
  69. package/package.json +1 -1
@@ -158,11 +158,11 @@ function getActiveNeatlogsSpan() {
158
158
  function getNeatlogsParentContext(baseContext) {
159
159
  return baseContext ?? getNeatlogsActiveContext();
160
160
  }
161
- function withNeatlogsSpan(span, fn, baseContext) {
161
+ function withNeatlogsSpan(span, fn, baseContext, rootSpan) {
162
162
  const base = baseContext ?? getNeatlogsActiveContext();
163
163
  let ctx = import_api.trace.setSpan(base, span);
164
164
  if (base.getValue(NEATLOGS_ROOT_SPAN_KEY) === void 0) {
165
- ctx = ctx.setValue(NEATLOGS_ROOT_SPAN_KEY, span);
165
+ ctx = ctx.setValue(NEATLOGS_ROOT_SPAN_KEY, rootSpan ?? span);
166
166
  }
167
167
  return privateContextStorage.run(ctx, fn);
168
168
  }
@@ -323,7 +323,8 @@ var USER_PROMPT_TEMPLATE_KEY = (0, import_api3.createContextKey)("neatlogs.user_
323
323
  var USER_PROMPT_VARIABLES_KEY = (0, import_api3.createContextKey)("neatlogs.user_prompt_variables");
324
324
 
325
325
  // src/core/auto-root.ts
326
- var ROOT_KINDS = /* @__PURE__ */ new Set(["workflow", "chain", "agent", "mcp_tool"]);
326
+ var boundAutoRoots = /* @__PURE__ */ new WeakMap();
327
+ var ROOT_KINDS = /* @__PURE__ */ new Set(["workflow", "chain", "agent", "mcp_tool", "llm"]);
327
328
  function autoRootEnabled() {
328
329
  const val = (process.env.NEATLOGS_AUTO_ROOT ?? "").trim().toLowerCase();
329
330
  return !["false", "0", "no", "off"].includes(val);
@@ -338,11 +339,12 @@ function resolveRootWorkflowName() {
338
339
  }
339
340
  return "workflow";
340
341
  }
341
- function stampAutoRootIdentity(root) {
342
+ function stampRootIdentity(root) {
342
343
  applySessionAttributes(root, void 0, true);
343
344
  applyEndUserAttributes(root, void 0, void 0, true);
344
345
  }
345
- function wrapSpanWithRoot(child, root) {
346
+ function bindSpanToAutoRoot(child, root) {
347
+ if (!root) return child;
346
348
  let ended = false;
347
349
  const proxy = new Proxy(child, {
348
350
  get(target, prop, _receiver) {
@@ -364,6 +366,7 @@ function wrapSpanWithRoot(child, root) {
364
366
  return typeof value === "function" ? value.bind(target) : value;
365
367
  }
366
368
  });
369
+ boundAutoRoots.set(proxy, root);
367
370
  aliasMediaCaptureSpan(proxy, child);
368
371
  return proxy;
369
372
  }
@@ -376,27 +379,41 @@ var AutoRootTracer = class {
376
379
  const kind = String(
377
380
  options?.attributes?.["neatlogs.span.kind"] ?? ""
378
381
  ).toLowerCase();
382
+ const hasExplicitContext = context !== void 0;
379
383
  const ctx = context ?? getNeatlogsParentContext();
380
384
  const parent = getActiveNeatlogsSpan();
381
- const needsRoot = autoRootEnabled() && !ROOT_KINDS.has(kind) && !(parent !== void 0 && parent.isRecording());
385
+ const isParentless = !hasExplicitContext && !(parent !== void 0 && parent.isRecording());
386
+ const needsRoot = autoRootEnabled() && !ROOT_KINDS.has(kind) && isParentless;
382
387
  if (!needsRoot) {
383
- return this._tracer.startSpan(name, options, ctx);
388
+ const span = this._tracer.startSpan(name, options, ctx);
389
+ if (isParentless && ROOT_KINDS.has(kind)) stampRootIdentity(span);
390
+ return span;
384
391
  }
385
392
  const root = this._tracer.startSpan(
386
393
  resolveRootWorkflowName(),
387
394
  { attributes: { "neatlogs.span.kind": "workflow", "neatlogs.auto_root": true } },
388
395
  ctx
389
396
  );
390
- stampAutoRootIdentity(root);
397
+ stampRootIdentity(root);
391
398
  const childCtx = import_api4.trace.setSpan(ctx, root);
392
399
  const child = this._tracer.startSpan(name, options, childCtx);
393
- return wrapSpanWithRoot(child, root);
400
+ return bindSpanToAutoRoot(child, root);
394
401
  }
395
- // startActiveSpan is used by traceTool (callback-scoped, always under an
396
- // active span in practice) — pass straight through, no auto-root.
397
- startActiveSpan = ((...args) => this._tracer.startActiveSpan(
398
- ...args
399
- ));
402
+ startActiveSpan = ((name, ...args) => {
403
+ const callback = args.at(-1);
404
+ if (typeof callback !== "function") {
405
+ throw new TypeError("startActiveSpan requires a callback");
406
+ }
407
+ const options = args.length >= 2 ? args[0] : void 0;
408
+ const parentContext = args.length >= 3 ? args[1] : getNeatlogsParentContext();
409
+ const span = args.length >= 3 ? this.startSpan(name, options, parentContext) : this.startSpan(name, options);
410
+ return withNeatlogsSpan(
411
+ span,
412
+ () => callback(span),
413
+ parentContext,
414
+ boundAutoRoots.get(span)
415
+ );
416
+ });
400
417
  };
401
418
  function getProviderTracer(name) {
402
419
  return new AutoRootTracer(getNeatlogsTracer(name));