@artooi/agents-web-components 0.0.0-stage → 0.1.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 (543) hide show
  1. package/CHANGELOG.md +68 -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,650 @@
1
+ // The package's single home for enums and constant-like values, and per
2
+ // CLAUDE.md the only file allowed to export multiple symbols.
3
+
4
+ /** The root every sessionStorage and localStorage key this package writes starts with. */
5
+ export const STORAGE_ROOT = "agents-web-components";
6
+
7
+ /** The Custom Element tag name registered by {@link defineChat}. */
8
+ export const ELEMENT_TAG = "ag-ui-chat";
9
+
10
+ /**
11
+ * User submitted a message. `detail` is {@link SubmitDetail}.
12
+ *
13
+ * Fires for every turn the user sends: with Send, through `sendMessage`, and
14
+ * as the next turn of a run resumed or forked from the checkpoint panel. A
15
+ * listener runs while that turn is already the one in flight, so a
16
+ * `sendMessage` from it is refused rather than starting a second run.
17
+ */
18
+ export const SUBMIT_EVENT = "ag-ui-submit";
19
+
20
+ /**
21
+ * Collapsed state changed, via the built-in toggle or `setCollapsed`; and,
22
+ * under `collapse-to="none"`, once at connect with the state it mounted in.
23
+ * `detail` is {@link ToggleDetail}.
24
+ */
25
+ export const TOGGLE_EVENT = "ag-ui-toggle";
26
+
27
+ /**
28
+ * Maximized state changed, via the built-in header control, the `maximized`
29
+ * property or attribute, or on leaving it for a collapse, a placement without
30
+ * the control, or a viewport of 600px or less. `detail` is {@link MaximizeDetail}.
31
+ */
32
+ export const MAXIMIZE_EVENT = "ag-ui-maximize";
33
+
34
+ /**
35
+ * The bottom bar's height changed (`collapse-to="bar"`): the host pads its
36
+ * page by it. `detail` is {@link BarHeightDetail}; 0 when no bar is drawn.
37
+ */
38
+ export const BAR_HEIGHT_EVENT = "ag-ui-bar-height";
39
+
40
+ /**
41
+ * The width a docked panel covers at rest changed (`placement="sidebar"` or
42
+ * `"side"`): the host pushes its page by it. `detail` is {@link DockWidthDetail};
43
+ * 0 when the panel covers none of the page.
44
+ */
45
+ export const DOCK_WIDTH_EVENT = "ag-ui-dock-width";
46
+
47
+ /**
48
+ * The count of answers that arrived while collapsed changed. `detail` is
49
+ * {@link UnreadDetail}. The built-in launcher badge renders exactly this; a
50
+ * host driving its own chrome sets `data-unread-badge="false"` and listens.
51
+ */
52
+ export const UNREAD_EVENT = "ag-ui-unread";
53
+
54
+ /**
55
+ * AG-UI shared state changed — a streamed `STATE_SNAPSHOT` / `STATE_DELTA`, or
56
+ * a host assignment to `sharedState`. `detail` is {@link StateDetail}.
57
+ *
58
+ * The protocol's own state channel, distinct from `registerPageState`, which
59
+ * exposes host state to the agent as ordinary tools.
60
+ */
61
+ export const STATE_EVENT = "ag-ui-state";
62
+
63
+ /**
64
+ * The attachment tray changed — a file queued, an upload finishing or failing,
65
+ * a chip removed, the tray cleared after a send. `detail` is
66
+ * {@link AttachmentsDetail}, carrying the refs that finished uploading and how
67
+ * many are still in flight. A host driving its own composer uses this to know
68
+ * whether a send would leave files behind.
69
+ */
70
+ export const ATTACHMENT_EVENT = "ag-ui-attachments";
71
+
72
+ /**
73
+ * An interaction has finished, whatever ended it. `detail` is
74
+ * {@link RunFinishedDetail}, listing the tools that ran and which side ran them.
75
+ *
76
+ * For hosts that render data the agent can change. A server-side tool writes
77
+ * without the page's knowledge — nothing else the element dispatches implies
78
+ * "something may have moved underneath you", so a page showing that data has no
79
+ * reason to refetch and quietly goes stale. Shared state
80
+ * ({@link STATE_EVENT}) is the richer channel, but it needs the agent to emit
81
+ * state; this needs nothing of the agent at all.
82
+ *
83
+ * Fires once per interaction rather than once per tool round, on completion,
84
+ * error and cancellation alike, since a partial write is still a write.
85
+ */
86
+ export const RUN_FINISHED_EVENT = "ag-ui-run-finished";
87
+
88
+ /**
89
+ * The conversation on screen changed: a new chat, a thread switched to, the
90
+ * active thread deleted, the stored thread restored, or a `user-key` change
91
+ * handing the element to another principal. `detail` is {@link ThreadDetail}.
92
+ *
93
+ * Fires once per change, after the transcript has been replaced, so a listener
94
+ * reads the conversation it is told about. A host listing conversations in its
95
+ * own chrome marks the active one from here rather than watching attributes.
96
+ */
97
+ export const THREAD_EVENT = "ag-ui-thread";
98
+
99
+ /**
100
+ * The title of the thread on screen changed: its first send, a rename, a
101
+ * switch, a new chat or a delete, or a title the conversation list brought in.
102
+ * `detail` is {@link ThreadTitleDetail}. `title-text="auto"` draws it in the
103
+ * header without a listener; a host drawing its own chrome listens.
104
+ */
105
+ export const THREAD_TITLE_EVENT = "ag-ui-thread-title";
106
+
107
+ /**
108
+ * The agent sent an AG-UI `CUSTOM` event. `detail` is {@link CustomAgentDetail}.
109
+ *
110
+ * `CUSTOM` is one of exactly two carriers whose payload name the protocol leaves
111
+ * an open string, and it is the **imperative** one: something for the host page
112
+ * to *do*, with no place in the transcript. Its sibling `ACTIVITY_SNAPSHOT`
113
+ * carries transcript **content**, which is why that one is materialised into a
114
+ * message, persisted, and replayed on restore while this one is not.
115
+ *
116
+ * That asymmetry is the rule for choosing between them. Content has a place in
117
+ * the conversation and should replay; an imperative has no place and no meaning
118
+ * once acted on, so replaying it on a thread load would be a bug. Anything that
119
+ * must survive a reload belongs on the other carrier.
120
+ *
121
+ * The element takes no view of what a name means -- it forwards every one. A
122
+ * host that does not recognise a name ignores the event, which is the graceful
123
+ * outcome the open field exists for.
124
+ */
125
+ export const CUSTOM_AGENT_EVENT = "ag-ui-custom";
126
+
127
+ /**
128
+ * The agent named resources its write has moved. `detail` is
129
+ * {@link InvalidateDetail}.
130
+ *
131
+ * A convention on top of {@link CUSTOM_AGENT_EVENT}, not a second channel: the
132
+ * wire carries an ordinary AG-UI `CUSTOM` event whose `name` is
133
+ * {@link INVALIDATE_CUSTOM_NAME}, and this is that one name routed to its own
134
+ * DOM event so a host does not have to string-match. Every other name still
135
+ * arrives as `ag-ui-custom`.
136
+ *
137
+ * Fires **as each announcement arrives**, during the run, which is what makes a
138
+ * long multi-step run feel live: the list refreshes as the third of eight writes
139
+ * lands rather than when everything finishes. {@link RUN_FINISHED_EVENT} carries
140
+ * the same keys again at the end, de-duplicated, for a host that would rather
141
+ * refetch once.
142
+ */
143
+ export const INVALIDATE_EVENT = "ag-ui-invalidate";
144
+
145
+ /**
146
+ * Fired when the user rates an assistant message from its action row.
147
+ *
148
+ * `detail` is a {@link FeedbackDetail}: which message was rated -- its AG-UI
149
+ * `messageId` and the `threadId` it belongs to, plus the `runId` that streamed
150
+ * it when it arrived live (absent on a restored message, which carries no run
151
+ * id) -- with its text and the rating. A host stores the rating against
152
+ * `messageId`, not `content`: two answers can read the same. A restored
153
+ * message is named by the id its store returns, so with a server-backed store
154
+ * the id holds across a reload only where the server persists the ids it
155
+ * streamed; the built-in browser store keeps them as they streamed.
156
+ *
157
+ * **Nothing is stored** -- a rating belongs to whatever the host already uses
158
+ * to hold product signals, and a write-only table inside a chat widget is a
159
+ * schema nobody reads.
160
+ */
161
+ export const FEEDBACK_EVENT = "ag-ui-feedback";
162
+
163
+ /**
164
+ * The `activity_type` carrying server-pushed follow-up prompts.
165
+ *
166
+ * Matches django-ag-ui's `SUGGESTIONS_ACTIVITY_TYPE`. A convention inside the
167
+ * protocol's open `activity_type` field, not an extension of it -- so a client
168
+ * that has never heard of it ignores the event, and this one is not privileged.
169
+ */
170
+ export const SUGGESTIONS_ACTIVITY_TYPE = "suggestions";
171
+
172
+ /**
173
+ * The AG-UI `CUSTOM` event `name` that carries an invalidation.
174
+ *
175
+ * Matched exactly. Namespaced so it cannot collide with a host's own custom
176
+ * events, which share the field.
177
+ */
178
+ export const INVALIDATE_CUSTOM_NAME = "ag_ui.invalidate";
179
+
180
+ /**
181
+ * The AG-UI `CUSTOM` event `name` carrying one step a delegated sub-agent took.
182
+ *
183
+ * Matched exactly, and namespaced the way {@link INVALIDATE_CUSTOM_NAME} is, so
184
+ * it cannot collide with a host's own custom events on the same open field.
185
+ *
186
+ * Routed to the delegating tool card rather than dispatched to the page: the
187
+ * payload keys on the **parent's own `delegate_task` call id**, so what it
188
+ * describes is already on screen and the progress belongs beside it. Every other
189
+ * name still reaches the host as {@link CUSTOM_AGENT_EVENT}.
190
+ *
191
+ * **This carries the steps only.** The delegation's own lifetime arrives on the
192
+ * protocol's `SUBAGENT_STARTED` / `SUBAGENT_FINISHED` / `SUBAGENT_ERROR` events,
193
+ * which name the same card through their `parentToolCallId`. The two are joined
194
+ * by that id, which is why the panel is keyed on it rather than on the
195
+ * `subagentRunId` the protocol's events carry.
196
+ *
197
+ * Deliberately on the imperative carrier and not on an activity, which means it
198
+ * is **never persisted and never replayed**. That is the right half of the
199
+ * split: a delegation that was live an hour ago is not live now, and replaying
200
+ * its progress on a thread restore would be a lie about a run that is over. On a
201
+ * reload mid-run the nested detail is gone and the tool card remains. The three
202
+ * lifecycle events share that property -- `@ag-ui/client` dispatches them to
203
+ * subscribers without writing them into `agent.messages` -- which is what made
204
+ * them safe to adopt while the steps stayed here.
205
+ */
206
+ export const SUBAGENT_CUSTOM_NAME = "ag_ui.subagent";
207
+
208
+ /**
209
+ * The phases one delegation moves through, as the panel draws them.
210
+ *
211
+ * Exactly one `STARTED` opens a delegation and exactly one `FINISHED` or
212
+ * `FAILED` closes it; the two tool phases repeat in between, once per call the
213
+ * child makes and once per result it gets back.
214
+ *
215
+ * **These are this element's five visual states, and they no longer come off one
216
+ * wire.** `TOOL_CALL` and `TOOL_RESULT` are spelled by the server, on the
217
+ * {@link SUBAGENT_CUSTOM_NAME} payload's `phase` field. The other three are this
218
+ * element's own names for the protocol's `SUBAGENT_STARTED` / `SUBAGENT_FINISHED`
219
+ * / `SUBAGENT_ERROR` events, which carry no phase field of their own because the
220
+ * event type *is* the phase. Keeping one vocabulary is what lets the panel stay
221
+ * a single state machine with one `data-phase` attribute for a host to style.
222
+ *
223
+ * `FAILED` carries **no exception text** from us — the protocol's error event
224
+ * has a required `message`, and the server sends only the sub-agent's name in
225
+ * it, on the same reasoning that redacts a `RUN_ERROR`, since an exception's
226
+ * words are written for an operator. The detail rides the ordinary
227
+ * `TOOL_CALL_RESULT` for that delegation, on the card the progress is already
228
+ * attached to.
229
+ */
230
+ export const SUBAGENT_PHASE = {
231
+ STARTED: "started",
232
+ TOOL_CALL: "tool_call",
233
+ TOOL_RESULT: "tool_result",
234
+ FINISHED: "finished",
235
+ FAILED: "failed",
236
+ } as const;
237
+
238
+ /** Roles a chat message can take. */
239
+ export const MESSAGE_ROLE = {
240
+ USER: "user",
241
+ ASSISTANT: "assistant",
242
+ } as const;
243
+
244
+ /**
245
+ * Schema-root key marking a tool destructive: the element gates its execution
246
+ * behind the confirmation card unless `autoConfirm` is set. All four `x-*` keys
247
+ * below mirror the `django-ag-ui` server side.
248
+ */
249
+ export const X_DESTRUCTIVE_KEY = "x-destructive";
250
+
251
+ /**
252
+ * Schema-root key holding a confirmation prompt (e.g. `"Activate this
253
+ * project?"`), shown instead of the generic `Run "<tool>"?`.
254
+ */
255
+ export const X_CONFIRM_KEY = "x-confirm";
256
+
257
+ /**
258
+ * Schema-root key holding a short label for a tool (e.g. `"Query orders"` for
259
+ * `query_model`), shown on the card instead of the raw tool name.
260
+ */
261
+ export const X_SUMMARY_KEY = "x-summary";
262
+
263
+ /**
264
+ * Schema-root key marking a tool as navigating — its handler triggers a full
265
+ * page reload. The element checkpoints the call before the reload and resumes
266
+ * the run loop once the next page mounts.
267
+ */
268
+ export const X_NAVIGATES_KEY = "x-navigates";
269
+
270
+ /**
271
+ * The built-in tool that re-reads the current page, registered only when a
272
+ * page-map provider is set. Named here because the stale-page guard must exempt
273
+ * it: refusing the one call that would refresh the agent's view deadlocks.
274
+ */
275
+ export const READ_PAGE_TOOL = "read_page";
276
+
277
+ /** The description of the context entry carrying the page map. */
278
+ export const PAGE_MAP_CONTEXT = "page_map";
279
+
280
+ /**
281
+ * The description of the context entry carrying the place the chip shows. Its
282
+ * value is the place as JSON: the label, and the detail and href when set.
283
+ */
284
+ export const PLACE_CONTEXT = "place";
285
+
286
+ /**
287
+ * Default upper bound on frontend tool-call → re-run rounds within one send.
288
+ * Overridable via `data-max-tool-rounds`, or `AgUiClientConfig.maxToolRounds`
289
+ * for a host driving the client directly.
290
+ */
291
+ export const MAX_TOOL_ROUNDS = 10;
292
+
293
+ /**
294
+ * The actions a finished assistant message's row can carry, and the tokens
295
+ * `data-message-actions` selects them by.
296
+ *
297
+ * All three are on when the attribute is absent. Naming them individually
298
+ * rather than shipping one on/off switch is what the three differ over: feedback
299
+ * is only useful to a host listening for {@link FEEDBACK_EVENT}, retry re-runs
300
+ * the agent and a constrained surface may not permit that, and copy is the one
301
+ * nobody objects to. A single switch would make dropping either of the first two
302
+ * cost the third, and a host that only wanted one gone would rebuild the row
303
+ * from `attachMessageActions` -- reimplementing the part names, the accessible
304
+ * grouping and the retry hand-off to lose two buttons.
305
+ */
306
+ export const MESSAGE_ACTIONS = {
307
+ COPY: "copy",
308
+ RETRY: "retry",
309
+ FEEDBACK: "feedback",
310
+ } as const;
311
+
312
+ /**
313
+ * Lifecycle status of a rendered tool-call card. A card opens as `PENDING`
314
+ * while the call runs, then settles to `DONE`, `ERROR`, `DECLINED` or
315
+ * `INTERRUPTED`.
316
+ *
317
+ * `INTERRUPTED` is a call that never produced a result and that nobody refused:
318
+ * the run was stopped or failed before it finished, or no tool here answered it.
319
+ * Neither of the older terminal states is true of it. `DONE` claimed a success
320
+ * nothing achieved, and `DECLINED` says a person or a guard refused.
321
+ *
322
+ * `DEFERRED` is the one non-terminal state that is not "running": a server-side
323
+ * tool a `ToolGuard` gated never executed, the run finished on an interrupt, and
324
+ * the call is waiting on a person. Without it such a card sat at `PENDING` and
325
+ * read "running…" while the stream was over and the server idle — a status enum
326
+ * missing a state does not omit that state, it renders it as whichever neighbour
327
+ * is closest, and here the closest one claimed the opposite of the truth. A
328
+ * *frontend* tool waiting on its own card (`ask_user`) stays `PENDING`, because
329
+ * the browser really is running it.
330
+ */
331
+ export const TOOL_CALL_STATUS = {
332
+ PENDING: "pending",
333
+ DEFERRED: "deferred",
334
+ DONE: "done",
335
+ ERROR: "error",
336
+ DECLINED: "declined",
337
+ INTERRUPTED: "interrupted",
338
+ } as const;
339
+
340
+ /**
341
+ * How a tool call ended, as the server states it under `outcome` in a
342
+ * `TOOL_CALL_RESULT`'s `metadata`.
343
+ *
344
+ * The vocabulary is pydantic-ai's own `ToolReturnPart.outcome`, carried whole
345
+ * rather than re-spelled, so the four repos that pass a refusal along agree on
346
+ * one word for it.
347
+ *
348
+ * **Absent means {@link TOOL_OUTCOME.SUCCESS}, and that is load-bearing.** Every
349
+ * server written before the field existed omits it, so a missing field has to
350
+ * render exactly as a plain result did — which is why this is an optional
351
+ * key in the event's metadata and not a required field. `FAILED` is a call that ran
352
+ * and failed; `DENIED` is one a person or a guard refused, so it never ran at
353
+ * all. The two are worth distinguishing on screen because only the second is
354
+ * something the user did. `INTERRUPTED` is a call that produced no result because
355
+ * the run ended first: pydantic-ai writes it when it repairs a history a
356
+ * cancelled stream left, and the element writes it for the same reason when a
357
+ * run ends with a call still unanswered, so the next request carries a result
358
+ * for every call without claiming anyone refused one.
359
+ *
360
+ * Anything *else* on the wire — a value from a later protocol version — is read
361
+ * as a success rather than rejected.
362
+ * A card is a claim about what happened, and "I do not know this word" is not
363
+ * grounds for claiming failure. `toolStatusFromOutcome` is where that is done.
364
+ */
365
+ export const TOOL_OUTCOME = {
366
+ SUCCESS: "success",
367
+ FAILED: "failed",
368
+ DENIED: "denied",
369
+ INTERRUPTED: "interrupted",
370
+ } as const;
371
+
372
+ /**
373
+ * Lifecycle status of a pending-attachment chip in the composer tray. A chip
374
+ * opens as `UPLOADING` (with a progress bar), then settles to `READY` (a durable
375
+ * ref) or `ERROR` (with a retry control).
376
+ */
377
+ export const ATTACHMENT_STATUS = {
378
+ UPLOADING: "uploading",
379
+ READY: "ready",
380
+ ERROR: "error",
381
+ } as const;
382
+
383
+ /**
384
+ * Default client-side upload size cap (10 MiB), matching django-ag-ui's
385
+ * `ATTACHMENT_MAX_BYTES`. Overridable via `data-attachment-max-bytes`; the
386
+ * server stays authoritative.
387
+ */
388
+ export const DEFAULT_ATTACHMENT_MAX_BYTES = 10 * 1024 * 1024;
389
+
390
+ /**
391
+ * How much detail a tool-call card shows. Set via `data-tool-display`; the
392
+ * default is `grouped`.
393
+ *
394
+ * - `grouped` — a run's consecutive calls fold into one quiet row ("Worked
395
+ * through 5 steps"), with the calls one click down as `full` cards, or as
396
+ * {@link TOOL_GROUP_DISPLAY} names.
397
+ * - `inline` — one status row (icon + summary), no card chrome, result behind
398
+ * its own toggle. Reads as a line of the answer rather than a boxed card.
399
+ * - `minimal` — tool name + status pill only. No args, no result body.
400
+ * - `compact` — name + status, args and result behind one "Details" toggle.
401
+ * - `full` — args inline, result behind its own toggle.
402
+ */
403
+ export const TOOL_DISPLAY = {
404
+ GROUPED: "grouped",
405
+ INLINE: "inline",
406
+ MINIMAL: "minimal",
407
+ COMPACT: "compact",
408
+ FULL: "full",
409
+ } as const;
410
+
411
+ /**
412
+ * How an opened step group draws its calls. Set via `data-tool-group-display`
413
+ * and read only while `data-tool-display` is `grouped`; an outer card mode
414
+ * flattens the groups into its own cards and this value is ignored there.
415
+ *
416
+ * The same four card modes as {@link TOOL_DISPLAY}, applied to the calls inside
417
+ * the group: `full` (the default, and what an absent or unknown value reads
418
+ * as), `compact`, `minimal` and `inline`. A call waiting on an approval shows
419
+ * its arguments in every one of them.
420
+ */
421
+ export const TOOL_GROUP_DISPLAY = {
422
+ INLINE: "inline",
423
+ MINIMAL: "minimal",
424
+ COMPACT: "compact",
425
+ FULL: "full",
426
+ } as const;
427
+
428
+ /** One of the {@link TOOL_GROUP_DISPLAY} values. */
429
+ export type ToolGroupDisplayMode = (typeof TOOL_GROUP_DISPLAY)[keyof typeof TOOL_GROUP_DISPLAY];
430
+
431
+ /**
432
+ * `activityType` of the `ACTIVITY_SNAPSHOT` event django-ag-ui emits when a
433
+ * compaction capability trimmed the history. `content` carries
434
+ * `{ removed, before, after }`.
435
+ */
436
+ export const COMPACTION_ACTIVITY_TYPE = "compaction";
437
+
438
+ /**
439
+ * Pydantic-AI's built-in tool for loading a deferred capability, with `{ id }`
440
+ * naming it. Agent skills are deferred capabilities keyed by skill name, so a
441
+ * call to this tool is the only signal that the agent picked a skill.
442
+ *
443
+ * Distinct from the host-provided {@link Skill} catalog, which is a human
444
+ * affordance launched from the slash palette.
445
+ */
446
+ export const LOAD_CAPABILITY_TOOL = "load_capability";
447
+
448
+ /**
449
+ * The chrome's glyphs, as inline SVG markup.
450
+ *
451
+ * Static author-written markup assigned as a `<slot>`'s fallback content, so it
452
+ * never passes through the sanitiser — nothing here is user or server data, and
453
+ * nothing user-supplied may be interpolated into it. Each icon is a 24x24
454
+ * viewBox carrying the shared `glyph` class, which `STYLES` sizes and paints
455
+ * from `currentColor`; `glyph--solid` fills instead of stroking. A host wanting
456
+ * its own mark projects a matching `slot="icon-…"` child instead of editing
457
+ * these.
458
+ */
459
+ export const ICON_SEND = `<svg class="glyph" viewBox="0 0 24 24" aria-hidden="true"><path d="M12 19.5V5m-6.5 6.5L12 5l6.5 6.5"/></svg>`;
460
+
461
+ /** The Stop glyph the composer button wears while a run is in flight. */
462
+ export const ICON_STOP = `<svg class="glyph glyph--solid" viewBox="0 0 24 24" aria-hidden="true"><rect x="7" y="7" width="10" height="10" rx="2.5"/></svg>`;
463
+
464
+ /** The file-picker glyph (a paperclip). */
465
+ export const ICON_ATTACH = `<svg class="glyph" viewBox="0 0 24 24" aria-hidden="true"><path d="M17 8.5V15a5 5 0 0 1-10 0V7a3 3 0 0 1 6 0v7.5a1 1 0 0 1-2 0V8.5"/></svg>`;
466
+
467
+ /** The voice-input glyph (a microphone on its stand). */
468
+ export const ICON_VOICE = `<svg class="glyph" viewBox="0 0 24 24" aria-hidden="true"><path d="M12 4a3 3 0 0 1 3 3v5a3 3 0 0 1-6 0V7a3 3 0 0 1 3-3z"/><path d="M5 11v1a7 7 0 0 0 14 0v-1"/><path d="M12 19v3"/></svg>`;
469
+
470
+ /** The place chip's mark when the place brings no icon of its own (a map pin). */
471
+ export const ICON_PLACE = `<svg class="glyph" viewBox="0 0 24 24" aria-hidden="true"><path d="M12 21s-6.5-5.6-6.5-11a6.5 6.5 0 0 1 13 0c0 5.4-6.5 11-6.5 11z"/><circle cx="12" cy="10" r="2.3"/></svg>`;
472
+
473
+ /** The place toggle while the place is sent (an open eye). */
474
+ export const ICON_PLACE_SHARED = `<svg class="glyph" viewBox="0 0 24 24" aria-hidden="true"><path d="M2.5 12s3.5-6.5 9.5-6.5 9.5 6.5 9.5 6.5-3.5 6.5-9.5 6.5S2.5 12 2.5 12z"/><circle cx="12" cy="12" r="2.8"/></svg>`;
475
+
476
+ /** The place toggle while the place is withheld (the eye struck through). */
477
+ export const ICON_PLACE_WITHHELD = `<svg class="glyph" viewBox="0 0 24 24" aria-hidden="true"><path d="M2.5 12s3.5-6.5 9.5-6.5c2 0 3.7.7 5.1 1.7M21.5 12s-3.5 6.5-9.5 6.5c-2 0-3.7-.7-5.1-1.7"/><path d="M4 20 20 4"/></svg>`;
478
+
479
+ /**
480
+ * The theme toggle's two marks, drawn rather than typed.
481
+ *
482
+ * They were the emoji `\u{1F319}` and `\u2600\uFE0F`, which is why this one
483
+ * control never sat right beside the others: an emoji is painted by the
484
+ * platform's own font, at its own weight and colour, and its ink routinely
485
+ * exceeds the text metrics it is laid out with -- so it drew outside the box
486
+ * measured for it and clipped, while every neighbour is a stroked path that
487
+ * fits its viewBox exactly.
488
+ *
489
+ * The moon is drawn as one closed crescent rather than a disc with a second
490
+ * disc cut out of it, because these are stroked (`fill: none`) and a cut-out
491
+ * needs a fill to hide anything.
492
+ */
493
+ export const ICON_MOON = `<svg class="glyph" viewBox="0 0 24 24" aria-hidden="true"><path d="M20 14.5A8.5 8.5 0 0 1 9.5 4a8.5 8.5 0 1 0 10.5 10.5z"/></svg>`;
494
+
495
+ /** The other half of the pair; see {@link ICON_MOON}. */
496
+ export const ICON_SUN = `<svg class="glyph" viewBox="0 0 24 24" aria-hidden="true"><circle cx="12" cy="12" r="4"/><path d="M12 2v2M12 20v2M4.9 4.9l1.4 1.4M17.7 17.7l1.4 1.4M2 12h2M20 12h2M4.9 19.1l1.4-1.4M17.7 6.3l1.4-1.4"/></svg>`;
497
+
498
+ /**
499
+ * The header controls' marks, drawn for the reason the theme pair is: typed
500
+ * glyphs (U+2630, U+21BA, U+271A, U+2014, U+25A1, U+2750) were painted by the
501
+ * platform font at its own weight and size, so they never matched the moon
502
+ * beside them. Maximize points outward, restore inward.
503
+ */
504
+ export const ICON_MAXIMIZE = `<svg class="glyph" viewBox="0 0 24 24" aria-hidden="true"><path d="M14 10l6-6M15 4h5v5M10 14l-6 6M4 15v5h5"/></svg>`;
505
+
506
+ /** The maximize control's mark while the panel is maximized; see {@link ICON_MAXIMIZE}. */
507
+ export const ICON_RESTORE = `<svg class="glyph" viewBox="0 0 24 24" aria-hidden="true"><path d="M20 4l-6 6M14 5v5h5M4 20l6-6M5 14h5v5"/></svg>`;
508
+
509
+ /**
510
+ * The collapse control's marks, chosen by `data-collapse-icon`. The panel mark
511
+ * is a window with its docked pane and an arrow into the edge it hides into;
512
+ * its left twin, and the up and left chevrons, are the right and down ones
513
+ * turned in the path data, so each mark is told apart by its paths alone.
514
+ */
515
+ export const ICON_PANEL_CLOSE_RIGHT = `<svg class="glyph" viewBox="0 0 24 24" aria-hidden="true"><rect x="3" y="4" width="18" height="16" rx="2.5"/><path d="M15 4v16"/><path d="M8 9.5l2.5 2.5L8 14.5"/></svg>`;
516
+
517
+ /** The panel mark for a panel docked to the left edge; see {@link ICON_PANEL_CLOSE_RIGHT}. */
518
+ export const ICON_PANEL_CLOSE_LEFT = `<svg class="glyph" viewBox="0 0 24 24" aria-hidden="true"><rect x="3" y="4" width="18" height="16" rx="2.5"/><path d="M9 4v16"/><path d="M16 9.5L13.5 12l2.5 2.5"/></svg>`;
519
+
520
+ /** A chevron down, the corner placements' collapse mark; see {@link ICON_PANEL_CLOSE_RIGHT}. */
521
+ export const ICON_CHEVRON_DOWN = `<svg class="glyph" viewBox="0 0 24 24" aria-hidden="true"><path d="M6 9.5l6 6 6-6"/></svg>`;
522
+
523
+ /** A chevron up; see {@link ICON_PANEL_CLOSE_RIGHT}. */
524
+ export const ICON_CHEVRON_UP = `<svg class="glyph" viewBox="0 0 24 24" aria-hidden="true"><path d="M6 14.5l6-6 6 6"/></svg>`;
525
+
526
+ /** A chevron right; see {@link ICON_PANEL_CLOSE_RIGHT}. */
527
+ export const ICON_CHEVRON_RIGHT = `<svg class="glyph" viewBox="0 0 24 24" aria-hidden="true"><path d="M9.5 6l6 6-6 6"/></svg>`;
528
+
529
+ /** A chevron left; see {@link ICON_PANEL_CLOSE_RIGHT}. */
530
+ export const ICON_CHEVRON_LEFT = `<svg class="glyph" viewBox="0 0 24 24" aria-hidden="true"><path d="M14.5 6l-6 6 6 6"/></svg>`;
531
+
532
+ /** The new-chat control's mark (a pencil on a square). */
533
+ export const ICON_NEW_CHAT = `<svg class="glyph" viewBox="0 0 24 24" aria-hidden="true"><path d="M11 4.5H6.5a2 2 0 0 0-2 2v11a2 2 0 0 0 2 2h11a2 2 0 0 0 2-2V13"/><path d="M17.5 3.5a2.1 2.1 0 0 1 3 3L12 15l-3.5 1 1-3.5z"/></svg>`;
534
+
535
+ /** The history control's mark (a clock with a back arrow). */
536
+ export const ICON_HISTORY = `<svg class="glyph" viewBox="0 0 24 24" aria-hidden="true"><path d="M3.5 12A8.5 8.5 0 1 0 6 6L3.5 8.5"/><path d="M3.5 4v4.5H8"/><path d="M12 7.5V12l3 2"/></svg>`;
537
+
538
+ /** The checkpoints control's mark (an arrow turning back, counter-clockwise). */
539
+ export const ICON_CHECKPOINTS = `<svg class="glyph" viewBox="0 0 24 24" aria-hidden="true"><path d="M9 14L4 9l5-5"/><path d="M4 9h10.5a5.5 5.5 0 0 1 0 11H11"/></svg>`;
540
+
541
+ /** The default launcher mark (a speech bubble), shown when the host slots none. */
542
+ export const ICON_LAUNCHER = `<svg class="glyph" viewBox="0 0 24 24" aria-hidden="true"><path d="M4 5.5A2.5 2.5 0 0 1 6.5 3h11A2.5 2.5 0 0 1 20 5.5v8a2.5 2.5 0 0 1-2.5 2.5H9l-5 4z"/></svg>`;
543
+
544
+ /**
545
+ * The generic attachment-chip mark, for a file family with nothing more
546
+ * specific to say. The chip marks share the contract of the chrome glyphs
547
+ * above; `iconFor` selects one by MIME family, never interpolating the MIME
548
+ * string into the markup.
549
+ */
550
+ /** Copy: two overlapping sheets, the shape every toolbar uses for it. */
551
+ export const ICON_COPY: string = `<svg class="glyph" viewBox="0 0 24 24" aria-hidden="true"><rect x="9" y="9" width="11" height="11" rx="2"/><path d="M5 15V6a2 2 0 0 1 2-2h8"/></svg>`;
552
+
553
+ /** Retry: a circular arrow. */
554
+ export const ICON_RETRY: string = `<svg class="glyph" viewBox="0 0 24 24" aria-hidden="true"><path d="M20 12a8 8 0 1 1-2.5-5.8"/><path d="M20 4v4h-4"/></svg>`;
555
+
556
+ /** Rate up. */
557
+ export const ICON_THUMB_UP: string = `<svg class="glyph" viewBox="0 0 24 24" aria-hidden="true"><path d="M7 10v10H4V10z"/><path d="M7 10l4.5-7a2 2 0 0 1 3.4 2L13.5 9H19a2 2 0 0 1 2 2.3l-1.1 6.4A2 2 0 0 1 17.9 20H7"/></svg>`;
558
+
559
+ /** Rate down: the up mark turned over, so the pair reads as one control. */
560
+ export const ICON_THUMB_DOWN: string = `<svg class="glyph" viewBox="0 0 24 24" aria-hidden="true"><path d="M17 14V4h3v10z"/><path d="M17 14l-4.5 7a2 2 0 0 1-3.4-2l1.4-4H5a2 2 0 0 1-2-2.3l1.1-6.4A2 2 0 0 1 6.1 4H17"/></svg>`;
561
+
562
+ export const ICON_FILE = `<svg class="glyph" viewBox="0 0 24 24" aria-hidden="true"><path d="M14 3H7a2 2 0 0 0-2 2v14a2 2 0 0 0 2 2h10a2 2 0 0 0 2-2V8z"/><path d="M14 3v5h5"/></svg>`;
563
+
564
+ /** An image attachment: a framed picture with a horizon and a sun. */
565
+ export const ICON_FILE_IMAGE = `<svg class="glyph" viewBox="0 0 24 24" aria-hidden="true"><rect x="3.5" y="4.5" width="17" height="15" rx="2.5"/><circle cx="9" cy="10" r="1.5"/><path d="M4.5 17.5 9 13.5l3.5 3 3-2.5 4.5 4"/></svg>`;
566
+
567
+ /** A PDF: the generic page, banded to read as a labelled document. */
568
+ export const ICON_FILE_PDF = `<svg class="glyph" viewBox="0 0 24 24" aria-hidden="true"><path d="M14 3H7a2 2 0 0 0-2 2v14a2 2 0 0 0 2 2h10a2 2 0 0 0 2-2V8z"/><path d="M14 3v5h5"/><rect class="glyph--solid" x="7.5" y="13.5" width="9" height="4.5" rx="1"/></svg>`;
569
+
570
+ /** A text document: the generic page, ruled. */
571
+ export const ICON_FILE_TEXT = `<svg class="glyph" viewBox="0 0 24 24" aria-hidden="true"><path d="M14 3H7a2 2 0 0 0-2 2v14a2 2 0 0 0 2 2h10a2 2 0 0 0 2-2V8z"/><path d="M14 3v5h5"/><path d="M8.5 13.5h7M8.5 17h4.5"/></svg>`;
572
+
573
+ /**
574
+ * ``activityType`` of the ``ACTIVITY_SNAPSHOT`` / ``ACTIVITY_DELTA`` events a
575
+ * server sends to draw a chart.
576
+ *
577
+ * A convention inside an extension point the protocol already provides, not a
578
+ * protocol extension: AG-UI defines the envelope and leaves ``activityType`` an
579
+ * open string. Another vendor's client does not know this name and ignores the
580
+ * event, which is the graceful outcome.
581
+ */
582
+ export const CHART_ACTIVITY_TYPE = "chart";
583
+
584
+ /**
585
+ * The gutter a floating panel *rests* at, before anyone has touched it.
586
+ *
587
+ * It matches the default `--ag-ui-inset` and the stylesheet's
588
+ * `--ag-ui-edge-gutter`, so an undragged widget resolves to exactly the
589
+ * placement it already had, and it is what the size cap subtracts so a resting
590
+ * panel grown to its limit stops at the far edge rather than one gutter past
591
+ * it.
592
+ *
593
+ * Not a limit on where a *person* may put the widget -- that is
594
+ * {@link SCREEN_EDGE_MARGIN}, and the two being one number is what made a
595
+ * dragged panel feel stuck short of every edge on all four sides at once.
596
+ */
597
+ export const EDGE_MARGIN = 24;
598
+
599
+ /**
600
+ * How long a screen-reader status stays in the announcer before it is emptied.
601
+ *
602
+ * Long enough for a reader to pick the change up, short enough that the region
603
+ * is empty again before the next status lands. Emptying is what makes an
604
+ * identical consecutive message announce at all -- a live region is read on
605
+ * *change*, and setting the same string twice is not one.
606
+ */
607
+ export const ANNOUNCE_CLEAR_MS = 150;
608
+
609
+ /**
610
+ * Stacking order for the host-page highlight overlay.
611
+ *
612
+ * One above the widget's own default, because the overlay's whole job is to
613
+ * point at something on the page the widget is sitting over -- a ring drawn
614
+ * underneath the panel would be hidden by the thing that asked for it. It takes
615
+ * no pointer events at any point, so being on top costs the page nothing.
616
+ */
617
+ export const HIGHLIGHT_OVERLAY_Z_INDEX = 2147483001;
618
+
619
+ /**
620
+ * How many characters a pasted string has to reach before it becomes an
621
+ * attachment rather than composer text.
622
+ *
623
+ * The composer is capped at 40vh, so anything near this is already taller than
624
+ * the box that holds it: the user cannot read what they pasted or edit around
625
+ * it. Roughly where the field stops being usable rather than a number with a
626
+ * meaning of its own -- `data-paste-attach` moves it.
627
+ */
628
+ export const PASTE_ATTACH_CHARS = 5000;
629
+
630
+ /**
631
+ * How close the launcher may be pushed to the edge of the screen.
632
+ *
633
+ * Not the panel's 24px gutter, which was rejected here on purpose: a launcher
634
+ * held that far in refuses the corners people actually drag it to. But zero is
635
+ * wrong too. The bubble is a circle with a drop shadow, and one sitting flush
636
+ * against the edge has its shadow cut and its curve running into the boundary,
637
+ * which reads as clipped whether or not a single pixel is missing -- and on a
638
+ * screen with rounded corners, or under a scrollbar, it is genuinely clipped.
639
+ *
640
+ * Small enough that every corner is still reachable, large enough that the
641
+ * circle always closes.
642
+ *
643
+ * The panel obeys the same bound, for the same reason: it is a rounded box
644
+ * with the same drop shadow, and there is no account of why a bubble held off
645
+ * the boundary should sit beside a panel welded to it. Before this was shared
646
+ * there were four answers to one question -- a drag stopped at 0, a resize at
647
+ * 0, a restore at 24 and the launcher at 8 -- so a panel dragged flush leapt
648
+ * 24px inward the next time anything re-placed it.
649
+ */
650
+ export const SCREEN_EDGE_MARGIN = 8;
@@ -0,0 +1,19 @@
1
+ import type { ActivityRenderer } from "./activity_renderer.js";
2
+
3
+ /** One `activity_type` a host can draw. See {@link AgUiChat.registerActivityRenderer}. */
4
+ export interface ActivityRegistration {
5
+ /**
6
+ * The AG-UI `activity_type` this draws, matched exactly.
7
+ *
8
+ * An open string the protocol does not enumerate -- which is the whole reason
9
+ * this is a registry rather than a branch.
10
+ */
11
+ readonly type: string;
12
+ readonly render: ActivityRenderer;
13
+ /**
14
+ * Shown in the transcript when something already drawn under this type stops
15
+ * being renderable. Omit for an activity whose disappearance needs no
16
+ * explanation.
17
+ */
18
+ readonly removedNotice?: string;
19
+ }