@librechat/agents 3.3.8 → 3.3.9

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 (148) hide show
  1. package/dist/cjs/graphs/Graph.cjs +47 -13
  2. package/dist/cjs/graphs/Graph.cjs.map +1 -1
  3. package/dist/cjs/graphs/MultiAgentGraph.cjs +35 -2
  4. package/dist/cjs/graphs/MultiAgentGraph.cjs.map +1 -1
  5. package/dist/cjs/hitl/askUserQuestion.cjs +3 -2
  6. package/dist/cjs/hitl/askUserQuestion.cjs.map +1 -1
  7. package/dist/cjs/instrumentation.cjs +18 -48
  8. package/dist/cjs/instrumentation.cjs.map +1 -1
  9. package/dist/cjs/langfuse.cjs +174 -29
  10. package/dist/cjs/langfuse.cjs.map +1 -1
  11. package/dist/cjs/langfuseConfig.cjs +12 -0
  12. package/dist/cjs/langfuseConfig.cjs.map +1 -1
  13. package/dist/cjs/langfuseRuntimeContext.cjs +23 -2
  14. package/dist/cjs/langfuseRuntimeContext.cjs.map +1 -1
  15. package/dist/cjs/langfuseRuntimeScope.cjs +39 -8
  16. package/dist/cjs/langfuseRuntimeScope.cjs.map +1 -1
  17. package/dist/cjs/langfuseSpanRegistry.cjs +95 -0
  18. package/dist/cjs/langfuseSpanRegistry.cjs.map +1 -0
  19. package/dist/cjs/langfuseTraceShaping.cjs +121 -4
  20. package/dist/cjs/langfuseTraceShaping.cjs.map +1 -1
  21. package/dist/cjs/llm/anthropic/utils/message_inputs.cjs +39 -15
  22. package/dist/cjs/llm/anthropic/utils/message_inputs.cjs.map +1 -1
  23. package/dist/cjs/llm/bedrock/utils/message_inputs.cjs +25 -5
  24. package/dist/cjs/llm/bedrock/utils/message_inputs.cjs.map +1 -1
  25. package/dist/cjs/llm/init.cjs +3 -3
  26. package/dist/cjs/llm/invoke.cjs +5 -5
  27. package/dist/cjs/llm/openai/index.cjs +1 -1
  28. package/dist/cjs/main.cjs +10 -10
  29. package/dist/cjs/messages/prune.cjs +13 -1
  30. package/dist/cjs/messages/prune.cjs.map +1 -1
  31. package/dist/cjs/prompts/activityLabel.cjs +24 -12
  32. package/dist/cjs/prompts/activityLabel.cjs.map +1 -1
  33. package/dist/cjs/run.cjs +47 -22
  34. package/dist/cjs/run.cjs.map +1 -1
  35. package/dist/cjs/session/messageSerialization.cjs +6 -0
  36. package/dist/cjs/session/messageSerialization.cjs.map +1 -1
  37. package/dist/cjs/stream.cjs +21 -10
  38. package/dist/cjs/stream.cjs.map +1 -1
  39. package/dist/cjs/summarization/node.cjs +5 -0
  40. package/dist/cjs/summarization/node.cjs.map +1 -1
  41. package/dist/cjs/tools/ToolNode.cjs +253 -24
  42. package/dist/cjs/tools/ToolNode.cjs.map +1 -1
  43. package/dist/cjs/tools/handlers.cjs +1 -1
  44. package/dist/cjs/tools/search/tool.cjs +1 -1
  45. package/dist/cjs/tools/subagent/SubagentExecutor.cjs +1 -1
  46. package/dist/cjs/utils/index.cjs +2 -2
  47. package/dist/esm/graphs/Graph.mjs +48 -14
  48. package/dist/esm/graphs/Graph.mjs.map +1 -1
  49. package/dist/esm/graphs/MultiAgentGraph.mjs +35 -2
  50. package/dist/esm/graphs/MultiAgentGraph.mjs.map +1 -1
  51. package/dist/esm/hitl/askUserQuestion.mjs +3 -2
  52. package/dist/esm/hitl/askUserQuestion.mjs.map +1 -1
  53. package/dist/esm/instrumentation.mjs +18 -48
  54. package/dist/esm/instrumentation.mjs.map +1 -1
  55. package/dist/esm/langfuse.mjs +176 -28
  56. package/dist/esm/langfuse.mjs.map +1 -1
  57. package/dist/esm/langfuseConfig.mjs +10 -1
  58. package/dist/esm/langfuseConfig.mjs.map +1 -1
  59. package/dist/esm/langfuseRuntimeContext.mjs +21 -3
  60. package/dist/esm/langfuseRuntimeContext.mjs.map +1 -1
  61. package/dist/esm/langfuseRuntimeScope.mjs +39 -10
  62. package/dist/esm/langfuseRuntimeScope.mjs.map +1 -1
  63. package/dist/esm/langfuseSpanRegistry.mjs +91 -0
  64. package/dist/esm/langfuseSpanRegistry.mjs.map +1 -0
  65. package/dist/esm/langfuseTraceShaping.mjs +121 -4
  66. package/dist/esm/langfuseTraceShaping.mjs.map +1 -1
  67. package/dist/esm/llm/anthropic/utils/message_inputs.mjs +39 -15
  68. package/dist/esm/llm/anthropic/utils/message_inputs.mjs.map +1 -1
  69. package/dist/esm/llm/bedrock/utils/message_inputs.mjs +25 -5
  70. package/dist/esm/llm/bedrock/utils/message_inputs.mjs.map +1 -1
  71. package/dist/esm/llm/init.mjs +2 -2
  72. package/dist/esm/llm/invoke.mjs +5 -5
  73. package/dist/esm/llm/openai/index.mjs +1 -1
  74. package/dist/esm/main.mjs +8 -8
  75. package/dist/esm/messages/prune.mjs +13 -1
  76. package/dist/esm/messages/prune.mjs.map +1 -1
  77. package/dist/esm/prompts/activityLabel.mjs +24 -12
  78. package/dist/esm/prompts/activityLabel.mjs.map +1 -1
  79. package/dist/esm/run.mjs +47 -22
  80. package/dist/esm/run.mjs.map +1 -1
  81. package/dist/esm/session/messageSerialization.mjs +6 -0
  82. package/dist/esm/session/messageSerialization.mjs.map +1 -1
  83. package/dist/esm/stream.mjs +21 -10
  84. package/dist/esm/stream.mjs.map +1 -1
  85. package/dist/esm/summarization/node.mjs +5 -0
  86. package/dist/esm/summarization/node.mjs.map +1 -1
  87. package/dist/esm/tools/ToolNode.mjs +254 -25
  88. package/dist/esm/tools/ToolNode.mjs.map +1 -1
  89. package/dist/esm/tools/handlers.mjs +1 -1
  90. package/dist/esm/tools/search/tool.mjs +1 -1
  91. package/dist/esm/tools/subagent/SubagentExecutor.mjs +1 -1
  92. package/dist/esm/utils/index.mjs +2 -2
  93. package/dist/types/graphs/Graph.d.ts +19 -0
  94. package/dist/types/hitl/askUserQuestion.d.ts +11 -1
  95. package/dist/types/langfuse.d.ts +16 -8
  96. package/dist/types/langfuseConfig.d.ts +6 -0
  97. package/dist/types/langfuseRuntimeContext.d.ts +27 -1
  98. package/dist/types/langfuseRuntimeScope.d.ts +17 -2
  99. package/dist/types/langfuseSpanRegistry.d.ts +17 -0
  100. package/dist/types/langfuseTraceShaping.d.ts +2 -1
  101. package/dist/types/llm/anthropic/utils/message_inputs.d.ts +1 -0
  102. package/dist/types/session/types.d.ts +1 -0
  103. package/dist/types/tools/ToolNode.d.ts +7 -1
  104. package/dist/types/types/hitl.d.ts +8 -0
  105. package/dist/types/types/tools.d.ts +30 -0
  106. package/package.json +7 -4
  107. package/src/__tests__/stream.eagerArgsDivergence.test.ts +753 -0
  108. package/src/graphs/Graph.ts +69 -20
  109. package/src/graphs/MultiAgentGraph.ts +56 -2
  110. package/src/graphs/__tests__/composition.smoke.test.ts +4 -0
  111. package/src/hitl/askUserQuestion.ts +14 -1
  112. package/src/instrumentation.ts +35 -77
  113. package/src/langfuse.ts +320 -43
  114. package/src/langfuseConfig.ts +24 -0
  115. package/src/langfuseRuntimeContext.ts +43 -1
  116. package/src/langfuseRuntimeScope.ts +94 -21
  117. package/src/langfuseSpanRegistry.ts +131 -0
  118. package/src/langfuseTraceShaping.ts +194 -7
  119. package/src/llm/anthropic/utils/message_inputs.ts +70 -19
  120. package/src/llm/anthropic/utils/streaming-tool-input.test.ts +186 -11
  121. package/src/llm/bedrock/utils/message_inputs.test.ts +120 -4
  122. package/src/llm/bedrock/utils/message_inputs.ts +32 -7
  123. package/src/messages/prune.ts +12 -1
  124. package/src/prompts/activityLabel.ts +23 -6
  125. package/src/run.ts +76 -45
  126. package/src/scripts/activity-labels/captured.json +56 -0
  127. package/src/scripts/activity-labels/checks.cjs +205 -0
  128. package/src/scripts/activity-labels/corpus.cjs +473 -0
  129. package/src/scripts/activity-labels/report.cjs +203 -0
  130. package/src/scripts/activity-labels/rescore.cjs +102 -0
  131. package/src/scripts/activity-labels/run.ts +705 -0
  132. package/src/scripts/activity-labels/variants.ts +71 -0
  133. package/src/session/messageSerialization.ts +12 -1
  134. package/src/session/types.ts +1 -0
  135. package/src/specs/activity-label-prompt.test.ts +26 -10
  136. package/src/specs/agent-handoffs.test.ts +306 -0
  137. package/src/specs/langfuse-callbacks.test.ts +456 -0
  138. package/src/specs/langfuse-routing.integration.test.ts +138 -1
  139. package/src/specs/langfuse-span-registry.test.ts +70 -0
  140. package/src/specs/langfuse-trace-shaping.test.ts +294 -0
  141. package/src/specs/prune.test.ts +38 -1
  142. package/src/stream.ts +70 -6
  143. package/src/summarization/node.ts +5 -0
  144. package/src/tools/ToolNode.ts +400 -9
  145. package/src/tools/__tests__/ToolNode.invalidToolCalls.test.ts +757 -0
  146. package/src/tools/__tests__/hitl.test.ts +58 -0
  147. package/src/types/hitl.ts +8 -0
  148. package/src/types/tools.ts +35 -1
