beeai-framework 0.1.21 → 0.1.22

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 (303) hide show
  1. package/dist/adapters/a2a/agents/agent.d.cts +6 -10
  2. package/dist/adapters/a2a/agents/agent.d.ts +6 -10
  3. package/dist/adapters/a2a/agents/events.d.cts +1 -1
  4. package/dist/adapters/a2a/agents/events.d.ts +1 -1
  5. package/dist/adapters/a2a/agents/types.d.cts +2 -2
  6. package/dist/adapters/a2a/agents/types.d.ts +2 -2
  7. package/dist/adapters/a2a/serve/agent_executor.d.cts +3 -3
  8. package/dist/adapters/a2a/serve/agent_executor.d.ts +3 -3
  9. package/dist/adapters/a2a/serve/server.d.cts +2 -2
  10. package/dist/adapters/a2a/serve/server.d.ts +2 -2
  11. package/dist/adapters/acp/agents/agent.d.cts +6 -10
  12. package/dist/adapters/acp/agents/agent.d.ts +6 -10
  13. package/dist/adapters/acp/agents/events.d.cts +1 -1
  14. package/dist/adapters/acp/agents/events.d.ts +1 -1
  15. package/dist/adapters/agentstack/agents/agent.d.cts +8 -6
  16. package/dist/adapters/agentstack/agents/agent.d.ts +8 -6
  17. package/dist/adapters/agentstack/agents/events.d.cts +1 -1
  18. package/dist/adapters/agentstack/agents/events.d.ts +1 -1
  19. package/dist/adapters/amazon-bedrock/backend/chat.d.cts +2 -2
  20. package/dist/adapters/amazon-bedrock/backend/chat.d.ts +2 -2
  21. package/dist/adapters/amazon-bedrock/backend/embedding.d.cts +2 -2
  22. package/dist/adapters/amazon-bedrock/backend/embedding.d.ts +2 -2
  23. package/dist/adapters/anthropic/backend/chat.d.cts +2 -2
  24. package/dist/adapters/anthropic/backend/chat.d.ts +2 -2
  25. package/dist/adapters/anthropic/backend/embedding.d.cts +2 -2
  26. package/dist/adapters/anthropic/backend/embedding.d.ts +2 -2
  27. package/dist/adapters/azure-openai/backend/chat.d.cts +2 -2
  28. package/dist/adapters/azure-openai/backend/chat.d.ts +2 -2
  29. package/dist/adapters/azure-openai/backend/embedding.d.cts +2 -2
  30. package/dist/adapters/azure-openai/backend/embedding.d.ts +2 -2
  31. package/dist/adapters/dummy/backend/chat.d.cts +2 -2
  32. package/dist/adapters/dummy/backend/chat.d.ts +2 -2
  33. package/dist/adapters/dummy/backend/embedding.d.cts +2 -2
  34. package/dist/adapters/dummy/backend/embedding.d.ts +2 -2
  35. package/dist/adapters/google-vertex/backend/chat.d.cts +2 -2
  36. package/dist/adapters/google-vertex/backend/chat.d.ts +2 -2
  37. package/dist/adapters/google-vertex/backend/embedding.d.cts +2 -2
  38. package/dist/adapters/google-vertex/backend/embedding.d.ts +2 -2
  39. package/dist/adapters/groq/backend/chat.d.cts +2 -2
  40. package/dist/adapters/groq/backend/chat.d.ts +2 -2
  41. package/dist/adapters/groq/backend/embedding.d.cts +2 -2
  42. package/dist/adapters/groq/backend/embedding.d.ts +2 -2
  43. package/dist/adapters/langchain/backend/chat.d.cts +2 -2
  44. package/dist/adapters/langchain/backend/chat.d.ts +2 -2
  45. package/dist/adapters/langchain/backend/embedding.d.cts +2 -2
  46. package/dist/adapters/langchain/backend/embedding.d.ts +2 -2
  47. package/dist/adapters/langchain/tools.d.cts +1 -1
  48. package/dist/adapters/langchain/tools.d.ts +1 -1
  49. package/dist/adapters/ollama/backend/chat.d.cts +2 -2
  50. package/dist/adapters/ollama/backend/chat.d.ts +2 -2
  51. package/dist/adapters/ollama/backend/embedding.d.cts +2 -2
  52. package/dist/adapters/ollama/backend/embedding.d.ts +2 -2
  53. package/dist/adapters/openai/backend/chat.d.cts +2 -2
  54. package/dist/adapters/openai/backend/chat.d.ts +2 -2
  55. package/dist/adapters/openai/backend/embedding.d.cts +2 -2
  56. package/dist/adapters/openai/backend/embedding.d.ts +2 -2
  57. package/dist/adapters/vercel/backend/chat.d.cts +2 -2
  58. package/dist/adapters/vercel/backend/chat.d.ts +2 -2
  59. package/dist/adapters/vercel/backend/embedding.d.cts +2 -2
  60. package/dist/adapters/vercel/backend/embedding.d.ts +2 -2
  61. package/dist/adapters/vercel/backend/utils.cjs +15 -0
  62. package/dist/adapters/vercel/backend/utils.cjs.map +1 -1
  63. package/dist/adapters/vercel/backend/utils.d.cts +4 -3
  64. package/dist/adapters/vercel/backend/utils.d.ts +4 -3
  65. package/dist/adapters/vercel/backend/utils.js +15 -1
  66. package/dist/adapters/vercel/backend/utils.js.map +1 -1
  67. package/dist/adapters/watsonx/backend/chat.d.cts +2 -2
  68. package/dist/adapters/watsonx/backend/chat.d.ts +2 -2
  69. package/dist/adapters/watsonx/backend/embedding.d.cts +2 -2
  70. package/dist/adapters/watsonx/backend/embedding.d.ts +2 -2
  71. package/dist/adapters/xai/backend/chat.d.cts +2 -2
  72. package/dist/adapters/xai/backend/chat.d.ts +2 -2
  73. package/dist/{agent-DvvVGvLr.d.cts → agent-BMfyig7X.d.cts} +5 -4
  74. package/dist/{agent-CHebzsQB.d.ts → agent-Dxw8AGWb.d.ts} +5 -4
  75. package/dist/agents/base.cjs +5 -2
  76. package/dist/agents/base.cjs.map +1 -1
  77. package/dist/agents/base.d.cts +2 -2
  78. package/dist/agents/base.d.ts +2 -2
  79. package/dist/agents/base.js +5 -2
  80. package/dist/agents/base.js.map +1 -1
  81. package/dist/agents/experimental/replan/agent.d.cts +3 -3
  82. package/dist/agents/experimental/replan/agent.d.ts +3 -3
  83. package/dist/agents/experimental/replan/prompts.d.cts +1 -1
  84. package/dist/agents/experimental/replan/prompts.d.ts +1 -1
  85. package/dist/agents/experimental/streamlit/agent.d.cts +8 -12
  86. package/dist/agents/experimental/streamlit/agent.d.ts +8 -12
  87. package/dist/agents/react/agent.d.cts +4 -4
  88. package/dist/agents/react/agent.d.ts +4 -4
  89. package/dist/agents/react/prompts.d.cts +1 -1
  90. package/dist/agents/react/prompts.d.ts +1 -1
  91. package/dist/agents/react/runners/base.d.cts +4 -4
  92. package/dist/agents/react/runners/base.d.ts +4 -4
  93. package/dist/agents/react/runners/deep-think/prompts.d.cts +1 -1
  94. package/dist/agents/react/runners/deep-think/prompts.d.ts +1 -1
  95. package/dist/agents/react/runners/deep-think/runner.d.cts +5 -5
  96. package/dist/agents/react/runners/deep-think/runner.d.ts +5 -5
  97. package/dist/agents/react/runners/default/runner.d.cts +5 -5
  98. package/dist/agents/react/runners/default/runner.d.ts +5 -5
  99. package/dist/agents/react/runners/granite/prompts.d.cts +1 -1
  100. package/dist/agents/react/runners/granite/prompts.d.ts +1 -1
  101. package/dist/agents/react/runners/granite/runner.d.cts +5 -5
  102. package/dist/agents/react/runners/granite/runner.d.ts +5 -5
  103. package/dist/agents/react/types.d.cts +2 -2
  104. package/dist/agents/react/types.d.ts +2 -2
  105. package/dist/agents/requirement/agent.cjs +162 -0
  106. package/dist/agents/requirement/agent.cjs.map +1 -0
  107. package/dist/agents/requirement/agent.d.cts +29 -0
  108. package/dist/agents/requirement/agent.d.ts +29 -0
  109. package/dist/agents/requirement/agent.js +160 -0
  110. package/dist/agents/requirement/agent.js.map +1 -0
  111. package/dist/agents/requirement/prompts.cjs +95 -0
  112. package/dist/agents/requirement/prompts.cjs.map +1 -0
  113. package/dist/agents/requirement/prompts.d.cts +107 -0
  114. package/dist/agents/requirement/prompts.d.ts +107 -0
  115. package/dist/agents/requirement/prompts.js +90 -0
  116. package/dist/agents/requirement/prompts.js.map +1 -0
  117. package/dist/agents/requirement/requirements/conditional.cjs +190 -0
  118. package/dist/agents/requirement/requirements/conditional.cjs.map +1 -0
  119. package/dist/agents/requirement/requirements/conditional.d.cts +71 -0
  120. package/dist/agents/requirement/requirements/conditional.d.ts +71 -0
  121. package/dist/agents/requirement/requirements/conditional.js +188 -0
  122. package/dist/agents/requirement/requirements/conditional.js.map +1 -0
  123. package/dist/agents/requirement/requirements/requirement.cjs +107 -0
  124. package/dist/agents/requirement/requirements/requirement.cjs.map +1 -0
  125. package/dist/agents/requirement/requirements/requirement.d.cts +59 -0
  126. package/dist/agents/requirement/requirements/requirement.d.ts +59 -0
  127. package/dist/agents/requirement/requirements/requirement.js +104 -0
  128. package/dist/agents/requirement/requirements/requirement.js.map +1 -0
  129. package/dist/agents/requirement/requirements/utils.cjs +74 -0
  130. package/dist/agents/requirement/requirements/utils.cjs.map +1 -0
  131. package/dist/agents/requirement/requirements/utils.d.cts +40 -0
  132. package/dist/agents/requirement/requirements/utils.d.ts +40 -0
  133. package/dist/agents/requirement/requirements/utils.js +69 -0
  134. package/dist/agents/requirement/requirements/utils.js.map +1 -0
  135. package/dist/agents/requirement/runner.cjs +252 -0
  136. package/dist/agents/requirement/runner.cjs.map +1 -0
  137. package/dist/agents/requirement/runner.d.cts +117 -0
  138. package/dist/agents/requirement/runner.d.ts +117 -0
  139. package/dist/agents/requirement/runner.js +250 -0
  140. package/dist/agents/requirement/runner.js.map +1 -0
  141. package/dist/agents/requirement/types.cjs +40 -0
  142. package/dist/agents/requirement/types.cjs.map +1 -0
  143. package/dist/agents/requirement/types.d.cts +24 -0
  144. package/dist/agents/requirement/types.d.ts +24 -0
  145. package/dist/agents/requirement/types.js +35 -0
  146. package/dist/agents/requirement/types.js.map +1 -0
  147. package/dist/agents/requirement/utils/llm.cjs +202 -0
  148. package/dist/agents/requirement/utils/llm.cjs.map +1 -0
  149. package/dist/agents/requirement/utils/llm.d.cts +50 -0
  150. package/dist/agents/requirement/utils/llm.d.ts +50 -0
  151. package/dist/agents/requirement/utils/llm.js +199 -0
  152. package/dist/agents/requirement/utils/llm.js.map +1 -0
  153. package/dist/agents/requirement/utils/tool.cjs +94 -0
  154. package/dist/agents/requirement/utils/tool.cjs.map +1 -0
  155. package/dist/agents/requirement/utils/tool.d.cts +24 -0
  156. package/dist/agents/requirement/utils/tool.d.ts +24 -0
  157. package/dist/agents/requirement/utils/tool.js +91 -0
  158. package/dist/agents/requirement/utils/tool.js.map +1 -0
  159. package/dist/agents/requirement/utils/toolCallChecker.cjs +61 -0
  160. package/dist/agents/requirement/utils/toolCallChecker.cjs.map +1 -0
  161. package/dist/agents/requirement/utils/toolCallChecker.d.cts +28 -0
  162. package/dist/agents/requirement/utils/toolCallChecker.d.ts +28 -0
  163. package/dist/agents/requirement/utils/toolCallChecker.js +59 -0
  164. package/dist/agents/requirement/utils/toolCallChecker.js.map +1 -0
  165. package/dist/agents/toolCalling/agent.d.cts +8 -12
  166. package/dist/agents/toolCalling/agent.d.ts +8 -12
  167. package/dist/agents/toolCalling/types.d.cts +1 -1
  168. package/dist/agents/toolCalling/types.d.ts +1 -1
  169. package/dist/agents/types.d.cts +2 -2
  170. package/dist/agents/types.d.ts +2 -2
  171. package/dist/backend/backend.d.cts +2 -2
  172. package/dist/backend/backend.d.ts +2 -2
  173. package/dist/backend/chat.d.cts +2 -2
  174. package/dist/backend/chat.d.ts +2 -2
  175. package/dist/backend/core.d.cts +2 -2
  176. package/dist/backend/core.d.ts +2 -2
  177. package/dist/backend/embedding.d.cts +2 -2
  178. package/dist/backend/embedding.d.ts +2 -2
  179. package/dist/backend/utils.d.cts +2 -2
  180. package/dist/backend/utils.d.ts +2 -2
  181. package/dist/{base-BQgDlcGa.d.ts → base-BurRTBA7.d.ts} +4 -2
  182. package/dist/{base-CwcxwybB.d.cts → base-v-PYIq5G.d.cts} +4 -2
  183. package/dist/{chat-C0s-o6ll.d.ts → chat-BbCYMAdE.d.ts} +1 -1
  184. package/dist/{chat-CRb3vUVg.d.cts → chat-DB_cf15S.d.cts} +1 -1
  185. package/dist/context.cjs +22 -5
  186. package/dist/context.cjs.map +1 -1
  187. package/dist/context.d.cts +19 -6
  188. package/dist/context.d.ts +19 -6
  189. package/dist/context.js +23 -7
  190. package/dist/context.js.map +1 -1
  191. package/dist/emitter/emitter.cjs +19 -13
  192. package/dist/emitter/emitter.cjs.map +1 -1
  193. package/dist/emitter/emitter.d.cts +1 -1
  194. package/dist/emitter/emitter.d.ts +1 -1
  195. package/dist/emitter/emitter.js +19 -13
  196. package/dist/emitter/emitter.js.map +1 -1
  197. package/dist/emitter/types.d.cts +1 -1
  198. package/dist/emitter/types.d.ts +1 -1
  199. package/dist/{emitter-DpqUYjXH.d.cts → emitter-CGKd_-kK.d.cts} +3 -2
  200. package/dist/{emitter-CZFbzlUi.d.ts → emitter-CN7I4uSV.d.ts} +3 -2
  201. package/dist/index.d.cts +5 -5
  202. package/dist/index.d.ts +5 -5
  203. package/dist/internals/fetcher.d.cts +1 -1
  204. package/dist/internals/fetcher.d.ts +1 -1
  205. package/dist/internals/helpers/prototype.cjs +5 -0
  206. package/dist/internals/helpers/prototype.cjs.map +1 -1
  207. package/dist/internals/helpers/prototype.d.cts +2 -1
  208. package/dist/internals/helpers/prototype.d.ts +2 -1
  209. package/dist/internals/helpers/prototype.js +5 -1
  210. package/dist/internals/helpers/prototype.js.map +1 -1
  211. package/dist/internals/types.cjs.map +1 -1
  212. package/dist/internals/types.d.cts +1 -1
  213. package/dist/internals/types.d.ts +1 -1
  214. package/dist/internals/types.js.map +1 -1
  215. package/dist/memory/summarizeMemory.d.cts +2 -2
  216. package/dist/memory/summarizeMemory.d.ts +2 -2
  217. package/dist/middleware/trajectory.cjs +322 -0
  218. package/dist/middleware/trajectory.cjs.map +1 -0
  219. package/dist/middleware/trajectory.d.cts +115 -0
  220. package/dist/middleware/trajectory.d.ts +115 -0
  221. package/dist/middleware/trajectory.js +320 -0
  222. package/dist/middleware/trajectory.js.map +1 -0
  223. package/dist/parsers/linePrefix.d.cts +1 -1
  224. package/dist/parsers/linePrefix.d.ts +1 -1
  225. package/dist/serializer/serializer.cjs +5 -4
  226. package/dist/serializer/serializer.cjs.map +1 -1
  227. package/dist/serializer/serializer.d.cts +1 -1
  228. package/dist/serializer/serializer.d.ts +1 -1
  229. package/dist/serializer/serializer.js +5 -4
  230. package/dist/serializer/serializer.js.map +1 -1
  231. package/dist/serializer/utils.cjs +3 -0
  232. package/dist/serializer/utils.cjs.map +1 -1
  233. package/dist/serializer/utils.d.cts +1 -1
  234. package/dist/serializer/utils.d.ts +1 -1
  235. package/dist/serializer/utils.js +3 -0
  236. package/dist/serializer/utils.js.map +1 -1
  237. package/dist/{serializer-CQxucveV.d.ts → serializer-53t8gGQa.d.ts} +3 -2
  238. package/dist/{serializer-BKn50Vnx.d.cts → serializer-c51B2z6d.d.cts} +3 -2
  239. package/dist/template.cjs +20 -0
  240. package/dist/template.cjs.map +1 -1
  241. package/dist/template.d.cts +1 -0
  242. package/dist/template.d.ts +1 -0
  243. package/dist/template.js +20 -0
  244. package/dist/template.js.map +1 -1
  245. package/dist/tools/arxiv.d.cts +1 -1
  246. package/dist/tools/arxiv.d.ts +1 -1
  247. package/dist/tools/base.cjs.map +1 -1
  248. package/dist/tools/base.d.cts +3 -2
  249. package/dist/tools/base.d.ts +3 -2
  250. package/dist/tools/base.js.map +1 -1
  251. package/dist/tools/calculator.d.cts +1 -1
  252. package/dist/tools/calculator.d.ts +1 -1
  253. package/dist/tools/custom.d.cts +2 -2
  254. package/dist/tools/custom.d.ts +2 -2
  255. package/dist/tools/database/elasticsearch.d.cts +1 -1
  256. package/dist/tools/database/elasticsearch.d.ts +1 -1
  257. package/dist/tools/database/milvus.d.cts +1 -1
  258. package/dist/tools/database/milvus.d.ts +1 -1
  259. package/dist/tools/database/qdrant.d.cts +1 -1
  260. package/dist/tools/database/qdrant.d.ts +1 -1
  261. package/dist/tools/database/sql.d.cts +1 -1
  262. package/dist/tools/database/sql.d.ts +1 -1
  263. package/dist/tools/llm.d.cts +2 -2
  264. package/dist/tools/llm.d.ts +2 -2
  265. package/dist/tools/mcp.d.cts +1 -1
  266. package/dist/tools/mcp.d.ts +1 -1
  267. package/dist/tools/openapi.d.cts +1 -1
  268. package/dist/tools/openapi.d.ts +1 -1
  269. package/dist/tools/python/output.d.cts +1 -1
  270. package/dist/tools/python/output.d.ts +1 -1
  271. package/dist/tools/python/python.d.cts +2 -2
  272. package/dist/tools/python/python.d.ts +2 -2
  273. package/dist/tools/search/base.d.cts +1 -1
  274. package/dist/tools/search/base.d.ts +1 -1
  275. package/dist/tools/search/duckDuckGoSearch.d.cts +1 -1
  276. package/dist/tools/search/duckDuckGoSearch.d.ts +1 -1
  277. package/dist/tools/search/googleSearch.d.cts +1 -1
  278. package/dist/tools/search/googleSearch.d.ts +1 -1
  279. package/dist/tools/search/searXNGSearch.d.cts +1 -1
  280. package/dist/tools/search/searXNGSearch.d.ts +1 -1
  281. package/dist/tools/search/wikipedia.d.cts +1 -1
  282. package/dist/tools/search/wikipedia.d.ts +1 -1
  283. package/dist/tools/similarity.d.cts +1 -1
  284. package/dist/tools/similarity.d.ts +1 -1
  285. package/dist/tools/think.cjs +52 -0
  286. package/dist/tools/think.cjs.map +1 -0
  287. package/dist/tools/think.d.cts +47 -0
  288. package/dist/tools/think.d.ts +47 -0
  289. package/dist/tools/think.js +50 -0
  290. package/dist/tools/think.js.map +1 -0
  291. package/dist/tools/weather/openMeteo.d.cts +1 -1
  292. package/dist/tools/weather/openMeteo.d.ts +1 -1
  293. package/dist/tools/web/webCrawler.d.cts +1 -1
  294. package/dist/tools/web/webCrawler.d.ts +1 -1
  295. package/dist/types-BXkkbABd.d.ts +213 -0
  296. package/dist/types-Cx6f43du.d.cts +213 -0
  297. package/dist/version.cjs +1 -1
  298. package/dist/version.js +1 -1
  299. package/dist/workflows/agent.d.cts +3 -3
  300. package/dist/workflows/agent.d.ts +3 -3
  301. package/dist/workflows/workflow.d.cts +1 -1
  302. package/dist/workflows/workflow.d.ts +1 -1
  303. package/package.json +4 -4
