@artooi/agents-web-components 0.0.0-stage → 0.1.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (543) hide show
  1. package/CHANGELOG.md +77 -0
  2. package/LICENSE +21 -0
  3. package/README.md +4397 -2
  4. package/dist/agents-web-components.bundle.js +5708 -0
  5. package/dist/agents-web-components.bundle.js.map +7 -0
  6. package/dist/bundle.d.ts +3 -0
  7. package/dist/bundle.d.ts.map +1 -0
  8. package/dist/chat.d.ts +3 -0
  9. package/dist/chat.d.ts.map +1 -0
  10. package/dist/chat.js +16373 -0
  11. package/dist/chat.js.map +7 -0
  12. package/dist/chunk-ARNLFGCC.js +7715 -0
  13. package/dist/chunk-ARNLFGCC.js.map +7 -0
  14. package/dist/constants.d.ts +575 -0
  15. package/dist/constants.d.ts.map +1 -0
  16. package/dist/core/activity_registration.d.ts +19 -0
  17. package/dist/core/activity_registration.d.ts.map +1 -0
  18. package/dist/core/activity_registry.d.ts +46 -0
  19. package/dist/core/activity_registry.d.ts.map +1 -0
  20. package/dist/core/activity_renderer.d.ts +20 -0
  21. package/dist/core/activity_renderer.d.ts.map +1 -0
  22. package/dist/core/ag_ui_chat.d.ts +836 -0
  23. package/dist/core/ag_ui_chat.d.ts.map +1 -0
  24. package/dist/core/agui_client.d.ts +370 -0
  25. package/dist/core/agui_client.d.ts.map +1 -0
  26. package/dist/core/attachment.d.ts +42 -0
  27. package/dist/core/attachment.d.ts.map +1 -0
  28. package/dist/core/chat_registry.d.ts +23 -0
  29. package/dist/core/chat_registry.d.ts.map +1 -0
  30. package/dist/core/client_seed.d.ts +27 -0
  31. package/dist/core/client_seed.d.ts.map +1 -0
  32. package/dist/core/conversation_store.d.ts +195 -0
  33. package/dist/core/conversation_store.d.ts.map +1 -0
  34. package/dist/core/create_http_agent.d.ts +57 -0
  35. package/dist/core/create_http_agent.d.ts.map +1 -0
  36. package/dist/core/define_chat.d.ts +13 -0
  37. package/dist/core/define_chat.d.ts.map +1 -0
  38. package/dist/core/events/attachments_detail.d.ts +9 -0
  39. package/dist/core/events/attachments_detail.d.ts.map +1 -0
  40. package/dist/core/events/bar_height_detail.d.ts +6 -0
  41. package/dist/core/events/bar_height_detail.d.ts.map +1 -0
  42. package/dist/core/events/custom_agent_detail.d.ts +8 -0
  43. package/dist/core/events/custom_agent_detail.d.ts.map +1 -0
  44. package/dist/core/events/dock_width_detail.d.ts +8 -0
  45. package/dist/core/events/dock_width_detail.d.ts.map +1 -0
  46. package/dist/core/events/feedback_detail.d.ts +28 -0
  47. package/dist/core/events/feedback_detail.d.ts.map +1 -0
  48. package/dist/core/events/invalidate_detail.d.ts +16 -0
  49. package/dist/core/events/invalidate_detail.d.ts.map +1 -0
  50. package/dist/core/events/maximize_detail.d.ts +5 -0
  51. package/dist/core/events/maximize_detail.d.ts.map +1 -0
  52. package/dist/core/events/run_finished_detail.d.ts +36 -0
  53. package/dist/core/events/run_finished_detail.d.ts.map +1 -0
  54. package/dist/core/events/state_detail.d.ts +5 -0
  55. package/dist/core/events/state_detail.d.ts.map +1 -0
  56. package/dist/core/events/submit_detail.d.ts +8 -0
  57. package/dist/core/events/submit_detail.d.ts.map +1 -0
  58. package/dist/core/events/thread_detail.d.ts +27 -0
  59. package/dist/core/events/thread_detail.d.ts.map +1 -0
  60. package/dist/core/events/thread_title_detail.d.ts +8 -0
  61. package/dist/core/events/thread_title_detail.d.ts.map +1 -0
  62. package/dist/core/events/toggle_detail.d.ts +5 -0
  63. package/dist/core/events/toggle_detail.d.ts.map +1 -0
  64. package/dist/core/events/tool_run.d.ts +11 -0
  65. package/dist/core/events/tool_run.d.ts.map +1 -0
  66. package/dist/core/events/unread_detail.d.ts +11 -0
  67. package/dist/core/events/unread_detail.d.ts.map +1 -0
  68. package/dist/core/message_role.d.ts +4 -0
  69. package/dist/core/message_role.d.ts.map +1 -0
  70. package/dist/core/read_flag.d.ts +11 -0
  71. package/dist/core/read_flag.d.ts.map +1 -0
  72. package/dist/core/read_json_attribute.d.ts +15 -0
  73. package/dist/core/read_json_attribute.d.ts.map +1 -0
  74. package/dist/core/read_max_tool_rounds.d.ts +9 -0
  75. package/dist/core/read_max_tool_rounds.d.ts.map +1 -0
  76. package/dist/core/remote_conversation_store.d.ts +71 -0
  77. package/dist/core/remote_conversation_store.d.ts.map +1 -0
  78. package/dist/core/run_handlers.d.ts +85 -0
  79. package/dist/core/run_handlers.d.ts.map +1 -0
  80. package/dist/core/run_index.d.ts +58 -0
  81. package/dist/core/run_index.d.ts.map +1 -0
  82. package/dist/core/storage_scope.d.ts +118 -0
  83. package/dist/core/storage_scope.d.ts.map +1 -0
  84. package/dist/core/tool_outcome.d.ts +27 -0
  85. package/dist/core/tool_outcome.d.ts.map +1 -0
  86. package/dist/core/transcribe_audio.d.ts +32 -0
  87. package/dist/core/transcribe_audio.d.ts.map +1 -0
  88. package/dist/core/upload_attachment.d.ts +44 -0
  89. package/dist/core/upload_attachment.d.ts.map +1 -0
  90. package/dist/core/utils.d.ts +117 -0
  91. package/dist/core/utils.d.ts.map +1 -0
  92. package/dist/dom/animations.d.ts +122 -0
  93. package/dist/dom/animations.d.ts.map +1 -0
  94. package/dist/dom/dom_driver.d.ts +28 -0
  95. package/dist/dom/dom_driver.d.ts.map +1 -0
  96. package/dist/dom/highlight_overlay.d.ts +39 -0
  97. package/dist/dom/highlight_overlay.d.ts.map +1 -0
  98. package/dist/dom/native_setter.d.ts +5 -0
  99. package/dist/dom/native_setter.d.ts.map +1 -0
  100. package/dist/dom/ring_color.d.ts +16 -0
  101. package/dist/dom/ring_color.d.ts.map +1 -0
  102. package/dist/dom/utils.d.ts +3 -0
  103. package/dist/dom/utils.d.ts.map +1 -0
  104. package/dist/index.d.ts +62 -0
  105. package/dist/index.d.ts.map +1 -0
  106. package/dist/index.js +223 -0
  107. package/dist/index.js.map +7 -0
  108. package/dist/skills/fill_template.d.ts +16 -0
  109. package/dist/skills/fill_template.d.ts.map +1 -0
  110. package/dist/skills/parse_skills.d.ts +8 -0
  111. package/dist/skills/parse_skills.d.ts.map +1 -0
  112. package/dist/skills/skill.d.ts +33 -0
  113. package/dist/skills/skill.d.ts.map +1 -0
  114. package/dist/skills/skill_catalog.d.ts +69 -0
  115. package/dist/skills/skill_catalog.d.ts.map +1 -0
  116. package/dist/skills/skill_name_from.d.ts +12 -0
  117. package/dist/skills/skill_name_from.d.ts.map +1 -0
  118. package/dist/tools/chat_surface_tools.d.ts +77 -0
  119. package/dist/tools/chat_surface_tools.d.ts.map +1 -0
  120. package/dist/tools/client_tool_registry.d.ts +58 -0
  121. package/dist/tools/client_tool_registry.d.ts.map +1 -0
  122. package/dist/tools/is_destructive.d.ts +14 -0
  123. package/dist/tools/is_destructive.d.ts.map +1 -0
  124. package/dist/tools/is_navigates.d.ts +9 -0
  125. package/dist/tools/is_navigates.d.ts.map +1 -0
  126. package/dist/tools/page_action_tools.d.ts +30 -0
  127. package/dist/tools/page_action_tools.d.ts.map +1 -0
  128. package/dist/tools/page_map.d.ts +16 -0
  129. package/dist/tools/page_map.d.ts.map +1 -0
  130. package/dist/tools/page_state.d.ts +27 -0
  131. package/dist/tools/page_state.d.ts.map +1 -0
  132. package/dist/tools/parse_tool_catalog.d.ts +21 -0
  133. package/dist/tools/parse_tool_catalog.d.ts.map +1 -0
  134. package/dist/tools/route_map.d.ts +37 -0
  135. package/dist/tools/route_map.d.ts.map +1 -0
  136. package/dist/tools/tool_catalog.d.ts +86 -0
  137. package/dist/tools/tool_catalog.d.ts.map +1 -0
  138. package/dist/tools/tool_dispatch.d.ts +82 -0
  139. package/dist/tools/tool_dispatch.d.ts.map +1 -0
  140. package/dist/ui/charts/chart_block.d.ts +57 -0
  141. package/dist/ui/charts/chart_block.d.ts.map +1 -0
  142. package/dist/ui/charts/chart_spec_from.d.ts +12 -0
  143. package/dist/ui/charts/chart_spec_from.d.ts.map +1 -0
  144. package/dist/ui/charts/chart_styles.d.ts +2 -0
  145. package/dist/ui/charts/chart_styles.d.ts.map +1 -0
  146. package/dist/ui/charts/chart_tool.d.ts +15 -0
  147. package/dist/ui/charts/chart_tool.d.ts.map +1 -0
  148. package/dist/ui/composer/attachment_styles.d.ts +2 -0
  149. package/dist/ui/composer/attachment_styles.d.ts.map +1 -0
  150. package/dist/ui/composer/attachment_tray.d.ts +53 -0
  151. package/dist/ui/composer/attachment_tray.d.ts.map +1 -0
  152. package/dist/ui/composer/auto_grow.d.ts +10 -0
  153. package/dist/ui/composer/auto_grow.d.ts.map +1 -0
  154. package/dist/ui/composer/build_composer.d.ts +32 -0
  155. package/dist/ui/composer/build_composer.d.ts.map +1 -0
  156. package/dist/ui/composer/composer_attachments.d.ts +57 -0
  157. package/dist/ui/composer/composer_attachments.d.ts.map +1 -0
  158. package/dist/ui/composer/composer_styles.d.ts +2 -0
  159. package/dist/ui/composer/composer_styles.d.ts.map +1 -0
  160. package/dist/ui/composer/composer_voice.d.ts +48 -0
  161. package/dist/ui/composer/composer_voice.d.ts.map +1 -0
  162. package/dist/ui/composer/skill_styles.d.ts +2 -0
  163. package/dist/ui/composer/skill_styles.d.ts.map +1 -0
  164. package/dist/ui/composer/skills_menu.d.ts +34 -0
  165. package/dist/ui/composer/skills_menu.d.ts.map +1 -0
  166. package/dist/ui/composer/voice_input.d.ts +46 -0
  167. package/dist/ui/composer/voice_input.d.ts.map +1 -0
  168. package/dist/ui/excerpts/attach_copy_buttons.d.ts +13 -0
  169. package/dist/ui/excerpts/attach_copy_buttons.d.ts.map +1 -0
  170. package/dist/ui/excerpts/copy_payload.d.ts +30 -0
  171. package/dist/ui/excerpts/copy_payload.d.ts.map +1 -0
  172. package/dist/ui/excerpts/page_quote_offer.d.ts +33 -0
  173. package/dist/ui/excerpts/page_quote_offer.d.ts.map +1 -0
  174. package/dist/ui/excerpts/place_offer.d.ts +9 -0
  175. package/dist/ui/excerpts/place_offer.d.ts.map +1 -0
  176. package/dist/ui/excerpts/quote_selection.d.ts +66 -0
  177. package/dist/ui/excerpts/quote_selection.d.ts.map +1 -0
  178. package/dist/ui/excerpts/transcript_quote_offer.d.ts +57 -0
  179. package/dist/ui/excerpts/transcript_quote_offer.d.ts.map +1 -0
  180. package/dist/ui/fill_ui_string.d.ts +32 -0
  181. package/dist/ui/fill_ui_string.d.ts.map +1 -0
  182. package/dist/ui/history/checkpoint_menu.d.ts +41 -0
  183. package/dist/ui/history/checkpoint_menu.d.ts.map +1 -0
  184. package/dist/ui/history/conversation_history.d.ts +317 -0
  185. package/dist/ui/history/conversation_history.d.ts.map +1 -0
  186. package/dist/ui/history/history_styles.d.ts +2 -0
  187. package/dist/ui/history/history_styles.d.ts.map +1 -0
  188. package/dist/ui/history/relative_time.d.ts +23 -0
  189. package/dist/ui/history/relative_time.d.ts.map +1 -0
  190. package/dist/ui/history/thread_drawer.d.ts +64 -0
  191. package/dist/ui/history/thread_drawer.d.ts.map +1 -0
  192. package/dist/ui/history/utils.d.ts +2 -0
  193. package/dist/ui/history/utils.d.ts.map +1 -0
  194. package/dist/ui/interrupts/approval_card.d.ts +64 -0
  195. package/dist/ui/interrupts/approval_card.d.ts.map +1 -0
  196. package/dist/ui/interrupts/approval_styles.d.ts +2 -0
  197. package/dist/ui/interrupts/approval_styles.d.ts.map +1 -0
  198. package/dist/ui/interrupts/confirmation_card.d.ts +51 -0
  199. package/dist/ui/interrupts/confirmation_card.d.ts.map +1 -0
  200. package/dist/ui/interrupts/confirmation_styles.d.ts +2 -0
  201. package/dist/ui/interrupts/confirmation_styles.d.ts.map +1 -0
  202. package/dist/ui/interrupts/pending_decision.d.ts +22 -0
  203. package/dist/ui/interrupts/pending_decision.d.ts.map +1 -0
  204. package/dist/ui/interrupts/question_card.d.ts +49 -0
  205. package/dist/ui/interrupts/question_card.d.ts.map +1 -0
  206. package/dist/ui/interrupts/question_styles.d.ts +2 -0
  207. package/dist/ui/interrupts/question_styles.d.ts.map +1 -0
  208. package/dist/ui/place/place.d.ts +17 -0
  209. package/dist/ui/place/place.d.ts.map +1 -0
  210. package/dist/ui/place/place_chip.d.ts +26 -0
  211. package/dist/ui/place/place_chip.d.ts.map +1 -0
  212. package/dist/ui/place/place_from_route.d.ts +9 -0
  213. package/dist/ui/place/place_from_route.d.ts.map +1 -0
  214. package/dist/ui/place/place_styles.d.ts +2 -0
  215. package/dist/ui/place/place_styles.d.ts.map +1 -0
  216. package/dist/ui/placement/clamp_launcher.d.ts +20 -0
  217. package/dist/ui/placement/clamp_launcher.d.ts.map +1 -0
  218. package/dist/ui/placement/clamp_panel.d.ts +13 -0
  219. package/dist/ui/placement/clamp_panel.d.ts.map +1 -0
  220. package/dist/ui/placement/collapse_styles.d.ts +2 -0
  221. package/dist/ui/placement/collapse_styles.d.ts.map +1 -0
  222. package/dist/ui/placement/dock_styles.d.ts +2 -0
  223. package/dist/ui/placement/dock_styles.d.ts.map +1 -0
  224. package/dist/ui/placement/embedded_styles.d.ts +2 -0
  225. package/dist/ui/placement/embedded_styles.d.ts.map +1 -0
  226. package/dist/ui/placement/launcher_drag.d.ts +49 -0
  227. package/dist/ui/placement/launcher_drag.d.ts.map +1 -0
  228. package/dist/ui/placement/launcher_placement.d.ts +77 -0
  229. package/dist/ui/placement/launcher_placement.d.ts.map +1 -0
  230. package/dist/ui/placement/launcher_styles.d.ts +2 -0
  231. package/dist/ui/placement/launcher_styles.d.ts.map +1 -0
  232. package/dist/ui/placement/page_styles.d.ts +2 -0
  233. package/dist/ui/placement/page_styles.d.ts.map +1 -0
  234. package/dist/ui/placement/panel_drag.d.ts +40 -0
  235. package/dist/ui/placement/panel_drag.d.ts.map +1 -0
  236. package/dist/ui/placement/panel_placement.d.ts +173 -0
  237. package/dist/ui/placement/panel_placement.d.ts.map +1 -0
  238. package/dist/ui/placement/place_widget.d.ts +31 -0
  239. package/dist/ui/placement/place_widget.d.ts.map +1 -0
  240. package/dist/ui/placement/preset_styles.d.ts +2 -0
  241. package/dist/ui/placement/preset_styles.d.ts.map +1 -0
  242. package/dist/ui/placement/resize_handle.d.ts +78 -0
  243. package/dist/ui/placement/resize_handle.d.ts.map +1 -0
  244. package/dist/ui/placement/resize_styles.d.ts +2 -0
  245. package/dist/ui/placement/resize_styles.d.ts.map +1 -0
  246. package/dist/ui/placement/sidebar_styles.d.ts +2 -0
  247. package/dist/ui/placement/sidebar_styles.d.ts.map +1 -0
  248. package/dist/ui/placement/small_viewport_styles.d.ts +2 -0
  249. package/dist/ui/placement/small_viewport_styles.d.ts.map +1 -0
  250. package/dist/ui/placement/surface_for.d.ts +93 -0
  251. package/dist/ui/placement/surface_for.d.ts.map +1 -0
  252. package/dist/ui/progress/prettify_tool_name.d.ts +11 -0
  253. package/dist/ui/progress/prettify_tool_name.d.ts.map +1 -0
  254. package/dist/ui/progress/run_announcer.d.ts +41 -0
  255. package/dist/ui/progress/run_announcer.d.ts.map +1 -0
  256. package/dist/ui/progress/run_notice.d.ts +21 -0
  257. package/dist/ui/progress/run_notice.d.ts.map +1 -0
  258. package/dist/ui/progress/run_notice_styles.d.ts +2 -0
  259. package/dist/ui/progress/run_notice_styles.d.ts.map +1 -0
  260. package/dist/ui/progress/subagent_panel.d.ts +101 -0
  261. package/dist/ui/progress/subagent_panel.d.ts.map +1 -0
  262. package/dist/ui/progress/subagent_progress.d.ts +57 -0
  263. package/dist/ui/progress/subagent_progress.d.ts.map +1 -0
  264. package/dist/ui/progress/subagent_update.d.ts +28 -0
  265. package/dist/ui/progress/subagent_update.d.ts.map +1 -0
  266. package/dist/ui/progress/thoughts_block.d.ts +57 -0
  267. package/dist/ui/progress/thoughts_block.d.ts.map +1 -0
  268. package/dist/ui/progress/thoughts_styles.d.ts +2 -0
  269. package/dist/ui/progress/thoughts_styles.d.ts.map +1 -0
  270. package/dist/ui/progress/tool_call_card.d.ts +167 -0
  271. package/dist/ui/progress/tool_call_card.d.ts.map +1 -0
  272. package/dist/ui/progress/tool_group_styles.d.ts +2 -0
  273. package/dist/ui/progress/tool_group_styles.d.ts.map +1 -0
  274. package/dist/ui/progress/tool_step_group.d.ts +50 -0
  275. package/dist/ui/progress/tool_step_group.d.ts.map +1 -0
  276. package/dist/ui/progress/tool_step_styles.d.ts +2 -0
  277. package/dist/ui/progress/tool_step_styles.d.ts.map +1 -0
  278. package/dist/ui/shell/adopt_styles.d.ts +28 -0
  279. package/dist/ui/shell/adopt_styles.d.ts.map +1 -0
  280. package/dist/ui/shell/build_header.d.ts +45 -0
  281. package/dist/ui/shell/build_header.d.ts.map +1 -0
  282. package/dist/ui/shell/build_launcher.d.ts +33 -0
  283. package/dist/ui/shell/build_launcher.d.ts.map +1 -0
  284. package/dist/ui/shell/collapse_glyph.d.ts +14 -0
  285. package/dist/ui/shell/collapse_glyph.d.ts.map +1 -0
  286. package/dist/ui/shell/frame_styles.d.ts +2 -0
  287. package/dist/ui/shell/frame_styles.d.ts.map +1 -0
  288. package/dist/ui/shell/glyph_slot.d.ts +7 -0
  289. package/dist/ui/shell/glyph_slot.d.ts.map +1 -0
  290. package/dist/ui/shell/header_button.d.ts +11 -0
  291. package/dist/ui/shell/header_button.d.ts.map +1 -0
  292. package/dist/ui/shell/icon_element.d.ts +12 -0
  293. package/dist/ui/shell/icon_element.d.ts.map +1 -0
  294. package/dist/ui/shell/is_unread_badge_enabled.d.ts +10 -0
  295. package/dist/ui/shell/is_unread_badge_enabled.d.ts.map +1 -0
  296. package/dist/ui/shell/read_launcher_icon_url.d.ts +8 -0
  297. package/dist/ui/shell/read_launcher_icon_url.d.ts.map +1 -0
  298. package/dist/ui/shell/theme_styles.d.ts +2 -0
  299. package/dist/ui/shell/theme_styles.d.ts.map +1 -0
  300. package/dist/ui/shell/token_styles.d.ts +2 -0
  301. package/dist/ui/shell/token_styles.d.ts.map +1 -0
  302. package/dist/ui/styles.d.ts +2 -0
  303. package/dist/ui/styles.d.ts.map +1 -0
  304. package/dist/ui/themes/classic_styles.d.ts +2 -0
  305. package/dist/ui/themes/classic_styles.d.ts.map +1 -0
  306. package/dist/ui/themes/classic_tokens.d.ts +2 -0
  307. package/dist/ui/themes/classic_tokens.d.ts.map +1 -0
  308. package/dist/ui/themes/code_tokens.d.ts +2 -0
  309. package/dist/ui/themes/code_tokens.d.ts.map +1 -0
  310. package/dist/ui/themes/ledger_styles.d.ts +2 -0
  311. package/dist/ui/themes/ledger_styles.d.ts.map +1 -0
  312. package/dist/ui/themes/ledger_tokens.d.ts +2 -0
  313. package/dist/ui/themes/ledger_tokens.d.ts.map +1 -0
  314. package/dist/ui/themes/modern_styles.d.ts +2 -0
  315. package/dist/ui/themes/modern_styles.d.ts.map +1 -0
  316. package/dist/ui/themes/quiet_styles.d.ts +2 -0
  317. package/dist/ui/themes/quiet_styles.d.ts.map +1 -0
  318. package/dist/ui/themes/scheme_styles.d.ts +2 -0
  319. package/dist/ui/themes/scheme_styles.d.ts.map +1 -0
  320. package/dist/ui/themes/soft_styles.d.ts +2 -0
  321. package/dist/ui/themes/soft_styles.d.ts.map +1 -0
  322. package/dist/ui/themes/soft_tokens.d.ts +2 -0
  323. package/dist/ui/themes/soft_tokens.d.ts.map +1 -0
  324. package/dist/ui/themes/theme_hosts.d.ts +15 -0
  325. package/dist/ui/themes/theme_hosts.d.ts.map +1 -0
  326. package/dist/ui/transcript/answer_actions.d.ts +50 -0
  327. package/dist/ui/transcript/answer_actions.d.ts.map +1 -0
  328. package/dist/ui/transcript/answer_stream.d.ts +56 -0
  329. package/dist/ui/transcript/answer_stream.d.ts.map +1 -0
  330. package/dist/ui/transcript/attachment_chip_styles.d.ts +2 -0
  331. package/dist/ui/transcript/attachment_chip_styles.d.ts.map +1 -0
  332. package/dist/ui/transcript/attachment_chips.d.ts +21 -0
  333. package/dist/ui/transcript/attachment_chips.d.ts.map +1 -0
  334. package/dist/ui/transcript/build_transcript.d.ts +21 -0
  335. package/dist/ui/transcript/build_transcript.d.ts.map +1 -0
  336. package/dist/ui/transcript/greeting_styles.d.ts +2 -0
  337. package/dist/ui/transcript/greeting_styles.d.ts.map +1 -0
  338. package/dist/ui/transcript/groups_tool_steps.d.ts +13 -0
  339. package/dist/ui/transcript/groups_tool_steps.d.ts.map +1 -0
  340. package/dist/ui/transcript/message_action_styles.d.ts +2 -0
  341. package/dist/ui/transcript/message_action_styles.d.ts.map +1 -0
  342. package/dist/ui/transcript/message_actions.d.ts +74 -0
  343. package/dist/ui/transcript/message_actions.d.ts.map +1 -0
  344. package/dist/ui/transcript/message_styles.d.ts +2 -0
  345. package/dist/ui/transcript/message_styles.d.ts.map +1 -0
  346. package/dist/ui/transcript/render_markdown.d.ts +40 -0
  347. package/dist/ui/transcript/render_markdown.d.ts.map +1 -0
  348. package/dist/ui/transcript/render_or_warn.d.ts +16 -0
  349. package/dist/ui/transcript/render_or_warn.d.ts.map +1 -0
  350. package/dist/ui/transcript/reveal_words.d.ts +8 -0
  351. package/dist/ui/transcript/reveal_words.d.ts.map +1 -0
  352. package/dist/ui/transcript/starter_chips.d.ts +21 -0
  353. package/dist/ui/transcript/starter_chips.d.ts.map +1 -0
  354. package/dist/ui/transcript/stick_to_bottom.d.ts +55 -0
  355. package/dist/ui/transcript/stick_to_bottom.d.ts.map +1 -0
  356. package/dist/ui/transcript/suggestion_chips.d.ts +29 -0
  357. package/dist/ui/transcript/suggestion_chips.d.ts.map +1 -0
  358. package/dist/ui/transcript/transcript.d.ts +196 -0
  359. package/dist/ui/transcript/transcript.d.ts.map +1 -0
  360. package/dist/ui/transcript/transcript_styles.d.ts +2 -0
  361. package/dist/ui/transcript/transcript_styles.d.ts.map +1 -0
  362. package/dist/ui/ui_strings.d.ts +352 -0
  363. package/dist/ui/ui_strings.d.ts.map +1 -0
  364. package/dist/version.d.ts +2 -0
  365. package/dist/version.d.ts.map +1 -0
  366. package/package.json +86 -3
  367. package/src/bundle.ts +2 -0
  368. package/src/chat.ts +2 -0
  369. package/src/constants.ts +650 -0
  370. package/src/core/activity_registration.ts +19 -0
  371. package/src/core/activity_registry.ts +133 -0
  372. package/src/core/activity_renderer.ts +19 -0
  373. package/src/core/ag_ui_chat.ts +3966 -0
  374. package/src/core/agui_client.ts +1028 -0
  375. package/src/core/attachment.ts +62 -0
  376. package/src/core/chat_registry.ts +53 -0
  377. package/src/core/client_seed.ts +27 -0
  378. package/src/core/conversation_store.ts +478 -0
  379. package/src/core/create_http_agent.ts +97 -0
  380. package/src/core/define_chat.ts +25 -0
  381. package/src/core/events/attachments_detail.ts +9 -0
  382. package/src/core/events/bar_height_detail.ts +5 -0
  383. package/src/core/events/custom_agent_detail.ts +7 -0
  384. package/src/core/events/dock_width_detail.ts +7 -0
  385. package/src/core/events/feedback_detail.ts +27 -0
  386. package/src/core/events/invalidate_detail.ts +15 -0
  387. package/src/core/events/maximize_detail.ts +4 -0
  388. package/src/core/events/run_finished_detail.ts +36 -0
  389. package/src/core/events/state_detail.ts +4 -0
  390. package/src/core/events/submit_detail.ts +8 -0
  391. package/src/core/events/thread_detail.ts +26 -0
  392. package/src/core/events/thread_title_detail.ts +7 -0
  393. package/src/core/events/toggle_detail.ts +4 -0
  394. package/src/core/events/tool_run.ts +10 -0
  395. package/src/core/events/unread_detail.ts +10 -0
  396. package/src/core/message_role.ts +4 -0
  397. package/src/core/read_flag.ts +13 -0
  398. package/src/core/read_json_attribute.ts +30 -0
  399. package/src/core/read_max_tool_rounds.ts +13 -0
  400. package/src/core/remote_conversation_store.ts +279 -0
  401. package/src/core/run_handlers.ts +524 -0
  402. package/src/core/run_index.ts +114 -0
  403. package/src/core/storage_scope.ts +291 -0
  404. package/src/core/tool_outcome.ts +39 -0
  405. package/src/core/transcribe_audio.ts +76 -0
  406. package/src/core/upload_attachment.ts +130 -0
  407. package/src/core/utils.ts +230 -0
  408. package/src/dom/animations.ts +341 -0
  409. package/src/dom/dom_driver.ts +91 -0
  410. package/src/dom/highlight_overlay.ts +204 -0
  411. package/src/dom/native_setter.ts +40 -0
  412. package/src/dom/ring_color.ts +206 -0
  413. package/src/dom/utils.ts +5 -0
  414. package/src/index.ts +220 -0
  415. package/src/skills/fill_template.ts +31 -0
  416. package/src/skills/parse_skills.ts +31 -0
  417. package/src/skills/skill.ts +32 -0
  418. package/src/skills/skill_catalog.ts +172 -0
  419. package/src/skills/skill_name_from.ts +19 -0
  420. package/src/tools/chat_surface_tools.ts +183 -0
  421. package/src/tools/client_tool_registry.ts +80 -0
  422. package/src/tools/is_destructive.ts +17 -0
  423. package/src/tools/is_navigates.ts +12 -0
  424. package/src/tools/page_action_tools.ts +123 -0
  425. package/src/tools/page_map.ts +26 -0
  426. package/src/tools/page_state.ts +57 -0
  427. package/src/tools/parse_tool_catalog.ts +41 -0
  428. package/src/tools/route_map.ts +132 -0
  429. package/src/tools/tool_catalog.ts +334 -0
  430. package/src/tools/tool_dispatch.ts +453 -0
  431. package/src/ui/charts/chart_block.ts +519 -0
  432. package/src/ui/charts/chart_spec_from.ts +125 -0
  433. package/src/ui/charts/chart_styles.ts +63 -0
  434. package/src/ui/charts/chart_tool.ts +72 -0
  435. package/src/ui/composer/attachment_styles.ts +71 -0
  436. package/src/ui/composer/attachment_tray.ts +295 -0
  437. package/src/ui/composer/auto_grow.ts +12 -0
  438. package/src/ui/composer/build_composer.ts +114 -0
  439. package/src/ui/composer/composer_attachments.ts +324 -0
  440. package/src/ui/composer/composer_styles.ts +177 -0
  441. package/src/ui/composer/composer_voice.ts +93 -0
  442. package/src/ui/composer/skill_styles.ts +120 -0
  443. package/src/ui/composer/skills_menu.ts +188 -0
  444. package/src/ui/composer/voice_input.ts +282 -0
  445. package/src/ui/excerpts/attach_copy_buttons.ts +73 -0
  446. package/src/ui/excerpts/copy_payload.ts +156 -0
  447. package/src/ui/excerpts/page_quote_offer.ts +203 -0
  448. package/src/ui/excerpts/place_offer.ts +24 -0
  449. package/src/ui/excerpts/quote_selection.ts +345 -0
  450. package/src/ui/excerpts/transcript_quote_offer.ts +175 -0
  451. package/src/ui/fill_ui_string.ts +41 -0
  452. package/src/ui/history/checkpoint_menu.ts +300 -0
  453. package/src/ui/history/conversation_history.ts +1169 -0
  454. package/src/ui/history/history_styles.ts +492 -0
  455. package/src/ui/history/relative_time.ts +50 -0
  456. package/src/ui/history/thread_drawer.ts +471 -0
  457. package/src/ui/history/utils.ts +11 -0
  458. package/src/ui/interrupts/approval_card.ts +202 -0
  459. package/src/ui/interrupts/approval_styles.ts +52 -0
  460. package/src/ui/interrupts/confirmation_card.ts +138 -0
  461. package/src/ui/interrupts/confirmation_styles.ts +114 -0
  462. package/src/ui/interrupts/pending_decision.ts +33 -0
  463. package/src/ui/interrupts/question_card.ts +213 -0
  464. package/src/ui/interrupts/question_styles.ts +73 -0
  465. package/src/ui/place/place.ts +16 -0
  466. package/src/ui/place/place_chip.ts +146 -0
  467. package/src/ui/place/place_from_route.ts +27 -0
  468. package/src/ui/place/place_styles.ts +108 -0
  469. package/src/ui/placement/clamp_launcher.ts +38 -0
  470. package/src/ui/placement/clamp_panel.ts +30 -0
  471. package/src/ui/placement/collapse_styles.ts +472 -0
  472. package/src/ui/placement/dock_styles.ts +116 -0
  473. package/src/ui/placement/embedded_styles.ts +14 -0
  474. package/src/ui/placement/launcher_drag.ts +206 -0
  475. package/src/ui/placement/launcher_placement.ts +133 -0
  476. package/src/ui/placement/launcher_styles.ts +189 -0
  477. package/src/ui/placement/page_styles.ts +47 -0
  478. package/src/ui/placement/panel_drag.ts +138 -0
  479. package/src/ui/placement/panel_placement.ts +1975 -0
  480. package/src/ui/placement/place_widget.ts +64 -0
  481. package/src/ui/placement/preset_styles.ts +49 -0
  482. package/src/ui/placement/resize_handle.ts +229 -0
  483. package/src/ui/placement/resize_styles.ts +201 -0
  484. package/src/ui/placement/sidebar_styles.ts +113 -0
  485. package/src/ui/placement/small_viewport_styles.ts +70 -0
  486. package/src/ui/placement/surface_for.ts +183 -0
  487. package/src/ui/progress/prettify_tool_name.ts +16 -0
  488. package/src/ui/progress/run_announcer.ts +67 -0
  489. package/src/ui/progress/run_notice.ts +61 -0
  490. package/src/ui/progress/run_notice_styles.ts +52 -0
  491. package/src/ui/progress/subagent_panel.ts +227 -0
  492. package/src/ui/progress/subagent_progress.ts +200 -0
  493. package/src/ui/progress/subagent_update.ts +89 -0
  494. package/src/ui/progress/thoughts_block.ts +165 -0
  495. package/src/ui/progress/thoughts_styles.ts +74 -0
  496. package/src/ui/progress/tool_call_card.ts +429 -0
  497. package/src/ui/progress/tool_group_styles.ts +313 -0
  498. package/src/ui/progress/tool_step_group.ts +317 -0
  499. package/src/ui/progress/tool_step_styles.ts +486 -0
  500. package/src/ui/shell/adopt_styles.ts +34 -0
  501. package/src/ui/shell/build_header.ts +121 -0
  502. package/src/ui/shell/build_launcher.ts +79 -0
  503. package/src/ui/shell/collapse_glyph.ts +42 -0
  504. package/src/ui/shell/frame_styles.ts +147 -0
  505. package/src/ui/shell/glyph_slot.ts +12 -0
  506. package/src/ui/shell/header_button.ts +22 -0
  507. package/src/ui/shell/icon_element.ts +33 -0
  508. package/src/ui/shell/is_unread_badge_enabled.ts +11 -0
  509. package/src/ui/shell/read_launcher_icon_url.ts +9 -0
  510. package/src/ui/shell/theme_styles.ts +11 -0
  511. package/src/ui/shell/token_styles.ts +480 -0
  512. package/src/ui/styles.ts +110 -0
  513. package/src/ui/themes/classic_styles.ts +32 -0
  514. package/src/ui/themes/classic_tokens.ts +51 -0
  515. package/src/ui/themes/code_tokens.ts +21 -0
  516. package/src/ui/themes/ledger_styles.ts +169 -0
  517. package/src/ui/themes/ledger_tokens.ts +33 -0
  518. package/src/ui/themes/modern_styles.ts +80 -0
  519. package/src/ui/themes/quiet_styles.ts +118 -0
  520. package/src/ui/themes/scheme_styles.ts +26 -0
  521. package/src/ui/themes/soft_styles.ts +149 -0
  522. package/src/ui/themes/soft_tokens.ts +29 -0
  523. package/src/ui/themes/theme_hosts.ts +14 -0
  524. package/src/ui/transcript/answer_actions.ts +165 -0
  525. package/src/ui/transcript/answer_stream.ts +123 -0
  526. package/src/ui/transcript/attachment_chip_styles.ts +116 -0
  527. package/src/ui/transcript/attachment_chips.ts +82 -0
  528. package/src/ui/transcript/build_transcript.ts +67 -0
  529. package/src/ui/transcript/greeting_styles.ts +171 -0
  530. package/src/ui/transcript/groups_tool_steps.ts +16 -0
  531. package/src/ui/transcript/message_action_styles.ts +155 -0
  532. package/src/ui/transcript/message_actions.ts +234 -0
  533. package/src/ui/transcript/message_styles.ts +262 -0
  534. package/src/ui/transcript/render_markdown.ts +181 -0
  535. package/src/ui/transcript/render_or_warn.ts +22 -0
  536. package/src/ui/transcript/reveal_words.ts +41 -0
  537. package/src/ui/transcript/starter_chips.ts +42 -0
  538. package/src/ui/transcript/stick_to_bottom.ts +126 -0
  539. package/src/ui/transcript/suggestion_chips.ts +73 -0
  540. package/src/ui/transcript/transcript.ts +555 -0
  541. package/src/ui/transcript/transcript_styles.ts +153 -0
  542. package/src/ui/ui_strings.ts +550 -0
  543. package/src/version.ts +1 -0
