@librechat/agents 3.1.67 → 3.1.68-dev.0

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 (162) hide show
  1. package/dist/cjs/agents/AgentContext.cjs +23 -3
  2. package/dist/cjs/agents/AgentContext.cjs.map +1 -1
  3. package/dist/cjs/common/enum.cjs +16 -0
  4. package/dist/cjs/common/enum.cjs.map +1 -1
  5. package/dist/cjs/graphs/Graph.cjs +91 -0
  6. package/dist/cjs/graphs/Graph.cjs.map +1 -1
  7. package/dist/cjs/graphs/MultiAgentGraph.cjs +36 -0
  8. package/dist/cjs/graphs/MultiAgentGraph.cjs.map +1 -1
  9. package/dist/cjs/hooks/HookRegistry.cjs +162 -0
  10. package/dist/cjs/hooks/HookRegistry.cjs.map +1 -0
  11. package/dist/cjs/hooks/executeHooks.cjs +276 -0
  12. package/dist/cjs/hooks/executeHooks.cjs.map +1 -0
  13. package/dist/cjs/hooks/matchers.cjs +256 -0
  14. package/dist/cjs/hooks/matchers.cjs.map +1 -0
  15. package/dist/cjs/hooks/types.cjs +27 -0
  16. package/dist/cjs/hooks/types.cjs.map +1 -0
  17. package/dist/cjs/main.cjs +54 -0
  18. package/dist/cjs/main.cjs.map +1 -1
  19. package/dist/cjs/messages/format.cjs +74 -12
  20. package/dist/cjs/messages/format.cjs.map +1 -1
  21. package/dist/cjs/run.cjs +111 -0
  22. package/dist/cjs/run.cjs.map +1 -1
  23. package/dist/cjs/summarization/index.cjs +41 -0
  24. package/dist/cjs/summarization/index.cjs.map +1 -1
  25. package/dist/cjs/summarization/node.cjs +165 -19
  26. package/dist/cjs/summarization/node.cjs.map +1 -1
  27. package/dist/cjs/tools/BashExecutor.cjs +175 -0
  28. package/dist/cjs/tools/BashExecutor.cjs.map +1 -0
  29. package/dist/cjs/tools/BashProgrammaticToolCalling.cjs +296 -0
  30. package/dist/cjs/tools/BashProgrammaticToolCalling.cjs.map +1 -0
  31. package/dist/cjs/tools/ReadFile.cjs +43 -0
  32. package/dist/cjs/tools/ReadFile.cjs.map +1 -0
  33. package/dist/cjs/tools/SkillTool.cjs +50 -0
  34. package/dist/cjs/tools/SkillTool.cjs.map +1 -0
  35. package/dist/cjs/tools/SubagentTool.cjs +92 -0
  36. package/dist/cjs/tools/SubagentTool.cjs.map +1 -0
  37. package/dist/cjs/tools/ToolNode.cjs +304 -140
  38. package/dist/cjs/tools/ToolNode.cjs.map +1 -1
  39. package/dist/cjs/tools/skillCatalog.cjs +84 -0
  40. package/dist/cjs/tools/skillCatalog.cjs.map +1 -0
  41. package/dist/cjs/tools/subagent/SubagentExecutor.cjs +511 -0
  42. package/dist/cjs/tools/subagent/SubagentExecutor.cjs.map +1 -0
  43. package/dist/esm/agents/AgentContext.mjs +23 -3
  44. package/dist/esm/agents/AgentContext.mjs.map +1 -1
  45. package/dist/esm/common/enum.mjs +15 -1
  46. package/dist/esm/common/enum.mjs.map +1 -1
  47. package/dist/esm/graphs/Graph.mjs +91 -0
  48. package/dist/esm/graphs/Graph.mjs.map +1 -1
  49. package/dist/esm/graphs/MultiAgentGraph.mjs +36 -0
  50. package/dist/esm/graphs/MultiAgentGraph.mjs.map +1 -1
  51. package/dist/esm/hooks/HookRegistry.mjs +160 -0
  52. package/dist/esm/hooks/HookRegistry.mjs.map +1 -0
  53. package/dist/esm/hooks/executeHooks.mjs +273 -0
  54. package/dist/esm/hooks/executeHooks.mjs.map +1 -0
  55. package/dist/esm/hooks/matchers.mjs +251 -0
  56. package/dist/esm/hooks/matchers.mjs.map +1 -0
  57. package/dist/esm/hooks/types.mjs +25 -0
  58. package/dist/esm/hooks/types.mjs.map +1 -0
  59. package/dist/esm/main.mjs +13 -2
  60. package/dist/esm/main.mjs.map +1 -1
  61. package/dist/esm/messages/format.mjs +66 -4
  62. package/dist/esm/messages/format.mjs.map +1 -1
  63. package/dist/esm/run.mjs +111 -0
  64. package/dist/esm/run.mjs.map +1 -1
  65. package/dist/esm/summarization/index.mjs +41 -1
  66. package/dist/esm/summarization/index.mjs.map +1 -1
  67. package/dist/esm/summarization/node.mjs +165 -19
  68. package/dist/esm/summarization/node.mjs.map +1 -1
  69. package/dist/esm/tools/BashExecutor.mjs +169 -0
  70. package/dist/esm/tools/BashExecutor.mjs.map +1 -0
  71. package/dist/esm/tools/BashProgrammaticToolCalling.mjs +287 -0
  72. package/dist/esm/tools/BashProgrammaticToolCalling.mjs.map +1 -0
  73. package/dist/esm/tools/ReadFile.mjs +38 -0
  74. package/dist/esm/tools/ReadFile.mjs.map +1 -0
  75. package/dist/esm/tools/SkillTool.mjs +45 -0
  76. package/dist/esm/tools/SkillTool.mjs.map +1 -0
  77. package/dist/esm/tools/SubagentTool.mjs +85 -0
  78. package/dist/esm/tools/SubagentTool.mjs.map +1 -0
  79. package/dist/esm/tools/ToolNode.mjs +306 -142
  80. package/dist/esm/tools/ToolNode.mjs.map +1 -1
  81. package/dist/esm/tools/skillCatalog.mjs +82 -0
  82. package/dist/esm/tools/skillCatalog.mjs.map +1 -0
  83. package/dist/esm/tools/subagent/SubagentExecutor.mjs +505 -0
  84. package/dist/esm/tools/subagent/SubagentExecutor.mjs.map +1 -0
  85. package/dist/types/agents/AgentContext.d.ts +6 -0
  86. package/dist/types/common/enum.d.ts +10 -1
  87. package/dist/types/graphs/Graph.d.ts +2 -0
  88. package/dist/types/graphs/MultiAgentGraph.d.ts +12 -0
  89. package/dist/types/hooks/HookRegistry.d.ts +56 -0
  90. package/dist/types/hooks/executeHooks.d.ts +79 -0
  91. package/dist/types/hooks/index.d.ts +6 -0
  92. package/dist/types/hooks/matchers.d.ts +95 -0
  93. package/dist/types/hooks/types.d.ts +320 -0
  94. package/dist/types/index.d.ts +8 -0
  95. package/dist/types/messages/format.d.ts +2 -1
  96. package/dist/types/run.d.ts +1 -0
  97. package/dist/types/summarization/index.d.ts +2 -0
  98. package/dist/types/summarization/node.d.ts +2 -0
  99. package/dist/types/tools/BashExecutor.d.ts +45 -0
  100. package/dist/types/tools/BashProgrammaticToolCalling.d.ts +72 -0
  101. package/dist/types/tools/ReadFile.d.ts +28 -0
  102. package/dist/types/tools/SkillTool.d.ts +40 -0
  103. package/dist/types/tools/SubagentTool.d.ts +36 -0
  104. package/dist/types/tools/ToolNode.d.ts +24 -2
  105. package/dist/types/tools/skillCatalog.d.ts +19 -0
  106. package/dist/types/tools/subagent/SubagentExecutor.d.ts +137 -0
  107. package/dist/types/tools/subagent/index.d.ts +2 -0
  108. package/dist/types/types/graph.d.ts +61 -2
  109. package/dist/types/types/index.d.ts +1 -0
  110. package/dist/types/types/run.d.ts +20 -0
  111. package/dist/types/types/skill.d.ts +9 -0
  112. package/dist/types/types/tools.d.ts +38 -1
  113. package/package.json +5 -1
  114. package/src/agents/AgentContext.ts +26 -2
  115. package/src/common/enum.ts +15 -0
  116. package/src/graphs/Graph.ts +113 -0
  117. package/src/graphs/MultiAgentGraph.ts +39 -0
  118. package/src/graphs/__tests__/MultiAgentGraph.test.ts +91 -0
  119. package/src/hooks/HookRegistry.ts +208 -0
  120. package/src/hooks/__tests__/HookRegistry.test.ts +190 -0
  121. package/src/hooks/__tests__/compactHooks.test.ts +214 -0
  122. package/src/hooks/__tests__/executeHooks.test.ts +1013 -0
  123. package/src/hooks/__tests__/integration.test.ts +337 -0
  124. package/src/hooks/__tests__/matchers.test.ts +238 -0
  125. package/src/hooks/__tests__/toolHooks.test.ts +669 -0
  126. package/src/hooks/executeHooks.ts +375 -0
  127. package/src/hooks/index.ts +57 -0
  128. package/src/hooks/matchers.ts +280 -0
  129. package/src/hooks/types.ts +404 -0
  130. package/src/index.ts +10 -0
  131. package/src/messages/format.ts +74 -4
  132. package/src/messages/formatAgentMessages.skills.test.ts +334 -0
  133. package/src/run.ts +126 -0
  134. package/src/scripts/multi-agent-subagent.ts +246 -0
  135. package/src/scripts/subagent-event-driven-debug.ts +190 -0
  136. package/src/scripts/subagent-tools-debug.ts +160 -0
  137. package/src/specs/subagent.test.ts +305 -0
  138. package/src/summarization/__tests__/node.test.ts +42 -0
  139. package/src/summarization/__tests__/trigger.test.ts +100 -1
  140. package/src/summarization/index.ts +47 -0
  141. package/src/summarization/node.ts +202 -24
  142. package/src/tools/BashExecutor.ts +205 -0
  143. package/src/tools/BashProgrammaticToolCalling.ts +397 -0
  144. package/src/tools/ReadFile.ts +39 -0
  145. package/src/tools/SkillTool.ts +46 -0
  146. package/src/tools/SubagentTool.ts +100 -0
  147. package/src/tools/ToolNode.ts +391 -169
  148. package/src/tools/__tests__/ReadFile.test.ts +44 -0
  149. package/src/tools/__tests__/SkillTool.test.ts +442 -0
  150. package/src/tools/__tests__/SubagentExecutor.test.ts +1148 -0
  151. package/src/tools/__tests__/SubagentTool.test.ts +149 -0
  152. package/src/tools/__tests__/ToolNode.session.test.ts +12 -12
  153. package/src/tools/__tests__/skillCatalog.test.ts +161 -0
  154. package/src/tools/__tests__/subagentHooks.test.ts +215 -0
  155. package/src/tools/skillCatalog.ts +126 -0
  156. package/src/tools/subagent/SubagentExecutor.ts +676 -0
  157. package/src/tools/subagent/index.ts +13 -0
  158. package/src/types/graph.ts +80 -1
  159. package/src/types/index.ts +1 -0
  160. package/src/types/run.ts +20 -0
  161. package/src/types/skill.ts +11 -0
  162. package/src/types/tools.ts +41 -1