@@ -1,15 +1,14 @@
1
1
  const require_langfuseConfig = require("../langfuseConfig.cjs");
2
2
  const require_langfuseRuntimeScope = require("../langfuseRuntimeScope.cjs");
3
3
  const require_langfuse = require("../langfuse.cjs");
4
- const require_langfuseToolOutputTracing = require("../langfuseToolOutputTracing.cjs");
5
- const require_callbacks = require("../utils/callbacks.cjs");
6
4
  const require_constants = require("../common/constants.cjs");
7
5
  const require_enum = require("../common/enum.cjs");
8
6
  require("../common/index.cjs");
7
+ const require_langfuseToolOutputTracing = require("../langfuseToolOutputTracing.cjs");
8
+ const require_callbacks = require("../utils/callbacks.cjs");
9
9
  const require_truncation = require("../utils/truncation.cjs");
10
10
  const require_toolContent = require("../utils/toolContent.cjs");
11
11
  const require_tokens = require("../utils/tokens.cjs");
12
- const require_preempt = require("../llm/preempt.cjs");
13
12
  const require_instrumentation = require("../instrumentation.cjs");
14
13
  const require_cache = require("../messages/cache.cjs");
15
14
  const require_core = require("../messages/core.cjs");
@@ -27,14 +26,15 @@ const require_handoffCue = require("../messages/handoffCue.cjs");
27
26
  const require_reducer = require("../messages/reducer.cjs");