@@ -0,0 +1,204 @@
1
+ import { HIGHLIGHT_OVERLAY_Z_INDEX } from "../constants.js";
2
+ import { ringColor } from "./ring_color.js";
3
+
4
+ /** How the overlay is drawn around the element being pointed at. */
5
+ export interface HighlightOverlayOptions {
6
+ /** Dim everything except the target. Default false. */
7
+ readonly scrim?: boolean;
8
+ /** Draw the ring as a moving gradient rather than a flat colour. Default false. */
9
+ readonly gradient?: boolean;
10
+ /**
11
+ * Ring colour, and the flat fallback for the gradient. Default:
12
+ * `--ag-ui-highlight-ring-color` on the target, then on the chat, then the
13
+ * target's `--ag-ui-accent`, then the chat's accent, held to 3:1 against the
14
+ * surface behind the target.
15
+ */
16
+ readonly color?: string;
17
+ /** The chat whose ring colour and accent to use. Default: the latest connected. */
18
+ readonly chat?: HTMLElement;
19
+ /** Gap between the target's box and the ring. Default 4. */
20
+ readonly padding?: number;
21
+ /** Corner radius of the cut-out and the ring. Default: the target's own. */
22
+ readonly radius?: number;
23
+ /** Ring thickness. Default 3, or `--ag-ui-highlight-ring-width` on the target. */
24
+ readonly ringWidth?: number;
25
+ /** One pass of the gradient. Default 2400, or `--ag-ui-highlight-flow-ms`. */
26
+ readonly flowMs?: number;
27
+ }
28
+
29
+ /**
30
+ * Read a `--ag-ui-*` token from the target, not the overlay: the overlay sits in the body, so
31
+ * a host that themes the widget on `ag-ui-chat` or a wrapper would never reach a `var()` there.
32
+ */
33
+ function tokenOn(target: HTMLElement, name: string, fallback: string): string {
34
+ const value = window.getComputedStyle(target).getPropertyValue(name).trim();
35
+ return value === "" ? fallback : value;
36
+ }
37
+
38
+ /** Default gap between the target's border box and the ring around it. */
39
+ const DEFAULT_PADDING_PX = 4;
40
+
41
+ /**
42
+ * Draw an overlay that points at `target`, and return a function that removes it.
43
+ *
44
+ * An overlay rather than a style on the target: a flat highlight is an `outline` so an
45
+ * `overflow: hidden` ancestor cannot clip it, but an outline takes a colour, never a
46
+ * gradient, and a dim needs a surface larger than the target. Nothing here is a descendant
47
+ * of the target, so none of it is clipped.
48
+ *
49
+ * It is inert: it never takes a pointer event, so the driver can still click what it
50
+ * just pointed at.
51
+ *
52
+ * It follows: the cut-out is recomputed on scroll and resize.
53
+ */
54
+ export function showHighlightOverlay(
55
+ target: HTMLElement,
56
+ options: HighlightOverlayOptions = {},
57
+ ): () => void {
58
+ const root = document.createElement("div");
59
+ root.setAttribute("data-ag-ui-highlight", "");
60
+ // Decoration: the agent's message is what announces that the element matters.
61
+ root.setAttribute("aria-hidden", "true");
62
+ root.style.cssText = [
63
+ "position: fixed",
64
+ "inset: 0",
65
+ "pointer-events: none",
66
+ // Above the widget's own default, since it points at the page the widget sits over.
67
+ `z-index: ${tokenOn(target, "--ag-ui-highlight-z-index", String(HIGHLIGHT_OVERLAY_Z_INDEX))}`,
68
+ ].join(";");
69
+
70
+ const scrim = document.createElement("div");
71
+ const ring = document.createElement("div");
72
+ // Classes, since `::part` cannot reach the host document.
73
+ root.className = "ag-ui-highlight";
74
+ scrim.className = "ag-ui-highlight-scrim";
75
+ ring.className = "ag-ui-highlight-ring";
76
+ if (options.scrim === true) {
77
+ root.append(scrim);
78
+ }
79
+ root.append(ring);
80
+
81
+ const ringWidth =
82
+ options.ringWidth ?? Number.parseFloat(tokenOn(target, "--ag-ui-highlight-ring-width", "3"));
83
+ const flowMs =
84
+ options.flowMs ?? Number.parseFloat(tokenOn(target, "--ag-ui-highlight-flow-ms", "2400"));
85
+
86
+ const paint = (): void => {
87
+ const box = target.getBoundingClientRect();
88
+ const pad = options.padding ?? DEFAULT_PADDING_PX;
89
+ // No fallback for an unparseable radius: it always resolves for an element in the document.
90
+ const radius = options.radius ?? Number.parseFloat(getComputedStyle(target).borderRadius);
91
+ const left = box.left - pad;
92
+ const top = box.top - pad;
93
+ const width = box.width + pad * 2;
94
+ const height = box.height + pad * 2;
95
+
96
+ if (options.scrim === true) {
97
+ // One element with a hole; the opposite winding makes evenodd treat the inside as outside.
98
+ scrim.style.cssText = [
99
+ "position: absolute",
100
+ "inset: 0",
101
+ `background: ${tokenOn(target, "--ag-ui-highlight-scrim", "rgba(15, 15, 25, 0.45)")}`,
102
+ `clip-path: path(evenodd, '${holePath(left, top, width, height, radius + pad)}')`,
103
+ ].join(";");
104
+ }
105
+
106
+ ring.style.cssText = [
107
+ "position: absolute",
108
+ `left: ${left}px`,
109
+ `top: ${top}px`,
110
+ `width: ${width}px`,
111
+ `height: ${height}px`,
112
+ `border-radius: ${radius + pad}px`,
113
+ `border: ${ringWidth}px solid transparent`,
114
+ "box-sizing: border-box",
115
+ ringPaint(target, options),
116
+ ].join(";");
117
+ };
118
+
119
+ paint();
120
+ // Animated from script: a keyframe would mean injecting a rule into the host stylesheet,
121
+ // which is module-level state. Reduced motion draws the gradient but stops it travelling.
122
+ let flow: Animation | null = null;
123
+ if (options.gradient === true && !window.matchMedia("(prefers-reduced-motion: reduce)").matches) {
124
+ flow = ring.animate([{ backgroundPosition: "100% 0" }, { backgroundPosition: "-100% 0" }], {
125
+ duration: flowMs,
126
+ iterations: Number.POSITIVE_INFINITY,
127
+ easing: "linear",
128
+ });
129
+ }
130
+ // Capture reaches a scroll in any container; passive, as this only reads geometry.
131
+ const listen = { capture: true, passive: true } as const;
132
+ window.addEventListener("scroll", paint, listen);
133
+ window.addEventListener("resize", paint, listen);
134
+ document.body.appendChild(root);
135
+
136
+ return () => {
137
+ window.removeEventListener("scroll", paint, listen);
138
+ window.removeEventListener("resize", paint, listen);
139
+ // An infinite animation never finishes, so cancel it rather than rely on the engine dropping it.
140
+ flow?.cancel();
141
+ root.remove();
142
+ };
143
+ }
144
+
145
+ /**
146
+ * A caller's colour, or `null` if it is not one: the value is joined into a `;`-separated
147
+ * `cssText`, so a string carrying a semicolon would write further declarations, and the
148
+ * colour can come from the agent.
149
+ */
150
+ function safeColor(value: string | undefined): string | null {
151
+ if (value === undefined) {
152
+ return null;
153
+ }
154
+ return CSS.supports("color", value) ? value : null;
155
+ }
156
+
157
+ /** The ring's paint: a flat border, or a gradient masked to the frame (border box less padding box). */
158
+ function ringPaint(target: HTMLElement, options: HighlightOverlayOptions): string {
159
+ const color = safeColor(options.color) ?? ringColor(target, options.chat);
160
+ if (options.gradient !== true) {
161
+ return `border-color: ${color}`;
162
+ }
163
+ const image = tokenOn(
164
+ target,
165
+ "--ag-ui-highlight-gradient",
166
+ `linear-gradient(115deg, transparent 20%, ${color} 50%, transparent 80%)`,
167
+ );
168
+ const mask = "linear-gradient(#000 0 0) content-box, linear-gradient(#000 0 0)";
169
+ return [
170
+ `background-image: ${image}`,
171
+ "background-origin: border-box",
172
+ "background-size: 300% 100%",
173
+ `-webkit-mask: ${mask}`,
174
+ `mask: ${mask}`,
175
+ "-webkit-mask-composite: xor",
176
+ "mask-composite: exclude",
177
+ "background-position: 50% 0",
178
+ ].join(";");
179
+ }
180
+
181
+ /**
182
+ * A viewport-sized rectangle with a rounded rectangle cut out, as a path for
183
+ * `clip-path: path(evenodd, ...)`. Absolute commands, closed explicitly: an unparseable
184
+ * `clip-path` is dropped silently and the scrim would cover the target.
185
+ */
186
+ function holePath(x: number, y: number, width: number, height: number, radius: number): string {
187
+ const r = Math.max(0, Math.min(radius, width / 2, height / 2));
188
+ const right = x + width;
189
+ const bottom = y + height;
190
+ const outer = `M 0 0 H ${window.innerWidth} V ${window.innerHeight} H 0 Z`;
191
+ const hole = [
192
+ `M ${x + r} ${y}`,
193
+ `H ${right - r}`,
194
+ `A ${r} ${r} 0 0 1 ${right} ${y + r}`,
195
+ `V ${bottom - r}`,
196
+ `A ${r} ${r} 0 0 1 ${right - r} ${bottom}`,
197
+ `H ${x + r}`,
198
+ `A ${r} ${r} 0 0 1 ${x} ${bottom - r}`,
199
+ `V ${y + r}`,
200
+ `A ${r} ${r} 0 0 1 ${x + r} ${y}`,
201
+ "Z",
202
+ ].join(" ");
203
+ return `${outer} ${hole}`;
204
+ }
@@ -0,0 +1,40 @@
1
+ // Set a control's `value` / `checked` through the native prototype setter, so
2
+ // framework value-tracking sees the change. React (and Vue/Svelte) replace the
3
+ // element's own setter with a tracked one, so `el.value = x` hits that override
4
+ // and the following `input` event carries no change: the field looks filled
5
+ // while the framework's state stays empty. Calling the original prototype
6
+ // setter and then dispatching `input` avoids that.
7
+
8
+ type ValueSetter = (this: HTMLElement, value: string) => void;
9
+ type CheckedSetter = (this: HTMLElement, checked: boolean) => void;
10
+
11
+ /** The original prototype setter for `prop` on `proto`. */
12
+ function prototypeSetter(proto: object, prop: string): (this: HTMLElement, value: never) => void {
13
+ // Captured at module load; DOM environments always define these, so the cast is safe.
14
+ const setter = (Object.getOwnPropertyDescriptor(proto, prop) as PropertyDescriptor).set;
15
+ return setter as unknown as (this: HTMLElement, value: never) => void;
16
+ }
17
+
18
+ const setInputValue = prototypeSetter(HTMLInputElement.prototype, "value") as ValueSetter;
19
+ const setTextareaValue = prototypeSetter(HTMLTextAreaElement.prototype, "value") as ValueSetter;
20
+ const setSelectValue = prototypeSetter(HTMLSelectElement.prototype, "value") as ValueSetter;
21
+ const setInputChecked = prototypeSetter(HTMLInputElement.prototype, "checked") as CheckedSetter;
22
+
23
+ /** Set `el.value` via the element's native prototype setter. */
24
+ export function setNativeValue(
25
+ el: HTMLInputElement | HTMLTextAreaElement | HTMLSelectElement,
26
+ value: string,
27
+ ): void {
28
+ if (el instanceof HTMLTextAreaElement) {
29
+ setTextareaValue.call(el, value);
30
+ } else if (el instanceof HTMLSelectElement) {
31
+ setSelectValue.call(el, value);
32
+ } else {
33
+ setInputValue.call(el, value);
34
+ }
35
+ }
36
+
37
+ /** Set `el.checked` via the native prototype setter. */
38
+ export function setNativeChecked(el: HTMLInputElement, checked: boolean): void {
39
+ setInputChecked.call(el, checked);
40
+ }
@@ -0,0 +1,206 @@
1
+ import { ChatRegistration } from "../core/chat_registry.js";
2
+
3
+ /** The public ring token, read from the target and then from the chat. */
4
+ const RING_TOKEN = "--ag-ui-highlight-ring-color";
5
+
6
+ /** The accent a host themes its page with, read from the target. */
7
+ const ACCENT_TOKEN = "--ag-ui-accent";
8
+
9
+ /**
10
+ * The accent the chat actually resolved, its theme's default included. Read
11
+ * through the private alias because the public token is unset on a page that
12
+ * themed nothing, which is exactly the page this exists for.
13
+ */
14
+ const CHAT_ACCENT = "--_accent";
15
+
16
+ /** The package indigo, for a page with no chat and no theming at all. */
17
+ const PACKAGE_ACCENT = "#4f46e5";
18
+
19
+ /**
20
+ * The colour a highlight ring is drawn in when the caller passed none.
21
+ *
22
+ * In order: `--ag-ui-highlight-ring-color` on the target, the same token on the chat, the
23
+ * target's `--ag-ui-accent`, the chat's resolved accent, the package indigo. The target's
24
+ * accent outranks the chat's default so a host theming its page keeps its rings; the ring
25
+ * token outranks both so a host can keep the ring apart from the accent. Only the
26
+ * chat's own accent is adjusted, since it follows the widget's scheme rather than the
27
+ * page's: it is held to 3:1 against the surface behind the target (see
28
+ * {@link surfaceBehind}) by trying the other half of its light-dark pair, then stepping
29
+ * toward black or white. Every other value is a host's choice and is drawn as given.
30
+ *
31
+ * `chat` defaults to the most recently connected `<ag-ui-chat>`.
32
+ */
33
+ export function ringColor(target: HTMLElement, chat?: HTMLElement): string {
34
+ const onTarget = readToken(target, RING_TOKEN);
35
+ if (onTarget !== "") {
36
+ return onTarget;
37
+ }
38
+ const owner = chat ?? ChatRegistration.latest();
39
+ const onChat = owner === null ? "" : resolveOn(owner, RING_TOKEN);
40
+ if (onChat !== "") {
41
+ return onChat;
42
+ }
43
+ const accent = readToken(target, ACCENT_TOKEN);
44
+ if (accent !== "") {
45
+ return accent;
46
+ }
47
+ if (owner === null) {
48
+ return PACKAGE_ACCENT;
49
+ }
50
+ const chatAccent = resolveOn(owner, CHAT_ACCENT);
51
+ return chatAccent === "" ? PACKAGE_ACCENT : legible(owner, chatAccent, target);
52
+ }
53
+
54
+ /** The contrast a ring needs against what it is drawn on (WCAG 2.4.13). */
55
+ const RING_CONTRAST = 3;
56
+
57
+ /** How far each step moves a failing accent toward black or white. */
58
+ const STEP = 0.1;
59
+
60
+ type Rgba = readonly [number, number, number, number];
61
+
62
+ /**
63
+ * `accent`, or the nearest variant of it that holds {@link RING_CONTRAST}
64
+ * against the surface behind `target`.
65
+ *
66
+ * Colours are compared as sRGB bytes painted onto a one-pixel canvas, the one
67
+ * reading that turns a resolved color-mix() or oklch() into numbers. Where
68
+ * there is no 2d context to paint on, nothing can be measured, and the accent
69
+ * is drawn as it was.
70
+ */
71
+ function legible(chat: HTMLElement, accent: string, target: HTMLElement): string {
72
+ const paint = document.createElement("canvas").getContext("2d", { willReadFrequently: true });
73
+ if (paint === null) {
74
+ return accent;
75
+ }
76
+ const bytes = (color: string): Rgba => {
77
+ paint.clearRect(0, 0, 1, 1);
78
+ paint.fillStyle = "rgb(0 0 0 / 0)";
79
+ paint.fillStyle = color;
80
+ paint.fillRect(0, 0, 1, 1);
81
+ const [r = 0, g = 0, b = 0, a = 0] = paint.getImageData(0, 0, 1, 1).data;
82
+ return [r, g, b, a / 255];
83
+ };
84
+ const surface = surfaceBehind(target, bytes);
85
+ const holds = (color: Rgba): boolean => contrast(over(color, surface), surface) >= RING_CONTRAST;
86
+ const own = [accent, resolveOn(chat, CHAT_ACCENT, "light"), resolveOn(chat, CHAT_ACCENT, "dark")];
87
+ const fit = own.find((candidate) => holds(bytes(candidate)));
88
+ if (fit !== undefined) {
89
+ return fit;
90
+ }
91
+ // Black or white, whichever the surface sets off better, holds at least
92
+ // 4.5:1 against any surface, so the walk always ends by the last step.
93
+ const from = over(bytes(accent), surface);
94
+ const black: Rgba = [0, 0, 0, 1];
95
+ const white: Rgba = [255, 255, 255, 1];
96
+ const toward = contrast(black, surface) > contrast(white, surface) ? black : white;
97
+ let step = 1;
98
+ while (!holds(mix(from, toward, step * STEP))) {
99
+ step += 1;
100
+ }
101
+ const [r, g, b] = mix(from, toward, step * STEP);
102
+ return `rgb(${r}, ${g}, ${b})`;
103
+ }
104
+
105
+ /**
106
+ * The colour of the surface a ring around `target` is drawn on, as opaque
107
+ * sRGB bytes.
108
+ *
109
+ * The ring sits outside the target's border box (the flash outline is offset
110
+ * from it, the overlay leaves a gap), so the target's own fill is not under
111
+ * it: a white field on a dark page is ringed on the dark page. The surface is
112
+ * every background from the target's parent up, composited until one is
113
+ * opaque, over the page canvas, which follows the root's colour scheme. A
114
+ * background image is not read; its colour beneath is.
115
+ */
116
+ function surfaceBehind(target: HTMLElement, bytes: (color: string) => Rgba): Rgba {
117
+ const layers: Rgba[] = [];
118
+ for (let el = parentOf(target); el !== null; el = parentOf(el)) {
119
+ const layer = bytes(window.getComputedStyle(el).backgroundColor);
120
+ layers.push(layer);
121
+ if (layer[3] === 1) {
122
+ break;
123
+ }
124
+ }
125
+ const probe = document.createElement("span");
126
+ probe.hidden = true;
127
+ probe.style.color = "Canvas";
128
+ document.documentElement.appendChild(probe);
129
+ let surface = bytes(window.getComputedStyle(probe).color);
130
+ probe.remove();
131
+ for (const layer of layers.reverse()) {
132
+ surface = over(layer, surface);
133
+ }
134
+ return surface;
135
+ }
136
+
137
+ /** The element above `el`, crossing out of a shadow root to its host. */
138
+ function parentOf(el: Element): Element | null {
139
+ if (el.parentElement !== null) {
140
+ return el.parentElement;
141
+ }
142
+ const root = el.getRootNode();
143
+ return root instanceof ShadowRoot ? root.host : null;
144
+ }
145
+
146
+ /** `top` painted over the opaque `under`. */
147
+ function over(top: Rgba, under: Rgba): Rgba {
148
+ return mix(under, top, top[3]);
149
+ }
150
+
151
+ /** `from` moved `share` of the way to `to`, as opaque bytes. */
152
+ function mix(from: Rgba, to: Rgba, share: number): Rgba {
153
+ const channel = (index: 0 | 1 | 2): number =>
154
+ Math.round(from[index] + (to[index] - from[index]) * share);
155
+ return [channel(0), channel(1), channel(2), 1];
156
+ }
157
+
158
+ /** WCAG relative luminance of opaque sRGB bytes. */
159
+ function luminance([r, g, b]: Rgba): number {
160
+ const linear = (channel: number): number => {
161
+ const c = channel / 255;
162
+ return c <= 0.04045 ? c / 12.92 : ((c + 0.055) / 1.055) ** 2.4;
163
+ };
164
+ return 0.2126 * linear(r) + 0.7152 * linear(g) + 0.0722 * linear(b);
165
+ }
166
+
167
+ /** WCAG contrast ratio between two opaque colours. */
168
+ function contrast(a: Rgba, b: Rgba): number {
169
+ const [la, lb] = [luminance(a), luminance(b)];
170
+ return (Math.max(la, lb) + 0.05) / (Math.min(la, lb) + 0.05);
171
+ }
172
+
173
+ function readToken(el: HTMLElement, name: string): string {
174
+ return window.getComputedStyle(el).getPropertyValue(name).trim();
175
+ }
176
+
177
+ /**
178
+ * The custom property `name` on `chat`, as the colour it computes to there, or `""` when
179
+ * unset or not a colour.
180
+ *
181
+ * Resolved by a probe inside the shadow tree, because the chat's colours are `light-dark()`
182
+ * pairs that a custom property keeps unresolved: on a page element the pair would follow the
183
+ * page's scheme. An element with no open shadow root is read as it is. `scheme` forces one
184
+ * half of the pair, to find the chat's other accent.
185
+ */
186
+ function resolveOn(chat: HTMLElement, name: string, scheme?: "light" | "dark"): string {
187
+ const value = readToken(chat, name);
188
+ const root = chat.shadowRoot;
189
+ if (value === "" || root === null) {
190
+ return value;
191
+ }
192
+ const probe = document.createElement("span");
193
+ probe.hidden = true;
194
+ if (scheme !== undefined) {
195
+ probe.style.colorScheme = scheme;
196
+ }
197
+ probe.style.color = value;
198
+ // An unparseable value leaves the declaration empty; the probe would report an inherited colour.
199
+ if (probe.style.color === "") {
200
+ return "";
201
+ }
202
+ root.appendChild(probe);
203
+ const resolved = window.getComputedStyle(probe).color;
204
+ probe.remove();
205
+ return resolved;
206
+ }
@@ -0,0 +1,5 @@
1
+ /** Dispatch the `input` then `change` events frameworks listen for. */
2
+ export function dispatchInputAndChange(el: HTMLElement): void {
3
+ el.dispatchEvent(new Event("input", { bubbles: true }));
4
+ el.dispatchEvent(new Event("change", { bubbles: true }));
5
+ }
package/src/index.ts ADDED
@@ -0,0 +1,220 @@
1
+ // The package root. The element itself is the `./chat` entry (src/chat.ts).
2
+
3
+ export {
4
+ ATTACHMENT_EVENT,
5
+ BAR_HEIGHT_EVENT,
6
+ CHART_ACTIVITY_TYPE,
7
+ COMPACTION_ACTIVITY_TYPE,
8
+ CUSTOM_AGENT_EVENT,
9
+ DOCK_WIDTH_EVENT,
10
+ ELEMENT_TAG,
11
+ FEEDBACK_EVENT,
12
+ INVALIDATE_CUSTOM_NAME,
13
+ INVALIDATE_EVENT,
14
+ LOAD_CAPABILITY_TOOL,
15
+ MAX_TOOL_ROUNDS,
16
+ MAXIMIZE_EVENT,
17
+ MESSAGE_ACTIONS,
18
+ MESSAGE_ROLE,
19
+ RUN_FINISHED_EVENT,
20
+ STATE_EVENT,
21
+ SUBMIT_EVENT,
22
+ SUGGESTIONS_ACTIVITY_TYPE,
23
+ THREAD_EVENT,
24
+ THREAD_TITLE_EVENT,
25
+ TOGGLE_EVENT,
26
+ TOOL_CALL_STATUS,
27
+ TOOL_DISPLAY,
28
+ TOOL_GROUP_DISPLAY,
29
+ TOOL_OUTCOME,
30
+ type ToolGroupDisplayMode,
31
+ UNREAD_EVENT,
32
+ X_CONFIRM_KEY,
33
+ X_DESTRUCTIVE_KEY,
34
+ X_NAVIGATES_KEY,
35
+ X_SUMMARY_KEY,
36
+ } from "./constants.js";
37
+ export type { ActivityRegistration } from "./core/activity_registration.js";
38
+ export type { ActivityRenderer } from "./core/activity_renderer.js";
39
+ export {
40
+ AgUiClient,
41
+ type AgUiClientConfig,
42
+ type AgUiClientHandlers,
43
+ type AgUiMessageIds,
44
+ type AgUiRunInputs,
45
+ type AgUiToolCall,
46
+ ConnectionLostError,
47
+ type ExecuteTool,
48
+ type InterruptResponse,
49
+ type ResolveInterrupts,
50
+ type ToolExecution,
51
+ } from "./core/agui_client.js";
52
+ export { type AttachmentRef, messageAttachments } from "./core/attachment.js";
53
+ export {
54
+ type ClientConversationStore,
55
+ type NavigationCheckpoint,
56
+ SessionStorageStore,
57
+ type ThreadMeta,
58
+ } from "./core/conversation_store.js";
59
+ export {
60
+ type AgentFactory,
61
+ createHttpAgent,
62
+ type HttpAgentOptions,
63
+ } from "./core/create_http_agent.js";
64
+ export type { AttachmentsDetail } from "./core/events/attachments_detail.js";
65
+ export type { BarHeightDetail } from "./core/events/bar_height_detail.js";
66
+ export type { CustomAgentDetail } from "./core/events/custom_agent_detail.js";
67
+ export type { DockWidthDetail } from "./core/events/dock_width_detail.js";
68
+ export type { FeedbackDetail } from "./core/events/feedback_detail.js";
69
+ export type { InvalidateDetail } from "./core/events/invalidate_detail.js";
70
+ export type { MaximizeDetail } from "./core/events/maximize_detail.js";
71
+ export type { RunFinishedDetail } from "./core/events/run_finished_detail.js";
72
+ export type { StateDetail } from "./core/events/state_detail.js";
73
+ export type { SubmitDetail } from "./core/events/submit_detail.js";
74
+ export type { ThreadDetail } from "./core/events/thread_detail.js";
75
+ export type { ThreadTitleDetail } from "./core/events/thread_title_detail.js";
76
+ export type { ToggleDetail } from "./core/events/toggle_detail.js";
77
+ export type { ToolRun } from "./core/events/tool_run.js";
78
+ export type { UnreadDetail } from "./core/events/unread_detail.js";
79
+ export type { MessageRole } from "./core/message_role.js";
80
+ export { RemoteConversationStore } from "./core/remote_conversation_store.js";
81
+ export { RunIndex, type RunRow } from "./core/run_index.js";
82
+ export { type ToolOutcome, toolStatusFromOutcome } from "./core/tool_outcome.js";
83
+ export {
84
+ type TranscribeHandler,
85
+ type TranscribeOptions,
86
+ transcribeAudio,
87
+ } from "./core/transcribe_audio.js";
88
+ export {
89
+ type UploadHandler,
90
+ type UploadOptions,
91
+ uploadAttachment,
92
+ } from "./core/upload_attachment.js";
93
+ export {
94
+ type FlashOptions,
95
+ flash,
96
+ focusWithFlash,
97
+ type HighlightClickOptions,
98
+ highlightThenClick,
99
+ type PressOptions,
100
+ prefersReducedMotion,
101
+ pressThenClick,
102
+ type RingOwnerOptions,
103
+ type ScrollOptions,
104
+ type SelectOptions,
105
+ scrollIntoCenterView,
106
+ selectOption,
107
+ type TextLikeElement,
108
+ type ToggleOptions,
109
+ type TypeOptions,
110
+ toggleControl,
111
+ typeInto,
112
+ } from "./dom/animations.js";
113
+ export {
114
+ clickElement,
115
+ type FillFieldOptions,
116
+ fillField,
117
+ pressButton,
118
+ selectControl,
119
+ setControlValue,
120
+ toggleCheckbox,
121
+ } from "./dom/dom_driver.js";
122
+ export {
123
+ type HighlightOverlayOptions,
124
+ showHighlightOverlay,
125
+ } from "./dom/highlight_overlay.js";
126
+ export { setNativeChecked, setNativeValue } from "./dom/native_setter.js";
127
+ export type { Skill } from "./skills/skill.js";
128
+ export {
129
+ CHAT_CORNERS,
130
+ type ChatCorner,
131
+ type ChatSurface,
132
+ type ChatSurfaceReport,
133
+ createChatSurfaceTools,
134
+ isChatCorner,
135
+ } from "./tools/chat_surface_tools.js";
136
+ export { type ClientTool, ClientToolRegistry } from "./tools/client_tool_registry.js";
137
+ export { isDestructive } from "./tools/is_destructive.js";
138
+ export { isNavigates } from "./tools/is_navigates.js";
139
+ export {
140
+ createPageActionTools,
141
+ PAGE_ACTIONS,
142
+ type ResolvePageTarget,
143
+ } from "./tools/page_action_tools.js";
144
+ export { createPageMapContext, type PageMap } from "./tools/page_map.js";
145
+ export { createPageStateTools, type PageState } from "./tools/page_state.js";
146
+ export { parseToolCatalog, type ToolCatalogEntry } from "./tools/parse_tool_catalog.js";
147
+ export {
148
+ createRouteTools,
149
+ type Route,
150
+ type RouteMap,
151
+ type RouteWithParams,
152
+ } from "./tools/route_map.js";
153
+ // Charts. `CHART_ACTIVITY_TYPE` above is the wire name a server sets on an
154
+ // ACTIVITY_SNAPSHOT; these are the shape it carries and the renderer itself,
155
+ // for a host building its own visual on the same seam.
156
+ export type { ChartKind, ChartSeries, ChartSpec } from "./ui/charts/chart_block.js";
157
+ export { renderChart } from "./ui/charts/chart_block.js";
158
+ export { chartSpecFrom } from "./ui/charts/chart_spec_from.js";
159
+ export { CHART_TOOL_NAME } from "./ui/charts/chart_tool.js";
160
+ export {
161
+ attachQuoteOffer,
162
+ type PageQuoteOffer,
163
+ type PageQuoteOfferOptions,
164
+ } from "./ui/excerpts/page_quote_offer.js";
165
+ // Quoting. The transcript wires these itself; they are exported for the half
166
+ // the component cannot reach -- a selection made in the **host page**, which
167
+ // a host reads its own way and hands to `AgUiChat.quote()`.
168
+ export {
169
+ asQuote,
170
+ MAX_QUOTE_CHARS,
171
+ type QuotableSelection,
172
+ quotableSelection,
173
+ } from "./ui/excerpts/quote_selection.js";
174
+ export { CheckpointMenu, type CheckpointVerb } from "./ui/history/checkpoint_menu.js";
175
+ export {
176
+ type RelativeTimeFormatter,
177
+ relativeTime,
178
+ } from "./ui/history/relative_time.js";
179
+ export {
180
+ type ApprovalOptions,
181
+ type ApprovalRenderer,
182
+ type ApprovalRequest,
183
+ requestApproval,
184
+ } from "./ui/interrupts/approval_card.js";
185
+ export {
186
+ type ConfirmationOptions,
187
+ type ConfirmationRequest,
188
+ requestConfirmation,
189
+ } from "./ui/interrupts/confirmation_card.js";
190
+ export {
191
+ type QuestionOptions,
192
+ type QuestionRenderer,
193
+ type QuestionRequest,
194
+ requestQuestion,
195
+ } from "./ui/interrupts/question_card.js";
196
+ export type { Place } from "./ui/place/place.js";
197
+ export { prettifyToolName } from "./ui/progress/prettify_tool_name.js";
198
+ export {
199
+ type SettledStatus,
200
+ ToolCallCard,
201
+ type ToolCallCardOptions,
202
+ type ToolCallStatus,
203
+ type ToolDisplayMode,
204
+ type ToolPayload,
205
+ type ToolPayloadFormatter,
206
+ } from "./ui/progress/tool_call_card.js";
207
+ export {
208
+ attachMessageActions,
209
+ type MessageActionsOptions,
210
+ messageActionBar,
211
+ } from "./ui/transcript/message_actions.js";
212
+ export { type RenderMarkdownOptions, renderMarkdown } from "./ui/transcript/render_markdown.js";
213
+ export {
214
+ MAX_SUGGESTION_CHARS,
215
+ MAX_SUGGESTIONS,
216
+ renderSuggestionChips,
217
+ suggestionPrompts,
218
+ } from "./ui/transcript/suggestion_chips.js";
219
+ export { DEFAULT_UI_STRINGS, mergeUiStrings, type UiStrings } from "./ui/ui_strings.js";
220
+ export { VERSION } from "./version.js";