package/dist/cjs/main.cjs CHANGED
@@ -19,7 +19,14 @@ var MultiAgentGraph = require('./graphs/MultiAgentGraph.cjs');
19
19
  var index$2 = require('./summarization/index.cjs');
20
20
  var Calculator = require('./tools/Calculator.cjs');
21
21
  var CodeExecutor = require('./tools/CodeExecutor.cjs');
22
+ var BashExecutor = require('./tools/BashExecutor.cjs');
22
23
  var ProgrammaticToolCalling = require('./tools/ProgrammaticToolCalling.cjs');
24
+ var BashProgrammaticToolCalling = require('./tools/BashProgrammaticToolCalling.cjs');
25
+ var SkillTool = require('./tools/SkillTool.cjs');
26
+ var SubagentTool = require('./tools/SubagentTool.cjs');
27
+ var SubagentExecutor = require('./tools/subagent/SubagentExecutor.cjs');
28
+ var ReadFile = require('./tools/ReadFile.cjs');
29
+ var skillCatalog = require('./tools/skillCatalog.cjs');
23
30
  var ToolSearch = require('./tools/ToolSearch.cjs');
24
31
  var ToolNode = require('./tools/ToolNode.cjs');
25
32
  var schema$1 = require('./tools/schema.cjs');
@@ -37,6 +44,10 @@ var tokens = require('./utils/tokens.cjs');
37
44
  var schema$2 = require('./utils/schema.cjs');
