@adonis-agora/agent 0.60.1 → 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 (707) hide show
  1. package/CHANGELOG.md +96 -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 +9 -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 +195 -11
  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-approval.d.ts +26 -0
  63. package/dist/src/action-proposal-approval.d.ts.map +1 -0
  64. package/dist/src/action-proposal-approval.js +28 -0
  65. package/dist/src/action-proposal-approval.js.map +1 -0
  66. package/dist/src/action-proposal-discovery.d.ts +9 -0
  67. package/dist/src/action-proposal-discovery.d.ts.map +1 -0
  68. package/dist/src/action-proposal-discovery.js +20 -0
  69. package/dist/src/action-proposal-discovery.js.map +1 -0
  70. package/dist/src/action-proposal-executor.d.ts +40 -0
  71. package/dist/src/action-proposal-executor.d.ts.map +1 -0
  72. package/dist/src/action-proposal-executor.js +80 -0
  73. package/dist/src/action-proposal-executor.js.map +1 -0
  74. package/dist/src/action-proposal-outcome.d.ts +12 -0
  75. package/dist/src/action-proposal-outcome.d.ts.map +1 -0
  76. package/dist/src/action-proposal-outcome.js +86 -0
  77. package/dist/src/action-proposal-outcome.js.map +1 -0
  78. package/dist/src/action-proposal-preparation.d.ts +20 -0
  79. package/dist/src/action-proposal-preparation.d.ts.map +1 -0
  80. package/dist/src/action-proposal-preparation.js +27 -0
  81. package/dist/src/action-proposal-preparation.js.map +1 -0
  82. package/dist/src/action-proposal-receipt.d.ts +12 -0
  83. package/dist/src/action-proposal-receipt.d.ts.map +1 -0
  84. package/dist/src/action-proposal-receipt.js +4 -0
  85. package/dist/src/action-proposal-receipt.js.map +1 -0
  86. package/dist/src/action-proposal-runtime.d.ts +9 -0
  87. package/dist/src/action-proposal-runtime.d.ts.map +1 -0
  88. package/dist/src/action-proposal-runtime.js +34 -0
  89. package/dist/src/action-proposal-runtime.js.map +1 -0
  90. package/dist/src/action-proposal-service.d.ts +47 -0
  91. package/dist/src/action-proposal-service.d.ts.map +1 -0
  92. package/dist/src/action-proposal-service.js +136 -0
  93. package/dist/src/action-proposal-service.js.map +1 -0
  94. package/dist/src/action-proposal-text.d.ts +72 -0
  95. package/dist/src/action-proposal-text.d.ts.map +1 -0
  96. package/dist/src/action-proposal-text.js +119 -0
  97. package/dist/src/action-proposal-text.js.map +1 -0
  98. package/dist/src/action-proposal-transitions.d.ts +20 -0
  99. package/dist/src/action-proposal-transitions.d.ts.map +1 -0
  100. package/dist/src/action-proposal-transitions.js +311 -0
  101. package/dist/src/action-proposal-transitions.js.map +1 -0
  102. package/dist/src/action-proposal-worker.d.ts +32 -0
  103. package/dist/src/action-proposal-worker.d.ts.map +1 -0
  104. package/dist/src/action-proposal-worker.js +140 -0
  105. package/dist/src/action-proposal-worker.js.map +1 -0
  106. package/dist/src/ag-ui/adapter.d.ts.map +1 -1
  107. package/dist/src/ag-ui/adapter.js +106 -1
  108. package/dist/src/ag-ui/adapter.js.map +1 -1
  109. package/dist/src/ag-ui/core/encoder.d.ts +105 -0
  110. package/dist/src/ag-ui/core/encoder.d.ts.map +1 -0
  111. package/dist/src/ag-ui/core/encoder.js +523 -0
  112. package/dist/src/ag-ui/core/encoder.js.map +1 -0
  113. package/dist/src/ag-ui/core/index.d.ts +12 -0
  114. package/dist/src/ag-ui/core/index.d.ts.map +1 -0
  115. package/dist/src/ag-ui/core/index.js +12 -0
  116. package/dist/src/ag-ui/core/index.js.map +1 -0
  117. package/dist/src/ag-ui/core/input.d.ts +74 -0
  118. package/dist/src/ag-ui/core/input.d.ts.map +1 -0
  119. package/dist/src/ag-ui/core/input.js +228 -0
  120. package/dist/src/ag-ui/core/input.js.map +1 -0
  121. package/dist/src/ag-ui/core/interrupt-id.d.ts +31 -0
  122. package/dist/src/ag-ui/core/interrupt-id.d.ts.map +1 -0
  123. package/dist/src/ag-ui/core/interrupt-id.js +48 -0
  124. package/dist/src/ag-ui/core/interrupt-id.js.map +1 -0
  125. package/dist/src/ag-ui/core/proposal-decision.d.ts +9 -0
  126. package/dist/src/ag-ui/core/proposal-decision.d.ts.map +1 -0
  127. package/dist/src/ag-ui/core/proposal-decision.js +20 -0
  128. package/dist/src/ag-ui/core/proposal-decision.js.map +1 -0
  129. package/dist/src/ag-ui/core/stream.d.ts +27 -0
  130. package/dist/src/ag-ui/core/stream.d.ts.map +1 -0
  131. package/dist/src/ag-ui/core/stream.js +68 -0
  132. package/dist/src/ag-ui/core/stream.js.map +1 -0
  133. package/dist/src/ag-ui/core/types.d.ts +249 -0
  134. package/dist/src/ag-ui/core/types.d.ts.map +1 -0
  135. package/dist/src/ag-ui/core/types.js +35 -0
  136. package/dist/src/ag-ui/core/types.js.map +1 -0
  137. package/dist/src/ag-ui/encoder.d.ts +3 -4
  138. package/dist/src/ag-ui/encoder.d.ts.map +1 -1
  139. package/dist/src/ag-ui/encoder.js +10 -11
  140. package/dist/src/ag-ui/encoder.js.map +1 -1
  141. package/dist/src/ag-ui/frames.d.ts +4 -5
  142. package/dist/src/ag-ui/frames.d.ts.map +1 -1
  143. package/dist/src/ag-ui/frames.js +9 -4
  144. package/dist/src/ag-ui/frames.js.map +1 -1
  145. package/dist/src/ag-ui/index.d.ts +3 -5
  146. package/dist/src/ag-ui/index.d.ts.map +1 -1
  147. package/dist/src/ag-ui/index.js +3 -5
  148. package/dist/src/ag-ui/index.js.map +1 -1
  149. package/dist/src/ag-ui/stream.d.ts +3 -4
  150. package/dist/src/ag-ui/stream.d.ts.map +1 -1
  151. package/dist/src/ag-ui/stream.js +4 -5
  152. package/dist/src/ag-ui/stream.js.map +1 -1
  153. package/dist/src/agent-deps-factory.d.ts +8 -0
  154. package/dist/src/agent-deps-factory.d.ts.map +1 -1
  155. package/dist/src/agent-deps-factory.js +12 -0
  156. package/dist/src/agent-deps-factory.js.map +1 -1
  157. package/dist/src/agent-deps.d.ts +7 -0
  158. package/dist/src/agent-deps.d.ts.map +1 -1
  159. package/dist/src/agent-deps.js.map +1 -1
  160. package/dist/src/agent-loop.d.ts +8 -3
  161. package/dist/src/agent-loop.d.ts.map +1 -1
  162. package/dist/src/agent-loop.js +398 -63
  163. package/dist/src/agent-loop.js.map +1 -1
  164. package/dist/src/agent-service.d.ts +52 -2
  165. package/dist/src/agent-service.d.ts.map +1 -1
  166. package/dist/src/agent-service.js +62 -2
  167. package/dist/src/agent-service.js.map +1 -1
  168. package/dist/src/ai-sdk/ai-sdk-model.js +4 -1
  169. package/dist/src/ai-sdk/ai-sdk-model.js.map +1 -1
  170. package/dist/src/ai-tool-ref.d.ts +6 -1
  171. package/dist/src/ai-tool-ref.d.ts.map +1 -1
  172. package/dist/src/ai-tool-ref.js +32 -16
  173. package/dist/src/ai-tool-ref.js.map +1 -1
  174. package/dist/src/chat-queue-service.d.ts.map +1 -1
  175. package/dist/src/chat-queue-service.js +4 -0
  176. package/dist/src/chat-queue-service.js.map +1 -1
  177. package/dist/src/client/chat-client.d.ts +12 -0
  178. package/dist/src/client/chat-client.d.ts.map +1 -1
  179. package/dist/src/client/chat-client.js +69 -1
  180. package/dist/src/client/chat-client.js.map +1 -1
  181. package/dist/src/client/sse.d.ts +15 -0
  182. package/dist/src/client/sse.d.ts.map +1 -1
  183. package/dist/src/client/sse.js +45 -0
  184. package/dist/src/client/sse.js.map +1 -1
  185. package/dist/src/define_config.d.ts +70 -12
  186. package/dist/src/define_config.d.ts.map +1 -1
  187. package/dist/src/define_config.js.map +1 -1
  188. package/dist/src/engine.d.ts +77 -0
  189. package/dist/src/engine.d.ts.map +1 -0
  190. package/dist/src/engine.js +27 -0
  191. package/dist/src/engine.js.map +1 -0
  192. package/dist/src/genui/builtins.d.ts +73 -3
  193. package/dist/src/genui/builtins.d.ts.map +1 -1
  194. package/dist/src/genui/builtins.js +298 -3
  195. package/dist/src/genui/builtins.js.map +1 -1
  196. package/dist/src/genui/capabilities.d.ts +24 -0
  197. package/dist/src/genui/capabilities.d.ts.map +1 -0
  198. package/dist/src/genui/capabilities.js +81 -0
  199. package/dist/src/genui/capabilities.js.map +1 -0
  200. package/dist/src/genui/catalog.d.ts +77 -0
  201. package/dist/src/genui/catalog.d.ts.map +1 -0
  202. package/dist/src/genui/catalog.js +88 -0
  203. package/dist/src/genui/catalog.js.map +1 -0
  204. package/dist/src/genui/factory.d.ts +8 -8
  205. package/dist/src/genui/factory.d.ts.map +1 -1
  206. package/dist/src/genui/factory.js +3 -1
  207. package/dist/src/genui/factory.js.map +1 -1
  208. package/dist/src/genui/index.d.ts +4 -12
  209. package/dist/src/genui/index.d.ts.map +1 -1
  210. package/dist/src/genui/index.js +6 -18
  211. package/dist/src/genui/index.js.map +1 -1
  212. package/dist/src/genui/public.d.ts +9 -0
  213. package/dist/src/genui/public.d.ts.map +1 -0
  214. package/dist/src/genui/public.js +9 -0
  215. package/dist/src/genui/public.js.map +1 -0
  216. package/dist/src/genui/registry.d.ts +65 -0
  217. package/dist/src/genui/registry.d.ts.map +1 -0
  218. package/dist/src/genui/registry.js +151 -0
  219. package/dist/src/genui/registry.js.map +1 -0
  220. package/dist/src/genui/schema.d.ts +71 -0
  221. package/dist/src/genui/schema.d.ts.map +1 -0
  222. package/dist/src/genui/schema.js +304 -0
  223. package/dist/src/genui/schema.js.map +1 -0
  224. package/dist/src/genui/text.d.ts +35 -0
  225. package/dist/src/genui/text.d.ts.map +1 -0
  226. package/dist/src/genui/text.js +156 -0
  227. package/dist/src/genui/text.js.map +1 -0
  228. package/dist/src/genui/tools.d.ts +91 -0
  229. package/dist/src/genui/tools.d.ts.map +1 -0
  230. package/dist/src/genui/tools.js +292 -0
  231. package/dist/src/genui/tools.js.map +1 -0
  232. package/dist/src/genui/tree.d.ts +56 -0
  233. package/dist/src/genui/tree.d.ts.map +1 -0
  234. package/dist/src/genui/tree.js +188 -0
  235. package/dist/src/genui/tree.js.map +1 -0
  236. package/dist/src/index.d.ts +21 -3
  237. package/dist/src/index.d.ts.map +1 -1
  238. package/dist/src/index.js +19 -2
  239. package/dist/src/index.js.map +1 -1
  240. package/dist/src/mcp/auth.d.ts +17 -1
  241. package/dist/src/mcp/auth.d.ts.map +1 -1
  242. package/dist/src/mcp/auth.js +14 -3
  243. package/dist/src/mcp/auth.js.map +1 -1
  244. package/dist/src/mcp/define_config.d.ts +81 -2
  245. package/dist/src/mcp/define_config.d.ts.map +1 -1
  246. package/dist/src/mcp/define_config.js.map +1 -1
  247. package/dist/src/mcp/index.d.ts +1 -1
  248. package/dist/src/mcp/index.d.ts.map +1 -1
  249. package/dist/src/mcp/index.js.map +1 -1
  250. package/dist/src/mcp/oauth-resource.d.ts +9 -0
  251. package/dist/src/mcp/oauth-resource.d.ts.map +1 -0
  252. package/dist/src/mcp/oauth-resource.js +16 -0
  253. package/dist/src/mcp/oauth-resource.js.map +1 -0
  254. package/dist/src/mcp/server.d.ts +5 -0
  255. package/dist/src/mcp/server.d.ts.map +1 -1
  256. package/dist/src/mcp/server.js +48 -16
  257. package/dist/src/mcp/server.js.map +1 -1
  258. package/dist/src/negotiated-tool-ui.d.ts +10 -0
  259. package/dist/src/negotiated-tool-ui.d.ts.map +1 -0
  260. package/dist/src/negotiated-tool-ui.js +57 -0
  261. package/dist/src/negotiated-tool-ui.js.map +1 -0
  262. package/dist/src/opencode/client.d.ts +202 -0
  263. package/dist/src/opencode/client.d.ts.map +1 -0
  264. package/dist/src/opencode/client.js +2 -0
  265. package/dist/src/opencode/client.js.map +1 -0
  266. package/dist/src/opencode/durable/index.d.ts +33 -0
  267. package/dist/src/opencode/durable/index.d.ts.map +1 -0
  268. package/dist/src/opencode/durable/index.js +38 -0
  269. package/dist/src/opencode/durable/index.js.map +1 -0
  270. package/dist/src/opencode/durable/runner.d.ts +36 -0
  271. package/dist/src/opencode/durable/runner.d.ts.map +1 -0
  272. package/dist/src/opencode/durable/runner.js +88 -0
  273. package/dist/src/opencode/durable/runner.js.map +1 -0
  274. package/dist/src/opencode/durable/workflow.d.ts +40 -0
  275. package/dist/src/opencode/durable/workflow.d.ts.map +1 -0
  276. package/dist/src/opencode/durable/workflow.js +106 -0
  277. package/dist/src/opencode/durable/workflow.js.map +1 -0
  278. package/dist/src/opencode/engine.d.ts +48 -0
  279. package/dist/src/opencode/engine.d.ts.map +1 -0
  280. package/dist/src/opencode/engine.js +98 -0
  281. package/dist/src/opencode/engine.js.map +1 -0
  282. package/dist/src/opencode/event-hub.d.ts +23 -0
  283. package/dist/src/opencode/event-hub.d.ts.map +1 -0
  284. package/dist/src/opencode/event-hub.js +99 -0
  285. package/dist/src/opencode/event-hub.js.map +1 -0
  286. package/dist/src/opencode/forms.d.ts +19 -0
  287. package/dist/src/opencode/forms.d.ts.map +1 -0
  288. package/dist/src/opencode/forms.js +82 -0
  289. package/dist/src/opencode/forms.js.map +1 -0
  290. package/dist/src/opencode/host.d.ts +179 -0
  291. package/dist/src/opencode/host.d.ts.map +1 -0
  292. package/dist/src/opencode/host.js +34 -0
  293. package/dist/src/opencode/host.js.map +1 -0
  294. package/dist/src/opencode/index.d.ts +15 -0
  295. package/dist/src/opencode/index.d.ts.map +1 -0
  296. package/dist/src/opencode/index.js +9 -0
  297. package/dist/src/opencode/index.js.map +1 -0
  298. package/dist/src/opencode/log.d.ts +9 -0
  299. package/dist/src/opencode/log.d.ts.map +1 -0
  300. package/dist/src/opencode/log.js +15 -0
  301. package/dist/src/opencode/log.js.map +1 -0
  302. package/dist/src/opencode/mcp.d.ts +60 -0
  303. package/dist/src/opencode/mcp.d.ts.map +1 -0
  304. package/dist/src/opencode/mcp.js +258 -0
  305. package/dist/src/opencode/mcp.js.map +1 -0
  306. package/dist/src/opencode/runner.d.ts +40 -0
  307. package/dist/src/opencode/runner.d.ts.map +1 -0
  308. package/dist/src/opencode/runner.js +125 -0
  309. package/dist/src/opencode/runner.js.map +1 -0
  310. package/dist/src/opencode/turn.d.ts +167 -0
  311. package/dist/src/opencode/turn.d.ts.map +1 -0
  312. package/dist/src/opencode/turn.js +761 -0
  313. package/dist/src/opencode/turn.js.map +1 -0
  314. package/dist/src/opencode/turns.d.ts +245 -0
  315. package/dist/src/opencode/turns.d.ts.map +1 -0
  316. package/dist/src/opencode/turns.js +867 -0
  317. package/dist/src/opencode/turns.js.map +1 -0
  318. package/dist/src/personas.d.ts.map +1 -1
  319. package/dist/src/personas.js +4 -1
  320. package/dist/src/personas.js.map +1 -1
  321. package/dist/src/react/ag-ui.d.ts +4 -2
  322. package/dist/src/react/ag-ui.d.ts.map +1 -1
  323. package/dist/src/react/ag-ui.js +2 -2
  324. package/dist/src/react/ag-ui.js.map +1 -1
  325. package/dist/src/react/client.d.ts +1 -1
  326. package/dist/src/react/client.d.ts.map +1 -1
  327. package/dist/src/react/client.js +1 -1
  328. package/dist/src/react/client.js.map +1 -1
  329. package/dist/src/react/core/ag-ui-backend.d.ts +85 -0
  330. package/dist/src/react/core/ag-ui-backend.d.ts.map +1 -0
  331. package/dist/src/react/core/ag-ui-backend.js +409 -0
  332. package/dist/src/react/core/ag-ui-backend.js.map +1 -0
  333. package/dist/src/react/core/agent-chat-transport.d.ts +187 -0
  334. package/dist/src/react/core/agent-chat-transport.d.ts.map +1 -0
  335. package/dist/src/react/core/agent-chat-transport.js +796 -0
  336. package/dist/src/react/core/agent-chat-transport.js.map +1 -0
  337. package/dist/src/react/core/approvals/countdown.d.ts +22 -0
  338. package/dist/src/react/core/approvals/countdown.d.ts.map +1 -0
  339. package/dist/src/react/core/approvals/countdown.js +39 -0
  340. package/dist/src/react/core/approvals/countdown.js.map +1 -0
  341. package/dist/src/react/core/approvals/proposals.d.ts +15 -0
  342. package/dist/src/react/core/approvals/proposals.d.ts.map +1 -0
  343. package/dist/src/react/core/approvals/proposals.js +82 -0
  344. package/dist/src/react/core/approvals/proposals.js.map +1 -0
  345. package/dist/src/react/core/approvals/use-action-proposals.d.ts +10 -0
  346. package/dist/src/react/core/approvals/use-action-proposals.d.ts.map +1 -0
  347. package/dist/src/react/core/approvals/use-action-proposals.js +86 -0
  348. package/dist/src/react/core/approvals/use-action-proposals.js.map +1 -0
  349. package/dist/src/react/core/attachments/files.d.ts +39 -0
  350. package/dist/src/react/core/attachments/files.d.ts.map +1 -0
  351. package/dist/src/react/core/attachments/files.js +89 -0
  352. package/dist/src/react/core/attachments/files.js.map +1 -0
  353. package/dist/src/react/core/attachments/use-attachments.d.ts +106 -0
  354. package/dist/src/react/core/attachments/use-attachments.d.ts.map +1 -0
  355. package/dist/src/react/core/attachments/use-attachments.js +217 -0
  356. package/dist/src/react/core/attachments/use-attachments.js.map +1 -0
  357. package/dist/src/react/core/backend.d.ts +234 -0
  358. package/dist/src/react/core/backend.d.ts.map +1 -0
  359. package/dist/src/react/core/backend.js +21 -0
  360. package/dist/src/react/core/backend.js.map +1 -0
  361. package/dist/src/react/core/background-runs.d.ts +32 -0
  362. package/dist/src/react/core/background-runs.d.ts.map +1 -0
  363. package/dist/src/react/core/background-runs.js +47 -0
  364. package/dist/src/react/core/background-runs.js.map +1 -0
  365. package/dist/src/react/core/catalog/use-agents.d.ts +31 -0
  366. package/dist/src/react/core/catalog/use-agents.d.ts.map +1 -0
  367. package/dist/src/react/core/catalog/use-agents.js +28 -0
  368. package/dist/src/react/core/catalog/use-agents.js.map +1 -0
  369. package/dist/src/react/core/catalog/use-models.d.ts +41 -0
  370. package/dist/src/react/core/catalog/use-models.d.ts.map +1 -0
  371. package/dist/src/react/core/catalog/use-models.js +35 -0
  372. package/dist/src/react/core/catalog/use-models.js.map +1 -0
  373. package/dist/src/react/core/catalog/use-resource.d.ts +12 -0
  374. package/dist/src/react/core/catalog/use-resource.d.ts.map +1 -0
  375. package/dist/src/react/core/catalog/use-resource.js +41 -0
  376. package/dist/src/react/core/catalog/use-resource.js.map +1 -0
  377. package/dist/src/react/core/client-wire.d.ts +14 -0
  378. package/dist/src/react/core/client-wire.d.ts.map +1 -0
  379. package/dist/src/react/core/client-wire.js +2 -0
  380. package/dist/src/react/core/client-wire.js.map +1 -0
  381. package/dist/src/react/core/client.d.ts +222 -0
  382. package/dist/src/react/core/client.d.ts.map +1 -0
  383. package/dist/src/react/core/client.js +435 -0
  384. package/dist/src/react/core/client.js.map +1 -0
  385. package/dist/src/react/core/components/ambient-ui.d.ts +22 -0
  386. package/dist/src/react/core/components/ambient-ui.d.ts.map +1 -0
  387. package/dist/src/react/core/components/ambient-ui.js +30 -0
  388. package/dist/src/react/core/components/ambient-ui.js.map +1 -0
  389. package/dist/src/react/core/components/chat-input.d.ts +44 -0
  390. package/dist/src/react/core/components/chat-input.d.ts.map +1 -0
  391. package/dist/src/react/core/components/chat-input.js +69 -0
  392. package/dist/src/react/core/components/chat-input.js.map +1 -0
  393. package/dist/src/react/core/components/index.d.ts +7 -0
  394. package/dist/src/react/core/components/index.d.ts.map +1 -0
  395. package/dist/src/react/core/components/index.js +7 -0
  396. package/dist/src/react/core/components/index.js.map +1 -0
  397. package/dist/src/react/core/components/message-item.d.ts +101 -0
  398. package/dist/src/react/core/components/message-item.d.ts.map +1 -0
  399. package/dist/src/react/core/components/message-item.js +118 -0
  400. package/dist/src/react/core/components/message-item.js.map +1 -0
  401. package/dist/src/react/core/components/message-list.d.ts +85 -0
  402. package/dist/src/react/core/components/message-list.d.ts.map +1 -0
  403. package/dist/src/react/core/components/message-list.js +45 -0
  404. package/dist/src/react/core/components/message-list.js.map +1 -0
  405. package/dist/src/react/core/components/speech-languages.d.ts +22 -0
  406. package/dist/src/react/core/components/speech-languages.d.ts.map +1 -0
  407. package/dist/src/react/core/components/speech-languages.js +38 -0
  408. package/dist/src/react/core/components/speech-languages.js.map +1 -0
  409. package/dist/src/react/core/components/use-speech-recognition.d.ts +19 -0
  410. package/dist/src/react/core/components/use-speech-recognition.d.ts.map +1 -0
  411. package/dist/src/react/core/components/use-speech-recognition.js +92 -0
  412. package/dist/src/react/core/components/use-speech-recognition.js.map +1 -0
  413. package/dist/src/react/core/composer/index.d.ts +4 -0
  414. package/dist/src/react/core/composer/index.d.ts.map +1 -0
  415. package/dist/src/react/core/composer/index.js +4 -0
  416. package/dist/src/react/core/composer/index.js.map +1 -0
  417. package/dist/src/react/core/composer/model.d.ts +83 -0
  418. package/dist/src/react/core/composer/model.d.ts.map +1 -0
  419. package/dist/src/react/core/composer/model.js +53 -0
  420. package/dist/src/react/core/composer/model.js.map +1 -0
  421. package/dist/src/react/core/composer/skills-source.d.ts +29 -0
  422. package/dist/src/react/core/composer/skills-source.d.ts.map +1 -0
  423. package/dist/src/react/core/composer/skills-source.js +61 -0
  424. package/dist/src/react/core/composer/skills-source.js.map +1 -0
  425. package/dist/src/react/core/composer/use-composer-autocomplete.d.ts +78 -0
  426. package/dist/src/react/core/composer/use-composer-autocomplete.d.ts.map +1 -0
  427. package/dist/src/react/core/composer/use-composer-autocomplete.js +244 -0
  428. package/dist/src/react/core/composer/use-composer-autocomplete.js.map +1 -0
  429. package/dist/src/react/core/config/use-agent-config.d.ts +21 -0
  430. package/dist/src/react/core/config/use-agent-config.d.ts.map +1 -0
  431. package/dist/src/react/core/config/use-agent-config.js +57 -0
  432. package/dist/src/react/core/config/use-agent-config.js.map +1 -0
  433. package/dist/src/react/core/elicitation/answers.d.ts +22 -0
  434. package/dist/src/react/core/elicitation/answers.d.ts.map +1 -0
  435. package/dist/src/react/core/elicitation/answers.js +65 -0
  436. package/dist/src/react/core/elicitation/answers.js.map +1 -0
  437. package/dist/src/react/core/feedback/use-message-feedback.d.ts +32 -0
  438. package/dist/src/react/core/feedback/use-message-feedback.d.ts.map +1 -0
  439. package/dist/src/react/core/feedback/use-message-feedback.js +106 -0
  440. package/dist/src/react/core/feedback/use-message-feedback.js.map +1 -0
  441. package/dist/src/react/core/genui/generative-ui.d.ts +76 -0
  442. package/dist/src/react/core/genui/generative-ui.d.ts.map +1 -0
  443. package/dist/src/react/core/genui/generative-ui.js +210 -0
  444. package/dist/src/react/core/genui/generative-ui.js.map +1 -0
  445. package/dist/src/react/core/genui/index.d.ts +5 -0
  446. package/dist/src/react/core/genui/index.d.ts.map +1 -0
  447. package/dist/src/react/core/genui/index.js +5 -0
  448. package/dist/src/react/core/genui/index.js.map +1 -0
  449. package/dist/src/react/core/genui/json-render.d.ts +54 -0
  450. package/dist/src/react/core/genui/json-render.d.ts.map +1 -0
  451. package/dist/src/react/core/genui/json-render.js +64 -0
  452. package/dist/src/react/core/genui/json-render.js.map +1 -0
  453. package/dist/src/react/core/genui/playwright.d.ts +12 -0
  454. package/dist/src/react/core/genui/playwright.d.ts.map +1 -0
  455. package/dist/src/react/core/genui/playwright.js +141 -0
  456. package/dist/src/react/core/genui/playwright.js.map +1 -0
  457. package/dist/src/react/core/genui/react-registry.d.ts +22 -0
  458. package/dist/src/react/core/genui/react-registry.d.ts.map +1 -0
  459. package/dist/src/react/core/genui/react-registry.js +72 -0
  460. package/dist/src/react/core/genui/react-registry.js.map +1 -0
  461. package/dist/src/react/core/genui/server.d.ts +32 -0
  462. package/dist/src/react/core/genui/server.d.ts.map +1 -0
  463. package/dist/src/react/core/genui/server.js +66 -0
  464. package/dist/src/react/core/genui/server.js.map +1 -0
  465. package/dist/src/react/core/genui/types.d.ts +98 -0
  466. package/dist/src/react/core/genui/types.d.ts.map +1 -0
  467. package/dist/src/react/core/genui/types.js +3 -0
  468. package/dist/src/react/core/genui/types.js.map +1 -0
  469. package/dist/src/react/core/genui/use-generative-ui.d.ts +42 -0
  470. package/dist/src/react/core/genui/use-generative-ui.d.ts.map +1 -0
  471. package/dist/src/react/core/genui/use-generative-ui.js +186 -0
  472. package/dist/src/react/core/genui/use-generative-ui.js.map +1 -0
  473. package/dist/src/react/core/http-error.d.ts +33 -0
  474. package/dist/src/react/core/http-error.d.ts.map +1 -0
  475. package/dist/src/react/core/http-error.js +47 -0
  476. package/dist/src/react/core/http-error.js.map +1 -0
  477. package/dist/src/react/core/index.d.ts +35 -0
  478. package/dist/src/react/core/index.d.ts.map +1 -0
  479. package/dist/src/react/core/index.js +34 -0
  480. package/dist/src/react/core/index.js.map +1 -0
  481. package/dist/src/react/core/markdown/agent-markdown.d.ts +39 -0
  482. package/dist/src/react/core/markdown/agent-markdown.d.ts.map +1 -0
  483. package/dist/src/react/core/markdown/agent-markdown.js +22 -0
  484. package/dist/src/react/core/markdown/agent-markdown.js.map +1 -0
  485. package/dist/src/react/core/markdown/index.d.ts +2 -0
  486. package/dist/src/react/core/markdown/index.d.ts.map +1 -0
  487. package/dist/src/react/core/markdown/index.js +2 -0
  488. package/dist/src/react/core/markdown/index.js.map +1 -0
  489. package/dist/src/react/core/media/index.d.ts +64 -0
  490. package/dist/src/react/core/media/index.d.ts.map +1 -0
  491. package/dist/src/react/core/media/index.js +135 -0
  492. package/dist/src/react/core/media/index.js.map +1 -0
  493. package/dist/src/react/core/media/tus.d.ts +13 -0
  494. package/dist/src/react/core/media/tus.d.ts.map +1 -0
  495. package/dist/src/react/core/media/tus.js +59 -0
  496. package/dist/src/react/core/media/tus.js.map +1 -0
  497. package/dist/src/react/core/presentation/phrasing.d.ts +25 -0
  498. package/dist/src/react/core/presentation/phrasing.d.ts.map +1 -0
  499. package/dist/src/react/core/presentation/phrasing.js +58 -0
  500. package/dist/src/react/core/presentation/phrasing.js.map +1 -0
  501. package/dist/src/react/core/presentation/result-view.d.ts +43 -0
  502. package/dist/src/react/core/presentation/result-view.d.ts.map +1 -0
  503. package/dist/src/react/core/presentation/result-view.js +90 -0
  504. package/dist/src/react/core/presentation/result-view.js.map +1 -0
  505. package/dist/src/react/core/presentation/tool-activity.d.ts +106 -0
  506. package/dist/src/react/core/presentation/tool-activity.d.ts.map +1 -0
  507. package/dist/src/react/core/presentation/tool-activity.js +165 -0
  508. package/dist/src/react/core/presentation/tool-activity.js.map +1 -0
  509. package/dist/src/react/core/presentation/use-tool-catalog.d.ts +39 -0
  510. package/dist/src/react/core/presentation/use-tool-catalog.d.ts.map +1 -0
  511. package/dist/src/react/core/presentation/use-tool-catalog.js +77 -0
  512. package/dist/src/react/core/presentation/use-tool-catalog.js.map +1 -0
  513. package/dist/src/react/core/provider.d.ts +68 -0
  514. package/dist/src/react/core/provider.d.ts.map +1 -0
  515. package/dist/src/react/core/provider.js +61 -0
  516. package/dist/src/react/core/provider.js.map +1 -0
  517. package/dist/src/react/core/queue/model.d.ts +73 -0
  518. package/dist/src/react/core/queue/model.d.ts.map +1 -0
  519. package/dist/src/react/core/queue/model.js +2 -0
  520. package/dist/src/react/core/queue/model.js.map +1 -0
  521. package/dist/src/react/core/quota/use-quota.d.ts +35 -0
  522. package/dist/src/react/core/quota/use-quota.d.ts.map +1 -0
  523. package/dist/src/react/core/quota/use-quota.js +47 -0
  524. package/dist/src/react/core/quota/use-quota.js.map +1 -0
  525. package/dist/src/react/core/reasoning/timing.d.ts +38 -0
  526. package/dist/src/react/core/reasoning/timing.d.ts.map +1 -0
  527. package/dist/src/react/core/reasoning/timing.js +73 -0
  528. package/dist/src/react/core/reasoning/timing.js.map +1 -0
  529. package/dist/src/react/core/run-errors.d.ts +37 -0
  530. package/dist/src/react/core/run-errors.d.ts.map +1 -0
  531. package/dist/src/react/core/run-errors.js +37 -0
  532. package/dist/src/react/core/run-errors.js.map +1 -0
  533. package/dist/src/react/core/stored-message-to-ui-message.d.ts +4 -0
  534. package/dist/src/react/core/stored-message-to-ui-message.d.ts.map +1 -0
  535. package/dist/src/react/core/stored-message-to-ui-message.js +216 -0
  536. package/dist/src/react/core/stored-message-to-ui-message.js.map +1 -0
  537. package/dist/src/react/core/stored-thread-to-ui-messages.d.ts +82 -0
  538. package/dist/src/react/core/stored-thread-to-ui-messages.d.ts.map +1 -0
  539. package/dist/src/react/core/stored-thread-to-ui-messages.js +116 -0
  540. package/dist/src/react/core/stored-thread-to-ui-messages.js.map +1 -0
  541. package/dist/src/react/core/threads/threads-events.d.ts +22 -0
  542. package/dist/src/react/core/threads/threads-events.d.ts.map +1 -0
  543. package/dist/src/react/core/threads/threads-events.js +21 -0
  544. package/dist/src/react/core/threads/threads-events.js.map +1 -0
  545. package/dist/src/react/core/threads/use-threads.d.ts +31 -0
  546. package/dist/src/react/core/threads/use-threads.d.ts.map +1 -0
  547. package/dist/src/react/core/threads/use-threads.js +81 -0
  548. package/dist/src/react/core/threads/use-threads.js.map +1 -0
  549. package/dist/src/react/core/transcript/index.d.ts +4 -0
  550. package/dist/src/react/core/transcript/index.d.ts.map +1 -0
  551. package/dist/src/react/core/transcript/index.js +4 -0
  552. package/dist/src/react/core/transcript/index.js.map +1 -0
  553. package/dist/src/react/core/transcript/model.d.ts +399 -0
  554. package/dist/src/react/core/transcript/model.d.ts.map +1 -0
  555. package/dist/src/react/core/transcript/model.js +725 -0
  556. package/dist/src/react/core/transcript/model.js.map +1 -0
  557. package/dist/src/react/core/transcript/use-chat-transcript.d.ts +254 -0
  558. package/dist/src/react/core/transcript/use-chat-transcript.d.ts.map +1 -0
  559. package/dist/src/react/core/transcript/use-chat-transcript.js +572 -0
  560. package/dist/src/react/core/transcript/use-chat-transcript.js.map +1 -0
  561. package/dist/src/react/core/transcript/use-stick-to-bottom.d.ts +33 -0
  562. package/dist/src/react/core/transcript/use-stick-to-bottom.d.ts.map +1 -0
  563. package/dist/src/react/core/transcript/use-stick-to-bottom.js +48 -0
  564. package/dist/src/react/core/transcript/use-stick-to-bottom.js.map +1 -0
  565. package/dist/src/react/core/use-agent-chat.d.ts +341 -0
  566. package/dist/src/react/core/use-agent-chat.d.ts.map +1 -0
  567. package/dist/src/react/core/use-agent-chat.js +1118 -0
  568. package/dist/src/react/core/use-agent-chat.js.map +1 -0
  569. package/dist/src/react/genui/index.d.ts +1 -7
  570. package/dist/src/react/genui/index.d.ts.map +1 -1
  571. package/dist/src/react/genui/index.js +1 -7
  572. package/dist/src/react/genui/index.js.map +1 -1
  573. package/dist/src/react/genui/json-render.d.ts +1 -5
  574. package/dist/src/react/genui/json-render.d.ts.map +1 -1
  575. package/dist/src/react/genui/json-render.js +1 -5
  576. package/dist/src/react/genui/json-render.js.map +1 -1
  577. package/dist/src/react/genui/server.d.ts +2 -0
  578. package/dist/src/react/genui/server.d.ts.map +1 -0
  579. package/dist/src/react/genui/server.js +2 -0
  580. package/dist/src/react/genui/server.js.map +1 -0
  581. package/dist/src/react/genui/server_playwright.d.ts +2 -0
  582. package/dist/src/react/genui/server_playwright.d.ts.map +1 -0
  583. package/dist/src/react/genui/server_playwright.js +2 -0
  584. package/dist/src/react/genui/server_playwright.js.map +1 -0
  585. package/dist/src/react/index.d.ts +5 -7
  586. package/dist/src/react/index.d.ts.map +1 -1
  587. package/dist/src/react/index.js +5 -7
  588. package/dist/src/react/index.js.map +1 -1
  589. package/dist/src/react/markdown.d.ts +1 -6
  590. package/dist/src/react/markdown.d.ts.map +1 -1
  591. package/dist/src/react/markdown.js +1 -6
  592. package/dist/src/react/markdown.js.map +1 -1
  593. package/dist/src/react/media.d.ts +1 -17
  594. package/dist/src/react/media.d.ts.map +1 -1
  595. package/dist/src/react/media.js +1 -17
  596. package/dist/src/react/media.js.map +1 -1
  597. package/dist/src/refusal.d.ts +3 -0
  598. package/dist/src/refusal.d.ts.map +1 -0
  599. package/dist/src/refusal.js +3 -0
  600. package/dist/src/refusal.js.map +1 -0
  601. package/dist/src/spi/action-proposal-outcome-store.d.ts +43 -0
  602. package/dist/src/spi/action-proposal-outcome-store.d.ts.map +1 -0
  603. package/dist/src/spi/action-proposal-outcome-store.js +2 -0
  604. package/dist/src/spi/action-proposal-outcome-store.js.map +1 -0
  605. package/dist/src/spi/action-proposal-store.d.ts +152 -0
  606. package/dist/src/spi/action-proposal-store.d.ts.map +1 -0
  607. package/dist/src/spi/action-proposal-store.js +2 -0
  608. package/dist/src/spi/action-proposal-store.js.map +1 -0
  609. package/dist/src/spi/action-proposal-worker-store.d.ts +17 -0
  610. package/dist/src/spi/action-proposal-worker-store.d.ts.map +1 -0
  611. package/dist/src/spi/action-proposal-worker-store.js +2 -0
  612. package/dist/src/spi/action-proposal-worker-store.js.map +1 -0
  613. package/dist/src/spi/agent-runner.d.ts +6 -0
  614. package/dist/src/spi/agent-runner.d.ts.map +1 -1
  615. package/dist/src/spi/agent-store.d.ts +5 -0
  616. package/dist/src/spi/agent-store.d.ts.map +1 -1
  617. package/dist/src/spi/agent-store.js.map +1 -1
  618. package/dist/src/spi/approval-policy.d.ts +3 -0
  619. package/dist/src/spi/approval-policy.d.ts.map +1 -1
  620. package/dist/src/spi/approval-policy.js +8 -1
  621. package/dist/src/spi/approval-policy.js.map +1 -1
  622. package/dist/src/spi/background-actor-resolver.d.ts +9 -0
  623. package/dist/src/spi/background-actor-resolver.d.ts.map +1 -0
  624. package/dist/src/spi/background-actor-resolver.js +2 -0
  625. package/dist/src/spi/background-actor-resolver.js.map +1 -0
  626. package/dist/src/spi/chat-queue.d.ts +7 -1
  627. package/dist/src/spi/chat-queue.d.ts.map +1 -1
  628. package/dist/src/spi/chat-queue.js.map +1 -1
  629. package/dist/src/spi/protocol-adapter.d.ts +3 -3
  630. package/dist/src/spi/roles-policy.d.ts +7 -0
  631. package/dist/src/spi/roles-policy.d.ts.map +1 -1
  632. package/dist/src/spi/token-stream-sink.d.ts +9 -0
  633. package/dist/src/spi/token-stream-sink.d.ts.map +1 -1
  634. package/dist/src/spi/token-stream-sink.js.map +1 -1
  635. package/dist/src/spi/tool.d.ts +40 -3
  636. package/dist/src/spi/tool.d.ts.map +1 -1
  637. package/dist/src/sse.d.ts.map +1 -1
  638. package/dist/src/sse.js +6 -0
  639. package/dist/src/sse.js.map +1 -1
  640. package/dist/src/stores/lucid-action-proposal-store.d.ts +55 -0
  641. package/dist/src/stores/lucid-action-proposal-store.d.ts.map +1 -0
  642. package/dist/src/stores/lucid-action-proposal-store.js +465 -0
  643. package/dist/src/stores/lucid-action-proposal-store.js.map +1 -0
  644. package/dist/src/stores/lucid-schema.d.ts +8 -6
  645. package/dist/src/stores/lucid-schema.d.ts.map +1 -1
  646. package/dist/src/stores/lucid-schema.js +61 -6
  647. package/dist/src/stores/lucid-schema.js.map +1 -1
  648. package/dist/src/stores/lucid.d.ts +4 -2
  649. package/dist/src/stores/lucid.d.ts.map +1 -1
  650. package/dist/src/stores/lucid.js +46 -14
  651. package/dist/src/stores/lucid.js.map +1 -1
  652. package/dist/src/stores/sqlite-transactions.d.ts +8 -0
  653. package/dist/src/stores/sqlite-transactions.d.ts.map +1 -0
  654. package/dist/src/stores/sqlite-transactions.js +24 -0
  655. package/dist/src/stores/sqlite-transactions.js.map +1 -0
  656. package/dist/src/stream-events.d.ts +4 -0
  657. package/dist/src/stream-events.d.ts.map +1 -1
  658. package/dist/src/testing/chat-queue-store-contract.d.ts.map +1 -1
  659. package/dist/src/testing/chat-queue-store-contract.js +4 -0
  660. package/dist/src/testing/chat-queue-store-contract.js.map +1 -1
  661. package/dist/src/testing/in-memory-action-proposal-store.d.ts +32 -0
  662. package/dist/src/testing/in-memory-action-proposal-store.d.ts.map +1 -0
  663. package/dist/src/testing/in-memory-action-proposal-store.js +159 -0
  664. package/dist/src/testing/in-memory-action-proposal-store.js.map +1 -0
  665. package/dist/src/testing/in-memory-store.d.ts +9 -1
  666. package/dist/src/testing/in-memory-store.d.ts.map +1 -1
  667. package/dist/src/testing/in-memory-store.js +80 -1
  668. package/dist/src/testing/in-memory-store.js.map +1 -1
  669. package/dist/src/testing/index.d.ts +1 -0
  670. package/dist/src/testing/index.d.ts.map +1 -1
  671. package/dist/src/testing/index.js +1 -0
  672. package/dist/src/testing/index.js.map +1 -1
  673. package/dist/src/tool-discovery.d.ts +1 -1
  674. package/dist/src/tool-discovery.d.ts.map +1 -1
  675. package/dist/src/tool-discovery.js +12 -1
  676. package/dist/src/tool-discovery.js.map +1 -1
  677. package/dist/src/tool-registry.d.ts +28 -1
  678. package/dist/src/tool-registry.d.ts.map +1 -1
  679. package/dist/src/tool-registry.js +85 -3
  680. package/dist/src/tool-registry.js.map +1 -1
  681. package/dist/src/tool-result-presentation.d.ts +12 -0
  682. package/dist/src/tool-result-presentation.d.ts.map +1 -0
  683. package/dist/src/tool-result-presentation.js +44 -0
  684. package/dist/src/tool-result-presentation.js.map +1 -0
  685. package/dist/src/tool-retry.d.ts +0 -11
  686. package/dist/src/tool-retry.d.ts.map +1 -1
  687. package/dist/src/tool-retry.js +5 -1
  688. package/dist/src/tool-retry.js.map +1 -1
  689. package/dist/src/tool-ui.d.ts +4 -1
  690. package/dist/src/tool-ui.d.ts.map +1 -1
  691. package/dist/src/tool-ui.js +32 -4
  692. package/dist/src/tool-ui.js.map +1 -1
  693. package/dist/src/types.d.ts +48 -2
  694. package/dist/src/types.d.ts.map +1 -1
  695. package/dist/src/ui-capabilities.d.ts +2 -0
  696. package/dist/src/ui-capabilities.d.ts.map +1 -0
  697. package/dist/src/ui-capabilities.js +4 -0
  698. package/dist/src/ui-capabilities.js.map +1 -0
  699. package/dist/stubs/database/migrations/add_action_proposal_discovery.stub +24 -0
  700. package/dist/stubs/database/migrations/add_action_proposal_runtime.stub +19 -0
  701. package/dist/stubs/database/migrations/create_agent_tables.stub +3 -3
  702. package/package.json +123 -22
  703. package/skills/agent-governance/SKILL.md +12 -4
  704. package/skills/agent-personas-agents/SKILL.md +2 -1
  705. package/skills/agent-setup/SKILL.md +36 -13
  706. package/skills/agent-testing/SKILL.md +22 -0
  707. package/skills/agent-tools/SKILL.md +54 -9
