@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.
- package/CHANGELOG.md +68 -0
- package/LICENSE +21 -0
- package/README.md +4397 -2
- package/dist/agents-web-components.bundle.js +5708 -0
- package/dist/agents-web-components.bundle.js.map +7 -0
- package/dist/bundle.d.ts +3 -0
- package/dist/bundle.d.ts.map +1 -0
- package/dist/chat.d.ts +3 -0
- package/dist/chat.d.ts.map +1 -0
- package/dist/chat.js +16373 -0
- package/dist/chat.js.map +7 -0
- package/dist/chunk-ARNLFGCC.js +7715 -0
- package/dist/chunk-ARNLFGCC.js.map +7 -0
- package/dist/constants.d.ts +575 -0
- package/dist/constants.d.ts.map +1 -0
- package/dist/core/activity_registration.d.ts +19 -0
- package/dist/core/activity_registration.d.ts.map +1 -0
- package/dist/core/activity_registry.d.ts +46 -0
- package/dist/core/activity_registry.d.ts.map +1 -0
- package/dist/core/activity_renderer.d.ts +20 -0
- package/dist/core/activity_renderer.d.ts.map +1 -0
- package/dist/core/ag_ui_chat.d.ts +836 -0
- package/dist/core/ag_ui_chat.d.ts.map +1 -0
- package/dist/core/agui_client.d.ts +370 -0
- package/dist/core/agui_client.d.ts.map +1 -0
- package/dist/core/attachment.d.ts +42 -0
- package/dist/core/attachment.d.ts.map +1 -0
- package/dist/core/chat_registry.d.ts +23 -0
- package/dist/core/chat_registry.d.ts.map +1 -0
- package/dist/core/client_seed.d.ts +27 -0
- package/dist/core/client_seed.d.ts.map +1 -0
- package/dist/core/conversation_store.d.ts +195 -0
- package/dist/core/conversation_store.d.ts.map +1 -0
- package/dist/core/create_http_agent.d.ts +57 -0
- package/dist/core/create_http_agent.d.ts.map +1 -0
- package/dist/core/define_chat.d.ts +13 -0
- package/dist/core/define_chat.d.ts.map +1 -0
- package/dist/core/events/attachments_detail.d.ts +9 -0
- package/dist/core/events/attachments_detail.d.ts.map +1 -0
- package/dist/core/events/bar_height_detail.d.ts +6 -0
- package/dist/core/events/bar_height_detail.d.ts.map +1 -0
- package/dist/core/events/custom_agent_detail.d.ts +8 -0
- package/dist/core/events/custom_agent_detail.d.ts.map +1 -0
- package/dist/core/events/dock_width_detail.d.ts +8 -0
- package/dist/core/events/dock_width_detail.d.ts.map +1 -0
- package/dist/core/events/feedback_detail.d.ts +28 -0
- package/dist/core/events/feedback_detail.d.ts.map +1 -0
- package/dist/core/events/invalidate_detail.d.ts +16 -0
- package/dist/core/events/invalidate_detail.d.ts.map +1 -0
- package/dist/core/events/maximize_detail.d.ts +5 -0
- package/dist/core/events/maximize_detail.d.ts.map +1 -0
- package/dist/core/events/run_finished_detail.d.ts +36 -0
- package/dist/core/events/run_finished_detail.d.ts.map +1 -0
- package/dist/core/events/state_detail.d.ts +5 -0
- package/dist/core/events/state_detail.d.ts.map +1 -0
- package/dist/core/events/submit_detail.d.ts +8 -0
- package/dist/core/events/submit_detail.d.ts.map +1 -0
- package/dist/core/events/thread_detail.d.ts +27 -0
- package/dist/core/events/thread_detail.d.ts.map +1 -0
- package/dist/core/events/thread_title_detail.d.ts +8 -0
- package/dist/core/events/thread_title_detail.d.ts.map +1 -0
- package/dist/core/events/toggle_detail.d.ts +5 -0
- package/dist/core/events/toggle_detail.d.ts.map +1 -0
- package/dist/core/events/tool_run.d.ts +11 -0
- package/dist/core/events/tool_run.d.ts.map +1 -0
- package/dist/core/events/unread_detail.d.ts +11 -0
- package/dist/core/events/unread_detail.d.ts.map +1 -0
- package/dist/core/message_role.d.ts +4 -0
- package/dist/core/message_role.d.ts.map +1 -0
- package/dist/core/read_flag.d.ts +11 -0
- package/dist/core/read_flag.d.ts.map +1 -0
- package/dist/core/read_json_attribute.d.ts +15 -0
- package/dist/core/read_json_attribute.d.ts.map +1 -0
- package/dist/core/read_max_tool_rounds.d.ts +9 -0
- package/dist/core/read_max_tool_rounds.d.ts.map +1 -0
- package/dist/core/remote_conversation_store.d.ts +71 -0
- package/dist/core/remote_conversation_store.d.ts.map +1 -0
- package/dist/core/run_handlers.d.ts +85 -0
- package/dist/core/run_handlers.d.ts.map +1 -0
- package/dist/core/run_index.d.ts +58 -0
- package/dist/core/run_index.d.ts.map +1 -0
- package/dist/core/storage_scope.d.ts +118 -0
- package/dist/core/storage_scope.d.ts.map +1 -0
- package/dist/core/tool_outcome.d.ts +27 -0
- package/dist/core/tool_outcome.d.ts.map +1 -0
- package/dist/core/transcribe_audio.d.ts +32 -0
- package/dist/core/transcribe_audio.d.ts.map +1 -0
- package/dist/core/upload_attachment.d.ts +44 -0
- package/dist/core/upload_attachment.d.ts.map +1 -0
- package/dist/core/utils.d.ts +117 -0
- package/dist/core/utils.d.ts.map +1 -0
- package/dist/dom/animations.d.ts +122 -0
- package/dist/dom/animations.d.ts.map +1 -0
- package/dist/dom/dom_driver.d.ts +28 -0
- package/dist/dom/dom_driver.d.ts.map +1 -0
- package/dist/dom/highlight_overlay.d.ts +39 -0
- package/dist/dom/highlight_overlay.d.ts.map +1 -0
- package/dist/dom/native_setter.d.ts +5 -0
- package/dist/dom/native_setter.d.ts.map +1 -0
- package/dist/dom/ring_color.d.ts +16 -0
- package/dist/dom/ring_color.d.ts.map +1 -0
- package/dist/dom/utils.d.ts +3 -0
- package/dist/dom/utils.d.ts.map +1 -0
- package/dist/index.d.ts +62 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +223 -0
- package/dist/index.js.map +7 -0
- package/dist/skills/fill_template.d.ts +16 -0
- package/dist/skills/fill_template.d.ts.map +1 -0
- package/dist/skills/parse_skills.d.ts +8 -0
- package/dist/skills/parse_skills.d.ts.map +1 -0
- package/dist/skills/skill.d.ts +33 -0
- package/dist/skills/skill.d.ts.map +1 -0
- package/dist/skills/skill_catalog.d.ts +69 -0
- package/dist/skills/skill_catalog.d.ts.map +1 -0
- package/dist/skills/skill_name_from.d.ts +12 -0
- package/dist/skills/skill_name_from.d.ts.map +1 -0
- package/dist/tools/chat_surface_tools.d.ts +77 -0
- package/dist/tools/chat_surface_tools.d.ts.map +1 -0
- package/dist/tools/client_tool_registry.d.ts +58 -0
- package/dist/tools/client_tool_registry.d.ts.map +1 -0
- package/dist/tools/is_destructive.d.ts +14 -0
- package/dist/tools/is_destructive.d.ts.map +1 -0
- package/dist/tools/is_navigates.d.ts +9 -0
- package/dist/tools/is_navigates.d.ts.map +1 -0
- package/dist/tools/page_action_tools.d.ts +30 -0
- package/dist/tools/page_action_tools.d.ts.map +1 -0
- package/dist/tools/page_map.d.ts +16 -0
- package/dist/tools/page_map.d.ts.map +1 -0
- package/dist/tools/page_state.d.ts +27 -0
- package/dist/tools/page_state.d.ts.map +1 -0
- package/dist/tools/parse_tool_catalog.d.ts +21 -0
- package/dist/tools/parse_tool_catalog.d.ts.map +1 -0
- package/dist/tools/route_map.d.ts +37 -0
- package/dist/tools/route_map.d.ts.map +1 -0
- package/dist/tools/tool_catalog.d.ts +86 -0
- package/dist/tools/tool_catalog.d.ts.map +1 -0
- package/dist/tools/tool_dispatch.d.ts +82 -0
- package/dist/tools/tool_dispatch.d.ts.map +1 -0
- package/dist/ui/charts/chart_block.d.ts +57 -0
- package/dist/ui/charts/chart_block.d.ts.map +1 -0
- package/dist/ui/charts/chart_spec_from.d.ts +12 -0
- package/dist/ui/charts/chart_spec_from.d.ts.map +1 -0
- package/dist/ui/charts/chart_styles.d.ts +2 -0
- package/dist/ui/charts/chart_styles.d.ts.map +1 -0
- package/dist/ui/charts/chart_tool.d.ts +15 -0
- package/dist/ui/charts/chart_tool.d.ts.map +1 -0
- package/dist/ui/composer/attachment_styles.d.ts +2 -0
- package/dist/ui/composer/attachment_styles.d.ts.map +1 -0
- package/dist/ui/composer/attachment_tray.d.ts +53 -0
- package/dist/ui/composer/attachment_tray.d.ts.map +1 -0
- package/dist/ui/composer/auto_grow.d.ts +10 -0
- package/dist/ui/composer/auto_grow.d.ts.map +1 -0
- package/dist/ui/composer/build_composer.d.ts +32 -0
- package/dist/ui/composer/build_composer.d.ts.map +1 -0
- package/dist/ui/composer/composer_attachments.d.ts +57 -0
- package/dist/ui/composer/composer_attachments.d.ts.map +1 -0
- package/dist/ui/composer/composer_styles.d.ts +2 -0
- package/dist/ui/composer/composer_styles.d.ts.map +1 -0
- package/dist/ui/composer/composer_voice.d.ts +48 -0
- package/dist/ui/composer/composer_voice.d.ts.map +1 -0
- package/dist/ui/composer/skill_styles.d.ts +2 -0
- package/dist/ui/composer/skill_styles.d.ts.map +1 -0
- package/dist/ui/composer/skills_menu.d.ts +34 -0
- package/dist/ui/composer/skills_menu.d.ts.map +1 -0
- package/dist/ui/composer/voice_input.d.ts +46 -0
- package/dist/ui/composer/voice_input.d.ts.map +1 -0
- package/dist/ui/excerpts/attach_copy_buttons.d.ts +13 -0
- package/dist/ui/excerpts/attach_copy_buttons.d.ts.map +1 -0
- package/dist/ui/excerpts/copy_payload.d.ts +30 -0
- package/dist/ui/excerpts/copy_payload.d.ts.map +1 -0
- package/dist/ui/excerpts/page_quote_offer.d.ts +33 -0
- package/dist/ui/excerpts/page_quote_offer.d.ts.map +1 -0
- package/dist/ui/excerpts/place_offer.d.ts +9 -0
- package/dist/ui/excerpts/place_offer.d.ts.map +1 -0
- package/dist/ui/excerpts/quote_selection.d.ts +66 -0
- package/dist/ui/excerpts/quote_selection.d.ts.map +1 -0
- package/dist/ui/excerpts/transcript_quote_offer.d.ts +57 -0
- package/dist/ui/excerpts/transcript_quote_offer.d.ts.map +1 -0
- package/dist/ui/fill_ui_string.d.ts +32 -0
- package/dist/ui/fill_ui_string.d.ts.map +1 -0
- package/dist/ui/history/checkpoint_menu.d.ts +41 -0
- package/dist/ui/history/checkpoint_menu.d.ts.map +1 -0
- package/dist/ui/history/conversation_history.d.ts +317 -0
- package/dist/ui/history/conversation_history.d.ts.map +1 -0
- package/dist/ui/history/history_styles.d.ts +2 -0
- package/dist/ui/history/history_styles.d.ts.map +1 -0
- package/dist/ui/history/relative_time.d.ts +23 -0
- package/dist/ui/history/relative_time.d.ts.map +1 -0
- package/dist/ui/history/thread_drawer.d.ts +64 -0
- package/dist/ui/history/thread_drawer.d.ts.map +1 -0
- package/dist/ui/history/utils.d.ts +2 -0
- package/dist/ui/history/utils.d.ts.map +1 -0
- package/dist/ui/interrupts/approval_card.d.ts +64 -0
- package/dist/ui/interrupts/approval_card.d.ts.map +1 -0
- package/dist/ui/interrupts/approval_styles.d.ts +2 -0
- package/dist/ui/interrupts/approval_styles.d.ts.map +1 -0
- package/dist/ui/interrupts/confirmation_card.d.ts +51 -0
- package/dist/ui/interrupts/confirmation_card.d.ts.map +1 -0
- package/dist/ui/interrupts/confirmation_styles.d.ts +2 -0
- package/dist/ui/interrupts/confirmation_styles.d.ts.map +1 -0
- package/dist/ui/interrupts/pending_decision.d.ts +22 -0
- package/dist/ui/interrupts/pending_decision.d.ts.map +1 -0
- package/dist/ui/interrupts/question_card.d.ts +49 -0
- package/dist/ui/interrupts/question_card.d.ts.map +1 -0
- package/dist/ui/interrupts/question_styles.d.ts +2 -0
- package/dist/ui/interrupts/question_styles.d.ts.map +1 -0
- package/dist/ui/place/place.d.ts +17 -0
- package/dist/ui/place/place.d.ts.map +1 -0
- package/dist/ui/place/place_chip.d.ts +26 -0
- package/dist/ui/place/place_chip.d.ts.map +1 -0
- package/dist/ui/place/place_from_route.d.ts +9 -0
- package/dist/ui/place/place_from_route.d.ts.map +1 -0
- package/dist/ui/place/place_styles.d.ts +2 -0
- package/dist/ui/place/place_styles.d.ts.map +1 -0
- package/dist/ui/placement/clamp_launcher.d.ts +20 -0
- package/dist/ui/placement/clamp_launcher.d.ts.map +1 -0
- package/dist/ui/placement/clamp_panel.d.ts +13 -0
- package/dist/ui/placement/clamp_panel.d.ts.map +1 -0
- package/dist/ui/placement/collapse_styles.d.ts +2 -0
- package/dist/ui/placement/collapse_styles.d.ts.map +1 -0
- package/dist/ui/placement/dock_styles.d.ts +2 -0
- package/dist/ui/placement/dock_styles.d.ts.map +1 -0
- package/dist/ui/placement/embedded_styles.d.ts +2 -0
- package/dist/ui/placement/embedded_styles.d.ts.map +1 -0
- package/dist/ui/placement/launcher_drag.d.ts +49 -0
- package/dist/ui/placement/launcher_drag.d.ts.map +1 -0
- package/dist/ui/placement/launcher_placement.d.ts +77 -0
- package/dist/ui/placement/launcher_placement.d.ts.map +1 -0
- package/dist/ui/placement/launcher_styles.d.ts +2 -0
- package/dist/ui/placement/launcher_styles.d.ts.map +1 -0
- package/dist/ui/placement/page_styles.d.ts +2 -0
- package/dist/ui/placement/page_styles.d.ts.map +1 -0
- package/dist/ui/placement/panel_drag.d.ts +40 -0
- package/dist/ui/placement/panel_drag.d.ts.map +1 -0
- package/dist/ui/placement/panel_placement.d.ts +173 -0
- package/dist/ui/placement/panel_placement.d.ts.map +1 -0
- package/dist/ui/placement/place_widget.d.ts +31 -0
- package/dist/ui/placement/place_widget.d.ts.map +1 -0
- package/dist/ui/placement/preset_styles.d.ts +2 -0
- package/dist/ui/placement/preset_styles.d.ts.map +1 -0
- package/dist/ui/placement/resize_handle.d.ts +78 -0
- package/dist/ui/placement/resize_handle.d.ts.map +1 -0
- package/dist/ui/placement/resize_styles.d.ts +2 -0
- package/dist/ui/placement/resize_styles.d.ts.map +1 -0
- package/dist/ui/placement/sidebar_styles.d.ts +2 -0
- package/dist/ui/placement/sidebar_styles.d.ts.map +1 -0
- package/dist/ui/placement/small_viewport_styles.d.ts +2 -0
- package/dist/ui/placement/small_viewport_styles.d.ts.map +1 -0
- package/dist/ui/placement/surface_for.d.ts +93 -0
- package/dist/ui/placement/surface_for.d.ts.map +1 -0
- package/dist/ui/progress/prettify_tool_name.d.ts +11 -0
- package/dist/ui/progress/prettify_tool_name.d.ts.map +1 -0
- package/dist/ui/progress/run_announcer.d.ts +41 -0
- package/dist/ui/progress/run_announcer.d.ts.map +1 -0
- package/dist/ui/progress/run_notice.d.ts +21 -0
- package/dist/ui/progress/run_notice.d.ts.map +1 -0
- package/dist/ui/progress/run_notice_styles.d.ts +2 -0
- package/dist/ui/progress/run_notice_styles.d.ts.map +1 -0
- package/dist/ui/progress/subagent_panel.d.ts +101 -0
- package/dist/ui/progress/subagent_panel.d.ts.map +1 -0
- package/dist/ui/progress/subagent_progress.d.ts +57 -0
- package/dist/ui/progress/subagent_progress.d.ts.map +1 -0
- package/dist/ui/progress/subagent_update.d.ts +28 -0
- package/dist/ui/progress/subagent_update.d.ts.map +1 -0
- package/dist/ui/progress/thoughts_block.d.ts +57 -0
- package/dist/ui/progress/thoughts_block.d.ts.map +1 -0
- package/dist/ui/progress/thoughts_styles.d.ts +2 -0
- package/dist/ui/progress/thoughts_styles.d.ts.map +1 -0
- package/dist/ui/progress/tool_call_card.d.ts +167 -0
- package/dist/ui/progress/tool_call_card.d.ts.map +1 -0
- package/dist/ui/progress/tool_group_styles.d.ts +2 -0
- package/dist/ui/progress/tool_group_styles.d.ts.map +1 -0
- package/dist/ui/progress/tool_step_group.d.ts +50 -0
- package/dist/ui/progress/tool_step_group.d.ts.map +1 -0
- package/dist/ui/progress/tool_step_styles.d.ts +2 -0
- package/dist/ui/progress/tool_step_styles.d.ts.map +1 -0
- package/dist/ui/shell/adopt_styles.d.ts +28 -0
- package/dist/ui/shell/adopt_styles.d.ts.map +1 -0
- package/dist/ui/shell/build_header.d.ts +45 -0
- package/dist/ui/shell/build_header.d.ts.map +1 -0
- package/dist/ui/shell/build_launcher.d.ts +33 -0
- package/dist/ui/shell/build_launcher.d.ts.map +1 -0
- package/dist/ui/shell/collapse_glyph.d.ts +14 -0
- package/dist/ui/shell/collapse_glyph.d.ts.map +1 -0
- package/dist/ui/shell/frame_styles.d.ts +2 -0
- package/dist/ui/shell/frame_styles.d.ts.map +1 -0
- package/dist/ui/shell/glyph_slot.d.ts +7 -0
- package/dist/ui/shell/glyph_slot.d.ts.map +1 -0
- package/dist/ui/shell/header_button.d.ts +11 -0
- package/dist/ui/shell/header_button.d.ts.map +1 -0
- package/dist/ui/shell/icon_element.d.ts +12 -0
- package/dist/ui/shell/icon_element.d.ts.map +1 -0
- package/dist/ui/shell/is_unread_badge_enabled.d.ts +10 -0
- package/dist/ui/shell/is_unread_badge_enabled.d.ts.map +1 -0
- package/dist/ui/shell/read_launcher_icon_url.d.ts +8 -0
- package/dist/ui/shell/read_launcher_icon_url.d.ts.map +1 -0
- package/dist/ui/shell/theme_styles.d.ts +2 -0
- package/dist/ui/shell/theme_styles.d.ts.map +1 -0
- package/dist/ui/shell/token_styles.d.ts +2 -0
- package/dist/ui/shell/token_styles.d.ts.map +1 -0
- package/dist/ui/styles.d.ts +2 -0
- package/dist/ui/styles.d.ts.map +1 -0
- package/dist/ui/themes/classic_styles.d.ts +2 -0
- package/dist/ui/themes/classic_styles.d.ts.map +1 -0
- package/dist/ui/themes/classic_tokens.d.ts +2 -0
- package/dist/ui/themes/classic_tokens.d.ts.map +1 -0
- package/dist/ui/themes/code_tokens.d.ts +2 -0
- package/dist/ui/themes/code_tokens.d.ts.map +1 -0
- package/dist/ui/themes/ledger_styles.d.ts +2 -0
- package/dist/ui/themes/ledger_styles.d.ts.map +1 -0
- package/dist/ui/themes/ledger_tokens.d.ts +2 -0
- package/dist/ui/themes/ledger_tokens.d.ts.map +1 -0
- package/dist/ui/themes/modern_styles.d.ts +2 -0
- package/dist/ui/themes/modern_styles.d.ts.map +1 -0
- package/dist/ui/themes/quiet_styles.d.ts +2 -0
- package/dist/ui/themes/quiet_styles.d.ts.map +1 -0
- package/dist/ui/themes/scheme_styles.d.ts +2 -0
- package/dist/ui/themes/scheme_styles.d.ts.map +1 -0
- package/dist/ui/themes/soft_styles.d.ts +2 -0
- package/dist/ui/themes/soft_styles.d.ts.map +1 -0
- package/dist/ui/themes/soft_tokens.d.ts +2 -0
- package/dist/ui/themes/soft_tokens.d.ts.map +1 -0
- package/dist/ui/themes/theme_hosts.d.ts +15 -0
- package/dist/ui/themes/theme_hosts.d.ts.map +1 -0
- package/dist/ui/transcript/answer_actions.d.ts +50 -0
- package/dist/ui/transcript/answer_actions.d.ts.map +1 -0
- package/dist/ui/transcript/answer_stream.d.ts +56 -0
- package/dist/ui/transcript/answer_stream.d.ts.map +1 -0
- package/dist/ui/transcript/attachment_chip_styles.d.ts +2 -0
- package/dist/ui/transcript/attachment_chip_styles.d.ts.map +1 -0
- package/dist/ui/transcript/attachment_chips.d.ts +21 -0
- package/dist/ui/transcript/attachment_chips.d.ts.map +1 -0
- package/dist/ui/transcript/build_transcript.d.ts +21 -0
- package/dist/ui/transcript/build_transcript.d.ts.map +1 -0
- package/dist/ui/transcript/greeting_styles.d.ts +2 -0
- package/dist/ui/transcript/greeting_styles.d.ts.map +1 -0
- package/dist/ui/transcript/groups_tool_steps.d.ts +13 -0
- package/dist/ui/transcript/groups_tool_steps.d.ts.map +1 -0
- package/dist/ui/transcript/message_action_styles.d.ts +2 -0
- package/dist/ui/transcript/message_action_styles.d.ts.map +1 -0
- package/dist/ui/transcript/message_actions.d.ts +74 -0
- package/dist/ui/transcript/message_actions.d.ts.map +1 -0
- package/dist/ui/transcript/message_styles.d.ts +2 -0
- package/dist/ui/transcript/message_styles.d.ts.map +1 -0
- package/dist/ui/transcript/render_markdown.d.ts +40 -0
- package/dist/ui/transcript/render_markdown.d.ts.map +1 -0
- package/dist/ui/transcript/render_or_warn.d.ts +16 -0
- package/dist/ui/transcript/render_or_warn.d.ts.map +1 -0
- package/dist/ui/transcript/reveal_words.d.ts +8 -0
- package/dist/ui/transcript/reveal_words.d.ts.map +1 -0
- package/dist/ui/transcript/starter_chips.d.ts +21 -0
- package/dist/ui/transcript/starter_chips.d.ts.map +1 -0
- package/dist/ui/transcript/stick_to_bottom.d.ts +55 -0
- package/dist/ui/transcript/stick_to_bottom.d.ts.map +1 -0
- package/dist/ui/transcript/suggestion_chips.d.ts +29 -0
- package/dist/ui/transcript/suggestion_chips.d.ts.map +1 -0
- package/dist/ui/transcript/transcript.d.ts +196 -0
- package/dist/ui/transcript/transcript.d.ts.map +1 -0
- package/dist/ui/transcript/transcript_styles.d.ts +2 -0
- package/dist/ui/transcript/transcript_styles.d.ts.map +1 -0
- package/dist/ui/ui_strings.d.ts +352 -0
- package/dist/ui/ui_strings.d.ts.map +1 -0
- package/dist/version.d.ts +2 -0
- package/dist/version.d.ts.map +1 -0
- package/package.json +86 -3
- package/src/bundle.ts +2 -0
- package/src/chat.ts +2 -0
- package/src/constants.ts +650 -0
- package/src/core/activity_registration.ts +19 -0
- package/src/core/activity_registry.ts +133 -0
- package/src/core/activity_renderer.ts +19 -0
- package/src/core/ag_ui_chat.ts +3966 -0
- package/src/core/agui_client.ts +1028 -0
- package/src/core/attachment.ts +62 -0
- package/src/core/chat_registry.ts +53 -0
- package/src/core/client_seed.ts +27 -0
- package/src/core/conversation_store.ts +478 -0
- package/src/core/create_http_agent.ts +97 -0
- package/src/core/define_chat.ts +25 -0
- package/src/core/events/attachments_detail.ts +9 -0
- package/src/core/events/bar_height_detail.ts +5 -0
- package/src/core/events/custom_agent_detail.ts +7 -0
- package/src/core/events/dock_width_detail.ts +7 -0
- package/src/core/events/feedback_detail.ts +27 -0
- package/src/core/events/invalidate_detail.ts +15 -0
- package/src/core/events/maximize_detail.ts +4 -0
- package/src/core/events/run_finished_detail.ts +36 -0
- package/src/core/events/state_detail.ts +4 -0
- package/src/core/events/submit_detail.ts +8 -0
- package/src/core/events/thread_detail.ts +26 -0
- package/src/core/events/thread_title_detail.ts +7 -0
- package/src/core/events/toggle_detail.ts +4 -0
- package/src/core/events/tool_run.ts +10 -0
- package/src/core/events/unread_detail.ts +10 -0
- package/src/core/message_role.ts +4 -0
- package/src/core/read_flag.ts +13 -0
- package/src/core/read_json_attribute.ts +30 -0
- package/src/core/read_max_tool_rounds.ts +13 -0
- package/src/core/remote_conversation_store.ts +279 -0
- package/src/core/run_handlers.ts +524 -0
- package/src/core/run_index.ts +114 -0
- package/src/core/storage_scope.ts +291 -0
- package/src/core/tool_outcome.ts +39 -0
- package/src/core/transcribe_audio.ts +76 -0
- package/src/core/upload_attachment.ts +130 -0
- package/src/core/utils.ts +230 -0
- package/src/dom/animations.ts +341 -0
- package/src/dom/dom_driver.ts +91 -0
- package/src/dom/highlight_overlay.ts +204 -0
- package/src/dom/native_setter.ts +40 -0
- package/src/dom/ring_color.ts +206 -0
- package/src/dom/utils.ts +5 -0
- package/src/index.ts +220 -0
- package/src/skills/fill_template.ts +31 -0
- package/src/skills/parse_skills.ts +31 -0
- package/src/skills/skill.ts +32 -0
- package/src/skills/skill_catalog.ts +172 -0
- package/src/skills/skill_name_from.ts +19 -0
- package/src/tools/chat_surface_tools.ts +183 -0
- package/src/tools/client_tool_registry.ts +80 -0
- package/src/tools/is_destructive.ts +17 -0
- package/src/tools/is_navigates.ts +12 -0
- package/src/tools/page_action_tools.ts +123 -0
- package/src/tools/page_map.ts +26 -0
- package/src/tools/page_state.ts +57 -0
- package/src/tools/parse_tool_catalog.ts +41 -0
- package/src/tools/route_map.ts +132 -0
- package/src/tools/tool_catalog.ts +334 -0
- package/src/tools/tool_dispatch.ts +453 -0
- package/src/ui/charts/chart_block.ts +519 -0
- package/src/ui/charts/chart_spec_from.ts +125 -0
- package/src/ui/charts/chart_styles.ts +63 -0
- package/src/ui/charts/chart_tool.ts +72 -0
- package/src/ui/composer/attachment_styles.ts +71 -0
- package/src/ui/composer/attachment_tray.ts +295 -0
- package/src/ui/composer/auto_grow.ts +12 -0
- package/src/ui/composer/build_composer.ts +114 -0
- package/src/ui/composer/composer_attachments.ts +324 -0
- package/src/ui/composer/composer_styles.ts +177 -0
- package/src/ui/composer/composer_voice.ts +93 -0
- package/src/ui/composer/skill_styles.ts +120 -0
- package/src/ui/composer/skills_menu.ts +188 -0
- package/src/ui/composer/voice_input.ts +282 -0
- package/src/ui/excerpts/attach_copy_buttons.ts +73 -0
- package/src/ui/excerpts/copy_payload.ts +156 -0
- package/src/ui/excerpts/page_quote_offer.ts +203 -0
- package/src/ui/excerpts/place_offer.ts +24 -0
- package/src/ui/excerpts/quote_selection.ts +345 -0
- package/src/ui/excerpts/transcript_quote_offer.ts +175 -0
- package/src/ui/fill_ui_string.ts +41 -0
- package/src/ui/history/checkpoint_menu.ts +300 -0
- package/src/ui/history/conversation_history.ts +1169 -0
- package/src/ui/history/history_styles.ts +492 -0
- package/src/ui/history/relative_time.ts +50 -0
- package/src/ui/history/thread_drawer.ts +471 -0
- package/src/ui/history/utils.ts +11 -0
- package/src/ui/interrupts/approval_card.ts +202 -0
- package/src/ui/interrupts/approval_styles.ts +52 -0
- package/src/ui/interrupts/confirmation_card.ts +138 -0
- package/src/ui/interrupts/confirmation_styles.ts +114 -0
- package/src/ui/interrupts/pending_decision.ts +33 -0
- package/src/ui/interrupts/question_card.ts +213 -0
- package/src/ui/interrupts/question_styles.ts +73 -0
- package/src/ui/place/place.ts +16 -0
- package/src/ui/place/place_chip.ts +146 -0
- package/src/ui/place/place_from_route.ts +27 -0
- package/src/ui/place/place_styles.ts +108 -0
- package/src/ui/placement/clamp_launcher.ts +38 -0
- package/src/ui/placement/clamp_panel.ts +30 -0
- package/src/ui/placement/collapse_styles.ts +472 -0
- package/src/ui/placement/dock_styles.ts +116 -0
- package/src/ui/placement/embedded_styles.ts +14 -0
- package/src/ui/placement/launcher_drag.ts +206 -0
- package/src/ui/placement/launcher_placement.ts +133 -0
- package/src/ui/placement/launcher_styles.ts +189 -0
- package/src/ui/placement/page_styles.ts +47 -0
- package/src/ui/placement/panel_drag.ts +138 -0
- package/src/ui/placement/panel_placement.ts +1975 -0
- package/src/ui/placement/place_widget.ts +64 -0
- package/src/ui/placement/preset_styles.ts +49 -0
- package/src/ui/placement/resize_handle.ts +229 -0
- package/src/ui/placement/resize_styles.ts +201 -0
- package/src/ui/placement/sidebar_styles.ts +113 -0
- package/src/ui/placement/small_viewport_styles.ts +70 -0
- package/src/ui/placement/surface_for.ts +183 -0
- package/src/ui/progress/prettify_tool_name.ts +16 -0
- package/src/ui/progress/run_announcer.ts +67 -0
- package/src/ui/progress/run_notice.ts +61 -0
- package/src/ui/progress/run_notice_styles.ts +52 -0
- package/src/ui/progress/subagent_panel.ts +227 -0
- package/src/ui/progress/subagent_progress.ts +200 -0
- package/src/ui/progress/subagent_update.ts +89 -0
- package/src/ui/progress/thoughts_block.ts +165 -0
- package/src/ui/progress/thoughts_styles.ts +74 -0
- package/src/ui/progress/tool_call_card.ts +429 -0
- package/src/ui/progress/tool_group_styles.ts +313 -0
- package/src/ui/progress/tool_step_group.ts +317 -0
- package/src/ui/progress/tool_step_styles.ts +486 -0
- package/src/ui/shell/adopt_styles.ts +34 -0
- package/src/ui/shell/build_header.ts +121 -0
- package/src/ui/shell/build_launcher.ts +79 -0
- package/src/ui/shell/collapse_glyph.ts +42 -0
- package/src/ui/shell/frame_styles.ts +147 -0
- package/src/ui/shell/glyph_slot.ts +12 -0
- package/src/ui/shell/header_button.ts +22 -0
- package/src/ui/shell/icon_element.ts +33 -0
- package/src/ui/shell/is_unread_badge_enabled.ts +11 -0
- package/src/ui/shell/read_launcher_icon_url.ts +9 -0
- package/src/ui/shell/theme_styles.ts +11 -0
- package/src/ui/shell/token_styles.ts +480 -0
- package/src/ui/styles.ts +110 -0
- package/src/ui/themes/classic_styles.ts +32 -0
- package/src/ui/themes/classic_tokens.ts +51 -0
- package/src/ui/themes/code_tokens.ts +21 -0
- package/src/ui/themes/ledger_styles.ts +169 -0
- package/src/ui/themes/ledger_tokens.ts +33 -0
- package/src/ui/themes/modern_styles.ts +80 -0
- package/src/ui/themes/quiet_styles.ts +118 -0
- package/src/ui/themes/scheme_styles.ts +26 -0
- package/src/ui/themes/soft_styles.ts +149 -0
- package/src/ui/themes/soft_tokens.ts +29 -0
- package/src/ui/themes/theme_hosts.ts +14 -0
- package/src/ui/transcript/answer_actions.ts +165 -0
- package/src/ui/transcript/answer_stream.ts +123 -0
- package/src/ui/transcript/attachment_chip_styles.ts +116 -0
- package/src/ui/transcript/attachment_chips.ts +82 -0
- package/src/ui/transcript/build_transcript.ts +67 -0
- package/src/ui/transcript/greeting_styles.ts +171 -0
- package/src/ui/transcript/groups_tool_steps.ts +16 -0
- package/src/ui/transcript/message_action_styles.ts +155 -0
- package/src/ui/transcript/message_actions.ts +234 -0
- package/src/ui/transcript/message_styles.ts +262 -0
- package/src/ui/transcript/render_markdown.ts +181 -0
- package/src/ui/transcript/render_or_warn.ts +22 -0
- package/src/ui/transcript/reveal_words.ts +41 -0
- package/src/ui/transcript/starter_chips.ts +42 -0
- package/src/ui/transcript/stick_to_bottom.ts +126 -0
- package/src/ui/transcript/suggestion_chips.ts +73 -0
- package/src/ui/transcript/transcript.ts +555 -0
- package/src/ui/transcript/transcript_styles.ts +153 -0
- package/src/ui/ui_strings.ts +550 -0
- package/src/version.ts +1 -0
|
@@ -0,0 +1,313 @@
|
|
|
1
|
+
// The folded tool-step group: one row per run of consecutive tool calls,
|
|
2
|
+
// with the per-call cards one click down.
|
|
3
|
+
|
|
4
|
+
/** The four per-call card modes, as attribute selectors on the host. */
|
|
5
|
+
const CARD_MODES = [
|
|
6
|
+
'[data-tool-display="inline"]',
|
|
7
|
+
'[data-tool-display="minimal"]',
|
|
8
|
+
'[data-tool-display="compact"]',
|
|
9
|
+
'[data-tool-display="full"]',
|
|
10
|
+
].join(", ");
|
|
11
|
+
|
|
12
|
+
/**
|
|
13
|
+
* The host in grouped mode: any data-tool-display but the four card modes,
|
|
14
|
+
* which is how the element's toolDisplay getter reads it, so an absent or
|
|
15
|
+
* unknown value groups here as it does there. Wrapped in :where so it weighs
|
|
16
|
+
* what a bare :host weighs, and a theme restating a group rule on its own
|
|
17
|
+
* :host selector still wins at equal weight.
|
|
18
|
+
*/
|
|
19
|
+
const GROUPED = `:host(:where(:not(${CARD_MODES})))`;
|
|
20
|
+
|
|
21
|
+
/** The host in one of the four card modes, where a group drawn earlier is flattened. */
|
|
22
|
+
const CARDS = `:host(:is(${CARD_MODES}))`;
|
|
23
|
+
|
|
24
|
+
/**
|
|
25
|
+
* A card inside an opened group, with the host in grouped mode and the given
|
|
26
|
+
* data-tool-group-display. The inner attribute sits inside the same :host()
|
|
27
|
+
* as the grouped test, since the host is featureless outside it, and being
|
|
28
|
+
* grouped-only is what lets an outer card mode flatten the group into its own
|
|
29
|
+
* cards: none of these rules match there. Full is no rule at all, so an absent
|
|
30
|
+
* or unknown inner value draws the full card a group always drew.
|
|
31
|
+
*/
|
|
32
|
+
function inner(mode: string): string {
|
|
33
|
+
return `:host(:where(:not(${CARD_MODES}))[data-tool-group-display="${mode}"]) .tool-group-list .tool-call`;
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
export const TOOL_GROUP_STYLES: string = `
|
|
37
|
+
/* ── The folded tool-step group ──────────────────────────────────
|
|
38
|
+
One quiet row per run of consecutive calls, the cards one click down as
|
|
39
|
+
plain lines rather than boxes. Every rule is scoped to grouped mode, so
|
|
40
|
+
none of it reaches a group drawn earlier once the host moves to a card
|
|
41
|
+
mode. */
|
|
42
|
+
${GROUPED} .tool-group {
|
|
43
|
+
align-self: stretch;
|
|
44
|
+
display: flex;
|
|
45
|
+
flex-direction: column;
|
|
46
|
+
min-width: 0;
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
${GROUPED} .tool-group-head {
|
|
50
|
+
appearance: none;
|
|
51
|
+
align-self: flex-start;
|
|
52
|
+
max-width: 100%;
|
|
53
|
+
display: inline-flex;
|
|
54
|
+
align-items: center;
|
|
55
|
+
gap: 8px;
|
|
56
|
+
margin: 0 0 0 -6px;
|
|
57
|
+
padding: 4px 6px;
|
|
58
|
+
border: 0;
|
|
59
|
+
border-radius: 6px;
|
|
60
|
+
background: transparent;
|
|
61
|
+
color: var(--_muted);
|
|
62
|
+
font: inherit;
|
|
63
|
+
font-size: var(--_text-sm);
|
|
64
|
+
line-height: 1.3;
|
|
65
|
+
text-align: left;
|
|
66
|
+
cursor: pointer;
|
|
67
|
+
}
|
|
68
|
+
|
|
69
|
+
${GROUPED} .tool-group-head:not(:disabled):hover {
|
|
70
|
+
background: var(--_hover);
|
|
71
|
+
color: var(--_fg);
|
|
72
|
+
}
|
|
73
|
+
|
|
74
|
+
/* A one-step row with nothing behind it -- a call with no arguments and no
|
|
75
|
+
result yet, or a blank one -- is a label, not a control: the step group
|
|
76
|
+
disables it and drops its expanded state, and this drops the pointer and
|
|
77
|
+
the chevron. Disabled rather than enabled-and-inert, so it takes no focus. */
|
|
78
|
+
${GROUPED} .tool-group-head:disabled {
|
|
79
|
+
cursor: default;
|
|
80
|
+
}
|
|
81
|
+
|
|
82
|
+
${GROUPED} .tool-group-head:disabled .tool-group-chevron {
|
|
83
|
+
display: none;
|
|
84
|
+
}
|
|
85
|
+
|
|
86
|
+
${GROUPED} .tool-group-head:focus-visible {
|
|
87
|
+
outline: 2px solid var(--_ring);
|
|
88
|
+
outline-offset: 1px;
|
|
89
|
+
}
|
|
90
|
+
|
|
91
|
+
${GROUPED} .tool-group-label {
|
|
92
|
+
min-width: 0;
|
|
93
|
+
font-weight: 500;
|
|
94
|
+
color: var(--_ink-2);
|
|
95
|
+
overflow-wrap: anywhere;
|
|
96
|
+
}
|
|
97
|
+
|
|
98
|
+
${GROUPED} .tool-group-meta {
|
|
99
|
+
min-width: 0;
|
|
100
|
+
color: var(--_muted);
|
|
101
|
+
overflow-wrap: anywhere;
|
|
102
|
+
}
|
|
103
|
+
|
|
104
|
+
/* Each note opens with a middle dot, which also parts the first note from
|
|
105
|
+
the label. */
|
|
106
|
+
${GROUPED} .tool-group-note::before {
|
|
107
|
+
content: "\\00B7";
|
|
108
|
+
margin: 0 6px 0 2px;
|
|
109
|
+
}
|
|
110
|
+
|
|
111
|
+
${GROUPED} .tool-group[data-state="error"] .tool-group-meta {
|
|
112
|
+
color: var(--_danger);
|
|
113
|
+
}
|
|
114
|
+
|
|
115
|
+
${GROUPED} .tool-group-icon {
|
|
116
|
+
flex: none;
|
|
117
|
+
box-sizing: border-box;
|
|
118
|
+
width: 14px;
|
|
119
|
+
height: 14px;
|
|
120
|
+
background: currentColor;
|
|
121
|
+
mask: var(--_ico-check) center / contain no-repeat;
|
|
122
|
+
color: var(--_success);
|
|
123
|
+
}
|
|
124
|
+
|
|
125
|
+
${GROUPED} .tool-group[data-state="error"] .tool-group-icon {
|
|
126
|
+
mask-image: var(--_ico-error);
|
|
127
|
+
color: var(--_danger);
|
|
128
|
+
}
|
|
129
|
+
|
|
130
|
+
${GROUPED} .tool-group[data-state="running"] .tool-group-icon {
|
|
131
|
+
mask: none;
|
|
132
|
+
background: none;
|
|
133
|
+
border: 2px solid var(--_muted);
|
|
134
|
+
border-top-color: transparent;
|
|
135
|
+
border-radius: 50%;
|
|
136
|
+
animation: ag-ui-tool-spin var(--_tool-spin-duration) linear infinite;
|
|
137
|
+
}
|
|
138
|
+
|
|
139
|
+
/* Waiting on the user: a steady accent dot rather than a spinner, and the
|
|
140
|
+
count in the accent's ink. */
|
|
141
|
+
${GROUPED} .tool-group[data-state="waiting"] .tool-group-icon {
|
|
142
|
+
mask: none;
|
|
143
|
+
border-radius: 50%;
|
|
144
|
+
transform: scale(0.6);
|
|
145
|
+
background: var(--_accent);
|
|
146
|
+
}
|
|
147
|
+
|
|
148
|
+
${GROUPED} .tool-group[data-state="waiting"] .tool-group-meta {
|
|
149
|
+
color: var(--_accent-ink);
|
|
150
|
+
font-weight: 500;
|
|
151
|
+
}
|
|
152
|
+
|
|
153
|
+
${GROUPED} .tool-group-chevron {
|
|
154
|
+
flex: none;
|
|
155
|
+
width: 12px;
|
|
156
|
+
height: 12px;
|
|
157
|
+
background: currentColor;
|
|
158
|
+
mask: var(--_ico-chevron) center / contain no-repeat;
|
|
159
|
+
opacity: 0.7;
|
|
160
|
+
transition: transform var(--_motion) var(--_ease);
|
|
161
|
+
}
|
|
162
|
+
|
|
163
|
+
${GROUPED} .tool-group[data-open="true"] .tool-group-chevron {
|
|
164
|
+
transform: rotate(90deg);
|
|
165
|
+
}
|
|
166
|
+
|
|
167
|
+
@media (prefers-reduced-motion: reduce) {
|
|
168
|
+
${GROUPED} .tool-group[data-state="running"] .tool-group-icon {
|
|
169
|
+
animation: none;
|
|
170
|
+
}
|
|
171
|
+
}
|
|
172
|
+
|
|
173
|
+
${GROUPED} .tool-group-list {
|
|
174
|
+
display: flex;
|
|
175
|
+
flex-direction: column;
|
|
176
|
+
gap: 2px;
|
|
177
|
+
margin: 2px 0 4px 6px;
|
|
178
|
+
padding-left: 13px;
|
|
179
|
+
border-left: 1px solid var(--_border);
|
|
180
|
+
}
|
|
181
|
+
|
|
182
|
+
${GROUPED} .tool-group[data-open="false"] .tool-group-list {
|
|
183
|
+
display: none;
|
|
184
|
+
}
|
|
185
|
+
|
|
186
|
+
/* A card inside the group is one line of the list: icon, name, and its
|
|
187
|
+
Details control at the end, with the arguments and result opening under
|
|
188
|
+
the whole row. Its ink is the second ink in every theme, unless the host
|
|
189
|
+
set the tool token, which then reaches the grouped calls too. */
|
|
190
|
+
${GROUPED} .tool-group .tool-call {
|
|
191
|
+
max-width: 100%;
|
|
192
|
+
align-self: stretch;
|
|
193
|
+
flex-flow: row wrap;
|
|
194
|
+
align-items: center;
|
|
195
|
+
gap: 2px 10px;
|
|
196
|
+
padding: 3px 0;
|
|
197
|
+
border: 0;
|
|
198
|
+
border-radius: 0;
|
|
199
|
+
background: transparent;
|
|
200
|
+
color: var(--_tool-fg-set, var(--_ink-2));
|
|
201
|
+
font-family: inherit;
|
|
202
|
+
font-size: var(--_text-sm);
|
|
203
|
+
}
|
|
204
|
+
|
|
205
|
+
${GROUPED} .tool-group .tool-call-head {
|
|
206
|
+
flex: 1 1 auto;
|
|
207
|
+
justify-content: flex-start;
|
|
208
|
+
}
|
|
209
|
+
|
|
210
|
+
${GROUPED} .tool-group .tool-call-name {
|
|
211
|
+
flex: 0 1 auto;
|
|
212
|
+
font-weight: 450;
|
|
213
|
+
}
|
|
214
|
+
|
|
215
|
+
/* The repeat ordinal on a step whose label an earlier step has. */
|
|
216
|
+
${GROUPED} .tool-call-repeat {
|
|
217
|
+
color: var(--_muted);
|
|
218
|
+
font-variant-numeric: tabular-nums;
|
|
219
|
+
}
|
|
220
|
+
|
|
221
|
+
${GROUPED} .tool-group .tool-call-toggle {
|
|
222
|
+
font-family: inherit;
|
|
223
|
+
font-size: var(--_text-xs);
|
|
224
|
+
color: var(--_muted);
|
|
225
|
+
}
|
|
226
|
+
|
|
227
|
+
${GROUPED} .tool-group .tool-call-body,
|
|
228
|
+
${GROUPED} .tool-group .tool-call-approval,
|
|
229
|
+
${GROUPED} .tool-group .tool-call-subagent {
|
|
230
|
+
flex-basis: 100%;
|
|
231
|
+
}
|
|
232
|
+
|
|
233
|
+
/* The inner display mode: how an opened group draws its calls. The same
|
|
234
|
+
visibility rules the card modes apply to a flat card, so a call inside the
|
|
235
|
+
group shows the regions the flat card of that mode shows. The flat inline
|
|
236
|
+
mode's chrome rule is left out on purpose: a card in the group has already
|
|
237
|
+
lost its box and is laid out as a row of the list, and that rule's padding
|
|
238
|
+
and gap would undo the row. Selected from the host attribute, so changing it
|
|
239
|
+
restyles groups already on screen. */
|
|
240
|
+
${inner("compact")}[data-expanded="false"] .tool-call-section {
|
|
241
|
+
display: none;
|
|
242
|
+
}
|
|
243
|
+
|
|
244
|
+
${inner("inline")} .tool-call-section--args {
|
|
245
|
+
display: none;
|
|
246
|
+
}
|
|
247
|
+
|
|
248
|
+
${inner("minimal")} .tool-call-toggle,
|
|
249
|
+
${inner("minimal")} .tool-call-body {
|
|
250
|
+
display: none;
|
|
251
|
+
}
|
|
252
|
+
|
|
253
|
+
/* The toggle over nothing, as the card modes refuse it: under every inner mode
|
|
254
|
+
but compact the arguments are not behind the toggle, so a call whose result
|
|
255
|
+
is missing or blank has nothing for it to open. */
|
|
256
|
+
:host(:where(:not(${CARD_MODES})):not([data-tool-group-display="compact"])) .tool-group-list .tool-call:not([data-has-result]) .tool-call-toggle {
|
|
257
|
+
display: none;
|
|
258
|
+
}
|
|
259
|
+
|
|
260
|
+
/* A call waiting on an approval shows its arguments in every inner mode, as it
|
|
261
|
+
does in every card mode, and for the same reason: the arguments are what
|
|
262
|
+
tell three gated calls of one tool apart. These come after the hides above,
|
|
263
|
+
which they tie with on weight. The arguments region only, never every
|
|
264
|
+
section, since the result region carries the hidden attribute until a
|
|
265
|
+
result exists and a display value here would override it. The arguments
|
|
266
|
+
region carries it too when the call has none, so it is excluded while
|
|
267
|
+
hidden rather than framed empty. */
|
|
268
|
+
${inner("minimal")}[data-status="deferred"] .tool-call-body {
|
|
269
|
+
display: flex;
|
|
270
|
+
}
|
|
271
|
+
|
|
272
|
+
${inner("compact")}[data-status="deferred"] .tool-call-section--args:not([hidden]),
|
|
273
|
+
${inner("inline")}[data-status="deferred"] .tool-call-section--args:not([hidden]) {
|
|
274
|
+
display: flex;
|
|
275
|
+
}
|
|
276
|
+
|
|
277
|
+
/* A one-step group already names its call in the row, so the card's own head
|
|
278
|
+
is not drawn inside it. Under the minimal inner mode a card is only its head,
|
|
279
|
+
so the row has nothing to open onto and draws no chevron. Grouped-only, so a
|
|
280
|
+
card mode keeps the head. data-count is rewritten live as a run grows. */
|
|
281
|
+
${GROUPED} .tool-group[data-count="1"] .tool-call-head {
|
|
282
|
+
display: none;
|
|
283
|
+
}
|
|
284
|
+
|
|
285
|
+
:host(:where(:not(${CARD_MODES}))[data-tool-group-display="minimal"]) .tool-group[data-count="1"] .tool-group-chevron {
|
|
286
|
+
display: none;
|
|
287
|
+
}
|
|
288
|
+
|
|
289
|
+
/* Grouping is decided as each card is built, so a card mode set afterwards
|
|
290
|
+
finds groups already drawn. It flattens them: the group and its list stop
|
|
291
|
+
generating boxes, the row and the repeat ordinals go, and every card lays
|
|
292
|
+
out as a direct child of the answer, exactly as a card built in that mode
|
|
293
|
+
does. */
|
|
294
|
+
${CARDS} .tool-group,
|
|
295
|
+
${CARDS} .tool-group-list {
|
|
296
|
+
display: contents;
|
|
297
|
+
}
|
|
298
|
+
|
|
299
|
+
${CARDS} .tool-group-head,
|
|
300
|
+
${CARDS} .tool-call-repeat {
|
|
301
|
+
display: none;
|
|
302
|
+
}
|
|
303
|
+
|
|
304
|
+
/* Each of these declares its own display, which beats the user-agent rule for
|
|
305
|
+
the hidden attribute, so each needs its own. The host prefix is there for
|
|
306
|
+
weight, not scope: it lifts these over the card-mode rules above that set
|
|
307
|
+
display, which are heavier than a bare class and attribute. */
|
|
308
|
+
:host .tool-group[hidden],
|
|
309
|
+
:host .tool-group-head[hidden],
|
|
310
|
+
:host .tool-group-list[hidden] {
|
|
311
|
+
display: none;
|
|
312
|
+
}
|
|
313
|
+
`;
|
|
@@ -0,0 +1,317 @@
|
|
|
1
|
+
import {
|
|
2
|
+
SUBAGENT_PHASE,
|
|
3
|
+
TOOL_CALL_STATUS,
|
|
4
|
+
TOOL_GROUP_DISPLAY,
|
|
5
|
+
type ToolGroupDisplayMode,
|
|
6
|
+
} from "../../constants.js";
|
|
7
|
+
import { fillUiString } from "../fill_ui_string.js";
|
|
8
|
+
import type { UiStrings } from "../ui_strings.js";
|
|
9
|
+
|
|
10
|
+
/** What a group says about itself, read by the shadow CSS from `data-state`. */
|
|
11
|
+
type GroupState = "waiting" | "running" | "done" | "error";
|
|
12
|
+
|
|
13
|
+
/** The statuses a step is still open in. */
|
|
14
|
+
const OPEN_STATUSES: ReadonlySet<string> = new Set([
|
|
15
|
+
TOOL_CALL_STATUS.PENDING,
|
|
16
|
+
TOOL_CALL_STATUS.DEFERRED,
|
|
17
|
+
]);
|
|
18
|
+
|
|
19
|
+
/**
|
|
20
|
+
* A sub-agent panel still working, by the phase it stamps on itself. A panel
|
|
21
|
+
* outlives the delegation it drew, so a settled one does not match.
|
|
22
|
+
*/
|
|
23
|
+
const RUNNING_SUBAGENT = `.tool-call-subagent > .subagent:is(${[
|
|
24
|
+
SUBAGENT_PHASE.STARTED,
|
|
25
|
+
SUBAGENT_PHASE.TOOL_CALL,
|
|
26
|
+
SUBAGENT_PHASE.TOOL_RESULT,
|
|
27
|
+
]
|
|
28
|
+
.map((phase) => `[data-phase="${phase}"]`)
|
|
29
|
+
.join(", ")})`;
|
|
30
|
+
|
|
31
|
+
/** One step of the group: its card, and its label as the row names it. */
|
|
32
|
+
interface Step {
|
|
33
|
+
readonly element: HTMLElement;
|
|
34
|
+
readonly name: string;
|
|
35
|
+
readonly label: string;
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
/**
|
|
39
|
+
* The attributes the row is drawn from: each card's `data-status`, its
|
|
40
|
+
* `data-asking` while a question or a confirmation is open on it, its
|
|
41
|
+
* `data-has-result` once a result with text arrived, and the `data-phase` and
|
|
42
|
+
* `data-agent` a sub-agent panel stamps on itself inside the card that
|
|
43
|
+
* delegated to it. Watched rather than told, so a step settled, asked about or
|
|
44
|
+
* delegated by any path updates the row without the group being called.
|
|
45
|
+
*/
|
|
46
|
+
const WATCHED_ATTRIBUTES: readonly string[] = [
|
|
47
|
+
"data-status",
|
|
48
|
+
"data-asking",
|
|
49
|
+
"data-has-result",
|
|
50
|
+
"data-phase",
|
|
51
|
+
"data-agent",
|
|
52
|
+
];
|
|
53
|
+
|
|
54
|
+
/**
|
|
55
|
+
* Whether a lone step's card has anything to show under the row, which hides
|
|
56
|
+
* the card's own head: arguments, a result with text, an approval prompt (drawn
|
|
57
|
+
* while the call is deferred) or a sub-agent's progress. Which of the first two
|
|
58
|
+
* the inner display draws decides which count: inline draws no arguments, and
|
|
59
|
+
* minimal draws neither, so a call is not offered over what it would not show.
|
|
60
|
+
*/
|
|
61
|
+
function hasDetails(card: HTMLElement, display: ToolGroupDisplayMode): boolean {
|
|
62
|
+
const minimal = display === TOOL_GROUP_DISPLAY.MINIMAL;
|
|
63
|
+
const args = !minimal && display !== TOOL_GROUP_DISPLAY.INLINE;
|
|
64
|
+
return (
|
|
65
|
+
(args && card.hasAttribute("data-has-args")) ||
|
|
66
|
+
(!minimal && card.hasAttribute("data-has-result")) ||
|
|
67
|
+
card.getAttribute("data-status") === TOOL_CALL_STATUS.DEFERRED ||
|
|
68
|
+
card.querySelector(".tool-call-subagent > *") !== null
|
|
69
|
+
);
|
|
70
|
+
}
|
|
71
|
+
|
|
72
|
+
/**
|
|
73
|
+
* Consecutive tool calls folded into one quiet row, "Worked through 5 steps",
|
|
74
|
+
* with the per-call cards one click down. Built by the transcript for each run
|
|
75
|
+
* of calls when the element's `toolDisplay` is `grouped`.
|
|
76
|
+
*
|
|
77
|
+
* The group owns no state of its own beyond its nodes and two facts: each
|
|
78
|
+
* step's label, and whether it has already opened itself for the current wait.
|
|
79
|
+
* Everything else is read back off the cards each time one changes.
|
|
80
|
+
*
|
|
81
|
+
* It opens itself while a step waits on the user, because a deferred step
|
|
82
|
+
* carries its approval prompt inside its card and a folded group would hide
|
|
83
|
+
* the very question it is asking. Once per wait, so the user can fold it
|
|
84
|
+
* again. A running sub-agent does not open it: the row names the sub-agent
|
|
85
|
+
* instead, beside the running mark.
|
|
86
|
+
*/
|
|
87
|
+
export class ToolStepGroup {
|
|
88
|
+
readonly element: HTMLDivElement;
|
|
89
|
+
readonly #strings: UiStrings;
|
|
90
|
+
readonly #display: () => ToolGroupDisplayMode;
|
|
91
|
+
readonly #list: HTMLDivElement;
|
|
92
|
+
readonly #head: HTMLButtonElement;
|
|
93
|
+
readonly #label: HTMLSpanElement;
|
|
94
|
+
readonly #meta: HTMLSpanElement;
|
|
95
|
+
/** The steps, in order. Cards only ever join a group, so this is its list's children. */
|
|
96
|
+
readonly #steps: Step[] = [];
|
|
97
|
+
/** Whether the group has already opened itself for the current wait. */
|
|
98
|
+
#openedForWait = false;
|
|
99
|
+
|
|
100
|
+
constructor(strings: UiStrings, display: () => ToolGroupDisplayMode) {
|
|
101
|
+
this.#strings = strings;
|
|
102
|
+
this.#display = display;
|
|
103
|
+
this.element = document.createElement("div");
|
|
104
|
+
this.element.className = "tool-group";
|
|
105
|
+
this.element.setAttribute("part", "tool-group");
|
|
106
|
+
this.element.setAttribute("data-open", "false");
|
|
107
|
+
|
|
108
|
+
this.#head = document.createElement("button");
|
|
109
|
+
this.#head.type = "button";
|
|
110
|
+
this.#head.className = "tool-group-head";
|
|
111
|
+
this.#head.setAttribute("part", "tool-group-head");
|
|
112
|
+
this.#head.setAttribute("aria-expanded", "false");
|
|
113
|
+
|
|
114
|
+
const icon = document.createElement("span");
|
|
115
|
+
icon.className = "tool-group-icon";
|
|
116
|
+
icon.setAttribute("part", "tool-group-icon");
|
|
117
|
+
icon.setAttribute("aria-hidden", "true");
|
|
118
|
+
|
|
119
|
+
this.#label = document.createElement("span");
|
|
120
|
+
this.#label.className = "tool-group-label";
|
|
121
|
+
this.#label.setAttribute("part", "tool-group-label");
|
|
122
|
+
|
|
123
|
+
this.#meta = document.createElement("span");
|
|
124
|
+
this.#meta.className = "tool-group-meta";
|
|
125
|
+
this.#meta.setAttribute("part", "tool-group-meta");
|
|
126
|
+
|
|
127
|
+
const chevron = document.createElement("span");
|
|
128
|
+
chevron.className = "tool-group-chevron";
|
|
129
|
+
chevron.setAttribute("aria-hidden", "true");
|
|
130
|
+
|
|
131
|
+
this.#head.append(icon, this.#label, this.#meta, chevron);
|
|
132
|
+
this.#head.addEventListener("click", () => {
|
|
133
|
+
this.setOpen(this.element.getAttribute("data-open") !== "true");
|
|
134
|
+
});
|
|
135
|
+
|
|
136
|
+
this.#list = document.createElement("div");
|
|
137
|
+
this.#list.className = "tool-group-list";
|
|
138
|
+
this.#list.setAttribute("part", "tool-group-list");
|
|
139
|
+
|
|
140
|
+
this.element.append(this.#head, this.#list);
|
|
141
|
+
|
|
142
|
+
new MutationObserver(() => {
|
|
143
|
+
this.refresh();
|
|
144
|
+
}).observe(this.#list, {
|
|
145
|
+
attributes: true,
|
|
146
|
+
attributeFilter: [...WATCHED_ATTRIBUTES],
|
|
147
|
+
subtree: true,
|
|
148
|
+
});
|
|
149
|
+
}
|
|
150
|
+
|
|
151
|
+
/**
|
|
152
|
+
* Add a card's element as the group's next step, under the label the card
|
|
153
|
+
* was built with.
|
|
154
|
+
*
|
|
155
|
+
* A step whose label an earlier step already has gets a repeat ordinal,
|
|
156
|
+
* "Fill field (2)", in an element of its own beside the card's name. The
|
|
157
|
+
* name itself is never rewritten, so a group flattened back into per-call
|
|
158
|
+
* cards by a card display mode shows exactly the label the card was built
|
|
159
|
+
* with, and the CSS hides the ordinal there.
|
|
160
|
+
*/
|
|
161
|
+
add(card: HTMLElement, name: string): void {
|
|
162
|
+
const seen = this.#steps.filter((step) => step.name === name).length + 1;
|
|
163
|
+
let label = name;
|
|
164
|
+
if (seen > 1) {
|
|
165
|
+
const repeat = document.createElement("span");
|
|
166
|
+
repeat.className = "tool-call-repeat";
|
|
167
|
+
repeat.setAttribute("part", "tool-card-repeat");
|
|
168
|
+
repeat.textContent = fillUiString(this.#strings.toolStepRepeat, { n: seen });
|
|
169
|
+
card.querySelector(".tool-call-name")?.after(repeat);
|
|
170
|
+
label = `${name} ${repeat.textContent}`;
|
|
171
|
+
}
|
|
172
|
+
this.#steps.push({ element: card, name, label });
|
|
173
|
+
this.#list.append(card);
|
|
174
|
+
this.refresh();
|
|
175
|
+
}
|
|
176
|
+
|
|
177
|
+
/** Show or hide the per-step cards. */
|
|
178
|
+
setOpen(open: boolean): void {
|
|
179
|
+
this.element.setAttribute("data-open", String(open));
|
|
180
|
+
this.#head.setAttribute("aria-expanded", String(open));
|
|
181
|
+
}
|
|
182
|
+
|
|
183
|
+
/**
|
|
184
|
+
* Offer the row as a disclosure only while something is behind it. Several
|
|
185
|
+
* steps always are, since each shows its own head; a lone step's head is not
|
|
186
|
+
* drawn in the group, so the row is a label until its card has details. A
|
|
187
|
+
* row that loses them, a gated call with no arguments once it is answered,
|
|
188
|
+
* folds as it goes.
|
|
189
|
+
*/
|
|
190
|
+
#setExpandable(expandable: boolean): void {
|
|
191
|
+
this.#head.disabled = !expandable;
|
|
192
|
+
if (expandable) {
|
|
193
|
+
this.#head.setAttribute("aria-expanded", this.element.getAttribute("data-open") as string);
|
|
194
|
+
return;
|
|
195
|
+
}
|
|
196
|
+
this.element.setAttribute("data-open", "false");
|
|
197
|
+
this.#head.removeAttribute("aria-expanded");
|
|
198
|
+
}
|
|
199
|
+
|
|
200
|
+
/**
|
|
201
|
+
* Open the group now, for the wait that is about to start.
|
|
202
|
+
*
|
|
203
|
+
* The group opens itself from its mutation observer, which runs a tick after
|
|
204
|
+
* the card is marked deferred. The approval prompt is drawn, and takes focus,
|
|
205
|
+
* in the same tick as the mark, while the list is still out of the layout: the
|
|
206
|
+
* focus is dropped and the scroll it would cause never happens. So the caller
|
|
207
|
+
* that is about to draw the prompt opens the group first, and this marks the
|
|
208
|
+
* wait as already answered for, so the observer's later refresh does not open
|
|
209
|
+
* it again over a user who folded it.
|
|
210
|
+
*/
|
|
211
|
+
reveal(): void {
|
|
212
|
+
this.#openedForWait = true;
|
|
213
|
+
this.setOpen(true);
|
|
214
|
+
}
|
|
215
|
+
|
|
216
|
+
/**
|
|
217
|
+
* The row's note for a running sub-agent, naming it, or `null` when no step
|
|
218
|
+
* is delegating right now. Only a step that is itself still running counts.
|
|
219
|
+
*/
|
|
220
|
+
#delegation(): string | null {
|
|
221
|
+
for (const { element } of this.#steps) {
|
|
222
|
+
const panel =
|
|
223
|
+
element.getAttribute("data-status") === TOOL_CALL_STATUS.PENDING
|
|
224
|
+
? element.querySelector(RUNNING_SUBAGENT)
|
|
225
|
+
: null;
|
|
226
|
+
if (panel !== null) {
|
|
227
|
+
const agent = panel.getAttribute("data-agent");
|
|
228
|
+
return agent === null
|
|
229
|
+
? this.#strings.subAgentWorking
|
|
230
|
+
: fillUiString(this.#strings.subAgentDelegatedTo, { agent });
|
|
231
|
+
}
|
|
232
|
+
}
|
|
233
|
+
return null;
|
|
234
|
+
}
|
|
235
|
+
|
|
236
|
+
/** Redraw the row from the cards, for a change the cards do not announce. */
|
|
237
|
+
refresh(): void {
|
|
238
|
+
const strings = this.#strings;
|
|
239
|
+
const steps = this.#steps;
|
|
240
|
+
const statuses = steps.map((step) => step.element.getAttribute("data-status") ?? "");
|
|
241
|
+
const open = steps.filter((_, i) => OPEN_STATUSES.has(statuses[i] as string));
|
|
242
|
+
const count = (status: string): number => statuses.filter((s) => s === status).length;
|
|
243
|
+
const failed = count(TOOL_CALL_STATUS.ERROR);
|
|
244
|
+
const declined = count(TOOL_CALL_STATUS.DECLINED);
|
|
245
|
+
const deferred = count(TOOL_CALL_STATUS.DEFERRED);
|
|
246
|
+
// A step is waiting on the user when its approval is pending on the server,
|
|
247
|
+
// or when a question or confirmation is open on it. The second kind keeps
|
|
248
|
+
// its status at running, so it is read off its own flag.
|
|
249
|
+
const asking = steps.filter((step) => step.element.hasAttribute("data-asking")).length;
|
|
250
|
+
const waiting = deferred + asking;
|
|
251
|
+
const total = steps.length;
|
|
252
|
+
|
|
253
|
+
// Opens for a deferred step only. An approval renders inside its card, which
|
|
254
|
+
// a folded group would hide; a question or confirmation renders beside the
|
|
255
|
+
// group, in view, so there is nothing for it to open.
|
|
256
|
+
if (deferred > 0 && !this.#openedForWait) {
|
|
257
|
+
this.#openedForWait = true;
|
|
258
|
+
this.setOpen(true);
|
|
259
|
+
} else if (deferred === 0) {
|
|
260
|
+
this.#openedForWait = false;
|
|
261
|
+
}
|
|
262
|
+
|
|
263
|
+
let state: GroupState = "done";
|
|
264
|
+
if (waiting > 0) {
|
|
265
|
+
state = "waiting";
|
|
266
|
+
} else if (open.length > 0) {
|
|
267
|
+
state = "running";
|
|
268
|
+
} else if (failed > 0) {
|
|
269
|
+
state = "error";
|
|
270
|
+
}
|
|
271
|
+
this.element.setAttribute("data-state", state);
|
|
272
|
+
// The state is also a part, because `::part()` takes no attribute selector;
|
|
273
|
+
// the whole list is rewritten so the old modifier goes.
|
|
274
|
+
this.element.setAttribute("part", `tool-group tool-group-${state}`);
|
|
275
|
+
this.element.setAttribute("data-count", String(total));
|
|
276
|
+
|
|
277
|
+
const only = total === 1 ? steps[0] : undefined;
|
|
278
|
+
this.#setExpandable(only === undefined || hasDetails(only.element, this.#display()));
|
|
279
|
+
if (only !== undefined) {
|
|
280
|
+
this.#label.textContent = only.label;
|
|
281
|
+
} else {
|
|
282
|
+
const template =
|
|
283
|
+
state === "waiting"
|
|
284
|
+
? strings.toolGroupSteps
|
|
285
|
+
: state === "running"
|
|
286
|
+
? strings.toolGroupWorking
|
|
287
|
+
: strings.toolGroupWorked;
|
|
288
|
+
this.#label.textContent = fillUiString(template, { count: total });
|
|
289
|
+
}
|
|
290
|
+
|
|
291
|
+
const notes: string[] = [];
|
|
292
|
+
const delegation = this.#delegation();
|
|
293
|
+
const current = open[0];
|
|
294
|
+
if (waiting > 0) {
|
|
295
|
+
notes.push(fillUiString(strings.toolGroupWaiting, { count: waiting }));
|
|
296
|
+
} else if (delegation !== null) {
|
|
297
|
+
notes.push(delegation);
|
|
298
|
+
} else if (current !== undefined && total > 1) {
|
|
299
|
+
notes.push(current.label);
|
|
300
|
+
}
|
|
301
|
+
if (failed > 0) {
|
|
302
|
+
notes.push(fillUiString(strings.toolGroupFailed, { count: failed }));
|
|
303
|
+
}
|
|
304
|
+
if (declined > 0) {
|
|
305
|
+
notes.push(fillUiString(strings.toolGroupDeclined, { count: declined }));
|
|
306
|
+
}
|
|
307
|
+
this.#meta.replaceChildren(
|
|
308
|
+
...notes.map((text) => {
|
|
309
|
+
const note = document.createElement("span");
|
|
310
|
+
note.className = "tool-group-note";
|
|
311
|
+
note.textContent = text;
|
|
312
|
+
return note;
|
|
313
|
+
}),
|
|
314
|
+
);
|
|
315
|
+
this.#meta.hidden = notes.length === 0;
|
|
316
|
+
}
|
|
317
|
+
}
|