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

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (543) hide show
  1. package/CHANGELOG.md +77 -0
  2. package/LICENSE +21 -0
  3. package/README.md +4397 -2
  4. package/dist/agents-web-components.bundle.js +5708 -0
  5. package/dist/agents-web-components.bundle.js.map +7 -0
  6. package/dist/bundle.d.ts +3 -0
  7. package/dist/bundle.d.ts.map +1 -0
  8. package/dist/chat.d.ts +3 -0
  9. package/dist/chat.d.ts.map +1 -0
  10. package/dist/chat.js +16373 -0
  11. package/dist/chat.js.map +7 -0
  12. package/dist/chunk-ARNLFGCC.js +7715 -0
  13. package/dist/chunk-ARNLFGCC.js.map +7 -0
  14. package/dist/constants.d.ts +575 -0
  15. package/dist/constants.d.ts.map +1 -0
  16. package/dist/core/activity_registration.d.ts +19 -0
  17. package/dist/core/activity_registration.d.ts.map +1 -0
  18. package/dist/core/activity_registry.d.ts +46 -0
  19. package/dist/core/activity_registry.d.ts.map +1 -0
  20. package/dist/core/activity_renderer.d.ts +20 -0
  21. package/dist/core/activity_renderer.d.ts.map +1 -0
  22. package/dist/core/ag_ui_chat.d.ts +836 -0
  23. package/dist/core/ag_ui_chat.d.ts.map +1 -0
  24. package/dist/core/agui_client.d.ts +370 -0
  25. package/dist/core/agui_client.d.ts.map +1 -0
  26. package/dist/core/attachment.d.ts +42 -0
  27. package/dist/core/attachment.d.ts.map +1 -0
  28. package/dist/core/chat_registry.d.ts +23 -0
  29. package/dist/core/chat_registry.d.ts.map +1 -0
  30. package/dist/core/client_seed.d.ts +27 -0
  31. package/dist/core/client_seed.d.ts.map +1 -0
  32. package/dist/core/conversation_store.d.ts +195 -0
  33. package/dist/core/conversation_store.d.ts.map +1 -0
  34. package/dist/core/create_http_agent.d.ts +57 -0
  35. package/dist/core/create_http_agent.d.ts.map +1 -0
  36. package/dist/core/define_chat.d.ts +13 -0
  37. package/dist/core/define_chat.d.ts.map +1 -0
  38. package/dist/core/events/attachments_detail.d.ts +9 -0
  39. package/dist/core/events/attachments_detail.d.ts.map +1 -0
  40. package/dist/core/events/bar_height_detail.d.ts +6 -0
  41. package/dist/core/events/bar_height_detail.d.ts.map +1 -0
  42. package/dist/core/events/custom_agent_detail.d.ts +8 -0
  43. package/dist/core/events/custom_agent_detail.d.ts.map +1 -0
  44. package/dist/core/events/dock_width_detail.d.ts +8 -0
  45. package/dist/core/events/dock_width_detail.d.ts.map +1 -0
  46. package/dist/core/events/feedback_detail.d.ts +28 -0
  47. package/dist/core/events/feedback_detail.d.ts.map +1 -0
  48. package/dist/core/events/invalidate_detail.d.ts +16 -0
  49. package/dist/core/events/invalidate_detail.d.ts.map +1 -0
  50. package/dist/core/events/maximize_detail.d.ts +5 -0
  51. package/dist/core/events/maximize_detail.d.ts.map +1 -0
  52. package/dist/core/events/run_finished_detail.d.ts +36 -0
  53. package/dist/core/events/run_finished_detail.d.ts.map +1 -0
  54. package/dist/core/events/state_detail.d.ts +5 -0
  55. package/dist/core/events/state_detail.d.ts.map +1 -0
  56. package/dist/core/events/submit_detail.d.ts +8 -0
  57. package/dist/core/events/submit_detail.d.ts.map +1 -0
  58. package/dist/core/events/thread_detail.d.ts +27 -0
  59. package/dist/core/events/thread_detail.d.ts.map +1 -0
  60. package/dist/core/events/thread_title_detail.d.ts +8 -0
  61. package/dist/core/events/thread_title_detail.d.ts.map +1 -0
  62. package/dist/core/events/toggle_detail.d.ts +5 -0
  63. package/dist/core/events/toggle_detail.d.ts.map +1 -0
  64. package/dist/core/events/tool_run.d.ts +11 -0
  65. package/dist/core/events/tool_run.d.ts.map +1 -0
  66. package/dist/core/events/unread_detail.d.ts +11 -0
  67. package/dist/core/events/unread_detail.d.ts.map +1 -0
  68. package/dist/core/message_role.d.ts +4 -0
  69. package/dist/core/message_role.d.ts.map +1 -0
  70. package/dist/core/read_flag.d.ts +11 -0
  71. package/dist/core/read_flag.d.ts.map +1 -0
  72. package/dist/core/read_json_attribute.d.ts +15 -0
  73. package/dist/core/read_json_attribute.d.ts.map +1 -0
  74. package/dist/core/read_max_tool_rounds.d.ts +9 -0
  75. package/dist/core/read_max_tool_rounds.d.ts.map +1 -0
  76. package/dist/core/remote_conversation_store.d.ts +71 -0
  77. package/dist/core/remote_conversation_store.d.ts.map +1 -0
  78. package/dist/core/run_handlers.d.ts +85 -0
  79. package/dist/core/run_handlers.d.ts.map +1 -0
  80. package/dist/core/run_index.d.ts +58 -0
  81. package/dist/core/run_index.d.ts.map +1 -0
  82. package/dist/core/storage_scope.d.ts +118 -0
  83. package/dist/core/storage_scope.d.ts.map +1 -0
  84. package/dist/core/tool_outcome.d.ts +27 -0
  85. package/dist/core/tool_outcome.d.ts.map +1 -0
  86. package/dist/core/transcribe_audio.d.ts +32 -0
  87. package/dist/core/transcribe_audio.d.ts.map +1 -0
  88. package/dist/core/upload_attachment.d.ts +44 -0
  89. package/dist/core/upload_attachment.d.ts.map +1 -0
  90. package/dist/core/utils.d.ts +117 -0
  91. package/dist/core/utils.d.ts.map +1 -0
  92. package/dist/dom/animations.d.ts +122 -0
  93. package/dist/dom/animations.d.ts.map +1 -0
  94. package/dist/dom/dom_driver.d.ts +28 -0
  95. package/dist/dom/dom_driver.d.ts.map +1 -0
  96. package/dist/dom/highlight_overlay.d.ts +39 -0
  97. package/dist/dom/highlight_overlay.d.ts.map +1 -0
  98. package/dist/dom/native_setter.d.ts +5 -0
  99. package/dist/dom/native_setter.d.ts.map +1 -0
  100. package/dist/dom/ring_color.d.ts +16 -0
  101. package/dist/dom/ring_color.d.ts.map +1 -0
  102. package/dist/dom/utils.d.ts +3 -0
  103. package/dist/dom/utils.d.ts.map +1 -0
  104. package/dist/index.d.ts +62 -0
  105. package/dist/index.d.ts.map +1 -0
  106. package/dist/index.js +223 -0
  107. package/dist/index.js.map +7 -0
  108. package/dist/skills/fill_template.d.ts +16 -0
  109. package/dist/skills/fill_template.d.ts.map +1 -0
  110. package/dist/skills/parse_skills.d.ts +8 -0
  111. package/dist/skills/parse_skills.d.ts.map +1 -0
  112. package/dist/skills/skill.d.ts +33 -0
  113. package/dist/skills/skill.d.ts.map +1 -0
  114. package/dist/skills/skill_catalog.d.ts +69 -0
  115. package/dist/skills/skill_catalog.d.ts.map +1 -0
  116. package/dist/skills/skill_name_from.d.ts +12 -0
  117. package/dist/skills/skill_name_from.d.ts.map +1 -0
  118. package/dist/tools/chat_surface_tools.d.ts +77 -0
  119. package/dist/tools/chat_surface_tools.d.ts.map +1 -0
  120. package/dist/tools/client_tool_registry.d.ts +58 -0
  121. package/dist/tools/client_tool_registry.d.ts.map +1 -0
  122. package/dist/tools/is_destructive.d.ts +14 -0
  123. package/dist/tools/is_destructive.d.ts.map +1 -0
  124. package/dist/tools/is_navigates.d.ts +9 -0
  125. package/dist/tools/is_navigates.d.ts.map +1 -0
  126. package/dist/tools/page_action_tools.d.ts +30 -0
  127. package/dist/tools/page_action_tools.d.ts.map +1 -0
  128. package/dist/tools/page_map.d.ts +16 -0
  129. package/dist/tools/page_map.d.ts.map +1 -0
  130. package/dist/tools/page_state.d.ts +27 -0
  131. package/dist/tools/page_state.d.ts.map +1 -0
  132. package/dist/tools/parse_tool_catalog.d.ts +21 -0
  133. package/dist/tools/parse_tool_catalog.d.ts.map +1 -0
  134. package/dist/tools/route_map.d.ts +37 -0
  135. package/dist/tools/route_map.d.ts.map +1 -0
  136. package/dist/tools/tool_catalog.d.ts +86 -0
  137. package/dist/tools/tool_catalog.d.ts.map +1 -0
  138. package/dist/tools/tool_dispatch.d.ts +82 -0
  139. package/dist/tools/tool_dispatch.d.ts.map +1 -0
  140. package/dist/ui/charts/chart_block.d.ts +57 -0
  141. package/dist/ui/charts/chart_block.d.ts.map +1 -0
  142. package/dist/ui/charts/chart_spec_from.d.ts +12 -0
  143. package/dist/ui/charts/chart_spec_from.d.ts.map +1 -0
  144. package/dist/ui/charts/chart_styles.d.ts +2 -0
  145. package/dist/ui/charts/chart_styles.d.ts.map +1 -0
  146. package/dist/ui/charts/chart_tool.d.ts +15 -0
  147. package/dist/ui/charts/chart_tool.d.ts.map +1 -0
  148. package/dist/ui/composer/attachment_styles.d.ts +2 -0
  149. package/dist/ui/composer/attachment_styles.d.ts.map +1 -0
  150. package/dist/ui/composer/attachment_tray.d.ts +53 -0
  151. package/dist/ui/composer/attachment_tray.d.ts.map +1 -0
  152. package/dist/ui/composer/auto_grow.d.ts +10 -0
  153. package/dist/ui/composer/auto_grow.d.ts.map +1 -0
  154. package/dist/ui/composer/build_composer.d.ts +32 -0
  155. package/dist/ui/composer/build_composer.d.ts.map +1 -0
  156. package/dist/ui/composer/composer_attachments.d.ts +57 -0
  157. package/dist/ui/composer/composer_attachments.d.ts.map +1 -0
  158. package/dist/ui/composer/composer_styles.d.ts +2 -0
  159. package/dist/ui/composer/composer_styles.d.ts.map +1 -0
  160. package/dist/ui/composer/composer_voice.d.ts +48 -0
  161. package/dist/ui/composer/composer_voice.d.ts.map +1 -0
  162. package/dist/ui/composer/skill_styles.d.ts +2 -0
  163. package/dist/ui/composer/skill_styles.d.ts.map +1 -0
  164. package/dist/ui/composer/skills_menu.d.ts +34 -0
  165. package/dist/ui/composer/skills_menu.d.ts.map +1 -0
  166. package/dist/ui/composer/voice_input.d.ts +46 -0
  167. package/dist/ui/composer/voice_input.d.ts.map +1 -0
  168. package/dist/ui/excerpts/attach_copy_buttons.d.ts +13 -0
  169. package/dist/ui/excerpts/attach_copy_buttons.d.ts.map +1 -0
  170. package/dist/ui/excerpts/copy_payload.d.ts +30 -0
  171. package/dist/ui/excerpts/copy_payload.d.ts.map +1 -0
  172. package/dist/ui/excerpts/page_quote_offer.d.ts +33 -0
  173. package/dist/ui/excerpts/page_quote_offer.d.ts.map +1 -0
  174. package/dist/ui/excerpts/place_offer.d.ts +9 -0
  175. package/dist/ui/excerpts/place_offer.d.ts.map +1 -0
  176. package/dist/ui/excerpts/quote_selection.d.ts +66 -0
  177. package/dist/ui/excerpts/quote_selection.d.ts.map +1 -0
  178. package/dist/ui/excerpts/transcript_quote_offer.d.ts +57 -0
  179. package/dist/ui/excerpts/transcript_quote_offer.d.ts.map +1 -0
  180. package/dist/ui/fill_ui_string.d.ts +32 -0
  181. package/dist/ui/fill_ui_string.d.ts.map +1 -0
  182. package/dist/ui/history/checkpoint_menu.d.ts +41 -0
  183. package/dist/ui/history/checkpoint_menu.d.ts.map +1 -0
  184. package/dist/ui/history/conversation_history.d.ts +317 -0
  185. package/dist/ui/history/conversation_history.d.ts.map +1 -0
  186. package/dist/ui/history/history_styles.d.ts +2 -0
  187. package/dist/ui/history/history_styles.d.ts.map +1 -0
  188. package/dist/ui/history/relative_time.d.ts +23 -0
  189. package/dist/ui/history/relative_time.d.ts.map +1 -0
  190. package/dist/ui/history/thread_drawer.d.ts +64 -0
  191. package/dist/ui/history/thread_drawer.d.ts.map +1 -0
  192. package/dist/ui/history/utils.d.ts +2 -0
  193. package/dist/ui/history/utils.d.ts.map +1 -0
  194. package/dist/ui/interrupts/approval_card.d.ts +64 -0
  195. package/dist/ui/interrupts/approval_card.d.ts.map +1 -0
  196. package/dist/ui/interrupts/approval_styles.d.ts +2 -0
  197. package/dist/ui/interrupts/approval_styles.d.ts.map +1 -0
  198. package/dist/ui/interrupts/confirmation_card.d.ts +51 -0
  199. package/dist/ui/interrupts/confirmation_card.d.ts.map +1 -0
  200. package/dist/ui/interrupts/confirmation_styles.d.ts +2 -0
  201. package/dist/ui/interrupts/confirmation_styles.d.ts.map +1 -0
  202. package/dist/ui/interrupts/pending_decision.d.ts +22 -0
  203. package/dist/ui/interrupts/pending_decision.d.ts.map +1 -0
  204. package/dist/ui/interrupts/question_card.d.ts +49 -0
  205. package/dist/ui/interrupts/question_card.d.ts.map +1 -0
  206. package/dist/ui/interrupts/question_styles.d.ts +2 -0
  207. package/dist/ui/interrupts/question_styles.d.ts.map +1 -0
  208. package/dist/ui/place/place.d.ts +17 -0
  209. package/dist/ui/place/place.d.ts.map +1 -0
  210. package/dist/ui/place/place_chip.d.ts +26 -0
  211. package/dist/ui/place/place_chip.d.ts.map +1 -0
  212. package/dist/ui/place/place_from_route.d.ts +9 -0
  213. package/dist/ui/place/place_from_route.d.ts.map +1 -0
  214. package/dist/ui/place/place_styles.d.ts +2 -0
  215. package/dist/ui/place/place_styles.d.ts.map +1 -0
  216. package/dist/ui/placement/clamp_launcher.d.ts +20 -0
  217. package/dist/ui/placement/clamp_launcher.d.ts.map +1 -0
  218. package/dist/ui/placement/clamp_panel.d.ts +13 -0
  219. package/dist/ui/placement/clamp_panel.d.ts.map +1 -0
  220. package/dist/ui/placement/collapse_styles.d.ts +2 -0
  221. package/dist/ui/placement/collapse_styles.d.ts.map +1 -0
  222. package/dist/ui/placement/dock_styles.d.ts +2 -0
  223. package/dist/ui/placement/dock_styles.d.ts.map +1 -0
  224. package/dist/ui/placement/embedded_styles.d.ts +2 -0
  225. package/dist/ui/placement/embedded_styles.d.ts.map +1 -0
  226. package/dist/ui/placement/launcher_drag.d.ts +49 -0
  227. package/dist/ui/placement/launcher_drag.d.ts.map +1 -0
  228. package/dist/ui/placement/launcher_placement.d.ts +77 -0
  229. package/dist/ui/placement/launcher_placement.d.ts.map +1 -0
  230. package/dist/ui/placement/launcher_styles.d.ts +2 -0
  231. package/dist/ui/placement/launcher_styles.d.ts.map +1 -0
  232. package/dist/ui/placement/page_styles.d.ts +2 -0
  233. package/dist/ui/placement/page_styles.d.ts.map +1 -0
  234. package/dist/ui/placement/panel_drag.d.ts +40 -0
  235. package/dist/ui/placement/panel_drag.d.ts.map +1 -0
  236. package/dist/ui/placement/panel_placement.d.ts +173 -0
  237. package/dist/ui/placement/panel_placement.d.ts.map +1 -0
  238. package/dist/ui/placement/place_widget.d.ts +31 -0
  239. package/dist/ui/placement/place_widget.d.ts.map +1 -0
  240. package/dist/ui/placement/preset_styles.d.ts +2 -0
  241. package/dist/ui/placement/preset_styles.d.ts.map +1 -0
  242. package/dist/ui/placement/resize_handle.d.ts +78 -0
  243. package/dist/ui/placement/resize_handle.d.ts.map +1 -0
  244. package/dist/ui/placement/resize_styles.d.ts +2 -0
  245. package/dist/ui/placement/resize_styles.d.ts.map +1 -0
  246. package/dist/ui/placement/sidebar_styles.d.ts +2 -0
  247. package/dist/ui/placement/sidebar_styles.d.ts.map +1 -0
  248. package/dist/ui/placement/small_viewport_styles.d.ts +2 -0
  249. package/dist/ui/placement/small_viewport_styles.d.ts.map +1 -0
  250. package/dist/ui/placement/surface_for.d.ts +93 -0
  251. package/dist/ui/placement/surface_for.d.ts.map +1 -0
  252. package/dist/ui/progress/prettify_tool_name.d.ts +11 -0
  253. package/dist/ui/progress/prettify_tool_name.d.ts.map +1 -0
  254. package/dist/ui/progress/run_announcer.d.ts +41 -0
  255. package/dist/ui/progress/run_announcer.d.ts.map +1 -0
  256. package/dist/ui/progress/run_notice.d.ts +21 -0
  257. package/dist/ui/progress/run_notice.d.ts.map +1 -0
  258. package/dist/ui/progress/run_notice_styles.d.ts +2 -0
  259. package/dist/ui/progress/run_notice_styles.d.ts.map +1 -0
  260. package/dist/ui/progress/subagent_panel.d.ts +101 -0
  261. package/dist/ui/progress/subagent_panel.d.ts.map +1 -0
  262. package/dist/ui/progress/subagent_progress.d.ts +57 -0
  263. package/dist/ui/progress/subagent_progress.d.ts.map +1 -0
  264. package/dist/ui/progress/subagent_update.d.ts +28 -0
  265. package/dist/ui/progress/subagent_update.d.ts.map +1 -0
  266. package/dist/ui/progress/thoughts_block.d.ts +57 -0
  267. package/dist/ui/progress/thoughts_block.d.ts.map +1 -0
  268. package/dist/ui/progress/thoughts_styles.d.ts +2 -0
  269. package/dist/ui/progress/thoughts_styles.d.ts.map +1 -0
  270. package/dist/ui/progress/tool_call_card.d.ts +167 -0
  271. package/dist/ui/progress/tool_call_card.d.ts.map +1 -0
  272. package/dist/ui/progress/tool_group_styles.d.ts +2 -0
  273. package/dist/ui/progress/tool_group_styles.d.ts.map +1 -0
  274. package/dist/ui/progress/tool_step_group.d.ts +50 -0
  275. package/dist/ui/progress/tool_step_group.d.ts.map +1 -0
  276. package/dist/ui/progress/tool_step_styles.d.ts +2 -0
  277. package/dist/ui/progress/tool_step_styles.d.ts.map +1 -0
  278. package/dist/ui/shell/adopt_styles.d.ts +28 -0
  279. package/dist/ui/shell/adopt_styles.d.ts.map +1 -0
  280. package/dist/ui/shell/build_header.d.ts +45 -0
  281. package/dist/ui/shell/build_header.d.ts.map +1 -0
  282. package/dist/ui/shell/build_launcher.d.ts +33 -0
  283. package/dist/ui/shell/build_launcher.d.ts.map +1 -0
  284. package/dist/ui/shell/collapse_glyph.d.ts +14 -0
  285. package/dist/ui/shell/collapse_glyph.d.ts.map +1 -0
  286. package/dist/ui/shell/frame_styles.d.ts +2 -0
  287. package/dist/ui/shell/frame_styles.d.ts.map +1 -0
  288. package/dist/ui/shell/glyph_slot.d.ts +7 -0
  289. package/dist/ui/shell/glyph_slot.d.ts.map +1 -0
  290. package/dist/ui/shell/header_button.d.ts +11 -0
  291. package/dist/ui/shell/header_button.d.ts.map +1 -0
  292. package/dist/ui/shell/icon_element.d.ts +12 -0
  293. package/dist/ui/shell/icon_element.d.ts.map +1 -0
  294. package/dist/ui/shell/is_unread_badge_enabled.d.ts +10 -0
  295. package/dist/ui/shell/is_unread_badge_enabled.d.ts.map +1 -0
  296. package/dist/ui/shell/read_launcher_icon_url.d.ts +8 -0
  297. package/dist/ui/shell/read_launcher_icon_url.d.ts.map +1 -0
  298. package/dist/ui/shell/theme_styles.d.ts +2 -0
  299. package/dist/ui/shell/theme_styles.d.ts.map +1 -0
  300. package/dist/ui/shell/token_styles.d.ts +2 -0
  301. package/dist/ui/shell/token_styles.d.ts.map +1 -0
  302. package/dist/ui/styles.d.ts +2 -0
  303. package/dist/ui/styles.d.ts.map +1 -0
  304. package/dist/ui/themes/classic_styles.d.ts +2 -0
  305. package/dist/ui/themes/classic_styles.d.ts.map +1 -0
  306. package/dist/ui/themes/classic_tokens.d.ts +2 -0
  307. package/dist/ui/themes/classic_tokens.d.ts.map +1 -0
  308. package/dist/ui/themes/code_tokens.d.ts +2 -0
  309. package/dist/ui/themes/code_tokens.d.ts.map +1 -0
  310. package/dist/ui/themes/ledger_styles.d.ts +2 -0
  311. package/dist/ui/themes/ledger_styles.d.ts.map +1 -0
  312. package/dist/ui/themes/ledger_tokens.d.ts +2 -0
  313. package/dist/ui/themes/ledger_tokens.d.ts.map +1 -0
  314. package/dist/ui/themes/modern_styles.d.ts +2 -0
  315. package/dist/ui/themes/modern_styles.d.ts.map +1 -0
  316. package/dist/ui/themes/quiet_styles.d.ts +2 -0
  317. package/dist/ui/themes/quiet_styles.d.ts.map +1 -0
  318. package/dist/ui/themes/scheme_styles.d.ts +2 -0
  319. package/dist/ui/themes/scheme_styles.d.ts.map +1 -0
  320. package/dist/ui/themes/soft_styles.d.ts +2 -0
  321. package/dist/ui/themes/soft_styles.d.ts.map +1 -0
  322. package/dist/ui/themes/soft_tokens.d.ts +2 -0
  323. package/dist/ui/themes/soft_tokens.d.ts.map +1 -0
  324. package/dist/ui/themes/theme_hosts.d.ts +15 -0
  325. package/dist/ui/themes/theme_hosts.d.ts.map +1 -0
  326. package/dist/ui/transcript/answer_actions.d.ts +50 -0
  327. package/dist/ui/transcript/answer_actions.d.ts.map +1 -0
  328. package/dist/ui/transcript/answer_stream.d.ts +56 -0
  329. package/dist/ui/transcript/answer_stream.d.ts.map +1 -0
  330. package/dist/ui/transcript/attachment_chip_styles.d.ts +2 -0
  331. package/dist/ui/transcript/attachment_chip_styles.d.ts.map +1 -0
  332. package/dist/ui/transcript/attachment_chips.d.ts +21 -0
  333. package/dist/ui/transcript/attachment_chips.d.ts.map +1 -0
  334. package/dist/ui/transcript/build_transcript.d.ts +21 -0
  335. package/dist/ui/transcript/build_transcript.d.ts.map +1 -0
  336. package/dist/ui/transcript/greeting_styles.d.ts +2 -0
  337. package/dist/ui/transcript/greeting_styles.d.ts.map +1 -0
  338. package/dist/ui/transcript/groups_tool_steps.d.ts +13 -0
  339. package/dist/ui/transcript/groups_tool_steps.d.ts.map +1 -0
  340. package/dist/ui/transcript/message_action_styles.d.ts +2 -0
  341. package/dist/ui/transcript/message_action_styles.d.ts.map +1 -0
  342. package/dist/ui/transcript/message_actions.d.ts +74 -0
  343. package/dist/ui/transcript/message_actions.d.ts.map +1 -0
  344. package/dist/ui/transcript/message_styles.d.ts +2 -0
  345. package/dist/ui/transcript/message_styles.d.ts.map +1 -0
  346. package/dist/ui/transcript/render_markdown.d.ts +40 -0
  347. package/dist/ui/transcript/render_markdown.d.ts.map +1 -0
  348. package/dist/ui/transcript/render_or_warn.d.ts +16 -0
  349. package/dist/ui/transcript/render_or_warn.d.ts.map +1 -0
  350. package/dist/ui/transcript/reveal_words.d.ts +8 -0
  351. package/dist/ui/transcript/reveal_words.d.ts.map +1 -0
  352. package/dist/ui/transcript/starter_chips.d.ts +21 -0
  353. package/dist/ui/transcript/starter_chips.d.ts.map +1 -0
  354. package/dist/ui/transcript/stick_to_bottom.d.ts +55 -0
  355. package/dist/ui/transcript/stick_to_bottom.d.ts.map +1 -0
  356. package/dist/ui/transcript/suggestion_chips.d.ts +29 -0
  357. package/dist/ui/transcript/suggestion_chips.d.ts.map +1 -0
  358. package/dist/ui/transcript/transcript.d.ts +196 -0
  359. package/dist/ui/transcript/transcript.d.ts.map +1 -0
  360. package/dist/ui/transcript/transcript_styles.d.ts +2 -0
  361. package/dist/ui/transcript/transcript_styles.d.ts.map +1 -0
  362. package/dist/ui/ui_strings.d.ts +352 -0
  363. package/dist/ui/ui_strings.d.ts.map +1 -0
  364. package/dist/version.d.ts +2 -0
  365. package/dist/version.d.ts.map +1 -0
  366. package/package.json +86 -3
  367. package/src/bundle.ts +2 -0
  368. package/src/chat.ts +2 -0
  369. package/src/constants.ts +650 -0
  370. package/src/core/activity_registration.ts +19 -0
  371. package/src/core/activity_registry.ts +133 -0
  372. package/src/core/activity_renderer.ts +19 -0
  373. package/src/core/ag_ui_chat.ts +3966 -0
  374. package/src/core/agui_client.ts +1028 -0
  375. package/src/core/attachment.ts +62 -0
  376. package/src/core/chat_registry.ts +53 -0
  377. package/src/core/client_seed.ts +27 -0
  378. package/src/core/conversation_store.ts +478 -0
  379. package/src/core/create_http_agent.ts +97 -0
  380. package/src/core/define_chat.ts +25 -0
  381. package/src/core/events/attachments_detail.ts +9 -0
  382. package/src/core/events/bar_height_detail.ts +5 -0
  383. package/src/core/events/custom_agent_detail.ts +7 -0
  384. package/src/core/events/dock_width_detail.ts +7 -0
  385. package/src/core/events/feedback_detail.ts +27 -0
  386. package/src/core/events/invalidate_detail.ts +15 -0
  387. package/src/core/events/maximize_detail.ts +4 -0
  388. package/src/core/events/run_finished_detail.ts +36 -0
  389. package/src/core/events/state_detail.ts +4 -0
  390. package/src/core/events/submit_detail.ts +8 -0
  391. package/src/core/events/thread_detail.ts +26 -0
  392. package/src/core/events/thread_title_detail.ts +7 -0
  393. package/src/core/events/toggle_detail.ts +4 -0
  394. package/src/core/events/tool_run.ts +10 -0
  395. package/src/core/events/unread_detail.ts +10 -0
  396. package/src/core/message_role.ts +4 -0
  397. package/src/core/read_flag.ts +13 -0
  398. package/src/core/read_json_attribute.ts +30 -0
  399. package/src/core/read_max_tool_rounds.ts +13 -0
  400. package/src/core/remote_conversation_store.ts +279 -0
  401. package/src/core/run_handlers.ts +524 -0
  402. package/src/core/run_index.ts +114 -0
  403. package/src/core/storage_scope.ts +291 -0
  404. package/src/core/tool_outcome.ts +39 -0
  405. package/src/core/transcribe_audio.ts +76 -0
  406. package/src/core/upload_attachment.ts +130 -0
  407. package/src/core/utils.ts +230 -0
  408. package/src/dom/animations.ts +341 -0
  409. package/src/dom/dom_driver.ts +91 -0
  410. package/src/dom/highlight_overlay.ts +204 -0
  411. package/src/dom/native_setter.ts +40 -0
  412. package/src/dom/ring_color.ts +206 -0
  413. package/src/dom/utils.ts +5 -0
  414. package/src/index.ts +220 -0
  415. package/src/skills/fill_template.ts +31 -0
  416. package/src/skills/parse_skills.ts +31 -0
  417. package/src/skills/skill.ts +32 -0
  418. package/src/skills/skill_catalog.ts +172 -0
  419. package/src/skills/skill_name_from.ts +19 -0
  420. package/src/tools/chat_surface_tools.ts +183 -0
  421. package/src/tools/client_tool_registry.ts +80 -0
  422. package/src/tools/is_destructive.ts +17 -0
  423. package/src/tools/is_navigates.ts +12 -0
  424. package/src/tools/page_action_tools.ts +123 -0
  425. package/src/tools/page_map.ts +26 -0
  426. package/src/tools/page_state.ts +57 -0
  427. package/src/tools/parse_tool_catalog.ts +41 -0
  428. package/src/tools/route_map.ts +132 -0
  429. package/src/tools/tool_catalog.ts +334 -0
  430. package/src/tools/tool_dispatch.ts +453 -0
  431. package/src/ui/charts/chart_block.ts +519 -0
  432. package/src/ui/charts/chart_spec_from.ts +125 -0
  433. package/src/ui/charts/chart_styles.ts +63 -0
  434. package/src/ui/charts/chart_tool.ts +72 -0
  435. package/src/ui/composer/attachment_styles.ts +71 -0
  436. package/src/ui/composer/attachment_tray.ts +295 -0
  437. package/src/ui/composer/auto_grow.ts +12 -0
  438. package/src/ui/composer/build_composer.ts +114 -0
  439. package/src/ui/composer/composer_attachments.ts +324 -0
  440. package/src/ui/composer/composer_styles.ts +177 -0
  441. package/src/ui/composer/composer_voice.ts +93 -0
  442. package/src/ui/composer/skill_styles.ts +120 -0
  443. package/src/ui/composer/skills_menu.ts +188 -0
  444. package/src/ui/composer/voice_input.ts +282 -0
  445. package/src/ui/excerpts/attach_copy_buttons.ts +73 -0
  446. package/src/ui/excerpts/copy_payload.ts +156 -0
  447. package/src/ui/excerpts/page_quote_offer.ts +203 -0
  448. package/src/ui/excerpts/place_offer.ts +24 -0
  449. package/src/ui/excerpts/quote_selection.ts +345 -0
  450. package/src/ui/excerpts/transcript_quote_offer.ts +175 -0
  451. package/src/ui/fill_ui_string.ts +41 -0
  452. package/src/ui/history/checkpoint_menu.ts +300 -0
  453. package/src/ui/history/conversation_history.ts +1169 -0
  454. package/src/ui/history/history_styles.ts +492 -0
  455. package/src/ui/history/relative_time.ts +50 -0
  456. package/src/ui/history/thread_drawer.ts +471 -0
  457. package/src/ui/history/utils.ts +11 -0
  458. package/src/ui/interrupts/approval_card.ts +202 -0
  459. package/src/ui/interrupts/approval_styles.ts +52 -0
  460. package/src/ui/interrupts/confirmation_card.ts +138 -0
  461. package/src/ui/interrupts/confirmation_styles.ts +114 -0
  462. package/src/ui/interrupts/pending_decision.ts +33 -0
  463. package/src/ui/interrupts/question_card.ts +213 -0
  464. package/src/ui/interrupts/question_styles.ts +73 -0
  465. package/src/ui/place/place.ts +16 -0
  466. package/src/ui/place/place_chip.ts +146 -0
  467. package/src/ui/place/place_from_route.ts +27 -0
  468. package/src/ui/place/place_styles.ts +108 -0
  469. package/src/ui/placement/clamp_launcher.ts +38 -0
  470. package/src/ui/placement/clamp_panel.ts +30 -0
  471. package/src/ui/placement/collapse_styles.ts +472 -0
  472. package/src/ui/placement/dock_styles.ts +116 -0
  473. package/src/ui/placement/embedded_styles.ts +14 -0
  474. package/src/ui/placement/launcher_drag.ts +206 -0
  475. package/src/ui/placement/launcher_placement.ts +133 -0
  476. package/src/ui/placement/launcher_styles.ts +189 -0
  477. package/src/ui/placement/page_styles.ts +47 -0
  478. package/src/ui/placement/panel_drag.ts +138 -0
  479. package/src/ui/placement/panel_placement.ts +1975 -0
  480. package/src/ui/placement/place_widget.ts +64 -0
  481. package/src/ui/placement/preset_styles.ts +49 -0
  482. package/src/ui/placement/resize_handle.ts +229 -0
  483. package/src/ui/placement/resize_styles.ts +201 -0
  484. package/src/ui/placement/sidebar_styles.ts +113 -0
  485. package/src/ui/placement/small_viewport_styles.ts +70 -0
  486. package/src/ui/placement/surface_for.ts +183 -0
  487. package/src/ui/progress/prettify_tool_name.ts +16 -0
  488. package/src/ui/progress/run_announcer.ts +67 -0
  489. package/src/ui/progress/run_notice.ts +61 -0
  490. package/src/ui/progress/run_notice_styles.ts +52 -0
  491. package/src/ui/progress/subagent_panel.ts +227 -0
  492. package/src/ui/progress/subagent_progress.ts +200 -0
  493. package/src/ui/progress/subagent_update.ts +89 -0
  494. package/src/ui/progress/thoughts_block.ts +165 -0
  495. package/src/ui/progress/thoughts_styles.ts +74 -0
  496. package/src/ui/progress/tool_call_card.ts +429 -0
  497. package/src/ui/progress/tool_group_styles.ts +313 -0
  498. package/src/ui/progress/tool_step_group.ts +317 -0
  499. package/src/ui/progress/tool_step_styles.ts +486 -0
  500. package/src/ui/shell/adopt_styles.ts +34 -0
  501. package/src/ui/shell/build_header.ts +121 -0
  502. package/src/ui/shell/build_launcher.ts +79 -0
  503. package/src/ui/shell/collapse_glyph.ts +42 -0
  504. package/src/ui/shell/frame_styles.ts +147 -0
  505. package/src/ui/shell/glyph_slot.ts +12 -0
  506. package/src/ui/shell/header_button.ts +22 -0
  507. package/src/ui/shell/icon_element.ts +33 -0
  508. package/src/ui/shell/is_unread_badge_enabled.ts +11 -0
  509. package/src/ui/shell/read_launcher_icon_url.ts +9 -0
  510. package/src/ui/shell/theme_styles.ts +11 -0
  511. package/src/ui/shell/token_styles.ts +480 -0
  512. package/src/ui/styles.ts +110 -0
  513. package/src/ui/themes/classic_styles.ts +32 -0
  514. package/src/ui/themes/classic_tokens.ts +51 -0
  515. package/src/ui/themes/code_tokens.ts +21 -0
  516. package/src/ui/themes/ledger_styles.ts +169 -0
  517. package/src/ui/themes/ledger_tokens.ts +33 -0
  518. package/src/ui/themes/modern_styles.ts +80 -0
  519. package/src/ui/themes/quiet_styles.ts +118 -0
  520. package/src/ui/themes/scheme_styles.ts +26 -0
  521. package/src/ui/themes/soft_styles.ts +149 -0
  522. package/src/ui/themes/soft_tokens.ts +29 -0
  523. package/src/ui/themes/theme_hosts.ts +14 -0
  524. package/src/ui/transcript/answer_actions.ts +165 -0
  525. package/src/ui/transcript/answer_stream.ts +123 -0
  526. package/src/ui/transcript/attachment_chip_styles.ts +116 -0
  527. package/src/ui/transcript/attachment_chips.ts +82 -0
  528. package/src/ui/transcript/build_transcript.ts +67 -0
  529. package/src/ui/transcript/greeting_styles.ts +171 -0
  530. package/src/ui/transcript/groups_tool_steps.ts +16 -0
  531. package/src/ui/transcript/message_action_styles.ts +155 -0
  532. package/src/ui/transcript/message_actions.ts +234 -0
  533. package/src/ui/transcript/message_styles.ts +262 -0
  534. package/src/ui/transcript/render_markdown.ts +181 -0
  535. package/src/ui/transcript/render_or_warn.ts +22 -0
  536. package/src/ui/transcript/reveal_words.ts +41 -0
  537. package/src/ui/transcript/starter_chips.ts +42 -0
  538. package/src/ui/transcript/stick_to_bottom.ts +126 -0
  539. package/src/ui/transcript/suggestion_chips.ts +73 -0
  540. package/src/ui/transcript/transcript.ts +555 -0
  541. package/src/ui/transcript/transcript_styles.ts +153 -0
  542. package/src/ui/ui_strings.ts +550 -0
  543. package/src/version.ts +1 -0