28
27
  const require_recency = require("../messages/recency.cjs");
29
28
  require("../messages/index.cjs");
30
- const require_graph = require("../utils/graph.cjs");
31
- const require_llm = require("../utils/llm.cjs");
32
- const require_handlers = require("../tools/handlers.cjs");
33
29
  const require_toolOutputReferences = require("../tools/toolOutputReferences.cjs");
30
+ const require_toolCache = require("../llm/bedrock/toolCache.cjs");
31
+ const require_preempt = require("../llm/preempt.cjs");
32
+ const require_handlers = require("../tools/handlers.cjs");
33
+ const require_llm = require("../utils/llm.cjs");
34
+ const require_graph = require("../utils/graph.cjs");
34
35
  const require_events$1 = require("../events.cjs");
35
36
  const require_run = require("../utils/run.cjs");
36
37
  require("../utils/index.cjs");
37
- const require_toolCache = require("../llm/bedrock/toolCache.cjs");
38
38
  const require_init = require("../llm/init.cjs");
39
39
  const require_invoke = require("../llm/invoke.cjs");
40
40
  const require_contextOverflowRecovery = require("../llm/contextOverflowRecovery.cjs");
@@ -56,12 +56,12 @@ const require_node = require("../summarization/node.cjs");
56
56
  const require_schema = require("../tools/schema.cjs");
