@librechat/agents 3.3.5 → 3.3.6

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 (127) hide show
  1. package/dist/cjs/hooks/createWorkspacePolicyHook.cjs +1 -1
  2. package/dist/cjs/llm/openai/index.cjs +51 -6
  3. package/dist/cjs/llm/openai/index.cjs.map +1 -1
  4. package/dist/cjs/main.cjs +14 -0
  5. package/dist/cjs/session/JsonlSessionStore.cjs +1 -1
  6. package/dist/cjs/stream.cjs +6 -1
  7. package/dist/cjs/stream.cjs.map +1 -1
  8. package/dist/cjs/tools/BashExecutor.cjs +3 -1
  9. package/dist/cjs/tools/BashExecutor.cjs.map +1 -1
  10. package/dist/cjs/tools/BashProgrammaticToolCalling.cjs +2 -0
  11. package/dist/cjs/tools/BashProgrammaticToolCalling.cjs.map +1 -1
  12. package/dist/cjs/tools/CodeExecutor.cjs +19 -16
  13. package/dist/cjs/tools/CodeExecutor.cjs.map +1 -1
  14. package/dist/cjs/tools/ProgrammaticToolCalling.cjs +2 -0
  15. package/dist/cjs/tools/ProgrammaticToolCalling.cjs.map +1 -1
  16. package/dist/cjs/tools/ReadFile.cjs +8 -4
  17. package/dist/cjs/tools/ReadFile.cjs.map +1 -1
  18. package/dist/cjs/tools/SkillTool.cjs +2 -0
  19. package/dist/cjs/tools/SkillTool.cjs.map +1 -1
  20. package/dist/cjs/tools/SubagentTool.cjs +3 -0
  21. package/dist/cjs/tools/SubagentTool.cjs.map +1 -1
  22. package/dist/cjs/tools/ToolNode.cjs +88 -27
  23. package/dist/cjs/tools/ToolNode.cjs.map +1 -1
  24. package/dist/cjs/tools/ToolSearch.cjs +5 -1
  25. package/dist/cjs/tools/ToolSearch.cjs.map +1 -1
  26. package/dist/cjs/tools/intentArg.cjs +230 -0
  27. package/dist/cjs/tools/intentArg.cjs.map +1 -0
  28. package/dist/cjs/tools/local/CompileCheckTool.cjs +3 -2
  29. package/dist/cjs/tools/local/CompileCheckTool.cjs.map +1 -1
  30. package/dist/cjs/tools/local/LocalCodingTools.cjs +13 -12
  31. package/dist/cjs/tools/local/LocalCodingTools.cjs.map +1 -1
  32. package/dist/cjs/tools/local/LocalExecutionEngine.cjs +2 -2
  33. package/dist/cjs/tools/ptcTimeout.cjs.map +1 -1
  34. package/dist/cjs/tools/search/schema.cjs +2 -0
  35. package/dist/cjs/tools/search/schema.cjs.map +1 -1
  36. package/dist/cjs/tools/search/tool.cjs +31 -1
  37. package/dist/cjs/tools/search/tool.cjs.map +1 -1
  38. package/dist/cjs/tools/subagent/SubagentExecutor.cjs +1 -0
  39. package/dist/cjs/tools/subagent/SubagentExecutor.cjs.map +1 -1
  40. package/dist/cjs/tools/toolOutputReferences.cjs +41 -7
  41. package/dist/cjs/tools/toolOutputReferences.cjs.map +1 -1
  42. package/dist/esm/hooks/createWorkspacePolicyHook.mjs +1 -1
  43. package/dist/esm/llm/openai/index.mjs +51 -6
  44. package/dist/esm/llm/openai/index.mjs.map +1 -1
  45. package/dist/esm/main.mjs +4 -3
  46. package/dist/esm/session/JsonlSessionStore.mjs +1 -1
  47. package/dist/esm/stream.mjs +6 -1
  48. package/dist/esm/stream.mjs.map +1 -1
  49. package/dist/esm/tools/BashExecutor.mjs +3 -1
  50. package/dist/esm/tools/BashExecutor.mjs.map +1 -1
  51. package/dist/esm/tools/BashProgrammaticToolCalling.mjs +2 -0
  52. package/dist/esm/tools/BashProgrammaticToolCalling.mjs.map +1 -1
  53. package/dist/esm/tools/CodeExecutor.mjs +19 -16
  54. package/dist/esm/tools/CodeExecutor.mjs.map +1 -1
  55. package/dist/esm/tools/ProgrammaticToolCalling.mjs +2 -0
  56. package/dist/esm/tools/ProgrammaticToolCalling.mjs.map +1 -1
  57. package/dist/esm/tools/ReadFile.mjs +8 -4
  58. package/dist/esm/tools/ReadFile.mjs.map +1 -1
  59. package/dist/esm/tools/SkillTool.mjs +2 -0
  60. package/dist/esm/tools/SkillTool.mjs.map +1 -1
  61. package/dist/esm/tools/SubagentTool.mjs +3 -0
  62. package/dist/esm/tools/SubagentTool.mjs.map +1 -1
  63. package/dist/esm/tools/ToolNode.mjs +88 -28
  64. package/dist/esm/tools/ToolNode.mjs.map +1 -1
  65. package/dist/esm/tools/ToolSearch.mjs +5 -1
  66. package/dist/esm/tools/ToolSearch.mjs.map +1 -1
  67. package/dist/esm/tools/intentArg.mjs +220 -0
  68. package/dist/esm/tools/intentArg.mjs.map +1 -0
  69. package/dist/esm/tools/local/CompileCheckTool.mjs +3 -2
  70. package/dist/esm/tools/local/CompileCheckTool.mjs.map +1 -1
  71. package/dist/esm/tools/local/LocalCodingTools.mjs +13 -12
  72. package/dist/esm/tools/local/LocalCodingTools.mjs.map +1 -1
  73. package/dist/esm/tools/local/LocalExecutionEngine.mjs +2 -2
  74. package/dist/esm/tools/ptcTimeout.mjs.map +1 -1
  75. package/dist/esm/tools/search/schema.mjs +2 -0
  76. package/dist/esm/tools/search/schema.mjs.map +1 -1
  77. package/dist/esm/tools/search/tool.mjs +31 -2
  78. package/dist/esm/tools/search/tool.mjs.map +1 -1
  79. package/dist/esm/tools/subagent/SubagentExecutor.mjs +1 -0
  80. package/dist/esm/tools/subagent/SubagentExecutor.mjs.map +1 -1
  81. package/dist/esm/tools/toolOutputReferences.mjs +41 -7
  82. package/dist/esm/tools/toolOutputReferences.mjs.map +1 -1
  83. package/dist/types/index.d.ts +1 -0
  84. package/dist/types/llm/openai/index.d.ts +0 -11
  85. package/dist/types/tools/BashExecutor.d.ts +18 -0
  86. package/dist/types/tools/CodeExecutor.d.ts +18 -0
  87. package/dist/types/tools/ReadFile.d.ts +18 -0
  88. package/dist/types/tools/SkillTool.d.ts +18 -0
  89. package/dist/types/tools/SubagentTool.d.ts +9 -0
  90. package/dist/types/tools/ToolNode.d.ts +37 -5
  91. package/dist/types/tools/ToolSearch.d.ts +18 -0
  92. package/dist/types/tools/intentArg.d.ts +119 -0
  93. package/dist/types/tools/ptcTimeout.d.ts +2 -0
  94. package/dist/types/tools/search/schema.d.ts +18 -0
  95. package/dist/types/tools/search/tool.d.ts +18 -0
  96. package/dist/types/tools/toolOutputReferences.d.ts +12 -2
  97. package/dist/types/types/stream.d.ts +12 -0
  98. package/dist/types/types/tools.d.ts +27 -2
  99. package/package.json +1 -1
  100. package/src/index.ts +1 -0
  101. package/src/llm/openai/index.ts +74 -10
  102. package/src/llm/openai/llm.spec.ts +105 -0
  103. package/src/stream.ts +12 -1
  104. package/src/tools/BashExecutor.ts +6 -0
  105. package/src/tools/BashProgrammaticToolCalling.ts +2 -0
  106. package/src/tools/CodeExecutor.ts +6 -0
  107. package/src/tools/ProgrammaticToolCalling.ts +2 -0
  108. package/src/tools/ReadFile.ts +2 -0
  109. package/src/tools/SkillTool.ts +2 -0
  110. package/src/tools/SubagentTool.ts +3 -0
  111. package/src/tools/ToolNode.ts +190 -43
  112. package/src/tools/ToolSearch.ts +3 -0
  113. package/src/tools/__tests__/ToolNode.onResultCompletion.test.ts +174 -0
  114. package/src/tools/__tests__/intentArg.test.ts +281 -0
  115. package/src/tools/__tests__/intentCoverage.test.ts +139 -0
  116. package/src/tools/__tests__/toolOutputReferences.test.ts +83 -0
  117. package/src/tools/intentArg.ts +323 -0
  118. package/src/tools/local/CompileCheckTool.ts +4 -3
  119. package/src/tools/local/LocalCodingTools.ts +14 -13
  120. package/src/tools/ptcTimeout.ts +2 -0
  121. package/src/tools/search/outcome.test.ts +90 -0
  122. package/src/tools/search/schema.ts +3 -0
  123. package/src/tools/search/tool.ts +47 -1
  124. package/src/tools/subagent/SubagentExecutor.ts +2 -1
  125. package/src/tools/toolOutputReferences.ts +77 -9
  126. package/src/types/stream.ts +12 -0
  127. package/src/types/tools.ts +24 -2
