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