mojentic 1.0.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 (247) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +459 -0
  3. package/dist/agents/async-aggregator-agent.d.ts +101 -0
  4. package/dist/agents/async-aggregator-agent.d.ts.map +1 -0
  5. package/dist/agents/async-aggregator-agent.js +160 -0
  6. package/dist/agents/async-aggregator-agent.js.map +1 -0
  7. package/dist/agents/async-dispatcher.d.ts +98 -0
  8. package/dist/agents/async-dispatcher.d.ts.map +1 -0
  9. package/dist/agents/async-dispatcher.js +173 -0
  10. package/dist/agents/async-dispatcher.js.map +1 -0
  11. package/dist/agents/async-llm-agent-with-memory.d.ts +95 -0
  12. package/dist/agents/async-llm-agent-with-memory.d.ts.map +1 -0
  13. package/dist/agents/async-llm-agent-with-memory.js +136 -0
  14. package/dist/agents/async-llm-agent-with-memory.js.map +1 -0
  15. package/dist/agents/async-llm-agent.d.ts +85 -0
  16. package/dist/agents/async-llm-agent.d.ts.map +1 -0
  17. package/dist/agents/async-llm-agent.js +87 -0
  18. package/dist/agents/async-llm-agent.js.map +1 -0
  19. package/dist/agents/base-agent.d.ts +59 -0
  20. package/dist/agents/base-agent.d.ts.map +1 -0
  21. package/dist/agents/base-agent.js +24 -0
  22. package/dist/agents/base-agent.js.map +1 -0
  23. package/dist/agents/base-async-agent.d.ts +42 -0
  24. package/dist/agents/base-async-agent.d.ts.map +1 -0
  25. package/dist/agents/base-async-agent.js +6 -0
  26. package/dist/agents/base-async-agent.js.map +1 -0
  27. package/dist/agents/event.d.ts +26 -0
  28. package/dist/agents/event.d.ts.map +1 -0
  29. package/dist/agents/event.js +13 -0
  30. package/dist/agents/event.js.map +1 -0
  31. package/dist/agents/index.d.ts +14 -0
  32. package/dist/agents/index.d.ts.map +1 -0
  33. package/dist/agents/index.js +30 -0
  34. package/dist/agents/index.js.map +1 -0
  35. package/dist/agents/iterative-problem-solver.d.ts +83 -0
  36. package/dist/agents/iterative-problem-solver.d.ts.map +1 -0
  37. package/dist/agents/iterative-problem-solver.js +120 -0
  38. package/dist/agents/iterative-problem-solver.js.map +1 -0
  39. package/dist/agents/router.d.ts +44 -0
  40. package/dist/agents/router.d.ts.map +1 -0
  41. package/dist/agents/router.js +53 -0
  42. package/dist/agents/router.js.map +1 -0
  43. package/dist/agents/simple-recursive-agent.d.ts +182 -0
  44. package/dist/agents/simple-recursive-agent.d.ts.map +1 -0
  45. package/dist/agents/simple-recursive-agent.js +272 -0
  46. package/dist/agents/simple-recursive-agent.js.map +1 -0
  47. package/dist/context/index.d.ts +5 -0
  48. package/dist/context/index.d.ts.map +1 -0
  49. package/dist/context/index.js +21 -0
  50. package/dist/context/index.js.map +1 -0
  51. package/dist/context/shared-working-memory.d.ts +76 -0
  52. package/dist/context/shared-working-memory.d.ts.map +1 -0
  53. package/dist/context/shared-working-memory.js +121 -0
  54. package/dist/context/shared-working-memory.js.map +1 -0
  55. package/dist/error.d.ts +93 -0
  56. package/dist/error.d.ts.map +1 -0
  57. package/dist/error.js +149 -0
  58. package/dist/error.js.map +1 -0
  59. package/dist/examples/react/decisioning-agent.d.ts +48 -0
  60. package/dist/examples/react/decisioning-agent.d.ts.map +1 -0
  61. package/dist/examples/react/decisioning-agent.js +204 -0
  62. package/dist/examples/react/decisioning-agent.js.map +1 -0
  63. package/dist/examples/react/events.d.ts +77 -0
  64. package/dist/examples/react/events.d.ts.map +1 -0
  65. package/dist/examples/react/events.js +9 -0
  66. package/dist/examples/react/events.js.map +1 -0
  67. package/dist/examples/react/formatters.d.ts +23 -0
  68. package/dist/examples/react/formatters.d.ts.map +1 -0
  69. package/dist/examples/react/formatters.js +68 -0
  70. package/dist/examples/react/formatters.js.map +1 -0
  71. package/dist/examples/react/index.d.ts +12 -0
  72. package/dist/examples/react/index.d.ts.map +1 -0
  73. package/dist/examples/react/index.js +28 -0
  74. package/dist/examples/react/index.js.map +1 -0
  75. package/dist/examples/react/models.d.ts +57 -0
  76. package/dist/examples/react/models.d.ts.map +1 -0
  77. package/dist/examples/react/models.js +19 -0
  78. package/dist/examples/react/models.js.map +1 -0
  79. package/dist/examples/react/output-agent.d.ts +23 -0
  80. package/dist/examples/react/output-agent.d.ts.map +1 -0
  81. package/dist/examples/react/output-agent.js +28 -0
  82. package/dist/examples/react/output-agent.js.map +1 -0
  83. package/dist/examples/react/summarization-agent.d.ts +46 -0
  84. package/dist/examples/react/summarization-agent.d.ts.map +1 -0
  85. package/dist/examples/react/summarization-agent.js +102 -0
  86. package/dist/examples/react/summarization-agent.js.map +1 -0
  87. package/dist/examples/react/thinking-agent.d.ts +47 -0
  88. package/dist/examples/react/thinking-agent.d.ts.map +1 -0
  89. package/dist/examples/react/thinking-agent.js +127 -0
  90. package/dist/examples/react/thinking-agent.js.map +1 -0
  91. package/dist/examples/react/tool-call-agent.d.ts +25 -0
  92. package/dist/examples/react/tool-call-agent.d.ts.map +1 -0
  93. package/dist/examples/react/tool-call-agent.js +83 -0
  94. package/dist/examples/react/tool-call-agent.js.map +1 -0
  95. package/dist/index.d.ts +10 -0
  96. package/dist/index.d.ts.map +1 -0
  97. package/dist/index.js +28 -0
  98. package/dist/index.js.map +1 -0
  99. package/dist/llm/agent.d.ts +68 -0
  100. package/dist/llm/agent.d.ts.map +1 -0
  101. package/dist/llm/agent.js +85 -0
  102. package/dist/llm/agent.js.map +1 -0
  103. package/dist/llm/broker.d.ts +150 -0
  104. package/dist/llm/broker.d.ts.map +1 -0
  105. package/dist/llm/broker.js +355 -0
  106. package/dist/llm/broker.js.map +1 -0
  107. package/dist/llm/chat-session.d.ts +98 -0
  108. package/dist/llm/chat-session.d.ts.map +1 -0
  109. package/dist/llm/chat-session.js +156 -0
  110. package/dist/llm/chat-session.js.map +1 -0
  111. package/dist/llm/gateway.d.ts +28 -0
  112. package/dist/llm/gateway.d.ts.map +1 -0
  113. package/dist/llm/gateway.js +6 -0
  114. package/dist/llm/gateway.js.map +1 -0
  115. package/dist/llm/gateways/index.d.ts +9 -0
  116. package/dist/llm/gateways/index.d.ts.map +1 -0
  117. package/dist/llm/gateways/index.js +25 -0
  118. package/dist/llm/gateways/index.js.map +1 -0
  119. package/dist/llm/gateways/ollama.d.ts +30 -0
  120. package/dist/llm/gateways/ollama.d.ts.map +1 -0
  121. package/dist/llm/gateways/ollama.js +322 -0
  122. package/dist/llm/gateways/ollama.js.map +1 -0
  123. package/dist/llm/gateways/openai-messages-adapter.d.ts +29 -0
  124. package/dist/llm/gateways/openai-messages-adapter.d.ts.map +1 -0
  125. package/dist/llm/gateways/openai-messages-adapter.js +188 -0
  126. package/dist/llm/gateways/openai-messages-adapter.js.map +1 -0
  127. package/dist/llm/gateways/openai-model-registry.d.ts +82 -0
  128. package/dist/llm/gateways/openai-model-registry.d.ts.map +1 -0
  129. package/dist/llm/gateways/openai-model-registry.js +352 -0
  130. package/dist/llm/gateways/openai-model-registry.js.map +1 -0
  131. package/dist/llm/gateways/openai.d.ts +40 -0
  132. package/dist/llm/gateways/openai.d.ts.map +1 -0
  133. package/dist/llm/gateways/openai.js +469 -0
  134. package/dist/llm/gateways/openai.js.map +1 -0
  135. package/dist/llm/gateways/tokenizerGateway.d.ts +61 -0
  136. package/dist/llm/gateways/tokenizerGateway.d.ts.map +1 -0
  137. package/dist/llm/gateways/tokenizerGateway.js +75 -0
  138. package/dist/llm/gateways/tokenizerGateway.js.map +1 -0
  139. package/dist/llm/index.d.ts +11 -0
  140. package/dist/llm/index.d.ts.map +1 -0
  141. package/dist/llm/index.js +27 -0
  142. package/dist/llm/index.js.map +1 -0
  143. package/dist/llm/models.d.ts +95 -0
  144. package/dist/llm/models.d.ts.map +1 -0
  145. package/dist/llm/models.js +50 -0
  146. package/dist/llm/models.js.map +1 -0
  147. package/dist/llm/tools/ask-user.d.ts +39 -0
  148. package/dist/llm/tools/ask-user.d.ts.map +1 -0
  149. package/dist/llm/tools/ask-user.js +111 -0
  150. package/dist/llm/tools/ask-user.js.map +1 -0
  151. package/dist/llm/tools/current-datetime.d.ts +17 -0
  152. package/dist/llm/tools/current-datetime.d.ts.map +1 -0
  153. package/dist/llm/tools/current-datetime.js +76 -0
  154. package/dist/llm/tools/current-datetime.js.map +1 -0
  155. package/dist/llm/tools/date-resolver.d.ts +17 -0
  156. package/dist/llm/tools/date-resolver.d.ts.map +1 -0
  157. package/dist/llm/tools/date-resolver.js +135 -0
  158. package/dist/llm/tools/date-resolver.js.map +1 -0
  159. package/dist/llm/tools/ephemeral-task-manager/append-task.d.ts +13 -0
  160. package/dist/llm/tools/ephemeral-task-manager/append-task.d.ts.map +1 -0
  161. package/dist/llm/tools/ephemeral-task-manager/append-task.js +54 -0
  162. package/dist/llm/tools/ephemeral-task-manager/append-task.js.map +1 -0
  163. package/dist/llm/tools/ephemeral-task-manager/clear-tasks.d.ts +13 -0
  164. package/dist/llm/tools/ephemeral-task-manager/clear-tasks.d.ts.map +1 -0
  165. package/dist/llm/tools/ephemeral-task-manager/clear-tasks.js +37 -0
  166. package/dist/llm/tools/ephemeral-task-manager/clear-tasks.js.map +1 -0
  167. package/dist/llm/tools/ephemeral-task-manager/complete-task.d.ts +15 -0
  168. package/dist/llm/tools/ephemeral-task-manager/complete-task.d.ts.map +1 -0
  169. package/dist/llm/tools/ephemeral-task-manager/complete-task.js +56 -0
  170. package/dist/llm/tools/ephemeral-task-manager/complete-task.js.map +1 -0
  171. package/dist/llm/tools/ephemeral-task-manager/index.d.ts +44 -0
  172. package/dist/llm/tools/ephemeral-task-manager/index.d.ts.map +1 -0
  173. package/dist/llm/tools/ephemeral-task-manager/index.js +73 -0
  174. package/dist/llm/tools/ephemeral-task-manager/index.js.map +1 -0
  175. package/dist/llm/tools/ephemeral-task-manager/insert-task-after.d.ts +13 -0
  176. package/dist/llm/tools/ephemeral-task-manager/insert-task-after.d.ts.map +1 -0
  177. package/dist/llm/tools/ephemeral-task-manager/insert-task-after.js +59 -0
  178. package/dist/llm/tools/ephemeral-task-manager/insert-task-after.js.map +1 -0
  179. package/dist/llm/tools/ephemeral-task-manager/list-tasks.d.ts +14 -0
  180. package/dist/llm/tools/ephemeral-task-manager/list-tasks.d.ts.map +1 -0
  181. package/dist/llm/tools/ephemeral-task-manager/list-tasks.js +45 -0
  182. package/dist/llm/tools/ephemeral-task-manager/list-tasks.js.map +1 -0
  183. package/dist/llm/tools/ephemeral-task-manager/prepend-task.d.ts +13 -0
  184. package/dist/llm/tools/ephemeral-task-manager/prepend-task.d.ts.map +1 -0
  185. package/dist/llm/tools/ephemeral-task-manager/prepend-task.js +54 -0
  186. package/dist/llm/tools/ephemeral-task-manager/prepend-task.js.map +1 -0
  187. package/dist/llm/tools/ephemeral-task-manager/start-task.d.ts +15 -0
  188. package/dist/llm/tools/ephemeral-task-manager/start-task.d.ts.map +1 -0
  189. package/dist/llm/tools/ephemeral-task-manager/start-task.js +56 -0
  190. package/dist/llm/tools/ephemeral-task-manager/start-task.js.map +1 -0
  191. package/dist/llm/tools/ephemeral-task-manager/task-list.d.ts +68 -0
  192. package/dist/llm/tools/ephemeral-task-manager/task-list.d.ts.map +1 -0
  193. package/dist/llm/tools/ephemeral-task-manager/task-list.js +120 -0
  194. package/dist/llm/tools/ephemeral-task-manager/task-list.js.map +1 -0
  195. package/dist/llm/tools/ephemeral-task-manager/task.d.ts +21 -0
  196. package/dist/llm/tools/ephemeral-task-manager/task.d.ts.map +1 -0
  197. package/dist/llm/tools/ephemeral-task-manager/task.js +24 -0
  198. package/dist/llm/tools/ephemeral-task-manager/task.js.map +1 -0
  199. package/dist/llm/tools/file-manager.d.ts +127 -0
  200. package/dist/llm/tools/file-manager.d.ts.map +1 -0
  201. package/dist/llm/tools/file-manager.js +598 -0
  202. package/dist/llm/tools/file-manager.js.map +1 -0
  203. package/dist/llm/tools/index.d.ts +11 -0
  204. package/dist/llm/tools/index.d.ts.map +1 -0
  205. package/dist/llm/tools/index.js +27 -0
  206. package/dist/llm/tools/index.js.map +1 -0
  207. package/dist/llm/tools/tell-user.d.ts +31 -0
  208. package/dist/llm/tools/tell-user.d.ts.map +1 -0
  209. package/dist/llm/tools/tell-user.js +57 -0
  210. package/dist/llm/tools/tell-user.js.map +1 -0
  211. package/dist/llm/tools/tool-wrapper.d.ts +54 -0
  212. package/dist/llm/tools/tool-wrapper.d.ts.map +1 -0
  213. package/dist/llm/tools/tool-wrapper.js +91 -0
  214. package/dist/llm/tools/tool-wrapper.js.map +1 -0
  215. package/dist/llm/tools/tool.d.ts +70 -0
  216. package/dist/llm/tools/tool.d.ts.map +1 -0
  217. package/dist/llm/tools/tool.js +19 -0
  218. package/dist/llm/tools/tool.js.map +1 -0
  219. package/dist/llm/tools/web-search-tool.d.ts +35 -0
  220. package/dist/llm/tools/web-search-tool.d.ts.map +1 -0
  221. package/dist/llm/tools/web-search-tool.js +105 -0
  222. package/dist/llm/tools/web-search-tool.js.map +1 -0
  223. package/dist/llm/utils/image.d.ts +30 -0
  224. package/dist/llm/utils/image.d.ts.map +1 -0
  225. package/dist/llm/utils/image.js +65 -0
  226. package/dist/llm/utils/image.js.map +1 -0
  227. package/dist/tracer/eventStore.d.ts +101 -0
  228. package/dist/tracer/eventStore.d.ts.map +1 -0
  229. package/dist/tracer/eventStore.js +120 -0
  230. package/dist/tracer/eventStore.js.map +1 -0
  231. package/dist/tracer/index.d.ts +8 -0
  232. package/dist/tracer/index.d.ts.map +1 -0
  233. package/dist/tracer/index.js +24 -0
  234. package/dist/tracer/index.js.map +1 -0
  235. package/dist/tracer/nullTracer.d.ts +127 -0
  236. package/dist/tracer/nullTracer.d.ts.map +1 -0
  237. package/dist/tracer/nullTracer.js +148 -0
  238. package/dist/tracer/nullTracer.js.map +1 -0
  239. package/dist/tracer/tracerEvents.d.ts +209 -0
  240. package/dist/tracer/tracerEvents.d.ts.map +1 -0
  241. package/dist/tracer/tracerEvents.js +312 -0
  242. package/dist/tracer/tracerEvents.js.map +1 -0
  243. package/dist/tracer/tracerSystem.d.ts +149 -0
  244. package/dist/tracer/tracerSystem.d.ts.map +1 -0
  245. package/dist/tracer/tracerSystem.js +196 -0
  246. package/dist/tracer/tracerSystem.js.map +1 -0
  247. package/package.json +87 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"async-llm-agent-with-memory.js","sourceRoot":"","sources":["../../src/agents/async-llm-agent-with-memory.ts"],"names":[],"mappings":";AAAA;;GAEG;;;AAEH,uDAAuE;AAEvE,0CAAoD;AACpD,oCAA4C;AAc5C;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA8CG;AACH,MAAsB,uBAAwB,SAAQ,+BAAa;IAC9C,MAAM,CAAsB;IAC5B,YAAY,CAAS;IAExC,YAAY,MAAqC;QAC/C,KAAK,CAAC;YACJ,GAAG,MAAM;YACT,2EAA2E;YAC3E,aAAa,EAAE,MAAM,CAAC,aAAa;SACpC,CAAC,CAAC;QACH,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC;QAC5B,IAAI,CAAC,YAAY,GAAG,MAAM,CAAC,YAAY,CAAC;IAC1C,CAAC;IAED;;;;;;;;;OASG;IACO,+BAA+B;QACvC,MAAM,aAAa,GAAG,IAAI,CAAC,MAAM,CAAC,gBAAgB,EAAE,CAAC;QAErD,OAAO;YACL,gBAAO,CAAC,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC;YAC9B,gBAAO,CAAC,IAAI,CACV,+BAA+B,IAAI,CAAC,SAAS,CAAC,aAAa,EAAE,IAAI,EAAE,CAAC,CAAC,MAAM;gBACzE,wFAAwF,CAC3F;YACD,gBAAO,CAAC,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC;SAChC,CAAC;IACJ,CAAC;IAED;;;;;;;;;;;OAWG;IACO,KAAK,CAAC,0BAA0B,CAAI,OAAe;QAC3D,6DAA6D;QAC7D,MAAM,wBAAwB,GAAG;YAC/B,IAAI,EAAE,QAAQ;YACd,UAAU,EAAE;gBACV,GAAI,IAAI,CAAC,aAAa,EAAE,UAAsC;gBAC9D,MAAM,EAAE;oBACN,IAAI,EAAE,QAAQ;oBACd,WAAW,EAAE,8CAA8C;oBAC3D,OAAO,EAAE,IAAI,CAAC,MAAM,CAAC,gBAAgB,EAAE;iBACxC;aACF;YACD,QAAQ,EAAE,CAAC,GAAG,CAAE,IAAI,CAAC,aAAa,EAAE,QAAqB,IAAI,EAAE,CAAC,CAAC;SAClE,CAAC;QAEF,qCAAqC;QACrC,MAAM,QAAQ,GAAiB;YAC7B,GAAG,IAAI,CAAC,+BAA+B,EAAE;YACzC,gBAAO,CAAC,IAAI,CAAC,OAAO,CAAC;SACtB,CAAC;QAEF,+BAA+B;QAC/B,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,cAAc,CAC7C,QAAQ,EACR,wBAAwB,CACzB,CAAC;QAEF,IAAI,IAAA,YAAI,EAAC,MAAM,CAAC,EAAE,CAAC;YACjB,MAAM,kBAAkB,GAAG,MAAM,CAAC,KAAK,CAAC;YAExC,sCAAsC;YACtC,IAAI,kBAAkB,CAAC,MAAM,EAAE,CAAC;gBAC9B,IAAI,CAAC,MAAM,CAAC,oBAAoB,CAAC,kBAAkB,CAAC,MAAM,CAAC,CAAC;YAC9D,CAAC;YAED,qDAAqD;YACrD,6DAA6D;YAC7D,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,GAAG,qBAAqB,EAAE,GAAG,kBAAkB,CAAC;YAEzE,OAAO,IAAA,UAAE,EAAC,qBAA0B,CAAC,CAAC;QACxC,CAAC;QAED,OAAO,MAA0B,CAAC;IACpC,CAAC;CACF;AA7FD,0DA6FC"}