@@ -1,8 +1,8 @@
1
1
  require("../common/enum.cjs");
2
2
  require("../common/index.cjs");
3
3
  let path = require("path");
4
- let fs_promises = require("fs/promises");
5
4
  let os = require("os");
5
+ let fs_promises = require("fs/promises");
6
6
  //#region src/hooks/createWorkspacePolicyHook.ts
7
7
  /**
8
8
  * Workspace boundary policy as a `PreToolUse` hook.
@@ -1,6 +1,7 @@
1
1
  const require_cache = require("../../messages/cache.cjs");
2
2
  const require_core = require("../../messages/core.cjs");
3
3
  const require_streamedToolCallSeals = require("../../tools/streamedToolCallSeals.cjs");
4
+ const require_intentArg = require("../../tools/intentArg.cjs");
4
5
  const require_index = require("./utils/index.cjs");
5
6
  const require_streamMetadata = require("./streamMetadata.cjs");
6
7
  let _langchain_openai = require("@langchain/openai");
@@ -439,6 +440,50 @@ function createAbortHandler(controller) {
439
440
  * @param {Object} [fields] Additional fields to add to the OpenAI tool.
440
441
  * @returns {ToolDefinition} The inputted tool in OpenAI tool format.
441
442
  */
443
+ /**
444
+ * OpenAI strict function schemas require every property to appear in
445
+ * `required`. The optional `intent` label (see `tools/intentArg.ts`) is
446
+ * deliberately NOT required — the same schema is callable from programmatic
447
+ * tool calling — so a tool auto-marked `strict: true` (the non-streaming
448
+ * `json_schema` structured-output path) would be rejected as invalid before
449
+ * execution. That path never streams a live label anyway, so the
450
+ * marker-identified property is dropped there; every other path keeps it.
451
+ */
452
+ function stripIntentFromStrictTools(params) {
453
+ const tools = params.tools;
454
+ if (!Array.isArray(tools) || tools.length === 0) return params;
455
+ const nextTools = tools.map((tool) => {
456
+ const candidate = tool;
457
+ /** Chat-completions tools nest under `function`; responses-API tools are flat. */
458
+ const holder = candidate.function ?? candidate;
459
+ if (holder.strict !== true) return tool;
460
+ const parameters = holder.parameters;
461
+ const properties = parameters?.properties;
462
+ if (properties == null || !require_intentArg.isIntentLabelProperty(properties["intent"])) return tool;
463
+ if ((Array.isArray(parameters?.required) ? parameters.required : []).includes("intent")) return tool;
464
+ const { [require_intentArg.INTENT_ARG]: _omit, ...restProps } = properties;
465
+ const nextParams = {
466
+ ...parameters,
467
+ properties: restProps
468
+ };
469
+ if (candidate.function != null) return {
470
+ ...candidate,
471
+ function: {
472
+ ...candidate.function,
473
+ parameters: nextParams
474
+ }
475
+ };
476
+ return {
477
+ ...candidate,
478
+ parameters: nextParams
479
+ };
480
+ });
481
+ if (nextTools.every((tool, index) => tool === tools[index])) return params;
482
+ return {
483
+ ...params,
484
+ tools: nextTools
485
+ };
486
+ }
442
487
  function _convertToOpenAITool(tool, fields) {
443
488
  let toolDef;
444
489
  if ((0, _langchain_core_utils_function_calling.isLangChainTool)(tool)) toolDef = (0, _langchain_core_utils_function_calling.convertToOpenAITool)(tool);
@@ -535,10 +580,10 @@ var LibreChatOpenAICompletions = class extends _langchain_openai.ChatOpenAICompl
535
580
  this.safetyIdentifier = fields?.safety_identifier;
536
581
  }
