agent-orcha 0.0.5 → 0.0.7

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 (264) hide show
  1. package/README.md +194 -1277
  2. package/dist/lib/agents/agent-executor.d.ts +4 -2
  3. package/dist/lib/agents/agent-executor.d.ts.map +1 -1
  4. package/dist/lib/agents/agent-executor.js +68 -52
  5. package/dist/lib/agents/agent-executor.js.map +1 -1
  6. package/dist/lib/agents/agent-loader.d.ts +3 -0
  7. package/dist/lib/agents/agent-loader.d.ts.map +1 -1
  8. package/dist/lib/agents/agent-loader.js +10 -1
  9. package/dist/lib/agents/agent-loader.js.map +1 -1
  10. package/dist/lib/agents/react-loop.d.ts.map +1 -1
  11. package/dist/lib/agents/react-loop.js +180 -142
  12. package/dist/lib/agents/react-loop.js.map +1 -1
  13. package/dist/lib/agents/types.d.ts +181 -18
  14. package/dist/lib/agents/types.d.ts.map +1 -1
  15. package/dist/lib/agents/types.js +18 -2
  16. package/dist/lib/agents/types.js.map +1 -1
  17. package/dist/lib/functions/function-loader.d.ts +2 -0
  18. package/dist/lib/functions/function-loader.d.ts.map +1 -1
  19. package/dist/lib/functions/function-loader.js +10 -0
  20. package/dist/lib/functions/function-loader.js.map +1 -1
  21. package/dist/lib/integrations/email.d.ts +38 -0
  22. package/dist/lib/integrations/email.d.ts.map +1 -0
  23. package/dist/lib/integrations/email.js +249 -0
  24. package/dist/lib/integrations/email.js.map +1 -0
  25. package/dist/lib/integrations/integration-manager.d.ts +5 -0
  26. package/dist/lib/integrations/integration-manager.d.ts.map +1 -1
  27. package/dist/lib/integrations/integration-manager.js +53 -3
  28. package/dist/lib/integrations/integration-manager.js.map +1 -1
  29. package/dist/lib/integrations/types.d.ts +187 -4
  30. package/dist/lib/integrations/types.d.ts.map +1 -1
  31. package/dist/lib/integrations/types.js +24 -1
  32. package/dist/lib/integrations/types.js.map +1 -1
  33. package/dist/lib/knowledge/knowledge-store.d.ts +6 -0
  34. package/dist/lib/knowledge/knowledge-store.d.ts.map +1 -1
  35. package/dist/lib/knowledge/knowledge-store.js +71 -4
  36. package/dist/lib/knowledge/knowledge-store.js.map +1 -1
  37. package/dist/lib/knowledge/loaders/file-loaders.d.ts +8 -2
  38. package/dist/lib/knowledge/loaders/file-loaders.d.ts.map +1 -1
  39. package/dist/lib/knowledge/loaders/file-loaders.js +89 -60
  40. package/dist/lib/knowledge/loaders/file-loaders.js.map +1 -1
  41. package/dist/lib/knowledge/loaders/web-loader.d.ts +12 -3
  42. package/dist/lib/knowledge/loaders/web-loader.d.ts.map +1 -1
  43. package/dist/lib/knowledge/loaders/web-loader.js +56 -22
  44. package/dist/lib/knowledge/loaders/web-loader.js.map +1 -1
  45. package/dist/lib/knowledge/types.d.ts +56 -20
  46. package/dist/lib/knowledge/types.d.ts.map +1 -1
  47. package/dist/lib/knowledge/types.js +18 -3
  48. package/dist/lib/knowledge/types.js.map +1 -1
  49. package/dist/lib/llm/llm-call-logger.d.ts +3 -1
  50. package/dist/lib/llm/llm-call-logger.d.ts.map +1 -1
  51. package/dist/lib/llm/llm-call-logger.js +31 -26
  52. package/dist/lib/llm/llm-call-logger.js.map +1 -1
  53. package/dist/lib/llm/llm-config.d.ts +8 -0
  54. package/dist/lib/llm/llm-config.d.ts.map +1 -1
  55. package/dist/lib/llm/llm-config.js +3 -1
  56. package/dist/lib/llm/llm-config.js.map +1 -1
  57. package/dist/lib/llm/llm-factory.d.ts.map +1 -1
  58. package/dist/lib/llm/llm-factory.js +3 -0
  59. package/dist/lib/llm/llm-factory.js.map +1 -1
  60. package/dist/lib/llm/providers/anthropic-chat-model.d.ts +5 -1
  61. package/dist/lib/llm/providers/anthropic-chat-model.d.ts.map +1 -1
  62. package/dist/lib/llm/providers/anthropic-chat-model.js +118 -42
  63. package/dist/lib/llm/providers/anthropic-chat-model.js.map +1 -1
  64. package/dist/lib/llm/providers/gemini-chat-model.d.ts +3 -2
  65. package/dist/lib/llm/providers/gemini-chat-model.d.ts.map +1 -1
  66. package/dist/lib/llm/providers/gemini-chat-model.js +83 -24
  67. package/dist/lib/llm/providers/gemini-chat-model.js.map +1 -1
  68. package/dist/lib/llm/providers/openai-chat-model.d.ts +10 -1
  69. package/dist/lib/llm/providers/openai-chat-model.d.ts.map +1 -1
  70. package/dist/lib/llm/providers/openai-chat-model.js +233 -32
  71. package/dist/lib/llm/providers/openai-chat-model.js.map +1 -1
  72. package/dist/lib/logger.d.ts.map +1 -1
  73. package/dist/lib/logger.js +0 -1
  74. package/dist/lib/logger.js.map +1 -1
  75. package/dist/lib/mcp/mcp-client.d.ts.map +1 -1
  76. package/dist/lib/mcp/mcp-client.js +5 -3
  77. package/dist/lib/mcp/mcp-client.js.map +1 -1
  78. package/dist/lib/mcp/types.d.ts +0 -9
  79. package/dist/lib/mcp/types.d.ts.map +1 -1
  80. package/dist/lib/mcp/types.js +1 -2
  81. package/dist/lib/mcp/types.js.map +1 -1
  82. package/dist/lib/memory/memory-manager.d.ts +1 -0
  83. package/dist/lib/memory/memory-manager.d.ts.map +1 -1
  84. package/dist/lib/memory/memory-manager.js +9 -0
  85. package/dist/lib/memory/memory-manager.js.map +1 -1
  86. package/dist/lib/orchestrator.d.ts +2 -8
  87. package/dist/lib/orchestrator.d.ts.map +1 -1
  88. package/dist/lib/orchestrator.js +96 -3
  89. package/dist/lib/orchestrator.js.map +1 -1
  90. package/dist/lib/sandbox/cdp-client.d.ts +14 -0
  91. package/dist/lib/sandbox/cdp-client.d.ts.map +1 -0
  92. package/dist/lib/sandbox/cdp-client.js +113 -0
  93. package/dist/lib/sandbox/cdp-client.js.map +1 -0
  94. package/dist/lib/sandbox/html-to-markdown.d.ts +9 -1
  95. package/dist/lib/sandbox/html-to-markdown.d.ts.map +1 -1
  96. package/dist/lib/sandbox/html-to-markdown.js +67 -10
  97. package/dist/lib/sandbox/html-to-markdown.js.map +1 -1
  98. package/dist/lib/sandbox/index.d.ts +5 -0
  99. package/dist/lib/sandbox/index.d.ts.map +1 -1
  100. package/dist/lib/sandbox/index.js +4 -0
  101. package/dist/lib/sandbox/index.js.map +1 -1
  102. package/dist/lib/sandbox/page-readiness.d.ts +37 -0
  103. package/dist/lib/sandbox/page-readiness.d.ts.map +1 -0
  104. package/dist/lib/sandbox/page-readiness.js +235 -0
  105. package/dist/lib/sandbox/page-readiness.js.map +1 -0
  106. package/dist/lib/sandbox/sandbox-browser.d.ts +4 -0
  107. package/dist/lib/sandbox/sandbox-browser.d.ts.map +1 -0
  108. package/dist/lib/sandbox/sandbox-browser.js +303 -0
  109. package/dist/lib/sandbox/sandbox-browser.js.map +1 -0
  110. package/dist/lib/sandbox/sandbox-file.d.ts +4 -0
  111. package/dist/lib/sandbox/sandbox-file.d.ts.map +1 -0
  112. package/dist/lib/sandbox/sandbox-file.js +168 -0
  113. package/dist/lib/sandbox/sandbox-file.js.map +1 -0
  114. package/dist/lib/sandbox/sandbox-shell.d.ts +4 -0
  115. package/dist/lib/sandbox/sandbox-shell.d.ts.map +1 -0
  116. package/dist/lib/sandbox/sandbox-shell.js +93 -0
  117. package/dist/lib/sandbox/sandbox-shell.js.map +1 -0
  118. package/dist/lib/sandbox/sandbox-web.d.ts.map +1 -1
  119. package/dist/lib/sandbox/sandbox-web.js +37 -22
  120. package/dist/lib/sandbox/sandbox-web.js.map +1 -1
  121. package/dist/lib/sandbox/types.d.ts +9 -0
  122. package/dist/lib/sandbox/types.d.ts.map +1 -1
  123. package/dist/lib/sandbox/types.js +1 -0
  124. package/dist/lib/sandbox/types.js.map +1 -1
  125. package/dist/lib/sandbox/vision-browser.d.ts +4 -0
  126. package/dist/lib/sandbox/vision-browser.d.ts.map +1 -0
  127. package/dist/lib/sandbox/vision-browser.js +289 -0
  128. package/dist/lib/sandbox/vision-browser.js.map +1 -0
  129. package/dist/lib/skills/skill-loader.d.ts +2 -0
  130. package/dist/lib/skills/skill-loader.d.ts.map +1 -1
  131. package/dist/lib/skills/skill-loader.js +12 -1
  132. package/dist/lib/skills/skill-loader.js.map +1 -1
  133. package/dist/lib/tasks/task-manager.d.ts +3 -1
  134. package/dist/lib/tasks/task-manager.d.ts.map +1 -1
  135. package/dist/lib/tasks/task-manager.js +11 -0
  136. package/dist/lib/tasks/task-manager.js.map +1 -1
  137. package/dist/lib/tasks/task-store.d.ts +1 -1
  138. package/dist/lib/tasks/task-store.d.ts.map +1 -1
  139. package/dist/lib/tasks/task-store.js.map +1 -1
  140. package/dist/lib/tasks/types.d.ts +18 -0
  141. package/dist/lib/tasks/types.d.ts.map +1 -1
  142. package/dist/lib/tools/built-in/integration-tools.d.ts +4 -0
  143. package/dist/lib/tools/built-in/integration-tools.d.ts.map +1 -0
  144. package/dist/lib/tools/built-in/integration-tools.js +47 -0
  145. package/dist/lib/tools/built-in/integration-tools.js.map +1 -0
  146. package/dist/lib/tools/built-in/knowledge-entity-lookup.tool.d.ts.map +1 -1
  147. package/dist/lib/tools/built-in/knowledge-entity-lookup.tool.js +12 -6
  148. package/dist/lib/tools/built-in/knowledge-entity-lookup.tool.js.map +1 -1
  149. package/dist/lib/tools/built-in/knowledge-sql.tool.d.ts.map +1 -1
  150. package/dist/lib/tools/built-in/knowledge-sql.tool.js +4 -3
  151. package/dist/lib/tools/built-in/knowledge-sql.tool.js.map +1 -1
  152. package/dist/lib/tools/built-in/query-validators.d.ts.map +1 -1
  153. package/dist/lib/tools/built-in/query-validators.js +4 -0
  154. package/dist/lib/tools/built-in/query-validators.js.map +1 -1
  155. package/dist/lib/tools/workspace/workspace-tools.d.ts +1 -0
  156. package/dist/lib/tools/workspace/workspace-tools.d.ts.map +1 -1
  157. package/dist/lib/tools/workspace/workspace-tools.js +39 -0
  158. package/dist/lib/tools/workspace/workspace-tools.js.map +1 -1
  159. package/dist/lib/triggers/cron-trigger.d.ts +1 -1
  160. package/dist/lib/triggers/cron-trigger.d.ts.map +1 -1
  161. package/dist/lib/triggers/cron-trigger.js.map +1 -1
  162. package/dist/lib/triggers/trigger-manager.d.ts +1 -0
  163. package/dist/lib/triggers/trigger-manager.d.ts.map +1 -1
  164. package/dist/lib/triggers/trigger-manager.js +26 -0
  165. package/dist/lib/triggers/trigger-manager.js.map +1 -1
  166. package/dist/lib/triggers/webhook-trigger.d.ts +1 -1
  167. package/dist/lib/triggers/webhook-trigger.d.ts.map +1 -1
  168. package/dist/lib/triggers/webhook-trigger.js.map +1 -1
  169. package/dist/lib/types/llm-types.d.ts +22 -4
  170. package/dist/lib/types/llm-types.d.ts.map +1 -1
  171. package/dist/lib/types/llm-types.js +50 -0
  172. package/dist/lib/types/llm-types.js.map +1 -1
  173. package/dist/lib/types/tool-factory.d.ts +2 -2
  174. package/dist/lib/types/tool-factory.d.ts.map +1 -1
  175. package/dist/lib/types/tool-factory.js.map +1 -1
  176. package/dist/lib/utils/env-substitution.d.ts +6 -0
  177. package/dist/lib/utils/env-substitution.d.ts.map +1 -0
  178. package/dist/lib/utils/env-substitution.js +15 -0
  179. package/dist/lib/utils/env-substitution.js.map +1 -0
  180. package/dist/lib/workflows/react-workflow-executor.js +3 -3
  181. package/dist/lib/workflows/react-workflow-executor.js.map +1 -1
  182. package/dist/lib/workflows/types.d.ts +10 -10
  183. package/dist/lib/workflows/workflow-loader.d.ts +3 -0
  184. package/dist/lib/workflows/workflow-loader.d.ts.map +1 -1
  185. package/dist/lib/workflows/workflow-loader.js +10 -1
  186. package/dist/lib/workflows/workflow-loader.js.map +1 -1
  187. package/dist/public/chat.html +114 -0
  188. package/dist/public/index.html +157 -0
  189. package/dist/public/src/components/AgentComposer.js +807 -0
  190. package/dist/public/src/components/AgentsView.js +740 -317
  191. package/dist/public/src/components/AppRoot.js +30 -5
  192. package/dist/public/src/components/GraphView.js +372 -288
  193. package/dist/public/src/components/IdeView.js +163 -7
  194. package/dist/public/src/components/MonitorView.js +139 -1
  195. package/dist/public/src/components/StandaloneChat.js +889 -0
  196. package/dist/public/src/components/WorkflowsView.js +180 -28
  197. package/dist/public/src/services/ApiService.js +7 -2
  198. package/dist/public/src/services/SessionStore.js +83 -0
  199. package/dist/public/src/store.js +0 -2
  200. package/dist/public/src/utils/markdown.js +13 -0
  201. package/dist/src/cli/index.js +7 -4
  202. package/dist/src/cli/index.js.map +1 -1
  203. package/dist/src/middleware/auth.d.ts.map +1 -1
  204. package/dist/src/middleware/auth.js +28 -6
  205. package/dist/src/middleware/auth.js.map +1 -1
  206. package/dist/src/middleware/rate-limit.d.ts +8 -0
  207. package/dist/src/middleware/rate-limit.d.ts.map +1 -0
  208. package/dist/src/middleware/rate-limit.js +21 -0
  209. package/dist/src/middleware/rate-limit.js.map +1 -0
  210. package/dist/src/routes/agents.route.d.ts.map +1 -1
  211. package/dist/src/routes/agents.route.js +136 -10
  212. package/dist/src/routes/agents.route.js.map +1 -1
  213. package/dist/src/routes/chat.route.d.ts +3 -0
  214. package/dist/src/routes/chat.route.d.ts.map +1 -0
  215. package/dist/src/routes/chat.route.js +155 -0
  216. package/dist/src/routes/chat.route.js.map +1 -0
  217. package/dist/src/routes/files.route.d.ts.map +1 -1
  218. package/dist/src/routes/files.route.js +37 -2
  219. package/dist/src/routes/files.route.js.map +1 -1
  220. package/dist/src/routes/llm.route.d.ts.map +1 -1
  221. package/dist/src/routes/llm.route.js +40 -5
  222. package/dist/src/routes/llm.route.js.map +1 -1
  223. package/dist/src/routes/tasks.route.d.ts.map +1 -1
  224. package/dist/src/routes/tasks.route.js +15 -1
  225. package/dist/src/routes/tasks.route.js.map +1 -1
  226. package/dist/src/routes/vnc.route.d.ts +3 -0
  227. package/dist/src/routes/vnc.route.d.ts.map +1 -0
  228. package/dist/src/routes/vnc.route.js +49 -0
  229. package/dist/src/routes/vnc.route.js.map +1 -0
  230. package/dist/src/server.d.ts.map +1 -1
  231. package/dist/src/server.js +5 -1
  232. package/dist/src/server.js.map +1 -1
  233. package/dist/templates/Demo.md +152 -0
  234. package/dist/templates/README.md +12 -3
  235. package/dist/templates/agents/architect.agent.yaml +20 -12
  236. package/dist/templates/agents/chatbot.agent.yaml +23 -26
  237. package/dist/templates/agents/corporate.agent.yaml +65 -0
  238. package/dist/templates/agents/investment-analyst.agent.yaml +80 -0
  239. package/dist/templates/agents/music-librarian.agent.yaml +70 -0
  240. package/dist/templates/agents/network-security.agent.yaml +82 -0
  241. package/dist/templates/agents/transport-security.agent.yaml +70 -0
  242. package/dist/templates/agents/web-engineer.agent.yaml +99 -0
  243. package/dist/templates/agents/web-pilot.agent.yaml +58 -0
  244. package/dist/templates/knowledge/music-store/LICENSE.md +11 -0
  245. package/dist/templates/knowledge/music-store/musicstore.sqlite +0 -0
  246. package/dist/templates/knowledge/music-store/tables.png +0 -0
  247. package/dist/templates/knowledge/music-store.knowledge.yaml +138 -0
  248. package/dist/templates/knowledge/org-chart/personnel.csv +21 -21
  249. package/dist/templates/knowledge/org-chart.knowledge.yaml +4 -0
  250. package/dist/templates/knowledge/pet-store.knowledge.yaml +3 -0
  251. package/dist/templates/knowledge/security-incidents/incidents.json +55935 -0
  252. package/dist/templates/knowledge/security-incidents.knowledge.yaml +46 -0
  253. package/dist/templates/knowledge/{example.knowledge.yaml → transcripts.knowledge.yaml} +9 -5
  254. package/dist/templates/knowledge/transport-ot/systems.csv +117 -0
  255. package/dist/templates/knowledge/transport-ot.knowledge.yaml +55 -0
  256. package/dist/templates/llm.json +7 -30
  257. package/dist/templates/mcp.json +7 -4
  258. package/dist/templates/skills/orcha-builder/SKILL.md +106 -226
  259. package/dist/templates/skills/pii-guard/SKILL.md +22 -0
  260. package/dist/templates/skills/sandbox/SKILL.md +25 -48
  261. package/dist/templates/skills/web-pilot/SKILL.md +51 -0
  262. package/package.json +8 -3
  263. package/dist/templates/agents/knowledge-broker.agent.yaml +0 -39
  264. package/dist/templates/agents/sandbox.agent.yaml +0 -56
