@adonis-agora/agent 0.61.0 → 0.62.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 (610) hide show
  1. package/CHANGELOG.md +62 -0
  2. package/README.md +12 -7
  3. package/dist/configure.d.ts +7 -5
  4. package/dist/configure.d.ts.map +1 -1
  5. package/dist/configure.js +7 -5
  6. package/dist/configure.js.map +1 -1
  7. package/dist/providers/a2a_provider.d.ts +14 -0
  8. package/dist/providers/a2a_provider.d.ts.map +1 -0
  9. package/dist/providers/a2a_provider.js +136 -0
  10. package/dist/providers/a2a_provider.js.map +1 -0
  11. package/dist/providers/agent_provider.d.ts.map +1 -1
  12. package/dist/providers/agent_provider.js +80 -13
  13. package/dist/providers/agent_provider.js.map +1 -1
  14. package/dist/providers/mcp_provider.d.ts +3 -0
  15. package/dist/providers/mcp_provider.d.ts.map +1 -1
  16. package/dist/providers/mcp_provider.js +147 -62
  17. package/dist/providers/mcp_provider.js.map +1 -1
  18. package/dist/src/a2a/auth.d.ts +67 -0
  19. package/dist/src/a2a/auth.d.ts.map +1 -0
  20. package/dist/src/a2a/auth.js +47 -0
  21. package/dist/src/a2a/auth.js.map +1 -0
  22. package/dist/src/a2a/define_config.d.ts +74 -0
  23. package/dist/src/a2a/define_config.d.ts.map +1 -0
  24. package/dist/src/a2a/define_config.js +5 -0
  25. package/dist/src/a2a/define_config.js.map +1 -0
  26. package/dist/src/a2a/gate.d.ts +23 -0
  27. package/dist/src/a2a/gate.d.ts.map +1 -0
  28. package/dist/src/a2a/gate.js +56 -0
  29. package/dist/src/a2a/gate.js.map +1 -0
  30. package/dist/src/a2a/handler.d.ts +65 -0
  31. package/dist/src/a2a/handler.d.ts.map +1 -0
  32. package/dist/src/a2a/handler.js +322 -0
  33. package/dist/src/a2a/handler.js.map +1 -0
  34. package/dist/src/a2a/index.d.ts +15 -0
  35. package/dist/src/a2a/index.d.ts.map +1 -0
  36. package/dist/src/a2a/index.js +9 -0
  37. package/dist/src/a2a/index.js.map +1 -0
  38. package/dist/src/a2a/permission-tool.d.ts +17 -0
  39. package/dist/src/a2a/permission-tool.d.ts.map +1 -0
  40. package/dist/src/a2a/permission-tool.js +70 -0
  41. package/dist/src/a2a/permission-tool.js.map +1 -0
  42. package/dist/src/a2a/protocol.d.ts +100 -0
  43. package/dist/src/a2a/protocol.d.ts.map +1 -0
  44. package/dist/src/a2a/protocol.js +106 -0
  45. package/dist/src/a2a/protocol.js.map +1 -0
  46. package/dist/src/a2a/runtime.d.ts +6 -0
  47. package/dist/src/a2a/runtime.d.ts.map +1 -0
  48. package/dist/src/a2a/runtime.js +13 -0
  49. package/dist/src/a2a/runtime.js.map +1 -0
  50. package/dist/src/a2a/server_middleware.d.ts +13 -0
  51. package/dist/src/a2a/server_middleware.d.ts.map +1 -0
  52. package/dist/src/a2a/server_middleware.js +18 -0
  53. package/dist/src/a2a/server_middleware.js.map +1 -0
  54. package/dist/src/a2a/store.d.ts +79 -0
  55. package/dist/src/a2a/store.d.ts.map +1 -0
  56. package/dist/src/a2a/store.js +151 -0
  57. package/dist/src/a2a/store.js.map +1 -0
  58. package/dist/src/a2a/turn.d.ts +80 -0
  59. package/dist/src/a2a/turn.d.ts.map +1 -0
  60. package/dist/src/a2a/turn.js +211 -0
  61. package/dist/src/a2a/turn.js.map +1 -0
  62. package/dist/src/action-proposal-executor.d.ts +3 -0
  63. package/dist/src/action-proposal-executor.d.ts.map +1 -1
  64. package/dist/src/action-proposal-executor.js +10 -0
  65. package/dist/src/action-proposal-executor.js.map +1 -1
  66. package/dist/src/action-proposal-service.d.ts +6 -2
  67. package/dist/src/action-proposal-service.d.ts.map +1 -1
  68. package/dist/src/action-proposal-service.js +20 -16
  69. package/dist/src/action-proposal-service.js.map +1 -1
  70. package/dist/src/action-proposal-text.d.ts +42 -3
  71. package/dist/src/action-proposal-text.d.ts.map +1 -1
  72. package/dist/src/action-proposal-text.js +80 -12
  73. package/dist/src/action-proposal-text.js.map +1 -1
  74. package/dist/src/action-proposal-worker.d.ts +2 -1
  75. package/dist/src/action-proposal-worker.d.ts.map +1 -1
  76. package/dist/src/action-proposal-worker.js +9 -2
  77. package/dist/src/action-proposal-worker.js.map +1 -1
  78. package/dist/src/ag-ui/adapter.d.ts.map +1 -1
  79. package/dist/src/ag-ui/adapter.js +83 -11
  80. package/dist/src/ag-ui/adapter.js.map +1 -1
  81. package/dist/src/ag-ui/core/encoder.d.ts +105 -0
  82. package/dist/src/ag-ui/core/encoder.d.ts.map +1 -0
  83. package/dist/src/ag-ui/core/encoder.js +523 -0
  84. package/dist/src/ag-ui/core/encoder.js.map +1 -0
  85. package/dist/src/ag-ui/core/index.d.ts +12 -0
  86. package/dist/src/ag-ui/core/index.d.ts.map +1 -0
  87. package/dist/src/ag-ui/core/index.js +12 -0
  88. package/dist/src/ag-ui/core/index.js.map +1 -0
  89. package/dist/src/ag-ui/core/input.d.ts +74 -0
  90. package/dist/src/ag-ui/core/input.d.ts.map +1 -0
  91. package/dist/src/ag-ui/core/input.js +228 -0
  92. package/dist/src/ag-ui/core/input.js.map +1 -0
  93. package/dist/src/ag-ui/core/interrupt-id.d.ts +31 -0
  94. package/dist/src/ag-ui/core/interrupt-id.d.ts.map +1 -0
  95. package/dist/src/ag-ui/core/interrupt-id.js +48 -0
  96. package/dist/src/ag-ui/core/interrupt-id.js.map +1 -0
  97. package/dist/src/ag-ui/{proposal-decision.d.ts → core/proposal-decision.d.ts} +1 -1
  98. package/dist/src/ag-ui/core/proposal-decision.d.ts.map +1 -0
  99. package/dist/src/ag-ui/{proposal-decision.js → core/proposal-decision.js} +3 -6
  100. package/dist/src/ag-ui/core/proposal-decision.js.map +1 -0
  101. package/dist/src/ag-ui/core/stream.d.ts +27 -0
  102. package/dist/src/ag-ui/core/stream.d.ts.map +1 -0
  103. package/dist/src/ag-ui/core/stream.js +68 -0
  104. package/dist/src/ag-ui/core/stream.js.map +1 -0
  105. package/dist/src/ag-ui/core/types.d.ts +249 -0
  106. package/dist/src/ag-ui/core/types.d.ts.map +1 -0
  107. package/dist/src/ag-ui/core/types.js +35 -0
  108. package/dist/src/ag-ui/core/types.js.map +1 -0
  109. package/dist/src/ag-ui/encoder.d.ts +3 -4
  110. package/dist/src/ag-ui/encoder.d.ts.map +1 -1
  111. package/dist/src/ag-ui/encoder.js +10 -11
  112. package/dist/src/ag-ui/encoder.js.map +1 -1
  113. package/dist/src/ag-ui/frames.d.ts +4 -5
  114. package/dist/src/ag-ui/frames.d.ts.map +1 -1
  115. package/dist/src/ag-ui/frames.js +8 -4
  116. package/dist/src/ag-ui/frames.js.map +1 -1
  117. package/dist/src/ag-ui/index.d.ts +3 -5
  118. package/dist/src/ag-ui/index.d.ts.map +1 -1
  119. package/dist/src/ag-ui/index.js +3 -5
  120. package/dist/src/ag-ui/index.js.map +1 -1
  121. package/dist/src/ag-ui/stream.d.ts +3 -4
  122. package/dist/src/ag-ui/stream.d.ts.map +1 -1
  123. package/dist/src/ag-ui/stream.js +4 -5
  124. package/dist/src/ag-ui/stream.js.map +1 -1
  125. package/dist/src/agent-deps-factory.d.ts +3 -0
  126. package/dist/src/agent-deps-factory.d.ts.map +1 -1
  127. package/dist/src/agent-deps-factory.js +3 -0
  128. package/dist/src/agent-deps-factory.js.map +1 -1
  129. package/dist/src/agent-deps.d.ts +3 -0
  130. package/dist/src/agent-deps.d.ts.map +1 -1
  131. package/dist/src/agent-deps.js.map +1 -1
  132. package/dist/src/agent-loop.d.ts +4 -3
  133. package/dist/src/agent-loop.d.ts.map +1 -1
  134. package/dist/src/agent-loop.js +50 -25
  135. package/dist/src/agent-loop.js.map +1 -1
  136. package/dist/src/agent-service.d.ts +11 -2
  137. package/dist/src/agent-service.d.ts.map +1 -1
  138. package/dist/src/agent-service.js +23 -11
  139. package/dist/src/agent-service.js.map +1 -1
  140. package/dist/src/ai-sdk/ai-sdk-model.js +4 -1
  141. package/dist/src/ai-sdk/ai-sdk-model.js.map +1 -1
  142. package/dist/src/ai-tool-ref.d.ts +4 -0
  143. package/dist/src/ai-tool-ref.d.ts.map +1 -1
  144. package/dist/src/ai-tool-ref.js +10 -14
  145. package/dist/src/ai-tool-ref.js.map +1 -1
  146. package/dist/src/chat-queue-service.d.ts.map +1 -1
  147. package/dist/src/chat-queue-service.js +2 -0
  148. package/dist/src/chat-queue-service.js.map +1 -1
  149. package/dist/src/define_config.d.ts +61 -12
  150. package/dist/src/define_config.d.ts.map +1 -1
  151. package/dist/src/define_config.js.map +1 -1
  152. package/dist/src/engine.d.ts +77 -0
  153. package/dist/src/engine.d.ts.map +1 -0
  154. package/dist/src/engine.js +27 -0
  155. package/dist/src/engine.js.map +1 -0
  156. package/dist/src/genui/builtins.d.ts +73 -3
  157. package/dist/src/genui/builtins.d.ts.map +1 -1
  158. package/dist/src/genui/builtins.js +298 -3
  159. package/dist/src/genui/builtins.js.map +1 -1
  160. package/dist/src/genui/capabilities.d.ts +24 -0
  161. package/dist/src/genui/capabilities.d.ts.map +1 -0
  162. package/dist/src/genui/capabilities.js +81 -0
  163. package/dist/src/genui/capabilities.js.map +1 -0
  164. package/dist/src/genui/catalog.d.ts +77 -0
  165. package/dist/src/genui/catalog.d.ts.map +1 -0
  166. package/dist/src/genui/catalog.js +88 -0
  167. package/dist/src/genui/catalog.js.map +1 -0
  168. package/dist/src/genui/factory.d.ts +7 -14
  169. package/dist/src/genui/factory.d.ts.map +1 -1
  170. package/dist/src/genui/factory.js.map +1 -1
  171. package/dist/src/genui/index.d.ts +4 -12
  172. package/dist/src/genui/index.d.ts.map +1 -1
  173. package/dist/src/genui/index.js +5 -18
  174. package/dist/src/genui/index.js.map +1 -1
  175. package/dist/src/genui/public.d.ts +9 -0
  176. package/dist/src/genui/public.d.ts.map +1 -0
  177. package/dist/src/genui/public.js +9 -0
  178. package/dist/src/genui/public.js.map +1 -0
  179. package/dist/src/genui/registry.d.ts +65 -0
  180. package/dist/src/genui/registry.d.ts.map +1 -0
  181. package/dist/src/genui/registry.js +151 -0
  182. package/dist/src/genui/registry.js.map +1 -0
  183. package/dist/src/genui/schema.d.ts +71 -0
  184. package/dist/src/genui/schema.d.ts.map +1 -0
  185. package/dist/src/genui/schema.js +304 -0
  186. package/dist/src/genui/schema.js.map +1 -0
  187. package/dist/src/genui/text.d.ts +35 -0
  188. package/dist/src/genui/text.d.ts.map +1 -0
  189. package/dist/src/genui/text.js +156 -0
  190. package/dist/src/genui/text.js.map +1 -0
  191. package/dist/src/genui/tools.d.ts +91 -0
  192. package/dist/src/genui/tools.d.ts.map +1 -0
  193. package/dist/src/genui/tools.js +292 -0
  194. package/dist/src/genui/tools.js.map +1 -0
  195. package/dist/src/genui/tree.d.ts +56 -0
  196. package/dist/src/genui/tree.d.ts.map +1 -0
  197. package/dist/src/genui/tree.js +188 -0
  198. package/dist/src/genui/tree.js.map +1 -0
  199. package/dist/src/index.d.ts +4 -2
  200. package/dist/src/index.d.ts.map +1 -1
  201. package/dist/src/index.js +2 -1
  202. package/dist/src/index.js.map +1 -1
  203. package/dist/src/mcp/auth.d.ts +17 -1
  204. package/dist/src/mcp/auth.d.ts.map +1 -1
  205. package/dist/src/mcp/auth.js +14 -3
  206. package/dist/src/mcp/auth.js.map +1 -1
  207. package/dist/src/mcp/define_config.d.ts +81 -2
  208. package/dist/src/mcp/define_config.d.ts.map +1 -1
  209. package/dist/src/mcp/define_config.js.map +1 -1
  210. package/dist/src/mcp/index.d.ts +1 -1
  211. package/dist/src/mcp/index.d.ts.map +1 -1
  212. package/dist/src/mcp/index.js.map +1 -1
  213. package/dist/src/mcp/oauth-resource.d.ts +9 -0
  214. package/dist/src/mcp/oauth-resource.d.ts.map +1 -0
  215. package/dist/src/mcp/oauth-resource.js +16 -0
  216. package/dist/src/mcp/oauth-resource.js.map +1 -0
  217. package/dist/src/mcp/server.d.ts +5 -0
  218. package/dist/src/mcp/server.d.ts.map +1 -1
  219. package/dist/src/mcp/server.js +48 -16
  220. package/dist/src/mcp/server.js.map +1 -1
  221. package/dist/src/negotiated-tool-ui.d.ts.map +1 -1
  222. package/dist/src/negotiated-tool-ui.js +12 -8
  223. package/dist/src/negotiated-tool-ui.js.map +1 -1
  224. package/dist/src/opencode/client.d.ts +202 -0
  225. package/dist/src/opencode/client.d.ts.map +1 -0
  226. package/dist/src/opencode/client.js +2 -0
  227. package/dist/src/opencode/client.js.map +1 -0
  228. package/dist/src/opencode/durable/index.d.ts +33 -0
  229. package/dist/src/opencode/durable/index.d.ts.map +1 -0
  230. package/dist/src/opencode/durable/index.js +38 -0
  231. package/dist/src/opencode/durable/index.js.map +1 -0
  232. package/dist/src/opencode/durable/runner.d.ts +36 -0
  233. package/dist/src/opencode/durable/runner.d.ts.map +1 -0
  234. package/dist/src/opencode/durable/runner.js +88 -0
  235. package/dist/src/opencode/durable/runner.js.map +1 -0
  236. package/dist/src/opencode/durable/workflow.d.ts +40 -0
  237. package/dist/src/opencode/durable/workflow.d.ts.map +1 -0
  238. package/dist/src/opencode/durable/workflow.js +106 -0
  239. package/dist/src/opencode/durable/workflow.js.map +1 -0
  240. package/dist/src/opencode/engine.d.ts +48 -0
  241. package/dist/src/opencode/engine.d.ts.map +1 -0
  242. package/dist/src/opencode/engine.js +98 -0
  243. package/dist/src/opencode/engine.js.map +1 -0
  244. package/dist/src/opencode/event-hub.d.ts +23 -0
  245. package/dist/src/opencode/event-hub.d.ts.map +1 -0
  246. package/dist/src/opencode/event-hub.js +99 -0
  247. package/dist/src/opencode/event-hub.js.map +1 -0
  248. package/dist/src/opencode/forms.d.ts +19 -0
  249. package/dist/src/opencode/forms.d.ts.map +1 -0
  250. package/dist/src/opencode/forms.js +82 -0
  251. package/dist/src/opencode/forms.js.map +1 -0
  252. package/dist/src/opencode/host.d.ts +179 -0
  253. package/dist/src/opencode/host.d.ts.map +1 -0
  254. package/dist/src/opencode/host.js +34 -0
  255. package/dist/src/opencode/host.js.map +1 -0
  256. package/dist/src/opencode/index.d.ts +15 -0
  257. package/dist/src/opencode/index.d.ts.map +1 -0
  258. package/dist/src/opencode/index.js +9 -0
  259. package/dist/src/opencode/index.js.map +1 -0
  260. package/dist/src/opencode/log.d.ts +9 -0
  261. package/dist/src/opencode/log.d.ts.map +1 -0
  262. package/dist/src/opencode/log.js +15 -0
  263. package/dist/src/opencode/log.js.map +1 -0
  264. package/dist/src/opencode/mcp.d.ts +60 -0
  265. package/dist/src/opencode/mcp.d.ts.map +1 -0
  266. package/dist/src/opencode/mcp.js +258 -0
  267. package/dist/src/opencode/mcp.js.map +1 -0
  268. package/dist/src/opencode/runner.d.ts +40 -0
  269. package/dist/src/opencode/runner.d.ts.map +1 -0
  270. package/dist/src/opencode/runner.js +125 -0
  271. package/dist/src/opencode/runner.js.map +1 -0
  272. package/dist/src/opencode/turn.d.ts +167 -0
  273. package/dist/src/opencode/turn.d.ts.map +1 -0
  274. package/dist/src/opencode/turn.js +761 -0
  275. package/dist/src/opencode/turn.js.map +1 -0
  276. package/dist/src/opencode/turns.d.ts +245 -0
  277. package/dist/src/opencode/turns.d.ts.map +1 -0
  278. package/dist/src/opencode/turns.js +867 -0
  279. package/dist/src/opencode/turns.js.map +1 -0
  280. package/dist/src/personas.d.ts.map +1 -1
  281. package/dist/src/personas.js +4 -1
  282. package/dist/src/personas.js.map +1 -1
  283. package/dist/src/react/ag-ui.d.ts +4 -2
  284. package/dist/src/react/ag-ui.d.ts.map +1 -1
  285. package/dist/src/react/ag-ui.js +2 -2
  286. package/dist/src/react/ag-ui.js.map +1 -1
  287. package/dist/src/react/client.d.ts +1 -1
  288. package/dist/src/react/client.d.ts.map +1 -1
  289. package/dist/src/react/client.js +1 -1
  290. package/dist/src/react/client.js.map +1 -1
  291. package/dist/src/react/core/ag-ui-backend.d.ts +85 -0
  292. package/dist/src/react/core/ag-ui-backend.d.ts.map +1 -0
  293. package/dist/src/react/core/ag-ui-backend.js +409 -0
  294. package/dist/src/react/core/ag-ui-backend.js.map +1 -0
  295. package/dist/src/react/core/agent-chat-transport.d.ts +187 -0
  296. package/dist/src/react/core/agent-chat-transport.d.ts.map +1 -0
  297. package/dist/src/react/core/agent-chat-transport.js +796 -0
  298. package/dist/src/react/core/agent-chat-transport.js.map +1 -0
  299. package/dist/src/react/core/approvals/countdown.d.ts +22 -0
  300. package/dist/src/react/core/approvals/countdown.d.ts.map +1 -0
  301. package/dist/src/react/core/approvals/countdown.js +39 -0
  302. package/dist/src/react/core/approvals/countdown.js.map +1 -0
  303. package/dist/src/react/core/approvals/proposals.d.ts +15 -0
  304. package/dist/src/react/core/approvals/proposals.d.ts.map +1 -0
  305. package/dist/src/react/core/approvals/proposals.js +82 -0
  306. package/dist/src/react/core/approvals/proposals.js.map +1 -0
  307. package/dist/src/react/core/approvals/use-action-proposals.d.ts +10 -0
  308. package/dist/src/react/core/approvals/use-action-proposals.d.ts.map +1 -0
  309. package/dist/src/react/core/approvals/use-action-proposals.js +86 -0
  310. package/dist/src/react/core/approvals/use-action-proposals.js.map +1 -0
  311. package/dist/src/react/core/attachments/files.d.ts +39 -0
  312. package/dist/src/react/core/attachments/files.d.ts.map +1 -0
  313. package/dist/src/react/core/attachments/files.js +89 -0
  314. package/dist/src/react/core/attachments/files.js.map +1 -0
  315. package/dist/src/react/core/attachments/use-attachments.d.ts +106 -0
  316. package/dist/src/react/core/attachments/use-attachments.d.ts.map +1 -0
  317. package/dist/src/react/core/attachments/use-attachments.js +217 -0
  318. package/dist/src/react/core/attachments/use-attachments.js.map +1 -0
  319. package/dist/src/react/core/backend.d.ts +234 -0
  320. package/dist/src/react/core/backend.d.ts.map +1 -0
  321. package/dist/src/react/core/backend.js +21 -0
  322. package/dist/src/react/core/backend.js.map +1 -0
  323. package/dist/src/react/core/background-runs.d.ts +32 -0
  324. package/dist/src/react/core/background-runs.d.ts.map +1 -0
  325. package/dist/src/react/core/background-runs.js +47 -0
  326. package/dist/src/react/core/background-runs.js.map +1 -0
  327. package/dist/src/react/core/catalog/use-agents.d.ts +31 -0
  328. package/dist/src/react/core/catalog/use-agents.d.ts.map +1 -0
  329. package/dist/src/react/core/catalog/use-agents.js +28 -0
  330. package/dist/src/react/core/catalog/use-agents.js.map +1 -0
  331. package/dist/src/react/core/catalog/use-models.d.ts +41 -0
  332. package/dist/src/react/core/catalog/use-models.d.ts.map +1 -0
  333. package/dist/src/react/core/catalog/use-models.js +35 -0
  334. package/dist/src/react/core/catalog/use-models.js.map +1 -0
  335. package/dist/src/react/core/catalog/use-resource.d.ts +12 -0
  336. package/dist/src/react/core/catalog/use-resource.d.ts.map +1 -0
  337. package/dist/src/react/core/catalog/use-resource.js +41 -0
  338. package/dist/src/react/core/catalog/use-resource.js.map +1 -0
  339. package/dist/src/react/core/client-wire.d.ts +14 -0
  340. package/dist/src/react/core/client-wire.d.ts.map +1 -0
  341. package/dist/src/react/core/client-wire.js +2 -0
  342. package/dist/src/react/core/client-wire.js.map +1 -0
  343. package/dist/src/react/core/client.d.ts +222 -0
  344. package/dist/src/react/core/client.d.ts.map +1 -0
  345. package/dist/src/react/core/client.js +435 -0
  346. package/dist/src/react/core/client.js.map +1 -0
  347. package/dist/src/react/core/components/ambient-ui.d.ts +22 -0
  348. package/dist/src/react/core/components/ambient-ui.d.ts.map +1 -0
  349. package/dist/src/react/core/components/ambient-ui.js +30 -0
  350. package/dist/src/react/core/components/ambient-ui.js.map +1 -0
  351. package/dist/src/react/core/components/chat-input.d.ts +44 -0
  352. package/dist/src/react/core/components/chat-input.d.ts.map +1 -0
  353. package/dist/src/react/core/components/chat-input.js +69 -0
  354. package/dist/src/react/core/components/chat-input.js.map +1 -0
  355. package/dist/src/react/core/components/index.d.ts +7 -0
  356. package/dist/src/react/core/components/index.d.ts.map +1 -0
  357. package/dist/src/react/core/components/index.js +7 -0
  358. package/dist/src/react/core/components/index.js.map +1 -0
  359. package/dist/src/react/core/components/message-item.d.ts +101 -0
  360. package/dist/src/react/core/components/message-item.d.ts.map +1 -0
  361. package/dist/src/react/core/components/message-item.js +118 -0
  362. package/dist/src/react/core/components/message-item.js.map +1 -0
  363. package/dist/src/react/core/components/message-list.d.ts +85 -0
  364. package/dist/src/react/core/components/message-list.d.ts.map +1 -0
  365. package/dist/src/react/core/components/message-list.js +45 -0
  366. package/dist/src/react/core/components/message-list.js.map +1 -0
  367. package/dist/src/react/core/components/speech-languages.d.ts +22 -0
  368. package/dist/src/react/core/components/speech-languages.d.ts.map +1 -0
  369. package/dist/src/react/core/components/speech-languages.js +38 -0
  370. package/dist/src/react/core/components/speech-languages.js.map +1 -0
  371. package/dist/src/react/core/components/use-speech-recognition.d.ts +19 -0
  372. package/dist/src/react/core/components/use-speech-recognition.d.ts.map +1 -0
  373. package/dist/src/react/core/components/use-speech-recognition.js +92 -0
  374. package/dist/src/react/core/components/use-speech-recognition.js.map +1 -0
  375. package/dist/src/react/core/composer/index.d.ts +4 -0
  376. package/dist/src/react/core/composer/index.d.ts.map +1 -0
  377. package/dist/src/react/core/composer/index.js +4 -0
  378. package/dist/src/react/core/composer/index.js.map +1 -0
  379. package/dist/src/react/core/composer/model.d.ts +83 -0
  380. package/dist/src/react/core/composer/model.d.ts.map +1 -0
  381. package/dist/src/react/core/composer/model.js +53 -0
  382. package/dist/src/react/core/composer/model.js.map +1 -0
  383. package/dist/src/react/core/composer/skills-source.d.ts +29 -0
  384. package/dist/src/react/core/composer/skills-source.d.ts.map +1 -0
  385. package/dist/src/react/core/composer/skills-source.js +61 -0
  386. package/dist/src/react/core/composer/skills-source.js.map +1 -0
  387. package/dist/src/react/core/composer/use-composer-autocomplete.d.ts +78 -0
  388. package/dist/src/react/core/composer/use-composer-autocomplete.d.ts.map +1 -0
  389. package/dist/src/react/core/composer/use-composer-autocomplete.js +244 -0
  390. package/dist/src/react/core/composer/use-composer-autocomplete.js.map +1 -0
  391. package/dist/src/react/core/config/use-agent-config.d.ts +21 -0
  392. package/dist/src/react/core/config/use-agent-config.d.ts.map +1 -0
  393. package/dist/src/react/core/config/use-agent-config.js +57 -0
  394. package/dist/src/react/core/config/use-agent-config.js.map +1 -0
  395. package/dist/src/react/core/elicitation/answers.d.ts +22 -0
  396. package/dist/src/react/core/elicitation/answers.d.ts.map +1 -0
  397. package/dist/src/react/core/elicitation/answers.js +65 -0
  398. package/dist/src/react/core/elicitation/answers.js.map +1 -0
  399. package/dist/src/react/core/feedback/use-message-feedback.d.ts +32 -0
  400. package/dist/src/react/core/feedback/use-message-feedback.d.ts.map +1 -0
  401. package/dist/src/react/core/feedback/use-message-feedback.js +106 -0
  402. package/dist/src/react/core/feedback/use-message-feedback.js.map +1 -0
  403. package/dist/src/react/core/genui/generative-ui.d.ts +76 -0
  404. package/dist/src/react/core/genui/generative-ui.d.ts.map +1 -0
  405. package/dist/src/react/core/genui/generative-ui.js +210 -0
  406. package/dist/src/react/core/genui/generative-ui.js.map +1 -0
  407. package/dist/src/react/core/genui/index.d.ts +5 -0
  408. package/dist/src/react/core/genui/index.d.ts.map +1 -0
  409. package/dist/src/react/core/genui/index.js +5 -0
  410. package/dist/src/react/core/genui/index.js.map +1 -0
  411. package/dist/src/react/core/genui/json-render.d.ts +54 -0
  412. package/dist/src/react/core/genui/json-render.d.ts.map +1 -0
  413. package/dist/src/react/core/genui/json-render.js +64 -0
  414. package/dist/src/react/core/genui/json-render.js.map +1 -0
  415. package/dist/src/react/core/genui/playwright.d.ts +12 -0
  416. package/dist/src/react/core/genui/playwright.d.ts.map +1 -0
  417. package/dist/src/react/core/genui/playwright.js +141 -0
  418. package/dist/src/react/core/genui/playwright.js.map +1 -0
  419. package/dist/src/react/core/genui/react-registry.d.ts +22 -0
  420. package/dist/src/react/core/genui/react-registry.d.ts.map +1 -0
  421. package/dist/src/react/core/genui/react-registry.js +72 -0
  422. package/dist/src/react/core/genui/react-registry.js.map +1 -0
  423. package/dist/src/react/core/genui/server.d.ts +32 -0
  424. package/dist/src/react/core/genui/server.d.ts.map +1 -0
  425. package/dist/src/react/core/genui/server.js +66 -0
  426. package/dist/src/react/core/genui/server.js.map +1 -0
  427. package/dist/src/react/core/genui/types.d.ts +98 -0
  428. package/dist/src/react/core/genui/types.d.ts.map +1 -0
  429. package/dist/src/react/core/genui/types.js +3 -0
  430. package/dist/src/react/core/genui/types.js.map +1 -0
  431. package/dist/src/react/core/genui/use-generative-ui.d.ts +42 -0
  432. package/dist/src/react/core/genui/use-generative-ui.d.ts.map +1 -0
  433. package/dist/src/react/core/genui/use-generative-ui.js +186 -0
  434. package/dist/src/react/core/genui/use-generative-ui.js.map +1 -0
  435. package/dist/src/react/core/http-error.d.ts +33 -0
  436. package/dist/src/react/core/http-error.d.ts.map +1 -0
  437. package/dist/src/react/core/http-error.js +47 -0
  438. package/dist/src/react/core/http-error.js.map +1 -0
  439. package/dist/src/react/core/index.d.ts +35 -0
  440. package/dist/src/react/core/index.d.ts.map +1 -0
  441. package/dist/src/react/core/index.js +34 -0
  442. package/dist/src/react/core/index.js.map +1 -0
  443. package/dist/src/react/core/markdown/agent-markdown.d.ts +39 -0
  444. package/dist/src/react/core/markdown/agent-markdown.d.ts.map +1 -0
  445. package/dist/src/react/core/markdown/agent-markdown.js +22 -0
  446. package/dist/src/react/core/markdown/agent-markdown.js.map +1 -0
  447. package/dist/src/react/core/markdown/index.d.ts +2 -0
  448. package/dist/src/react/core/markdown/index.d.ts.map +1 -0
  449. package/dist/src/react/core/markdown/index.js +2 -0
  450. package/dist/src/react/core/markdown/index.js.map +1 -0
  451. package/dist/src/react/core/media/index.d.ts +64 -0
  452. package/dist/src/react/core/media/index.d.ts.map +1 -0
  453. package/dist/src/react/core/media/index.js +135 -0
  454. package/dist/src/react/core/media/index.js.map +1 -0
  455. package/dist/src/react/core/media/tus.d.ts +13 -0
  456. package/dist/src/react/core/media/tus.d.ts.map +1 -0
  457. package/dist/src/react/core/media/tus.js +59 -0
  458. package/dist/src/react/core/media/tus.js.map +1 -0
  459. package/dist/src/react/core/presentation/phrasing.d.ts +25 -0
  460. package/dist/src/react/core/presentation/phrasing.d.ts.map +1 -0
  461. package/dist/src/react/core/presentation/phrasing.js +58 -0
  462. package/dist/src/react/core/presentation/phrasing.js.map +1 -0
  463. package/dist/src/react/core/presentation/result-view.d.ts +43 -0
  464. package/dist/src/react/core/presentation/result-view.d.ts.map +1 -0
  465. package/dist/src/react/core/presentation/result-view.js +90 -0
  466. package/dist/src/react/core/presentation/result-view.js.map +1 -0
  467. package/dist/src/react/core/presentation/tool-activity.d.ts +106 -0
  468. package/dist/src/react/core/presentation/tool-activity.d.ts.map +1 -0
  469. package/dist/src/react/core/presentation/tool-activity.js +165 -0
  470. package/dist/src/react/core/presentation/tool-activity.js.map +1 -0
  471. package/dist/src/react/core/presentation/use-tool-catalog.d.ts +39 -0
  472. package/dist/src/react/core/presentation/use-tool-catalog.d.ts.map +1 -0
  473. package/dist/src/react/core/presentation/use-tool-catalog.js +77 -0
  474. package/dist/src/react/core/presentation/use-tool-catalog.js.map +1 -0
  475. package/dist/src/react/core/provider.d.ts +68 -0
  476. package/dist/src/react/core/provider.d.ts.map +1 -0
  477. package/dist/src/react/core/provider.js +61 -0
  478. package/dist/src/react/core/provider.js.map +1 -0
  479. package/dist/src/react/core/queue/model.d.ts +73 -0
  480. package/dist/src/react/core/queue/model.d.ts.map +1 -0
  481. package/dist/src/react/core/queue/model.js +2 -0
  482. package/dist/src/react/core/queue/model.js.map +1 -0
  483. package/dist/src/react/core/quota/use-quota.d.ts +35 -0
  484. package/dist/src/react/core/quota/use-quota.d.ts.map +1 -0
  485. package/dist/src/react/core/quota/use-quota.js +47 -0
  486. package/dist/src/react/core/quota/use-quota.js.map +1 -0
  487. package/dist/src/react/core/reasoning/timing.d.ts +38 -0
  488. package/dist/src/react/core/reasoning/timing.d.ts.map +1 -0
  489. package/dist/src/react/core/reasoning/timing.js +73 -0
  490. package/dist/src/react/core/reasoning/timing.js.map +1 -0
  491. package/dist/src/react/core/run-errors.d.ts +37 -0
  492. package/dist/src/react/core/run-errors.d.ts.map +1 -0
  493. package/dist/src/react/core/run-errors.js +37 -0
  494. package/dist/src/react/core/run-errors.js.map +1 -0
  495. package/dist/src/react/core/stored-message-to-ui-message.d.ts +4 -0
  496. package/dist/src/react/core/stored-message-to-ui-message.d.ts.map +1 -0
  497. package/dist/src/react/core/stored-message-to-ui-message.js +216 -0
  498. package/dist/src/react/core/stored-message-to-ui-message.js.map +1 -0
  499. package/dist/src/react/core/stored-thread-to-ui-messages.d.ts +82 -0
  500. package/dist/src/react/core/stored-thread-to-ui-messages.d.ts.map +1 -0
  501. package/dist/src/react/core/stored-thread-to-ui-messages.js +116 -0
  502. package/dist/src/react/core/stored-thread-to-ui-messages.js.map +1 -0
  503. package/dist/src/react/core/threads/threads-events.d.ts +22 -0
  504. package/dist/src/react/core/threads/threads-events.d.ts.map +1 -0
  505. package/dist/src/react/core/threads/threads-events.js +21 -0
  506. package/dist/src/react/core/threads/threads-events.js.map +1 -0
  507. package/dist/src/react/core/threads/use-threads.d.ts +31 -0
  508. package/dist/src/react/core/threads/use-threads.d.ts.map +1 -0
  509. package/dist/src/react/core/threads/use-threads.js +81 -0
  510. package/dist/src/react/core/threads/use-threads.js.map +1 -0
  511. package/dist/src/react/core/transcript/index.d.ts +4 -0
  512. package/dist/src/react/core/transcript/index.d.ts.map +1 -0
  513. package/dist/src/react/core/transcript/index.js +4 -0
  514. package/dist/src/react/core/transcript/index.js.map +1 -0
  515. package/dist/src/react/core/transcript/model.d.ts +399 -0
  516. package/dist/src/react/core/transcript/model.d.ts.map +1 -0
  517. package/dist/src/react/core/transcript/model.js +725 -0
  518. package/dist/src/react/core/transcript/model.js.map +1 -0
  519. package/dist/src/react/core/transcript/use-chat-transcript.d.ts +254 -0
  520. package/dist/src/react/core/transcript/use-chat-transcript.d.ts.map +1 -0
  521. package/dist/src/react/core/transcript/use-chat-transcript.js +572 -0
  522. package/dist/src/react/core/transcript/use-chat-transcript.js.map +1 -0
  523. package/dist/src/react/core/transcript/use-stick-to-bottom.d.ts +33 -0
  524. package/dist/src/react/core/transcript/use-stick-to-bottom.d.ts.map +1 -0
  525. package/dist/src/react/core/transcript/use-stick-to-bottom.js +48 -0
  526. package/dist/src/react/core/transcript/use-stick-to-bottom.js.map +1 -0
  527. package/dist/src/react/core/use-agent-chat.d.ts +341 -0
  528. package/dist/src/react/core/use-agent-chat.d.ts.map +1 -0
  529. package/dist/src/react/core/use-agent-chat.js +1118 -0
  530. package/dist/src/react/core/use-agent-chat.js.map +1 -0
  531. package/dist/src/react/genui/index.d.ts +1 -7
  532. package/dist/src/react/genui/index.d.ts.map +1 -1
  533. package/dist/src/react/genui/index.js +1 -7
  534. package/dist/src/react/genui/index.js.map +1 -1
  535. package/dist/src/react/genui/json-render.d.ts +1 -5
  536. package/dist/src/react/genui/json-render.d.ts.map +1 -1
  537. package/dist/src/react/genui/json-render.js +1 -5
  538. package/dist/src/react/genui/json-render.js.map +1 -1
  539. package/dist/src/react/genui/server.d.ts +2 -0
  540. package/dist/src/react/genui/server.d.ts.map +1 -0
  541. package/dist/src/react/genui/server.js +2 -0
  542. package/dist/src/react/genui/server.js.map +1 -0
  543. package/dist/src/react/genui/server_playwright.d.ts +2 -0
  544. package/dist/src/react/genui/server_playwright.d.ts.map +1 -0
  545. package/dist/src/react/genui/server_playwright.js +2 -0
  546. package/dist/src/react/genui/server_playwright.js.map +1 -0
  547. package/dist/src/react/index.d.ts +5 -7
  548. package/dist/src/react/index.d.ts.map +1 -1
  549. package/dist/src/react/index.js +5 -7
  550. package/dist/src/react/index.js.map +1 -1
  551. package/dist/src/react/markdown.d.ts +1 -6
  552. package/dist/src/react/markdown.d.ts.map +1 -1
  553. package/dist/src/react/markdown.js +1 -6
  554. package/dist/src/react/markdown.js.map +1 -1
  555. package/dist/src/react/media.d.ts +1 -17
  556. package/dist/src/react/media.d.ts.map +1 -1
  557. package/dist/src/react/media.js +1 -17
  558. package/dist/src/react/media.js.map +1 -1
  559. package/dist/src/refusal.d.ts +3 -0
  560. package/dist/src/refusal.d.ts.map +1 -0
  561. package/dist/src/refusal.js +3 -0
  562. package/dist/src/refusal.js.map +1 -0
  563. package/dist/src/spi/agent-runner.d.ts +6 -0
  564. package/dist/src/spi/agent-runner.d.ts.map +1 -1
  565. package/dist/src/spi/chat-queue.d.ts +4 -1
  566. package/dist/src/spi/chat-queue.d.ts.map +1 -1
  567. package/dist/src/spi/chat-queue.js.map +1 -1
  568. package/dist/src/spi/protocol-adapter.d.ts +3 -3
  569. package/dist/src/spi/roles-policy.d.ts +7 -0
  570. package/dist/src/spi/roles-policy.d.ts.map +1 -1
  571. package/dist/src/spi/tool.d.ts +18 -3
  572. package/dist/src/spi/tool.d.ts.map +1 -1
  573. package/dist/src/stores/lucid-schema.d.ts.map +1 -1
  574. package/dist/src/stores/lucid-schema.js +2 -0
  575. package/dist/src/stores/lucid-schema.js.map +1 -1
  576. package/dist/src/stores/lucid.d.ts.map +1 -1
  577. package/dist/src/stores/lucid.js +3 -0
  578. package/dist/src/stores/lucid.js.map +1 -1
  579. package/dist/src/testing/chat-queue-store-contract.d.ts.map +1 -1
  580. package/dist/src/testing/chat-queue-store-contract.js +4 -0
  581. package/dist/src/testing/chat-queue-store-contract.js.map +1 -1
  582. package/dist/src/testing/in-memory-store.d.ts.map +1 -1
  583. package/dist/src/testing/in-memory-store.js +1 -0
  584. package/dist/src/testing/in-memory-store.js.map +1 -1
  585. package/dist/src/tool-discovery.d.ts +1 -1
  586. package/dist/src/tool-discovery.d.ts.map +1 -1
  587. package/dist/src/tool-discovery.js +5 -1
  588. package/dist/src/tool-discovery.js.map +1 -1
  589. package/dist/src/tool-registry.d.ts +3 -0
  590. package/dist/src/tool-registry.d.ts.map +1 -1
  591. package/dist/src/tool-registry.js +15 -3
  592. package/dist/src/tool-registry.js.map +1 -1
  593. package/dist/src/tool-result-presentation.d.ts +12 -0
  594. package/dist/src/tool-result-presentation.d.ts.map +1 -0
  595. package/dist/src/tool-result-presentation.js +44 -0
  596. package/dist/src/tool-result-presentation.js.map +1 -0
  597. package/dist/src/types.d.ts +20 -0
  598. package/dist/src/types.d.ts.map +1 -1
  599. package/dist/src/ui-capabilities.d.ts +1 -8
  600. package/dist/src/ui-capabilities.d.ts.map +1 -1
  601. package/dist/src/ui-capabilities.js +3 -24
  602. package/dist/src/ui-capabilities.js.map +1 -1
  603. package/package.json +123 -22
  604. package/skills/agent-governance/SKILL.md +12 -4
  605. package/skills/agent-personas-agents/SKILL.md +2 -1
  606. package/skills/agent-setup/SKILL.md +36 -13
  607. package/skills/agent-testing/SKILL.md +22 -0
  608. package/skills/agent-tools/SKILL.md +54 -9
  609. package/dist/src/ag-ui/proposal-decision.d.ts.map +0 -1
  610. package/dist/src/ag-ui/proposal-decision.js.map +0 -1