537
582
  invocationParams(options, extra) {
538
- return applyManagedRequestParams(super.invocationParams(options, extra), {
583
+ return stripIntentFromStrictTools(applyManagedRequestParams(super.invocationParams(options, extra), {
539
584
  promptCacheExplicit: this.promptCacheExplicit,
540
585
  safetyIdentifier: this.safetyIdentifier
541
- });
586
+ }));
542
587
  }
543
588
  _getReasoningParams(options) {
544
589
  return getReasoningParams(this.reasoning, options);
@@ -756,7 +801,7 @@ var LibreChatOpenAIResponses = class extends _langchain_openai.ChatOpenAIRespons
756
801
  ...cacheControl != null && { cache_control: cacheControl }
757
802
  };
758
803
  if (shouldIncludeEncryptedReasoning(this.model, params)) params.include = [...new Set([...params.include ?? [], "reasoning.encrypted_content"])];
759
- return params;
804
+ return stripIntentFromStrictTools(params);
760
805
  }
761
806
  async completionWithRetry(request, requestOptions) {
762
807
  const managedRequest = {
@@ -796,10 +841,10 @@ var LibreChatAzureOpenAICompletions = class extends _langchain_openai.AzureChatO
796
841
  this.safetyIdentifier = fields?.safety_identifier;
797
842
  }
798
843
  invocationParams(options, extra) {
799
- return applyManagedRequestParams(super.invocationParams(options, extra), {
844
+ return stripIntentFromStrictTools(applyManagedRequestParams(super.invocationParams(options, extra), {
800
845
  promptCacheExplicit: this.promptCacheExplicit,
801
846
  safetyIdentifier: this.safetyIdentifier
802
- });
847
+ }));
803
848
  }
804
849
  _getReasoningParams(options) {
805
850
  return getGatedReasoningParams(this.model, this.reasoning, options);
@@ -879,7 +924,7 @@ var LibreChatAzureOpenAIResponses = class extends _langchain_openai.AzureChatOpe
879
924
  safetyIdentifier: this.safetyIdentifier
880
925
  });
881
926
  if (shouldIncludeEncryptedReasoning(this.model, params)) params.include = [...new Set([...params.include ?? [], "reasoning.encrypted_content"])];
882
- return params;
927
+ return stripIntentFromStrictTools(params);
883
928
  }
884
929
  async completionWithRetry(request, requestOptions) {
885
930
  const managedRequest = {