@@ -0,0 +1,85 @@
1
+ /**
2
+ * Async LLM Agent - Base class for agents that use LLMs to generate responses
3
+ */
4
+ import { BaseAsyncAgent } from './base-async-agent';
5
+ import { Event } from './event';
6
+ import { LlmBroker } from '../llm/broker';
7
+ import { LlmTool } from '../llm/tools';
8
+ import { Result } from '../error';
9
+ /**
10
+ * Configuration for AsyncLlmAgent
11
+ */
12
+ export interface AsyncLlmAgentConfig {
13
+ /** The LLM broker to use for generating responses */
14
+ broker: LlmBroker;
15
+ /** System prompt defining the agent's behavior and personality */
16
+ behaviour: string;
17
+ /** Optional JSON schema for structured output */
18
+ responseModel?: Record<string, unknown>;
19
+ /** Optional tools the agent can use */
20
+ tools?: LlmTool[];
21
+ }
22
+ /**
23
+ * Base class for async agents that use an LLM to generate responses.
24
+ *
25
+ * This agent wraps an LLM broker and provides convenient methods for
26
+ * generating text or structured responses. Subclasses implement
27
+ * `receiveEventAsync` to define their event handling logic.
28
+ *
29
+ * @example
30
+ * ```typescript
31
+ * class FactCheckerAgent extends AsyncLlmAgent {
32
+ * constructor(broker: LlmBroker) {
33
+ * super({
34
+ * broker,
35
+ * behaviour: 'You are a fact-checking assistant.',
36
+ * responseModel: factCheckSchema
37
+ * });
38
+ * }
39
+ *
40
+ * async receiveEventAsync(event: Event): Promise<Result<Event[], Error>> {
41
+ * if (isQuestionEvent(event)) {
42
+ * const result = await this.generateResponse<FactCheckResponse>(
43
+ * `Check facts about: ${event.question}`
44
+ * );
45
+ * if (isOk(result)) {
46
+ * return Ok([new FactCheckEvent({ facts: result.value.facts })]);
47
+ * }
48
+ * }
49
+ * return Ok([]);
50
+ * }
51
+ * }
52
+ * ```
53
+ */
54
+ export declare abstract class AsyncLlmAgent implements BaseAsyncAgent {
55
+ protected readonly broker: LlmBroker;
56
+ protected readonly behaviour: string;
57
+ protected readonly responseModel?: Record<string, unknown>;
58
+ protected readonly tools: LlmTool[];
59
+ constructor(config: AsyncLlmAgentConfig);
60
+ /**
61
+ * Add a tool to the agent's available tools.
62
+ *
63
+ * @param tool - The tool to add
64
+ */
65
+ addTool(tool: LlmTool): void;
66
+ /**
67
+ * Generate a response from the LLM.
68
+ *
69
+ * If a responseModel is configured, returns structured output conforming to the schema.
70
+ * Otherwise, returns plain text.
71
+ *
72
+ * @param content - The user message content to send to the LLM
73
+ * @returns Result containing the LLM response or an error
74
+ */
75
+ protected generateResponse<T = string>(content: string): Promise<Result<T, Error>>;
76
+ /**
77
+ * Process an incoming event and optionally produce new events.
78
+ * Must be implemented by subclasses.
79
+ *
80
+ * @param event - The event to process
81
+ * @returns Result containing array of new events or an error
82
+ */
83
+ abstract receiveEventAsync(event: Event): Promise<Result<Event[], Error>>;
84
+ }
85
+ //# sourceMappingURL=async-llm-agent.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"async-llm-agent.d.ts","sourceRoot":"","sources":["../../src/agents/async-llm-agent.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;AACpD,OAAO,EAAE,KAAK,EAAE,MAAM,SAAS,CAAC;AAChC,OAAO,EAAE,SAAS,EAAE,MAAM,eAAe,CAAC;AAC1C,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AAEvC,OAAO,EAAE,MAAM,EAAY,MAAM,UAAU,CAAC;AAE5C;;GAEG;AACH,MAAM,WAAW,mBAAmB;IAClC,qDAAqD;IACrD,MAAM,EAAE,SAAS,CAAC;IAClB,kEAAkE;IAClE,SAAS,EAAE,MAAM,CAAC;IAClB,iDAAiD;IACjD,aAAa,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACxC,uCAAuC;IACvC,KAAK,CAAC,EAAE,OAAO,EAAE,CAAC;CACnB;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA+BG;AACH,8BAAsB,aAAc,YAAW,cAAc;IAC3D,SAAS,CAAC,QAAQ,CAAC,MAAM,EAAE,SAAS,CAAC;IACrC,SAAS,CAAC,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IACrC,SAAS,CAAC,QAAQ,CAAC,aAAa,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAC3D,SAAS,CAAC,QAAQ,CAAC,KAAK,EAAE,OAAO,EAAE,CAAC;gBAExB,MAAM,EAAE,mBAAmB;IAOvC;;;;OAIG;IACH,OAAO,CAAC,IAAI,EAAE,OAAO,GAAG,IAAI;IAI5B;;;;;;;;OAQG;cACa,gBAAgB,CAAC,CAAC,GAAG,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC;IAiBxF;;;;;;OAMG;IACH,QAAQ,CAAC,iBAAiB,CAAC,KAAK,EAAE,KAAK,GAAG,OAAO,CAAC,MAAM,CAAC,KAAK,EAAE,EAAE,KAAK,CAAC,CAAC;CAC1E"}
@@ -0,0 +1,87 @@
1
+ "use strict";
2
+ /**
3
+ * Async LLM Agent - Base class for agents that use LLMs to generate responses
4
+ */
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.AsyncLlmAgent = void 0;
7
+ const models_1 = require("../llm/models");
8
+ const error_1 = require("../error");
9
+ /**
10
+ * Base class for async agents that use an LLM to generate responses.
11
+ *
12
+ * This agent wraps an LLM broker and provides convenient methods for
13
+ * generating text or structured responses. Subclasses implement
14
+ * `receiveEventAsync` to define their event handling logic.
15
+ *
16
+ * @example
17
+ * ```typescript
18
+ * class FactCheckerAgent extends AsyncLlmAgent {
19
+ * constructor(broker: LlmBroker) {
20
+ * super({
21
+ * broker,
22
+ * behaviour: 'You are a fact-checking assistant.',
23
+ * responseModel: factCheckSchema
24
+ * });
25
+ * }
26
+ *
27
+ * async receiveEventAsync(event: Event): Promise<Result<Event[], Error>> {
28
+ * if (isQuestionEvent(event)) {
29
+ * const result = await this.generateResponse<FactCheckResponse>(
30
+ * `Check facts about: ${event.question}`
31
+ * );
32
+ * if (isOk(result)) {
33
+ * return Ok([new FactCheckEvent({ facts: result.value.facts })]);
34
+ * }
35
+ * }
36
+ * return Ok([]);
37
+ * }
38
+ * }
39
+ * ```
40
+ */
41
+ class AsyncLlmAgent {
42
+ broker;
43
+ behaviour;
44
+ responseModel;
45
+ tools;
46
+ constructor(config) {
47
+ this.broker = config.broker;
48
+ this.behaviour = config.behaviour;
49
+ this.responseModel = config.responseModel;
50
+ this.tools = config.tools || [];
51
+ }
52
+ /**
53
+ * Add a tool to the agent's available tools.
54
+ *
55
+ * @param tool - The tool to add
56
+ */
57
+ addTool(tool) {
58
+ this.tools.push(tool);
59
+ }
60
+ /**
61
+ * Generate a response from the LLM.
62
+ *
63
+ * If a responseModel is configured, returns structured output conforming to the schema.
64
+ * Otherwise, returns plain text.
65
+ *
66
+ * @param content - The user message content to send to the LLM
67
+ * @returns Result containing the LLM response or an error
68
+ */
69
+ async generateResponse(content) {
70
+ const messages = [models_1.Message.system(this.behaviour), models_1.Message.user(content)];
71
+ if (this.responseModel) {
72
+ // Generate structured object
73
+ const result = await this.broker.generateObject(messages, this.responseModel);
74
+ return result;
75
+ }
76
+ else {
77
+ // Generate text with optional tools
78
+ const result = await this.broker.generate(messages, this.tools);
79
+ if ((0, error_1.isOk)(result)) {
80
+ return (0, error_1.Ok)(result.value);
81
+ }
82
+ return result;
83
+ }
84
+ }
85
+ }
86
+ exports.AsyncLlmAgent = AsyncLlmAgent;
87
+ //# sourceMappingURL=async-llm-agent.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"async-llm-agent.js","sourceRoot":"","sources":["../../src/agents/async-llm-agent.ts"],"names":[],"mappings":";AAAA;;GAEG;;;AAMH,0CAAwC;AACxC,oCAA4C;AAgB5C;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA+BG;AACH,MAAsB,aAAa;IACd,MAAM,CAAY;IAClB,SAAS,CAAS;IAClB,aAAa,CAA2B;IACxC,KAAK,CAAY;IAEpC,YAAY,MAA2B;QACrC,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC;QAC5B,IAAI,CAAC,SAAS,GAAG,MAAM,CAAC,SAAS,CAAC;QAClC,IAAI,CAAC,aAAa,GAAG,MAAM,CAAC,aAAa,CAAC;QAC1C,IAAI,CAAC,KAAK,GAAG,MAAM,CAAC,KAAK,IAAI,EAAE,CAAC;IAClC,CAAC;IAED;;;;OAIG;IACH,OAAO,CAAC,IAAa;QACnB,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACxB,CAAC;IAED;;;;;;;;OAQG;IACO,KAAK,CAAC,gBAAgB,CAAa,OAAe;QAC1D,MAAM,QAAQ,GAAG,CAAC,gBAAO,CAAC,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,gBAAO,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC;QAEzE,IAAI,IAAI,CAAC,aAAa,EAAE,CAAC;YACvB,6BAA6B;YAC7B,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,cAAc,CAAI,QAAQ,EAAE,IAAI,CAAC,aAAa,CAAC,CAAC;YACjF,OAAO,MAAM,CAAC;QAChB,CAAC;aAAM,CAAC;YACN,oCAAoC;YACpC,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,QAAQ,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC;YAChE,IAAI,IAAA,YAAI,EAAC,MAAM,CAAC,EAAE,CAAC;gBACjB,OAAO,IAAA,UAAE,EAAC,MAAM,CAAC,KAAU,CAAC,CAAC;YAC/B,CAAC;YACD,OAAO,MAA0B,CAAC;QACpC,CAAC;IACH,CAAC;CAUF;AAxDD,sCAwDC"}
@@ -0,0 +1,59 @@
1
+ /**
2
+ * Base interface for synchronous agents
3
+ *
4
+ * Synchronous agents implement the `receiveEvent` method to process
5
+ * incoming events and return a list of new events. This is the simplest
6
+ * agent interface, suitable for agents that don't need to perform async
7
+ * operations.
8
+ *
9
+ * For agents that need to perform I/O, LLM calls, or other async operations,
10
+ * use `BaseAsyncAgent` instead.
11
+ *
12
+ * @example
13
+ * ```typescript
14
+ * class MyAgent implements BaseAgent {
15
+ * receiveEvent(event: Event): Event[] {
16
+ * // Process event synchronously
17
+ * return [new MyResponseEvent({ data: process(event) })];
18
+ * }
19
+ * }
20
+ * ```
21
+ */
22
+ import { Event } from './event';
23
+ /**
24
+ * Base interface that synchronous agents must implement.
25
+ *
26
+ * Agents process events and optionally produce new events in response.
27
+ * Processing is synchronous, making this suitable for simple transformations
28
+ * and coordination logic that doesn't require async operations.
29
+ *
30
+ * @example
31
+ * ```typescript
32
+ * class TransformAgent implements BaseAgent {
33
+ * receiveEvent(event: Event): Event[] {
34
+ * if (isDataEvent(event)) {
35
+ * const transformed = this.transform(event.data);
36
+ * return [new TransformedEvent({ data: transformed })];
37
+ * }
38
+ * return [];
39
+ * }
40
+ * }
41
+ * ```
42
+ */
43
+ export interface BaseAgent {
44
+ /**
45
+ * Process an incoming event and optionally produce new events.
46
+ *
47
+ * This method is called when an event is routed to this agent.
48
+ * The agent should process the event synchronously and return
49
+ * new events to continue the workflow.
50
+ *
51
+ * Returning an empty array means the event was processed but
52
+ * produced no follow-up events.
53
+ *
54
+ * @param event - The event to process
55
+ * @returns Array of new events to dispatch (can be empty)
56
+ */
57
+ receiveEvent(event: Event): Event[];
58
+ }
59
+ //# sourceMappingURL=base-agent.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"base-agent.d.ts","sourceRoot":"","sources":["../../src/agents/base-agent.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;GAoBG;AAEH,OAAO,EAAE,KAAK,EAAE,MAAM,SAAS,CAAC;AAEhC;;;;;;;;;;;;;;;;;;;GAmBG;AACH,MAAM,WAAW,SAAS;IACxB;;;;;;;;;;;;OAYG;IACH,YAAY,CAAC,KAAK,EAAE,KAAK,GAAG,KAAK,EAAE,CAAC;CACrC"}
@@ -0,0 +1,24 @@
1
+ "use strict";
2
+ /**
3
+ * Base interface for synchronous agents
4
+ *
5
+ * Synchronous agents implement the `receiveEvent` method to process
6
+ * incoming events and return a list of new events. This is the simplest
7
+ * agent interface, suitable for agents that don't need to perform async
8
+ * operations.
9
+ *
10
+ * For agents that need to perform I/O, LLM calls, or other async operations,
11
+ * use `BaseAsyncAgent` instead.
12
+ *
13
+ * @example
14
+ * ```typescript
15
+ * class MyAgent implements BaseAgent {
16
+ * receiveEvent(event: Event): Event[] {
17
+ * // Process event synchronously
18
+ * return [new MyResponseEvent({ data: process(event) })];
19
+ * }
20
+ * }
21
+ * ```
22
+ */
23
+ Object.defineProperty(exports, "__esModule", { value: true });
24
+ //# sourceMappingURL=base-agent.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"base-agent.js","sourceRoot":"","sources":["../../src/agents/base-agent.ts"],"names":[],"mappings":";AAAA;;;;;;;;;;;;;;;;;;;;GAoBG"}
@@ -0,0 +1,42 @@
1
+ /**
2
+ * Base interface for asynchronous agents
3
+ */
4
+ import { Event } from './event';
5
+ import { Result } from '../error';
6
+ /**
7
+ * Base interface that all async agents must implement.
8
+ *
9
+ * Agents process events and optionally produce new events in response.
10
+ * All processing is asynchronous, allowing agents to perform I/O operations
11
+ * like LLM calls without blocking.
12
+ *
13
+ * @example
14
+ * ```typescript
15
+ * class MyAgent implements BaseAsyncAgent {
16
+ * async receiveEventAsync(event: Event): Promise<Result<Event[], Error>> {
17
+ * if (isQuestionEvent(event)) {
18
+ * const answer = await this.processQuestion(event.question);
19
+ * return Ok([new AnswerEvent({ answer })]);
20
+ * }
21
+ * return Ok([]);
22
+ * }
23
+ * }
24
+ * ```
25
+ */
26
+ export interface BaseAsyncAgent {
27
+ /**
28
+ * Process an incoming event and optionally produce new events.
29
+ *
30
+ * This method is called by the dispatcher when an event is routed to this agent.
31
+ * The agent can perform asynchronous operations (LLM calls, database queries, etc.)
32
+ * and return new events to continue the workflow.
33
+ *
34
+ * Returning an empty array means the event was processed but produced no follow-up events.
35
+ * Returning an error Result indicates processing failure.
36
+ *
37
+ * @param event - The event to process
38
+ * @returns Result containing array of new events to dispatch, or an error
39
+ */
40
+ receiveEventAsync(event: Event): Promise<Result<Event[], Error>>;
41
+ }
42
+ //# sourceMappingURL=base-async-agent.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"base-async-agent.d.ts","sourceRoot":"","sources":["../../src/agents/base-async-agent.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,KAAK,EAAE,MAAM,SAAS,CAAC;AAChC,OAAO,EAAE,MAAM,EAAE,MAAM,UAAU,CAAC;AAElC;;;;;;;;;;;;;;;;;;;GAmBG;AACH,MAAM,WAAW,cAAc;IAC7B;;;;;;;;;;;;OAYG;IACH,iBAAiB,CAAC,KAAK,EAAE,KAAK,GAAG,OAAO,CAAC,MAAM,CAAC,KAAK,EAAE,EAAE,KAAK,CAAC,CAAC,CAAC;CAClE"}
@@ -0,0 +1,6 @@
1
+ "use strict";
2
+ /**
3
+ * Base interface for asynchronous agents
4
+ */
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ //# sourceMappingURL=base-async-agent.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"base-async-agent.js","sourceRoot":"","sources":["../../src/agents/base-async-agent.ts"],"names":[],"mappings":";AAAA;;GAEG"}
@@ -0,0 +1,26 @@
1
+ /**
2
+ * Event system for agent communication
3
+ */
4
+ /**
5
+ * Base event class for agent communication.
6
+ * Events are the primary mechanism for agents to communicate with each other.
7
+ */
8
+ export interface Event {
9
+ /** Event type discriminator for type guards */
10
+ type?: string;
11
+ /** The type/class of the agent that created this event */
12
+ source: string;
13
+ /** Unique identifier linking related events in a conversation or workflow */
14
+ correlationId?: string;
15
+ }
16
+ /**
17
+ * Special event that signals the dispatcher to stop processing
18
+ */
19
+ export interface TerminateEvent extends Event {
20
+ type: 'terminate';
21
+ }
22
+ /**
23
+ * Type guard to check if an event is a TerminateEvent
24
+ */
25
+ export declare function isTerminateEvent(event: Event): event is TerminateEvent;
26
+ //# sourceMappingURL=event.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"event.d.ts","sourceRoot":"","sources":["../../src/agents/event.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH;;;GAGG;AACH,MAAM,WAAW,KAAK;IACpB,+CAA+C;IAC/C,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,0DAA0D;IAC1D,MAAM,EAAE,MAAM,CAAC;IACf,6EAA6E;IAC7E,aAAa,CAAC,EAAE,MAAM,CAAC;CACxB;AAED;;GAEG;AACH,MAAM,WAAW,cAAe,SAAQ,KAAK;IAC3C,IAAI,EAAE,WAAW,CAAC;CACnB;AAED;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,KAAK,GAAG,KAAK,IAAI,cAAc,CAEtE"}
@@ -0,0 +1,13 @@
1
+ "use strict";
2
+ /**
3
+ * Event system for agent communication
4
+ */
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.isTerminateEvent = isTerminateEvent;
7
+ /**
8
+ * Type guard to check if an event is a TerminateEvent
9
+ */
10
+ function isTerminateEvent(event) {
11
+ return event.type === 'terminate';
12
+ }
13
+ //# sourceMappingURL=event.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"event.js","sourceRoot":"","sources":["../../src/agents/event.ts"],"names":[],"mappings":";AAAA;;GAEG;;AAyBH,4CAEC;AALD;;GAEG;AACH,SAAgB,gBAAgB,CAAC,KAAY;IAC3C,OAAQ,KAAwB,CAAC,IAAI,KAAK,WAAW,CAAC;AACxD,CAAC"}
@@ -0,0 +1,14 @@
1
+ /**
2
+ * Agent system for event-driven LLM workflows
3
+ */
4
+ export * from './event';
5
+ export * from './base-agent';
6
+ export * from './base-async-agent';
7
+ export * from './async-llm-agent';
8
+ export * from './async-llm-agent-with-memory';
9
+ export * from './async-aggregator-agent';
10
+ export * from './async-dispatcher';
11
+ export * from './router';
12
+ export * from './iterative-problem-solver';
13
+ export * from './simple-recursive-agent';
14
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/agents/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,cAAc,SAAS,CAAC;AACxB,cAAc,cAAc,CAAC;AAC7B,cAAc,oBAAoB,CAAC;AACnC,cAAc,mBAAmB,CAAC;AAClC,cAAc,+BAA+B,CAAC;AAC9C,cAAc,0BAA0B,CAAC;AACzC,cAAc,oBAAoB,CAAC;AACnC,cAAc,UAAU,CAAC;AACzB,cAAc,4BAA4B,CAAC;AAC3C,cAAc,0BAA0B,CAAC"}
@@ -0,0 +1,30 @@
1
+ "use strict";
2
+ /**
3
+ * Agent system for event-driven LLM workflows
4
+ */
5
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
6
+ if (k2 === undefined) k2 = k;
7
+ var desc = Object.getOwnPropertyDescriptor(m, k);
8
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
9
+ desc = { enumerable: true, get: function() { return m[k]; } };
10
+ }
11
+ Object.defineProperty(o, k2, desc);
12
+ }) : (function(o, m, k, k2) {
13
+ if (k2 === undefined) k2 = k;
14
+ o[k2] = m[k];
15
+ }));
16
+ var __exportStar = (this && this.__exportStar) || function(m, exports) {
17
+ for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
18
+ };
19
+ Object.defineProperty(exports, "__esModule", { value: true });
20
+ __exportStar(require("./event"), exports);
21
+ __exportStar(require("./base-agent"), exports);
22
+ __exportStar(require("./base-async-agent"), exports);
23
+ __exportStar(require("./async-llm-agent"), exports);
24
+ __exportStar(require("./async-llm-agent-with-memory"), exports);
25
+ __exportStar(require("./async-aggregator-agent"), exports);
26
+ __exportStar(require("./async-dispatcher"), exports);
27
+ __exportStar(require("./router"), exports);
28
+ __exportStar(require("./iterative-problem-solver"), exports);
29
+ __exportStar(require("./simple-recursive-agent"), exports);
30
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/agents/index.ts"],"names":[],"mappings":";AAAA;;GAEG;;;;;;;;;;;;;;;;AAEH,0CAAwB;AACxB,+CAA6B;AAC7B,qDAAmC;AACnC,oDAAkC;AAClC,gEAA8C;AAC9C,2DAAyC;AACzC,qDAAmC;AACnC,2CAAyB;AACzB,6DAA2C;AAC3C,2DAAyC"}
@@ -0,0 +1,83 @@
1
+ /**
2
+ * IterativeProblemSolver - An agent that iteratively solves problems using available tools
3
+ */
4
+ import { LlmBroker } from '../llm/broker';
5
+ import { LlmTool } from '../llm/tools';
6
+ /**
7
+ * Configuration for IterativeProblemSolver
8
+ */
9
+ export interface IterativeProblemSolverConfig {
10
+ broker: LlmBroker;
11
+ tools?: LlmTool[];
12
+ maxIterations?: number;
13
+ systemPrompt?: string;
14
+ temperature?: number;
15
+ }
16
+ /**
17
+ * An agent that iteratively attempts to solve a problem using available tools.
18
+ *
19
+ * This solver uses a chat-based approach to break down and solve complex problems.
20
+ * It continues attempting to solve the problem until it either succeeds,
21
+ * fails explicitly, or reaches the maximum number of iterations.
22
+ *
23
+ * @example
24
+ * ```typescript
25
+ * const broker = new LlmBroker('qwen3:32b', new OllamaGateway());
26
+ * const solver = new IterativeProblemSolver({
27
+ * broker,
28
+ * tools: [new DateResolverTool()],
29
+ * maxIterations: 5
30
+ * });
31
+ *
32
+ * const result = await solver.solve("What's the date next Friday?");
33
+ * console.log(result);
34
+ * ```
35
+ */
36
+ export declare class IterativeProblemSolver {
37
+ private readonly chat;
38
+ private readonly maxIterations;
39
+ /**
40
+ * Create a new IterativeProblemSolver instance.
41
+ *
42
+ * @param config - Configuration options
43
+ */
44
+ constructor(config: IterativeProblemSolverConfig);
45
+ /**
46
+ * Execute the problem-solving process.
47
+ *
48
+ * This method runs the iterative problem-solving process, continuing until one of
49
+ * these conditions is met:
50
+ * - The task is completed successfully ("DONE")
51
+ * - The task fails explicitly ("FAIL")
52
+ * - The maximum number of iterations is reached
53
+ *
54
+ * @param problem - The problem or request to be solved
55
+ * @returns A summary of the final result, excluding the process details
56
+ */
57
+ solve(problem: string): Promise<string>;
58
+ /**
59
+ * Execute a single problem-solving step.
60
+ *
61
+ * This method sends a prompt to the chat session asking it to work on the user's request
62
+ * using available tools. The response should indicate success ("DONE") or failure ("FAIL").
63
+ *
64
+ * @param problem - The problem or request to be solved
65
+ * @returns The response from the chat session, indicating the step's outcome
66
+ */
67
+ private step;
68
+ /**
69
+ * Get the current chat messages (for inspection/debugging).
70
+ *
71
+ * @returns Array of messages in the chat session
72
+ */
73
+ getMessages(): import("..").LlmMessage[];
74
+ /**
75
+ * Clear the chat history except the system prompt.
76
+ */
77
+ clear(): void;
78
+ /**
79
+ * Clean up resources when done.
80
+ */
81
+ dispose(): void;
82
+ }
83
+ //# sourceMappingURL=iterative-problem-solver.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"iterative-problem-solver.d.ts","sourceRoot":"","sources":["../../src/agents/iterative-problem-solver.ts"],"names":[],"mappings":"AAAA;;GAEG;AAGH,OAAO,EAAE,SAAS,EAAE,MAAM,eAAe,CAAC;AAC1C,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AAEvC;;GAEG;AACH,MAAM,WAAW,4BAA4B;IAC3C,MAAM,EAAE,SAAS,CAAC;IAClB,KAAK,CAAC,EAAE,OAAO,EAAE,CAAC;IAClB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED;;;;;;;;;;;;;;;;;;;GAmBG;AACH,qBAAa,sBAAsB;IACjC,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAc;IACnC,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAS;IAEvC;;;;OAIG;gBACS,MAAM,EAAE,4BAA4B;IAmBhD;;;;;;;;;;;OAWG;IACG,KAAK,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAuB7C;;;;;;;;OAQG;YACW,IAAI;IAalB;;;;OAIG;IACH,WAAW;IAIX;;OAEG;IACH,KAAK,IAAI,IAAI;IAIb;;OAEG;IACH,OAAO,IAAI,IAAI;CAGhB"}
@@ -0,0 +1,120 @@
1
+ "use strict";
2
+ /**
3
+ * IterativeProblemSolver - An agent that iteratively solves problems using available tools
4
+ */
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.IterativeProblemSolver = void 0;
7
+ const chat_session_1 = require("../llm/chat-session");
8
+ /**
9
+ * An agent that iteratively attempts to solve a problem using available tools.
10
+ *
11
+ * This solver uses a chat-based approach to break down and solve complex problems.
12
+ * It continues attempting to solve the problem until it either succeeds,
13
+ * fails explicitly, or reaches the maximum number of iterations.
14
+ *
15
+ * @example
16
+ * ```typescript
17
+ * const broker = new LlmBroker('qwen3:32b', new OllamaGateway());
18
+ * const solver = new IterativeProblemSolver({
19
+ * broker,
20
+ * tools: [new DateResolverTool()],
21
+ * maxIterations: 5
22
+ * });
23
+ *
24
+ * const result = await solver.solve("What's the date next Friday?");
25
+ * console.log(result);
26
+ * ```
27
+ */
28
+ class IterativeProblemSolver {
29
+ chat;
30
+ maxIterations;
31
+ /**
32
+ * Create a new IterativeProblemSolver instance.
33
+ *
34
+ * @param config - Configuration options
35
+ */
36
+ constructor(config) {
37
+ const { broker, tools = [], maxIterations = 3, systemPrompt = 'You are a problem-solving assistant that can solve complex problems step by step. ' +
38
+ 'You analyze problems, break them down into smaller parts, and solve them systematically. ' +
39
+ 'If you cannot solve a problem completely in one step, you make progress and identify what to do next.', temperature = 1.0, } = config;
40
+ this.maxIterations = maxIterations;
41
+ this.chat = new chat_session_1.ChatSession(broker, {
42
+ systemPrompt,
43
+ tools,
44
+ temperature,
45
+ });
46
+ }
47
+ /**
48
+ * Execute the problem-solving process.
49
+ *
50
+ * This method runs the iterative problem-solving process, continuing until one of
51
+ * these conditions is met:
52
+ * - The task is completed successfully ("DONE")
53
+ * - The task fails explicitly ("FAIL")
54
+ * - The maximum number of iterations is reached
55
+ *
56
+ * @param problem - The problem or request to be solved
57
+ * @returns A summary of the final result, excluding the process details
58
+ */
59
+ async solve(problem) {
60
+ let iterationsRemaining = this.maxIterations;
61
+ let shouldContinue = true;
62
+ while (shouldContinue && iterationsRemaining > 0) {
63
+ const result = await this.step(problem);
64
+ if (result.toLowerCase().includes('fail')) {
65
+ shouldContinue = false;
66
+ }
67
+ else if (result.toLowerCase().includes('done')) {
68
+ shouldContinue = false;
69
+ }
70
+ else {
71
+ iterationsRemaining--;
72
+ }
73
+ }
74
+ const summary = await this.chat.send('Summarize the final result, and only the final result, without commenting on the process by which you achieved it.');
75
+ return summary;
76
+ }
77
+ /**
78
+ * Execute a single problem-solving step.
79
+ *
80
+ * This method sends a prompt to the chat session asking it to work on the user's request
81
+ * using available tools. The response should indicate success ("DONE") or failure ("FAIL").
82
+ *
83
+ * @param problem - The problem or request to be solved
84
+ * @returns The response from the chat session, indicating the step's outcome
85
+ */
86
+ async step(problem) {
87
+ const prompt = `
88
+ Given the user request:
89
+ ${problem}
90
+
91
+ Use the tools at your disposal to act on their request. You may wish to create a step-by-step plan for more complicated requests.
92
+
93
+ If you cannot provide an answer, say only "FAIL".
94
+ If you have the answer, say only "DONE".
95
+ `;
96
+ return this.chat.send(prompt);
97
+ }
98
+ /**
99
+ * Get the current chat messages (for inspection/debugging).
100
+ *
101
+ * @returns Array of messages in the chat session
102
+ */
103
+ getMessages() {
104
+ return this.chat.getMessages();
105
+ }
106
+ /**
107
+ * Clear the chat history except the system prompt.
108
+ */
109
+ clear() {
110
+ this.chat.clear();
111
+ }
112
+ /**
113
+ * Clean up resources when done.
114
+ */
115
+ dispose() {
116
+ this.chat.dispose();
117
+ }
118
+ }
119
+ exports.IterativeProblemSolver = IterativeProblemSolver;
120
+ //# sourceMappingURL=iterative-problem-solver.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"iterative-problem-solver.js","sourceRoot":"","sources":["../../src/agents/iterative-problem-solver.ts"],"names":[],"mappings":";AAAA;;GAEG;;;AAEH,sDAAkD;AAelD;;;;;;;;;;;;;;;;;;;GAmBG;AACH,MAAa,sBAAsB;IAChB,IAAI,CAAc;IAClB,aAAa,CAAS;IAEvC;;;;OAIG;IACH,YAAY,MAAoC;QAC9C,MAAM,EACJ,MAAM,EACN,KAAK,GAAG,EAAE,EACV,aAAa,GAAG,CAAC,EACjB,YAAY,GAAG,oFAAoF;YACjG,2FAA2F;YAC3F,uGAAuG,EACzG,WAAW,GAAG,GAAG,GAClB,GAAG,MAAM,CAAC;QAEX,IAAI,CAAC,aAAa,GAAG,aAAa,CAAC;QACnC,IAAI,CAAC,IAAI,GAAG,IAAI,0BAAW,CAAC,MAAM,EAAE;YAClC,YAAY;YACZ,KAAK;YACL,WAAW;SACZ,CAAC,CAAC;IACL,CAAC;IAED;;;;;;;;;;;OAWG;IACH,KAAK,CAAC,KAAK,CAAC,OAAe;QACzB,IAAI,mBAAmB,GAAG,IAAI,CAAC,aAAa,CAAC;QAC7C,IAAI,cAAc,GAAG,IAAI,CAAC;QAE1B,OAAO,cAAc,IAAI,mBAAmB,GAAG,CAAC,EAAE,CAAC;YACjD,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;YAExC,IAAI,MAAM,CAAC,WAAW,EAAE,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC;gBAC1C,cAAc,GAAG,KAAK,CAAC;YACzB,CAAC;iBAAM,IAAI,MAAM,CAAC,WAAW,EAAE,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC;gBACjD,cAAc,GAAG,KAAK,CAAC;YACzB,CAAC;iBAAM,CAAC;gBACN,mBAAmB,EAAE,CAAC;YACxB,CAAC;QACH,CAAC;QAED,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,IAAI,CAAC,IAAI,CAClC,oHAAoH,CACrH,CAAC;QAEF,OAAO,OAAO,CAAC;IACjB,CAAC;IAED;;;;;;;;OAQG;IACK,KAAK,CAAC,IAAI,CAAC,OAAe;QAChC,MAAM,MAAM,GAAG;;EAEjB,OAAO;;;;;;CAMR,CAAC;QACE,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;IAChC,CAAC;IAED;;;;OAIG;IACH,WAAW;QACT,OAAO,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC;IACjC,CAAC;IAED;;OAEG;IACH,KAAK;QACH,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC;IACpB,CAAC;IAED;;OAEG;IACH,OAAO;QACL,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC;IACtB,CAAC;CACF;AA3GD,wDA2GC"}