package/CHANGELOG.md CHANGED
@@ -1,5 +1,101 @@
1
1
  # @adonis-agora/agent
2
2
 
3
+ ## 0.62.0
4
+
5
+ ### Minor Changes
6
+
7
+ - [#303](https://github.com/DavideCarvalho/adonis-agora-agent/pull/303) [`ee0a5c6`](https://github.com/DavideCarvalho/adonis-agora-agent/commit/ee0a5c66f424f22deb4e1d904c64cb5e6701ae07) Thanks [@DavideCarvalho](https://github.com/DavideCarvalho)! - Expose registered agents to personal agents (ChatGPT, Meta AI, a user's own assistant) over A2A 1.0 HTTP+JSON, following PACT (https://openpactprotocol.org). Register `@adonis-agora/agent/a2a_provider` and add `config/a2a.ts` (`defineA2aConfig`, from `@adonis-agora/agent/a2a`).
8
+
9
+ - Per agent: an Agent Card, a synchronous `message:send`, and the task routes as PACT fixes them. Served as server middleware ahead of the router, so authentication happens before the body is read.
10
+ - `authKitPersonalAgents()` authenticates with `@adonis-agora/authkit-server` 0.76+ personal agents: the agent's signed JWT and, when the user delegated, the delegation token. A delegated turn runs as the user's account, with each delegated scope as a `scope:<id>` role.
11
+ - Conversations: `contextId` is bound to one agent and one (personal agent, user), and to the account once a delegated turn ran in it. A repeated `messageId` returns the stored reply. Conversation state lives in two tables created on first use (`store: 'lucid'`), or in memory.
12
+ - `action` calls that park for approval are approved when the delegation grants one of the tool's roles, and rejected otherwise (`actions: 'reject'` rejects all of them). Independent proposals (`actionApprovalMode: 'independent'`) are decided the same way once the run ends, and the turn waits for an approved one to execute before answering; the reply carries what it did as a data part (`{ action: { tool, status, summary, result } }`). Question sets are skipped.
13
+ - Step-up: a personal agent is offered the tools behind scopes it was not delegated but cannot run them. Calling one, or `request_permission`, makes the reply a `TASK_STATE_AUTH_REQUIRED` step-up with a consent link. `RolesPolicy` gains an optional `canOffer` (what the model is offered), separate from `can` (what runs).
14
+ - Replies under delegation carry a signed receipt listing the tools that ran under a delegated scope.
15
+ - `actor` maps the caller to the app's own actor (e.g. a profile instead of the account); turns carry `pageContext.channel = 'a2a'`.
16
+ - `service` plugs in an app's own runtime (an `A2aTurnService` adapter) instead of the agent provider's `AgentService`.
17
+
18
+ **Security:** the agent provider now wraps the configured authorizer with `personalAgentGate`. An actor with the `personal_agent` role reaches only tools that declare one of its roles; tools with no `roles` are out of its reach. Its memory and skill scopes resolve to none, so it never reads or writes what the assistant remembers about the user. Nothing changes for any other actor.
19
+ - A `config/a2a.ts` that exports `undefined` (the surface flagged off) mounts nothing and logs nothing.
20
+
21
+ - [#306](https://github.com/DavideCarvalho/adonis-agora-agent/pull/306) [`2796edd`](https://github.com/DavideCarvalho/adonis-agora-agent/commit/2796edd4b9f998b84cbc12cea779c21cfbe22c77) Thanks [@DavideCarvalho](https://github.com/DavideCarvalho)! - Proposal and presentation hooks, and AG-UI fidelity:
22
+
23
+ - **Text decisions are English by default** (`yes`, `confirm`, `approve`, `ok`, `no`, `cancel`, `reject`, `deny`, `always in this conversation`), and so are the replies. **Behavior change:** Portuguese commands (`sim`, `confirmar`, `cancelar`, …) and replies were the default; pass `actionProposalText: ptBrActionProposalText` to keep them. The new `actionProposalText: { vocabulary, replies }` config replaces the word lists and the reply texts for any other language. A command naming an `#ID` that is not a proposal of the thread (`sim #abc`) is now an ordinary message for the model instead of a `404`.
24
+ - **`actionProposalWorker.onSettled(proposal)`**: called when a proposal's execution settles, so another channel (a WhatsApp bridge) gets the outcome pushed instead of polling. A throwing listener is logged and does not fail the worker.
25
+ - **`onPresentationError(error, { toolName, toolCallId?, runId?, threadId? })`**: now wired for turns and proposal executions. Default: a warning on the app logger (was `console.warn`).
26
+ - **No genui catalog + `uiCapabilities`**: `ctx.emitUi` no longer throws. A component the client declares is drawn; any other one degrades to its `fallbackText` (or is left out when it has none).
27
+ - **AG-UI**: `agora.ui` carries `fallbackText` and `componentVersions`; `agora.approval-requested` carries the proposal `target` (and `confirmation`); a proposal's interrupt has `metadata['agora.target']` and resuming it decides the proposal through the proposal service (it used to hit the parked-call approve and fail with `400`).
28
+ - **AG-UI event rename**: the proposal-decision custom event is now `agora.action-proposal-decision`, like every other `agora.*` event. The old `aviary.action-proposal-decision` is no longer sent — move listeners to the new name.
29
+ - `AgentService.chat` lost an unreachable proposal-decision branch (`chat` never decides by text; `send` does).
30
+
31
+ - [#300](https://github.com/DavideCarvalho/adonis-agora-agent/pull/300) [`6db8d70`](https://github.com/DavideCarvalho/adonis-agora-agent/commit/6db8d70189bb36ba6c4e4f77b585050da8f712d2) Thanks [@DavideCarvalho](https://github.com/DavideCarvalho)! - Support result presentation on functional tools and `@AiTool` classes through the existing journaled UI stream. Add the inferred object form of `defineTool`, preserve raw domain results, and report presentation failures separately so successful actions are not retried because rendering failed. Export Agora-owned optional React static HTML, paginated PNG and PDF renderers and Playwright capture adapter.
32
+
33
+ Remove cross-ecosystem peers: Agora owns its GenUI contracts, React adapters, AG-UI codec, and resumable upload client. All entries build and publish independently of Aviary; compatible wire protocols remain supported.
34
+
35
+ - [#307](https://github.com/DavideCarvalho/adonis-agora-agent/pull/307) [`f3b8aa4`](https://github.com/DavideCarvalho/adonis-agora-agent/commit/f3b8aa496d0b84f52811defd38b1f42ebcd5bf86) Thanks [@DavideCarvalho](https://github.com/DavideCarvalho)! - Requires `@adonis-agora/durable` 0.43.3 or later (peer `>=0.43.3 <1.0.0`). Earlier versions could run one durable run twice at once in a process — a resume landing while the run was still executing — so a tool step could run twice after a very fast approval. 0.43.3 serializes a run's executions per process; the OpenCode durable engine relies on it instead of guarding its steps itself.
36
+
37
+ - [#304](https://github.com/DavideCarvalho/adonis-agora-agent/pull/304) [`5d263b0`](https://github.com/DavideCarvalho/adonis-agora-agent/commit/5d263b0742d8f726c9a40561d2559d2032d16092) Thanks [@DavideCarvalho](https://github.com/DavideCarvalho)! - MCP server and OAuth, with `@adonis-agora/authkit-server`'s `mcp: true`:
38
+
39
+ - The MCP server registers its URL with AuthKit at boot, so `claude mcp add <url>` logs users in with no URL in AuthKit's config.
40
+ - `authKitAuth()` only accepts a token issued **for this server** (its RFC 8707 audience must be the endpoint's URL), as the MCP authorization spec requires. A token for another resource, or with no audience, is refused with `401`. **Behavior change:** clients that do not send `resource` need `authKitAuth({ audience: 'any' })`.
41
+ - `McpAuth.verify(token, context?)` gets `{ resource }`; `anyOf()` passes it on.
42
+ - Tool calls over MCP carry a `toolCallId` and an `idempotencyKey` per `tools/call` (tools that need one to write, ran refused before) and `pageContext.channel = 'mcp'`.
43
+ - `middleware` in `config/mcp.ts`: route middleware for the MCP endpoint (a rate limiter, say); it runs before the bearer check.
44
+ - `stateless: true` in `config/mcp.ts`: every `POST` gets its own transport (no in-memory sessions), for more than one instance behind a load balancer; `GET`/`DELETE` answer `405`.
45
+ - `actions` in `config/mcp.ts` (`'refuse'` by default, or `'execute'`): the provider never passed it to the server, so action tools could not be exposed through `config/mcp.ts`.
46
+ - `instructions` in `config/mcp.ts`: sent to the client in the `initialize` result.
47
+ - `endpoints` in `config/mcp.ts`: more MCP servers in the same app, each a protected resource of its own (path, registry, auth, sessions, RFC 9728 metadata, OAuth registration), inheriting the top-level settings.
48
+ - `tools/list` carries MCP `annotations` (`readOnlyHint` from the tool's kind by default); `describeTool` sets the `title` and the annotations per tool.
49
+ - In stateless mode, `GET`/`DELETE` authenticate first (`401` with the login challenge), then answer `405`.
50
+ - The RFC 9728 metadata route is named (`mcp.oauth_protected_resource`; `metadataRouteName` per endpoint).
51
+ - Generative-UI tools (`ui__show_*`, `ui__render` — any tool whose result is shown elsewhere) are no longer exposed over MCP: there is no screen there, and the model got nothing back.
52
+
53
+ - [#307](https://github.com/DavideCarvalho/adonis-agora-agent/pull/307) [`f3b8aa4`](https://github.com/DavideCarvalho/adonis-agora-agent/commit/f3b8aa496d0b84f52811defd38b1f42ebcd5bf86) Thanks [@DavideCarvalho](https://github.com/DavideCarvalho)! - Engines: `defineConfig({ engine })` runs turns on something other than the library's loop — the routes, stream protocol, store, approvals, questions and queue stay the library's. `model` is optional under an engine, and `durable: true` is refused at boot unless the engine is durable itself. `@adonis-agora/agent/opencode`'s `openCode({ host })` runs turns on OpenCode 2 sessions, and `@adonis-agora/agent/opencode/durable`'s `openCodeDurable({ host })` checkpoints each step as the `agora.agent.opencode.run` workflow (decisions are durable signals; a parked turn survives restarts and catches up on what OpenCode asked meanwhile). OpenCode's events become the native frames and store rows (steps with usage, text, reasoning, nested code-mode calls, permissions as approval cards, forms as elicitations, cancel as `session.interrupt`); the agent's prompt and persona, `approvalPolicy`, skills, memory and regenerate reach the session; the app's tools are served to it over an internal MCP endpoint (`POST <path>/opencode/mcp`: signed per-actor tokens, calls only from a session running a turn of that actor, actions only against an approval the turn granted, `remember` at the actor's scope, `ctx.emitUi` into the turn). `AgentRunInput.hostContext` (and `ChatParams.hostContext`) carries the host's own JSON about a send through the queue (new nullable `host_context` column, healed on boot; never on the wire view) and the durable journal to the engine's host hooks: `onAsk`, `onUi`, `beforeSettle` and `onSettled`. `AgentRunner.runIdFor` lets a runner name its runs; `ToolCallRequest.parentId` records a call made inside another.
54
+
55
+ ### Patch Changes
56
+
57
+ - [#306](https://github.com/DavideCarvalho/adonis-agora-agent/pull/306) [`2796edd`](https://github.com/DavideCarvalho/adonis-agora-agent/commit/2796edd4b9f998b84cbc12cea779c21cfbe22c77) Thanks [@DavideCarvalho](https://github.com/DavideCarvalho)! - Fixes from a docs audit:
58
+
59
+ - `@AiTool` / `static tool` classes keep their `replacementKey` (it only worked with `defineTool`).
60
+ - `POST <path>/chat` answers malformed `uiCapabilities` with `400 invalid_ui_capabilities` instead of a `500`.
61
+ - A refused proposal decision over AG-UI (text or resume) answers its status (`403`/`404`) instead of a `500`.
62
+ - `UiCapabilities` / `validateUiCapabilities` have one definition; both the root and `/genui` entries still export them.
63
+ - Corrected stale comments (`genui` needs no extra peer, the default authorizer and actor resolver are not fail-closed, the migrations `configure` publishes) and removed a committed `.orig` file.
64
+
65
+ ## 0.61.0
66
+
67
+ ### Minor Changes
68
+
69
+ - [#274](https://github.com/DavideCarvalho/adonis-agora-agent/pull/274) [`7e8c6b7`](https://github.com/DavideCarvalho/adonis-agora-agent/commit/7e8c6b78db25e455be3d654e6784ae7938833122) Thanks [@DavideCarvalho](https://github.com/DavideCarvalho)! - Add optional action preflight before approval and execution, with denied and completed outcomes, resolved approval confirmation, durable replay persistence, and functional/class authoring support.
70
+
71
+ - [#275](https://github.com/DavideCarvalho/adonis-agora-agent/pull/275) [`c1fdeb6`](https://github.com/DavideCarvalho/adonis-agora-agent/commit/c1fdeb65dd6210a8e8244f09bcbd4cf7bcd3990d) Thanks [@DavideCarvalho](https://github.com/DavideCarvalho)! - Add the optional ActionProposalStore capability with scoped replay-safe snapshots, atomic decisions and queued execution work, and fenced recoverable leases in memory and Lucid. This is the persistence foundation; independent conversation execution is not enabled yet.
72
+
73
+ Existing hosts using `autoCreateTables: false` must add a new migration that invokes `createAgentTables` on the chosen connection before using proposals. An already-recorded older migration will not run again.
74
+
75
+ - [#278](https://github.com/DavideCarvalho/adonis-agora-agent/pull/278) [`7f2ba63`](https://github.com/DavideCarvalho/adonis-agora-agent/commit/7f2ba6306e742627084193042e0d6be52c37fab6) Thanks [@DavideCarvalho](https://github.com/DavideCarvalho)! - Add indexed worker-only proposal discovery to Lucid: claim queued or expired-lease work across
76
+ scopes and expire due pending cards in bounded batches. Every proposal mutation keeps discovery
77
+ metadata in the same fenced write. Mirror the shared worker-store conformance contract and add
78
+ bounded, version-fenced backfill for existing proposals after additive schema migration.
79
+
80
+ Stop old writers before applying the forward migration and repeating backfill batches, then start
81
+ the new workers. This capability does not itself enable the independent conversation runtime.
82
+
83
+ - [#279](https://github.com/DavideCarvalho/adonis-agora-agent/pull/279) [`0f5a1c1`](https://github.com/DavideCarvalho/adonis-agora-agent/commit/0f5a1c10a830e7de10b16ec0d31b461ce8b1aa10) Thanks [@DavideCarvalho](https://github.com/DavideCarvalho)! - Match Aviary's opt-in independent approval runtime: pending cards release the chat turn, scoped
84
+ channel/text decisions queue actions under fresh requester authorization, atomic replacement
85
+ supersedes pending proposals, and fenced workers admit terminal facts/UI into history.
86
+ Remembered grants derive from terminal proposal state; existing blocking journals retain their
87
+ behavior. Include native SDK polling/decisions, component capability negotiation and text fallback.
88
+
89
+ Ship additive Lucid runtime migration and configure inventory. Apply it and the proposal discovery
90
+ backfill before enabling workers. External effects remain at least once and require the stable
91
+ tool-context idempotency key. See docs/independent-approvals.md for setup and rollout.
92
+
93
+ - [#276](https://github.com/DavideCarvalho/adonis-agora-agent/pull/276) [`92450af`](https://github.com/DavideCarvalho/adonis-agora-agent/commit/92450af57e8339e15630d7a70fccfee9b1e64b61) Thanks [@DavideCarvalho](https://github.com/DavideCarvalho)! - Add opt-in trusted preparation for independent action proposals. Preserve original JSON separately
94
+ from the approved normalized input and immutable execution context, and reject schema or hook
95
+ input drift before effects. Existing blocking preparation and invocation retain their behavior.
96
+ Expose privileged worker discovery with a reference implementation in memory; SQL discovery and
97
+ the independent conversation runtime are separate follow-up work.
98
+
3
99
  ## 0.60.1
4
100
 
5
101
  ### Patch Changes
package/README.md CHANGED
@@ -17,6 +17,13 @@ The package is two things layered on top of each other:
17
17
  `read` tools auto-execute, `action` tools gate on human approval (HITL), and `agent` tools delegate
18
18
  to another named agent.
19
19
 
20
+ ## Component registries and server rendering
21
+
22
+ Tools support a `present` hook in both functional and decorated class forms. Register custom components per app, share React renderers between web screens and static exports, and generate paginated PNG/PDF tables and charts for your own delivery adapters.
23
+
24
+ See the [component rendering guide](./docs/authoring/component-rendering.mdx) for complete examples, schemas, text fallbacks, and capture configuration.
25
+
26
+
20
27
  ## Install
21
28
 
22
29
  ```sh
@@ -43,7 +50,7 @@ else is an **optional peer**, imported lazily only when configured:
43
50
  | `@adonis-agora/telescope` (`^0.4.0`) | the Telescope watcher extension (`@adonis-agora/agent/telescope`) |
44
51
  | `@qdrant/js-client-rest` (`^1.11.0`) | `retrievers.qdrant({...})` |
45
52
  | `node-sql-parser` (`^5.3.0`) | the governed `dataTool` (`@adonis-agora/agent/data`) |
46
- | `react` (`^18` / `^19`) + `@dudousxd/nestjs-agent-react` (`>=0.28`, with `@ai-sdk/react` and `ai`) | `AgentProvider` / `useAgentChat` (`@adonis-agora/agent/react`) |
53
+ | `react` (`^18` / `^19`), `@ai-sdk/react` and `ai` | `AgentProvider` / `useAgentChat` (`@adonis-agora/agent/react`) |
47
54
 
48
55
  ## Configure
49
56
 
@@ -83,7 +90,7 @@ message queue, approvals, attachments, threads), with the session cookie and shi
83
90
  already wired:
84
91
 
85
92
  ```tsx
86
- // npm i @dudousxd/nestjs-agent-react @ai-sdk/react ai
93
+ // npm i @ai-sdk/react ai
87
94
  import { AgentProvider, useAgentChat } from '@adonis-agora/agent/react'
88
95
 
89
96
  export default function ChatPage() {
@@ -109,9 +116,8 @@ function Chat() {
109
116
  }
110
117
  ```
111
118
 
112
- The hooks are [`@dudousxd/nestjs-agent-react`](https://www.npmjs.com/package/@dudousxd/nestjs-agent-react)
113
- re-exported (an optional peer): this package speaks the same wire contract as `@dudousxd/nestjs-agent`,
114
- so one React client serves both. Without React, the framework-free stream client:
119
+ The hooks ship inside Agora. Its protocol remains compatible with Aviary, but installation and
120
+ releases are independent. Without React, use the framework-free stream client:
115
121
 
116
122
  ```ts
117
123
  import { createAgentChatClient } from '@adonis-agora/agent/client'
@@ -204,8 +210,7 @@ blocked tool result is withheld and the turn goes on; a blocked answer or tool c
204
210
  `OutputRejectedError`. `guardrails.wrapTool(name, handler)` restores placeholders into a tool's
205
211
  arguments and runs the `tool_args` rules on them. The output processor declares `incremental`, so the
206
212
  answer keeps streaming. The detectors (`detectPii` with Luhn/CPF/CNPJ/IBAN checks, `detectSecrets`,
207
- `scoreInjection`, `scoreToolText`) and `scan` work on their own. Same code as
208
- `@dudousxd/nestjs-agent-core/guardrails`, which also carries the raw OpenAI/Anthropic stream guard.
213
+ `scoreInjection`, `scoreToolText`) and `scan` work on their own. The guardrail implementation ships locally in Agora; it does not require an Aviary core package.
209
214
 
210
215
  ### Framework-agnostic core (no AdonisJS)
211
216
 
@@ -13,11 +13,13 @@ import type Configure from '@adonisjs/core/commands/configure';
13
13
  * runtime scan when the barrel is absent);
14
14
  * 4. publishes `config/agent.ts`;
15
15
  * 5. publishes `config/mcp.ts` (the MCP endpoint config; the MCP provider is separate);
16
- * 6. publishes the Lucid migration for the six agent tables (run `node ace migration:run`; delete it
17
- * if you only use the in-memory store). It delegates to `createAgentTables`, so it is idempotent
18
- * and safe to run against a database the library already auto-created;
19
- * 7. publishes the pgvector migration for the RAG chunk table (Postgres + pgvector only; delete it
20
- * unless you use `retrievers.pgvector({...})`).
16
+ * 6. publishes the Lucid migrations for the agent tables — the base tables plus the two forward-only
17
+ * action-proposal upgrades (run `node ace migration:run`; delete them if you only use the
18
+ * in-memory store). They delegate to `createAgentTables`, so they are idempotent and safe to run
19
+ * against a database the library already auto-created;
20
+ * 7. publishes the Postgres migrations for the RAG chunk table (pgvector; delete it unless you use
21
+ * `retrievers.pgvector({...})`) and the document-tree tables (delete it unless you use
22
+ * `PgDocumentTreeStore`).
21
23
  */
22
24
  export declare function configure(command: Configure): Promise<void>;
23
25
  //# sourceMappingURL=configure.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"configure.d.ts","sourceRoot":"","sources":["../configure.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,SAAS,MAAM,mCAAmC,CAAC;AAG/D;;;;;;;;;;;;;;;;;;;GAmBG;AACH,wBAAsB,SAAS,CAAC,OAAO,EAAE,SAAS,iBAejD"}
1
+ {"version":3,"file":"configure.d.ts","sourceRoot":"","sources":["../configure.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,SAAS,MAAM,mCAAmC,CAAC;AAG/D;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,wBAAsB,SAAS,CAAC,OAAO,EAAE,SAAS,iBAyBjD"}
package/dist/configure.js CHANGED
@@ -13,11 +13,13 @@ import { stubsRoot } from './stubs/main.js';
13
13
  * runtime scan when the barrel is absent);
14
14
  * 4. publishes `config/agent.ts`;
15
15
  * 5. publishes `config/mcp.ts` (the MCP endpoint config; the MCP provider is separate);
16
- * 6. publishes the Lucid migration for the six agent tables (run `node ace migration:run`; delete it
17
- * if you only use the in-memory store). It delegates to `createAgentTables`, so it is idempotent
18
- * and safe to run against a database the library already auto-created;
19
- * 7. publishes the pgvector migration for the RAG chunk table (Postgres + pgvector only; delete it
20
- * unless you use `retrievers.pgvector({...})`).
16
+ * 6. publishes the Lucid migrations for the agent tables — the base tables plus the two forward-only
17
+ * action-proposal upgrades (run `node ace migration:run`; delete them if you only use the
18
+ * in-memory store). They delegate to `createAgentTables`, so they are idempotent and safe to run
19
+ * against a database the library already auto-created;
20
+ * 7. publishes the Postgres migrations for the RAG chunk table (pgvector; delete it unless you use
21
+ * `retrievers.pgvector({...})`) and the document-tree tables (delete it unless you use
22
+ * `PgDocumentTreeStore`).
21
23
  */
22
24
  export async function configure(command) {
23
25
  const codemods = await command.createCodemods();
@@ -30,6 +32,8 @@ export async function configure(command) {
30
32
  await codemods.makeUsingStub(stubsRoot, 'config/agent.stub', {});
31
33
  await codemods.makeUsingStub(stubsRoot, 'config/mcp.stub', {});
32
34
  await codemods.makeUsingStub(stubsRoot, 'database/migrations/create_agent_tables.stub', {});
35
+ await codemods.makeUsingStub(stubsRoot, 'database/migrations/add_action_proposal_discovery.stub', {});
36
+ await codemods.makeUsingStub(stubsRoot, 'database/migrations/add_action_proposal_runtime.stub', {});
33
37
  await codemods.makeUsingStub(stubsRoot, 'database/migrations/create_agent_rag_chunks.stub', {});
34
38
  await codemods.makeUsingStub(stubsRoot, 'database/migrations/create_agent_rag_trees.stub', {});
35
39
  }
@@ -1 +1 @@
1
- {"version":3,"file":"configure.js","sourceRoot":"","sources":["../configure.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAE5C;;;;;;;;;;;;;;;;;;;GAmBG;AACH,MAAM,CAAC,KAAK,UAAU,SAAS,CAAC,OAAkB;IAChD,MAAM,QAAQ,GAAG,MAAM,OAAO,CAAC,cAAc,EAAE,CAAC;IAEhD,MAAM,QAAQ,CAAC,YAAY,CAAC,CAAC,MAAM,EAAE,EAAE;QACrC,MAAM,CAAC,WAAW,CAAC,oCAAoC,CAAC,CAAC;QACzD,MAAM,CAAC,WAAW,CAAC,wCAAwC,CAAC,CAAC;QAC7D,mGAAmG;QACnG,MAAM,CAAC,gBAAgB,CAAC,MAAM,EAAE,iCAAiC,CAAC,CAAC;IACrE,CAAC,CAAC,CAAC;IAEH,MAAM,QAAQ,CAAC,aAAa,CAAC,SAAS,EAAE,mBAAmB,EAAE,EAAE,CAAC,CAAC;IACjE,MAAM,QAAQ,CAAC,aAAa,CAAC,SAAS,EAAE,iBAAiB,EAAE,EAAE,CAAC,CAAC;IAC/D,MAAM,QAAQ,CAAC,aAAa,CAAC,SAAS,EAAE,8CAA8C,EAAE,EAAE,CAAC,CAAC;IAC5F,MAAM,QAAQ,CAAC,aAAa,CAAC,SAAS,EAAE,kDAAkD,EAAE,EAAE,CAAC,CAAC;IAChG,MAAM,QAAQ,CAAC,aAAa,CAAC,SAAS,EAAE,iDAAiD,EAAE,EAAE,CAAC,CAAC;AACjG,CAAC"}
1
+ {"version":3,"file":"configure.js","sourceRoot":"","sources":["../configure.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAE5C;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,MAAM,CAAC,KAAK,UAAU,SAAS,CAAC,OAAkB;IAChD,MAAM,QAAQ,GAAG,MAAM,OAAO,CAAC,cAAc,EAAE,CAAC;IAEhD,MAAM,QAAQ,CAAC,YAAY,CAAC,CAAC,MAAM,EAAE,EAAE;QACrC,MAAM,CAAC,WAAW,CAAC,oCAAoC,CAAC,CAAC;QACzD,MAAM,CAAC,WAAW,CAAC,wCAAwC,CAAC,CAAC;QAC7D,mGAAmG;QACnG,MAAM,CAAC,gBAAgB,CAAC,MAAM,EAAE,iCAAiC,CAAC,CAAC;IACrE,CAAC,CAAC,CAAC;IAEH,MAAM,QAAQ,CAAC,aAAa,CAAC,SAAS,EAAE,mBAAmB,EAAE,EAAE,CAAC,CAAC;IACjE,MAAM,QAAQ,CAAC,aAAa,CAAC,SAAS,EAAE,iBAAiB,EAAE,EAAE,CAAC,CAAC;IAC/D,MAAM,QAAQ,CAAC,aAAa,CAAC,SAAS,EAAE,8CAA8C,EAAE,EAAE,CAAC,CAAC;IAC5F,MAAM,QAAQ,CAAC,aAAa,CAC1B,SAAS,EACT,wDAAwD,EACxD,EAAE,CACH,CAAC;IACF,MAAM,QAAQ,CAAC,aAAa,CAC1B,SAAS,EACT,sDAAsD,EACtD,EAAE,CACH,CAAC;IACF,MAAM,QAAQ,CAAC,aAAa,CAAC,SAAS,EAAE,kDAAkD,EAAE,EAAE,CAAC,CAAC;IAChG,MAAM,QAAQ,CAAC,aAAa,CAAC,SAAS,EAAE,iDAAiD,EAAE,EAAE,CAAC,CAAC;AACjG,CAAC"}
@@ -0,0 +1,14 @@
1
+ import type { ApplicationService } from '@adonisjs/core/types';
2
+ export default class A2aProvider {
3
+ #private;
4
+ protected app: ApplicationService;
5
+ constructor(app: ApplicationService);
6
+ boot(): Promise<void>;
7
+ /**
8
+ * Register `request_permission` in every process — a queue or durable worker that replays a turn
9
+ * which called it needs the tool as much as the web process that started it.
10
+ */
11
+ ready(): Promise<void>;
12
+ shutdown(): Promise<void>;
13
+ }
14
+ //# sourceMappingURL=a2a_provider.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"a2a_provider.d.ts","sourceRoot":"","sources":["../../providers/a2a_provider.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAC;AAyC/D,MAAM,CAAC,OAAO,OAAO,WAAW;;IAClB,SAAS,CAAC,GAAG,EAAE,kBAAkB;IAA7C,YAAsB,GAAG,EAAE,kBAAkB,EAAI;IAE3C,IAAI,kBA2BT;IAED;;;OAGG;IACG,KAAK,kBASV;IAEK,QAAQ,kBAEb;CAiEF"}
@@ -0,0 +1,136 @@
1
+ import { resolveA2aAuth } from '../src/a2a/auth.js';
2
+ import { createA2aHandler } from '../src/a2a/handler.js';
3
+ import { registerRequestPermissionTool } from '../src/a2a/permission-tool.js';
4
+ import { setA2aHandler } from '../src/a2a/runtime.js';
5
+ import { ensureA2aTables, InMemoryA2aStore, LucidA2aStore, } from '../src/a2a/store.js';
6
+ import { AgentService } from '../src/agent-service.js';
7
+ import { ToolRegistry } from '../src/tool-registry.js';
8
+ /**
9
+ * Exposes registered agents to personal agents over A2A 1.0 (HTTP+JSON) — the transport of PACT.
10
+ * Reads `config/a2a.ts` and answers, for each configured agent:
11
+ *
12
+ * - `GET /{path}/{agent}/.well-known/agent-card.json` — the Agent Card (public).
13
+ * - `POST /{path}/{agent}/message:send` — a synchronous turn (identity, and delegation when sent).
14
+ * - `GET /{path}/{agent}/tasks`, `GET …/tasks/{id}`, `POST …/tasks/{id}:cancel` — as PACT §2.2 fixes.
15
+ *
16
+ * Mounted as SERVER middleware, ahead of the router: A2A requests never reach the bodyparser,
17
+ * session or CSRF (see `src/a2a/server_middleware.ts`). Everything is resolved on the first A2A
18
+ * request, so this provider can sit anywhere in `adonisrc.ts`.
19
+ */
20
+ function normalizePath(path) {
21
+ return (path ?? 'a2a').replace(/^\/+|\/+$/g, '');
22
+ }
23
+ /**
24
+ * The A2A config, or `undefined` when the surface is off. A `config/a2a.ts` whose default export
25
+ * is `undefined` (feature-flagged off) reaches the config store as its module namespace
26
+ * (`{ default: undefined }`), not as `undefined`.
27
+ */
28
+ function a2aConfigOf(app) {
29
+ const config = app.config.get('a2a', undefined);
30
+ return config && typeof config === 'object' && config.agents && config.auth ? config : undefined;
31
+ }
32
+ export default class A2aProvider {
33
+ app;
34
+ constructor(app) {
35
+ this.app = app;
36
+ }
37
+ async boot() {
38
+ const config = a2aConfigOf(this.app);
39
+ if (!config)
40
+ return;
41
+ const server = await this.app.container.make('server');
42
+ server.use([() => import('../src/a2a/server_middleware.js')]);
43
+ // Only A2A traffic ever touches the A2A runtime: a broken auth driver or database must not
44
+ // turn every route of the app into a 500.
45
+ const prefix = `/${normalizePath(config.path)}/`;
46
+ const isA2a = (url) => url.startsWith(prefix) ||
47
+ (config.rootCard !== undefined && url === '/.well-known/agent-card.json');
48
+ // Built on the first A2A request: the agent provider binds `AgentService` in its own boot, and
49
+ // the auth driver may need a fully booted app. A failed build is retried on the next one.
50
+ let built = null;
51
+ setA2aHandler(async (ctx) => {
52
+ if (!isA2a((ctx.request.url() ?? '').split('?')[0] ?? ''))
53
+ return false;
54
+ if (built === null) {
55
+ built = this.#build(config);
56
+ built.catch(() => {
57
+ built = null;
58
+ });
59
+ }
60
+ return (await built)(ctx);
61
+ });
62
+ }
63
+ /**
64
+ * Register `request_permission` in every process — a queue or durable worker that replays a turn
65
+ * which called it needs the tool as much as the web process that started it.
66
+ */
67
+ async ready() {
68
+ const config = a2aConfigOf(this.app);
69
+ if (!config)
70
+ return;
71
+ try {
72
+ await this.#registerPermissionTool(config);
73
+ }
74
+ catch (error) {
75
+ const logger = await this.app.container.make('logger');
76
+ logger.warn({ err: error }, 'a2a: could not register request_permission yet');
77
+ }
78
+ }
79
+ async shutdown() {
80
+ setA2aHandler(null);
81
+ }
82
+ #permissionToolRegistered = false;
83
+ async #registerPermissionTool(config) {
84
+ // With its own runtime the app registers `request_permission` where ITS tools live
85
+ // (`registerRequestPermissionTool`) — the shared registry may be another surface's.
86
+ if (this.#permissionToolRegistered || config.service !== undefined)
87
+ return;
88
+ const auth = await resolveA2aAuth(config.auth, { app: this.app });
89
+ const scopes = await auth.delegableScopes();
90
+ if (Object.keys(scopes).length > 0) {
91
+ registerRequestPermissionTool(await this.app.container.make(ToolRegistry), scopes);
92
+ }
93
+ this.#permissionToolRegistered = true;
94
+ }
95
+ async #build(config) {
96
+ const registry = await this.app.container.make(ToolRegistry);
97
+ const service = config.service === undefined
98
+ ? await this.app.container.make(AgentService)
99
+ : typeof config.service === 'function'
100
+ ? await config.service({ app: this.app })
101
+ : config.service;
102
+ const auth = await resolveA2aAuth(config.auth, { app: this.app });
103
+ await this.#registerPermissionTool(config);
104
+ const brands = new Map(Object.entries(config.agents).map(([id, agent]) => [
105
+ id,
106
+ { id, agentName: agent.agent ?? id, card: agent.card },
107
+ ]));
108
+ return createA2aHandler({
109
+ path: normalizePath(config.path),
110
+ ...(config.baseUrl !== undefined ? { baseUrl: config.baseUrl } : {}),
111
+ brands,
112
+ ...(config.rootCard !== undefined ? { rootCardBrand: config.rootCard } : {}),
113
+ auth,
114
+ store: await this.#store(config),
115
+ service,
116
+ registry,
117
+ actions: config.actions ?? 'approve-delegated',
118
+ timeoutMs: config.timeoutMs ?? 120_000,
119
+ maxBodyBytes: config.maxBodyBytes ?? 1024 * 1024,
120
+ ...(config.roles !== undefined ? { roles: config.roles } : {}),
121
+ ...(config.actor !== undefined ? { actor: config.actor } : {}),
122
+ });
123
+ }
124
+ async #store(config) {
125
+ const store = config.store ?? 'lucid';
126
+ if (typeof store === 'object')
127
+ return store;
128
+ if (store === 'memory')
129
+ return new InMemoryA2aStore();
130
+ const db = (await this.app.container.make('lucid.db'));
131
+ const connection = db.connection(config.connection);
132
+ await ensureA2aTables(connection);
133
+ return new LucidA2aStore(connection);
134
+ }
135
+ }
136
+ //# sourceMappingURL=a2a_provider.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"a2a_provider.js","sourceRoot":"","sources":["../../providers/a2a_provider.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"agent_provider.d.ts","sourceRoot":"","sources":["../../providers/agent_provider.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAC;AAgM/D;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AACH,MAAM,CAAC,OAAO,OAAO,aAAa;;IAQpB,SAAS,CAAC,GAAG,EAAE,kBAAkB;IAA7C,YAAsB,GAAG,EAAE,kBAAkB,EAAI;IAEjD,QAAQ,SAcP;IAEK,IAAI,kBAgKT;IAED;;;;;;;;;;;;;;OAcG;IACG,KAAK,kBAgBV;IAEK,QAAQ,kBAUb;CAgiDF"}
1
+ {"version":3,"file":"agent_provider.d.ts","sourceRoot":"","sources":["../../providers/agent_provider.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAC;AA8M/D;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AACH,MAAM,CAAC,OAAO,OAAO,aAAa;;IAWpB,SAAS,CAAC,GAAG,EAAE,kBAAkB;IAA7C,YAAsB,GAAG,EAAE,kBAAkB,EAAI;IAEjD,QAAQ,SAcP;IAEK,IAAI,kBA+PT;IAED;;;;;;;;;;;;;;OAcG;IACG,KAAK,kBAiBV;IAEK,QAAQ,kBAcb;CAooDF"}