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
  }
@@ -928,7 +928,8 @@ var USER_PROMPT_TEMPLATE_KEY = (0, import_api3.createContextKey)("neatlogs.user_
928
928
  var USER_PROMPT_VARIABLES_KEY = (0, import_api3.createContextKey)("neatlogs.user_prompt_variables");
929
929
 
930
930
  // src/core/auto-root.ts
931
- var ROOT_KINDS = /* @__PURE__ */ new Set(["workflow", "chain", "agent", "mcp_tool"]);
931
+ var boundAutoRoots = /* @__PURE__ */ new WeakMap();
932
+ var ROOT_KINDS = /* @__PURE__ */ new Set(["workflow", "chain", "agent", "mcp_tool", "llm"]);
932
933
  function autoRootEnabled() {
933
934
  const val = (process.env.NEATLOGS_AUTO_ROOT ?? "").trim().toLowerCase();
934
935
  return !["false", "0", "no", "off"].includes(val);
@@ -943,11 +944,12 @@ function resolveRootWorkflowName() {
943
944
  }
944
945
  return "workflow";
945
946
  }
946
- function stampAutoRootIdentity(root) {
947
+ function stampRootIdentity(root) {
947
948
  applySessionAttributes(root, void 0, true);
948
949
  applyEndUserAttributes(root, void 0, void 0, true);
949
950
  }
950
- function wrapSpanWithRoot(child, root) {
951
+ function bindSpanToAutoRoot(child, root) {
952
+ if (!root) return child;
951
953
  let ended = false;
952
954
  const proxy = new Proxy(child, {
953
955
  get(target, prop, _receiver) {
@@ -969,6 +971,7 @@ function wrapSpanWithRoot(child, root) {
969
971
  return typeof value === "function" ? value.bind(target) : value;
970
972
  }
971
973
  });
974
+ boundAutoRoots.set(proxy, root);
972
975
  aliasMediaCaptureSpan(proxy, child);
973
976
  return proxy;
974
977
  }
@@ -981,27 +984,41 @@ var AutoRootTracer = class {
981
984
  const kind = String(
982
985
  options?.attributes?.["neatlogs.span.kind"] ?? ""
983
986
  ).toLowerCase();
987
+ const hasExplicitContext = context !== void 0;
984
988
  const ctx = context ?? getNeatlogsParentContext();
985
989
  const parent = getActiveNeatlogsSpan();
986
- const needsRoot = autoRootEnabled() && !ROOT_KINDS.has(kind) && !(parent !== void 0 && parent.isRecording());
990
+ const isParentless = !hasExplicitContext && !(parent !== void 0 && parent.isRecording());
991
+ const needsRoot = autoRootEnabled() && !ROOT_KINDS.has(kind) && isParentless;
987
992
  if (!needsRoot) {
988
- return this._tracer.startSpan(name, options, ctx);
993
+ const span = this._tracer.startSpan(name, options, ctx);
994
+ if (isParentless && ROOT_KINDS.has(kind)) stampRootIdentity(span);
995
+ return span;
989
996
  }
990
997
  const root = this._tracer.startSpan(
991
998
  resolveRootWorkflowName(),
992
999
  { attributes: { "neatlogs.span.kind": "workflow", "neatlogs.auto_root": true } },
993
1000
  ctx
994
1001
  );
995
- stampAutoRootIdentity(root);
1002
+ stampRootIdentity(root);
996
1003
  const childCtx = import_api4.trace.setSpan(ctx, root);
997
1004
  const child = this._tracer.startSpan(name, options, childCtx);
998
- return wrapSpanWithRoot(child, root);
1005
+ return bindSpanToAutoRoot(child, root);
999
1006
  }
1000
- // startActiveSpan is used by traceTool (callback-scoped, always under an
1001
- // active span in practice) — pass straight through, no auto-root.
1002
- startActiveSpan = ((...args) => this._tracer.startActiveSpan(
1003
- ...args
1004
- ));
1007
+ startActiveSpan = ((name, ...args) => {
1008
+ const callback = args.at(-1);
1009
+ if (typeof callback !== "function") {
1010
+ throw new TypeError("startActiveSpan requires a callback");
1011
+ }
1012
+ const options = args.length >= 2 ? args[0] : void 0;
1013
+ const parentContext = args.length >= 3 ? args[1] : getNeatlogsParentContext();
1014
+ const span = args.length >= 3 ? this.startSpan(name, options, parentContext) : this.startSpan(name, options);
1015
+ return withNeatlogsSpan(
1016
+ span,
1017
+ () => callback(span),
1018
+ parentContext,
1019
+ boundAutoRoots.get(span)
1020
+ );
1021
+ });
1005
1022
  };
1006
1023
  function getProviderTracer(name) {
1007
1024
  return new AutoRootTracer(getNeatlogsTracer(name));