@@ -1,154 +1,192 @@
1
- import { aiMessage, toolMessage } from "../types/llm-types.js";
1
+ import { aiMessage, toolMessage, stripOldImages } from "../types/llm-types.js";
2
+ import { logger } from "../logger.js";
3
+ function countImages(messages) {
4
+ let count = 0;
5
+ for (const msg of messages) {
6
+ if (Array.isArray(msg.content)) {
7
+ for (const part of msg.content) {
8
+ if (part.type === 'image')
9
+ count++;
10
+ }
11
+ }
12
+ }
13
+ return count;
14
+ }
15
+ function estimateContextChars(messages) {
16
+ let chars = 0;
17
+ for (const msg of messages) {
18
+ if (typeof msg.content === 'string') {
19
+ chars += msg.content.length;
20
+ }
21
+ else if (Array.isArray(msg.content)) {
22
+ for (const part of msg.content) {
23
+ if (part.type === 'text')
24
+ chars += part.text.length;
25
+ else if (part.type === 'image')
26
+ chars += part.data.length;
27
+ }
28
+ }
29
+ }
30
+ return chars;
31
+ }
32
+ const MAX_NO_TOOL_RETRIES = 3;
33
+ /**
34
+ * Single source of truth for the ReAct loop.
35
+ * Both invoke() and streamEvents() delegate here.
36
+ */
37
+ async function* runLoop(allMessages, modelWithTools, toolMap, options) {
38
+ const maxIterations = options?.recursionLimit ?? 200;
39
+ let noToolStreak = 0;
40
+ let totalInputTokens = 0;
41
+ let totalOutputTokens = 0;
42
+ for (let i = 0; i < maxIterations; i++) {
43
+ if (options?.signal?.aborted) {
44
+ throw new DOMException('Aborted', 'AbortError');
45
+ }
46
+ const prepared = stripOldImages(allMessages);
47
+ const contextChars = estimateContextChars(prepared);
48
+ const contextKB = (contextChars / 1024).toFixed(1);
49
+ const images = countImages(prepared);
50
+ logger.info(`[ReactLoop] iteration ${i + 1} | messages: ${allMessages.length} | images: ${images} | context: ${contextKB} KB (~${Math.round(contextChars / 4).toLocaleString()} tokens)`);
51
+ yield {
52
+ event: 'on_react_iteration',
53
+ data: { iteration: i + 1, messageCount: allMessages.length, imageCount: images, contextChars, inputTokens: totalInputTokens, outputTokens: totalOutputTokens },
54
+ };
55
+ // Stream LLM response
56
+ const llmStart = Date.now();
57
+ let accumulatedContent = '';
58
+ let accumulatedReasoning = '';
59
+ let accumulatedToolCalls = [];
60
+ let usageMetadata;
61
+ for await (const chunk of modelWithTools.stream(prepared, { signal: options?.signal })) {
62
+ if (chunk.content) {
63
+ accumulatedContent += chunk.content;
64
+ yield { event: 'on_chat_model_stream', data: { chunk: { content: chunk.content } } };
65
+ }
66
+ if (chunk.reasoning) {
67
+ accumulatedReasoning += chunk.reasoning;
68
+ yield { event: 'on_chat_model_stream', data: { chunk: { reasoning: chunk.reasoning } } };
69
+ }
70
+ if (chunk.tool_calls?.length) {
71
+ accumulatedToolCalls = chunk.tool_calls;
72
+ }
73
+ if (chunk.usage_metadata) {
74
+ usageMetadata = chunk.usage_metadata;
75
+ }
76
+ }
77
+ if (usageMetadata) {
78
+ totalInputTokens += usageMetadata.input_tokens;
79
+ totalOutputTokens += usageMetadata.output_tokens;
80
+ }
81
+ const llmTime = Date.now() - llmStart;
82
+ if (accumulatedReasoning) {
83
+ logger.debug(`[ReactLoop] iteration ${i + 1} — reasoning/thinking: ${accumulatedReasoning.length} chars`);
84
+ }
85
+ yield {
86
+ event: 'on_chat_model_end',
87
+ data: {
88
+ output: { content: accumulatedContent, tool_calls: accumulatedToolCalls, usage_metadata: usageMetadata },
89
+ },
90
+ };
91
+ // Store reasoning in AI message content so the model retains memory of
92
+ // what it observed/thought across iterations.
93
+ const messageContent = [accumulatedReasoning, accumulatedContent].filter(Boolean).join('\n\n');
94
+ const hasContent = messageContent.trim().length > 0;
95
+ const hasToolCalls = accumulatedToolCalls.length > 0;
96
+ // Only push AI message if it has content or tool calls — empty messages
97
+ // confuse small LLMs (they see piling content:null and keep returning null)
98
+ if (hasContent || hasToolCalls) {
99
+ allMessages.push(aiMessage(messageContent, hasToolCalls ? accumulatedToolCalls : undefined));
100
+ }
101
+ // No tool calls — accept substantial text as final answer, nudge otherwise
102
+ if (!hasToolCalls) {
103
+ logger.info(`[ReactLoop] iteration ${i + 1} timing — LLM: ${(llmTime / 1000).toFixed(1)}s | no tools`);
104
+ if (accumulatedContent.trim().length > 50 || (accumulatedReasoning && accumulatedContent.trim())) {
105
+ logger.info(`[ReactLoop] iteration ${i + 1} — text response (${accumulatedContent.trim().length} chars), accepting as final answer`);
106
+ break;
107
+ }
108
+ noToolStreak++;
109
+ if (noToolStreak >= MAX_NO_TOOL_RETRIES) {
110
+ logger.warn(`[ReactLoop] iteration ${i + 1} — no tool calls after ${noToolStreak} attempts, accepting as final answer`);
111
+ break;
112
+ }
113
+ // Nudge the model based on context — small/local LLMs sometimes return
114
+ // empty responses after tool results and need explicit guidance
115
+ const lastMsg = allMessages[allMessages.length - 1];
116
+ const nudge = lastMsg?.role === 'tool'
117
+ ? 'The tool above returned results. Please respond to the user based on that data.'
118
+ : 'Please continue. Either call a tool or provide your response.';
119
+ logger.warn(`[ReactLoop] iteration ${i + 1} — empty response (attempt ${noToolStreak}/${MAX_NO_TOOL_RETRIES}), nudging model`);
120
+ allMessages.push({ role: 'human', content: nudge });
121
+ continue;
122
+ }
123
+ noToolStreak = 0;
124
+ // Execute tool calls in parallel
125
+ if (options?.signal?.aborted) {
126
+ throw new DOMException('Aborted', 'AbortError');
127
+ }
128
+ const toolStart = Date.now();
129
+ const toolEntries = accumulatedToolCalls.map((tc) => ({
130
+ tc,
131
+ runId: `run_${Math.random().toString(36).substring(7)}`,
132
+ tool: toolMap.get(tc.name),
133
+ }));
134
+ // Emit all on_tool_start events before execution
135
+ const pendingEvents = [];
136
+ for (const { tc, runId, tool } of toolEntries) {
137
+ if (!tool) {
138
+ pendingEvents.push({ event: 'on_tool_start', name: tc.name, run_id: runId, data: { input: tc.args } });
139
+ pendingEvents.push({ event: 'on_tool_end', name: tc.name, run_id: runId, data: { output: `Tool "${tc.name}" not found` } });
140
+ }
141
+ else {
142
+ pendingEvents.push({ event: 'on_tool_start', name: tc.name, run_id: runId, data: { input: tc.args } });
143
+ }
144
+ }
145
+ for (const evt of pendingEvents)
146
+ yield evt;
147
+ // Run all tool calls concurrently
148
+ const results = await Promise.all(toolEntries.map(async ({ tc, runId, tool }) => {
149
+ if (!tool) {
150
+ return { tc, runId, output: `Tool "${tc.name}" not found`, error: false };
151
+ }
152
+ try {
153
+ const result = await tool.invoke(tc.args);
154
+ return { tc, runId, output: result, error: false };
155
+ }
156
+ catch (error) {
157
+ if (error instanceof Error && error.name === 'NodeInterrupt')
158
+ throw error;
159
+ const errMsg = error instanceof Error ? error.message : String(error);
160
+ return { tc, runId, output: `Error: ${errMsg}`, error: true };
161
+ }
162
+ }));
163
+ // Push messages and emit on_tool_end events in original order
164
+ for (const { tc, runId, output, error } of results) {
165
+ const tool = toolMap.get(tc.name);
166
+ if (!tool) {
167
+ allMessages.push(toolMessage(output, tc.id, tc.name));
168
+ continue; // on_tool_end already emitted above
169
+ }
170
+ allMessages.push(toolMessage(error ? output : output, tc.id, tc.name));
171
+ yield { event: 'on_tool_end', name: tc.name, run_id: runId, data: { output } };
172
+ }
173
+ const toolTime = Date.now() - toolStart;
174
+ logger.info(`[ReactLoop] iteration ${i + 1} timing — LLM: ${(llmTime / 1000).toFixed(1)}s | Tools: ${(toolTime / 1000).toFixed(1)}s (${accumulatedToolCalls.length} calls)`);
175
+ }
176
+ }
2
177
  export function createReActAgent(config) {
3
178
  const { model, tools, systemPrompt } = config;
4
179
  const toolMap = new Map(tools.map((t) => [t.name, t]));
5
180
  const modelWithTools = tools.length > 0 ? model.bindTools(tools) : model;
6
181
  return {
7
182
  async invoke(input, options) {
8
- const maxIterations = options?.recursionLimit ?? 200;
9
- const allMessages = [
10
- { role: 'system', content: systemPrompt },
11
- ...input.messages,
12
- ];
13
- for (let i = 0; i < maxIterations; i++) {
14
- if (options?.signal?.aborted) {
15
- throw new DOMException('Aborted', 'AbortError');
16
- }
17
- const response = await modelWithTools.invoke(allMessages);
18
- allMessages.push(aiMessage(response.content, response.tool_calls));
19
- // No tool calls = final answer
20
- if (!response.tool_calls || response.tool_calls.length === 0) {
21
- break;
22
- }
23
- // Execute each tool call
24
- for (const tc of response.tool_calls) {
25
- if (options?.signal?.aborted) {
26
- throw new DOMException('Aborted', 'AbortError');
27
- }
28
- const tool = toolMap.get(tc.name);
29
- if (!tool) {
30
- allMessages.push(toolMessage(`Tool "${tc.name}" not found`, tc.id, tc.name));
31
- continue;
32
- }
33
- try {
34
- const result = await tool.invoke(tc.args);
35
- allMessages.push(toolMessage(result, tc.id, tc.name));
36
- }
37
- catch (error) {
38
- // Re-throw NodeInterrupt for HITL support
39
- if (error instanceof Error && error.name === 'NodeInterrupt') {
40
- throw error;
41
- }
42
- const errMsg = error instanceof Error ? error.message : String(error);
43
- allMessages.push(toolMessage(`Error: ${errMsg}`, tc.id, tc.name));
44
- }
45
- }
46
- }
183
+ const allMessages = [{ role: 'system', content: systemPrompt }, ...input.messages];
184
+ for await (const _ of runLoop(allMessages, modelWithTools, toolMap, options)) { /* consume events */ }
47
185
  return { messages: allMessages };
48
186
  },
49
187
  async *streamEvents(input, options) {
50
- const maxIterations = options?.recursionLimit ?? 200;
51
- const allMessages = [
52
- { role: 'system', content: systemPrompt },
53
- ...input.messages,
54
- ];
55
- for (let i = 0; i < maxIterations; i++) {
56
- if (options?.signal?.aborted) {
57
- throw new DOMException('Aborted', 'AbortError');
58
- }
59
- // Stream the LLM response
60
- let accumulatedContent = '';
61
- let accumulatedToolCalls = [];
62
- let usageMetadata;
63
- for await (const chunk of modelWithTools.stream(allMessages, {
64
- signal: options?.signal,
65
- })) {
66
- if (chunk.content) {
67
- accumulatedContent += chunk.content;
68
- yield {
69
- event: 'on_chat_model_stream',
70
- data: { chunk: { content: chunk.content } },
71
- };
72
- }
73
- if (chunk.tool_calls?.length) {
74
- accumulatedToolCalls = chunk.tool_calls;
75
- }
76
- if (chunk.usage_metadata) {
77
- usageMetadata = chunk.usage_metadata;
78
- }
79
- }
80
- // Emit model end event with usage
81
- yield {
82
- event: 'on_chat_model_end',
83
- data: {
84
- output: {
85
- content: accumulatedContent,
86
- tool_calls: accumulatedToolCalls,
87
- usage_metadata: usageMetadata,
88
- },
89
- },
90
- };
91
- allMessages.push(aiMessage(accumulatedContent, accumulatedToolCalls.length > 0 ? accumulatedToolCalls : undefined));
92
- // No tool calls = final answer
93
- if (accumulatedToolCalls.length === 0) {
94
- break;
95
- }
96
- // Execute each tool call
97
- for (const tc of accumulatedToolCalls) {
98
- if (options?.signal?.aborted) {
99
- throw new DOMException('Aborted', 'AbortError');
100
- }
101
- const runId = `run_${Math.random().toString(36).substring(7)}`;
102
- const tool = toolMap.get(tc.name);
103
- if (!tool) {
104
- const errorResult = `Tool "${tc.name}" not found`;
105
- allMessages.push(toolMessage(errorResult, tc.id, tc.name));
106
- yield {
107
- event: 'on_tool_start',
108
- name: tc.name,
109
- run_id: runId,
110
- data: { input: tc.args },
111
- };
112
- yield {
113
- event: 'on_tool_end',
114
- name: tc.name,
115
- run_id: runId,
116
- data: { output: errorResult },
117
- };
118
- continue;
119
- }
120
- yield {
121
- event: 'on_tool_start',
122
- name: tc.name,
123
- run_id: runId,
124
- data: { input: tc.args },
125
- };
126
- try {
127
- const result = await tool.invoke(tc.args);
128
- allMessages.push(toolMessage(result, tc.id, tc.name));
129
- yield {
130
- event: 'on_tool_end',
131
- name: tc.name,
132
- run_id: runId,
133
- data: { output: result },
134
- };
135
- }
136
- catch (error) {
137
- // Re-throw NodeInterrupt for HITL support
138
- if (error instanceof Error && error.name === 'NodeInterrupt') {
139
- throw error;
140
- }
141
- const errMsg = error instanceof Error ? error.message : String(error);
142
- allMessages.push(toolMessage(`Error: ${errMsg}`, tc.id, tc.name));
143
- yield {
144
- event: 'on_tool_end',
145
- name: tc.name,
146
- run_id: runId,
147
- data: { output: `Error: ${errMsg}` },
148
- };
149
- }
150
- }
151
- }
188
+ const allMessages = [{ role: 'system', content: systemPrompt }, ...input.messages];
189
+ yield* runLoop(allMessages, modelWithTools, toolMap, options);
152
190
  },
153
191
  };
154
192
  }
@@ -1 +1 @@
1
- {"version":3,"file":"react-loop.js","sourceRoot":"","sources":["../../../lib/agents/react-loop.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"react-loop.js","sourceRoot":"","sources":["../../../lib/agents/react-loop.ts"],"names":[],"mappings":"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"}