38
45
  var truncation = require('./utils/truncation.cjs');
39
46
  var errors = require('./utils/errors.cjs');
47
+ var HookRegistry = require('./hooks/HookRegistry.cjs');
48
+ var executeHooks = require('./hooks/executeHooks.cjs');
49
+ var matchers = require('./hooks/matchers.cjs');
50
+ var types = require('./hooks/types.cjs');
40
51
  var index$1 = require('./llm/openai/index.cjs');
41
52
  var index = require('./llm/openrouter/index.cjs');
42
53
  var providers = require('./llm/providers.cjs');
@@ -102,6 +113,7 @@ exports.messagesStateReducer = reducer.messagesStateReducer;
102
113
  exports.Graph = Graph.Graph;
103
114
  exports.StandardGraph = Graph.StandardGraph;
104
115
  exports.MultiAgentGraph = MultiAgentGraph.MultiAgentGraph;
116
+ exports._resetUnrecognizedTriggerWarnings = index$2._resetUnrecognizedTriggerWarnings;
105
117
  exports.shouldTriggerSummarization = index$2.shouldTriggerSummarization;
106
118
  exports.Calculator = Calculator.Calculator;
107
119
  exports.CalculatorSchema = Calculator.CalculatorSchema;
@@ -115,6 +127,11 @@ exports.CodeExecutionToolSchema = CodeExecutor.CodeExecutionToolSchema;
115
127
  exports.createCodeExecutionTool = CodeExecutor.createCodeExecutionTool;
