@rudderjs/ai 1.17.3 → 1.18.1

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 (377) hide show
  1. package/README.md +19 -1274
  2. package/dist/budget-orm/index.d.ts +1 -95
  3. package/dist/budget-orm/index.d.ts.map +1 -1
  4. package/dist/budget-orm/index.js +4 -176
  5. package/dist/budget-orm/index.js.map +1 -1
  6. package/dist/chat-mentions.d.ts +1 -58
  7. package/dist/chat-mentions.d.ts.map +1 -1
  8. package/dist/chat-mentions.js +4 -80
  9. package/dist/chat-mentions.js.map +1 -1
  10. package/dist/commands/ai-eval.d.ts +1 -92
  11. package/dist/commands/ai-eval.d.ts.map +1 -1
  12. package/dist/commands/ai-eval.js +4 -377
  13. package/dist/commands/ai-eval.js.map +1 -1
  14. package/dist/commands/make-agent.d.ts +1 -2
  15. package/dist/commands/make-agent.d.ts.map +1 -1
  16. package/dist/commands/make-agent.js +4 -22
  17. package/dist/commands/make-agent.js.map +1 -1
  18. package/dist/computer-use/index.d.ts +1 -52
  19. package/dist/computer-use/index.d.ts.map +1 -1
  20. package/dist/computer-use/index.js +4 -50
  21. package/dist/computer-use/index.js.map +1 -1
  22. package/dist/conversation-orm/index.d.ts +1 -108
  23. package/dist/conversation-orm/index.d.ts.map +1 -1
  24. package/dist/conversation-orm/index.js +4 -214
  25. package/dist/conversation-orm/index.js.map +1 -1
  26. package/dist/doctor.d.ts +1 -1
  27. package/dist/doctor.d.ts.map +1 -1
  28. package/dist/doctor.js +4 -65
  29. package/dist/doctor.js.map +1 -1
  30. package/dist/eval/index.d.ts +1 -270
  31. package/dist/eval/index.d.ts.map +1 -1
  32. package/dist/eval/index.js +4 -509
  33. package/dist/eval/index.js.map +1 -1
  34. package/dist/gateway/index.d.ts +1 -10
  35. package/dist/gateway/index.d.ts.map +1 -1
  36. package/dist/gateway/index.js +4 -10
  37. package/dist/gateway/index.js.map +1 -1
  38. package/dist/index.d.ts +1 -66
  39. package/dist/index.d.ts.map +1 -1
  40. package/dist/index.js +4 -78
  41. package/dist/index.js.map +1 -1
  42. package/dist/mcp/index.d.ts +1 -15
  43. package/dist/mcp/index.d.ts.map +1 -1
  44. package/dist/mcp/index.js +4 -14
  45. package/dist/mcp/index.js.map +1 -1
  46. package/dist/memory-embedding/index.d.ts +1 -120
  47. package/dist/memory-embedding/index.d.ts.map +1 -1
  48. package/dist/memory-embedding/index.js +4 -228
  49. package/dist/memory-embedding/index.js.map +1 -1
  50. package/dist/memory-orm/index.d.ts +1 -117
  51. package/dist/memory-orm/index.d.ts.map +1 -1
  52. package/dist/memory-orm/index.js +4 -186
  53. package/dist/memory-orm/index.js.map +1 -1
  54. package/dist/node/index.d.ts +1 -2
  55. package/dist/node/index.d.ts.map +1 -1
  56. package/dist/node/index.js +4 -2
  57. package/dist/node/index.js.map +1 -1
  58. package/dist/observers.d.ts +1 -129
  59. package/dist/observers.d.ts.map +1 -1
  60. package/dist/observers.js +4 -39
  61. package/dist/observers.js.map +1 -1
  62. package/dist/react/index.d.ts +1 -15
  63. package/dist/react/index.d.ts.map +1 -1
  64. package/dist/react/index.js +4 -15
  65. package/dist/react/index.js.map +1 -1
  66. package/dist/server/index.d.ts +1 -1
  67. package/dist/server/index.d.ts.map +1 -1
  68. package/dist/server/index.js +4 -1
  69. package/dist/server/index.js.map +1 -1
  70. package/package.json +9 -13
  71. package/boost/guidelines.md +0 -260
  72. package/boost/skills/ai-agents/SKILL.md +0 -240
  73. package/boost/skills/ai-tools/SKILL.md +0 -260
  74. package/dist/agent-run-store.d.ts +0 -161
  75. package/dist/agent-run-store.d.ts.map +0 -1
  76. package/dist/agent-run-store.js +0 -98
  77. package/dist/agent-run-store.js.map +0 -1
  78. package/dist/agent-sse.d.ts +0 -153
  79. package/dist/agent-sse.d.ts.map +0 -1
  80. package/dist/agent-sse.js +0 -282
  81. package/dist/agent-sse.js.map +0 -1
  82. package/dist/agent.d.ts +0 -508
  83. package/dist/agent.d.ts.map +0 -1
  84. package/dist/agent.js +0 -1538
  85. package/dist/agent.js.map +0 -1
  86. package/dist/attachment.d.ts +0 -31
  87. package/dist/attachment.d.ts.map +0 -1
  88. package/dist/attachment.js +0 -89
  89. package/dist/attachment.js.map +0 -1
  90. package/dist/audio.d.ts +0 -45
  91. package/dist/audio.d.ts.map +0 -1
  92. package/dist/audio.js +0 -93
  93. package/dist/audio.js.map +0 -1
  94. package/dist/base64.d.ts +0 -7
  95. package/dist/base64.d.ts.map +0 -1
  96. package/dist/base64.js +0 -39
  97. package/dist/base64.js.map +0 -1
  98. package/dist/budget/pricing.d.ts +0 -124
  99. package/dist/budget/pricing.d.ts.map +0 -1
  100. package/dist/budget/pricing.js +0 -175
  101. package/dist/budget/pricing.js.map +0 -1
  102. package/dist/budget/storage.d.ts +0 -104
  103. package/dist/budget/storage.d.ts.map +0 -1
  104. package/dist/budget/storage.js +0 -0
  105. package/dist/budget/storage.js.map +0 -1
  106. package/dist/budget/with-budget.d.ts +0 -119
  107. package/dist/budget/with-budget.d.ts.map +0 -1
  108. package/dist/budget/with-budget.js +0 -175
  109. package/dist/budget/with-budget.js.map +0 -1
  110. package/dist/cached-embedding.d.ts +0 -14
  111. package/dist/cached-embedding.d.ts.map +0 -1
  112. package/dist/cached-embedding.js +0 -44
  113. package/dist/cached-embedding.js.map +0 -1
  114. package/dist/computer-use/actions.d.ts +0 -214
  115. package/dist/computer-use/actions.d.ts.map +0 -1
  116. package/dist/computer-use/actions.js +0 -48
  117. package/dist/computer-use/actions.js.map +0 -1
  118. package/dist/computer-use/errors.d.ts +0 -57
  119. package/dist/computer-use/errors.d.ts.map +0 -1
  120. package/dist/computer-use/errors.js +0 -76
  121. package/dist/computer-use/errors.js.map +0 -1
  122. package/dist/computer-use/playwright.d.ts +0 -76
  123. package/dist/computer-use/playwright.d.ts.map +0 -1
  124. package/dist/computer-use/playwright.js +0 -270
  125. package/dist/computer-use/playwright.js.map +0 -1
  126. package/dist/computer-use/tool.d.ts +0 -154
  127. package/dist/computer-use/tool.d.ts.map +0 -1
  128. package/dist/computer-use/tool.js +0 -210
  129. package/dist/computer-use/tool.js.map +0 -1
  130. package/dist/continuation-validation.d.ts +0 -85
  131. package/dist/continuation-validation.d.ts.map +0 -1
  132. package/dist/continuation-validation.js +0 -166
  133. package/dist/continuation-validation.js.map +0 -1
  134. package/dist/conversation-persistence.d.ts +0 -46
  135. package/dist/conversation-persistence.d.ts.map +0 -1
  136. package/dist/conversation-persistence.js +0 -176
  137. package/dist/conversation-persistence.js.map +0 -1
  138. package/dist/conversation.d.ts +0 -11
  139. package/dist/conversation.d.ts.map +0 -1
  140. package/dist/conversation.js +0 -55
  141. package/dist/conversation.js.map +0 -1
  142. package/dist/eval/fixtures.d.ts +0 -65
  143. package/dist/eval/fixtures.d.ts.map +0 -1
  144. package/dist/eval/fixtures.js +0 -110
  145. package/dist/eval/fixtures.js.map +0 -1
  146. package/dist/eval/html-reporter.d.ts +0 -25
  147. package/dist/eval/html-reporter.d.ts.map +0 -1
  148. package/dist/eval/html-reporter.js +0 -209
  149. package/dist/eval/html-reporter.js.map +0 -1
  150. package/dist/eval/json-reporter.d.ts +0 -43
  151. package/dist/eval/json-reporter.d.ts.map +0 -1
  152. package/dist/eval/json-reporter.js +0 -40
  153. package/dist/eval/json-reporter.js.map +0 -1
  154. package/dist/facade.d.ts +0 -96
  155. package/dist/facade.d.ts.map +0 -1
  156. package/dist/facade.js +0 -146
  157. package/dist/facade.js.map +0 -1
  158. package/dist/fake.d.ts +0 -201
  159. package/dist/fake.d.ts.map +0 -1
  160. package/dist/fake.js +0 -428
  161. package/dist/fake.js.map +0 -1
  162. package/dist/file-search.d.ts +0 -168
  163. package/dist/file-search.d.ts.map +0 -1
  164. package/dist/file-search.js +0 -158
  165. package/dist/file-search.js.map +0 -1
  166. package/dist/files.d.ts +0 -27
  167. package/dist/files.d.ts.map +0 -1
  168. package/dist/files.js +0 -44
  169. package/dist/files.js.map +0 -1
  170. package/dist/gateway/http-gateway-adapter.d.ts +0 -94
  171. package/dist/gateway/http-gateway-adapter.d.ts.map +0 -1
  172. package/dist/gateway/http-gateway-adapter.js +0 -106
  173. package/dist/gateway/http-gateway-adapter.js.map +0 -1
  174. package/dist/gateway/sse.d.ts +0 -28
  175. package/dist/gateway/sse.d.ts.map +0 -1
  176. package/dist/gateway/sse.js +0 -78
  177. package/dist/gateway/sse.js.map +0 -1
  178. package/dist/handoff.d.ts +0 -95
  179. package/dist/handoff.d.ts.map +0 -1
  180. package/dist/handoff.js +0 -78
  181. package/dist/handoff.js.map +0 -1
  182. package/dist/handoffs-driver.d.ts +0 -58
  183. package/dist/handoffs-driver.d.ts.map +0 -1
  184. package/dist/handoffs-driver.js +0 -103
  185. package/dist/handoffs-driver.js.map +0 -1
  186. package/dist/image.d.ts +0 -40
  187. package/dist/image.d.ts.map +0 -1
  188. package/dist/image.js +0 -109
  189. package/dist/image.js.map +0 -1
  190. package/dist/mcp/client-tools.d.ts +0 -39
  191. package/dist/mcp/client-tools.d.ts.map +0 -1
  192. package/dist/mcp/client-tools.js +0 -147
  193. package/dist/mcp/client-tools.js.map +0 -1
  194. package/dist/mcp/server-from-agent.d.ts +0 -24
  195. package/dist/mcp/server-from-agent.d.ts.map +0 -1
  196. package/dist/mcp/server-from-agent.js +0 -113
  197. package/dist/mcp/server-from-agent.js.map +0 -1
  198. package/dist/mcp/types.d.ts +0 -64
  199. package/dist/mcp/types.d.ts.map +0 -1
  200. package/dist/mcp/types.js +0 -6
  201. package/dist/mcp/types.js.map +0 -1
  202. package/dist/memory-extract.d.ts +0 -60
  203. package/dist/memory-extract.d.ts.map +0 -1
  204. package/dist/memory-extract.js +0 -163
  205. package/dist/memory-extract.js.map +0 -1
  206. package/dist/memory-inject.d.ts +0 -39
  207. package/dist/memory-inject.d.ts.map +0 -1
  208. package/dist/memory-inject.js +0 -135
  209. package/dist/memory-inject.js.map +0 -1
  210. package/dist/memory.d.ts +0 -55
  211. package/dist/memory.d.ts.map +0 -1
  212. package/dist/memory.js +0 -132
  213. package/dist/memory.js.map +0 -1
  214. package/dist/middleware.d.ts +0 -18
  215. package/dist/middleware.d.ts.map +0 -1
  216. package/dist/middleware.js +0 -72
  217. package/dist/middleware.js.map +0 -1
  218. package/dist/node/attachment.d.ts +0 -6
  219. package/dist/node/attachment.d.ts.map +0 -1
  220. package/dist/node/attachment.js +0 -35
  221. package/dist/node/attachment.js.map +0 -1
  222. package/dist/node/transcription.d.ts +0 -4
  223. package/dist/node/transcription.d.ts.map +0 -1
  224. package/dist/node/transcription.js +0 -8
  225. package/dist/node/transcription.js.map +0 -1
  226. package/dist/output.d.ts +0 -22
  227. package/dist/output.d.ts.map +0 -1
  228. package/dist/output.js +0 -60
  229. package/dist/output.js.map +0 -1
  230. package/dist/provider-tools.d.ts +0 -87
  231. package/dist/provider-tools.d.ts.map +0 -1
  232. package/dist/provider-tools.js +0 -189
  233. package/dist/provider-tools.js.map +0 -1
  234. package/dist/providers/anthropic.d.ts +0 -24
  235. package/dist/providers/anthropic.d.ts.map +0 -1
  236. package/dist/providers/anthropic.js +0 -405
  237. package/dist/providers/anthropic.js.map +0 -1
  238. package/dist/providers/azure.d.ts +0 -13
  239. package/dist/providers/azure.d.ts.map +0 -1
  240. package/dist/providers/azure.js +0 -15
  241. package/dist/providers/azure.js.map +0 -1
  242. package/dist/providers/bedrock.d.ts +0 -75
  243. package/dist/providers/bedrock.d.ts.map +0 -1
  244. package/dist/providers/bedrock.js +0 -181
  245. package/dist/providers/bedrock.js.map +0 -1
  246. package/dist/providers/cohere.d.ts +0 -13
  247. package/dist/providers/cohere.d.ts.map +0 -1
  248. package/dist/providers/cohere.js +0 -87
  249. package/dist/providers/cohere.js.map +0 -1
  250. package/dist/providers/deepseek.d.ts +0 -12
  251. package/dist/providers/deepseek.d.ts.map +0 -1
  252. package/dist/providers/deepseek.js +0 -15
  253. package/dist/providers/deepseek.js.map +0 -1
  254. package/dist/providers/elevenlabs.d.ts +0 -98
  255. package/dist/providers/elevenlabs.d.ts.map +0 -1
  256. package/dist/providers/elevenlabs.js +0 -229
  257. package/dist/providers/elevenlabs.js.map +0 -1
  258. package/dist/providers/google-cache-registry.d.ts +0 -132
  259. package/dist/providers/google-cache-registry.d.ts.map +0 -1
  260. package/dist/providers/google-cache-registry.js +0 -209
  261. package/dist/providers/google-cache-registry.js.map +0 -1
  262. package/dist/providers/google.d.ts +0 -38
  263. package/dist/providers/google.d.ts.map +0 -1
  264. package/dist/providers/google.js +0 -903
  265. package/dist/providers/google.js.map +0 -1
  266. package/dist/providers/groq.d.ts +0 -12
  267. package/dist/providers/groq.d.ts.map +0 -1
  268. package/dist/providers/groq.js +0 -15
  269. package/dist/providers/groq.js.map +0 -1
  270. package/dist/providers/jina.d.ts +0 -13
  271. package/dist/providers/jina.d.ts.map +0 -1
  272. package/dist/providers/jina.js +0 -90
  273. package/dist/providers/jina.js.map +0 -1
  274. package/dist/providers/mistral.d.ts +0 -13
  275. package/dist/providers/mistral.d.ts.map +0 -1
  276. package/dist/providers/mistral.js +0 -46
  277. package/dist/providers/mistral.js.map +0 -1
  278. package/dist/providers/ollama.d.ts +0 -11
  279. package/dist/providers/ollama.d.ts.map +0 -1
  280. package/dist/providers/ollama.js +0 -15
  281. package/dist/providers/ollama.js.map +0 -1
  282. package/dist/providers/openai.d.ts +0 -79
  283. package/dist/providers/openai.d.ts.map +0 -1
  284. package/dist/providers/openai.js +0 -792
  285. package/dist/providers/openai.js.map +0 -1
  286. package/dist/providers/openrouter.d.ts +0 -43
  287. package/dist/providers/openrouter.d.ts.map +0 -1
  288. package/dist/providers/openrouter.js +0 -21
  289. package/dist/providers/openrouter.js.map +0 -1
  290. package/dist/providers/voyage.d.ts +0 -91
  291. package/dist/providers/voyage.d.ts.map +0 -1
  292. package/dist/providers/voyage.js +0 -166
  293. package/dist/providers/voyage.js.map +0 -1
  294. package/dist/providers/xai.d.ts +0 -12
  295. package/dist/providers/xai.d.ts.map +0 -1
  296. package/dist/providers/xai.js +0 -15
  297. package/dist/providers/xai.js.map +0 -1
  298. package/dist/queue-job.d.ts +0 -100
  299. package/dist/queue-job.d.ts.map +0 -1
  300. package/dist/queue-job.js +0 -185
  301. package/dist/queue-job.js.map +0 -1
  302. package/dist/react/agent-run.d.ts +0 -111
  303. package/dist/react/agent-run.d.ts.map +0 -1
  304. package/dist/react/agent-run.js +0 -107
  305. package/dist/react/agent-run.js.map +0 -1
  306. package/dist/react/useAgentRun.d.ts +0 -68
  307. package/dist/react/useAgentRun.d.ts.map +0 -1
  308. package/dist/react/useAgentRun.js +0 -125
  309. package/dist/react/useAgentRun.js.map +0 -1
  310. package/dist/registry.d.ts +0 -45
  311. package/dist/registry.d.ts.map +0 -1
  312. package/dist/registry.js +0 -131
  313. package/dist/registry.js.map +0 -1
  314. package/dist/rerank.d.ts +0 -20
  315. package/dist/rerank.d.ts.map +0 -1
  316. package/dist/rerank.js +0 -40
  317. package/dist/rerank.js.map +0 -1
  318. package/dist/resume-approval.d.ts +0 -30
  319. package/dist/resume-approval.d.ts.map +0 -1
  320. package/dist/resume-approval.js +0 -147
  321. package/dist/resume-approval.js.map +0 -1
  322. package/dist/sanitize-conversation.d.ts +0 -43
  323. package/dist/sanitize-conversation.d.ts.map +0 -1
  324. package/dist/sanitize-conversation.js +0 -85
  325. package/dist/sanitize-conversation.js.map +0 -1
  326. package/dist/scoped-tool.d.ts +0 -98
  327. package/dist/scoped-tool.d.ts.map +0 -1
  328. package/dist/scoped-tool.js +0 -174
  329. package/dist/scoped-tool.js.map +0 -1
  330. package/dist/server/provider.d.ts +0 -22
  331. package/dist/server/provider.d.ts.map +0 -1
  332. package/dist/server/provider.js +0 -194
  333. package/dist/server/provider.js.map +0 -1
  334. package/dist/similarity-search.d.ts +0 -163
  335. package/dist/similarity-search.d.ts.map +0 -1
  336. package/dist/similarity-search.js +0 -147
  337. package/dist/similarity-search.js.map +0 -1
  338. package/dist/sub-agent-run-store.d.ts +0 -157
  339. package/dist/sub-agent-run-store.d.ts.map +0 -1
  340. package/dist/sub-agent-run-store.js +0 -87
  341. package/dist/sub-agent-run-store.js.map +0 -1
  342. package/dist/tool-execution.d.ts +0 -16
  343. package/dist/tool-execution.d.ts.map +0 -1
  344. package/dist/tool-execution.js +0 -498
  345. package/dist/tool-execution.js.map +0 -1
  346. package/dist/tool-helpers.d.ts +0 -77
  347. package/dist/tool-helpers.d.ts.map +0 -1
  348. package/dist/tool-helpers.js +0 -117
  349. package/dist/tool-helpers.js.map +0 -1
  350. package/dist/tool.d.ts +0 -216
  351. package/dist/tool.d.ts.map +0 -1
  352. package/dist/tool.js +0 -175
  353. package/dist/tool.js.map +0 -1
  354. package/dist/transcription.d.ts +0 -42
  355. package/dist/transcription.d.ts.map +0 -1
  356. package/dist/transcription.js +0 -77
  357. package/dist/transcription.js.map +0 -1
  358. package/dist/types.d.ts +0 -1020
  359. package/dist/types.d.ts.map +0 -1
  360. package/dist/types.js +0 -2
  361. package/dist/types.js.map +0 -1
  362. package/dist/util/hash.d.ts +0 -11
  363. package/dist/util/hash.d.ts.map +0 -1
  364. package/dist/util/hash.js +0 -23
  365. package/dist/util/hash.js.map +0 -1
  366. package/dist/vector-stores/index.d.ts +0 -96
  367. package/dist/vector-stores/index.d.ts.map +0 -1
  368. package/dist/vector-stores/index.js +0 -153
  369. package/dist/vector-stores/index.js.map +0 -1
  370. package/dist/vercel-protocol.d.ts +0 -18
  371. package/dist/vercel-protocol.d.ts.map +0 -1
  372. package/dist/vercel-protocol.js +0 -75
  373. package/dist/vercel-protocol.js.map +0 -1
  374. package/dist/zod-to-json-schema.d.ts +0 -16
  375. package/dist/zod-to-json-schema.d.ts.map +0 -1
  376. package/dist/zod-to-json-schema.js +0 -17
  377. package/dist/zod-to-json-schema.js.map +0 -1
