@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,486 @@
1
+ // Tool steps: the per-call card in each display mode, its status glyphs, and
2
+ // the sub-agent progress a delegating card holds. The skill palette's token
3
+ // mark sits among them only because no rule moved in the split.
4
+ export const TOOL_STEP_STYLES: string = `
5
+ .tool-call {
6
+ align-self: flex-start;
7
+ max-width: 80%;
8
+ box-sizing: border-box;
9
+ display: flex;
10
+ flex-direction: column;
11
+ gap: 6px;
12
+ font-size: 12px;
13
+ font-family: ui-monospace, "SF Mono", Menlo, monospace;
14
+ padding: 8px 10px;
15
+ border-radius: 8px;
16
+ background: var(--_tool-bg);
17
+ border: 1px solid var(--_border);
18
+ color: var(--_tool-fg);
19
+ }
20
+
21
+ /* Wraps, because the name is the only flexible child and every badge the row
22
+ gains is taken out of it. An approved call adds a third fixed badge, which in
23
+ a sidebar-width panel left the name 37px and broke it mid-word. Badges drop to
24
+ their own row instead. */
25
+ .tool-call-head {
26
+ display: flex;
27
+ flex-wrap: wrap;
28
+ align-items: center;
29
+ justify-content: space-between;
30
+ gap: 8px;
31
+ }
32
+
33
+ .tool-call-name {
34
+ /* An auto basis, and a min-width floor rather than zero: the name may shrink,
35
+ but not below something readable, so wrapping moves a badge instead of
36
+ shredding a word. Breaking anywhere still applies to a name that cannot fit
37
+ on a line of its own, which is what keeps a long unbroken tool name inside
38
+ the card. */
39
+ flex: 1 1 auto;
40
+ min-width: 6ch;
41
+ font-weight: 600;
42
+ overflow-wrap: anywhere;
43
+ }
44
+
45
+ /* Leading status icon. Empty in the DOM — the glyph/spinner is drawn
46
+ here from the card's data-status, so it stays themeable. */
47
+ .tool-call-icon {
48
+ flex: none;
49
+ box-sizing: border-box;
50
+ display: inline-flex;
51
+ align-items: center;
52
+ justify-content: center;
53
+ width: 14px;
54
+ height: 14px;
55
+ font-size: 12px;
56
+ line-height: 1;
57
+ }
58
+
59
+ /* Pending: a real spinning ring. Speed is tunable; reduced motion stops it. */
60
+ .tool-call[data-status="pending"] .tool-call-icon {
61
+ border: 2px solid var(--_muted);
62
+ border-top-color: transparent;
63
+ border-radius: 50%;
64
+ animation: ag-ui-tool-spin var(--_tool-spin-duration) linear infinite;
65
+ }
66
+
67
+ @keyframes ag-ui-tool-spin {
68
+ to { transform: rotate(360deg); }
69
+ }
70
+
71
+ /* Deferred: no spinner, because nothing is spinning. A steady accent dot, since
72
+ the state is waiting-on-you rather than an outcome. */
73
+ .tool-call[data-status="deferred"] .tool-call-icon {
74
+ border-radius: 50%;
75
+ background: var(--_accent);
76
+ }
77
+
78
+ /* Settled: a themeable glyph coloured by outcome. */
79
+ .tool-call[data-status="done"] .tool-call-icon::before {
80
+ content: var(--_tool-icon-done);
81
+ color: var(--_success);
82
+ }
83
+
84
+ .tool-call[data-status="error"] .tool-call-icon::before {
85
+ content: var(--_tool-icon-error);
86
+ color: var(--_danger);
87
+ }
88
+
89
+ .tool-call[data-status="declined"] .tool-call-icon::before {
90
+ content: var(--_tool-icon-declined);
91
+ color: var(--_muted);
92
+ }
93
+
94
+ /* Not finished: muted like declined, since nothing failed, but its own glyph,
95
+ since nobody refused it either. */
96
+ .tool-call[data-status="interrupted"] .tool-call-icon::before {
97
+ content: var(--_tool-icon-interrupted);
98
+ color: var(--_muted);
99
+ }
100
+
101
+ @media (prefers-reduced-motion: reduce) {
102
+ .tool-call[data-status="pending"] .tool-call-icon {
103
+ animation: none;
104
+ }
105
+ }
106
+
107
+ /* Inline display mode: the lightest card. Drop the box chrome so the status row
108
+ reads as one line of the answer; the result toggle still expands below it. */
109
+ :host([data-tool-display="inline"]) .tool-call {
110
+ max-width: 100%;
111
+ background: transparent;
112
+ border: none;
113
+ padding: 2px 0;
114
+ gap: 2px;
115
+ }
116
+
117
+ .tool-call-status {
118
+ flex: none;
119
+ padding: 1px 8px;
120
+ border-radius: 999px;
121
+ font-size: 11px;
122
+ font-weight: 600;
123
+ background: rgba(127, 127, 127, 0.16);
124
+ color: var(--_muted);
125
+ }
126
+
127
+ .tool-call[data-status="deferred"] .tool-call-status {
128
+ color: var(--_accent);
129
+ }
130
+
131
+ .tool-call[data-status="done"] .tool-call-status {
132
+ color: var(--_success);
133
+ }
134
+
135
+ .tool-call[data-status="error"] .tool-call-status {
136
+ color: var(--_danger);
137
+ }
138
+
139
+ .tool-call[data-status="declined"] .tool-call-status,
140
+ .tool-call[data-status="interrupted"] .tool-call-status {
141
+ color: var(--_muted);
142
+ }
143
+
144
+ .tool-call-body {
145
+ display: flex;
146
+ flex-direction: column;
147
+ gap: 6px;
148
+ }
149
+
150
+ .tool-call-section {
151
+ display: flex;
152
+ flex-direction: column;
153
+ gap: 3px;
154
+ }
155
+
156
+ /* A call with no arguments drops the region rather than framing an empty
157
+ object, and a settled card drops the result region until it has one -- both
158
+ by setting the hidden property, and an author display beats the user-agent
159
+ rule for that attribute. Without this the region kept laying out: 42px of
160
+ card holding the ARGUMENTS heading over nothing, on every call the agent
161
+ made with no arguments, in the display mode that shows arguments by
162
+ default. */
163
+ .tool-call-section[hidden] {
164
+ display: none;
165
+ }
166
+
167
+ /* The heading that tells the two payloads apart. Without it the arguments and
168
+ the result were one run of text and a reader had to guess the boundary. */
169
+ .tool-call-section-label {
170
+ font-size: 10px;
171
+ font-weight: 700;
172
+ letter-spacing: 0.06em;
173
+ text-transform: uppercase;
174
+ color: var(--_muted);
175
+ }
176
+
177
+ .skill-item-token {
178
+ font-family: ui-monospace, "SF Mono", Menlo, monospace;
179
+ font-size: 0.92em;
180
+ color: var(--_accent);
181
+ margin-right: 6px;
182
+ }
183
+
184
+ /* The lasting record of a human decision on a gated call — without it an
185
+ approved call looks exactly like one that was never gated. */
186
+ .tool-call-decision {
187
+ flex: none;
188
+ font-size: 11px;
189
+ font-style: italic;
190
+ color: var(--_muted);
191
+ }
192
+
193
+ .tool-call-args,
194
+ .tool-call-result {
195
+ margin: 0;
196
+ padding: 6px 8px;
197
+ max-height: 160px;
198
+ overflow: auto;
199
+ background: var(--_bg);
200
+ border: 1px solid var(--_border);
201
+ border-radius: 6px;
202
+ white-space: pre-wrap;
203
+ word-break: break-word;
204
+ color: var(--_fg);
205
+ }
206
+
207
+ /* A region a host formatter took over, marked by the card. Preformatted
208
+ whitespace is what makes the built-in block read as written, and it is the one
209
+ thing a host cannot want: a table inherits it as mangled cell spacing, and a
210
+ sentence as line breaks nobody typed.
211
+
212
+ Whitespace only. The card's own face, frame, padding and scroll cap stay,
213
+ because the card is one visual object -- the head row and the status pill are
214
+ monospaced too -- and a region that dropped the family would be the only part
215
+ of it wearing a different one. A host that wants that restyles the
216
+ tool-card-result part, which does not need the formatter at all. */
217
+ .tool-call-args[data-formatted],
218
+ .tool-call-result[data-formatted] {
219
+ white-space: normal;
220
+ }
221
+
222
+ /* Display modes are pure visibility over one DOM shape, selected from the host
223
+ attribute rather than a value stamped on the card at build time, so flipping
224
+ data-tool-display re-styles cards already on screen. See ToolCallCard.
225
+
226
+ Default (no attribute) is the full mode: arguments always visible, result
227
+ behind the toggle. */
228
+ .tool-call[data-expanded="false"] .tool-call-section--result {
229
+ display: none;
230
+ }
231
+
232
+ /* Compact: one toggle over both regions, so a settled card is a single line
233
+ until asked. */
234
+ :host([data-tool-display="compact"]) .tool-call[data-expanded="false"] .tool-call-section {
235
+ display: none;
236
+ }
237
+
238
+ /* Inline: the result only; the call's arguments are noise at this density. */
239
+ :host([data-tool-display="inline"]) .tool-call .tool-call-section--args {
240
+ display: none;
241
+ }
242
+
243
+ /* Minimal: the status row and nothing else, so there is no toggle to press. */
244
+ :host([data-tool-display="minimal"]) .tool-call .tool-call-toggle,
245
+ :host([data-tool-display="minimal"]) .tool-call .tool-call-body {
246
+ display: none;
247
+ }
248
+
249
+ /* A pending card has no result yet, and in the modes where the arguments are
250
+ hidden too there is nothing behind the toggle. Hide the control rather than
251
+ offer one that expands onto nothing. A deferred card is the same, and its
252
+ arguments are shown unconditionally by the rules below. */
253
+ .tool-call[data-status="pending"] .tool-call-toggle,
254
+ .tool-call[data-status="deferred"] .tool-call-toggle,
255
+ :host([data-tool-display="inline"]) .tool-call[data-status="pending"] .tool-call-toggle {
256
+ display: none;
257
+ }
258
+
259
+ /* A settled card offers the toggle only over something. The card marks
260
+ non-empty arguments with data-has-args and a non-blank result with
261
+ data-has-result, and a call with neither has nothing behind it in any
262
+ mode. Full shows the arguments without the toggle and inline never shows
263
+ them, so there only a result is worth opening; compact folds both. A
264
+ step group restates the full and inline half for the calls inside it. */
265
+ .tool-call:not([data-has-args]):not([data-has-result]) .tool-call-toggle,
266
+ :host([data-tool-display="full"]) .tool-call:not([data-has-result]) .tool-call-toggle,
267
+ :host([data-tool-display="inline"]) .tool-call:not([data-has-result]) .tool-call-toggle {
268
+ display: none;
269
+ }
270
+
271
+ /* The approval prompt for a gated call, rendered inside that call's own card.
272
+ Empty on every card nobody is being asked about, so it collapses instead of
273
+ adding a gap to each one. */
274
+ .tool-call-approval:empty {
275
+ display: none;
276
+ }
277
+
278
+ .tool-call-approval {
279
+ margin-top: 8px;
280
+ }
281
+
282
+ /* A card that is asking a question shows what it is asking about, in every
283
+ display mode. Three gated calls of one tool ask the same words, so the
284
+ arguments are the only thing telling them apart, and a density setting must
285
+ not be able to hide the answer to "which one is this". */
286
+ :host([data-tool-display="minimal"]) .tool-call[data-status="deferred"] .tool-call-body {
287
+ display: flex;
288
+ }
289
+
290
+ /* The arguments region only, never every section: the result region carries the
291
+ hidden attribute until a result exists, and a display value here overrides it,
292
+ framing an empty RESULT heading under the question. The arguments region is
293
+ hidden too when the call has none, and is left alone then, or it would frame
294
+ an empty ARGUMENTS heading. */
295
+ :host([data-tool-display="compact"]) .tool-call[data-status="deferred"] .tool-call-section--args:not([hidden]),
296
+ :host([data-tool-display="inline"]) .tool-call[data-status="deferred"] .tool-call-section--args:not([hidden]) {
297
+ display: flex;
298
+ }
299
+
300
+ /* A delegated sub-agent's progress, inside the card that delegated. Empty on
301
+ every card that delegated nothing, so it collapses rather than adding a gap
302
+ to each one -- the same shape the approval slot uses. */
303
+ .tool-call-subagent:empty {
304
+ display: none;
305
+ }
306
+
307
+ .tool-call-subagent {
308
+ display: flex;
309
+ flex-direction: column;
310
+ gap: 4px;
311
+ }
312
+
313
+ .subagent {
314
+ display: flex;
315
+ flex-direction: column;
316
+ gap: 4px;
317
+ min-width: 0;
318
+ }
319
+
320
+ /* The collapsed row is the status and the expander at once, which is what keeps
321
+ a ten-step child one row until somebody opens it. Full width and left-aligned,
322
+ because it is a line of the card rather than a button on it. */
323
+ .subagent-row {
324
+ display: flex;
325
+ align-items: center;
326
+ gap: 6px;
327
+ width: 100%;
328
+ box-sizing: border-box;
329
+ padding: 2px 0;
330
+ border: none;
331
+ background: none;
332
+ font: inherit;
333
+ text-align: left;
334
+ color: var(--_muted);
335
+ cursor: pointer;
336
+ }
337
+
338
+ /* Nothing behind the row yet -- a delegation that failed before calling
339
+ anything. Drop the affordances rather than offer a control that expands onto
340
+ an empty region, which is the refusal the card's own toggle already makes. */
341
+ .subagent-row:disabled {
342
+ cursor: default;
343
+ }
344
+
345
+ .subagent-row::after {
346
+ content: var(--_disclosure-collapsed);
347
+ flex: none;
348
+ margin-left: auto;
349
+ color: var(--_accent);
350
+ }
351
+
352
+ .subagent-row[aria-expanded="true"]::after {
353
+ content: var(--_disclosure-expanded);
354
+ }
355
+
356
+ .subagent-row:disabled::after {
357
+ display: none;
358
+ }
359
+
360
+ /* Empty in the DOM; the glyph is drawn here from the panel's data-phase, so a
361
+ host re-themes it through the same tool-icon custom properties the card uses. */
362
+ .subagent-icon {
363
+ flex: none;
364
+ box-sizing: border-box;
365
+ display: inline-flex;
366
+ align-items: center;
367
+ justify-content: center;
368
+ width: 10px;
369
+ height: 10px;
370
+ font-size: 10px;
371
+ line-height: 1;
372
+ }
373
+
374
+ /* Anything that is not a terminal phase is the child still working. Selected by
375
+ what it is not, so a phase this client has not heard of still spins rather
376
+ than rendering as a blank. */
377
+ .subagent[data-phase]:not([data-phase="finished"]):not([data-phase="failed"]) .subagent-icon {
378
+ border: 2px solid var(--_muted);
379
+ border-top-color: transparent;
380
+ border-radius: 50%;
381
+ animation: ag-ui-tool-spin var(--_tool-spin-duration) linear infinite;
382
+ }
383
+
384
+ .subagent[data-phase="finished"] .subagent-icon::before {
385
+ content: var(--_tool-icon-done);
386
+ color: var(--_success);
387
+ }
388
+
389
+ .subagent[data-phase="failed"] .subagent-icon::before {
390
+ content: var(--_tool-icon-error);
391
+ color: var(--_danger);
392
+ }
393
+
394
+ @media (prefers-reduced-motion: reduce) {
395
+ .subagent .subagent-icon {
396
+ animation: none;
397
+ }
398
+ }
399
+
400
+ /* The server's own pre-rendered line. Shrinks and wraps rather than pushing the
401
+ chevron out of the card, which is what a fixed-width sibling in a flex row
402
+ does to a panel at sidebar width. */
403
+ .subagent-status {
404
+ flex: 1 1 auto;
405
+ min-width: 0;
406
+ overflow-wrap: anywhere;
407
+ }
408
+
409
+ /* The child's own calls. Indented and ruled, so the nesting is visible without
410
+ a second card frame around it. */
411
+ .subagent-steps {
412
+ display: flex;
413
+ flex-direction: column;
414
+ gap: 2px;
415
+ margin-left: 4px;
416
+ padding-left: 10px;
417
+ border-left: 1px solid var(--_border);
418
+ }
419
+
420
+ .subagent-steps[hidden] {
421
+ display: none;
422
+ }
423
+
424
+ .subagent-step {
425
+ display: flex;
426
+ align-items: center;
427
+ gap: 6px;
428
+ min-width: 0;
429
+ color: var(--_muted);
430
+ }
431
+
432
+ .subagent-step-icon {
433
+ flex: none;
434
+ box-sizing: border-box;
435
+ display: inline-flex;
436
+ align-items: center;
437
+ justify-content: center;
438
+ width: 8px;
439
+ height: 8px;
440
+ font-size: 9px;
441
+ line-height: 1;
442
+ }
443
+
444
+ /* No outcome yet: the wire says null while the call is in flight, and the
445
+ absence of the attribute is how that arrives here. A hollow ring, not a
446
+ spinner -- several can be on screen at once and the row above already spins. */
447
+ .subagent-step:not([data-ok]) .subagent-step-icon {
448
+ border: 1px solid var(--_muted);
449
+ border-radius: 50%;
450
+ }
451
+
452
+ .subagent-step[data-ok="true"] .subagent-step-icon::before {
453
+ content: var(--_tool-icon-done);
454
+ color: var(--_success);
455
+ }
456
+
457
+ .subagent-step[data-ok="false"] .subagent-step-icon::before {
458
+ content: var(--_tool-icon-error);
459
+ color: var(--_danger);
460
+ }
461
+
462
+ .subagent-step-name {
463
+ flex: 1 1 auto;
464
+ min-width: 0;
465
+ overflow-wrap: anywhere;
466
+ }
467
+
468
+ .tool-call-toggle {
469
+ align-self: flex-start;
470
+ border: none;
471
+ padding: 0;
472
+ background: none;
473
+ font: inherit;
474
+ font-weight: 600;
475
+ color: var(--_accent);
476
+ cursor: pointer;
477
+ }
478
+
479
+ .tool-call-toggle::before {
480
+ content: var(--_disclosure-collapsed) " ";
481
+ }
482
+
483
+ .tool-call-toggle[aria-expanded="true"]::before {
484
+ content: var(--_disclosure-expanded) " ";
485
+ }
486
+ `;
@@ -0,0 +1,34 @@
1
+ import { STYLES } from "../styles.js";
2
+
3
+ /**
4
+ * Attach the stylesheet to `root` without an inline `<style>` element.
5
+ *
6
+ * A host with a strict `style-src` and no `'unsafe-inline'` drops an injected
7
+ * `<style>` silently: the component mounts, functions, and renders completely
8
+ * unstyled, with nothing in the console to point at. `adoptedStyleSheets`
9
+ * carries no inline-style origin, so it is unaffected by that policy.
10
+ *
11
+ * The sheet is constructed **per call**, which is once per mounted element,
12
+ * rather than shared at module scope. A shared sheet would additionally avoid
13
+ * re-parsing the stylesheet once per mounted element, which is what
14
+ * `adoptedStyleSheets` is usually reached for -- but a module-level singleton
15
+ * is exactly what this package forbids, and the CSP defect is fixed either way.
16
+ * Per instance is no worse than the `<style>` element it replaces, which also
17
+ * parsed once per mount.
18
+ *
19
+ * `extra` is the element's `extraStyles`, adopted after the built-in sheet so
20
+ * a host's rules win at equal specificity. They are constructed sheets too, so
21
+ * they inherit the same CSP immunity.
22
+ *
23
+ * No fallback: constructible `CSSStyleSheet` is Chrome 73, Firefox 101 and
24
+ * Safari 16.4, all below this package's browser floor (Chrome 123, Firefox
25
+ * 120, Safari 17.5). A guard here would be code no supported browser can
26
+ * reach, and the only way to keep it would be to exempt it from the coverage
27
+ * gate.
28
+ */
29
+ export function adoptStyles(root: ShadowRoot, extra: readonly CSSStyleSheet[] = []): CSSStyleSheet {
30
+ const sheet = new CSSStyleSheet();
31
+ sheet.replaceSync(STYLES);
32
+ root.adoptedStyleSheets = [sheet, ...extra];
33
+ return sheet;
34
+ }
@@ -0,0 +1,121 @@
1
+ import {
2
+ ICON_CHECKPOINTS,
3
+ ICON_CHEVRON_DOWN,
4
+ ICON_HISTORY,
5
+ ICON_MAXIMIZE,
6
+ ICON_NEW_CHAT,
7
+ } from "../../constants.js";
8
+ import type { UiStrings } from "../ui_strings.js";
9
+ import { headerButton } from "./header_button.js";
10
+ import { iconElement } from "./icon_element.js";
11
+
12
+ /** What {@link buildHeader} needs from the element that owns the header. */
13
+ export interface HeaderOptions {
14
+ /** The element itself, asked whether a host slotted an icon. */
15
+ readonly host: HTMLElement;
16
+ /** The title node, kept by the element so a later `title-text` can update it. */
17
+ readonly title: HTMLElement;
18
+ readonly titleText: string;
19
+ readonly iconUrl: string | null;
20
+ readonly strings: UiStrings;
21
+ /** Whether the server indexes runs, so there is anything to continue. */
22
+ readonly withCheckpoints: boolean;
23
+ /** The opt-in theme toggle, or `null` when the host did not ask for one. */
24
+ readonly themeToggle: HTMLButtonElement | null;
25
+ readonly signal: AbortSignal;
26
+ readonly onHistory: () => void;
27
+ readonly onCheckpoints: () => void;
28
+ readonly onNewChat: () => void;
29
+ readonly onCollapse: () => void;
30
+ readonly onMaximize: () => void;
31
+ readonly onToggleTheme: () => void;
32
+ }
33
+
34
+ /** The header, and the one control the element still needs a handle on. */
35
+ export interface BuiltHeader {
36
+ readonly header: HTMLElement;
37
+ /**
38
+ * The checkpoints button, built whether or not it is shown: the click-away
39
+ * handler for the checkpoints popover has to exclude it either way.
40
+ */
41
+ readonly checkpoints: HTMLButtonElement;
42
+ /** The maximize control, built detached: the element adds it where a placement offers it. */
43
+ readonly maximize: HTMLButtonElement;
44
+ /** The collapse control, which the maximize control is placed before. */
45
+ readonly collapse: HTMLButtonElement;
46
+ }
47
+
48
+ /**
49
+ * Build the panel's title bar: the optional icon, the title, the host's
50
+ * header-actions slot, and the controls.
51
+ *
52
+ * Every control calls back into the element's public methods, so a host
53
+ * chrome driving them imperatively takes exactly the path the built-in button
54
+ * takes.
55
+ */
56
+ export function buildHeader(options: HeaderOptions): BuiltHeader {
57
+ const { strings } = options;
58
+ const header = document.createElement("div");
59
+ header.className = "header";
60
+ header.setAttribute("part", "header");
61
+
62
+ const title = options.title;
63
+ title.className = "header-title";
64
+ title.setAttribute("part", "title");
65
+ title.textContent = options.titleText;
66
+
67
+ // Optional header icon: a slot (any markup) with a `data-icon-url` <img>
68
+ // fallback. Rendered only when one of the two is provided, so the header has
69
+ // no phantom gap otherwise.
70
+ if (options.host.querySelector('[slot="icon"]') !== null || options.iconUrl !== null) {
71
+ header.append(iconElement("icon", "icon", null, options.iconUrl));
72
+ }
73
+
74
+ // A coarse slot for host-provided header actions, between title and controls.
75
+ const headerActions = document.createElement("slot");
76
+ headerActions.name = "header-actions";
77
+
78
+ const controls = document.createElement("div");
79
+ controls.className = "header-controls";
80
+ controls.setAttribute("part", "header-controls");
81
+
82
+ const history = headerButton("history", strings.chatHistory, ICON_HISTORY);
83
+ history.addEventListener("click", options.onHistory);
84
+
85
+ const checkpoints = headerButton("checkpoints", strings.checkpoints, ICON_CHECKPOINTS);
86
+ checkpoints.addEventListener("click", options.onCheckpoints);
87
+
88
+ const newChat = headerButton("new", strings.newChat, ICON_NEW_CHAT);
89
+ newChat.addEventListener("click", options.onNewChat);
90
+
91
+ // The element repaints this mark for its placement and data-collapse-icon.
92
+ const collapse = headerButton("collapse", strings.collapse, ICON_CHEVRON_DOWN);
93
+ collapse.addEventListener("click", options.onCollapse);
94
+
95
+ const maximize = headerButton("maximize", strings.maximize, ICON_MAXIMIZE);
96
+ maximize.addEventListener("click", options.onMaximize);
97
+
98
+ // Only offered when the server actually indexes runs — without
99
+ // `data-runs-url` there is nothing to continue and the button would open
100
+ // a permanently empty panel.
101
+ if (options.withCheckpoints) {
102
+ controls.append(history, checkpoints, newChat);
103
+ } else {
104
+ controls.append(history, newChat);
105
+ }
106
+ // Optional built-in theme toggle: off unless the host opts in, so
107
+ // it never competes with a host-supplied switch in `slot="header-actions"`.
108
+ const toggle = options.themeToggle;
109
+ if (toggle !== null) {
110
+ toggle.type = "button";
111
+ toggle.className = "header-btn header-btn--theme";
112
+ toggle.setAttribute("part", "header-button theme-toggle");
113
+ toggle.title = strings.toggleTheme;
114
+ toggle.setAttribute("aria-label", strings.toggleTheme);
115
+ toggle.addEventListener("click", options.onToggleTheme, { signal: options.signal });
116
+ controls.append(toggle);
117
+ }
118
+ controls.append(collapse);
119
+ header.append(title, headerActions, controls);
120
+ return { header, checkpoints, maximize, collapse };
121
+ }