116
128
  exports.getCodeBaseURL = CodeExecutor.getCodeBaseURL;
117
129
  exports.imageExtRegex = CodeExecutor.imageExtRegex;
130
+ exports.BashExecutionToolDefinition = BashExecutor.BashExecutionToolDefinition;
131
+ exports.BashExecutionToolDescription = BashExecutor.BashExecutionToolDescription;
132
+ exports.BashExecutionToolName = BashExecutor.BashExecutionToolName;
133
+ exports.BashExecutionToolSchema = BashExecutor.BashExecutionToolSchema;
134
+ exports.createBashExecutionTool = BashExecutor.createBashExecutionTool;
118
135
  exports.ProgrammaticToolCallingDefinition = ProgrammaticToolCalling.ProgrammaticToolCallingDefinition;
119
136
  exports.ProgrammaticToolCallingDescription = ProgrammaticToolCalling.ProgrammaticToolCallingDescription;
120
137
  exports.ProgrammaticToolCallingName = ProgrammaticToolCalling.ProgrammaticToolCallingName;
@@ -128,6 +145,34 @@ exports.formatCompletedResponse = ProgrammaticToolCalling.formatCompletedRespons
128
145
  exports.makeRequest = ProgrammaticToolCalling.makeRequest;
129
146
  exports.normalizeToPythonIdentifier = ProgrammaticToolCalling.normalizeToPythonIdentifier;
130
147
  exports.unwrapToolResponse = ProgrammaticToolCalling.unwrapToolResponse;