package/dist/queue-job.js DELETED
@@ -1,185 +0,0 @@
1
- /**
2
- * Queued AI prompt builder.
3
- * Created via `agent.queue('prompt')`.
4
- *
5
- * @example
6
- * await agent.queue('Analyze this report')
7
- * .onQueue('ai')
8
- * .then(response => console.log(response.text))
9
- * .catch(err => console.error(err))
10
- * .send()
11
- *
12
- * @example Broadcast progress to a channel as the job runs
13
- * await new SupportAgent()
14
- * .queue('Help with refund request')
15
- * .broadcast(`user.${userId}.support`)
16
- * .send()
17
- *
18
- * // Subscribers on `user.${userId}.support` receive:
19
- * // { event: 'chunk', data: <StreamChunk> } // one per stream chunk
20
- * // { event: 'done', data: <AgentResponse> } // final result
21
- * // { event: 'error', data: { message } } // on failure
22
- */
23
- export class QueuedPromptBuilder {
24
- agentRef;
25
- input;
26
- options;
27
- _queue = 'default';
28
- _delay = 0;
29
- _thenFn;
30
- _catchFn;
31
- _broadcastChannel;
32
- _broadcastEventPrefix = '';
33
- constructor(agentRef, input, options) {
34
- this.agentRef = agentRef;
35
- this.input = input;
36
- this.options = options;
37
- }
38
- /** Set the queue name */
39
- onQueue(name) {
40
- this._queue = name;
41
- return this;
42
- }
43
- /** Set a delay before the job runs */
44
- delay(ms) {
45
- this._delay = ms;
46
- return this;
47
- }
48
- /** Callback when the prompt succeeds */
49
- then(fn) {
50
- this._thenFn = fn;
51
- return this;
52
- }
53
- /** Callback when the prompt fails */
54
- catch(fn) {
55
- this._catchFn = fn;
56
- return this;
57
- }
58
- /**
59
- * Stream the agent's progress to a broadcast channel as the job runs.
60
- *
61
- * When set, the queued job uses `agent.stream()` instead of `prompt()` and
62
- * pushes each chunk to `channel` via `@rudderjs/broadcast`. Events:
63
- *
64
- * - `chunk` (per `StreamChunk` from the agent)
65
- * - `done` (the final `AgentResponse`)
66
- * - `error` (`{ message }` if the run fails)
67
- *
68
- * Requires `@rudderjs/broadcast` installed and its WS server running in the
69
- * worker process. In the typical Rudder dev setup (single process running
70
- * both web + queue:work) this works out of the box. If your queue worker is
71
- * a separate process from the broadcast WS server, you'll need a pub/sub
72
- * bridge (Redis, Reverb, etc.) — outside the scope of v1.
73
- */
74
- broadcast(channel, opts = {}) {
75
- this._broadcastChannel = channel;
76
- if (opts.eventPrefix !== undefined)
77
- this._broadcastEventPrefix = opts.eventPrefix;
78
- return this;
79
- }
80
- /** Dispatch the job to the queue */
81
- async send() {
82
- const dispatchFn = await loadDispatch();
83
- const agentRef = this.agentRef;
84
- const input = this.input;
85
- const promptOptions = this.options;
86
- const thenFn = this._thenFn;
87
- const catchFn = this._catchFn;
88
- const broadcastChannel = this._broadcastChannel;
89
- const eventPrefix = this._broadcastEventPrefix;
90
- await dispatchFn(async () => {
91
- try {
92
- const response = broadcastChannel !== undefined
93
- ? await runStreamingAndBroadcast(agentRef, input, promptOptions, broadcastChannel, eventPrefix)
94
- : await agentRef.prompt(input, promptOptions);
95
- if (thenFn)
96
- await thenFn(response);
97
- }
98
- catch (error) {
99
- if (broadcastChannel !== undefined) {
100
- await safeBroadcast(broadcastChannel, eventPrefix + 'error', {
101
- message: error instanceof Error ? error.message : String(error),
102
- });
103
- }
104
- if (catchFn) {
105
- await catchFn(error);
106
- }
107
- else {
108
- throw error;
109
- }
110
- }
111
- }, {
112
- queue: this._queue,
113
- delay: this._delay,
114
- });
115
- }
116
- }
117
- let _dispatchLoader = defaultLoadDispatch;
118
- let _broadcastLoader = defaultLoadBroadcast;
119
- async function loadDispatch() { return _dispatchLoader(); }
120
- async function loadBroadcast() { return _broadcastLoader(); }
121
- async function defaultLoadDispatch() {
122
- try {
123
- const specifier = '@rudderjs/queue';
124
- const mod = await import(/* @vite-ignore */ specifier);
125
- return mod['dispatch'];
126
- }
127
- catch {
128
- throw new Error('[Rudder AI] @rudderjs/queue is required for agent.queue(). Install it: pnpm add @rudderjs/queue');
129
- }
130
- }
131
- async function defaultLoadBroadcast() {
132
- try {
133
- const specifier = '@rudderjs/broadcast';
134
- const mod = await import(/* @vite-ignore */ specifier);
135
- const fn = mod['broadcast'];
136
- return typeof fn === 'function' ? fn : null;
137
- }
138
- catch {
139
- return null;
140
- }
141
- }
142
- /**
143
- * Test-only seam — swap the dispatch + broadcast loaders for fakes so tests can
144
- * exercise the queued-job flow without booting Queue / Broadcast providers.
145
- *
146
- * The `_` prefix and explicit `ForTests` suffix are deliberate: these hooks
147
- * exist for `src/queue-job.test.ts`, not for app code. Production callers
148
- * should never import these.
149
- */
150
- export function _setQueueJobLoadersForTests(opts) {
151
- const prevDispatch = _dispatchLoader;
152
- const prevBroadcast = _broadcastLoader;
153
- if (opts.dispatch)
154
- _dispatchLoader = opts.dispatch;
155
- if (opts.broadcast)
156
- _broadcastLoader = opts.broadcast;
157
- return () => {
158
- _dispatchLoader = prevDispatch;
159
- _broadcastLoader = prevBroadcast;
160
- };
161
- }
162
- async function runStreamingAndBroadcast(agentRef, input, options, channel, eventPrefix) {
163
- const broadcastFn = await loadBroadcast();
164
- if (broadcastFn === null) {
165
- throw new Error('[Rudder AI] @rudderjs/broadcast is required for .broadcast(). Install it: pnpm add @rudderjs/broadcast');
166
- }
167
- if (typeof agentRef.stream !== 'function') {
168
- throw new Error('[Rudder AI] .broadcast() requires an agent with .stream(); the wrapper passed to QueuedPromptBuilder is missing it.');
169
- }
170
- const { stream, response } = agentRef.stream(input, options);
171
- for await (const chunk of stream) {
172
- await broadcastFn(channel, eventPrefix + 'chunk', chunk);
173
- }
174
- const final = await response;
175
- await broadcastFn(channel, eventPrefix + 'done', final);
176
- return final;
177
- }
178
- async function safeBroadcast(channel, event, data) {
179
- try {
180
- const broadcastFn = await loadBroadcast();
181
- await broadcastFn?.(channel, event, data);
182
- }
183
- catch { /* best-effort — don't let broadcast errors mask the original failure */ }
184
- }
185
- //# sourceMappingURL=queue-job.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"queue-job.js","sourceRoot":"","sources":["../src/queue-job.ts"],"names":[],"mappings":"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"}
@@ -1,111 +0,0 @@
1
- /**
2
- * Framework-free core of the `useAgentRun` React hook.
3
- *
4
- * The React hook (`useAgentRun.ts`) is a thin wrapper around the pieces here —
5
- * same posture as `@rudderjs/sync`'s `CollabRoomManager` vs `useCollabRoom`:
6
- * keeping the state machine and the stream-driving loop out of React lets us
7
- * exhaustively unit-test the client-tool round-trip and the approval resume
8
- * without a React testing harness (the framework intentionally ships none).
9
- *
10
- * Builds on the named-event agent-SSE protocol in `../agent-sse.ts`
11
- * (`readAgentStream` + the `AgentStreamTurn` it accumulates). No `react` and no
12
- * `node:` imports — safe in any `fetch`-capable runtime.
13
- */
14
- import type { AgentStreamCallbacks, AgentStreamTurn } from '../agent-sse.js';
15
- import type { ToolCall } from '../types.js';
16
- /** One renderable entry in a run's transcript, in arrival order. */
17
- export type AgentRunOutput = {
18
- type: 'text';
19
- text: string;
20
- } | {
21
- type: 'tool_call';
22
- id?: string;
23
- tool: string;
24
- input?: Record<string, unknown>;
25
- } | {
26
- type: 'tool_update';
27
- id?: string;
28
- tool?: string;
29
- update: unknown;
30
- } | {
31
- type: 'tool_result';
32
- id?: string;
33
- tool?: string;
34
- content: string;
35
- } | {
36
- type: 'approval_request';
37
- toolCall: ToolCall;
38
- isClientTool: boolean;
39
- } | {
40
- type: 'handoff';
41
- from: string;
42
- to: string;
43
- message?: string;
44
- } | {
45
- type: 'error';
46
- message: string;
47
- };
48
- /**
49
- * Append one decoded SSE event to the output transcript, returning a NEW array
50
- * (so a React consumer can use it as immutable state). Consecutive `text`
51
- * deltas coalesce into the trailing text entry so streamed text renders as one
52
- * growing block. `complete` and `pending_client_tools` produce no transcript
53
- * entry — they drive run status / pending-action state instead.
54
- */
55
- export declare function appendAgentOutput(outputs: AgentRunOutput[], event: string, data: unknown): AgentRunOutput[];
56
- /** A client-executed tool result, keyed to its originating tool call. */
57
- export interface AgentToolResult {
58
- toolCallId: string;
59
- result: unknown;
60
- }
61
- /**
62
- * Run each pending client-tool call through the resolver, in order, collecting
63
- * results keyed by `toolCallId`. A resolver that throws yields an
64
- * `{ error }` result rather than aborting the batch — the model sees the
65
- * failure as that tool's result and can recover, matching the server-side
66
- * tool-error posture.
67
- */
68
- export declare function executeClientTools(calls: ToolCall[], resolver: (call: ToolCall) => unknown | Promise<unknown>): Promise<AgentToolResult[]>;
69
- /**
70
- * The intent the consumer's `request` function turns into an SSE `Response`.
71
- * The hook owns the run/resume state machine; the app owns the endpoint and
72
- * the request body shape (only the app's route knows how to reconstruct the
73
- * server-side message history), so the driver hands it a typed intent and
74
- * expects a streaming `Response` back.
75
- */
76
- export type AgentRunRequest<TInput = unknown> = {
77
- type: 'run';
78
- input: TInput;
79
- } | {
80
- type: 'resume';
81
- /** The accumulated turn the resume continues from. */
82
- turn: AgentStreamTurn;
83
- /** Results from client-tool calls executed in the browser. */
84
- clientToolResults: AgentToolResult[];
85
- /** Tool-call ids the user approved. */
86
- approved: string[];
87
- /** Tool-call ids the user rejected. */
88
- rejected: string[];
89
- };
90
- export interface AgentRunDriverOptions<TInput = unknown> {
91
- /** Turn a run/resume intent into the streaming SSE `Response`. */
92
- request: (req: AgentRunRequest<TInput>, signal: AbortSignal) => Promise<Response>;
93
- /**
94
- * Optional client-tool resolver. When provided, a run that pauses awaiting
95
- * client tools auto-executes them and resumes — no manual `respond`. Omit it
96
- * to surface the pending calls and resume by hand.
97
- */
98
- clientTools?: (call: ToolCall) => unknown | Promise<unknown>;
99
- /** Forwarded to `readAgentStream` so the consumer sees events as they arrive. */
100
- callbacks?: AgentStreamCallbacks;
101
- signal: AbortSignal;
102
- }
103
- /**
104
- * Drive one logical agent run to a settling point: stream the response,
105
- * accumulate the turn, and — when a client-tool resolver is configured —
106
- * auto-resume across client-tool pauses until the run completes or parks on an
107
- * approval gate / manual client-tool round-trip. Returns the final
108
- * {@link AgentStreamTurn}. Framework-free; the hook wires `callbacks` to state.
109
- */
110
- export declare function driveAgentRun<TInput = unknown>(initial: AgentRunRequest<TInput>, opts: AgentRunDriverOptions<TInput>): Promise<AgentStreamTurn>;
111
- //# sourceMappingURL=agent-run.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"agent-run.d.ts","sourceRoot":"","sources":["../../src/react/agent-run.ts"],"names":[],"mappings":"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"}
@@ -1,107 +0,0 @@
1
- /**
2
- * Framework-free core of the `useAgentRun` React hook.
3
- *
4
- * The React hook (`useAgentRun.ts`) is a thin wrapper around the pieces here —
5
- * same posture as `@rudderjs/sync`'s `CollabRoomManager` vs `useCollabRoom`:
6
- * keeping the state machine and the stream-driving loop out of React lets us
7
- * exhaustively unit-test the client-tool round-trip and the approval resume
8
- * without a React testing harness (the framework intentionally ships none).
9
- *
10
- * Builds on the named-event agent-SSE protocol in `../agent-sse.ts`
11
- * (`readAgentStream` + the `AgentStreamTurn` it accumulates). No `react` and no
12
- * `node:` imports — safe in any `fetch`-capable runtime.
13
- */
14
- import { readAgentStream } from '../agent-sse.js';
15
- /**
16
- * Append one decoded SSE event to the output transcript, returning a NEW array
17
- * (so a React consumer can use it as immutable state). Consecutive `text`
18
- * deltas coalesce into the trailing text entry so streamed text renders as one
19
- * growing block. `complete` and `pending_client_tools` produce no transcript
20
- * entry — they drive run status / pending-action state instead.
21
- */
22
- export function appendAgentOutput(outputs, event, data) {
23
- switch (event) {
24
- case 'text': {
25
- const text = data.text ?? '';
26
- if (!text)
27
- return outputs;
28
- const last = outputs[outputs.length - 1];
29
- if (last && last.type === 'text') {
30
- return [...outputs.slice(0, -1), { type: 'text', text: last.text + text }];
31
- }
32
- return [...outputs, { type: 'text', text }];
33
- }
34
- case 'tool_call': {
35
- const d = data;
36
- return [...outputs, { type: 'tool_call', ...(d.id ? { id: d.id } : {}), tool: d.tool, ...(d.input ? { input: d.input } : {}) }];
37
- }
38
- case 'tool_update': {
39
- const d = data;
40
- return [...outputs, { type: 'tool_update', ...(d.id ? { id: d.id } : {}), ...(d.tool ? { tool: d.tool } : {}), update: d.update }];
41
- }
42
- case 'tool_result': {
43
- const d = data;
44
- const id = d.toolCallId ?? d.id;
45
- return [...outputs, { type: 'tool_result', ...(id ? { id } : {}), ...(d.tool ? { tool: d.tool } : {}), content: d.content }];
46
- }
47
- case 'tool_approval_required': {
48
- const d = data;
49
- return [...outputs, { type: 'approval_request', toolCall: d.toolCall, isClientTool: d.isClientTool }];
50
- }
51
- case 'handoff': {
52
- const d = data;
53
- return [...outputs, { type: 'handoff', from: d.from, to: d.to, ...(d.message ? { message: d.message } : {}) }];
54
- }
55
- case 'error': {
56
- const d = data;
57
- return [...outputs, { type: 'error', message: d.message ?? 'Unknown error' }];
58
- }
59
- default:
60
- return outputs;
61
- }
62
- }
63
- /**
64
- * Run each pending client-tool call through the resolver, in order, collecting
65
- * results keyed by `toolCallId`. A resolver that throws yields an
66
- * `{ error }` result rather than aborting the batch — the model sees the
67
- * failure as that tool's result and can recover, matching the server-side
68
- * tool-error posture.
69
- */
70
- export async function executeClientTools(calls, resolver) {
71
- const results = [];
72
- for (const call of calls) {
73
- try {
74
- results.push({ toolCallId: call.id, result: await resolver(call) });
75
- }
76
- catch (err) {
77
- results.push({ toolCallId: call.id, result: { error: err instanceof Error ? err.message : String(err) } });
78
- }
79
- }
80
- return results;
81
- }
82
- /**
83
- * Drive one logical agent run to a settling point: stream the response,
84
- * accumulate the turn, and — when a client-tool resolver is configured —
85
- * auto-resume across client-tool pauses until the run completes or parks on an
86
- * approval gate / manual client-tool round-trip. Returns the final
87
- * {@link AgentStreamTurn}. Framework-free; the hook wires `callbacks` to state.
88
- */
89
- export async function driveAgentRun(initial, opts) {
90
- let req = initial;
91
- for (;;) {
92
- const resp = await opts.request(req, opts.signal);
93
- if (!resp.ok) {
94
- throw new Error(`Agent stream request failed with status ${resp.status}.`);
95
- }
96
- const turn = await readAgentStream(resp, opts.callbacks);
97
- // Auto-resume only across client-tool pauses, and only with a resolver.
98
- // Approval pauses always park for an explicit approve/reject decision.
99
- if (turn.awaiting === 'client_tools' && opts.clientTools && turn.pendingClientTools.length > 0) {
100
- const clientToolResults = await executeClientTools(turn.pendingClientTools, opts.clientTools);
101
- req = { type: 'resume', turn, clientToolResults, approved: [], rejected: [] };
102
- continue;
103
- }
104
- return turn;
105
- }
106
- }
107
- //# sourceMappingURL=agent-run.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"agent-run.js","sourceRoot":"","sources":["../../src/react/agent-run.ts"],"names":[],"mappings":"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"}
@@ -1,68 +0,0 @@
1
- import type { AgentSseApprovalPayload, AgentSseCompletePayload } from '../agent-sse.js';
2
- import type { ToolCall } from '../types.js';
3
- import { type AgentRunOutput, type AgentRunRequest, type AgentToolResult } from './agent-run.js';
4
- /**
5
- * Run status. While the run is paused awaiting client tools (no resolver) or an
6
- * approval decision, status stays `'running'` and `pendingClientTools` /
7
- * `pendingApproval` are populated — the UI renders the prompt and calls
8
- * `respond` / `approve` / `reject` to continue the same logical run.
9
- */
10
- export type AgentRunStatus = 'idle' | 'running' | 'complete' | 'error';
11
- export interface UseAgentRunOptions<TInput = unknown> {
12
- /**
13
- * Turn a run/resume intent into the streaming SSE `Response`. The app owns
14
- * the endpoint and request-body shape (only its route can reconstruct the
15
- * server-side message history); typically `fetch(endpoint, { ..., signal })`.
16
- */
17
- request: (req: AgentRunRequest<TInput>, signal: AbortSignal) => Promise<Response>;
18
- /**
19
- * Optional client-tool resolver. When set, a run that pauses awaiting client
20
- * tools auto-executes them and resumes; omit it to surface
21
- * `pendingClientTools` and resume manually via `respond`.
22
- */
23
- clientTools?: (call: ToolCall) => unknown | Promise<unknown>;
24
- onComplete?: (data: AgentSseCompletePayload) => void;
25
- onError?: (message: string) => void;
26
- /** Fired for any SSE event outside the standard protocol vocabulary (e.g. a
27
- * server-issued `run_started` carrying a correlation `runId`). Forwarded
28
- * directly to `readAgentStream`'s `onAppEvent` callback. */
29
- onAppEvent?: (event: string, data: unknown) => void;
30
- }
31
- export interface UseAgentRunResult<TInput = unknown> {
32
- status: AgentRunStatus;
33
- /** Renderable transcript, accumulated across the run and every resume. */
34
- outputs: AgentRunOutput[];
35
- /** Client-tool calls awaiting a browser round-trip (empty when auto-resolved). */
36
- pendingClientTools: ToolCall[];
37
- /** The approval gate the run parked on, or `null`. */
38
- pendingApproval: AgentSseApprovalPayload | null;
39
- error: string | null;
40
- /** Start a fresh run, resetting the transcript. */
41
- run: (input: TInput) => Promise<void>;
42
- /** Resume a client-tool pause with results gathered by hand. */
43
- respond: (results: AgentToolResult[]) => Promise<void>;
44
- /** Approve the pending approval gate and resume. */
45
- approve: (toolCallId: string) => Promise<void>;
46
- /** Reject the pending approval gate and resume. */
47
- reject: (toolCallId: string) => Promise<void>;
48
- /** Abort any in-flight stream and return to `idle`. */
49
- reset: () => void;
50
- }
51
- /**
52
- * React client runtime for the named-event agent-SSE protocol. Drives
53
- * `readAgentStream` (via the framework-free `driveAgentRun`), accumulates the
54
- * transcript, tracks run status, and surfaces pending client-tool calls and
55
- * approval requests with imperative `run` / `respond` / `approve` / `reject`.
56
- *
57
- * Lives behind the `@rudderjs/ai/react` subpath so the main entry stays
58
- * runtime-agnostic (same split as `@rudderjs/sync/react`).
59
- *
60
- * @example
61
- * const { status, outputs, run } = useAgentRun({
62
- * request: (req, signal) =>
63
- * fetch('/api/agent', { method: 'POST', body: JSON.stringify(req), signal }),
64
- * })
65
- * // <button onClick={() => run('Summarize the latest report')}>Ask</button>
66
- */
67
- export declare function useAgentRun<TInput = unknown>(options: UseAgentRunOptions<TInput>): UseAgentRunResult<TInput>;
68
- //# sourceMappingURL=useAgentRun.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"useAgentRun.d.ts","sourceRoot":"","sources":["../../src/react/useAgentRun.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EACV,uBAAuB,EACvB,uBAAuB,EAGxB,MAAM,iBAAiB,CAAA;AACxB,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAA;AAC3C,OAAO,EAGL,KAAK,cAAc,EACnB,KAAK,eAAe,EACpB,KAAK,eAAe,EACrB,MAAM,gBAAgB,CAAA;AAEvB;;;;;GAKG;AACH,MAAM,MAAM,cAAc,GAAG,MAAM,GAAG,SAAS,GAAG,UAAU,GAAG,OAAO,CAAA;AAEtE,MAAM,WAAW,kBAAkB,CAAC,MAAM,GAAG,OAAO;IAClD;;;;OAIG;IACH,OAAO,EAAO,CAAC,GAAG,EAAE,eAAe,CAAC,MAAM,CAAC,EAAE,MAAM,EAAE,WAAW,KAAK,OAAO,CAAC,QAAQ,CAAC,CAAA;IACtF;;;;OAIG;IACH,WAAW,CAAC,EAAE,CAAC,IAAI,EAAE,QAAQ,KAAK,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC,CAAA;IAC5D,UAAU,CAAC,EAAG,CAAC,IAAI,EAAE,uBAAuB,KAAK,IAAI,CAAA;IACrD,OAAO,CAAC,EAAM,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,CAAA;IACvC;;iEAE6D;IAC7D,UAAU,CAAC,EAAG,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,KAAK,IAAI,CAAA;CACrD;AAED,MAAM,WAAW,iBAAiB,CAAC,MAAM,GAAG,OAAO;IACjD,MAAM,EAAc,cAAc,CAAA;IAClC,0EAA0E;IAC1E,OAAO,EAAa,cAAc,EAAE,CAAA;IACpC,kFAAkF;IAClF,kBAAkB,EAAE,QAAQ,EAAE,CAAA;IAC9B,sDAAsD;IACtD,eAAe,EAAK,uBAAuB,GAAG,IAAI,CAAA;IAClD,KAAK,EAAe,MAAM,GAAG,IAAI,CAAA;IACjC,mDAAmD;IACnD,GAAG,EAAiB,CAAC,KAAK,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAA;IACpD,gEAAgE;IAChE,OAAO,EAAa,CAAC,OAAO,EAAE,eAAe,EAAE,KAAK,OAAO,CAAC,IAAI,CAAC,CAAA;IACjE,oDAAoD;IACpD,OAAO,EAAa,CAAC,UAAU,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAA;IACzD,mDAAmD;IACnD,MAAM,EAAc,CAAC,UAAU,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAA;IACzD,uDAAuD;IACvD,KAAK,EAAe,MAAM,IAAI,CAAA;CAC/B;AAED;;;;;;;;;;;;;;;GAeG;AACH,wBAAgB,WAAW,CAAC,MAAM,GAAG,OAAO,EAC1C,OAAO,EAAE,kBAAkB,CAAC,MAAM,CAAC,GAClC,iBAAiB,CAAC,MAAM,CAAC,CA+G3B"}
@@ -1,125 +0,0 @@
1
- import { useCallback, useRef, useState } from 'react';
2
- import { appendAgentOutput, driveAgentRun, } from './agent-run.js';
3
- /**
4
- * React client runtime for the named-event agent-SSE protocol. Drives
5
- * `readAgentStream` (via the framework-free `driveAgentRun`), accumulates the
6
- * transcript, tracks run status, and surfaces pending client-tool calls and
7
- * approval requests with imperative `run` / `respond` / `approve` / `reject`.
8
- *
9
- * Lives behind the `@rudderjs/ai/react` subpath so the main entry stays
10
- * runtime-agnostic (same split as `@rudderjs/sync/react`).
11
- *
12
- * @example
13
- * const { status, outputs, run } = useAgentRun({
14
- * request: (req, signal) =>
15
- * fetch('/api/agent', { method: 'POST', body: JSON.stringify(req), signal }),
16
- * })
17
- * // <button onClick={() => run('Summarize the latest report')}>Ask</button>
18
- */
19
- export function useAgentRun(options) {
20
- const [status, setStatus] = useState('idle');
21
- const [outputs, setOutputs] = useState([]);
22
- const [pendingClientTools, setPendingClientTools] = useState([]);
23
- const [pendingApproval, setPendingApproval] = useState(null);
24
- const [error, setError] = useState(null);
25
- // Latest values needed by the async driver / resume actions, kept in refs so
26
- // the imperative callbacks don't go stale between renders.
27
- const optionsRef = useRef(options);
28
- optionsRef.current = options;
29
- const turnRef = useRef(null);
30
- const abortRef = useRef(null);
31
- // Shared loop body for both the initial run and every resume.
32
- const drive = useCallback(async (req) => {
33
- const opts = optionsRef.current;
34
- abortRef.current?.abort();
35
- const controller = new AbortController();
36
- abortRef.current = controller;
37
- setStatus('running');
38
- setPendingClientTools([]);
39
- setPendingApproval(null);
40
- setError(null);
41
- let sawError = null;
42
- const callbacks = {
43
- onText: t => setOutputs(o => appendAgentOutput(o, 'text', { text: t })),
44
- onToolCall: d => setOutputs(o => appendAgentOutput(o, 'tool_call', d)),
45
- onToolUpdate: d => setOutputs(o => appendAgentOutput(o, 'tool_update', d)),
46
- onToolResult: d => setOutputs(o => appendAgentOutput(o, 'tool_result', d)),
47
- onToolApprovalRequired: d => setOutputs(o => appendAgentOutput(o, 'tool_approval_required', d)),
48
- onHandoff: d => setOutputs(o => appendAgentOutput(o, 'handoff', d)),
49
- onError: d => { sawError = d.message; setOutputs(o => appendAgentOutput(o, 'error', d)); },
50
- onComplete: d => opts.onComplete?.(d),
51
- ...(opts.onAppEvent ? { onAppEvent: opts.onAppEvent } : {}),
52
- };
53
- try {
54
- const turn = await driveAgentRun(req, {
55
- request: opts.request,
56
- callbacks,
57
- signal: controller.signal,
58
- ...(opts.clientTools ? { clientTools: opts.clientTools } : {}),
59
- });
60
- if (controller.signal.aborted)
61
- return;
62
- turnRef.current = turn;
63
- if (sawError !== null) {
64
- setStatus('error');
65
- setError(sawError);
66
- opts.onError?.(sawError);
67
- return;
68
- }
69
- // Parked on an approval gate, or on client tools with no resolver:
70
- // surface the prompt and keep the run logically open.
71
- if (turn.awaiting === 'approval' && turn.pendingApproval) {
72
- setPendingApproval(turn.pendingApproval);
73
- return;
74
- }
75
- if (turn.awaiting === 'client_tools' && turn.pendingClientTools.length > 0) {
76
- setPendingClientTools(turn.pendingClientTools);
77
- return;
78
- }
79
- setStatus('complete');
80
- }
81
- catch (err) {
82
- if (controller.signal.aborted)
83
- return;
84
- const message = err instanceof Error ? err.message : String(err);
85
- setStatus('error');
86
- setError(message);
87
- optionsRef.current.onError?.(message);
88
- }
89
- }, []);
90
- const run = useCallback(async (input) => {
91
- turnRef.current = null;
92
- setOutputs([]);
93
- await drive({ type: 'run', input });
94
- }, [drive]);
95
- const respond = useCallback(async (results) => {
96
- const turn = turnRef.current;
97
- if (!turn)
98
- return;
99
- await drive({ type: 'resume', turn, clientToolResults: results, approved: [], rejected: [] });
100
- }, [drive]);
101
- const approve = useCallback(async (toolCallId) => {
102
- const turn = turnRef.current;
103
- if (!turn)
104
- return;
105
- await drive({ type: 'resume', turn, clientToolResults: [], approved: [toolCallId], rejected: [] });
106
- }, [drive]);
107
- const reject = useCallback(async (toolCallId) => {
108
- const turn = turnRef.current;
109
- if (!turn)
110
- return;
111
- await drive({ type: 'resume', turn, clientToolResults: [], approved: [], rejected: [toolCallId] });
112
- }, [drive]);
113
- const reset = useCallback(() => {
114
- abortRef.current?.abort();
115
- abortRef.current = null;
116
- turnRef.current = null;
117
- setStatus('idle');
118
- setOutputs([]);
119
- setPendingClientTools([]);
120
- setPendingApproval(null);
121
- setError(null);
122
- }, []);
123
- return { status, outputs, pendingClientTools, pendingApproval, error, run, respond, approve, reject, reset };
124
- }
125
- //# sourceMappingURL=useAgentRun.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"useAgentRun.js","sourceRoot":"","sources":["../../src/react/useAgentRun.ts"],"names":[],"mappings":"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"}