@adonis-agora/agent 0.61.0 → 0.63.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 (664) hide show
  1. package/CHANGELOG.md +91 -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 +81 -25
  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 +7 -2
  67. package/dist/src/action-proposal-service.d.ts.map +1 -1
  68. package/dist/src/action-proposal-service.js +21 -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/actor-resolver.d.ts +12 -4
  79. package/dist/src/actor-resolver.d.ts.map +1 -1
  80. package/dist/src/actor-resolver.js +24 -7
  81. package/dist/src/actor-resolver.js.map +1 -1
  82. package/dist/src/ag-ui/adapter.d.ts.map +1 -1
  83. package/dist/src/ag-ui/adapter.js +115 -17
  84. package/dist/src/ag-ui/adapter.js.map +1 -1
  85. package/dist/src/ag-ui/core/encoder.d.ts +106 -0
  86. package/dist/src/ag-ui/core/encoder.d.ts.map +1 -0
  87. package/dist/src/ag-ui/core/encoder.js +534 -0
  88. package/dist/src/ag-ui/core/encoder.js.map +1 -0
  89. package/dist/src/ag-ui/core/index.d.ts +12 -0
  90. package/dist/src/ag-ui/core/index.d.ts.map +1 -0
  91. package/dist/src/ag-ui/core/index.js +12 -0
  92. package/dist/src/ag-ui/core/index.js.map +1 -0
  93. package/dist/src/ag-ui/core/input.d.ts +92 -0
  94. package/dist/src/ag-ui/core/input.d.ts.map +1 -0
  95. package/dist/src/ag-ui/core/input.js +246 -0
  96. package/dist/src/ag-ui/core/input.js.map +1 -0
  97. package/dist/src/ag-ui/core/interrupt-id.d.ts +31 -0
  98. package/dist/src/ag-ui/core/interrupt-id.d.ts.map +1 -0
  99. package/dist/src/ag-ui/core/interrupt-id.js +48 -0
  100. package/dist/src/ag-ui/core/interrupt-id.js.map +1 -0
  101. package/dist/src/ag-ui/{proposal-decision.d.ts → core/proposal-decision.d.ts} +1 -1
  102. package/dist/src/ag-ui/core/proposal-decision.d.ts.map +1 -0
  103. package/dist/src/ag-ui/{proposal-decision.js → core/proposal-decision.js} +3 -6
  104. package/dist/src/ag-ui/core/proposal-decision.js.map +1 -0
  105. package/dist/src/ag-ui/core/stream.d.ts +49 -0
  106. package/dist/src/ag-ui/core/stream.d.ts.map +1 -0
  107. package/dist/src/ag-ui/core/stream.js +90 -0
  108. package/dist/src/ag-ui/core/stream.js.map +1 -0
  109. package/dist/src/ag-ui/core/types.d.ts +249 -0
  110. package/dist/src/ag-ui/core/types.d.ts.map +1 -0
  111. package/dist/src/ag-ui/core/types.js +35 -0
  112. package/dist/src/ag-ui/core/types.js.map +1 -0
  113. package/dist/src/ag-ui/encoder.d.ts +3 -4
  114. package/dist/src/ag-ui/encoder.d.ts.map +1 -1
  115. package/dist/src/ag-ui/encoder.js +10 -11
  116. package/dist/src/ag-ui/encoder.js.map +1 -1
  117. package/dist/src/ag-ui/frames.d.ts +8 -5
  118. package/dist/src/ag-ui/frames.d.ts.map +1 -1
  119. package/dist/src/ag-ui/frames.js +21 -7
  120. package/dist/src/ag-ui/frames.js.map +1 -1
  121. package/dist/src/ag-ui/index.d.ts +3 -5
  122. package/dist/src/ag-ui/index.d.ts.map +1 -1
  123. package/dist/src/ag-ui/index.js +3 -5
  124. package/dist/src/ag-ui/index.js.map +1 -1
  125. package/dist/src/ag-ui/stream.d.ts +3 -4
  126. package/dist/src/ag-ui/stream.d.ts.map +1 -1
  127. package/dist/src/ag-ui/stream.js +4 -5
  128. package/dist/src/ag-ui/stream.js.map +1 -1
  129. package/dist/src/agent-deps-factory.d.ts +3 -0
  130. package/dist/src/agent-deps-factory.d.ts.map +1 -1
  131. package/dist/src/agent-deps-factory.js +3 -0
  132. package/dist/src/agent-deps-factory.js.map +1 -1
  133. package/dist/src/agent-deps.d.ts +3 -0
  134. package/dist/src/agent-deps.d.ts.map +1 -1
  135. package/dist/src/agent-deps.js.map +1 -1
  136. package/dist/src/agent-loop.d.ts +4 -3
  137. package/dist/src/agent-loop.d.ts.map +1 -1
  138. package/dist/src/agent-loop.js +50 -25
  139. package/dist/src/agent-loop.js.map +1 -1
  140. package/dist/src/agent-service.d.ts +46 -4
  141. package/dist/src/agent-service.d.ts.map +1 -1
  142. package/dist/src/agent-service.js +87 -11
  143. package/dist/src/agent-service.js.map +1 -1
  144. package/dist/src/ai-sdk/ai-sdk-model.js +4 -1
  145. package/dist/src/ai-sdk/ai-sdk-model.js.map +1 -1
  146. package/dist/src/ai-tool-ref.d.ts +4 -0
  147. package/dist/src/ai-tool-ref.d.ts.map +1 -1
  148. package/dist/src/ai-tool-ref.js +10 -14
  149. package/dist/src/ai-tool-ref.js.map +1 -1
  150. package/dist/src/attachment-limits.d.ts +10 -0
  151. package/dist/src/attachment-limits.d.ts.map +1 -0
  152. package/dist/src/attachment-limits.js +13 -0
  153. package/dist/src/attachment-limits.js.map +1 -0
  154. package/dist/src/channels/adapters/evolution_api.d.ts +49 -0
  155. package/dist/src/channels/adapters/evolution_api.d.ts.map +1 -0
  156. package/dist/src/channels/adapters/evolution_api.js +241 -0
  157. package/dist/src/channels/adapters/evolution_api.js.map +1 -0
  158. package/dist/src/channels/adapters/telegram.d.ts +34 -0
  159. package/dist/src/channels/adapters/telegram.d.ts.map +1 -0
  160. package/dist/src/channels/adapters/telegram.js +196 -0
  161. package/dist/src/channels/adapters/telegram.js.map +1 -0
  162. package/dist/src/channels/adapters/whatsapp_cloud.d.ts +31 -0
  163. package/dist/src/channels/adapters/whatsapp_cloud.d.ts.map +1 -0
  164. package/dist/src/channels/adapters/whatsapp_cloud.js +177 -0
  165. package/dist/src/channels/adapters/whatsapp_cloud.js.map +1 -0
  166. package/dist/src/channels/handler.d.ts +167 -0
  167. package/dist/src/channels/handler.d.ts.map +1 -0
  168. package/dist/src/channels/handler.js +569 -0
  169. package/dist/src/channels/handler.js.map +1 -0
  170. package/dist/src/channels/http.d.ts +45 -0
  171. package/dist/src/channels/http.d.ts.map +1 -0
  172. package/dist/src/channels/http.js +147 -0
  173. package/dist/src/channels/http.js.map +1 -0
  174. package/dist/src/channels/index.d.ts +16 -0
  175. package/dist/src/channels/index.d.ts.map +1 -0
  176. package/dist/src/channels/index.js +15 -0
  177. package/dist/src/channels/index.js.map +1 -0
  178. package/dist/src/channels/markdown.d.ts +12 -0
  179. package/dist/src/channels/markdown.d.ts.map +1 -0
  180. package/dist/src/channels/markdown.js +120 -0
  181. package/dist/src/channels/markdown.js.map +1 -0
  182. package/dist/src/channels/questions.d.ts +43 -0
  183. package/dist/src/channels/questions.d.ts.map +1 -0
  184. package/dist/src/channels/questions.js +90 -0
  185. package/dist/src/channels/questions.js.map +1 -0
  186. package/dist/src/channels/split.d.ts +8 -0
  187. package/dist/src/channels/split.d.ts.map +1 -0
  188. package/dist/src/channels/split.js +45 -0
  189. package/dist/src/channels/split.js.map +1 -0
  190. package/dist/src/channels/store.d.ts +78 -0
  191. package/dist/src/channels/store.d.ts.map +1 -0
  192. package/dist/src/channels/store.js +151 -0
  193. package/dist/src/channels/store.js.map +1 -0
  194. package/dist/src/channels/types.d.ts +138 -0
  195. package/dist/src/channels/types.d.ts.map +1 -0
  196. package/dist/src/channels/types.js +7 -0
  197. package/dist/src/channels/types.js.map +1 -0
  198. package/dist/src/chat-queue-service.d.ts.map +1 -1
  199. package/dist/src/chat-queue-service.js +2 -0
  200. package/dist/src/chat-queue-service.js.map +1 -1
  201. package/dist/src/define_config.d.ts +61 -12
  202. package/dist/src/define_config.d.ts.map +1 -1
  203. package/dist/src/define_config.js.map +1 -1
  204. package/dist/src/engine.d.ts +77 -0
  205. package/dist/src/engine.d.ts.map +1 -0
  206. package/dist/src/engine.js +27 -0
  207. package/dist/src/engine.js.map +1 -0
  208. package/dist/src/genui/builtins.d.ts +73 -3
  209. package/dist/src/genui/builtins.d.ts.map +1 -1
  210. package/dist/src/genui/builtins.js +357 -3
  211. package/dist/src/genui/builtins.js.map +1 -1
  212. package/dist/src/genui/capabilities.d.ts +24 -0
  213. package/dist/src/genui/capabilities.d.ts.map +1 -0
  214. package/dist/src/genui/capabilities.js +81 -0
  215. package/dist/src/genui/capabilities.js.map +1 -0
  216. package/dist/src/genui/catalog.d.ts +86 -0
  217. package/dist/src/genui/catalog.d.ts.map +1 -0
  218. package/dist/src/genui/catalog.js +96 -0
  219. package/dist/src/genui/catalog.js.map +1 -0
  220. package/dist/src/genui/factory.d.ts +7 -14
  221. package/dist/src/genui/factory.d.ts.map +1 -1
  222. package/dist/src/genui/factory.js.map +1 -1
  223. package/dist/src/genui/index.d.ts +4 -12
  224. package/dist/src/genui/index.d.ts.map +1 -1
  225. package/dist/src/genui/index.js +5 -18
  226. package/dist/src/genui/index.js.map +1 -1
  227. package/dist/src/genui/public.d.ts +9 -0
  228. package/dist/src/genui/public.d.ts.map +1 -0
  229. package/dist/src/genui/public.js +9 -0
  230. package/dist/src/genui/public.js.map +1 -0
  231. package/dist/src/genui/registry.d.ts +65 -0
  232. package/dist/src/genui/registry.d.ts.map +1 -0
  233. package/dist/src/genui/registry.js +151 -0
  234. package/dist/src/genui/registry.js.map +1 -0
  235. package/dist/src/genui/schema.d.ts +71 -0
  236. package/dist/src/genui/schema.d.ts.map +1 -0
  237. package/dist/src/genui/schema.js +304 -0
  238. package/dist/src/genui/schema.js.map +1 -0
  239. package/dist/src/genui/text.d.ts +36 -0
  240. package/dist/src/genui/text.d.ts.map +1 -0
  241. package/dist/src/genui/text.js +157 -0
  242. package/dist/src/genui/text.js.map +1 -0
  243. package/dist/src/genui/tools.d.ts +92 -0
  244. package/dist/src/genui/tools.d.ts.map +1 -0
  245. package/dist/src/genui/tools.js +291 -0
  246. package/dist/src/genui/tools.js.map +1 -0
  247. package/dist/src/genui/tree.d.ts +56 -0
  248. package/dist/src/genui/tree.d.ts.map +1 -0
  249. package/dist/src/genui/tree.js +188 -0
  250. package/dist/src/genui/tree.js.map +1 -0
  251. package/dist/src/index.d.ts +6 -3
  252. package/dist/src/index.d.ts.map +1 -1
  253. package/dist/src/index.js +4 -2
  254. package/dist/src/index.js.map +1 -1
  255. package/dist/src/mcp/auth.d.ts +17 -1
  256. package/dist/src/mcp/auth.d.ts.map +1 -1
  257. package/dist/src/mcp/auth.js +14 -3
  258. package/dist/src/mcp/auth.js.map +1 -1
  259. package/dist/src/mcp/define_config.d.ts +81 -2
  260. package/dist/src/mcp/define_config.d.ts.map +1 -1
  261. package/dist/src/mcp/define_config.js.map +1 -1
  262. package/dist/src/mcp/index.d.ts +1 -1
  263. package/dist/src/mcp/index.d.ts.map +1 -1
  264. package/dist/src/mcp/index.js.map +1 -1
  265. package/dist/src/mcp/oauth-resource.d.ts +9 -0
  266. package/dist/src/mcp/oauth-resource.d.ts.map +1 -0
  267. package/dist/src/mcp/oauth-resource.js +16 -0
  268. package/dist/src/mcp/oauth-resource.js.map +1 -0
  269. package/dist/src/mcp/server.d.ts +5 -0
  270. package/dist/src/mcp/server.d.ts.map +1 -1
  271. package/dist/src/mcp/server.js +48 -16
  272. package/dist/src/mcp/server.js.map +1 -1
  273. package/dist/src/negotiated-tool-ui.d.ts.map +1 -1
  274. package/dist/src/negotiated-tool-ui.js +12 -8
  275. package/dist/src/negotiated-tool-ui.js.map +1 -1
  276. package/dist/src/opencode/client.d.ts +202 -0
  277. package/dist/src/opencode/client.d.ts.map +1 -0
  278. package/dist/src/opencode/client.js +2 -0
  279. package/dist/src/opencode/client.js.map +1 -0
  280. package/dist/src/opencode/durable/index.d.ts +33 -0
  281. package/dist/src/opencode/durable/index.d.ts.map +1 -0
  282. package/dist/src/opencode/durable/index.js +38 -0
  283. package/dist/src/opencode/durable/index.js.map +1 -0
  284. package/dist/src/opencode/durable/runner.d.ts +36 -0
  285. package/dist/src/opencode/durable/runner.d.ts.map +1 -0
  286. package/dist/src/opencode/durable/runner.js +88 -0
  287. package/dist/src/opencode/durable/runner.js.map +1 -0
  288. package/dist/src/opencode/durable/workflow.d.ts +40 -0
  289. package/dist/src/opencode/durable/workflow.d.ts.map +1 -0
  290. package/dist/src/opencode/durable/workflow.js +106 -0
  291. package/dist/src/opencode/durable/workflow.js.map +1 -0
  292. package/dist/src/opencode/engine.d.ts +48 -0
  293. package/dist/src/opencode/engine.d.ts.map +1 -0
  294. package/dist/src/opencode/engine.js +98 -0
  295. package/dist/src/opencode/engine.js.map +1 -0
  296. package/dist/src/opencode/event-hub.d.ts +23 -0
  297. package/dist/src/opencode/event-hub.d.ts.map +1 -0
  298. package/dist/src/opencode/event-hub.js +99 -0
  299. package/dist/src/opencode/event-hub.js.map +1 -0
  300. package/dist/src/opencode/forms.d.ts +19 -0
  301. package/dist/src/opencode/forms.d.ts.map +1 -0
  302. package/dist/src/opencode/forms.js +82 -0
  303. package/dist/src/opencode/forms.js.map +1 -0
  304. package/dist/src/opencode/host.d.ts +179 -0
  305. package/dist/src/opencode/host.d.ts.map +1 -0
  306. package/dist/src/opencode/host.js +34 -0
  307. package/dist/src/opencode/host.js.map +1 -0
  308. package/dist/src/opencode/index.d.ts +15 -0
  309. package/dist/src/opencode/index.d.ts.map +1 -0
  310. package/dist/src/opencode/index.js +9 -0
  311. package/dist/src/opencode/index.js.map +1 -0
  312. package/dist/src/opencode/log.d.ts +9 -0
  313. package/dist/src/opencode/log.d.ts.map +1 -0
  314. package/dist/src/opencode/log.js +15 -0
  315. package/dist/src/opencode/log.js.map +1 -0
  316. package/dist/src/opencode/mcp.d.ts +60 -0
  317. package/dist/src/opencode/mcp.d.ts.map +1 -0
  318. package/dist/src/opencode/mcp.js +258 -0
  319. package/dist/src/opencode/mcp.js.map +1 -0
  320. package/dist/src/opencode/runner.d.ts +40 -0
  321. package/dist/src/opencode/runner.d.ts.map +1 -0
  322. package/dist/src/opencode/runner.js +125 -0
  323. package/dist/src/opencode/runner.js.map +1 -0
  324. package/dist/src/opencode/turn.d.ts +167 -0
  325. package/dist/src/opencode/turn.d.ts.map +1 -0
  326. package/dist/src/opencode/turn.js +761 -0
  327. package/dist/src/opencode/turn.js.map +1 -0
  328. package/dist/src/opencode/turns.d.ts +247 -0
  329. package/dist/src/opencode/turns.d.ts.map +1 -0
  330. package/dist/src/opencode/turns.js +867 -0
  331. package/dist/src/opencode/turns.js.map +1 -0
  332. package/dist/src/personas.d.ts.map +1 -1
  333. package/dist/src/personas.js +4 -1
  334. package/dist/src/personas.js.map +1 -1
  335. package/dist/src/react/ag-ui.d.ts +4 -2
  336. package/dist/src/react/ag-ui.d.ts.map +1 -1
  337. package/dist/src/react/ag-ui.js +2 -2
  338. package/dist/src/react/ag-ui.js.map +1 -1
  339. package/dist/src/react/client.d.ts +1 -1
  340. package/dist/src/react/client.d.ts.map +1 -1
  341. package/dist/src/react/client.js +1 -1
  342. package/dist/src/react/client.js.map +1 -1
  343. package/dist/src/react/core/ag-ui-backend.d.ts +109 -0
  344. package/dist/src/react/core/ag-ui-backend.d.ts.map +1 -0
  345. package/dist/src/react/core/ag-ui-backend.js +574 -0
  346. package/dist/src/react/core/ag-ui-backend.js.map +1 -0
  347. package/dist/src/react/core/agent-chat-transport.d.ts +187 -0
  348. package/dist/src/react/core/agent-chat-transport.d.ts.map +1 -0
  349. package/dist/src/react/core/agent-chat-transport.js +817 -0
  350. package/dist/src/react/core/agent-chat-transport.js.map +1 -0
  351. package/dist/src/react/core/approvals/countdown.d.ts +22 -0
  352. package/dist/src/react/core/approvals/countdown.d.ts.map +1 -0
  353. package/dist/src/react/core/approvals/countdown.js +39 -0
  354. package/dist/src/react/core/approvals/countdown.js.map +1 -0
  355. package/dist/src/react/core/approvals/proposals.d.ts +15 -0
  356. package/dist/src/react/core/approvals/proposals.d.ts.map +1 -0
  357. package/dist/src/react/core/approvals/proposals.js +82 -0
  358. package/dist/src/react/core/approvals/proposals.js.map +1 -0
  359. package/dist/src/react/core/approvals/use-action-proposals.d.ts +10 -0
  360. package/dist/src/react/core/approvals/use-action-proposals.d.ts.map +1 -0
  361. package/dist/src/react/core/approvals/use-action-proposals.js +86 -0
  362. package/dist/src/react/core/approvals/use-action-proposals.js.map +1 -0
  363. package/dist/src/react/core/attachments/files.d.ts +39 -0
  364. package/dist/src/react/core/attachments/files.d.ts.map +1 -0
  365. package/dist/src/react/core/attachments/files.js +89 -0
  366. package/dist/src/react/core/attachments/files.js.map +1 -0
  367. package/dist/src/react/core/attachments/use-attachments.d.ts +106 -0
  368. package/dist/src/react/core/attachments/use-attachments.d.ts.map +1 -0
  369. package/dist/src/react/core/attachments/use-attachments.js +217 -0
  370. package/dist/src/react/core/attachments/use-attachments.js.map +1 -0
  371. package/dist/src/react/core/backend.d.ts +245 -0
  372. package/dist/src/react/core/backend.d.ts.map +1 -0
  373. package/dist/src/react/core/backend.js +21 -0
  374. package/dist/src/react/core/backend.js.map +1 -0
  375. package/dist/src/react/core/background-runs.d.ts +32 -0
  376. package/dist/src/react/core/background-runs.d.ts.map +1 -0
  377. package/dist/src/react/core/background-runs.js +47 -0
  378. package/dist/src/react/core/background-runs.js.map +1 -0
  379. package/dist/src/react/core/catalog/use-agents.d.ts +31 -0
  380. package/dist/src/react/core/catalog/use-agents.d.ts.map +1 -0
  381. package/dist/src/react/core/catalog/use-agents.js +28 -0
  382. package/dist/src/react/core/catalog/use-agents.js.map +1 -0
  383. package/dist/src/react/core/catalog/use-models.d.ts +41 -0
  384. package/dist/src/react/core/catalog/use-models.d.ts.map +1 -0
  385. package/dist/src/react/core/catalog/use-models.js +35 -0
  386. package/dist/src/react/core/catalog/use-models.js.map +1 -0
  387. package/dist/src/react/core/catalog/use-resource.d.ts +12 -0
  388. package/dist/src/react/core/catalog/use-resource.d.ts.map +1 -0
  389. package/dist/src/react/core/catalog/use-resource.js +41 -0
  390. package/dist/src/react/core/catalog/use-resource.js.map +1 -0
  391. package/dist/src/react/core/client-wire.d.ts +14 -0
  392. package/dist/src/react/core/client-wire.d.ts.map +1 -0
  393. package/dist/src/react/core/client-wire.js +2 -0
  394. package/dist/src/react/core/client-wire.js.map +1 -0
  395. package/dist/src/react/core/client.d.ts +222 -0
  396. package/dist/src/react/core/client.d.ts.map +1 -0
  397. package/dist/src/react/core/client.js +435 -0
  398. package/dist/src/react/core/client.js.map +1 -0
  399. package/dist/src/react/core/components/ambient-ui.d.ts +22 -0
  400. package/dist/src/react/core/components/ambient-ui.d.ts.map +1 -0
  401. package/dist/src/react/core/components/ambient-ui.js +30 -0
  402. package/dist/src/react/core/components/ambient-ui.js.map +1 -0
  403. package/dist/src/react/core/components/chat-input.d.ts +44 -0
  404. package/dist/src/react/core/components/chat-input.d.ts.map +1 -0
  405. package/dist/src/react/core/components/chat-input.js +69 -0
  406. package/dist/src/react/core/components/chat-input.js.map +1 -0
  407. package/dist/src/react/core/components/index.d.ts +7 -0
  408. package/dist/src/react/core/components/index.d.ts.map +1 -0
  409. package/dist/src/react/core/components/index.js +7 -0
  410. package/dist/src/react/core/components/index.js.map +1 -0
  411. package/dist/src/react/core/components/message-item.d.ts +101 -0
  412. package/dist/src/react/core/components/message-item.d.ts.map +1 -0
  413. package/dist/src/react/core/components/message-item.js +118 -0
  414. package/dist/src/react/core/components/message-item.js.map +1 -0
  415. package/dist/src/react/core/components/message-list.d.ts +85 -0
  416. package/dist/src/react/core/components/message-list.d.ts.map +1 -0
  417. package/dist/src/react/core/components/message-list.js +45 -0
  418. package/dist/src/react/core/components/message-list.js.map +1 -0
  419. package/dist/src/react/core/components/speech-languages.d.ts +22 -0
  420. package/dist/src/react/core/components/speech-languages.d.ts.map +1 -0
  421. package/dist/src/react/core/components/speech-languages.js +38 -0
  422. package/dist/src/react/core/components/speech-languages.js.map +1 -0
  423. package/dist/src/react/core/components/use-speech-recognition.d.ts +19 -0
  424. package/dist/src/react/core/components/use-speech-recognition.d.ts.map +1 -0
  425. package/dist/src/react/core/components/use-speech-recognition.js +92 -0
  426. package/dist/src/react/core/components/use-speech-recognition.js.map +1 -0
  427. package/dist/src/react/core/composer/index.d.ts +4 -0
  428. package/dist/src/react/core/composer/index.d.ts.map +1 -0
  429. package/dist/src/react/core/composer/index.js +4 -0
  430. package/dist/src/react/core/composer/index.js.map +1 -0
  431. package/dist/src/react/core/composer/model.d.ts +83 -0
  432. package/dist/src/react/core/composer/model.d.ts.map +1 -0
  433. package/dist/src/react/core/composer/model.js +53 -0
  434. package/dist/src/react/core/composer/model.js.map +1 -0
  435. package/dist/src/react/core/composer/skills-source.d.ts +29 -0
  436. package/dist/src/react/core/composer/skills-source.d.ts.map +1 -0
  437. package/dist/src/react/core/composer/skills-source.js +61 -0
  438. package/dist/src/react/core/composer/skills-source.js.map +1 -0
  439. package/dist/src/react/core/composer/use-composer-autocomplete.d.ts +78 -0
  440. package/dist/src/react/core/composer/use-composer-autocomplete.d.ts.map +1 -0
  441. package/dist/src/react/core/composer/use-composer-autocomplete.js +244 -0
  442. package/dist/src/react/core/composer/use-composer-autocomplete.js.map +1 -0
  443. package/dist/src/react/core/config/use-agent-config.d.ts +21 -0
  444. package/dist/src/react/core/config/use-agent-config.d.ts.map +1 -0
  445. package/dist/src/react/core/config/use-agent-config.js +57 -0
  446. package/dist/src/react/core/config/use-agent-config.js.map +1 -0
  447. package/dist/src/react/core/elicitation/answers.d.ts +22 -0
  448. package/dist/src/react/core/elicitation/answers.d.ts.map +1 -0
  449. package/dist/src/react/core/elicitation/answers.js +65 -0
  450. package/dist/src/react/core/elicitation/answers.js.map +1 -0
  451. package/dist/src/react/core/feedback/use-message-feedback.d.ts +32 -0
  452. package/dist/src/react/core/feedback/use-message-feedback.d.ts.map +1 -0
  453. package/dist/src/react/core/feedback/use-message-feedback.js +106 -0
  454. package/dist/src/react/core/feedback/use-message-feedback.js.map +1 -0
  455. package/dist/src/react/core/genui/generative-ui.d.ts +76 -0
  456. package/dist/src/react/core/genui/generative-ui.d.ts.map +1 -0
  457. package/dist/src/react/core/genui/generative-ui.js +210 -0
  458. package/dist/src/react/core/genui/generative-ui.js.map +1 -0
  459. package/dist/src/react/core/genui/index.d.ts +5 -0
  460. package/dist/src/react/core/genui/index.d.ts.map +1 -0
  461. package/dist/src/react/core/genui/index.js +5 -0
  462. package/dist/src/react/core/genui/index.js.map +1 -0
  463. package/dist/src/react/core/genui/json-render.d.ts +54 -0
  464. package/dist/src/react/core/genui/json-render.d.ts.map +1 -0
  465. package/dist/src/react/core/genui/json-render.js +64 -0
  466. package/dist/src/react/core/genui/json-render.js.map +1 -0
  467. package/dist/src/react/core/genui/playwright.d.ts +12 -0
  468. package/dist/src/react/core/genui/playwright.d.ts.map +1 -0
  469. package/dist/src/react/core/genui/playwright.js +141 -0
  470. package/dist/src/react/core/genui/playwright.js.map +1 -0
  471. package/dist/src/react/core/genui/react-registry.d.ts +22 -0
  472. package/dist/src/react/core/genui/react-registry.d.ts.map +1 -0
  473. package/dist/src/react/core/genui/react-registry.js +72 -0
  474. package/dist/src/react/core/genui/react-registry.js.map +1 -0
  475. package/dist/src/react/core/genui/server.d.ts +32 -0
  476. package/dist/src/react/core/genui/server.d.ts.map +1 -0
  477. package/dist/src/react/core/genui/server.js +66 -0
  478. package/dist/src/react/core/genui/server.js.map +1 -0
  479. package/dist/src/react/core/genui/types.d.ts +98 -0
  480. package/dist/src/react/core/genui/types.d.ts.map +1 -0
  481. package/dist/src/react/core/genui/types.js +3 -0
  482. package/dist/src/react/core/genui/types.js.map +1 -0
  483. package/dist/src/react/core/genui/use-generative-ui.d.ts +42 -0
  484. package/dist/src/react/core/genui/use-generative-ui.d.ts.map +1 -0
  485. package/dist/src/react/core/genui/use-generative-ui.js +186 -0
  486. package/dist/src/react/core/genui/use-generative-ui.js.map +1 -0
  487. package/dist/src/react/core/http-error.d.ts +33 -0
  488. package/dist/src/react/core/http-error.d.ts.map +1 -0
  489. package/dist/src/react/core/http-error.js +47 -0
  490. package/dist/src/react/core/http-error.js.map +1 -0
  491. package/dist/src/react/core/index.d.ts +35 -0
  492. package/dist/src/react/core/index.d.ts.map +1 -0
  493. package/dist/src/react/core/index.js +34 -0
  494. package/dist/src/react/core/index.js.map +1 -0
  495. package/dist/src/react/core/markdown/agent-markdown.d.ts +39 -0
  496. package/dist/src/react/core/markdown/agent-markdown.d.ts.map +1 -0
  497. package/dist/src/react/core/markdown/agent-markdown.js +22 -0
  498. package/dist/src/react/core/markdown/agent-markdown.js.map +1 -0
  499. package/dist/src/react/core/markdown/index.d.ts +2 -0
  500. package/dist/src/react/core/markdown/index.d.ts.map +1 -0
  501. package/dist/src/react/core/markdown/index.js +2 -0
  502. package/dist/src/react/core/markdown/index.js.map +1 -0
  503. package/dist/src/react/core/media/index.d.ts +64 -0
  504. package/dist/src/react/core/media/index.d.ts.map +1 -0
  505. package/dist/src/react/core/media/index.js +135 -0
  506. package/dist/src/react/core/media/index.js.map +1 -0
  507. package/dist/src/react/core/media/tus.d.ts +13 -0
  508. package/dist/src/react/core/media/tus.d.ts.map +1 -0
  509. package/dist/src/react/core/media/tus.js +59 -0
  510. package/dist/src/react/core/media/tus.js.map +1 -0
  511. package/dist/src/react/core/presentation/phrasing.d.ts +25 -0
  512. package/dist/src/react/core/presentation/phrasing.d.ts.map +1 -0
  513. package/dist/src/react/core/presentation/phrasing.js +58 -0
  514. package/dist/src/react/core/presentation/phrasing.js.map +1 -0
  515. package/dist/src/react/core/presentation/result-view.d.ts +43 -0
  516. package/dist/src/react/core/presentation/result-view.d.ts.map +1 -0
  517. package/dist/src/react/core/presentation/result-view.js +90 -0
  518. package/dist/src/react/core/presentation/result-view.js.map +1 -0
  519. package/dist/src/react/core/presentation/tool-activity.d.ts +106 -0
  520. package/dist/src/react/core/presentation/tool-activity.d.ts.map +1 -0
  521. package/dist/src/react/core/presentation/tool-activity.js +165 -0
  522. package/dist/src/react/core/presentation/tool-activity.js.map +1 -0
  523. package/dist/src/react/core/presentation/use-tool-catalog.d.ts +39 -0
  524. package/dist/src/react/core/presentation/use-tool-catalog.d.ts.map +1 -0
  525. package/dist/src/react/core/presentation/use-tool-catalog.js +77 -0
  526. package/dist/src/react/core/presentation/use-tool-catalog.js.map +1 -0
  527. package/dist/src/react/core/provider.d.ts +68 -0
  528. package/dist/src/react/core/provider.d.ts.map +1 -0
  529. package/dist/src/react/core/provider.js +61 -0
  530. package/dist/src/react/core/provider.js.map +1 -0
  531. package/dist/src/react/core/queue/model.d.ts +73 -0
  532. package/dist/src/react/core/queue/model.d.ts.map +1 -0
  533. package/dist/src/react/core/queue/model.js +2 -0
  534. package/dist/src/react/core/queue/model.js.map +1 -0
  535. package/dist/src/react/core/quota/use-quota.d.ts +35 -0
  536. package/dist/src/react/core/quota/use-quota.d.ts.map +1 -0
  537. package/dist/src/react/core/quota/use-quota.js +47 -0
  538. package/dist/src/react/core/quota/use-quota.js.map +1 -0
  539. package/dist/src/react/core/reasoning/timing.d.ts +38 -0
  540. package/dist/src/react/core/reasoning/timing.d.ts.map +1 -0
  541. package/dist/src/react/core/reasoning/timing.js +73 -0
  542. package/dist/src/react/core/reasoning/timing.js.map +1 -0
  543. package/dist/src/react/core/run-errors.d.ts +37 -0
  544. package/dist/src/react/core/run-errors.d.ts.map +1 -0
  545. package/dist/src/react/core/run-errors.js +37 -0
  546. package/dist/src/react/core/run-errors.js.map +1 -0
  547. package/dist/src/react/core/stored-message-to-ui-message.d.ts +4 -0
  548. package/dist/src/react/core/stored-message-to-ui-message.d.ts.map +1 -0
  549. package/dist/src/react/core/stored-message-to-ui-message.js +216 -0
  550. package/dist/src/react/core/stored-message-to-ui-message.js.map +1 -0
  551. package/dist/src/react/core/stored-thread-to-ui-messages.d.ts +82 -0
  552. package/dist/src/react/core/stored-thread-to-ui-messages.d.ts.map +1 -0
  553. package/dist/src/react/core/stored-thread-to-ui-messages.js +116 -0
  554. package/dist/src/react/core/stored-thread-to-ui-messages.js.map +1 -0
  555. package/dist/src/react/core/threads/threads-events.d.ts +22 -0
  556. package/dist/src/react/core/threads/threads-events.d.ts.map +1 -0
  557. package/dist/src/react/core/threads/threads-events.js +21 -0
  558. package/dist/src/react/core/threads/threads-events.js.map +1 -0
  559. package/dist/src/react/core/threads/use-threads.d.ts +31 -0
  560. package/dist/src/react/core/threads/use-threads.d.ts.map +1 -0
  561. package/dist/src/react/core/threads/use-threads.js +81 -0
  562. package/dist/src/react/core/threads/use-threads.js.map +1 -0
  563. package/dist/src/react/core/transcript/index.d.ts +4 -0
  564. package/dist/src/react/core/transcript/index.d.ts.map +1 -0
  565. package/dist/src/react/core/transcript/index.js +4 -0
  566. package/dist/src/react/core/transcript/index.js.map +1 -0
  567. package/dist/src/react/core/transcript/model.d.ts +399 -0
  568. package/dist/src/react/core/transcript/model.d.ts.map +1 -0
  569. package/dist/src/react/core/transcript/model.js +725 -0
  570. package/dist/src/react/core/transcript/model.js.map +1 -0
  571. package/dist/src/react/core/transcript/use-chat-transcript.d.ts +254 -0
  572. package/dist/src/react/core/transcript/use-chat-transcript.d.ts.map +1 -0
  573. package/dist/src/react/core/transcript/use-chat-transcript.js +572 -0
  574. package/dist/src/react/core/transcript/use-chat-transcript.js.map +1 -0
  575. package/dist/src/react/core/transcript/use-stick-to-bottom.d.ts +33 -0
  576. package/dist/src/react/core/transcript/use-stick-to-bottom.d.ts.map +1 -0
  577. package/dist/src/react/core/transcript/use-stick-to-bottom.js +48 -0
  578. package/dist/src/react/core/transcript/use-stick-to-bottom.js.map +1 -0
  579. package/dist/src/react/core/use-agent-chat.d.ts +341 -0
  580. package/dist/src/react/core/use-agent-chat.d.ts.map +1 -0
  581. package/dist/src/react/core/use-agent-chat.js +1118 -0
  582. package/dist/src/react/core/use-agent-chat.js.map +1 -0
  583. package/dist/src/react/genui/index.d.ts +1 -7
  584. package/dist/src/react/genui/index.d.ts.map +1 -1
  585. package/dist/src/react/genui/index.js +1 -7
  586. package/dist/src/react/genui/index.js.map +1 -1
  587. package/dist/src/react/genui/json-render.d.ts +1 -5
  588. package/dist/src/react/genui/json-render.d.ts.map +1 -1
  589. package/dist/src/react/genui/json-render.js +1 -5
  590. package/dist/src/react/genui/json-render.js.map +1 -1
  591. package/dist/src/react/genui/server.d.ts +2 -0
  592. package/dist/src/react/genui/server.d.ts.map +1 -0
  593. package/dist/src/react/genui/server.js +2 -0
  594. package/dist/src/react/genui/server.js.map +1 -0
  595. package/dist/src/react/genui/server_playwright.d.ts +2 -0
  596. package/dist/src/react/genui/server_playwright.d.ts.map +1 -0
  597. package/dist/src/react/genui/server_playwright.js +2 -0
  598. package/dist/src/react/genui/server_playwright.js.map +1 -0
  599. package/dist/src/react/index.d.ts +5 -7
  600. package/dist/src/react/index.d.ts.map +1 -1
  601. package/dist/src/react/index.js +5 -7
  602. package/dist/src/react/index.js.map +1 -1
  603. package/dist/src/react/markdown.d.ts +1 -6
  604. package/dist/src/react/markdown.d.ts.map +1 -1
  605. package/dist/src/react/markdown.js +1 -6
  606. package/dist/src/react/markdown.js.map +1 -1
  607. package/dist/src/react/media.d.ts +1 -17
  608. package/dist/src/react/media.d.ts.map +1 -1
  609. package/dist/src/react/media.js +1 -17
  610. package/dist/src/react/media.js.map +1 -1
  611. package/dist/src/refusal.d.ts +3 -0
  612. package/dist/src/refusal.d.ts.map +1 -0
  613. package/dist/src/refusal.js +3 -0
  614. package/dist/src/refusal.js.map +1 -0
  615. package/dist/src/spi/agent-runner.d.ts +6 -0
  616. package/dist/src/spi/agent-runner.d.ts.map +1 -1
  617. package/dist/src/spi/chat-queue.d.ts +4 -1
  618. package/dist/src/spi/chat-queue.d.ts.map +1 -1
  619. package/dist/src/spi/chat-queue.js.map +1 -1
  620. package/dist/src/spi/protocol-adapter.d.ts +3 -3
  621. package/dist/src/spi/roles-policy.d.ts +7 -0
  622. package/dist/src/spi/roles-policy.d.ts.map +1 -1
  623. package/dist/src/spi/tool.d.ts +18 -3
  624. package/dist/src/spi/tool.d.ts.map +1 -1
  625. package/dist/src/stores/lucid-schema.d.ts +24 -6
  626. package/dist/src/stores/lucid-schema.d.ts.map +1 -1
  627. package/dist/src/stores/lucid-schema.js +49 -6
  628. package/dist/src/stores/lucid-schema.js.map +1 -1
  629. package/dist/src/stores/lucid.d.ts +2 -0
  630. package/dist/src/stores/lucid.d.ts.map +1 -1
  631. package/dist/src/stores/lucid.js +7 -0
  632. package/dist/src/stores/lucid.js.map +1 -1
  633. package/dist/src/testing/chat-queue-store-contract.d.ts.map +1 -1
  634. package/dist/src/testing/chat-queue-store-contract.js +4 -0
  635. package/dist/src/testing/chat-queue-store-contract.js.map +1 -1
  636. package/dist/src/testing/in-memory-store.d.ts.map +1 -1
  637. package/dist/src/testing/in-memory-store.js +1 -0
  638. package/dist/src/testing/in-memory-store.js.map +1 -1
  639. package/dist/src/tool-discovery.d.ts +1 -1
  640. package/dist/src/tool-discovery.d.ts.map +1 -1
  641. package/dist/src/tool-discovery.js +5 -1
  642. package/dist/src/tool-discovery.js.map +1 -1
  643. package/dist/src/tool-registry.d.ts +3 -0
  644. package/dist/src/tool-registry.d.ts.map +1 -1
  645. package/dist/src/tool-registry.js +15 -3
  646. package/dist/src/tool-registry.js.map +1 -1
  647. package/dist/src/tool-result-presentation.d.ts +12 -0
  648. package/dist/src/tool-result-presentation.d.ts.map +1 -0
  649. package/dist/src/tool-result-presentation.js +44 -0
  650. package/dist/src/tool-result-presentation.js.map +1 -0
  651. package/dist/src/types.d.ts +20 -0
  652. package/dist/src/types.d.ts.map +1 -1
  653. package/dist/src/ui-capabilities.d.ts +1 -8
  654. package/dist/src/ui-capabilities.d.ts.map +1 -1
  655. package/dist/src/ui-capabilities.js +3 -24
  656. package/dist/src/ui-capabilities.js.map +1 -1
  657. package/package.json +128 -22
  658. package/skills/agent-governance/SKILL.md +12 -4
  659. package/skills/agent-personas-agents/SKILL.md +2 -1
  660. package/skills/agent-setup/SKILL.md +73 -14
  661. package/skills/agent-testing/SKILL.md +22 -0
  662. package/skills/agent-tools/SKILL.md +57 -9
  663. package/dist/src/ag-ui/proposal-decision.d.ts.map +0 -1
  664. package/dist/src/ag-ui/proposal-decision.js.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"file":"ui-capabilities.d.ts","sourceRoot":"","sources":["../../src/ui-capabilities.ts"],"names":[],"mappings":"AACA,0FAA0F;AAC1F,MAAM,WAAW,cAAc;IAC7B,UAAU,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;CACtD;AAED,wBAAgB,sBAAsB,CAAC,KAAK,EAAE,OAAO,GAAG,cAAc,CAuBrE"}