148
+ exports.BashProgrammaticToolCallingDefinition = BashProgrammaticToolCalling.BashProgrammaticToolCallingDefinition;
149
+ exports.BashProgrammaticToolCallingDescription = BashProgrammaticToolCalling.BashProgrammaticToolCallingDescription;
150
+ exports.BashProgrammaticToolCallingName = BashProgrammaticToolCalling.BashProgrammaticToolCallingName;
151
+ exports.BashProgrammaticToolCallingSchema = BashProgrammaticToolCalling.BashProgrammaticToolCallingSchema;
152
+ exports.createBashProgrammaticToolCallingTool = BashProgrammaticToolCalling.createBashProgrammaticToolCallingTool;
153
+ exports.extractUsedBashToolNames = BashProgrammaticToolCalling.extractUsedBashToolNames;
154
+ exports.filterBashToolsByUsage = BashProgrammaticToolCalling.filterBashToolsByUsage;
155
+ exports.normalizeToBashIdentifier = BashProgrammaticToolCalling.normalizeToBashIdentifier;
156
+ exports.SkillToolDefinition = SkillTool.SkillToolDefinition;
157
+ exports.SkillToolDescription = SkillTool.SkillToolDescription;
158
+ exports.SkillToolName = SkillTool.SkillToolName;
159
+ exports.SkillToolSchema = SkillTool.SkillToolSchema;
160
+ exports.SubagentToolDefinition = SubagentTool.SubagentToolDefinition;
161
+ exports.SubagentToolDescription = SubagentTool.SubagentToolDescription;
162
+ exports.SubagentToolName = SubagentTool.SubagentToolName;
163
+ exports.SubagentToolSchema = SubagentTool.SubagentToolSchema;
164
+ exports.buildSubagentToolParams = SubagentTool.buildSubagentToolParams;
165
+ exports.createSubagentToolDefinition = SubagentTool.createSubagentToolDefinition;
166
+ exports.SubagentExecutor = SubagentExecutor.SubagentExecutor;
167
+ exports.buildChildInputs = SubagentExecutor.buildChildInputs;
168
+ exports.filterSubagentResult = SubagentExecutor.filterSubagentResult;
169
+ exports.resolveSubagentConfigs = SubagentExecutor.resolveSubagentConfigs;
170
+ exports.summarizeEvent = SubagentExecutor.summarizeEvent;
171
+ exports.ReadFileToolDefinition = ReadFile.ReadFileToolDefinition;
172
+ exports.ReadFileToolDescription = ReadFile.ReadFileToolDescription;
173
+ exports.ReadFileToolName = ReadFile.ReadFileToolName;
174
+ exports.ReadFileToolSchema = ReadFile.ReadFileToolSchema;
175
+ exports.formatSkillCatalog = skillCatalog.formatSkillCatalog;
131
176
  exports.ToolSearchToolDefinition = ToolSearch.ToolSearchToolDefinition;
132
177
  exports.ToolSearchToolDescription = ToolSearch.ToolSearchToolDescription;
133
178
  exports.ToolSearchToolName = ToolSearch.ToolSearchToolName;
@@ -174,6 +219,7 @@ exports.querySchema = schema.querySchema;
174
219
  exports.videosSchema = schema.videosSchema;
175
220
  exports.ANTHROPIC_TOOL_TOKEN_MULTIPLIER = constants.ANTHROPIC_TOOL_TOKEN_MULTIPLIER;
176
221
  exports.DEFAULT_TOOL_TOKEN_MULTIPLIER = constants.DEFAULT_TOOL_TOKEN_MULTIPLIER;
