@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
@@ -0,0 +1,572 @@
1
+ import { useCallback, useEffect, useRef, useState } from 'react';
2
+ import { attachmentFile } from '../attachments/files.js';
3
+ import { requireBackendMethod } from '../backend.js';
4
+ import { useAgentBackend } from '../provider.js';
5
+ import { buildTranscriptBlocks, describeTimestamp, describeUsage, extractMessageText, } from './model.js';
6
+ import { useStickToBottom } from './use-stick-to-bottom.js';
7
+ /** Most-recent messages mounted up front; older ones wait behind `window.loadEarlier`. */
8
+ const DEFAULT_VISIBLE_COUNT = 50;
9
+ const DEFAULT_LOAD_EARLIER_STEP = 50;
10
+ const DEFAULT_COPY_RESET_MS = 1500;
11
+ /**
12
+ * The model behind a chat transcript: messages normalized into items with their parts grouped into
13
+ * runs, per-message derived values (copyable text, usage labels, relative time), each action as a
14
+ * state machine rather than a button, list windowing, and stick-to-bottom. It renders nothing and
15
+ * names no class — `MessageList`/`MessageItem` are one renderer over it, and an app with its own
16
+ * design system writes another without reimplementing any of this.
17
+ */
18
+ export function useChatTranscript(options) {
19
+ const { messages, status, initialVisibleCount = DEFAULT_VISIBLE_COUNT, followUps, stickToBottomThreshold, } = options;
20
+ const latest = useRef(options);
21
+ latest.current = options;
22
+ const [visibleCount, setVisibleCount] = useState(initialVisibleCount);
23
+ const [stopRequested, setStopRequested] = useState(false);
24
+ // A reconnecting stream is still the turn in flight, and its message is still being written.
25
+ const isStreaming = status === 'streaming' || status === 'reconnecting';
26
+ const isBusy = status === 'submitted' || isStreaming;
27
+ const isEmpty = messages.length === 0;
28
+ // A settled turn clears a pending stop, so the next turn's button starts from rest.
29
+ useEffect(() => {
30
+ if (!isBusy) {
31
+ setStopRequested(false);
32
+ }
33
+ }, [isBusy]);
34
+ const lastMessage = messages.at(-1);
35
+ const lastAssistant = findLastAssistant(messages);
36
+ const streamingMessageId = isStreaming ? (lastAssistant?.id ?? null) : null;
37
+ const visibleStart = Math.max(0, messages.length - visibleCount);
38
+ const items = useTranscriptItems({
39
+ messages,
40
+ visibleStart,
41
+ streamingMessageId,
42
+ options,
43
+ });
44
+ const stop = useCallback(() => {
45
+ const current = latest.current;
46
+ if (current.status !== 'submitted' &&
47
+ current.status !== 'streaming' &&
48
+ current.status !== 'reconnecting') {
49
+ return;
50
+ }
51
+ setStopRequested(true);
52
+ void current.onStop?.();
53
+ }, []);
54
+ const loadEarlier = useCallback(() => setVisibleCount((count) => count + (latest.current.loadEarlierStep ?? DEFAULT_LOAD_EARLIER_STEP)), []);
55
+ const showAll = useCallback(() => setVisibleCount(latest.current.messages.length), []);
56
+ const scroll = useStickToBottom({
57
+ contentKey: contentSignature(messages),
58
+ ...(stickToBottomThreshold !== undefined ? { threshold: stickToBottomThreshold } : {}),
59
+ });
60
+ const showTypingIndicator = isBusy && lastMessage?.role !== 'assistant';
61
+ const queued = useQueuedItems(options.queue ?? null, options.readOnly === true);
62
+ return {
63
+ items,
64
+ status,
65
+ isEmpty,
66
+ isBusy,
67
+ isStreaming,
68
+ showEmptyState: isEmpty && status === 'ready',
69
+ showTypingIndicator,
70
+ showFollowUps: status === 'ready' &&
71
+ !showTypingIndicator &&
72
+ lastMessage?.role === 'assistant' &&
73
+ !!followUps &&
74
+ followUps.length > 0,
75
+ lastAssistantId: lastAssistant?.id ?? null,
76
+ window: {
77
+ visibleCount,
78
+ hiddenCount: visibleStart,
79
+ canLoadEarlier: visibleStart > 0,
80
+ loadEarlier,
81
+ showAll,
82
+ },
83
+ scroll,
84
+ stop: {
85
+ available: isBusy && options.readOnly !== true && options.onStop !== undefined,
86
+ isStopping: stopRequested,
87
+ stop,
88
+ },
89
+ queued,
90
+ queuePaused: options.queue?.paused ?? null,
91
+ };
92
+ }
93
+ /** The queue as transcript items. `remove` is cached per id, like every other item action. */
94
+ function useQueuedItems(queue, readOnly) {
95
+ const latestQueue = useRef(queue);
96
+ latestQueue.current = queue;
97
+ const removers = useRef(new Map());
98
+ const removerFor = useCallback((id) => {
99
+ let remover = removers.current.get(id);
100
+ if (remover === undefined) {
101
+ remover = () => {
102
+ void latestQueue.current?.remove?.(id);
103
+ };
104
+ removers.current.set(id, remover);
105
+ }
106
+ return remover;
107
+ }, []);
108
+ if (queue === null || queue === undefined) {
109
+ return [];
110
+ }
111
+ return queue.items.map((message, position) => {
112
+ const state = message.state === 'sending' ? 'sending' : queue.paused !== null ? 'paused' : 'queued';
113
+ return {
114
+ id: message.id,
115
+ role: 'user',
116
+ text: message.text,
117
+ files: (message.files ?? message.attachments.map(attachmentFile)).map((file) => ({
118
+ ...file,
119
+ isImage: file.kind === 'image',
120
+ })),
121
+ state,
122
+ position,
123
+ isNext: position === 0,
124
+ interrupt: message.interrupt,
125
+ remove: {
126
+ available: !readOnly && state !== 'sending' && queue.remove !== undefined,
127
+ run: removerFor(message.id),
128
+ },
129
+ };
130
+ });
131
+ }
132
+ /**
133
+ * The single-message half of {@link useChatTranscript}, for a renderer that owns the list itself.
134
+ * `regeneratable` applies directly here: one assistant message is trivially the last one.
135
+ */
136
+ export function useTranscriptItem(options) {
137
+ const { message, isStreaming = false } = options;
138
+ const messagesRef = useRef([message]);
139
+ // A fresh array each render would re-key nothing but does churn the items memo; the identity is
140
+ // kept stable while the message itself is unchanged.
141
+ if (messagesRef.current[0] !== message) {
142
+ messagesRef.current = [message];
143
+ }
144
+ const items = useTranscriptItems({
145
+ messages: messagesRef.current,
146
+ visibleStart: 0,
147
+ streamingMessageId: isStreaming ? message.id : null,
148
+ options,
149
+ });
150
+ // One message in, exactly one item out.
151
+ return items[0];
152
+ }
153
+ /**
154
+ * All per-message UI state lives here, keyed by message id, because the number of messages is not
155
+ * known at render time — a hook per item would break the rules of hooks the moment a turn arrives.
156
+ * Each item's callbacks are cached per id so a controlled `<textarea>`'s ref identity survives every
157
+ * keystroke; without that, React detaches and re-attaches the node on each render and the focus
158
+ * effect drags the caret back to the end mid-edit.
159
+ */
160
+ function useTranscriptItems({ messages, visibleStart, streamingMessageId, options, }) {
161
+ const [drafts, setDrafts] = useState(() => new Map());
162
+ const [copied, setCopied] = useState(() => new Set());
163
+ const [openReasoning, setOpenReasoning] = useState(() => new Map());
164
+ // A question's picks, under `toolCallId|questionId`. Presence IS "the user touched this
165
+ // question" — an absent entry is what makes the submission omit it and take the server's default.
166
+ const [picks, setPicks] = useState(() => new Map());
167
+ // Which decision each parked call is sending, not merely that one is: the two affordances on a
168
+ // call are never in flight together, and only the pressed one should report progress.
169
+ const [settling, setSettling] = useState(() => new Map());
170
+ const [settleErrors, setSettleErrors] = useState(() => new Map());
171
+ const backend = useAgentBackend();
172
+ const handlers = settleHandlers(options, backend);
173
+ const latest = useRef({ options, handlers, drafts, picks, messages });
174
+ latest.current = { options, handlers, drafts, picks, messages };
175
+ const copyTimers = useRef(new Map());
176
+ useEffect(() => () => {
177
+ for (const timer of copyTimers.current.values()) {
178
+ clearTimeout(timer);
179
+ }
180
+ copyTimers.current.clear();
181
+ }, []);
182
+ const callbackCache = useRef(new Map());
183
+ const reasoningToggleCache = useRef(new Map());
184
+ const toggleReasoning = useCallback((key, open) => {
185
+ setOpenReasoning((current) => {
186
+ const next = new Map(current);
187
+ next.set(key, open ?? !(current.get(key) ?? false));
188
+ return next;
189
+ });
190
+ }, []);
191
+ const stableToggle = useCallback((key) => {
192
+ let cached = reasoningToggleCache.current.get(key);
193
+ if (!cached) {
194
+ cached = (open) => toggleReasoning(key, open);
195
+ reasoningToggleCache.current.set(key, cached);
196
+ }
197
+ return cached;
198
+ }, [toggleReasoning]);
199
+ const pick = useCallback((toolCallId, questionId, values) => {
200
+ setPicks((current) => new Map(current).set(pickKey(toolCallId, questionId), values));
201
+ }, []);
202
+ /**
203
+ * Run one decision against the server. A rejection has to land somewhere the user can see: the
204
+ * call stays parked either way, and a form that silently does nothing on submit is
205
+ * indistinguishable from a broken button.
206
+ */
207
+ const settle = useCallback((toolCallId, action, send) => {
208
+ setSettleErrors((current) => {
209
+ if (!current.has(toolCallId)) {
210
+ return current;
211
+ }
212
+ const next = new Map(current);
213
+ next.delete(toolCallId);
214
+ return next;
215
+ });
216
+ setSettling((current) => new Map(current).set(toolCallId, action));
217
+ const failed = (error) => {
218
+ setSettling((current) => {
219
+ const next = new Map(current);
220
+ next.delete(toolCallId);
221
+ return next;
222
+ });
223
+ setSettleErrors((current) => new Map(current).set(toolCallId, {
224
+ message: error instanceof Error ? error.message : 'Could not settle this',
225
+ code: settleErrorCode(error),
226
+ }));
227
+ };
228
+ // Sent in the click's own tick, not a microtask later — a synchronous throw and a rejected
229
+ // promise are the same failure to the person looking at the form.
230
+ try {
231
+ void Promise.resolve(send()).catch(failed);
232
+ }
233
+ catch (error) {
234
+ failed(error);
235
+ }
236
+ }, []);
237
+ const answer = useCallback((toolCallId) => {
238
+ const current = latest.current;
239
+ const onAnswer = current.handlers.onAnswer;
240
+ if (!onAnswer) {
241
+ return;
242
+ }
243
+ settle(toolCallId, 'answer', () => onAnswer({ toolCallId, answers: answersFor(current.picks, toolCallId) }));
244
+ }, [settle]);
245
+ const skip = useCallback((toolCallId) => {
246
+ const onSkip = latest.current.handlers.onSkip;
247
+ if (onSkip) {
248
+ settle(toolCallId, 'skip', () => onSkip({ toolCallId }));
249
+ }
250
+ }, [settle]);
251
+ const approve = useCallback((toolCallId, options, target) => {
252
+ const onApprove = latest.current.handlers.onApprove;
253
+ if (onApprove) {
254
+ settle(toolCallId, 'approve', () => onApprove({
255
+ toolCallId,
256
+ ...(target === undefined ? {} : { target }),
257
+ ...(options?.remember === true ? { remember: true } : {}),
258
+ }));
259
+ }
260
+ }, [settle]);
261
+ const reject = useCallback((toolCallId, target) => {
262
+ const onReject = latest.current.handlers.onReject;
263
+ if (onReject) {
264
+ settle(toolCallId, 'reject', () => onReject({ toolCallId, ...(target === undefined ? {} : { target }) }));
265
+ }
266
+ }, [settle]);
267
+ const callbacksFor = useCallback((id) => {
268
+ const cached = callbackCache.current.get(id);
269
+ if (cached) {
270
+ return cached;
271
+ }
272
+ const textFor = () => extractMessageText(latest.current.messages.find((message) => message.id === id)?.parts);
273
+ const created = {
274
+ copy: () => {
275
+ const text = textFor();
276
+ if (!text) {
277
+ return;
278
+ }
279
+ const write = latest.current.options.writeClipboard ??
280
+ ((value) => navigator.clipboard.writeText(value));
281
+ void Promise.resolve()
282
+ .then(() => write(text))
283
+ .then(() => {
284
+ setCopied((current) => new Set(current).add(id));
285
+ const existing = copyTimers.current.get(id);
286
+ if (existing) {
287
+ clearTimeout(existing);
288
+ }
289
+ copyTimers.current.set(id, setTimeout(() => {
290
+ copyTimers.current.delete(id);
291
+ setCopied((current) => {
292
+ const next = new Set(current);
293
+ next.delete(id);
294
+ return next;
295
+ });
296
+ }, latest.current.options.copyResetMs ?? DEFAULT_COPY_RESET_MS));
297
+ })
298
+ .catch(() => {
299
+ // Clipboard can be unavailable (insecure context / denied permission) — fail quietly.
300
+ });
301
+ },
302
+ startEdit: () => {
303
+ const text = textFor();
304
+ setDrafts((current) => new Map(current).set(id, text));
305
+ },
306
+ cancelEdit: () => {
307
+ setDrafts((current) => {
308
+ const next = new Map(current);
309
+ next.delete(id);
310
+ return next;
311
+ });
312
+ },
313
+ setDraft: (value) => {
314
+ setDrafts((current) => new Map(current).set(id, value));
315
+ },
316
+ save: () => {
317
+ const next = (latest.current.drafts.get(id) ?? '').trim();
318
+ if (!next) {
319
+ return;
320
+ }
321
+ created.cancelEdit();
322
+ void latest.current.options.onEditSubmit?.({ messageId: id, text: next });
323
+ },
324
+ fork: () => {
325
+ void latest.current.options.onFork?.({ messageId: id });
326
+ },
327
+ regenerate: () => {
328
+ void latest.current.options.onRegenerate?.({ messageId: id });
329
+ },
330
+ textareaRef: (element) => {
331
+ if (!element) {
332
+ return;
333
+ }
334
+ element.focus();
335
+ element.setSelectionRange(element.value.length, element.value.length);
336
+ },
337
+ onTextareaChange: (event) => {
338
+ created.setDraft(event.target.value);
339
+ },
340
+ onTextareaKeyDown: (event) => {
341
+ if (event.key === 'Enter' && !event.shiftKey) {
342
+ event.preventDefault();
343
+ created.save();
344
+ }
345
+ if (event.key === 'Escape') {
346
+ event.preventDefault();
347
+ created.cancelEdit();
348
+ }
349
+ },
350
+ };
351
+ callbackCache.current.set(id, created);
352
+ return created;
353
+ }, []);
354
+ const lastAssistantId = findLastAssistant(messages)?.id ?? null;
355
+ const items = [];
356
+ for (let index = visibleStart; index < messages.length; index++) {
357
+ const message = messages[index];
358
+ if (!message) {
359
+ continue;
360
+ }
361
+ const callbacks = callbacksFor(message.id);
362
+ const draft = drafts.get(message.id);
363
+ const isEditing = draft !== undefined;
364
+ const text = extractMessageText(message.parts);
365
+ const usage = (options.getUsage ?? usageFromMetadata)(message);
366
+ const isUser = message.role === 'user';
367
+ const isAssistant = message.role === 'assistant';
368
+ const isLastAssistant = isAssistant && message.id === lastAssistantId;
369
+ items.push({
370
+ id: message.id,
371
+ message,
372
+ role: message.role,
373
+ index,
374
+ isUser,
375
+ isAssistant,
376
+ isLastAssistant,
377
+ isStreaming: message.id === streamingMessageId,
378
+ blocks: buildTranscriptBlocks(message, {
379
+ isReasoningOpen: (key, isStreamingRun) => openReasoning.get(key) ?? isStreamingRun,
380
+ toggleReasoning: (key, open) => stableToggle(key)(open),
381
+ ...(options.sources !== undefined ? { sources: options.sources } : {}),
382
+ ...(options.toolCatalog !== undefined ? { toolCatalog: options.toolCatalog } : {}),
383
+ // Read-only still lifts question sets into their block, so the outcome shows.
384
+ ...(handlers.onAnswer !== undefined ||
385
+ (options.readOnly === true && options.onAnswer !== null)
386
+ ? {
387
+ elicitation: {
388
+ picked: (toolCallId, questionId) => picks.get(pickKey(toolCallId, questionId)),
389
+ pick,
390
+ canAnswer: handlers.onAnswer !== undefined,
391
+ canSkip: handlers.onSkip !== undefined,
392
+ answer,
393
+ skip,
394
+ submitting: (toolCallId) => settling.get(toolCallId) ?? null,
395
+ errorOf: (toolCallId) => settleErrors.get(toolCallId)?.message ?? null,
396
+ errorCodeOf: (toolCallId) => settleErrors.get(toolCallId)?.code ?? null,
397
+ },
398
+ }
399
+ : {}),
400
+ ...(handlers.onApprove !== undefined || handlers.onReject !== undefined
401
+ ? {
402
+ approval: {
403
+ canApprove: handlers.onApprove !== undefined,
404
+ canReject: handlers.onReject !== undefined,
405
+ approve,
406
+ reject,
407
+ submitting: (toolCallId) => settling.get(toolCallId) ?? null,
408
+ errorOf: (toolCallId) => settleErrors.get(toolCallId)?.message ?? null,
409
+ errorCodeOf: (toolCallId) => settleErrors.get(toolCallId)?.code ?? null,
410
+ },
411
+ }
412
+ : {}),
413
+ }),
414
+ text,
415
+ usage: usage ? describeUsage(usage) : null,
416
+ timestamp: describeTimestamp((options.getCreatedAt ?? createdAtFromMetadata)(message)),
417
+ copy: {
418
+ available: text.length > 0,
419
+ copied: copied.has(message.id),
420
+ copy: callbacks.copy,
421
+ },
422
+ edit: {
423
+ available: isUser &&
424
+ options.readOnly !== true &&
425
+ options.editable === true &&
426
+ options.onEditSubmit !== undefined,
427
+ isEditing,
428
+ draft: draft ?? text,
429
+ canSave: (draft ?? '').trim().length > 0,
430
+ start: callbacks.startEdit,
431
+ cancel: callbacks.cancelEdit,
432
+ setDraft: callbacks.setDraft,
433
+ save: callbacks.save,
434
+ getTextareaProps: () => ({
435
+ ref: callbacks.textareaRef,
436
+ value: draft ?? text,
437
+ onChange: callbacks.onTextareaChange,
438
+ onKeyDown: callbacks.onTextareaKeyDown,
439
+ }),
440
+ },
441
+ fork: {
442
+ available: options.readOnly !== true && options.onFork !== undefined,
443
+ run: callbacks.fork,
444
+ },
445
+ regenerate: {
446
+ available: isLastAssistant &&
447
+ options.readOnly !== true &&
448
+ options.regeneratable === true &&
449
+ options.onRegenerate !== undefined,
450
+ run: callbacks.regenerate,
451
+ },
452
+ });
453
+ }
454
+ return items;
455
+ }
456
+ /**
457
+ * The handler for each human decision: the caller's, else the backend's own call — so a parked
458
+ * approval or question set is never a card nobody can act on. `null` opts a decision out.
459
+ */
460
+ function settleHandlers(options, backend) {
461
+ const pick = (own, fallback) => options.readOnly === true || own === null ? undefined : (own ?? fallback);
462
+ return {
463
+ onAnswer: pick(options.onAnswer, backend.answerToolCall
464
+ ? async (input) => {
465
+ await backend.answerToolCall?.(input);
466
+ }
467
+ : undefined),
468
+ onSkip: pick(options.onSkip, backend.skipToolCall
469
+ ? async (input) => {
470
+ await backend.skipToolCall?.(input);
471
+ }
472
+ : undefined),
473
+ onApprove: pick(options.onApprove, backend.approveToolCall || backend.approveActionProposal
474
+ ? async (input) => {
475
+ if (input.target?.kind === 'proposal') {
476
+ if (input.target.threadId === undefined)
477
+ throw new Error('A proposal decision requires its thread scope');
478
+ await requireBackendMethod(backend, 'approveActionProposal')({
479
+ threadId: input.target.threadId,
480
+ proposalId: input.target.proposalId,
481
+ ...(input.remember === undefined ? {} : { remember: input.remember }),
482
+ });
483
+ }
484
+ else
485
+ await requireBackendMethod(backend, 'approveToolCall')(input);
486
+ }
487
+ : undefined),
488
+ onReject: pick(options.onReject, backend.rejectToolCall || backend.rejectActionProposal
489
+ ? async (input) => {
490
+ if (input.target?.kind === 'proposal') {
491
+ if (input.target.threadId === undefined)
492
+ throw new Error('A proposal decision requires its thread scope');
493
+ await requireBackendMethod(backend, 'rejectActionProposal')({
494
+ threadId: input.target.threadId,
495
+ proposalId: input.target.proposalId,
496
+ ...(input.reason === undefined ? {} : { reason: input.reason }),
497
+ });
498
+ }
499
+ else
500
+ await requireBackendMethod(backend, 'rejectToolCall')(input);
501
+ }
502
+ : undefined),
503
+ };
504
+ }
505
+ function metadataOf(message) {
506
+ const metadata = message.metadata;
507
+ return metadata !== null && typeof metadata === 'object'
508
+ ? metadata
509
+ : {};
510
+ }
511
+ /** The default `getUsage`: what the library stamps on `metadata.usage`. */
512
+ function usageFromMetadata(message) {
513
+ const usage = metadataOf(message).usage;
514
+ if (usage === undefined)
515
+ return null;
516
+ return {
517
+ inputTokens: usage.inputTokens,
518
+ outputTokens: usage.outputTokens,
519
+ costUsd: usage.costUsd ?? null,
520
+ };
521
+ }
522
+ /** The default `getCreatedAt`: what the library stamps on `metadata.createdAt`. */
523
+ function createdAtFromMetadata(message) {
524
+ return metadataOf(message).createdAt ?? null;
525
+ }
526
+ /** `|` never appears in either half: a tool-call id and a question id are both opaque tokens. */
527
+ function pickKey(toolCallId, questionId) {
528
+ return `${toolCallId}|${questionId}`;
529
+ }
530
+ /** The picks belonging to one question set, as the answers a submission carries. */
531
+ function answersFor(picks, toolCallId) {
532
+ const prefix = `${toolCallId}|`;
533
+ const answers = {};
534
+ for (const [key, values] of picks) {
535
+ if (key.startsWith(prefix)) {
536
+ answers[key.slice(prefix.length)] = values;
537
+ }
538
+ }
539
+ return answers;
540
+ }
541
+ function findLastAssistant(messages) {
542
+ for (let index = messages.length - 1; index >= 0; index--) {
543
+ const message = messages[index];
544
+ if (message?.role === 'assistant') {
545
+ return message;
546
+ }
547
+ }
548
+ return undefined;
549
+ }
550
+ /**
551
+ * Changes as the transcript grows, including WITHIN the message being streamed — the array is
552
+ * mutated in place while tokens arrive, so its length alone never moves during a turn.
553
+ */
554
+ function contentSignature(messages) {
555
+ const last = messages.at(-1);
556
+ if (!last) {
557
+ return '0';
558
+ }
559
+ let length = 0;
560
+ for (const part of last.parts ?? []) {
561
+ if ('text' in part && typeof part.text === 'string') {
562
+ length += part.text.length;
563
+ }
564
+ }
565
+ return `${messages.length}|${last.id}|${last.parts?.length ?? 0}|${length}`;
566
+ }
567
+ /** The server's machine-readable reason for refusing a decision (`run_not_active`, …), if any. */
568
+ function settleErrorCode(error) {
569
+ const code = error?.code;
570
+ return typeof code === 'string' && code !== '' ? code : null;
571
+ }
572
+ //# sourceMappingURL=use-chat-transcript.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"use-chat-transcript.js","sourceRoot":"","sources":["../../../../../src/react/core/transcript/use-chat-transcript.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,33 @@
1
+ export interface StickToBottomOptions {
2
+ /**
3
+ * Changes whenever the rendered content grows — the signal to re-pin. A string rather than the
4
+ * message array because a streaming turn mutates in place: the array identity is stable while its
5
+ * last part's text keeps growing.
6
+ */
7
+ contentKey: string;
8
+ /**
9
+ * How far off the bottom (px) still counts as "at the bottom". Sub-pixel layout and fractional
10
+ * device ratios leave a residue of a pixel or two after a programmatic scroll, so an exact
11
+ * comparison unpins the view on the very scroll event it just caused.
12
+ */
13
+ threshold?: number;
14
+ }
15
+ export interface StickToBottom {
16
+ /** While true, new content scrolls into view; the user scrolling up turns it off. */
17
+ isAtBottom: boolean;
18
+ /** Whether a "jump to latest" affordance is warranted. */
19
+ showJumpToLatest: boolean;
20
+ scrollToBottom: () => void;
21
+ /** Spread onto the scrolling element. Behaviour only — no classes, no styles. */
22
+ getContainerProps: () => {
23
+ ref: (element: HTMLElement | null) => void;
24
+ onScroll: () => void;
25
+ };
26
+ }
27
+ /**
28
+ * Follow a streaming transcript only while the reader is already at the bottom. Reading back
29
+ * through history during a stream is the case this exists for: an unconditional scroll-to-bottom
30
+ * yanks the viewport away mid-sentence on every token.
31
+ */
32
+ export declare function useStickToBottom({ contentKey, threshold, }: StickToBottomOptions): StickToBottom;
33
+ //# sourceMappingURL=use-stick-to-bottom.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"use-stick-to-bottom.d.ts","sourceRoot":"","sources":["../../../../../src/react/core/transcript/use-stick-to-bottom.ts"],"names":[],"mappings":"AAEA,MAAM,WAAW,oBAAoB;IACnC;;;;OAIG;IACH,UAAU,EAAE,MAAM,CAAC;IACnB;;;;OAIG;IACH,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,aAAa;IAC5B,qFAAqF;IACrF,UAAU,EAAE,OAAO,CAAC;IACpB,0DAA0D;IAC1D,gBAAgB,EAAE,OAAO,CAAC;IAC1B,cAAc,EAAE,MAAM,IAAI,CAAC;IAC3B,iFAAiF;IACjF,iBAAiB,EAAE,MAAM;QACvB,GAAG,EAAE,CAAC,OAAO,EAAE,WAAW,GAAG,IAAI,KAAK,IAAI,CAAC;QAC3C,QAAQ,EAAE,MAAM,IAAI,CAAC;KACtB,CAAC;CACH;AAED;;;;GAIG;AACH,wBAAgB,gBAAgB,CAAC,EAC/B,UAAU,EACV,SAAc,GACf,EAAE,oBAAoB,GAAG,aAAa,CAoDtC"}