@@ -0,0 +1,190 @@
1
+ 'use strict';
2
+
3
+ var requirement_cjs = require('./requirement.cjs');
4
+ var utils_cjs = require('./utils.cjs');
5
+ var errors_cjs = require('../../../errors.cjs');
6
+ var remeda = require('remeda');
7
+
8
+ var __defProp = Object.defineProperty;
9
+ var __name = (target, value) => __defProp(target, "name", { value, configurable: true });
10
+ class ConditionalRequirement extends requirement_cjs.Requirement {
11
+ static {
12
+ __name(this, "ConditionalRequirement");
13
+ }
14
+ source;
15
+ sourceTool;
16
+ before;
17
+ after;
18
+ forceAfterSet;
19
+ minInvocations;
20
+ maxInvocations;
21
+ forceAtStepValue;
22
+ onlySuccessInvocations;
23
+ consecutiveAllowedValue;
24
+ customChecks;
25
+ forcePreventStop;
26
+ reason;
27
+ constructor(target, options = {}) {
28
+ super(options.name || `Condition${utils_cjs.extractTargetName(target)}`);
29
+ this.source = target;
30
+ this.enabled = options.enabled ?? true;
31
+ if (options.priority !== void 0) {
32
+ this.priority = options.priority;
33
+ }
34
+ this.before = utils_cjs.extractTargets(options.onlyBefore);
35
+ this.after = utils_cjs.extractTargets(options.onlyAfter);
36
+ this.forceAfterSet = utils_cjs.extractTargets(options.forceAfter);
37
+ this.minInvocations = options.minInvocations ?? 0;
38
+ this.maxInvocations = options.maxInvocations ?? Infinity;
39
+ this.forceAtStepValue = options.forceAtStep;
40
+ this.onlySuccessInvocations = options.onlySuccessInvocations ?? true;
41
+ this.consecutiveAllowedValue = options.consecutiveAllowed ?? true;
42
+ this.customChecks = options.customChecks ?? [];
43
+ this.forcePreventStop = options.forcePreventStop ?? true;
44
+ this.reason = options.reason;
45
+ this.checkInvariant();
46
+ }
47
+ checkInvariant() {
48
+ if (this.minInvocations < 0) {
49
+ throw new errors_cjs.ValueError("The 'minInvocations' argument must be non negative!");
50
+ }
51
+ if (this.maxInvocations < 0) {
52
+ throw new errors_cjs.ValueError("The 'maxInvocations' argument must be non negative!");
53
+ }
54
+ if (this.minInvocations > this.maxInvocations) {
55
+ throw new errors_cjs.ValueError("The 'minInvocations' argument must be less than or equal to 'maxInvocations'!");
56
+ }
57
+ const sourceName = utils_cjs.extractTargetName(this.source);
58
+ if (this.before.has(this.source)) {
59
+ throw new errors_cjs.ValueError(`Referencing self in 'before' is not allowed (${sourceName})!`);
60
+ }
61
+ if (this.forceAfterSet.has(this.source)) {
62
+ throw new errors_cjs.ValueError(`Referencing self in 'forceAfter' is not allowed (${sourceName})!`);
63
+ }
64
+ const beforeAfterIntersection = new Set([
65
+ ...this.before
66
+ ].filter((x) => this.after.has(x)));
67
+ if (beforeAfterIntersection.size > 0) {
68
+ throw new errors_cjs.ValueError(`Tool specified as 'before' and 'after' at the same time: ${Array.from(beforeAfterIntersection).join(", ")}!`);
69
+ }
70
+ const beforeForceAfterIntersection = new Set([
71
+ ...this.before
72
+ ].filter((x) => this.forceAfterSet.has(x)));
73
+ if (beforeForceAfterIntersection.size > 0) {
74
+ throw new errors_cjs.ValueError(`Tool specified as 'before' and 'forceAfter' at the same time: ${Array.from(beforeForceAfterIntersection).join(", ")}!`);
75
+ }
76
+ if (this.forceAtStepValue !== void 0 && this.forceAtStepValue < 1) {
77
+ throw new errors_cjs.ValueError("The 'forceAtStep' argument must be >= 1!");
78
+ }
79
+ }
80
+ async init(tools, ctx) {
81
+ await super.init(tools, ctx);
82
+ const allTargets = /* @__PURE__ */ new Set([
83
+ ...this.before,
84
+ ...this.after,
85
+ ...this.forceAfterSet,
86
+ this.source
87
+ ]);
88
+ utils_cjs.assertAllRulesFound(allTargets, tools);
89
+ for (const tool of tools) {
90
+ if (utils_cjs.targetSeenIn(tool, this.source)) {
91
+ if (this.sourceTool && this.sourceTool !== tool) {
92
+ throw new errors_cjs.ValueError(`More than one occurrence of ${utils_cjs.extractTargetName(this.source)} has been found!`);
93
+ }
94
+ this.sourceTool = tool;
95
+ }
96
+ }
97
+ if (!this.sourceTool) {
98
+ throw new errors_cjs.ValueError(`Source tool ${utils_cjs.extractTargetName(this.source)} was not found!`);
99
+ }
100
+ if (utils_cjs.targetSeenIn(this.sourceTool, this.before)) {
101
+ throw new errors_cjs.ValueError(`Referencing self in 'before' is not allowed: ${this.sourceTool.name}!`);
102
+ }
103
+ if (this.consecutiveAllowedValue && utils_cjs.targetSeenIn(this.sourceTool, this.forceAfterSet)) {
104
+ throw new errors_cjs.ValueError(`Referencing self in 'forceAfter' is not allowed: ${this.sourceTool.name}. It would prevent an infinite loop. Consider setting 'consecutiveAllowed' to false.`);
105
+ }
106
+ }
107
+ reset() {
108
+ this.before.clear();
109
+ this.after.clear();
110
+ this.forceAfterSet.clear();
111
+ return this;
112
+ }
113
+ async _run(state, _) {
114
+ const sourceTool = this.sourceTool;
115
+ if (!sourceTool) {
116
+ throw new requirement_cjs.RequirementError("Source was not found!", this);
117
+ }
118
+ const steps = this.onlySuccessInvocations ? state.steps.filter((step) => !step.error) : state.steps;
119
+ const lastStepTool = steps.at(-1)?.tool;
120
+ const invocations = steps.filter((step) => step.tool === sourceTool).length;
121
+ const resolve = /* @__PURE__ */ __name((allowed) => {
122
+ const currentStep = steps.length + 1;
123
+ if (!allowed && this.forceAtStepValue === currentStep) {
124
+ throw new requirement_cjs.RequirementError(`Tool '${sourceTool.name}' cannot be executed at step ${this.forceAtStepValue} because it has not met all requirements.`, this);
125
+ }
126
+ const forced = allowed ? Boolean(utils_cjs.targetSeenIn(lastStepTool, this.forceAfterSet) || this.forceAtStepValue === currentStep) : false;
127
+ return [
128
+ {
129
+ target: sourceTool.name,
130
+ allowed,
131
+ forced,
132
+ hidden: false,
133
+ preventStop: this.minInvocations > invocations || forced && this.forcePreventStop,
134
+ reason: !allowed ? this.reason : void 0
135
+ }
136
+ ];
137
+ }, "resolve");
138
+ if (!this.consecutiveAllowedValue && sourceTool === lastStepTool) {
139
+ return resolve(false);
140
+ }
141
+ if (invocations >= this.maxInvocations) {
142
+ return resolve(false);
143
+ }
144
+ if (this.after.size > 0) {
145
+ const stepsAsToolCalls = steps.map((step) => step.tool).filter(remeda.isTruthy);
146
+ const afterToolsRemaining = new Set(this.after);
147
+ for (const stepTool of stepsAsToolCalls) {
148
+ if (utils_cjs.targetSeenIn(stepTool, this.forceAfterSet)) {
149
+ return resolve(false);
150
+ }
151
+ const matcher = utils_cjs.targetSeenIn(stepTool, this.after);
152
+ if (matcher) {
153
+ afterToolsRemaining.delete(matcher);
154
+ }
155
+ }
156
+ if (afterToolsRemaining.size > 0) {
157
+ return resolve(false);
158
+ }
159
+ }
160
+ for (const check of this.customChecks) {
161
+ if (!check(state)) {
162
+ return resolve(false);
163
+ }
164
+ }
165
+ return resolve(true);
166
+ }
167
+ async clone() {
168
+ const instance = await super.clone();
169
+ instance.before = new Set(this.before);
170
+ instance.after = new Set(this.after);
171
+ instance.forceAfterSet = new Set(this.forceAfterSet);
172
+ instance.minInvocations = this.minInvocations;
173
+ instance.maxInvocations = this.maxInvocations;
174
+ instance.customChecks = [
175
+ ...this.customChecks
176
+ ];
177
+ instance.onlySuccessInvocations = this.onlySuccessInvocations;
178
+ instance.forceAtStepValue = this.forceAtStepValue;
179
+ instance.consecutiveAllowedValue = this.consecutiveAllowedValue;
180
+ instance.source = this.source;
181
+ instance.sourceTool = this.sourceTool;
182
+ instance.forcePreventStop = this.forcePreventStop;
183
+ instance.reason = this.reason;
184
+ return instance;
185
+ }
186
+ }
187
+
188
+ exports.ConditionalRequirement = ConditionalRequirement;
189
+ //# sourceMappingURL=conditional.cjs.map
190
+ //# sourceMappingURL=conditional.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../../src/agents/requirement/requirements/conditional.ts"],"names":["ConditionalRequirement","Requirement","source","sourceTool","before","after","forceAfterSet","minInvocations","maxInvocations","forceAtStepValue","onlySuccessInvocations","consecutiveAllowedValue","customChecks","forcePreventStop","reason","target","options","name","extractTargetName","enabled","priority","undefined","extractTargets","onlyBefore","onlyAfter","forceAfter","Infinity","forceAtStep","consecutiveAllowed","checkInvariant","ValueError","sourceName","has","beforeAfterIntersection","Set","filter","x","size","Array","from","join","beforeForceAfterIntersection","init","tools","ctx","allTargets","assertAllRulesFound","tool","targetSeenIn","reset","clear","_run","state","_","RequirementError","steps","step","error","lastStepTool","at","invocations","length","resolve","allowed","currentStep","forced","Boolean","hidden","preventStop","stepsAsToolCalls","map","isTruthy","afterToolsRemaining","stepTool","matcher","delete","check","clone","instance"],"mappings":"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","file":"conditional.cjs","sourcesContent":["/**\n * Copyright 2025 © BeeAI a Series of LF Projects, LLC\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport { Requirement, RequirementError, Rule } from \"./requirement.js\";\nimport {\n TargetType,\n MultiTargetType,\n extractTargets,\n extractTargetName,\n targetSeenIn,\n assertAllRulesFound,\n} from \"./utils.js\";\nimport { AnyTool } from \"@/tools/base.js\";\nimport { RunContext } from \"@/context.js\";\nimport { ValueError } from \"@/errors.js\";\nimport type { RequirementAgentRunState } from \"@/agents/requirement/types.js\";\nimport { isTruthy } from \"remeda\";\n\nexport interface ConditionalRequirementOptions {\n name?: string;\n forceAtStep?: number;\n onlyBefore?: MultiTargetType;\n onlyAfter?: MultiTargetType;\n forceAfter?: MultiTargetType;\n forcePreventStop?: boolean;\n minInvocations?: number;\n maxInvocations?: number;\n onlySuccessInvocations?: boolean;\n consecutiveAllowed?: boolean;\n priority?: number;\n customChecks?: ((state: RequirementAgentRunState) => boolean)[];\n enabled?: boolean;\n reason?: string;\n}\n\nexport class ConditionalRequirement extends Requirement {\n protected source: TargetType;\n protected sourceTool?: AnyTool;\n protected before: Set<TargetType>;\n protected after: Set<TargetType>;\n protected forceAfterSet: Set<TargetType>;\n protected minInvocations: number;\n protected maxInvocations: number;\n protected forceAtStepValue?: number;\n protected onlySuccessInvocations: boolean;\n protected consecutiveAllowedValue: boolean;\n protected customChecks: ((state: RequirementAgentRunState) => boolean)[];\n protected forcePreventStop: boolean;\n protected reason?: string;\n\n constructor(target: TargetType, options: ConditionalRequirementOptions = {}) {\n super(options.name || `Condition${extractTargetName(target)}`);\n\n this.source = target;\n this.enabled = options.enabled ?? true;\n\n if (options.priority !== undefined) {\n this.priority = options.priority;\n }\n\n this.before = extractTargets(options.onlyBefore);\n this.after = extractTargets(options.onlyAfter);\n this.forceAfterSet = extractTargets(options.forceAfter);\n this.minInvocations = options.minInvocations ?? 0;\n this.maxInvocations = options.maxInvocations ?? Infinity;\n this.forceAtStepValue = options.forceAtStep;\n this.onlySuccessInvocations = options.onlySuccessInvocations ?? true;\n this.consecutiveAllowedValue = options.consecutiveAllowed ?? true;\n this.customChecks = options.customChecks ?? [];\n this.forcePreventStop = options.forcePreventStop ?? true;\n this.reason = options.reason;\n\n this.checkInvariant();\n }\n\n protected checkInvariant(): void {\n if (this.minInvocations < 0) {\n throw new ValueError(\"The 'minInvocations' argument must be non negative!\");\n }\n\n if (this.maxInvocations < 0) {\n throw new ValueError(\"The 'maxInvocations' argument must be non negative!\");\n }\n\n if (this.minInvocations > this.maxInvocations) {\n throw new ValueError(\n \"The 'minInvocations' argument must be less than or equal to 'maxInvocations'!\",\n );\n }\n\n const sourceName = extractTargetName(this.source);\n if (this.before.has(this.source)) {\n throw new ValueError(`Referencing self in 'before' is not allowed (${sourceName})!`);\n }\n\n if (this.forceAfterSet.has(this.source)) {\n throw new ValueError(`Referencing self in 'forceAfter' is not allowed (${sourceName})!`);\n }\n\n const beforeAfterIntersection = new Set([...this.before].filter((x) => this.after.has(x)));\n if (beforeAfterIntersection.size > 0) {\n throw new ValueError(\n `Tool specified as 'before' and 'after' at the same time: ${Array.from(beforeAfterIntersection).join(\", \")}!`,\n );\n }\n\n const beforeForceAfterIntersection = new Set(\n [...this.before].filter((x) => this.forceAfterSet.has(x)),\n );\n if (beforeForceAfterIntersection.size > 0) {\n throw new ValueError(\n `Tool specified as 'before' and 'forceAfter' at the same time: ${Array.from(beforeForceAfterIntersection).join(\", \")}!`,\n );\n }\n\n if (this.forceAtStepValue !== undefined && this.forceAtStepValue < 1) {\n throw new ValueError(\"The 'forceAtStep' argument must be >= 1!\");\n }\n }\n\n async init(tools: AnyTool[], ctx: RunContext<any>): Promise<void> {\n await super.init(tools, ctx);\n\n const allTargets = new Set([...this.before, ...this.after, ...this.forceAfterSet, this.source]);\n assertAllRulesFound(allTargets, tools);\n\n for (const tool of tools) {\n if (targetSeenIn(tool, this.source)) {\n if (this.sourceTool && this.sourceTool !== tool) {\n throw new ValueError(\n `More than one occurrence of ${extractTargetName(this.source)} has been found!`,\n );\n }\n this.sourceTool = tool;\n }\n }\n\n if (!this.sourceTool) {\n throw new ValueError(`Source tool ${extractTargetName(this.source)} was not found!`);\n }\n\n if (targetSeenIn(this.sourceTool, this.before)) {\n throw new ValueError(`Referencing self in 'before' is not allowed: ${this.sourceTool.name}!`);\n }\n\n if (this.consecutiveAllowedValue && targetSeenIn(this.sourceTool, this.forceAfterSet)) {\n throw new ValueError(\n `Referencing self in 'forceAfter' is not allowed: ${this.sourceTool.name}. ` +\n `It would prevent an infinite loop. Consider setting 'consecutiveAllowed' to false.`,\n );\n }\n }\n\n reset(): this {\n this.before.clear();\n this.after.clear();\n this.forceAfterSet.clear();\n return this;\n }\n\n async _run(state: RequirementAgentRunState, _: RunContext<typeof this>): Promise<Rule[]> {\n const sourceTool = this.sourceTool;\n if (!sourceTool) {\n throw new RequirementError(\"Source was not found!\", this);\n }\n\n // Get steps from state (assuming state has steps property)\n const steps = this.onlySuccessInvocations\n ? state.steps.filter((step) => !step.error)\n : state.steps;\n\n const lastStepTool = steps.at(-1)?.tool;\n\n const invocations = steps.filter((step) => step.tool === sourceTool).length;\n\n const resolve = (allowed: boolean): Rule[] => {\n const currentStep = steps.length + 1;\n if (!allowed && this.forceAtStepValue === currentStep) {\n throw new RequirementError(\n `Tool '${sourceTool.name}' cannot be executed at step ${this.forceAtStepValue} ` +\n `because it has not met all requirements.`,\n this,\n );\n }\n\n const forced = allowed\n ? Boolean(\n targetSeenIn(lastStepTool, this.forceAfterSet) || this.forceAtStepValue === currentStep,\n )\n : false;\n\n return [\n {\n target: sourceTool.name,\n allowed,\n forced,\n hidden: false,\n preventStop: this.minInvocations > invocations || (forced && this.forcePreventStop),\n reason: !allowed ? this.reason : undefined,\n },\n ];\n };\n\n // Check consecutive constraint\n if (!this.consecutiveAllowedValue && sourceTool === lastStepTool) {\n return resolve(false);\n }\n\n // Check max invocations\n if (invocations >= this.maxInvocations) {\n return resolve(false);\n }\n\n // Check after/before constraints\n if (this.after.size > 0) {\n const stepsAsToolCalls = steps.map((step) => step.tool).filter(isTruthy);\n const afterToolsRemaining = new Set(this.after);\n\n for (const stepTool of stepsAsToolCalls) {\n if (targetSeenIn(stepTool, this.forceAfterSet)) {\n return resolve(false);\n }\n\n const matcher = targetSeenIn(stepTool as any, this.after);\n if (matcher) {\n afterToolsRemaining.delete(matcher);\n }\n }\n\n if (afterToolsRemaining.size > 0) {\n return resolve(false);\n }\n }\n\n // Check custom checks\n for (const check of this.customChecks) {\n if (!check(state)) {\n return resolve(false);\n }\n }\n\n return resolve(true);\n }\n\n async clone(): Promise<this> {\n const instance = await super.clone();\n instance.before = new Set(this.before);\n instance.after = new Set(this.after);\n instance.forceAfterSet = new Set(this.forceAfterSet);\n instance.minInvocations = this.minInvocations;\n instance.maxInvocations = this.maxInvocations;\n instance.customChecks = [...this.customChecks];\n instance.onlySuccessInvocations = this.onlySuccessInvocations;\n instance.forceAtStepValue = this.forceAtStepValue;\n instance.consecutiveAllowedValue = this.consecutiveAllowedValue;\n instance.source = this.source;\n instance.sourceTool = this.sourceTool;\n instance.forcePreventStop = this.forcePreventStop;\n instance.reason = this.reason;\n return instance;\n }\n}\n"]}
@@ -0,0 +1,71 @@
1
+ import { Requirement, Rule } from './requirement.cjs';
2
+ import { MultiTargetType, TargetType } from './utils.cjs';
3
+ import { AnyTool } from '../../../tools/base.cjs';
4
+ import { RunContext } from '../../../context.cjs';
5
+ import { R as RequirementAgentRunState } from '../../../types-Cx6f43du.cjs';
6
+ import '../../../emitter-CGKd_-kK.cjs';
7
+ import '../../../internals/types.cjs';
8
+ import '../../../internals/helpers/guards.cjs';
9
+ import '../../../internals/serializable.cjs';
10
+ import '../../../errors.cjs';
11
+ import '../../../internals/helpers/promise.cjs';
12
+ import 'ajv';
13
+ import 'promise-based-task';
14
+ import '../../../cache/base.cjs';
15
+ import '../../../internals/helpers/schema.cjs';
16
+ import 'zod';
17
+ import 'zod-to-json-schema';
18
+ import '../../../memory/base.cjs';
19
+ import '../../../backend/message.cjs';
20
+ import 'ai';
21
+ import '../../../template.cjs';
22
+ import '../../../chat-DB_cf15S.cjs';
23
+ import '../../../backend/constants.cjs';
24
+ import '../../../logger/logger.cjs';
25
+ import 'pino';
26
+ import '../../../base-v-PYIq5G.cjs';
27
+
28
+ /**
29
+ * Copyright 2025 © BeeAI a Series of LF Projects, LLC
30
+ * SPDX-License-Identifier: Apache-2.0
31
+ */
32
+
33
+ interface ConditionalRequirementOptions {
34
+ name?: string;
35
+ forceAtStep?: number;
36
+ onlyBefore?: MultiTargetType;
37
+ onlyAfter?: MultiTargetType;
38
+ forceAfter?: MultiTargetType;
39
+ forcePreventStop?: boolean;
40
+ minInvocations?: number;
41
+ maxInvocations?: number;
42
+ onlySuccessInvocations?: boolean;
43
+ consecutiveAllowed?: boolean;
44
+ priority?: number;
45
+ customChecks?: ((state: RequirementAgentRunState) => boolean)[];
46
+ enabled?: boolean;
47
+ reason?: string;
48
+ }
49
+ declare class ConditionalRequirement extends Requirement {
50
+ protected source: TargetType;
51
+ protected sourceTool?: AnyTool;
52
+ protected before: Set<TargetType>;
53
+ protected after: Set<TargetType>;
54
+ protected forceAfterSet: Set<TargetType>;
55
+ protected minInvocations: number;
56
+ protected maxInvocations: number;
57
+ protected forceAtStepValue?: number;
58
+ protected onlySuccessInvocations: boolean;
59
+ protected consecutiveAllowedValue: boolean;
60
+ protected customChecks: ((state: RequirementAgentRunState) => boolean)[];
61
+ protected forcePreventStop: boolean;
62
+ protected reason?: string;
63
+ constructor(target: TargetType, options?: ConditionalRequirementOptions);
64
+ protected checkInvariant(): void;
65
+ init(tools: AnyTool[], ctx: RunContext<any>): Promise<void>;
66
+ reset(): this;
67
+ _run(state: RequirementAgentRunState, _: RunContext<typeof this>): Promise<Rule[]>;
68
+ clone(): Promise<this>;
69
+ }
70
+
71
+ export { ConditionalRequirement, type ConditionalRequirementOptions };
@@ -0,0 +1,71 @@
1
+ import { Requirement, Rule } from './requirement.js';
2
+ import { MultiTargetType, TargetType } from './utils.js';
3
+ import { AnyTool } from '../../../tools/base.js';
4
+ import { RunContext } from '../../../context.js';
5
+ import { R as RequirementAgentRunState } from '../../../types-BXkkbABd.js';
6
+ import '../../../emitter-CN7I4uSV.js';
7
+ import '../../../internals/types.js';
8
+ import '../../../internals/helpers/guards.js';
9
+ import '../../../internals/serializable.js';
10
+ import '../../../errors.js';
11
+ import '../../../internals/helpers/promise.js';
12
+ import 'ajv';
13
+ import 'promise-based-task';
14
+ import '../../../cache/base.js';
15
+ import '../../../internals/helpers/schema.js';
16
+ import 'zod';
17
+ import 'zod-to-json-schema';
18
+ import '../../../memory/base.js';
19
+ import '../../../backend/message.js';
20
+ import 'ai';
21
+ import '../../../template.js';
22
+ import '../../../chat-BbCYMAdE.js';
23
+ import '../../../backend/constants.js';
24
+ import '../../../logger/logger.js';
25
+ import 'pino';
26
+ import '../../../base-BurRTBA7.js';
27
+
28
+ /**
29
+ * Copyright 2025 © BeeAI a Series of LF Projects, LLC
30
+ * SPDX-License-Identifier: Apache-2.0
31
+ */
32
+
33
+ interface ConditionalRequirementOptions {
34
+ name?: string;
35
+ forceAtStep?: number;
36
+ onlyBefore?: MultiTargetType;
37
+ onlyAfter?: MultiTargetType;
38
+ forceAfter?: MultiTargetType;
39
+ forcePreventStop?: boolean;
40
+ minInvocations?: number;
41
+ maxInvocations?: number;
42
+ onlySuccessInvocations?: boolean;
43
+ consecutiveAllowed?: boolean;
44
+ priority?: number;
45
+ customChecks?: ((state: RequirementAgentRunState) => boolean)[];
46
+ enabled?: boolean;
47
+ reason?: string;
48
+ }
49
+ declare class ConditionalRequirement extends Requirement {
50
+ protected source: TargetType;
51
+ protected sourceTool?: AnyTool;
52
+ protected before: Set<TargetType>;
53
+ protected after: Set<TargetType>;
54
+ protected forceAfterSet: Set<TargetType>;
55
+ protected minInvocations: number;
56
+ protected maxInvocations: number;
57
+ protected forceAtStepValue?: number;
58
+ protected onlySuccessInvocations: boolean;
59
+ protected consecutiveAllowedValue: boolean;
60
+ protected customChecks: ((state: RequirementAgentRunState) => boolean)[];
61
+ protected forcePreventStop: boolean;
62
+ protected reason?: string;
63
+ constructor(target: TargetType, options?: ConditionalRequirementOptions);
64
+ protected checkInvariant(): void;
65
+ init(tools: AnyTool[], ctx: RunContext<any>): Promise<void>;
66
+ reset(): this;
67
+ _run(state: RequirementAgentRunState, _: RunContext<typeof this>): Promise<Rule[]>;
68
+ clone(): Promise<this>;
69
+ }
70
+
71
+ export { ConditionalRequirement, type ConditionalRequirementOptions };
@@ -0,0 +1,188 @@
1
+ import { Requirement, RequirementError } from './requirement.js';
2
+ import { extractTargetName, extractTargets, assertAllRulesFound, targetSeenIn } from './utils.js';
3
+ import { ValueError } from '../../../errors.js';
4
+ import { isTruthy } from 'remeda';
5
+
6
+ var __defProp = Object.defineProperty;
7
+ var __name = (target, value) => __defProp(target, "name", { value, configurable: true });
8
+ class ConditionalRequirement extends Requirement {
9
+ static {
10
+ __name(this, "ConditionalRequirement");
11
+ }
12
+ source;
13
+ sourceTool;
14
+ before;
15
+ after;
16
+ forceAfterSet;
17
+ minInvocations;
18
+ maxInvocations;
19
+ forceAtStepValue;
20
+ onlySuccessInvocations;
21
+ consecutiveAllowedValue;
22
+ customChecks;
23
+ forcePreventStop;
24
+ reason;
25
+ constructor(target, options = {}) {
26
+ super(options.name || `Condition${extractTargetName(target)}`);
27
+ this.source = target;
28
+ this.enabled = options.enabled ?? true;
29
+ if (options.priority !== void 0) {
30
+ this.priority = options.priority;
31
+ }
32
+ this.before = extractTargets(options.onlyBefore);
33
+ this.after = extractTargets(options.onlyAfter);
34
+ this.forceAfterSet = extractTargets(options.forceAfter);
35
+ this.minInvocations = options.minInvocations ?? 0;
36
+ this.maxInvocations = options.maxInvocations ?? Infinity;
37
+ this.forceAtStepValue = options.forceAtStep;
38
+ this.onlySuccessInvocations = options.onlySuccessInvocations ?? true;
39
+ this.consecutiveAllowedValue = options.consecutiveAllowed ?? true;
40
+ this.customChecks = options.customChecks ?? [];
41
+ this.forcePreventStop = options.forcePreventStop ?? true;
42
+ this.reason = options.reason;
43
+ this.checkInvariant();
44
+ }
45
+ checkInvariant() {
46
+ if (this.minInvocations < 0) {
47
+ throw new ValueError("The 'minInvocations' argument must be non negative!");
48
+ }
49
+ if (this.maxInvocations < 0) {
50
+ throw new ValueError("The 'maxInvocations' argument must be non negative!");
51
+ }
52
+ if (this.minInvocations > this.maxInvocations) {
53
+ throw new ValueError("The 'minInvocations' argument must be less than or equal to 'maxInvocations'!");
54
+ }
55
+ const sourceName = extractTargetName(this.source);
56
+ if (this.before.has(this.source)) {
57
+ throw new ValueError(`Referencing self in 'before' is not allowed (${sourceName})!`);
58
+ }
59
+ if (this.forceAfterSet.has(this.source)) {
60
+ throw new ValueError(`Referencing self in 'forceAfter' is not allowed (${sourceName})!`);
61
+ }
62
+ const beforeAfterIntersection = new Set([
63
+ ...this.before
64
+ ].filter((x) => this.after.has(x)));
65
+ if (beforeAfterIntersection.size > 0) {
66
+ throw new ValueError(`Tool specified as 'before' and 'after' at the same time: ${Array.from(beforeAfterIntersection).join(", ")}!`);
67
+ }
68
+ const beforeForceAfterIntersection = new Set([
69
+ ...this.before
70
+ ].filter((x) => this.forceAfterSet.has(x)));
71
+ if (beforeForceAfterIntersection.size > 0) {
72
+ throw new ValueError(`Tool specified as 'before' and 'forceAfter' at the same time: ${Array.from(beforeForceAfterIntersection).join(", ")}!`);
73
+ }
74
+ if (this.forceAtStepValue !== void 0 && this.forceAtStepValue < 1) {
75
+ throw new ValueError("The 'forceAtStep' argument must be >= 1!");
76
+ }
77
+ }
78
+ async init(tools, ctx) {
79
+ await super.init(tools, ctx);
80
+ const allTargets = /* @__PURE__ */ new Set([
81
+ ...this.before,
82
+ ...this.after,
83
+ ...this.forceAfterSet,
84
+ this.source
85
+ ]);
86
+ assertAllRulesFound(allTargets, tools);
87
+ for (const tool of tools) {
88
+ if (targetSeenIn(tool, this.source)) {
89
+ if (this.sourceTool && this.sourceTool !== tool) {
90
+ throw new ValueError(`More than one occurrence of ${extractTargetName(this.source)} has been found!`);
91
+ }
92
+ this.sourceTool = tool;
93
+ }
94
+ }
95
+ if (!this.sourceTool) {
96
+ throw new ValueError(`Source tool ${extractTargetName(this.source)} was not found!`);
97
+ }
98
+ if (targetSeenIn(this.sourceTool, this.before)) {
99
+ throw new ValueError(`Referencing self in 'before' is not allowed: ${this.sourceTool.name}!`);
100
+ }
101
+ if (this.consecutiveAllowedValue && targetSeenIn(this.sourceTool, this.forceAfterSet)) {
102
+ throw new ValueError(`Referencing self in 'forceAfter' is not allowed: ${this.sourceTool.name}. It would prevent an infinite loop. Consider setting 'consecutiveAllowed' to false.`);
103
+ }
104
+ }
105
+ reset() {
106
+ this.before.clear();
107
+ this.after.clear();
108
+ this.forceAfterSet.clear();
109
+ return this;
110
+ }
111
+ async _run(state, _) {
112
+ const sourceTool = this.sourceTool;
113
+ if (!sourceTool) {
114
+ throw new RequirementError("Source was not found!", this);
115
+ }
116
+ const steps = this.onlySuccessInvocations ? state.steps.filter((step) => !step.error) : state.steps;
117
+ const lastStepTool = steps.at(-1)?.tool;
118
+ const invocations = steps.filter((step) => step.tool === sourceTool).length;
119
+ const resolve = /* @__PURE__ */ __name((allowed) => {
120
+ const currentStep = steps.length + 1;
121
+ if (!allowed && this.forceAtStepValue === currentStep) {
122
+ throw new RequirementError(`Tool '${sourceTool.name}' cannot be executed at step ${this.forceAtStepValue} because it has not met all requirements.`, this);
123
+ }
124
+ const forced = allowed ? Boolean(targetSeenIn(lastStepTool, this.forceAfterSet) || this.forceAtStepValue === currentStep) : false;
125
+ return [
126
+ {
127
+ target: sourceTool.name,
128
+ allowed,
129
+ forced,
130
+ hidden: false,
131
+ preventStop: this.minInvocations > invocations || forced && this.forcePreventStop,
132
+ reason: !allowed ? this.reason : void 0
133
+ }
134
+ ];
135
+ }, "resolve");
136
+ if (!this.consecutiveAllowedValue && sourceTool === lastStepTool) {
137
+ return resolve(false);
138
+ }
139
+ if (invocations >= this.maxInvocations) {
140
+ return resolve(false);
141
+ }
142
+ if (this.after.size > 0) {
143
+ const stepsAsToolCalls = steps.map((step) => step.tool).filter(isTruthy);
144
+ const afterToolsRemaining = new Set(this.after);
145
+ for (const stepTool of stepsAsToolCalls) {
146
+ if (targetSeenIn(stepTool, this.forceAfterSet)) {
147
+ return resolve(false);
148
+ }
149
+ const matcher = targetSeenIn(stepTool, this.after);
150
+ if (matcher) {
151
+ afterToolsRemaining.delete(matcher);
152
+ }
153
+ }
154
+ if (afterToolsRemaining.size > 0) {
155
+ return resolve(false);
156
+ }
157
+ }
158
+ for (const check of this.customChecks) {
159
+ if (!check(state)) {
160
+ return resolve(false);
161
+ }
162
+ }
163
+ return resolve(true);
164
+ }
165
+ async clone() {
166
+ const instance = await super.clone();
167
+ instance.before = new Set(this.before);
168
+ instance.after = new Set(this.after);
169
+ instance.forceAfterSet = new Set(this.forceAfterSet);
170
+ instance.minInvocations = this.minInvocations;
171
+ instance.maxInvocations = this.maxInvocations;
172
+ instance.customChecks = [
173
+ ...this.customChecks
174
+ ];
175
+ instance.onlySuccessInvocations = this.onlySuccessInvocations;
176
+ instance.forceAtStepValue = this.forceAtStepValue;
177
+ instance.consecutiveAllowedValue = this.consecutiveAllowedValue;
178
+ instance.source = this.source;
179
+ instance.sourceTool = this.sourceTool;
180
+ instance.forcePreventStop = this.forcePreventStop;
181
+ instance.reason = this.reason;
182
+ return instance;
183
+ }
184
+ }
185
+
186
+ export { ConditionalRequirement };
187
+ //# sourceMappingURL=conditional.js.map
188
+ //# sourceMappingURL=conditional.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../../src/agents/requirement/requirements/conditional.ts"],"names":["ConditionalRequirement","Requirement","source","sourceTool","before","after","forceAfterSet","minInvocations","maxInvocations","forceAtStepValue","onlySuccessInvocations","consecutiveAllowedValue","customChecks","forcePreventStop","reason","target","options","name","extractTargetName","enabled","priority","undefined","extractTargets","onlyBefore","onlyAfter","forceAfter","Infinity","forceAtStep","consecutiveAllowed","checkInvariant","ValueError","sourceName","has","beforeAfterIntersection","Set","filter","x","size","Array","from","join","beforeForceAfterIntersection","init","tools","ctx","allTargets","assertAllRulesFound","tool","targetSeenIn","reset","clear","_run","state","_","RequirementError","steps","step","error","lastStepTool","at","invocations","length","resolve","allowed","currentStep","forced","Boolean","hidden","preventStop","stepsAsToolCalls","map","isTruthy","afterToolsRemaining","stepTool","matcher","delete","check","clone","instance"],"mappings":"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","file":"conditional.js","sourcesContent":["/**\n * Copyright 2025 © BeeAI a Series of LF Projects, LLC\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport { Requirement, RequirementError, Rule } from \"./requirement.js\";\nimport {\n TargetType,\n MultiTargetType,\n extractTargets,\n extractTargetName,\n targetSeenIn,\n assertAllRulesFound,\n} from \"./utils.js\";\nimport { AnyTool } from \"@/tools/base.js\";\nimport { RunContext } from \"@/context.js\";\nimport { ValueError } from \"@/errors.js\";\nimport type { RequirementAgentRunState } from \"@/agents/requirement/types.js\";\nimport { isTruthy } from \"remeda\";\n\nexport interface ConditionalRequirementOptions {\n name?: string;\n forceAtStep?: number;\n onlyBefore?: MultiTargetType;\n onlyAfter?: MultiTargetType;\n forceAfter?: MultiTargetType;\n forcePreventStop?: boolean;\n minInvocations?: number;\n maxInvocations?: number;\n onlySuccessInvocations?: boolean;\n consecutiveAllowed?: boolean;\n priority?: number;\n customChecks?: ((state: RequirementAgentRunState) => boolean)[];\n enabled?: boolean;\n reason?: string;\n}\n\nexport class ConditionalRequirement extends Requirement {\n protected source: TargetType;\n protected sourceTool?: AnyTool;\n protected before: Set<TargetType>;\n protected after: Set<TargetType>;\n protected forceAfterSet: Set<TargetType>;\n protected minInvocations: number;\n protected maxInvocations: number;\n protected forceAtStepValue?: number;\n protected onlySuccessInvocations: boolean;\n protected consecutiveAllowedValue: boolean;\n protected customChecks: ((state: RequirementAgentRunState) => boolean)[];\n protected forcePreventStop: boolean;\n protected reason?: string;\n\n constructor(target: TargetType, options: ConditionalRequirementOptions = {}) {\n super(options.name || `Condition${extractTargetName(target)}`);\n\n this.source = target;\n this.enabled = options.enabled ?? true;\n\n if (options.priority !== undefined) {\n this.priority = options.priority;\n }\n\n this.before = extractTargets(options.onlyBefore);\n this.after = extractTargets(options.onlyAfter);\n this.forceAfterSet = extractTargets(options.forceAfter);\n this.minInvocations = options.minInvocations ?? 0;\n this.maxInvocations = options.maxInvocations ?? Infinity;\n this.forceAtStepValue = options.forceAtStep;\n this.onlySuccessInvocations = options.onlySuccessInvocations ?? true;\n this.consecutiveAllowedValue = options.consecutiveAllowed ?? true;\n this.customChecks = options.customChecks ?? [];\n this.forcePreventStop = options.forcePreventStop ?? true;\n this.reason = options.reason;\n\n this.checkInvariant();\n }\n\n protected checkInvariant(): void {\n if (this.minInvocations < 0) {\n throw new ValueError(\"The 'minInvocations' argument must be non negative!\");\n }\n\n if (this.maxInvocations < 0) {\n throw new ValueError(\"The 'maxInvocations' argument must be non negative!\");\n }\n\n if (this.minInvocations > this.maxInvocations) {\n throw new ValueError(\n \"The 'minInvocations' argument must be less than or equal to 'maxInvocations'!\",\n );\n }\n\n const sourceName = extractTargetName(this.source);\n if (this.before.has(this.source)) {\n throw new ValueError(`Referencing self in 'before' is not allowed (${sourceName})!`);\n }\n\n if (this.forceAfterSet.has(this.source)) {\n throw new ValueError(`Referencing self in 'forceAfter' is not allowed (${sourceName})!`);\n }\n\n const beforeAfterIntersection = new Set([...this.before].filter((x) => this.after.has(x)));\n if (beforeAfterIntersection.size > 0) {\n throw new ValueError(\n `Tool specified as 'before' and 'after' at the same time: ${Array.from(beforeAfterIntersection).join(\", \")}!`,\n );\n }\n\n const beforeForceAfterIntersection = new Set(\n [...this.before].filter((x) => this.forceAfterSet.has(x)),\n );\n if (beforeForceAfterIntersection.size > 0) {\n throw new ValueError(\n `Tool specified as 'before' and 'forceAfter' at the same time: ${Array.from(beforeForceAfterIntersection).join(\", \")}!`,\n );\n }\n\n if (this.forceAtStepValue !== undefined && this.forceAtStepValue < 1) {\n throw new ValueError(\"The 'forceAtStep' argument must be >= 1!\");\n }\n }\n\n async init(tools: AnyTool[], ctx: RunContext<any>): Promise<void> {\n await super.init(tools, ctx);\n\n const allTargets = new Set([...this.before, ...this.after, ...this.forceAfterSet, this.source]);\n assertAllRulesFound(allTargets, tools);\n\n for (const tool of tools) {\n if (targetSeenIn(tool, this.source)) {\n if (this.sourceTool && this.sourceTool !== tool) {\n throw new ValueError(\n `More than one occurrence of ${extractTargetName(this.source)} has been found!`,\n );\n }\n this.sourceTool = tool;\n }\n }\n\n if (!this.sourceTool) {\n throw new ValueError(`Source tool ${extractTargetName(this.source)} was not found!`);\n }\n\n if (targetSeenIn(this.sourceTool, this.before)) {\n throw new ValueError(`Referencing self in 'before' is not allowed: ${this.sourceTool.name}!`);\n }\n\n if (this.consecutiveAllowedValue && targetSeenIn(this.sourceTool, this.forceAfterSet)) {\n throw new ValueError(\n `Referencing self in 'forceAfter' is not allowed: ${this.sourceTool.name}. ` +\n `It would prevent an infinite loop. Consider setting 'consecutiveAllowed' to false.`,\n );\n }\n }\n\n reset(): this {\n this.before.clear();\n this.after.clear();\n this.forceAfterSet.clear();\n return this;\n }\n\n async _run(state: RequirementAgentRunState, _: RunContext<typeof this>): Promise<Rule[]> {\n const sourceTool = this.sourceTool;\n if (!sourceTool) {\n throw new RequirementError(\"Source was not found!\", this);\n }\n\n // Get steps from state (assuming state has steps property)\n const steps = this.onlySuccessInvocations\n ? state.steps.filter((step) => !step.error)\n : state.steps;\n\n const lastStepTool = steps.at(-1)?.tool;\n\n const invocations = steps.filter((step) => step.tool === sourceTool).length;\n\n const resolve = (allowed: boolean): Rule[] => {\n const currentStep = steps.length + 1;\n if (!allowed && this.forceAtStepValue === currentStep) {\n throw new RequirementError(\n `Tool '${sourceTool.name}' cannot be executed at step ${this.forceAtStepValue} ` +\n `because it has not met all requirements.`,\n this,\n );\n }\n\n const forced = allowed\n ? Boolean(\n targetSeenIn(lastStepTool, this.forceAfterSet) || this.forceAtStepValue === currentStep,\n )\n : false;\n\n return [\n {\n target: sourceTool.name,\n allowed,\n forced,\n hidden: false,\n preventStop: this.minInvocations > invocations || (forced && this.forcePreventStop),\n reason: !allowed ? this.reason : undefined,\n },\n ];\n };\n\n // Check consecutive constraint\n if (!this.consecutiveAllowedValue && sourceTool === lastStepTool) {\n return resolve(false);\n }\n\n // Check max invocations\n if (invocations >= this.maxInvocations) {\n return resolve(false);\n }\n\n // Check after/before constraints\n if (this.after.size > 0) {\n const stepsAsToolCalls = steps.map((step) => step.tool).filter(isTruthy);\n const afterToolsRemaining = new Set(this.after);\n\n for (const stepTool of stepsAsToolCalls) {\n if (targetSeenIn(stepTool, this.forceAfterSet)) {\n return resolve(false);\n }\n\n const matcher = targetSeenIn(stepTool as any, this.after);\n if (matcher) {\n afterToolsRemaining.delete(matcher);\n }\n }\n\n if (afterToolsRemaining.size > 0) {\n return resolve(false);\n }\n }\n\n // Check custom checks\n for (const check of this.customChecks) {\n if (!check(state)) {\n return resolve(false);\n }\n }\n\n return resolve(true);\n }\n\n async clone(): Promise<this> {\n const instance = await super.clone();\n instance.before = new Set(this.before);\n instance.after = new Set(this.after);\n instance.forceAfterSet = new Set(this.forceAfterSet);\n instance.minInvocations = this.minInvocations;\n instance.maxInvocations = this.maxInvocations;\n instance.customChecks = [...this.customChecks];\n instance.onlySuccessInvocations = this.onlySuccessInvocations;\n instance.forceAtStepValue = this.forceAtStepValue;\n instance.consecutiveAllowedValue = this.consecutiveAllowedValue;\n instance.source = this.source;\n instance.sourceTool = this.sourceTool;\n instance.forcePreventStop = this.forcePreventStop;\n instance.reason = this.reason;\n return instance;\n }\n}\n"]}