1
+ {"version":3,"file":"ui-capabilities.d.ts","sourceRoot":"","sources":["../../src/ui-capabilities.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,KAAK,cAAc,EAAE,sBAAsB,EAAE,MAAM,yBAAyB,CAAC"}
@@ -1,25 +1,4 @@
1
- const COMPONENT_NAME = /^[A-Za-z][A-Za-z0-9]{0,63}$/;
2
- export function validateUiCapabilities(value) {
3
- if (!record(value) ||
4
- Object.keys(value).some((key) => key !== 'components') ||
5
- !Array.isArray(value.components))
6
- throw new TypeError('Invalid UI capabilities');
7
- const seen = new Set();
8
- const components = value.components.map((component) => {
9
- if (!record(component) ||
10
- Object.keys(component).some((key) => key !== 'name' && key !== 'version') ||
11
- typeof component.name !== 'string' ||
12
- !COMPONENT_NAME.test(component.name) ||
13
- !Number.isSafeInteger(component.version) ||
14
- Number(component.version) <= 0 ||
15
- seen.has(component.name))
16
- throw new TypeError('Invalid UI component capability');
17
- seen.add(component.name);
18
- return { name: component.name, version: Number(component.version) };
19
- });
20
- return { components };
21
- }
22
- function record(value) {
23
- return typeof value === 'object' && value !== null && !Array.isArray(value);
24
- }
1
+ // Defined with the rest of generative UI (which must stay import-free for browsers) and re-exported
2
+ // here, so the root entry keeps exporting it.
3
+ export { validateUiCapabilities } from './genui/capabilities.js';
25
4
  //# sourceMappingURL=ui-capabilities.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"ui-capabilities.js","sourceRoot":"","sources":["../../src/ui-capabilities.ts"],"names":[],"mappings":"AAAA,MAAM,cAAc,GAAG,6BAA6B,CAAC;AAMrD,MAAM,UAAU,sBAAsB,CAAC,KAAc;IACnD,IACE,CAAC,MAAM,CAAC,KAAK,CAAC;QACd,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,KAAK,YAAY,CAAC;QACtD,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,UAAU,CAAC;QAEhC,MAAM,IAAI,SAAS,CAAC,yBAAyB,CAAC,CAAC;IACjD,MAAM,IAAI,GAAG,IAAI,GAAG,EAAU,CAAC;IAC/B,MAAM,UAAU,GAAG,KAAK,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,SAAkB,EAAE,EAAE;QAC7D,IACE,CAAC,MAAM,CAAC,SAAS,CAAC;YAClB,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,IAAI,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,KAAK,MAAM,IAAI,GAAG,KAAK,SAAS,CAAC;YACzE,OAAO,SAAS,CAAC,IAAI,KAAK,QAAQ;YAClC,CAAC,cAAc,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC;YACpC,CAAC,MAAM,CAAC,aAAa,CAAC,SAAS,CAAC,OAAO,CAAC;YACxC,MAAM,CAAC,SAAS,CAAC,OAAO,CAAC,IAAI,CAAC;YAC9B,IAAI,CAAC,GAAG,CAAC,SAAS,CAAC,IAAI,CAAC;YAExB,MAAM,IAAI,SAAS,CAAC,iCAAiC,CAAC,CAAC;QACzD,IAAI,CAAC,GAAG,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;QACzB,OAAO,EAAE,IAAI,EAAE,SAAS,CAAC,IAAI,EAAE,OAAO,EAAE,MAAM,CAAC,SAAS,CAAC,OAAO,CAAC,EAAE,CAAC;IACtE,CAAC,CAAC,CAAC;IACH,OAAO,EAAE,UAAU,EAAE,CAAC;AACxB,CAAC;AAED,SAAS,MAAM,CAAC,KAAc;IAC5B,OAAO,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,IAAI,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;AAC9E,CAAC"}
1
+ {"version":3,"file":"ui-capabilities.js","sourceRoot":"","sources":["../../src/ui-capabilities.ts"],"names":[],"mappings":"AAAA,oGAAoG;AACpG,8CAA8C;AAC9C,OAAO,EAAuB,sBAAsB,EAAE,MAAM,yBAAyB,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@adonis-agora/agent",
3
- "version": "0.61.0",
3
+ "version": "0.63.0",
4
4
  "description": "Governed, durable-backed AI agent (chat + tool-calling + governance) for AdonisJS — part of the Agora ecosystem.",
5
5
  "license": "MIT",
6
6
  "repository": {
@@ -23,6 +23,7 @@
23
23
  "ai-sdk",
24
24
  "durable",
25
25
  "tanstack-intent",
26
+ "opencode",
26
27
  "agora",
27
28
  "guardrails"
28
29
  ],
@@ -41,6 +42,21 @@
41
42
  "import": "./dist/src/ai-sdk/index.js",
42
43
  "default": "./dist/src/ai-sdk/index.js"
43
44
  },
45
+ "./a2a": {
46
+ "types": "./dist/src/a2a/index.d.ts",
47
+ "import": "./dist/src/a2a/index.js",
48
+ "default": "./dist/src/a2a/index.js"
49
+ },
50
+ "./a2a_provider": {
51
+ "types": "./dist/providers/a2a_provider.d.ts",
52
+ "import": "./dist/providers/a2a_provider.js",
53
+ "default": "./dist/providers/a2a_provider.js"
54
+ },
55
+ "./a2a/server_middleware": {
56
+ "types": "./dist/src/a2a/server_middleware.d.ts",
57
+ "import": "./dist/src/a2a/server_middleware.js",
58
+ "default": "./dist/src/a2a/server_middleware.js"
59
+ },
44
60
  "./mcp": {
45
61
  "types": "./dist/src/mcp/index.d.ts",
46
62
  "import": "./dist/src/mcp/index.js",
@@ -71,11 +87,26 @@
71
87
  "import": "./dist/src/ag-ui/index.js",
72
88
  "default": "./dist/src/ag-ui/index.js"
73
89
  },
90
+ "./channels": {
91
+ "types": "./dist/src/channels/index.d.ts",
92
+ "import": "./dist/src/channels/index.js",
93
+ "default": "./dist/src/channels/index.js"
94
+ },
74
95
  "./durable": {
75
96
  "types": "./dist/src/durable/index.d.ts",
76
97
  "import": "./dist/src/durable/index.js",
77
98
  "default": "./dist/src/durable/index.js"
78
99
  },
100
+ "./opencode": {
101
+ "types": "./dist/src/opencode/index.d.ts",
102
+ "import": "./dist/src/opencode/index.js",
103
+ "default": "./dist/src/opencode/index.js"
104
+ },
105
+ "./opencode/durable": {
106
+ "types": "./dist/src/opencode/durable/index.d.ts",
107
+ "import": "./dist/src/opencode/durable/index.js",
108
+ "default": "./dist/src/opencode/durable/index.js"
109
+ },
79
110
  "./authz": {
80
111
  "types": "./dist/src/authz/index.d.ts",
81
112
  "import": "./dist/src/authz/index.js",
@@ -180,6 +211,16 @@
180
211
  "types": "./dist/src/media/index.d.ts",
181
212
  "import": "./dist/src/media/index.js",
182
213
  "default": "./dist/src/media/index.js"
214
+ },
215
+ "./react/genui/server": {
216
+ "types": "./dist/src/react/genui/server.d.ts",
217
+ "import": "./dist/src/react/genui/server.js",
218
+ "default": "./dist/src/react/genui/server.js"
219
+ },
220
+ "./react/genui/server/playwright": {
221
+ "types": "./dist/src/react/genui/server_playwright.d.ts",
222
+ "import": "./dist/src/react/genui/server_playwright.js",
223
+ "default": "./dist/src/react/genui/server_playwright.js"
183
224
  }
184
225
  },