@@ -0,0 +1,492 @@
1
+ // The thread drawer, its list and filter, and the checkpoint menu. The
2
+ // queued-message row over the composer sits among them only because no rule
3
+ // moved in the split.
4
+ export const HISTORY_STYLES: string = `
5
+ /* Chat-history drawer — a slide-over within the chat panel.
6
+ The hidden attribute stays the single source of truth for open/closed (no
7
+ JS-driven animation state): display is transitioned discretely, so on close
8
+ the drawer stays displayed for the whole exit and is removed only at the end,
9
+ which is what lets the backdrop fade and the panel slide out. */
10
+ .drawer {
11
+ position: absolute;
12
+ inset: 0;
13
+ z-index: 5;
14
+ display: flex;
15
+ /* Visible at once on the way in. Opening moves focus to the list in the
16
+ same task that unhides it, and an element still hidden cannot take focus:
17
+ a transition on visibility starts at its first value, so easing it in
18
+ left the drawer hidden at exactly that instant and the focus call was
19
+ dropped at every placement. Reduced motion shortens the transition
20
+ without removing it, so it had the same first frame. */
21
+ transition: visibility 0s;
22
+ }
23
+
24
+ /* Closed. The overlay keeps its box (display, not none) so the backdrop and
25
+ panel inside it stay rendered and can transition both ways; visibility is
26
+ what takes the whole subtree out of the tab order, the a11y tree and hit
27
+ testing at rest. On the way out it is delayed rather than eased, so it
28
+ flips only once the slide has finished. A transition is read from the
29
+ state being entered, which is what lets the two directions differ. */
30
+ .drawer[hidden] {
31
+ display: flex;
32
+ visibility: hidden;
33
+ pointer-events: none;
34
+ transition: visibility 0s var(--_motion);
35
+ }
36
+
37
+ .drawer[hidden] .drawer-backdrop {
38
+ opacity: 0;
39
+ }
40
+
41
+ .drawer[hidden] .drawer-panel {
42
+ transform: translateX(-100%);
43
+ }
44
+
45
+ .checkpoints {
46
+ position: absolute;
47
+ inset-block-start: 3rem;
48
+ inset-inline: 0.75rem;
49
+ z-index: 6;
50
+ display: flex;
51
+ flex-direction: column;
52
+ gap: 0.25rem;
53
+ padding: 0.5rem;
54
+ border: 1px solid var(--_border);
55
+ border-radius: 0.5rem;
56
+ background: var(--_assistant-bg);
57
+ box-shadow: 0 6px 24px rgb(0 0 0 / 12%);
58
+ max-height: 60%;
59
+ overflow-y: auto;
60
+ /* Scrolling past the end of this must not scroll the page behind it. */
61
+ overscroll-behavior: contain;
62
+ transform-origin: top center;
63
+ /* Visibility flips at once on the way in, for the drawer's reason: opening
64
+ focuses the panel in the same task that unhides it, and an element still
65
+ hidden cannot take focus. The fade and the scale still ease in. */
66
+ transition:
67
+ opacity var(--_motion) var(--_ease),
68
+ transform var(--_motion) var(--_ease),
69
+ visibility 0s;
70
+ }
71
+
72
+ /* Same idiom as the drawer: laid out at rest, hidden by visibility, so the
73
+ popover can animate open and closed. The whole list is restated because a
74
+ transition is read from the state being entered; only visibility differs,
75
+ delayed rather than eased so it flips once the exit has played. */
76
+ .checkpoints[hidden] {
77
+ display: flex;
78
+ visibility: hidden;
79
+ pointer-events: none;
80
+ opacity: 0;
81
+ transform: scale(0.96) translateY(-6px);
82
+ transition:
83
+ opacity var(--_motion) var(--_ease),
84
+ transform var(--_motion) var(--_ease),
85
+ visibility 0s var(--_motion);
86
+ }
87
+
88
+ .checkpoints-title {
89
+ font-size: 0.75rem;
90
+ font-weight: 600;
91
+ opacity: 0.7;
92
+ }
93
+
94
+ .checkpoints-empty {
95
+ padding: 0.5rem 0.25rem;
96
+ font-size: 0.8125rem;
97
+ opacity: 0.7;
98
+ }
99
+
100
+ /* A row is a label and two buttons, and nothing about the row itself is
101
+ pressable. Hover is the affordance of something clickable, and a lit-up row made the
102
+ buttons look like decoration on a clickable strip, so the resting surface
103
+ groups the row and only the buttons respond to hover.
104
+
105
+ It wraps for the same reason the tool-call head does. Every child but the label
106
+ is fixed-width, so in a narrow panel the label is the only thing that can give
107
+ -- and a flex-basis of zero lets it give everything. Adding the run id was
108
+ enough to crush "just now" to zero pixels: present, correct, and invisible.
109
+ Wrapping puts the buttons on their own line instead. */
110
+ .checkpoint-row {
111
+ display: flex;
112
+ flex-wrap: wrap;
113
+ align-items: center;
114
+ gap: 0.5rem;
115
+ padding: 0.3125rem 0.4375rem;
116
+ border-radius: 0.375rem;
117
+ background: var(--_hover);
118
+ }
119
+
120
+ /* Grows into spare room, and refuses to shrink past the shortest thing it ever
121
+ says. A time is short and bounded, so there is no case for eliding it. */
122
+ .checkpoint-label {
123
+ flex: 1 1 auto;
124
+ min-width: 7ch;
125
+ font-size: 0.8125rem;
126
+ white-space: nowrap;
127
+ overflow: hidden;
128
+ text-overflow: ellipsis;
129
+ }
130
+
131
+ /* When the label holds the run's first message, the time moves here: still worth
132
+ showing, no longer what identifies the row. Muted and unshrinkable, so it does
133
+ not compete with the words beside it. */
134
+ .checkpoint-time {
135
+ flex: 0 0 auto;
136
+ font-size: 0.6875rem;
137
+ opacity: 0.7;
138
+ white-space: nowrap;
139
+ }
140
+
141
+ /* Enough of the run id to tell two runs apart when both say "just now". Muted
142
+ and monospaced: it is a reference, not a name. */
143
+ .checkpoint-id {
144
+ flex: 0 0 auto;
145
+ font-family: ui-monospace, SFMono-Regular, Menlo, monospace;
146
+ font-size: 0.6875rem;
147
+ opacity: 0.55;
148
+ }
149
+
150
+ /* On the panel's own surface, not the row's: the row now paints the hover token
151
+ itself, and a badge the same colour as what it sits on is not a badge. */
152
+ .checkpoint-branch {
153
+ font-size: 0.6875rem;
154
+ padding: 0 0.375rem;
155
+ border-radius: 999px;
156
+ background: var(--_assistant-bg);
157
+ opacity: 0.8;
158
+ }
159
+
160
+ /* The two things in the row that actually do something, so they are the two
161
+ things that look like it: a filled surface at rest rather than a transparent
162
+ outline, which on top of the old row highlight was nearly invisible. */
163
+ .checkpoint-action {
164
+ font: inherit;
165
+ font-size: 0.75rem;
166
+ line-height: 1.4;
167
+ cursor: pointer;
168
+ padding: 0.1875rem 0.5625rem;
169
+ border: 1px solid var(--_border);
170
+ border-radius: 0.375rem;
171
+ background: var(--_bg);
172
+ color: inherit;
173
+ transition:
174
+ background var(--_motion) var(--_ease),
175
+ border-color var(--_motion) var(--_ease),
176
+ transform var(--_motion) var(--_ease);
177
+ }
178
+
179
+ /* Resume is what a reader wants nine times in ten; fork is the deliberate choice
180
+ beside it. Filled and outlined, the same pair the confirmation and approval
181
+ cards already use for their primary and secondary action. */
182
+ .checkpoint-resume {
183
+ font-weight: 600;
184
+ border-color: var(--_accent);
185
+ background: var(--_accent);
186
+ color: var(--_on-accent);
187
+ }
188
+
189
+ .checkpoint-fork:hover {
190
+ background: var(--_hover);
191
+ border-color: var(--_accent);
192
+ }
193
+
194
+ /* The filled one cannot go lighter on hover without losing its contrast with the
195
+ white label, so it dims instead. */
196
+ .checkpoint-resume:hover {
197
+ opacity: 0.88;
198
+ }
199
+
200
+ /* Pressed: a pixel down, so the click is felt as well as seen. */
201
+ .checkpoint-action:active {
202
+ transform: translateY(1px);
203
+ }
204
+
205
+ /* Keyboard focus was invisible here, in a panel that traps focus and is reached
206
+ by Tab -- so the one navigation path guaranteed to land on these buttons was
207
+ the one with nothing to show for it. */
208
+ .checkpoint-action:focus-visible {
209
+ outline: 2px solid var(--_accent);
210
+ outline-offset: 2px;
211
+ }
212
+
213
+ .drawer-backdrop {
214
+ position: absolute;
215
+ inset: 0;
216
+ background: rgba(20, 20, 50, 0.32);
217
+ opacity: 1;
218
+ transition: opacity var(--_motion) var(--_ease);
219
+ }
220
+
221
+ .drawer-panel {
222
+ position: relative;
223
+ display: flex;
224
+ flex-direction: column;
225
+ width: min(300px, 85%);
226
+ height: 100%;
227
+ background: var(--_bg);
228
+ border-right: 1px solid var(--_border);
229
+ box-shadow: var(--_shadow);
230
+ overflow: hidden;
231
+ transform: none;
232
+ transition: transform var(--_motion) var(--_ease);
233
+ }
234
+
235
+ .drawer-header {
236
+ display: flex;
237
+ align-items: center;
238
+ justify-content: space-between;
239
+ gap: var(--_space);
240
+ padding: var(--_pad);
241
+ border-bottom: 1px solid var(--_border);
242
+ }
243
+
244
+ .drawer-title {
245
+ /* Takes the slack so the two controls group at the trailing edge. With
246
+ space-between and three items the middle one floats, which reads as the
247
+ title and the close button being a pair with New chat wedged between
248
+ them. Truncates rather than pushing them off the row. */
249
+ flex: 1 1 auto;
250
+ min-width: 0;
251
+ overflow: hidden;
252
+ text-overflow: ellipsis;
253
+ white-space: nowrap;
254
+ font-weight: 600;
255
+ }
256
+
257
+ .drawer-new {
258
+ flex: 0 0 auto;
259
+ border: 1px solid var(--_border);
260
+ border-radius: var(--_radius);
261
+ background: var(--_bg);
262
+ color: var(--_accent);
263
+ padding: 4px 10px;
264
+ font: inherit;
265
+ font-size: 0.85em;
266
+ cursor: pointer;
267
+ }
268
+
269
+ /* Narrows the list. Sits under the header rather than in it: the header's two
270
+ controls act on the conversation, and a field that filters what is below it
271
+ belongs with what it filters. */
272
+ /* What is waiting for the run to finish. Above the composer, beside the
273
+ attachment tray, because both are things already handed over and not yet
274
+ sent. Each chip is a button: pressing it takes that message back. */
275
+ .queued {
276
+ display: flex;
277
+ flex-wrap: wrap;
278
+ gap: var(--_space);
279
+ padding: 0 var(--_pad) var(--_space);
280
+ }
281
+
282
+ /* Empty whenever no run is in flight, and hidden then. Same reason as the
283
+ palette: the display above would otherwise keep the bottom padding as dead
284
+ space over the composer. */
285
+ .queued[hidden] {
286
+ display: none;
287
+ }
288
+
289
+ .queued-chip {
290
+ max-width: 100%;
291
+ overflow: hidden;
292
+ padding: 4px 10px;
293
+ border: 1px dashed var(--_border);
294
+ border-radius: var(--_msg-radius);
295
+ background: var(--_bg);
296
+ color: var(--_muted);
297
+ font: inherit;
298
+ font-size: 0.9em;
299
+ text-overflow: ellipsis;
300
+ white-space: nowrap;
301
+ cursor: pointer;
302
+ }
303
+
304
+ .queued-chip:hover {
305
+ border-style: solid;
306
+ color: var(--_fg);
307
+ }
308
+
309
+ .drawer-filter {
310
+ flex: 0 0 auto;
311
+ box-sizing: border-box;
312
+ width: calc(100% - var(--_pad) * 2);
313
+ margin: var(--_space) var(--_pad) 0;
314
+ padding: 6px 10px;
315
+ border: 1px solid var(--_border);
316
+ border-radius: var(--_radius);
317
+ background: var(--_input-bg);
318
+ color: var(--_fg);
319
+ font: inherit;
320
+ font-size: 0.9em;
321
+ }
322
+
323
+ .drawer-filter::placeholder {
324
+ color: var(--_muted);
325
+ }
326
+
327
+ .drawer-list {
328
+ flex: 1;
329
+ min-height: 0;
330
+ overflow-y: auto;
331
+ /* Scrolling past the end of this must not scroll the page behind it. */
332
+ overscroll-behavior: contain;
333
+ }
334
+
335
+ .drawer-empty {
336
+ padding: var(--_pad);
337
+ font-size: 0.9em;
338
+ color: var(--_muted);
339
+ }
340
+
341
+ /* An age group's heading: quieter than the rows it heads, and not a stop for Tab. */
342
+ .drawer-group-label {
343
+ padding: 0.75rem var(--_pad) 0.25rem;
344
+ border-bottom: 1px solid var(--_border);
345
+ font-size: 0.75em;
346
+ font-weight: 600;
347
+ color: var(--_muted);
348
+ }
349
+
350
+ .drawer-row {
351
+ display: flex;
352
+ align-items: stretch;
353
+ border-bottom: 1px solid var(--_border);
354
+ }
355
+
356
+ .drawer-row--active {
357
+ background: var(--_assistant-bg);
358
+ }
359
+
360
+ .drawer-row-select {
361
+ flex: 1;
362
+ min-width: 0;
363
+ display: flex;
364
+ flex-direction: column;
365
+ gap: 2px;
366
+ padding: 8px 12px;
367
+ border: none;
368
+ background: none;
369
+ color: inherit;
370
+ font: inherit;
371
+ text-align: left;
372
+ cursor: pointer;
373
+ }
374
+
375
+ .drawer-row-title {
376
+ font-weight: 600;
377
+ overflow: hidden;
378
+ white-space: nowrap;
379
+ text-overflow: ellipsis;
380
+ }
381
+
382
+ .drawer-row-time {
383
+ font-size: 0.72em;
384
+ color: var(--_muted);
385
+ }
386
+
387
+ .drawer-row-preview {
388
+ font-size: 0.8em;
389
+ color: var(--_muted);
390
+ overflow: hidden;
391
+ white-space: nowrap;
392
+ text-overflow: ellipsis;
393
+ }
394
+
395
+ .drawer-row-actions {
396
+ display: flex;
397
+ align-items: center;
398
+ gap: 2px;
399
+ padding: 0 6px;
400
+ }
401
+
402
+ .drawer-row-rename,
403
+ .drawer-row-delete {
404
+ border: none;
405
+ background: none;
406
+ color: var(--_muted);
407
+ font-size: 0.9em;
408
+ padding: 4px;
409
+ cursor: pointer;
410
+ }
411
+
412
+ .drawer-rename-input {
413
+ flex: 1;
414
+ min-width: 0;
415
+ margin: 6px 10px;
416
+ padding: 4px 8px;
417
+ border: 1px solid var(--_accent);
418
+ border-radius: 6px;
419
+ background: var(--_input-bg);
420
+ color: var(--_fg);
421
+ font: inherit;
422
+ }
423
+
424
+ .drawer-confirm {
425
+ display: flex;
426
+ align-items: center;
427
+ gap: 8px;
428
+ padding: 8px 12px;
429
+ font-size: 0.85em;
430
+ }
431
+
432
+ .drawer-confirm-label {
433
+ color: var(--_danger);
434
+ }
435
+
436
+ .drawer-confirm-yes {
437
+ border: none;
438
+ border-radius: 6px;
439
+ background: var(--_danger);
440
+ color: var(--_on-danger);
441
+ padding: 3px 10px;
442
+ font: inherit;
443
+ cursor: pointer;
444
+ }
445
+
446
+ .drawer-confirm-no {
447
+ border: 1px solid var(--_border);
448
+ border-radius: 6px;
449
+ background: none;
450
+ color: inherit;
451
+ padding: 3px 10px;
452
+ font: inherit;
453
+ cursor: pointer;
454
+ }
455
+
456
+ /* Embedded placement: an inline, flush side panel rather than a dimmed,
457
+ floating slide-over. */
458
+ :host([placement="embedded"]) .drawer-backdrop {
459
+ background: none;
460
+ }
461
+
462
+ /* The way back out of the list. It sits beside New chat, which is the control
463
+ it must not be mistaken for: one returns you to the conversation you were
464
+ reading, the other replaces it. */
465
+ .drawer-close {
466
+ flex: 0 0 auto;
467
+ display: inline-flex;
468
+ align-items: center;
469
+ justify-content: center;
470
+ width: 26px;
471
+ height: 26px;
472
+ padding: 0;
473
+ border: 0;
474
+ border-radius: 6px;
475
+ background: none;
476
+ color: inherit;
477
+ font: inherit;
478
+ font-size: 18px;
479
+ line-height: 1;
480
+ cursor: pointer;
481
+ }
482
+
483
+ .drawer-close:hover {
484
+ background: var(--_hover);
485
+ }
486
+
487
+ :host([placement="embedded"]) .drawer-panel {
488
+ width: 100%;
489
+ border-right: none;
490
+ box-shadow: none;
491
+ }
492
+ `;
@@ -0,0 +1,50 @@
1
+ import { fillUiString } from "../fill_ui_string.js";
2
+ import { DEFAULT_UI_STRINGS, type UiStrings } from "../ui_strings.js";
3
+
4
+ /**
5
+ * A compact relative timestamp for a thread row — e.g. `"just now"`, `"5m ago"`,
6
+ * `"3h ago"`, `"2d ago"`, `"4w ago"`.
7
+ *
8
+ * `now` is injectable so callers and tests can pin the reference point. A
9
+ * future timestamp (clock skew) and a non-finite one (an unparseable or missing
10
+ * `updated_at`, arriving as `NaN`) both read as `justNow`, rather than
11
+ * rendering a nonsense age. Unit words come from {@link UiStrings} with `{n}`
12
+ * filled in here; the bucketing stays integer-rounded and locale-neutral.
13
+ */
14
+ export function relativeTime(
15
+ timestamp: number,
16
+ now: number = Date.now(),
17
+ strings: UiStrings = DEFAULT_UI_STRINGS,
18
+ ): string {
19
+ if (!Number.isFinite(timestamp)) {
20
+ return strings.justNow;
21
+ }
22
+ const seconds = Math.round((now - timestamp) / 1000);
23
+ if (seconds < 60) {
24
+ return strings.justNow;
25
+ }
26
+ const minutes = Math.round(seconds / 60);
27
+ if (minutes < 60) {
28
+ return fillUiString(strings.minutesAgo, { n: minutes });
29
+ }
30
+ const hours = Math.round(minutes / 60);
31
+ if (hours < 24) {
32
+ return fillUiString(strings.hoursAgo, { n: hours });
33
+ }
34
+ const days = Math.round(hours / 24);
35
+ if (days < 7) {
36
+ return fillUiString(strings.daysAgo, { n: days });
37
+ }
38
+ return fillUiString(strings.weeksAgo, { n: Math.round(days / 7) });
39
+ }
40
+
41
+ /**
42
+ * A host's replacement for {@link relativeTime}.
43
+ *
44
+ * Takes an epoch-milliseconds timestamp and returns the text a row shows.
45
+ * `Intl.RelativeTimeFormat` is the obvious implementation and is deliberately
46
+ * *not* the default: a component that guessed a locale would disagree with the
47
+ * host page's own formatting, and being wrong in a second language is worse
48
+ * than being neutral in one.
49
+ */
50
+ export type RelativeTimeFormatter = (timestamp: number) => string;