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
package/dist/bedrock.cjs CHANGED
@@ -179,11 +179,11 @@ function getActiveNeatlogsSpan() {
179
179
  function getNeatlogsParentContext(baseContext) {
180
180
  return baseContext ?? getNeatlogsActiveContext();
181
181
  }
182
- function withNeatlogsSpan(span, fn, baseContext) {
182
+ function withNeatlogsSpan(span, fn, baseContext, rootSpan) {
183
183
  const base = baseContext ?? getNeatlogsActiveContext();
184
184
  let ctx = import_api.trace.setSpan(base, span);
185
185
  if (base.getValue(NEATLOGS_ROOT_SPAN_KEY) === void 0) {
186
- ctx = ctx.setValue(NEATLOGS_ROOT_SPAN_KEY, span);
186
+ ctx = ctx.setValue(NEATLOGS_ROOT_SPAN_KEY, rootSpan ?? span);
187
187
  }
188
188
  return privateContextStorage.run(ctx, fn);
189
189
  }
@@ -917,7 +917,8 @@ var USER_PROMPT_TEMPLATE_KEY = (0, import_api3.createContextKey)("neatlogs.user_
917
917
  var USER_PROMPT_VARIABLES_KEY = (0, import_api3.createContextKey)("neatlogs.user_prompt_variables");
918
918
 
919
919
  // src/core/auto-root.ts
920
- var ROOT_KINDS = /* @__PURE__ */ new Set(["workflow", "chain", "agent", "mcp_tool"]);
920
+ var boundAutoRoots = /* @__PURE__ */ new WeakMap();
921
+ var ROOT_KINDS = /* @__PURE__ */ new Set(["workflow", "chain", "agent", "mcp_tool", "llm"]);
921
922
  function autoRootEnabled() {
922
923
  const val = (process.env.NEATLOGS_AUTO_ROOT ?? "").trim().toLowerCase();
923
924
  return !["false", "0", "no", "off"].includes(val);
@@ -932,11 +933,12 @@ function resolveRootWorkflowName() {
932
933
  }
933
934
  return "workflow";
934
935
  }
935
- function stampAutoRootIdentity(root) {
936
+ function stampRootIdentity(root) {
936
937
  applySessionAttributes(root, void 0, true);
937
938
  applyEndUserAttributes(root, void 0, void 0, true);
938
939
  }
939
- function wrapSpanWithRoot(child, root) {
940
+ function bindSpanToAutoRoot(child, root) {
941
+ if (!root) return child;
940
942
  let ended = false;
941
943
  const proxy = new Proxy(child, {
942
944
  get(target, prop, _receiver) {
@@ -958,6 +960,7 @@ function wrapSpanWithRoot(child, root) {
958
960
  return typeof value === "function" ? value.bind(target) : value;
959
961
  }
960
962
  });
963
+ boundAutoRoots.set(proxy, root);
961
964
  aliasMediaCaptureSpan(proxy, child);
962
965
  return proxy;
963
966
  }
@@ -970,27 +973,41 @@ var AutoRootTracer = class {
970
973
  const kind = String(
971
974
  options?.attributes?.["neatlogs.span.kind"] ?? ""
972
975
  ).toLowerCase();
976
+ const hasExplicitContext = context !== void 0;
973
977
  const ctx = context ?? getNeatlogsParentContext();
974
978
  const parent = getActiveNeatlogsSpan();
975
- const needsRoot = autoRootEnabled() && !ROOT_KINDS.has(kind) && !(parent !== void 0 && parent.isRecording());
979
+ const isParentless = !hasExplicitContext && !(parent !== void 0 && parent.isRecording());
980
+ const needsRoot = autoRootEnabled() && !ROOT_KINDS.has(kind) && isParentless;
976
981
  if (!needsRoot) {
977
- return this._tracer.startSpan(name, options, ctx);
982
+ const span = this._tracer.startSpan(name, options, ctx);
983
+ if (isParentless && ROOT_KINDS.has(kind)) stampRootIdentity(span);
984
+ return span;
978
985
  }
979
986
  const root = this._tracer.startSpan(
980
987
  resolveRootWorkflowName(),
981
988
  { attributes: { "neatlogs.span.kind": "workflow", "neatlogs.auto_root": true } },
982
989
  ctx
983
990
  );
984
- stampAutoRootIdentity(root);
991
+ stampRootIdentity(root);
985
992
  const childCtx = import_api4.trace.setSpan(ctx, root);
986
993
  const child = this._tracer.startSpan(name, options, childCtx);
987
- return wrapSpanWithRoot(child, root);
994
+ return bindSpanToAutoRoot(child, root);
988
995
  }
989
- // startActiveSpan is used by traceTool (callback-scoped, always under an
990
- // active span in practice) — pass straight through, no auto-root.
991
- startActiveSpan = ((...args) => this._tracer.startActiveSpan(
992
- ...args
993
- ));
996
+ startActiveSpan = ((name, ...args) => {
997
+ const callback = args.at(-1);
998
+ if (typeof callback !== "function") {
999
+ throw new TypeError("startActiveSpan requires a callback");
1000
+ }
1001
+ const options = args.length >= 2 ? args[0] : void 0;
1002
+ const parentContext = args.length >= 3 ? args[1] : getNeatlogsParentContext();
1003
+ const span = args.length >= 3 ? this.startSpan(name, options, parentContext) : this.startSpan(name, options);
1004
+ return withNeatlogsSpan(
1005
+ span,
1006
+ () => callback(span),
1007
+ parentContext,
1008
+ boundAutoRoots.get(span)
1009
+ );
1010
+ });
994
1011
  };
995
1012
  function getProviderTracer(name) {
996
1013
  return new AutoRootTracer(getNeatlogsTracer(name));