185
226
  "files": [
@@ -197,21 +238,34 @@
197
238
  "peerDependencies": {
198
239
  "@adonis-agora/authz": ">=0.4.2 <1.0.0",
199
240
  "@adonis-agora/diagnostics": ">=0.1.0 <1.0.0",
200
- "@adonis-agora/durable": ">=0.8.0 <1.0.0",
241
+ "@adonis-agora/durable": ">=0.43.3 <1.0.0",
201
242
  "@adonis-agora/media": ">=0.18.0 <1.0.0",
202
243
  "@adonis-agora/telescope": ">=0.4.0 <1.0.0",
203
244
  "@adonisjs/assembler": "^8.4.0",
204
245
  "@adonisjs/core": "^7.3.0",
205
246
  "@adonisjs/lucid": "^22.4.0",
206
247
  "@adonisjs/redis": "^9.2.0 || ^10.0.0 || ^11.0.0",
207
- "@dudousxd/nestjs-agent-core": ">=0.35.0 <1.0.0",
208
- "@dudousxd/nestjs-agent-react": ">=0.30.0 <1.0.0",
209
- "@dudousxd/nestjs-media-client": ">=0.3.0 <1.0.0",
210
248
  "@qdrant/js-client-rest": "^1.11.0",
211
249
  "ai": "^7.0.0",
212
250
  "node-sql-parser": "^5.3.0",
213
251
  "react": "^18.0.0 || ^19.0.0",
214
- "zod": "^4.0.0"
252
+ "zod": "^4.0.0",
253
+ "@ai-sdk/react": "^4.0.0",
254
+ "@json-render/react": ">=0.21.0 <1.0.0",
255
+ "@streamdown/code": "^1.1.1",
256
+ "@streamdown/math": "^1.0.2",
257
+ "@streamdown/mermaid": "^1.0.2",
258
+ "katex": "^0.16.45",
259
+ "prism-react-renderer": "^2.4.1",
260
+ "react-dom": ">=18",
261
+ "react-markdown": "^10.1.0",
262
+ "rehype-katex": "^7.0.1",
263
+ "rehype-sanitize": "^6.0.0",
264
+ "remark-gfm": "^4.0.1",
265
+ "remark-math": "^6.0.0",
266
+ "streamdown": "^2.5.0",
267
+ "unist-util-visit": "^5.1.0",
268
+ "playwright-core": ">=1.48 <2"
215
269
  },
216
270
  "peerDependenciesMeta": {
217
271
  "react": {
@@ -253,23 +307,62 @@
253
307
  "zod": {
254
308
  "optional": true
255
309
  },
256
- "@dudousxd/nestjs-agent-core": {
310
+ "@adonis-agora/media": {
311
+ "optional": true
312
+ },
313
+ "@ai-sdk/react": {
257
314
  "optional": true
258
315
  },
259
- "@dudousxd/nestjs-agent-react": {
316
+ "@json-render/react": {
260
317
  "optional": true
261
318
  },
262
- "@dudousxd/nestjs-media-client": {
319
+ "@streamdown/code": {
263
320
  "optional": true
264
321
  },
265
- "@adonis-agora/media": {
322
+ "@streamdown/math": {
323
+ "optional": true
324
+ },
325
+ "@streamdown/mermaid": {
326
+ "optional": true
327
+ },
328
+ "katex": {
329
+ "optional": true
330
+ },
331
+ "prism-react-renderer": {
332
+ "optional": true
333
+ },
334
+ "react-dom": {
335
+ "optional": true
336
+ },
337
+ "react-markdown": {
338
+ "optional": true
339
+ },
340
+ "rehype-katex": {
341
+ "optional": true
342
+ },
343
+ "rehype-sanitize": {
344
+ "optional": true
345
+ },
346
+ "remark-gfm": {
347
+ "optional": true
348
+ },
349
+ "remark-math": {
350
+ "optional": true
351
+ },
352
+ "streamdown": {
353
+ "optional": true
354
+ },
355
+ "unist-util-visit": {
356
+ "optional": true
357
+ },
358
+ "playwright-core": {
266
359
  "optional": true
267
360
  }
268
361
  },
269
362
  "devDependencies": {
270
- "@adonis-agora/authz": "0.16.1",
363
+ "@adonis-agora/authz": "0.18.0",
271
364
  "@adonis-agora/diagnostics": "0.2.10",
272
- "@adonis-agora/durable": "0.43.1",
365
+ "@adonis-agora/durable": "0.43.3",
273
366
  "@adonis-agora/telescope": "0.21.1",
274
367
  "@adonisjs/assembler": "8.5.2",
275
368
  "@adonisjs/core": "7.5.2",
@@ -278,37 +371,50 @@
278
371
  "@ag-ui/client": "1.0.1",
279
372
  "@ag-ui/core": "1.0.1",
280
373
  "@ai-sdk/react": "^4.0.125",
281
- "@dudousxd/nestjs-agent-core": "0.36.0",
282
- "@dudousxd/nestjs-agent-react": "0.31.0",
283
- "@dudousxd/nestjs-media-client": "0.3.0",
374
+ "@opencode/client": "2.0.18",
284
375
  "@qdrant/js-client-rest": "1.19.0",
285
- "@tanstack/intent": "0.4.0",
376
+ "@tanstack/intent": "0.5.0",
286
377
  "@testcontainers/mysql": "12.2.0",
287
378
  "@testcontainers/postgresql": "12.2.0",
288
379
  "@testing-library/dom": "10.4.2",
289
380
  "@testing-library/react": "16.3.3",
290
- "@types/node": "26.6.3",
381
+ "@types/node": "26.6.4",
291
382
  "@types/pg": "8.23.1",
292
383
  "@types/react": "19.3.0",
293
384
  "@types/react-dom": "19.3.0",
294
385
  "agent-0-56": "npm:@adonis-agora/agent@0.56.0",
295
386
  "agent-0-58": "npm:@adonis-agora/agent@0.58.0",
296
387
  "agent-0-59": "npm:@adonis-agora/agent@0.59.0",
297
- "ai": "7.0.102",
388
+ "ai": "7.0.122",
298
389
  "ajv": "^8.20.0",
299
390
  "better-sqlite3": "13.0.3",
300
391
  "jsdom": "30.1.1",
301
392
  "luxon": "3.7.2",
302
- "mysql2": "3.24.4",
393
+ "mysql2": "3.24.5",
303
394
  "node-sql-parser": "5.4.0",
304
- "pg": "8.23.0",
395
+ "pg": "8.23.1",
305
396
  "react": "19.3.0",
306
397
  "react-dom": "19.3.0",
307
398
  "rxjs": "^7.8.1",
308
399
  "testcontainers": "12.2.0",
309
400
  "typescript": "7.0.2",
310
- "vitest": "5.0.2",
311
- "zod": "4.6.5"
401
+ "vitest": "5.0.3",
402
+ "zod": "4.6.5",
403
+ "@json-render/core": "0.21.0",
404
+ "@json-render/react": "0.21.0",
405
+ "@streamdown/code": "1.1.1",
406
+ "@streamdown/math": "1.0.3",
407
+ "@streamdown/mermaid": "1.0.3",
408
+ "katex": "0.16.45",
409
+ "playwright-core": "^1.63.0",
410
+ "prism-react-renderer": "2.4.1",
411
+ "react-markdown": "10.1.0",
412
+ "rehype-katex": "7.0.1",
413
+ "rehype-sanitize": "6.0.0",
414
+ "remark-gfm": "4.0.1",
415
+ "remark-math": "6.0.0",
416
+ "streamdown": "2.6.0",
417
+ "unist-util-visit": "5.1.0"
312
418
  },
313
419
  "engines": {
314
420
  "node": ">=20.6.0"
@@ -74,12 +74,20 @@ export default defineConfig({
74
74
  })
75
75
  ```
76
76
 
77
- Because the offered-tools filter AND the invoke-time re-check call the same
78
- `can(actor, tool)`, swapping the policy changes both layers together — they can never
79
- disagree about what an actor may reach.
77
+ Because the offered-tools filter calls `canOffer(actor, tool)` when the policy defines
78
+ it (else `can`) and the invoke-time re-check always calls `can(actor, tool)`, swapping
79
+ the policy changes both layers together — they disagree only when a policy defines
80
+ `canOffer` to offer what it will not run (A2A step-up).
81
+
82
+ The provider wraps whatever policy you configure with `personalAgentGate`: an actor with
83
+ the `personal_agent` role (A2A personal agents) reaches only tools that declare one of its
84
+ roles — a tool with no `roles` is out of its reach even when open by default — and its
85
+ memory and skill scopes resolve to none. Nothing changes for any other actor.
80
86
 
81
87
  Source: `packages/adonis/docs/governance/authorization.mdx` ("Ability-aware
82
- authorization"), `packages/adonis/src/authorizer.ts`.
88
+ authorization"), `packages/adonis/src/authorizer.ts`,
89
+ `packages/adonis/src/a2a/gate.ts` (`personalAgentGate`, `personalAgentScopes`),
90
+ `packages/adonis/docs/a2a.mdx` ("What a personal agent can reach").
83
91
 
84
92
  ### Pattern 2 — mount the governance read-model with `governanceAuthorize`
85
93
 
@@ -175,7 +175,8 @@ delegatesTo: [{ agent: 'researcher', roles: ['ANALYST', 'ADMIN'] }]
175
175
 
176
176
  Mechanism: a delegate tool goes through the SAME gate as every other tool. A bare string
177
177
  carries nothing, so under `DefaultToolAuthorizer` it takes `defaultRoles` (open unless
178
- configured), and under the authz Bouncer adapter a spec without `ability` is denied
178
+ configured — except for A2A personal agents, which reach only tools that declare one of
179
+ their roles), and under the authz Bouncer adapter a spec without `ability` is denied
179
180
  outright — the edge becomes uncalled for everyone.
180
181
  Source: `packages/adonis/docs/authoring/personas-and-agents.mdx` ("Authorizing a
181
182
  delegation"), `packages/adonis/src/types.ts` (`DelegateEdge`).
@@ -21,14 +21,17 @@ sources:
21
21
  - "DavideCarvalho/adonis-agent:packages/adonis/src/stores/factory.ts"
22
22
  - "DavideCarvalho/adonis-agent:packages/adonis/docs/react.mdx"
23
23
  - "DavideCarvalho/adonis-agent:packages/adonis/src/react/index.ts"
24
+ - "DavideCarvalho/adonis-agent:packages/adonis/docs/channels.mdx"
24
25
  ---
25
26
 
26
27
  # Setting up @adonis-agora/agent
27
28
 
28
29
  `@adonis-agora/agent` is a governed AI agent module for AdonisJS: one `defineConfig`
29
- call in `config/agent.ts` wires a provider-agnostic agent loop, persistence, budgeting,
30
- and the `/agent/*` HTTP+SSE routes. Only `model` is required — everything else is a
31
- fail-closed default that this skill walks through.
30
+ call in `config/agent.ts` wires a provider-agnostic agent (the loop by default, or an
31
+ `engine` that runs turns instead), persistence, budgeting,
32
+ and the `/agent/*` HTTP+SSE routes. Either `model` (the loop runs the turns) or
33
+ `engine` (something else does) is required — everything else ships with a default that
34
+ this skill walks through.
32
35
 
33
36
  ## Setup
34
37
 
@@ -42,8 +45,9 @@ node ace configure @adonis-agora/agent
42
45
  `configure` registers `@adonis-agora/agent/agent_provider` and
43
46
  `@adonis-agora/agent/dashboard_provider` in `adonisrc.ts`, registers the Assembler init
44
47
  hook that generates the typed `app/agent_tools` barrel, publishes `config/agent.ts`,
45
- `config/mcp.ts`, and two migrations (the agent tables; a Postgres-only pgvector RAG chunk
46
- table you can delete). Then add the model peer and write your config:
48
+ `config/mcp.ts`, and five migrations: three for the agent tables (the base tables plus two
49
+ forward-only action-proposal upgrades) and two Postgres-only ones (the pgvector RAG chunk
50
+ table and the document-tree tables — delete the ones you don't use). Then add the model peer and write your config:
47
51
 
48
52
  ```bash
49
53
  pnpm add ai zod @ai-sdk/openai
@@ -75,9 +79,10 @@ export default defineConfig({
75
79
  })
76
80
  ```
77
81
 
78
- Run the migration for the six agent tables (`agent_thread`, `agent_message`,
79
- `agent_tool_call`, `agent_token_usage`, `agent_model_pricing`, plus the run-lifecycle
80
- columns):
82
+ Run the published migrations for the agent tables (`agent_action_proposal`,
83
+ `agent_thread`, `agent_message`, `agent_tool_call`, `agent_token_usage`,
84
+ `agent_model_pricing`, `agent_run`, `agent_queued_message`, `agent_confirm_token`, plus the
85
+ `agent_stream_frame` buffer and the text channels' `agent_channel_state`):
81
86
 
82
87
  ```bash
83
88
  node ace migration:run
@@ -85,8 +90,8 @@ node ace migration:run
85
90
 
86
91
  You can skip it: the Lucid store provisions and repairs its own tables as the app starts
87
92
  (`autoCreateTables` defaults to true; an ace command or a hand-built store does it on first
88
- use), so an upgrade that adds a column needs no app migration. The published migration
89
- delegates to the same `createAgentTables` helper, so the two schemas can never drift.
93
+ use), so an upgrade that adds a column needs no app migration. The published migrations
94
+ delegate to the same `createAgentTables` helper, so the two schemas can never drift.
90
95
  Only with `autoCreateTables: false` does an upgrade need a migration that calls
91
96
  `createAgentTables` again.
92
97
 
@@ -179,6 +184,7 @@ export default defineConfig({
179
184
 
180
185
  Requires `@adonisjs/redis` installed and configured unless you pass `client:` (a
181
186
  bring-your-own `RedisStreamClient`). Pair with `durable: true` for cross-instance resume.
187
+ Under an `engine`, `durable: true` is refused at boot unless the engine is durable itself.
182
188
 
183
189
  No Redis? `tokenSinks.lucid()` keeps the frames in the app's SQL database instead
184
190
  (table `agent_stream_frame`, created with the other agent tables). Subscribers poll
@@ -206,9 +212,9 @@ Source: `packages/adonis/src/stores/factory.ts` (`tokenSinks`),
206
212
 
207
213
  ### Pattern 4 — a React chat with `@adonis-agora/agent/react`
208
214
 
209
- The React layer is `@dudousxd/nestjs-agent-react` re-exported (an optional peer — install it with
210
- `@ai-sdk/react` and `ai`), plus an `AgentProvider` that already sends the session cookie and
211
- shield's CSRF token. No controller, no fetch code:
215
+ Agora owns the React layer inside `@adonis-agora/agent/react`. Install the optional
216
+ `react`, `@ai-sdk/react` and `ai` peers for this entry. `AgentProvider` already sends the
217
+ session cookie and shield's CSRF token. No Aviary package or release is required:
212
218
 
213
219
  ```tsx
214
220
  import { AgentProvider, useAgentChat } from '@adonis-agora/agent/react'
@@ -260,13 +266,66 @@ token sink any replica serves the resume. The native stream is unchanged.
260
266
 
261
267
  Source: `packages/adonis/docs/ag-ui.mdx`, `packages/adonis/src/ag-ui/`.
262
268
 
269
+ ### Pattern 6 — answer on WhatsApp / Telegram with `channels.handle()`
270
+
271
+ ```ts
272
+ // start/routes.ts
273
+ import { channels, evolutionApi } from '@adonis-agora/agent/channels'
274
+
275
+ router.post(
276
+ '/webhooks/whatsapp',
277
+ channels.handle(
278
+ evolutionApi({ url, instance, apiKey, webhookToken }), // or whatsappCloud({…}) / telegram({…})
279
+ {
280
+ actor: (message) => actorForPhone(message.from), // null → not answered
281
+ thread: (actor, message) => threadFor(message.conversation), // null → new thread
282
+ onThreadCreated: (threadId, actor, message) => saveThread(message.conversation, threadId),
283
+ },
284
+ ),
285
+ )
286
+ ```
287
+
288
+ The handler verifies the webhook (token / HMAC / secret header), dedupes by provider message id,
289
+ answers `200` at once and runs the turn in the background (`await handler.drain()` in tests).
290
+ Replies are text-only (components → `fallbackText`), converted to the channel's markdown and split
291
+ at its length limit. Media is downloaded and attached when `attachments` is configured (else the
292
+ person is told why not). `ask` questions go out as numbered text, one at a time; the next messages
293
+ answer them. State (message ids, questions in progress, relayed outcomes) lives in
294
+ `agent_channel_state` via `lucidChannelStore()` when the agent store is Lucid, else memory —
295
+ `store: redisChannelStore(redis)` otherwise on several replicas. Use
296
+ `actionApprovalMode: 'independent'`: pending proposals go out as Confirm/Cancel buttons (or a text
297
+ instruction in the `actionProposalText` vocabulary), and `actionProposalWorker: { onSettled:
298
+ channels.onSettled }` relays outcomes that settle later. In blocking mode the channel can only say
299
+ the approval must happen in the app. Exclude webhook routes from Shield's CSRF check.
300
+
301
+ Source: `packages/adonis/docs/channels.mdx`, `packages/adonis/src/channels/`.
302
+
303
+ ## Component rendering entries
304
+
305
+ Agora owns its catalog (`@adonis-agora/agent/genui`), browser rendering
306
+ (`@adonis-agora/agent/react/genui`), AG-UI adapters and resumable upload client
307
+ (`@adonis-agora/agent/react/media`). Protocol compatibility does not require installing
308
+ Aviary packages.
309
+
310
+ For static HTML, use `createReactComponentRegistry` and `createReactServerRenderer` from
311
+ `@adonis-agora/agent/react/genui/server`; install matching `react` and `react-dom` peers.
312
+ Keep this server entry out of browser bundles: it reads trusted filesystem stylesheets
313
+ and imports ReactDOM's server renderer. HTML does not require a browser or AI SDK.
314
+ PNG/PDF output takes a capture adapter; the optional Playwright implementation lives at
315
+ `@adonis-agora/agent/react/genui/server/playwright` and needs `playwright-core`. A supplied
316
+ browser remains caller-owned. Binary captures are attachments, not durable UI-frame props.
317
+
318
+ Source: `packages/adonis/docs/authoring/component-rendering.mdx`,
319
+ `packages/adonis/docs/react.mdx`.
320
+
263
321
  ## Common mistakes
264
322
 
265
323
  ### MEDIUM — restating history to the AG-UI route and expecting it to be read
266
324
 
267
325
  The route answers the LAST user message of `messages`; the thread's history is the one the server
268
326
  stored under `threadId`. Media parts must be inline (`source.type: 'data'`) and need
269
- `attachments:` configured — a `url` or `file` source is dropped with an `agora.warning`.
327
+ `attachments:` configured — a `url` or a `file` source from another provider is dropped with an `agora.warning`.
328
+ A `file` handle with `provider: 'agora'` naming an upload this agent staged is resolved for the caller instead.
270
329
 
271
330
  Source: `packages/adonis/docs/ag-ui.mdx`.
272
331
 
@@ -167,6 +167,28 @@ for await (const frame of sink.subscribe(runId)) {
167
167
  Source: `packages/adonis/docs/testing.mdx` ("Because the fakes are behavioral twins"
168
168
  note), `packages/adonis/src/in-process-sink.ts`.
169
169
 
170
+ ### Pattern 4 — verify presentation, replay and optional rendering locally
171
+
172
+ Use Agora's own entries in tests; do not install or alias Aviary packages. Exercise
173
+ class presentation through discovery, and functional presentation through `defineTool`
174
+ and `ToolRegistry.invoke`. Verify unchanged domain output, authorization and denied
175
+ preflight, completed preflight without execution, ordered emissions, and a throwing
176
+ `present`/sink/reporter without repeating the domain write. A loop test should replay
177
+ its journaled tool result and assert that presentation is not emitted or persisted twice.
178
+
179
+ Test custom schema transformations with distinct `props` and `outputProps` through
180
+ static and request-resolved component/show/tree tools; normalized props must remain
181
+ unchanged in rendering and persisted history. For SSR, import
182
+ `@adonis-agora/agent/react/genui/server`, provide trusted CSS/theme, and use a fake capture
183
+ adapter to inspect every paginated row and escaped HTML without a browser. Real
184
+ PNG/PDF tests can use the optional Playwright entry and a host Chromium executable;
185
+ assert byte signatures and page/context cleanup while retaining the supplied browser.
186
+ Keep binary captures out of persisted component frames.
187
+
188
+ Source: `packages/adonis/test/tool-present.spec.ts`,
189
+ `packages/adonis/test/emit-ui.spec.ts`, `packages/adonis/test/react-server.spec.ts`,
190
+ `packages/adonis/test/react-playwright.browser.spec.ts`.
191
+
170
192
  ## Common mistakes
171
193
 
172
194
  ### MEDIUM — keeping mutable state in a FakeModelProvider script
@@ -59,7 +59,8 @@ export default class GetWeather extends ReadTool<Input, { tempC: number }> {
59
59
  }
60
60
  ```
61
61
 
62
- Prefer a function? `defineTool(options, execute)` returns a branded `{ spec, handler }`
62
+ Prefer a function? `defineTool({ name, input, execute, present, ... })` or the existing
63
+ `defineTool(options, execute)` returns a branded `{ spec, handler }`
63
64
  discovery picks up identically — or pass it straight to `defineConfig({ tools: [...] })`.
64
65
 
65
66
  ## Core patterns
@@ -109,8 +110,9 @@ An action's write and the checkpoint that records it are two writes: a worker th
109
110
  them re-runs the tool on recovery. Pass `ctx.idempotencyKey` (`<runId>:<toolCallId>`, the same for
110
111
  every execution of one call) on as the downstream idempotency key — a provider's
111
112
  `Idempotency-Key`, a unique column on the inserted row, the `id` of a workflow the tool starts — so
112
- the second attempt lands on the first. It is absent outside a turn (MCP, a direct
113
- `registry.invoke`), so fall back to a key of your own there.
113
+ the second attempt lands on the first. Over MCP the server mints one per `tools/call`
114
+ (alongside `toolCallId` and `pageContext: { channel: 'mcp' }`). It is absent on a direct
115
+ `registry.invoke`, so fall back to a key of your own there.
114
116
 
115
117
  Source: `packages/adonis/src/spi/tool.ts` (`AiToolCtx.idempotencyKey`).
116
118
 
@@ -177,10 +179,12 @@ Source: `packages/adonis/docs/authoring/tools.mdx` ("Configuring the generator")
177
179
 
178
180
  ### Pattern 4 — a write reachable over MCP: `defineConfirmedTool`
179
181
 
180
- An `action` never reaches an MCP client (no approval channel, and Claude.ai/Desktop have no
182
+ An `action` is off the MCP surface by default (`actions: 'refuse'` in `config/mcp.ts` —
183
+ neither listed nor callable, since there is no approval channel, and Claude.ai/Desktop have no
181
184
  elicitation). For a write that must be callable there, put the gate inside the tool: the
182
185
  first call previews and returns a signed `confirmToken`; the same arguments plus
183
- `confirm: true` and the token commit.
186
+ `confirm: true` and the token commit. (`actions: 'execute'` opts out and runs actions when
187
+ called — the MCP client's own confirmation stands in for the loop's approval gate.)
184
188
 
185
189
  ```ts
186
190
  import { defineConfirmedTool, LucidConfirmTokenStore } from '@adonis-agora/agent'
@@ -209,6 +213,47 @@ arguments and expires (`ttlMs`, default 15 min).
209
213
  Source: `packages/adonis/docs/mcp.mdx` ("Writes with a human gate"),
210
214
  `packages/adonis/src/confirmed-tool.ts`.
211
215
 
216
+ ### Pattern 5 — present a domain result through the component catalog
217
+
218
+ Keep `execute` returning domain data. An optional `present(output, ctx)` on a class or
219
+ functional handler returns one component presentation, an array, or `undefined`. The
220
+ registry emits presentations through `ctx.emitUi` and preserves the domain result for
221
+ REST/MCP callers. Denied or failed execution does not present; presentation errors do
222
+ not retry a successful write. Methods keep their receiver, including injected services.
223
+
224
+ ```ts
225
+ import { defineTool } from '@adonis-agora/agent'
226
+ import { table } from '@adonis-agora/agent/genui'
227
+ import { z } from 'zod'
228
+
229
+ export const listRecords = defineTool({
230
+ name: 'list_records',
231
+ description: 'List records visible to the current actor.',
232
+ input: z.object({ limit: z.number().int().min(1).max(100) }),
233
+ execute: async ({ limit }, ctx) => recordsFor(ctx.actor, limit),
234
+ present: async (records) => table({
235
+ columns: [{ key: 'name', label: 'Name' }],
236
+ rows: records,
237
+ }),
238
+ })
239
+ ```
240
+
241
+ `table` and `chart` present the builtin `DataTable` and `Chart` definitions: put them in the
242
+ genui catalog (`BUILTIN_COMPONENTS` from `@adonis-agora/agent/genui/builtins`, or the two
243
+ definitions) and register app renderers under those names. Builtins carry no visuals.
244
+ Use `createComponent` for custom definitions and one `createComponentRegistry` per app
245
+ or tenant. Input `props` may transform; if the transform changes shape or is not
246
+ idempotent, declare `outputProps` to validate the normalized JSON persisted in frames.
247
+ Do not send renderer functions or image/PDF bytes as props. Set `onPresentationError(error,
248
+ { toolName, toolCallId, runId, threadId })` in `defineConfig` — it is wired for turns
249
+ and proposal executions (the loop/executor fill in the call, run and thread); omit it
250
+ and the provider logs a warning on the app logger. Inside a tool,
251
+ `ctx.onPresentationError` carries the same details. SSR and capture use optional server entries,
252
+ separate from tool execution and browser chat hooks.
253
+
254
+ Source: `packages/adonis/docs/authoring/component-rendering.mdx`,
255
+ `packages/adonis/src/spi/tool.ts`, `packages/adonis/src/tool-result-presentation.ts`.
256
+
212
257
  ## Feature flags and per-user gates — `enabled`, `isEnabled()`, `canUse(actor)`
213
258
 
214
259
  ```ts
@@ -232,8 +277,8 @@ Source: `packages/adonis/docs/authoring/tools.mdx`, `packages/adonis/src/tool-fi
232
277
  ### CRITICAL — shipping a privileged tool without `roles`
233
278
 
234
279
  ```ts
235
- // Wrong — no roles → inherits defaultRoles, which is [] (open) by default: every actor,
236
- // an anonymous visitor included, is offered this tool.
280
+ // Wrong — no roles → inherits defaultRoles, which is [] (open) by default: every actor
281
+ // except A2A personal agents, an anonymous visitor included, is offered this tool.
237
282
  static tool = { name: 'refund_order', kind: 'action', description: '...', input }
238
283
  ```
239
284
 
@@ -245,10 +290,13 @@ static tool = { name: 'refund_order', kind: 'action', description: '...', input,
245
290
  Mechanism: `definitionsFor` filters the offered tool list through the role gate BEFORE
246
291
  each model turn, and `invoke` re-checks it. A tool with no `roles` takes `defaultRoles`;
247
292
  an empty list is no restriction (since 0.46 — before, it denied everyone; `emptyRoles: 'deny'`
248
- in the config, or `ClosedRolesPolicy`, keeps it closed). An `action` still parks on approval — but by default the
293
+ in the config, or `ClosedRolesPolicy`, keeps it closed) — except for an actor with the
294
+ `personal_agent` role (A2A personal agents): it reaches only tools that declare one of its
295
+ roles, so a tool with no `roles` is out of its reach even when open by default. An `action` still parks on approval — but by default the
249
296
  requester approves, so for a public chat that is only a confirmation.
250
297
  Source: `packages/adonis/docs/governance/authorization.mdx`,
251
- `packages/adonis/src/tool-registry.ts` (`DefaultRolesPolicy.can`).
298
+ `packages/adonis/src/tool-registry.ts` (`DefaultRolesPolicy.can`),
299
+ `packages/adonis/src/a2a/gate.ts` (`personalAgentGate`).
252
300
 
253
301
  ### HIGH — trusting an id from the model's arguments instead of `ctx.actor`
254
302
 
@@ -1 +0,0 @@
1
- {"version":3,"file":"proposal-decision.d.ts","sourceRoot":"","sources":["../../../src/ag-ui/proposal-decision.ts"],"names":[],"mappings":"AAAA,OAAO,EAA0B,KAAK,SAAS,EAAE,MAAM,mCAAmC,CAAC;AAE3F,qGAAqG;AACrG,wBAAgB,4BAA4B,CAAC,KAAK,EAAE;IAClD,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;IACb,gBAAgB,EAAE,OAAO,CAAC;CAC3B,GAAG,SAAS,EAAE,CAmBd"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"proposal-decision.js","sourceRoot":"","sources":["../../../src/ag-ui/proposal-decision.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,sBAAsB,EAAkB,MAAM,mCAAmC,CAAC;AAE3F,qGAAqG;AACrG,MAAM,UAAU,4BAA4B,CAAC,KAK5C;IACC,MAAM,SAAS,GAAG,GAAG,KAAK,CAAC,KAAK,oBAAoB,CAAC;IACrD,OAAO;QACL;YACE,IAAI,EAAE,aAAa;YACnB,QAAQ,EAAE,KAAK,CAAC,QAAQ;YACxB,KAAK,EAAE,KAAK,CAAC,KAAK;YAClB,eAAe,EAAE,sBAAsB;SACxC;QACD;YACE,IAAI,EAAE,QAAQ;YACd,IAAI,EAAE,iCAAiC;YACvC,KAAK,EAAE,EAAE,QAAQ,EAAE,KAAK,CAAC,QAAQ,EAAE,gBAAgB,EAAE,KAAK,CAAC,gBAAgB,EAAE;SAC9E;QACD,EAAE,IAAI,EAAE,oBAAoB,EAAE,SAAS,EAAE,IAAI,EAAE,WAAW,EAAE;QAC5D,EAAE,IAAI,EAAE,sBAAsB,EAAE,SAAS,EAAE,KAAK,EAAE,KAAK,CAAC,IAAI,EAAE;QAC9D,EAAE,IAAI,EAAE,kBAAkB,EAAE,SAAS,EAAE;QACvC,EAAE,IAAI,EAAE,cAAc,EAAE,QAAQ,EAAE,KAAK,CAAC,QAAQ,EAAE,KAAK,EAAE,KAAK,CAAC,KAAK,EAAE;KACvE,CAAC;AACJ,CAAC"}