@@ -0,0 +1,165 @@
1
+ import { getToolName } from 'ai';
2
+ import { fillTemplate, phraseFor } from './phrasing.js';
3
+ import { resolveResultView } from './result-view.js';
4
+ /** Whether the stream classified this call as an `action` (it parks for approval before it runs). */
5
+ export function isActionCall(part) {
6
+ const metadata = part.toolMetadata;
7
+ return (typeof metadata === 'object' &&
8
+ metadata !== null &&
9
+ metadata.toolKind === 'action');
10
+ }
11
+ export function toolCallState(part) {
12
+ const output = 'output' in part ? part.output : undefined;
13
+ if (output !== null &&
14
+ typeof output === 'object' &&
15
+ 'proposalId' in output &&
16
+ 'executed' in output &&
17
+ output.executed === false)
18
+ return {
19
+ status: 'awaiting-approval',
20
+ isSettled: false,
21
+ isFailed: false,
22
+ isDenied: false,
23
+ output,
24
+ error: null,
25
+ };
26
+ const errorText = 'errorText' in part ? part.errorText : undefined;
27
+ const outputError = output !== null && typeof output === 'object' && 'error' in output
28
+ ? String(output.error)
29
+ : undefined;
30
+ const isDenied = part.state === 'output-denied';
31
+ const isFailed = part.state === 'output-error' || (outputError !== undefined && !isDenied);
32
+ const isSettled = part.state === 'output-available' || part.state === 'output-error' || isDenied;
33
+ const isAwaiting = part.state === 'approval-requested' || (part.state === 'input-available' && isActionCall(part));
34
+ const status = isDenied
35
+ ? 'denied'
36
+ : isFailed
37
+ ? 'failed'
38
+ : isSettled
39
+ ? 'done'
40
+ : isAwaiting
41
+ ? 'awaiting-approval'
42
+ : 'running';
43
+ return {
44
+ status,
45
+ isSettled,
46
+ isFailed,
47
+ isDenied,
48
+ output,
49
+ error: errorText ?? outputError ?? null,
50
+ };
51
+ }
52
+ /**
53
+ * Which failed calls the model went on to correct, by call id: a call that failed and was followed,
54
+ * in the same run, by a SUCCESS of the same tool. The operator wants to know a retry happened, not
55
+ * to read every attempt. A failed read is not corrected by a successful query.
56
+ */
57
+ export function correctedCallIds(parts) {
58
+ const corrected = new Set();
59
+ const lastSuccessByTool = new Map();
60
+ parts.forEach((part, index) => {
61
+ if (part.state === 'output-available' && !toolCallState(part).isFailed) {
62
+ lastSuccessByTool.set(getToolName(part), index);
63
+ }
64
+ });
65
+ parts.forEach((part, index) => {
66
+ const successAt = lastSuccessByTool.get(getToolName(part));
67
+ if (successAt !== undefined && index < successAt && toolCallState(part).isFailed) {
68
+ corrected.add(part.toolCallId);
69
+ }
70
+ });
71
+ return corrected;
72
+ }
73
+ export function describeToolCall(part, catalog, options = {}) {
74
+ const presentation = catalog?.[getToolName(part)];
75
+ const state = toolCallState(part);
76
+ const input = part.input;
77
+ const confirm = presentation?.confirm;
78
+ return {
79
+ status: state.status,
80
+ phrase: phraseFor(presentation, input, state.isSettled, options.fallback),
81
+ label: presentation?.label ?? null,
82
+ icon: presentation?.icon ?? null,
83
+ tone: presentation?.tone ?? 'neutral',
84
+ detail: presentation?.detail ?? null,
85
+ confirm: options.confirmation !== undefined
86
+ ? {
87
+ title: options.confirmation.title,
88
+ verb: options.confirmation.verb,
89
+ detail: options.confirmation.detail ?? null,
90
+ }
91
+ : confirm === undefined
92
+ ? null
93
+ : {
94
+ title: fillTemplate(confirm.title, input),
95
+ verb: confirm.verb,
96
+ detail: confirm.detail !== undefined ? fillTemplate(confirm.detail, input) : null,
97
+ },
98
+ result: state.status === 'done'
99
+ ? resolveResultView(state.output, presentation?.result, {
100
+ ...(options.inferResult !== undefined ? { infer: options.inferResult } : {}),
101
+ })
102
+ : null,
103
+ error: state.error,
104
+ presentation: presentation ?? null,
105
+ };
106
+ }
107
+ const STATUS_WEIGHT = {
108
+ running: 4,
109
+ queued: 4,
110
+ executing: 4,
111
+ succeeded: 0,
112
+ 'awaiting-approval': 3,
113
+ failed: 2,
114
+ denied: 1,
115
+ done: 0,
116
+ };
117
+ function descendants(call) {
118
+ return call.children.flatMap((child) => [child, ...descendants(child)]);
119
+ }
120
+ function leaves(call) {
121
+ return call.children.length === 0 ? [call] : call.children.flatMap(leaves);
122
+ }
123
+ /**
124
+ * Fold a tool run into activity groups, in order of first appearance. Pass `block.roots` (the
125
+ * transcript's call tree) so nesting is honoured; a flat `block.calls` works too and simply has
126
+ * nothing nested.
127
+ */
128
+ export function groupToolActivity(calls, options = {}) {
129
+ const expanded = options.expandNested === true ? calls.flatMap(leaves) : [...calls];
130
+ const corrected = options.hideCorrected === true
131
+ ? correctedCallIds(expanded.map((call) => call.part))
132
+ : new Set();
133
+ const groups = new Map();
134
+ for (const call of expanded) {
135
+ if (corrected.has(call.toolCallId))
136
+ continue;
137
+ const presentation = options.catalog?.[call.name];
138
+ const key = options.keyOf?.(call, presentation) ?? presentation?.label ?? call.name;
139
+ const status = call.description.status;
140
+ const phrase = phraseFor(presentation, call.part.input, status !== 'running' && status !== 'awaiting-approval', options.fallback);
141
+ const inner = options.expandNested === true ? 0 : descendants(call).length;
142
+ const existing = groups.get(key);
143
+ if (existing === undefined) {
144
+ groups.set(key, {
145
+ key,
146
+ label: presentation?.label ?? null,
147
+ icon: presentation?.icon ?? null,
148
+ status,
149
+ count: 1,
150
+ phrase,
151
+ calls: [call],
152
+ innerCount: inner,
153
+ });
154
+ continue;
155
+ }
156
+ existing.count += 1;
157
+ existing.calls.push(call);
158
+ existing.phrase = phrase;
159
+ existing.innerCount += inner;
160
+ if (STATUS_WEIGHT[status] > STATUS_WEIGHT[existing.status])
161
+ existing.status = status;
162
+ }
163
+ return [...groups.values()];
164
+ }
165
+ //# sourceMappingURL=tool-activity.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tool-activity.js","sourceRoot":"","sources":["../../../../../src/react/core/presentation/tool-activity.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,39 @@
1
+ import type { ToolCatalogEntry } from '../../../index.js';
2
+ import { ALL_AGENTS } from '../../../tool-presentation.js';
3
+ export { ALL_AGENTS };
4
+ import { type AgentBackend } from '../backend.js';
5
+ import { type ToolCatalog } from './phrasing.js';
6
+ /** What the catalog needs of a backend. */
7
+ type ToolsBackend = Pick<AgentBackend, 'listTools'>;
8
+ export interface UseToolCatalogOptions {
9
+ /**
10
+ * The backend to ask. Default: the enclosing `<AgentProvider>`'s. Must be STABLE across renders
11
+ * (the shared copy is keyed by it): a backend constructed inline refetches every render.
12
+ */
13
+ backend?: ToolsBackend;
14
+ /**
15
+ * The agent whose tools to list. Omitted → the server's default agent. {@link ALL_AGENTS} (`'*'`)
16
+ * → every tool the actor reaches through any agent, each once — for an app with several agents
17
+ * whose conversations one surface shows.
18
+ */
19
+ agent?: string;
20
+ /** `false` holds the request (e.g. until the user is signed in). Default `true`. */
21
+ enabled?: boolean;
22
+ }
23
+ export interface ToolCatalogState {
24
+ /** Tool name → presentation, for the tools that declared one. `{}` until loaded. */
25
+ catalog: ToolCatalog;
26
+ /** Everything `GET <base>/tools` returned, kinds included. */
27
+ entries: ToolCatalogEntry[];
28
+ isLoading: boolean;
29
+ error: Error | null;
30
+ /** Drop the shared copy and ask again. */
31
+ refresh: () => void;
32
+ }
33
+ /**
34
+ * The server-declared presentation of the tools this actor can reach (`GET <base>/tools`), for
35
+ * `phraseFor`, `describeToolCall` and `groupToolActivity` — or pass `catalog` to
36
+ * `useChatTranscript({ toolCatalog })` and read the phrases off the transcript's calls.
37
+ */
38
+ export declare function useToolCatalog(options?: UseToolCatalogOptions): ToolCatalogState;
39
+ //# sourceMappingURL=use-tool-catalog.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"use-tool-catalog.d.ts","sourceRoot":"","sources":["../../../../../src/react/core/presentation/use-tool-catalog.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAC;AAC1D,OAAO,EAAE,UAAU,EAAE,MAAM,+BAA+B,CAAC;AAE3D,OAAO,EAAE,UAAU,EAAE,CAAC;AAGtB,OAAO,EAAE,KAAK,YAAY,EAAgC,MAAM,eAAe,CAAC;AAEhF,OAAO,EAAE,KAAK,WAAW,EAAmB,MAAM,eAAe,CAAC;AAElE,2CAA2C;AAC3C,KAAK,YAAY,GAAG,IAAI,CAAC,YAAY,EAAE,WAAW,CAAC,CAAC;AAEpD,MAAM,WAAW,qBAAqB;IACpC;;;OAGG;IACH,OAAO,CAAC,EAAE,YAAY,CAAC;IACvB;;;;OAIG;IACH,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,oFAAoF;IACpF,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB;AAED,MAAM,WAAW,gBAAgB;IAC/B,oFAAoF;IACpF,OAAO,EAAE,WAAW,CAAC;IACrB,8DAA8D;IAC9D,OAAO,EAAE,gBAAgB,EAAE,CAAC;IAC5B,SAAS,EAAE,OAAO,CAAC;IACnB,KAAK,EAAE,KAAK,GAAG,IAAI,CAAC;IACpB,0CAA0C;IAC1C,OAAO,EAAE,MAAM,IAAI,CAAC;CACrB;AA8BD;;;;GAIG;AACH,wBAAgB,cAAc,CAAC,OAAO,GAAE,qBAA0B,GAAG,gBAAgB,CAyCpF"}
@@ -0,0 +1,77 @@
1
+ import { ALL_AGENTS } from '../../../tool-presentation.js';
2
+ export { ALL_AGENTS };
3
+ import { useCallback, useEffect, useMemo, useState } from 'react';
4
+ import { AgentBackendUnsupportedError } from '../backend.js';
5
+ import { useAgentBackend } from '../provider.js';
6
+ import { toolCatalogFrom } from './phrasing.js';
7
+ /**
8
+ * One request per backend + agent for the whole page: the catalog is a deployment-time constant, so
9
+ * every component that narrates a tool call can call this hook and share the answer instead of
10
+ * putting a request between a tool starting and the sentence that describes it. A failed request
11
+ * is not cached, so the next mount retries.
12
+ */
13
+ const shared = new WeakMap();
14
+ function load(client, agent) {
15
+ let byAgent = shared.get(client);
16
+ if (byAgent === undefined) {
17
+ byAgent = new Map();
18
+ shared.set(client, byAgent);
19
+ }
20
+ const key = agent ?? '';
21
+ const cached = byAgent.get(key);
22
+ if (cached !== undefined)
23
+ return cached;
24
+ if (client.listTools === undefined) {
25
+ return Promise.reject(new AgentBackendUnsupportedError('listTools'));
26
+ }
27
+ const request = client.listTools(agent).catch((error) => {
28
+ byAgent.delete(key);
29
+ throw error;
30
+ });
31
+ byAgent.set(key, request);
32
+ return request;
33
+ }
34
+ /**
35
+ * The server-declared presentation of the tools this actor can reach (`GET <base>/tools`), for
36
+ * `phraseFor`, `describeToolCall` and `groupToolActivity` — or pass `catalog` to
37
+ * `useChatTranscript({ toolCatalog })` and read the phrases off the transcript's calls.
38
+ */
39
+ export function useToolCatalog(options = {}) {
40
+ const { agent, enabled = true } = options;
41
+ const client = useAgentBackend(options.backend);
42
+ const [entries, setEntries] = useState([]);
43
+ const [isLoading, setLoading] = useState(enabled);
44
+ const [error, setError] = useState(null);
45
+ const [generation, setGeneration] = useState(0);
46
+ // biome-ignore lint/correctness/useExhaustiveDependencies: `generation` is the refresh trigger
47
+ useEffect(() => {
48
+ if (!enabled) {
49
+ setLoading(false);
50
+ return;
51
+ }
52
+ let cancelled = false;
53
+ setLoading(true);
54
+ load(client, agent).then((loaded) => {
55
+ if (cancelled)
56
+ return;
57
+ setEntries(Array.isArray(loaded) ? loaded : []);
58
+ setError(null);
59
+ setLoading(false);
60
+ }, (failure) => {
61
+ if (cancelled)
62
+ return;
63
+ setError(failure instanceof Error ? failure : new Error(String(failure)));
64
+ setLoading(false);
65
+ });
66
+ return () => {
67
+ cancelled = true;
68
+ };
69
+ }, [client, agent, enabled, generation]);
70
+ const refresh = useCallback(() => {
71
+ shared.get(client)?.delete(agent ?? '');
72
+ setGeneration((current) => current + 1);
73
+ }, [client, agent]);
74
+ const catalog = useMemo(() => toolCatalogFrom(entries), [entries]);
75
+ return { catalog, entries, isLoading, error, refresh };
76
+ }
77
+ //# sourceMappingURL=use-tool-catalog.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"use-tool-catalog.js","sourceRoot":"","sources":["../../../../../src/react/core/presentation/use-tool-catalog.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,68 @@
1
+ import { type ReactNode } from 'react';
2
+ import type { UiCapabilities } from '../../genui/index.js';
3
+ import type { AgentBackend, AttachmentUploadStrategy } from './backend.js';
4
+ import { type GenuiProviderValue } from './genui/generative-ui.js';
5
+ import type { HttpErrorListener } from './http-error.js';
6
+ export interface AgentProviderProps {
7
+ /** Advertise exact supported component versions; omission keeps legacy support, [] is text only. */
8
+ uiCapabilities?: UiCapabilities;
9
+ /**
10
+ * A backend of your own — see {@link AgentBackend}. Omitted → an {@link AgentClient} over this
11
+ * library's REST routes, built from the connection props below (which are ignored when a backend
12
+ * is given). Must be stable across renders.
13
+ */
14
+ backend?: AgentBackend;
15
+ /** The server's origin, e.g. `https://api.example.com`. Default `''` (same origin). */
16
+ baseUrl?: string;
17
+ /** `AgentModule`'s `path`, global prefix included (`'api/agent'`). Default `'agent'`. */
18
+ path?: string;
19
+ /** Static headers on every request. */
20
+ headers?: Record<string, string>;
21
+ /**
22
+ * Read at every request — a short-lived bearer token, or a CSRF header read from a cookie
23
+ * (`{ 'X-XSRF-TOKEN': readCookie('XSRF-TOKEN') }`).
24
+ */
25
+ getHeaders?: () => Record<string, string> | Promise<Record<string, string>>;
26
+ /** `'include'` when the API is on another origin and authenticates by cookie. */
27
+ credentials?: RequestCredentials;
28
+ /** Injectable for tests / non-browser runtimes. */
29
+ fetch?: typeof fetch;
30
+ /**
31
+ * Every error answer of the built-in client (an `AgentHttpError`, or a `MediaUploadError` from
32
+ * `mediaAttachments()`), right before it is thrown — for app-wide reactions such as "401 → sign
33
+ * in again". Read at call time, so it may change between renders.
34
+ */
35
+ onHttpError?: HttpErrorListener;
36
+ /** Attachment uploads of the built-in client. */
37
+ attachments?: {
38
+ /** e.g. `mediaAttachments()` from `@adonis-agora/agent/react/media`. */
39
+ upload?: AttachmentUploadStrategy;
40
+ };
41
+ /**
42
+ * Set generative UI up here — the same settings `<GenuiProvider>` takes (registry, catalog,
43
+ * resolver, fallback, …). Every message then draws pushed components with them.
44
+ */
45
+ genui?: GenuiProviderValue;
46
+ children?: ReactNode;
47
+ }
48
+ /**
49
+ * The agent connection, once, at the app root. Every hook below it — `useAgentChat`, `useThreads`,
50
+ * `useModels`, `useAgents`, `useQuota`, `useToolCatalog`, `useMessageFeedback`, `useAttachments` —
51
+ * talks to it unless handed a `backend` of its own.
52
+ *
53
+ * ```tsx
54
+ * <AgentProvider baseUrl="https://api.example.com" credentials="include">
55
+ * <App />
56
+ * </AgentProvider>
57
+ * ```
58
+ *
59
+ * Without a provider every hook shares one same-origin client on `/agent`.
60
+ */
61
+ export declare function AgentProvider({ backend, uiCapabilities, baseUrl, path, headers, getHeaders, credentials, fetch, onHttpError, attachments, genui, children, }: AgentProviderProps): import("react").JSX.Element;
62
+ /**
63
+ * The backend a hook talks to: `own` when given, else the enclosing {@link AgentProvider}'s, else a
64
+ * shared same-origin client on `/agent`. For your own hooks over the same connection.
65
+ */
66
+ export declare function useAgentBackend<B extends AgentBackend = AgentBackend>(own?: B): B;
67
+ export declare function useAgentUiCapabilities(): UiCapabilities | undefined;
68
+ //# sourceMappingURL=provider.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"provider.d.ts","sourceRoot":"","sources":["../../../../src/react/core/provider.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAgB,KAAK,SAAS,EAA+B,MAAM,OAAO,CAAC;AAClF,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAC3D,OAAO,KAAK,EAAE,YAAY,EAAE,wBAAwB,EAAE,MAAM,cAAc,CAAC;AAG3E,OAAO,EAAiB,KAAK,kBAAkB,EAAE,MAAM,0BAA0B,CAAC;AAClF,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,iBAAiB,CAAC;AAOzD,MAAM,WAAW,kBAAkB;IACjC,oGAAoG;IACpG,cAAc,CAAC,EAAE,cAAc,CAAC;IAChC;;;;OAIG;IACH,OAAO,CAAC,EAAE,YAAY,CAAC;IACvB,uFAAuF;IACvF,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,yFAAyF;IACzF,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,uCAAuC;IACvC,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACjC;;;OAGG;IACH,UAAU,CAAC,EAAE,MAAM,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC;IAC5E,iFAAiF;IACjF,WAAW,CAAC,EAAE,kBAAkB,CAAC;IACjC,mDAAmD;IACnD,KAAK,CAAC,EAAE,OAAO,KAAK,CAAC;IACrB;;;;OAIG;IACH,WAAW,CAAC,EAAE,iBAAiB,CAAC;IAChC,iDAAiD;IACjD,WAAW,CAAC,EAAE;QACZ,wEAAwE;QACxE,MAAM,CAAC,EAAE,wBAAwB,CAAC;KACnC,CAAC;IACF;;;OAGG;IACH,KAAK,CAAC,EAAE,kBAAkB,CAAC;IAC3B,QAAQ,CAAC,EAAE,SAAS,CAAC;CACtB;AAED;;;;;;;;;;;;GAYG;AACH,wBAAgB,aAAa,CAAC,EAC5B,OAAO,EACP,cAAc,EACd,OAAO,EACP,IAAI,EACJ,OAAO,EACP,UAAU,EACV,WAAW,EACX,KAAK,EACL,WAAW,EACX,WAAW,EACX,KAAK,EACL,QAAQ,GACT,EAAE,kBAAkB,+BA8BpB;AAUD;;;GAGG;AACH,wBAAgB,eAAe,CAAC,CAAC,SAAS,YAAY,GAAG,YAAY,EAAE,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,CAGjF;AAKD,wBAAgB,sBAAsB,IAAI,cAAc,GAAG,SAAS,CAEnE"}
@@ -0,0 +1,61 @@
1
+ import { jsx as _jsx } from "react/jsx-runtime";
2
+ import { useContext, useMemo, useRef } from 'react';
3
+ import { AgentClient } from './client.js';
4
+ import { sharedContext } from './components/ambient-ui.js';
5
+ import { GenuiProvider } from './genui/generative-ui.js';
6
+ // Shared by key, like the genui contexts: `/media` and `/genui` are separate bundles.
7
+ const AgentBackendContext = sharedContext('@adonis-agora/agent/react:agent-backend');
8
+ /**
9
+ * The agent connection, once, at the app root. Every hook below it — `useAgentChat`, `useThreads`,
10
+ * `useModels`, `useAgents`, `useQuota`, `useToolCatalog`, `useMessageFeedback`, `useAttachments` —
11
+ * talks to it unless handed a `backend` of its own.
12
+ *
13
+ * ```tsx
14
+ * <AgentProvider baseUrl="https://api.example.com" credentials="include">
15
+ * <App />
16
+ * </AgentProvider>
17
+ * ```
18
+ *
19
+ * Without a provider every hook shares one same-origin client on `/agent`.
20
+ */
21
+ export function AgentProvider({ backend, uiCapabilities, baseUrl, path, headers, getHeaders, credentials, fetch, onHttpError, attachments, genui, children, }) {
22
+ // Headers are read per request, so a re-render with new ones reaches the same client.
23
+ const latestHeaders = useRef({ headers, getHeaders, onHttpError });
24
+ latestHeaders.current = { headers, getHeaders, onHttpError };
25
+ const upload = attachments?.upload;
26
+ const value = useMemo(() => backend ??
27
+ new AgentClient({
28
+ ...(baseUrl !== undefined ? { baseUrl } : {}),
29
+ ...(path !== undefined ? { path } : {}),
30
+ ...(credentials !== undefined ? { credentials } : {}),
31
+ ...(fetch !== undefined ? { fetch } : {}),
32
+ ...(upload !== undefined ? { attachments: { upload } } : {}),
33
+ onHttpError: (error) => latestHeaders.current.onHttpError?.(error),
34
+ getHeaders: async () => {
35
+ const current = latestHeaders.current;
36
+ const dynamic = (await current.getHeaders?.()) ?? {};
37
+ return { ...current.headers, ...dynamic };
38
+ },
39
+ }), [backend, baseUrl, path, credentials, fetch, upload]);
40
+ const content = genui !== undefined ? _jsx(GenuiProvider, { ...genui, children: children }) : children;
41
+ return (_jsx(AgentUiCapabilitiesContext.Provider, { value: uiCapabilities ?? null, children: _jsx(AgentBackendContext.Provider, { value: value, children: content }) }));
42
+ }
43
+ let fallback;
44
+ /** The client every hook uses outside an {@link AgentProvider}: same origin, `/agent`. */
45
+ function defaultBackend() {
46
+ fallback ??= new AgentClient();
47
+ return fallback;
48
+ }
49
+ /**
50
+ * The backend a hook talks to: `own` when given, else the enclosing {@link AgentProvider}'s, else a
51
+ * shared same-origin client on `/agent`. For your own hooks over the same connection.
52
+ */
53
+ export function useAgentBackend(own) {
54
+ const provided = useContext(AgentBackendContext);
55
+ return (own ?? provided ?? defaultBackend());
56
+ }
57
+ const AgentUiCapabilitiesContext = sharedContext('@adonis-agora/agent/react:ui-capabilities');
58
+ export function useAgentUiCapabilities() {
59
+ return useContext(AgentUiCapabilitiesContext) ?? undefined;
60
+ }
61
+ //# sourceMappingURL=provider.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"provider.js","sourceRoot":"","sources":["../../../../src/react/core/provider.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,73 @@
1
+ import type { MessageAttachment, QueuePause } from '../../../index.js';
2
+ import type { MessageFile } from '../attachments/files.js';
3
+ /**
4
+ * What the composer (and `sendMessage`) does with a message sent while a turn is still running:
5
+ * - `'queue'` (default) — it waits in the thread's queue and runs when the turn settles.
6
+ * - `'interrupt'` — the running turn is cancelled and this message runs next.
7
+ * - `'block'` — the composer refuses it (`blockedBy: 'busy'`), as before queues existed.
8
+ */
9
+ export type WhileRunning = 'queue' | 'interrupt' | 'block';
10
+ /**
11
+ * A per-call answer to "a turn is still running" — `composer.submit({ mode })`,
12
+ * `sendMessage(message, { mode })`. It overrides the chat's `whileRunning` for that one send
13
+ * (including `'block'`), and means nothing when no turn is running: the message is simply sent.
14
+ */
15
+ export interface SendWhileRunning {
16
+ /** `'queue'` — wait for the running turn. `'interrupt'` — cancel it and run this next. */
17
+ mode?: 'queue' | 'interrupt';
18
+ }
19
+ /** A message waiting in the thread's queue, as the chat shows it. */
20
+ export interface QueuedChatMessage {
21
+ /** The server's id once it is queued; a local id while `state` is `'sending'`. */
22
+ id: string;
23
+ text: string;
24
+ /** The uploaded attachments as they were queued — what a re-send carries. */
25
+ attachments: MessageAttachment[];
26
+ /**
27
+ * The same attachments as {@link MessageFile}s — the shape `messageFiles()` gives for a sent
28
+ * message, so one renderer draws the files of a waiting message and of a sent one.
29
+ */
30
+ files: MessageFile[];
31
+ /**
32
+ * `'sending'` — on its way to the server (it has no server id yet, so it cannot be edited).
33
+ * `'queued'` — waiting its turn.
34
+ */
35
+ state: 'sending' | 'queued';
36
+ /** Queued by an interrupt: it runs as soon as the cancelled turn settles. */
37
+ interrupt: boolean;
38
+ createdAt: string;
39
+ }
40
+ /** `chat.queue` — the thread's queue of waiting messages, and what can be done to it. */
41
+ export interface ChatQueue {
42
+ /** Waiting messages, in the order they will run. */
43
+ items: QueuedChatMessage[];
44
+ /** Why the queue stopped draining (a failed turn, a Stop, the quota), or `null`. */
45
+ paused: QueuePause | null;
46
+ /** The backend can queue (`enqueueMessage`). Without it sends made mid-turn are refused. */
47
+ isSupported: boolean;
48
+ /**
49
+ * Queue `text` (with already-uploaded `attachments`) on this chat's thread. `mode: 'interrupt'`
50
+ * cancels the running turn and runs it next. Starts at once when nothing is running.
51
+ */
52
+ add: (text: string, options?: {
53
+ attachments?: MessageAttachment[];
54
+ mode?: 'queue' | 'interrupt';
55
+ }) => Promise<void>;
56
+ remove: (id: string) => Promise<void>;
57
+ /**
58
+ * Run a waiting message now: it moves to the head as an interrupt and the running turn is
59
+ * cancelled for it (with nothing running, it starts at once). One server call — the message keeps
60
+ * its id and never leaves the queue, unlike a `remove` followed by an `add`. Needs a backend with
61
+ * `interruptQueuedMessage`.
62
+ */
63
+ interrupt: (id: string) => Promise<void>;
64
+ edit: (id: string, text: string) => Promise<void>;
65
+ /** Move a waiting message to `index` (0 → next). */
66
+ move: (id: string, index: number) => Promise<void>;
67
+ clear: () => Promise<void>;
68
+ /** Lift a pause; the head starts when nothing is running. */
69
+ resume: () => Promise<void>;
70
+ /** The last queue operation that failed, or `null`. */
71
+ error: Error | null;
72
+ }
73
+ //# sourceMappingURL=model.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"model.d.ts","sourceRoot":"","sources":["../../../../../src/react/core/queue/model.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,iBAAiB,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AACvE,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,yBAAyB,CAAC;AAE3D;;;;;GAKG;AACH,MAAM,MAAM,YAAY,GAAG,OAAO,GAAG,WAAW,GAAG,OAAO,CAAC;AAE3D;;;;GAIG;AACH,MAAM,WAAW,gBAAgB;IAC/B,0FAA0F;IAC1F,IAAI,CAAC,EAAE,OAAO,GAAG,WAAW,CAAC;CAC9B;AAED,qEAAqE;AACrE,MAAM,WAAW,iBAAiB;IAChC,kFAAkF;IAClF,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,6EAA6E;IAC7E,WAAW,EAAE,iBAAiB,EAAE,CAAC;IACjC;;;OAGG;IACH,KAAK,EAAE,WAAW,EAAE,CAAC;IACrB;;;OAGG;IACH,KAAK,EAAE,SAAS,GAAG,QAAQ,CAAC;IAC5B,6EAA6E;IAC7E,SAAS,EAAE,OAAO,CAAC;IACnB,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,yFAAyF;AACzF,MAAM,WAAW,SAAS;IACxB,oDAAoD;IACpD,KAAK,EAAE,iBAAiB,EAAE,CAAC;IAC3B,oFAAoF;IACpF,MAAM,EAAE,UAAU,GAAG,IAAI,CAAC;IAC1B,4FAA4F;IAC5F,WAAW,EAAE,OAAO,CAAC;IACrB;;;OAGG;IACH,GAAG,EAAE,CACH,IAAI,EAAE,MAAM,EACZ,OAAO,CAAC,EAAE;QAAE,WAAW,CAAC,EAAE,iBAAiB,EAAE,CAAC;QAAC,IAAI,CAAC,EAAE,OAAO,GAAG,WAAW,CAAA;KAAE,KAC1E,OAAO,CAAC,IAAI,CAAC,CAAC;IACnB,MAAM,EAAE,CAAC,EAAE,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IACtC;;;;;OAKG;IACH,SAAS,EAAE,CAAC,EAAE,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IACzC,IAAI,EAAE,CAAC,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IAClD,oDAAoD;IACpD,IAAI,EAAE,CAAC,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IACnD,KAAK,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;IAC3B,6DAA6D;IAC7D,MAAM,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;IAC5B,uDAAuD;IACvD,KAAK,EAAE,KAAK,GAAG,IAAI,CAAC;CACrB"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=model.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"model.js","sourceRoot":"","sources":["../../../../../src/react/core/queue/model.ts"],"names":[],"mappings":""}
@@ -0,0 +1,35 @@
1
+ import { type QuotaBlock, type QuotaReport, type QuotaWarning, type QuotaWindow } from '../../../spi/quota-provider.js';
2
+ import { type AgentBackend } from '../backend.js';
3
+ export interface UseQuotaOptions {
4
+ /** Default: the enclosing `<AgentProvider>`'s. Must implement `getQuota`. */
5
+ backend?: AgentBackend;
6
+ /** `false` holds the request. Default `true`. */
7
+ enabled?: boolean;
8
+ /** Re-read every `pollMs` ms as well. Default: only on mount, after runs, and on `refresh`. */
9
+ pollMs?: number;
10
+ }
11
+ export interface QuotaState {
12
+ /** The full report, once loaded. */
13
+ report: QuotaReport | undefined;
14
+ windows: QuotaWindow[];
15
+ /** The `day` / `month` windows, when the server reports them. */
16
+ day: QuotaWindow | undefined;
17
+ month: QuotaWindow | undefined;
18
+ /** The window that blocks sends, or `null` — pass it to `useAgentChat({ blocked })`. */
19
+ blocked: QuotaBlock | null;
20
+ /**
21
+ * The soft limit: the fullest window past its `warnAt` (`{ period, ratio, reason? }`), or `null`.
22
+ * The server's `warning`, else derived from the windows; never set while `blocked`.
23
+ */
24
+ warning: QuotaWarning | null;
25
+ isLoading: boolean;
26
+ error: Error | null;
27
+ refresh: () => Promise<void>;
28
+ }
29
+ /**
30
+ * The caller's budget (`GET <base>/quota`): every window's usage against its ceilings, and which
31
+ * one — if any — blocks sends. Re-read after every run a chat on the same backend settles, so a
32
+ * meter moves with the conversation. Headless: draw the meter yourself.
33
+ */
34
+ export declare function useQuota(options?: UseQuotaOptions): QuotaState;
35
+ //# sourceMappingURL=use-quota.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"use-quota.d.ts","sourceRoot":"","sources":["../../../../../src/react/core/quota/use-quota.ts"],"names":[],"mappings":"AACA,OAAO,EACL,KAAK,UAAU,EACf,KAAK,WAAW,EAChB,KAAK,YAAY,EACjB,KAAK,WAAW,EAEjB,MAAM,gCAAgC,CAAC;AACxC,OAAO,EAAE,KAAK,YAAY,EAAwB,MAAM,eAAe,CAAC;AAKxE,MAAM,WAAW,eAAe;IAC9B,6EAA6E;IAC7E,OAAO,CAAC,EAAE,YAAY,CAAC;IACvB,iDAAiD;IACjD,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,+FAA+F;IAC/F,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,UAAU;IACzB,oCAAoC;IACpC,MAAM,EAAE,WAAW,GAAG,SAAS,CAAC;IAChC,OAAO,EAAE,WAAW,EAAE,CAAC;IACvB,iEAAiE;IACjE,GAAG,EAAE,WAAW,GAAG,SAAS,CAAC;IAC7B,KAAK,EAAE,WAAW,GAAG,SAAS,CAAC;IAC/B,wFAAwF;IACxF,OAAO,EAAE,UAAU,GAAG,IAAI,CAAC;IAC3B;;;OAGG;IACH,OAAO,EAAE,YAAY,GAAG,IAAI,CAAC;IAC7B,SAAS,EAAE,OAAO,CAAC;IACnB,KAAK,EAAE,KAAK,GAAG,IAAI,CAAC;IACpB,OAAO,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;CAC9B;AAED;;;;GAIG;AACH,wBAAgB,QAAQ,CAAC,OAAO,GAAE,eAAoB,GAAG,UAAU,CAuClE"}
@@ -0,0 +1,47 @@
1
+ import { useEffect, useMemo } from 'react';
2
+ import { quotaWarning, } from '../../../spi/quota-provider.js';
3
+ import { requireBackendMethod } from '../backend.js';
4
+ import { useResource } from '../catalog/use-resource.js';
5
+ import { useAgentBackend } from '../provider.js';
6
+ import { onThreadsEvent } from '../threads/threads-events.js';
7
+ /**
8
+ * The caller's budget (`GET <base>/quota`): every window's usage against its ceilings, and which
9
+ * one — if any — blocks sends. Re-read after every run a chat on the same backend settles, so a
10
+ * meter moves with the conversation. Headless: draw the meter yourself.
11
+ */
12
+ export function useQuota(options = {}) {
13
+ const { enabled = true, pollMs } = options;
14
+ const backend = useAgentBackend(options.backend);
15
+ const { data, isLoading, error, refresh } = useResource(() => requireBackendMethod(backend, 'getQuota')(), '', enabled);
16
+ useEffect(() => {
17
+ if (!enabled)
18
+ return;
19
+ return onThreadsEvent(backend, (event) => {
20
+ if (event.type === 'changed')
21
+ void refresh();
22
+ });
23
+ }, [backend, enabled, refresh]);
24
+ useEffect(() => {
25
+ if (!enabled || pollMs === undefined || pollMs <= 0)
26
+ return;
27
+ const timer = setInterval(() => void refresh(), pollMs);
28
+ return () => clearInterval(timer);
29
+ }, [enabled, pollMs, refresh]);
30
+ return useMemo(() => {
31
+ const windows = data?.windows ?? [];
32
+ return {
33
+ report: data,
34
+ windows,
35
+ day: windows.find((window) => window.period === 'day'),
36
+ month: windows.find((window) => window.period === 'month'),
37
+ blocked: data?.blocked ?? null,
38
+ warning: data === undefined || data.blocked !== undefined
39
+ ? null
40
+ : (data.warning ?? quotaWarning(windows) ?? null),
41
+ isLoading,
42
+ error,
43
+ refresh,
44
+ };
45
+ }, [data, isLoading, error, refresh]);
46
+ }
47
+ //# sourceMappingURL=use-quota.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"use-quota.js","sourceRoot":"","sources":["../../../../../src/react/core/quota/use-quota.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,OAAO,EAAE,MAAM,OAAO,CAAC;AAC3C,OAAO,EAKL,YAAY,GACb,MAAM,gCAAgC,CAAC;AACxC,OAAO,EAAqB,oBAAoB,EAAE,MAAM,eAAe,CAAC;AACxE,OAAO,EAAE,WAAW,EAAE,MAAM,4BAA4B,CAAC;AACzD,OAAO,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAC;AACjD,OAAO,EAAE,cAAc,EAAE,MAAM,8BAA8B,CAAC;AA8B9D;;;;GAIG;AACH,MAAM,UAAU,QAAQ,CAAC,OAAO,GAAoB,EAAE;IACpD,MAAM,EAAE,OAAO,GAAG,IAAI,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC;IAC3C,MAAM,OAAO,GAAG,eAAe,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;IACjD,MAAM,EAAE,IAAI,EAAE,SAAS,EAAE,KAAK,EAAE,OAAO,EAAE,GAAG,WAAW,CACrD,GAAG,EAAE,CAAC,oBAAoB,CAAC,OAAO,EAAE,UAAU,CAAC,EAAE,EACjD,EAAE,EACF,OAAO,CACR,CAAC;IAEF,SAAS,CAAC,GAAG,EAAE;QACb,IAAI,CAAC,OAAO;YAAE,OAAO;QACrB,OAAO,cAAc,CAAC,OAAO,EAAE,CAAC,KAAK,EAAE,EAAE;YACvC,IAAI,KAAK,CAAC,IAAI,KAAK,SAAS;gBAAE,KAAK,OAAO,EAAE,CAAC;QAC/C,CAAC,CAAC,CAAC;IACL,CAAC,EAAE,CAAC,OAAO,EAAE,OAAO,EAAE,OAAO,CAAC,CAAC,CAAC;IAEhC,SAAS,CAAC,GAAG,EAAE;QACb,IAAI,CAAC,OAAO,IAAI,MAAM,KAAK,SAAS,IAAI,MAAM,IAAI,CAAC;YAAE,OAAO;QAC5D,MAAM,KAAK,GAAG,WAAW,CAAC,GAAG,EAAE,CAAC,KAAK,OAAO,EAAE,EAAE,MAAM,CAAC,CAAC;QACxD,OAAO,GAAG,EAAE,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;IACpC,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC;IAE/B,OAAO,OAAO,CAAC,GAAG,EAAE;QAClB,MAAM,OAAO,GAAG,IAAI,EAAE,OAAO,IAAI,EAAE,CAAC;QACpC,OAAO;YACL,MAAM,EAAE,IAAI;YACZ,OAAO;YACP,GAAG,EAAE,OAAO,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,MAAM,KAAK,KAAK,CAAC;YACtD,KAAK,EAAE,OAAO,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,MAAM,KAAK,OAAO,CAAC;YAC1D,OAAO,EAAE,IAAI,EAAE,OAAO,IAAI,IAAI;YAC9B,OAAO,EACL,IAAI,KAAK,SAAS,IAAI,IAAI,CAAC,OAAO,KAAK,SAAS;gBAC9C,CAAC,CAAC,IAAI;gBACN,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO,IAAI,YAAY,CAAC,OAAO,CAAC,IAAI,IAAI,CAAC;YACrD,SAAS;YACT,KAAK;YACL,OAAO;SACR,CAAC;IACJ,CAAC,EAAE,CAAC,IAAI,EAAE,SAAS,EAAE,KAAK,EAAE,OAAO,CAAC,CAAC,CAAC;AACxC,CAAC"}