222
+ exports.CODE_EXECUTION_TOOLS = _enum.CODE_EXECUTION_TOOLS;
177
223
  Object.defineProperty(exports, "Callback", {
178
224
  enumerable: true,
179
225
  get: function () { return _enum.Callback; }
@@ -248,6 +294,14 @@ exports.truncateToolResultContent = truncation.truncateToolResultContent;
248
294
  exports.extractErrorMessage = errors.extractErrorMessage;
249
295
  exports.isContextOverflowError = errors.isContextOverflowError;
250
296
  exports.isLikelyContextOverflowError = errors.isLikelyContextOverflowError;
297
+ exports.HookRegistry = HookRegistry.HookRegistry;
298
+ exports.DEFAULT_HOOK_TIMEOUT_MS = executeHooks.DEFAULT_HOOK_TIMEOUT_MS;
299
+ exports.executeHooks = executeHooks.executeHooks;
300
+ exports.MAX_CACHE_SIZE = matchers.MAX_CACHE_SIZE;
301
+ exports.MAX_PATTERN_LENGTH = matchers.MAX_PATTERN_LENGTH;
302
+ exports.hasNestedQuantifier = matchers.hasNestedQuantifier;
303
+ exports.matchesQuery = matchers.matchesQuery;
304
+ exports.HOOK_EVENTS = types.HOOK_EVENTS;
251
305
  exports.CustomOpenAIClient = index$1.CustomOpenAIClient;
252
306
  exports.ChatOpenRouter = index.ChatOpenRouter;
253
307
  exports.getChatModelClass = providers.getChatModelClass;
@@ -1 +1 @@
1
- {"version":3,"file":"main.cjs","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
1
+ {"version":3,"file":"main.cjs","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
@@ -555,16 +555,38 @@ function contentPartCharLength(part) {
555
555
  }
556
556
  return len;
557
557
  }
558
+ /** Extracts the skillName from a skill tool_call's args (string or object). */
559
+ function extractSkillName(args) {
560
+ let parsed;
561
+ if (typeof args === 'string') {
562
+ try {
563
+ parsed = JSON.parse(args);
564
+ }
565
+ catch {
566
+ /* malformed args — skip */
567
+ }
568
+ }
569
+ else {
570
+ parsed = args;
571
+ }
572
+ const name = parsed?.skillName;
573
+ return typeof name === 'string' && name !== '' ? name : undefined;
574
+ }
558
575
  /**
559
576
  * Formats an array of messages for LangChain, handling tool calls and creating ToolMessage instances.
560
577
  *
561
578
  * @param payload - The array of messages to format.
562
579
  * @param indexTokenCountMap - Optional map of message indices to token counts.
563
580
  * @param tools - Optional set of tool names that are allowed in the request.
581
+ * @param skills - Optional map of skill name to body for reconstructing skill HumanMessages.
564
582
  * @returns - Object containing formatted messages and updated indexTokenCountMap if provided.
565
583
  */
566
- const formatAgentMessages = (payload, indexTokenCountMap, tools) => {
567
- const messages = [];
584
+ const formatAgentMessages = (payload, indexTokenCountMap, tools,
585
+ /** Pre-resolved skill bodies keyed by skill name. When present, HumanMessages
586
+ * are reconstructed after skill ToolMessages to restore skill instructions
587
+ * that were only in LangGraph state during the original run. */
588
+ skills) => {
589
+ const messages$1 = [];
568
590
  // If indexTokenCountMap is provided, create a new map to track the updated indices
569
591
  const updatedIndexTokenCountMap = {};
570
592
  let boundaryTokenAdjustment;
@@ -612,13 +634,13 @@ const formatAgentMessages = (payload, indexTokenCountMap, tools) => {
612
634
  if (sourceMessageId != null && sourceMessageId !== '') {
613
635
  formattedMessage.id = sourceMessageId;
614
636
  }
615
- messages.push(formattedMessage);
637
+ messages$1.push(formattedMessage);
616
638
  // Update the index mapping for this message
617
- indexMapping[i] = [messages.length - 1];
639
+ indexMapping[i] = [messages$1.length - 1];
618
640
  continue;
619
641
  }
620
642
  // For assistant messages, track the starting index before processing
621
- const startMessageIndex = messages.length;
643
+ const startMessageIndex = messages$1.length;
622
644
  /**
623
645
  * If tools set is provided, process tool_calls:
624
646
  * - Keep valid tool_calls (tools in the set or dynamically discovered)
@@ -626,6 +648,7 @@ const formatAgentMessages = (payload, indexTokenCountMap, tools) => {
626
648
  * - Dynamically expand the set when tool_search results are encountered
627
649
  */
628
650
  let processedMessage = message;
651
+ let pendingSkillNames;
629
652
  if (discoveredTools) {
630
653
  const content = message.content;
631
654
  if (content != null && Array.isArray(content)) {
@@ -661,8 +684,15 @@ const formatAgentMessages = (payload, indexTokenCountMap, tools) => {
661
684
  }
662
685
  }
663
686
  if (discoveredTools.has(toolName)) {
664
- /** Valid tool - keep it */
665
687
  filteredContent.push(part);
688
+ if (toolName === _enum.Constants.SKILL_TOOL &&
689
+ skills?.size != null &&
690
+ skills.size > 0) {
691
+ const skillName = extractSkillName(part.tool_call.args) ?? '';
692
+ if (skillName) {
693
+ (pendingSkillNames ??= new Set()).add(skillName);
694
+ }
695
+ }
666
696
  }
667
697
  else {
668
698
  /** Invalid tool - convert to string for context preservation */
@@ -722,16 +752,48 @@ const formatAgentMessages = (payload, indexTokenCountMap, tools) => {
722
752
  }
723
753
  }
724
754
  }
755
+ /** When tools filtering is off, still detect skill tool_calls for body reconstruction */
756
+ if (!discoveredTools && skills?.size != null && skills.size > 0) {
757
+ const content = processedMessage.content;
758
+ if (Array.isArray(content)) {
759
+ for (const part of content) {
760
+ if (part.type !== _enum.ContentTypes.TOOL_CALL ||
761
+ part.tool_call?.name !== _enum.Constants.SKILL_TOOL) {
762
+ continue;
763
+ }
764
+ const skillName = extractSkillName(part.tool_call.args) ?? '';
765
+ if (skillName) {
766
+ (pendingSkillNames ??= new Set()).add(skillName);
767
+ }
768
+ }
769
+ }
770
+ }
725
771
  const formattedMessages = formatAssistantMessage(processedMessage);
726
772
  if (sourceMessageId != null && sourceMessageId !== '') {
727
773
  for (const formattedMessage of formattedMessages) {
728
774
  formattedMessage.id = sourceMessageId;
729
775
  }
730
776
  }
731
- messages.push(...formattedMessages);
732
- // Update the index mapping for this assistant message
733
- // Store all indices that were created from this original message
734
- const endMessageIndex = messages.length;
777
+ messages$1.push(...formattedMessages);
778
+ // Capture index range BEFORE skill body injection so injected
779
+ // HumanMessages are excluded from the assistant's token distribution.
780
+ const endMessageIndex = messages$1.length;
781
+ if (pendingSkillNames?.size != null && pendingSkillNames.size > 0) {
782
+ for (const skillName of pendingSkillNames) {
783
+ const body = skills?.get(skillName) ?? '';
784
+ if (body) {
785
+ messages$1.push(new messages.HumanMessage({
786
+ content: body,
787
+ additional_kwargs: {
788
+ role: 'user',
789
+ isMeta: true,
790
+ source: 'skill',
791
+ skillName,
792
+ },
793
+ }));
794
+ }
795
+ }
796
+ }
735
797
  const resultIndices = [];
736
798
  for (let j = startMessageIndex; j < endMessageIndex; j++) {
737
799
  resultIndices.push(j);
@@ -785,7 +847,7 @@ const formatAgentMessages = (payload, indexTokenCountMap, tools) => {
785
847
  const lastIdx = msgCount - 1;
786
848
  const lengths = new Array(msgCount);
787
849
  for (let k = 0; k < msgCount; k++) {
788
- const msg = messages[resultIndices[k]];
850
+ const msg = messages$1[resultIndices[k]];
789
851
  const { content } = msg;
790
852
  let len = 0;
791
853
  if (typeof content === 'string') {
@@ -843,7 +905,7 @@ const formatAgentMessages = (payload, indexTokenCountMap, tools) => {
843
905
  }
844
906
  }
845
907
  return {
846
- messages,
908
+ messages: messages$1,
847
909
  indexTokenCountMap: indexTokenCountMap
848
910
  ? updatedIndexTokenCountMap
849
911
  : undefined,