57
57
  const require_AgentContext = require("../agents/AgentContext.cjs");
58
58
  const require_fake = require("../llm/fake.cjs");
59
+ let nanoid = require("nanoid");
59
60
  let _langchain_core_messages = require("@langchain/core/messages");
60
61
  let _langchain_langgraph = require("@langchain/langgraph");
61
62
  let _langchain_core_tools = require("@langchain/core/tools");
62
- let nanoid = require("nanoid");
63
- let _langchain_core_errors = require("@langchain/core/errors");
64
63
  let uuid = require("uuid");
64
+ let _langchain_core_errors = require("@langchain/core/errors");
65
65
  //#region src/graphs/Graph.ts
66
66
  const { AGENT, TOOLS, SUMMARIZE } = require_enum.GraphNodeKeys;
67
67
  const EMPTY_PREEMPT_BOUNDARY = {
@@ -354,6 +354,15 @@ var Graph = class {
354
354
  eagerEventToolUsageCountsByAgentId = /* @__PURE__ */ new Map();
355
355
  eagerEventToolCallChunks = /* @__PURE__ */ new Map();
356
356
  /**
357
+ * Per-run eager prestart circuit breaker, shared by reference with every
358
+ * ToolNode this graph compiles. When a prestarted execution's args turn
359
+ * out to differ from the final request, ToolNode records the tool name
360
+ * here and the stream handler stops prestarting that tool for the rest of
361
+ * the run — the retry then executes normally instead of re-diverging in a
362
+ * loop (LibreChat#14371).
363
+ */
364
+ eagerEventToolSuppressions = /* @__PURE__ */ new Set();
365
+ /**
357
366
  * Run-scoped execution backend for built-in code tools. Defaults to the
358
367
  * remote Code API sandbox when unset.
359
368
  */
@@ -401,6 +410,7 @@ var Graph = class {
401
410
  this.eagerEventToolExecutions.clear();
402
411
  this.clearEagerEventToolUsageCounts();
403
412
  this.eagerEventToolCallChunks.clear();
413
+ this.eagerEventToolSuppressions.clear();
404
414
  this.toolExecution = void 0;
405
415
  this.handlerDispatchedEventCounts.clear();
406
416
  /**
@@ -525,6 +535,16 @@ var StandardGraph = class StandardGraph extends Graph {
525
535
  originalToolContentCheckpointScope;
526
536
  runId;
527
537
  /**
538
+ * Identity used to stamp Langfuse runtime scopes and handlers (see
539
+ * `LangfuseRuntimeContext.runId`). Carries an opaque per-instance
540
+ * component: public run ids are unrestricted and may repeat across
541
+ * concurrently executing runs (retries, duplicate submissions,
542
+ * tenant-local message ids), and equal stamps would let those runs adopt
543
+ * each other's scopes. One graph instance = one execution's stamp, shared
544
+ * by the stream handler and every graph-level scope of that execution.
545
+ */
546
+ langfuseScopeRunId;
547
+ /**
528
548
  * Boundary between historical messages (loaded from conversation state)
529
549
  * and messages produced during the current run. Set once in the state
530
550
  * reducer when messages first arrive. Used by `getRunMessages()` and
@@ -596,6 +616,7 @@ var StandardGraph = class StandardGraph extends Graph {
596
616
  constructor({ runId, signal, agents, langfuse, tokenCounter, indexTokenCountMap, calibrationRatio, subagentUsageSink, subagentScope, preemption }) {
597
617
  super();
598
618
  this.runId = runId;
619
+ this.langfuseScopeRunId = `${runId ?? "graph"}:${(0, nanoid.nanoid)()}`;
599
620
  this.signal = signal;
600
621
  this.langfuse = langfuse;
601
622
  this.subagentUsageSink = subagentUsageSink;
@@ -629,6 +650,7 @@ var StandardGraph = class StandardGraph extends Graph {
629
650
  this.eagerEventToolExecutions.clear();
630
651
  this.clearEagerEventToolUsageCounts();
631
652
  this.eagerEventToolCallChunks.clear();
653
+ this.eagerEventToolSuppressions.clear();
632
654
  this.handlerDispatchedStepIds = require_graph.resetIfNotEmpty(this.handlerDispatchedStepIds, /* @__PURE__ */ new Set());
633
655
  this.handlerDispatchedEventCounts = require_graph.resetIfNotEmpty(this.handlerDispatchedEventCounts, /* @__PURE__ */ new Map());
634
656
  this.messageIdsByStepKey = require_graph.resetIfNotEmpty(this.messageIdsByStepKey, /* @__PURE__ */ new Map());
@@ -930,6 +952,7 @@ var StandardGraph = class StandardGraph extends Graph {
930
952
  codeSessionToolNames: this.codeSessionToolNames,
931
953
  eagerEventToolExecutions: this.eagerEventToolExecutions,
932
954
  eagerEventToolUsageCount: this.getEagerEventToolUsageCount(agentContext?.agentId),
955
+ eagerEventToolSuppressions: this.eagerEventToolSuppressions,
933
956
  toolExecution: this.toolExecution,
934
957
  directToolNames: directToolNames.size > 0 ? directToolNames : void 0,
935
958
  interruptingToolNames: this.interruptingToolNames != null && this.interruptingToolNames.length > 0 ? new Set(this.interruptingToolNames) : void 0,
@@ -1630,7 +1653,12 @@ var StandardGraph = class StandardGraph extends Graph {
1630
1653
  ...config,
1631
1654
  metadata: {
1632
1655
  ...config.metadata ?? {},
1633
- ...traceMetadata
1656
+ ...traceMetadata,
1657
+ /** Canonical agent identity, stamped OUTSIDE trace-metadata
1658
+ * filtering: `createLangfuseTraceMetadata` drops values over its
1659
+ * length cap, but scope trust (`isForeignScope`) needs the id
1660
+ * verbatim regardless of length. */
1661
+ agentId
1634
1662
  }
1635
1663
  };
1636
1664
  require_instrumentation.initializeLangfuseTracing(langfuse);
@@ -1641,7 +1669,9 @@ var StandardGraph = class StandardGraph extends Graph {
1641
1669
  sessionId: config.configurable?.thread_id,
1642
1670
  traceMetadata,
1643
1671
  tags: ["librechat", "agent"],
1644
- traceIdSeed: langfuse?.deterministicTraceId === true ? this.runId : void 0
1672
+ traceIdSeed: langfuse?.deterministicTraceId === true ? this.runId : void 0,
1673
+ runId: this.langfuseScopeRunId,
1674
+ toolOutputTracing: require_langfuseConfig.hasToolOutputTracingConfig(this.langfuse, agentContext.langfuse) ? require_langfuseConfig.resolveToolOutputTracingConfig(this.langfuse, agentContext.langfuse) : void 0
1645
1675
  });
1646
1676
  if (langfuseHandler != null) invokeConfig = {
1647
1677
  ...invokeConfig,
@@ -1653,7 +1683,9 @@ var StandardGraph = class StandardGraph extends Graph {
1653
1683
  if (preInvokeContextOverflowError != null) throw preInvokeContextOverflowError;
1654
1684
  result = await require_langfuseRuntimeScope.withLangfuseRuntimeScope(require_langfuseRuntimeScope.resolveLangfuseRuntimeScope({
1655
1685
  runLangfuse: this.langfuse,
1656
- langfuseOverlay: agentContext.langfuse
1686
+ langfuseOverlay: agentContext.langfuse,
1687
+ runId: this.langfuseScopeRunId,
1688
+ agentId
1657
1689
  }), () => require_invoke.attemptInvoke({
1658
1690
  model: this.overrideModel ?? model,
1659
1691
  messages: finalMessages,
@@ -1746,7 +1778,9 @@ var StandardGraph = class StandardGraph extends Graph {
1746
1778
  try {
1747
1779
  result = await require_langfuseRuntimeScope.withLangfuseRuntimeScope(require_langfuseRuntimeScope.resolveLangfuseRuntimeScope({
1748
1780
  runLangfuse: this.langfuse,
1749
- langfuseOverlay: agentContext.langfuse
1781
+ langfuseOverlay: agentContext.langfuse,
1782
+ runId: this.langfuseScopeRunId,
1783
+ agentId
1750
1784
  }), () => require_invoke.tryFallbackProviders({
1751
1785
  fallbacks,
1752
1786
  tools: agentContext.tools,