@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,429 @@
|
|
|
1
|
+
import { TOOL_CALL_STATUS, type TOOL_DISPLAY } from "../../constants.js";
|
|
2
|
+
import { DEFAULT_UI_STRINGS, type UiStrings } from "../ui_strings.js";
|
|
3
|
+
|
|
4
|
+
/** Any state a tool-call card can be in. */
|
|
5
|
+
export type ToolCallStatus = (typeof TOOL_CALL_STATUS)[keyof typeof TOOL_CALL_STATUS];
|
|
6
|
+
|
|
7
|
+
/** How much detail a card renders. */
|
|
8
|
+
export type ToolDisplayMode = (typeof TOOL_DISPLAY)[keyof typeof TOOL_DISPLAY];
|
|
9
|
+
|
|
10
|
+
/** The two states a card can sit in before an outcome exists. */
|
|
11
|
+
export type UnsettledStatus = typeof TOOL_CALL_STATUS.PENDING | typeof TOOL_CALL_STATUS.DEFERRED;
|
|
12
|
+
|
|
13
|
+
/** The terminal states a card settles into (everything unsettled excluded). */
|
|
14
|
+
export type SettledStatus = Exclude<ToolCallStatus, UnsettledStatus>;
|
|
15
|
+
|
|
16
|
+
/** Short pill text shown for each status, drawn from the string table. */
|
|
17
|
+
function statusLabels(strings: UiStrings): Record<ToolCallStatus, string> {
|
|
18
|
+
return {
|
|
19
|
+
[TOOL_CALL_STATUS.PENDING]: strings.toolRunning,
|
|
20
|
+
[TOOL_CALL_STATUS.DEFERRED]: strings.toolDeferred,
|
|
21
|
+
[TOOL_CALL_STATUS.DONE]: strings.toolDone,
|
|
22
|
+
[TOOL_CALL_STATUS.ERROR]: strings.toolError,
|
|
23
|
+
[TOOL_CALL_STATUS.DECLINED]: strings.toolDeclined,
|
|
24
|
+
[TOOL_CALL_STATUS.INTERRUPTED]: strings.toolInterrupted,
|
|
25
|
+
};
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
/** Section-heading text for each settled outcome's result region. */
|
|
29
|
+
function resultLabels(strings: UiStrings): Record<SettledStatus, string> {
|
|
30
|
+
return {
|
|
31
|
+
[TOOL_CALL_STATUS.DONE]: strings.resultLabel,
|
|
32
|
+
[TOOL_CALL_STATUS.ERROR]: strings.errorLabel,
|
|
33
|
+
[TOOL_CALL_STATUS.DECLINED]: strings.declinedLabel,
|
|
34
|
+
[TOOL_CALL_STATUS.INTERRUPTED]: strings.interruptedLabel,
|
|
35
|
+
};
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
/** Pretty-print a JSON payload; fall back to the raw text if it isn't JSON. */
|
|
39
|
+
function formatPayload(text: string): string {
|
|
40
|
+
try {
|
|
41
|
+
return JSON.stringify(JSON.parse(text), null, 2);
|
|
42
|
+
} catch {
|
|
43
|
+
return text;
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
/**
|
|
48
|
+
* One region of a card's body, handed to a host {@link ToolPayloadFormatter}.
|
|
49
|
+
*
|
|
50
|
+
* A discriminated union rather than three positional parameters because the two
|
|
51
|
+
* halves do not carry the same thing: arguments are the parsed record the call
|
|
52
|
+
* was made with, and a result is the raw string the tool returned, which may not
|
|
53
|
+
* be JSON at all. Flattening both into one `payload` parameter would force every
|
|
54
|
+
* formatter to re-derive which it had before it could read it, and the
|
|
55
|
+
* arguments would arrive re-serialised for no reason.
|
|
56
|
+
*
|
|
57
|
+
* `toolName` is the raw tool name, not the card's `x-summary` label -- a
|
|
58
|
+
* formatter dispatches on identity, and the label is a display string a server
|
|
59
|
+
* may change.
|
|
60
|
+
*/
|
|
61
|
+
export type ToolPayload =
|
|
62
|
+
| {
|
|
63
|
+
readonly kind: "arguments";
|
|
64
|
+
readonly toolName: string;
|
|
65
|
+
readonly args: Record<string, unknown>;
|
|
66
|
+
}
|
|
67
|
+
| {
|
|
68
|
+
readonly kind: "result";
|
|
69
|
+
readonly toolName: string;
|
|
70
|
+
readonly status: SettledStatus;
|
|
71
|
+
readonly text: string;
|
|
72
|
+
};
|
|
73
|
+
|
|
74
|
+
/**
|
|
75
|
+
* Renders one region of a tool card's body, for a host that would rather show a
|
|
76
|
+
* table or a summary line than a wall of pretty-printed JSON.
|
|
77
|
+
*
|
|
78
|
+
* Return a `Node` to take the region over, a `string` to replace its text, or
|
|
79
|
+
* `null` to fall through to the built-in pretty-print -- so a formatter that
|
|
80
|
+
* only cares about one tool, or only about results, declines the rest rather
|
|
81
|
+
* than reimplementing them.
|
|
82
|
+
*
|
|
83
|
+
* **Presentation only.** The model reads the tool result from its own copy of
|
|
84
|
+
* the message, which this never touches, so anything said here is said to the
|
|
85
|
+
* person and not to the agent. Translating a value -- an enum constant into a
|
|
86
|
+
* friendly label, an epoch into a date -- belongs on the server, where it also
|
|
87
|
+
* reaches the model's prose; doing it here would make the card and the answer
|
|
88
|
+
* beside it disagree about what happened.
|
|
89
|
+
*
|
|
90
|
+
* A returned string is set as text, never parsed as markup: this is not a
|
|
91
|
+
* second HTML channel into the transcript, and a host that wants elements
|
|
92
|
+
* builds them itself and returns the node.
|
|
93
|
+
*/
|
|
94
|
+
export type ToolPayloadFormatter = (payload: ToolPayload) => Node | string | null;
|
|
95
|
+
|
|
96
|
+
/** Optional per-card wiring beyond the name, arguments, label and strings. */
|
|
97
|
+
export interface ToolCallCardOptions {
|
|
98
|
+
/** Host presentation hook for both body regions. See {@link ToolPayloadFormatter}. */
|
|
99
|
+
readonly formatPayload?: ToolPayloadFormatter;
|
|
100
|
+
}
|
|
101
|
+
|
|
102
|
+
/**
|
|
103
|
+
* A live tool-call card for the chat transcript.
|
|
104
|
+
*
|
|
105
|
+
* Construction renders a status icon, the tool name, a status pill, and a body
|
|
106
|
+
* of two separately-headed regions — arguments and result — each with its own
|
|
107
|
+
* `part`. {@link settle} fills in the result and flips the pill. Both payloads
|
|
108
|
+
* are pretty-printed and never concatenated into one block.
|
|
109
|
+
*
|
|
110
|
+
* The card renders one DOM shape in every display mode and lets CSS decide what
|
|
111
|
+
* shows, selecting visibility from the host attribute rather than a value
|
|
112
|
+
* copied onto the card at construction. That is what lets `data-tool-display`
|
|
113
|
+
* be flipped on the host and re-read by every card already on screen; building
|
|
114
|
+
* a different structure per mode would leave existing cards stale.
|
|
115
|
+
*
|
|
116
|
+
* The leading icon carries no text: the shadow CSS draws its glyph or spinner
|
|
117
|
+
* from the card's `data-status`, so a host themes it through the
|
|
118
|
+
* `--ag-ui-tool-icon-*` custom properties or the `tool-card-icon` part without
|
|
119
|
+
* the card reaching into the host stylesheet.
|
|
120
|
+
*
|
|
121
|
+
* Either region may be drawn by the host instead: `options.formatPayload` is
|
|
122
|
+
* asked about each one and pretty-prints as before whenever it declines. The
|
|
123
|
+
* arguments are offered from the constructor and the result from {@link settle},
|
|
124
|
+
* because that is when each exists -- so a formatter is asked twice per card,
|
|
125
|
+
* potentially long apart.
|
|
126
|
+
*
|
|
127
|
+
* Pure DOM. The host appends {@link element} into its shadow root; all visible
|
|
128
|
+
* text comes from {@link UiStrings}.
|
|
129
|
+
*/
|
|
130
|
+
export class ToolCallCard {
|
|
131
|
+
/** The card's root element; append this into the message list. */
|
|
132
|
+
readonly element: HTMLDivElement;
|
|
133
|
+
|
|
134
|
+
/**
|
|
135
|
+
* Where a question about *this* call renders — the approval prompt for a
|
|
136
|
+
* server-side tool the run deferred.
|
|
137
|
+
*
|
|
138
|
+
* It belongs to the card rather than to the transcript because a run can defer
|
|
139
|
+
* several calls at once, and a prompt written per *tool* ("Add this event to
|
|
140
|
+
* the board?") is identical for every one of them. Rendered into the answer
|
|
141
|
+
* group they were three anonymous copies of one question, below the three
|
|
142
|
+
* cards they gated; rendered here, position identifies them and the arguments
|
|
143
|
+
* are already on screen above the question.
|
|
144
|
+
*
|
|
145
|
+
* Empty until used, and hidden while empty by the shadow CSS.
|
|
146
|
+
*/
|
|
147
|
+
readonly approvalSlot: HTMLDivElement;
|
|
148
|
+
|
|
149
|
+
/**
|
|
150
|
+
* Where a *nested* run's progress renders — the sub-agent this call delegated
|
|
151
|
+
* to, narrating itself while the card waits.
|
|
152
|
+
*
|
|
153
|
+
* A slot rather than a rendered thing, on the same reasoning as
|
|
154
|
+
* {@link approvalSlot}: the card owns the position and something else owns the
|
|
155
|
+
* content. What makes the position right is that the wire keys a delegation on
|
|
156
|
+
* this card's own `toolCallId`, so the run being narrated is the one this card
|
|
157
|
+
* already stands for.
|
|
158
|
+
*
|
|
159
|
+
* Placed above the Details toggle rather than inside the body, because the
|
|
160
|
+
* body is what the display modes hide — and a progress line that only appears
|
|
161
|
+
* in `full` mode would leave exactly the stall it exists to end. Empty on every
|
|
162
|
+
* card that delegated nothing, and hidden while empty by the shadow CSS.
|
|
163
|
+
*/
|
|
164
|
+
readonly subagentSlot: HTMLDivElement;
|
|
165
|
+
|
|
166
|
+
readonly #status: HTMLSpanElement;
|
|
167
|
+
readonly #decision: HTMLSpanElement;
|
|
168
|
+
readonly #toggle: HTMLButtonElement;
|
|
169
|
+
readonly #resultSection: HTMLDivElement;
|
|
170
|
+
readonly #resultLabel: HTMLSpanElement;
|
|
171
|
+
readonly #resultBody: HTMLPreElement;
|
|
172
|
+
readonly #strings: UiStrings;
|
|
173
|
+
/**
|
|
174
|
+
* The arguments this call was made with.
|
|
175
|
+
*
|
|
176
|
+
* Retained rather than only rendered, because an approval interrupt names a
|
|
177
|
+
* `toolCallId` and nothing else -- so this card is the only place the args
|
|
178
|
+
* still exist when the user is asked to approve, edit or deny the call.
|
|
179
|
+
*/
|
|
180
|
+
readonly args: Record<string, unknown>;
|
|
181
|
+
/** The raw tool name, kept for the payloads handed to {@link ToolPayloadFormatter}. */
|
|
182
|
+
readonly #name: string;
|
|
183
|
+
readonly #formatPayload: ToolPayloadFormatter | null;
|
|
184
|
+
#settled = false;
|
|
185
|
+
|
|
186
|
+
constructor(
|
|
187
|
+
name: string,
|
|
188
|
+
args: Record<string, unknown>,
|
|
189
|
+
summary?: string,
|
|
190
|
+
strings: UiStrings = DEFAULT_UI_STRINGS,
|
|
191
|
+
options: ToolCallCardOptions = {},
|
|
192
|
+
) {
|
|
193
|
+
this.#strings = strings;
|
|
194
|
+
this.args = args;
|
|
195
|
+
this.#name = name;
|
|
196
|
+
this.#formatPayload = options.formatPayload ?? null;
|
|
197
|
+
|
|
198
|
+
this.element = document.createElement("div");
|
|
199
|
+
this.element.className = "tool-call";
|
|
200
|
+
this.element.setAttribute("data-tool-name", name);
|
|
201
|
+
this.element.setAttribute("data-expanded", "false");
|
|
202
|
+
|
|
203
|
+
const head = document.createElement("div");
|
|
204
|
+
head.className = "tool-call-head";
|
|
205
|
+
head.setAttribute("part", "tool-card-head");
|
|
206
|
+
|
|
207
|
+
// Left empty in the DOM on purpose: the shadow CSS draws the spinner or
|
|
208
|
+
// settled mark from `data-status`, keeping the glyphs themeable.
|
|
209
|
+
const icon = document.createElement("span");
|
|
210
|
+
icon.className = "tool-call-icon";
|
|
211
|
+
icon.setAttribute("part", "tool-card-icon");
|
|
212
|
+
icon.setAttribute("aria-hidden", "true");
|
|
213
|
+
|
|
214
|
+
const label = document.createElement("span");
|
|
215
|
+
label.className = "tool-call-name";
|
|
216
|
+
label.setAttribute("part", "tool-card-name");
|
|
217
|
+
// A server-provided `x-summary` label reads better than the raw tool name.
|
|
218
|
+
label.textContent = summary ?? name;
|
|
219
|
+
|
|
220
|
+
this.#status = document.createElement("span");
|
|
221
|
+
this.#status.className = "tool-call-status";
|
|
222
|
+
this.#setStatus(TOOL_CALL_STATUS.PENDING);
|
|
223
|
+
|
|
224
|
+
this.#decision = document.createElement("span");
|
|
225
|
+
this.#decision.className = "tool-call-decision";
|
|
226
|
+
this.#decision.setAttribute("part", "tool-card-decision");
|
|
227
|
+
this.#decision.hidden = true;
|
|
228
|
+
|
|
229
|
+
head.append(icon, label, this.#status, this.#decision);
|
|
230
|
+
|
|
231
|
+
const argsSection = this.#section("args", strings.argumentsLabel);
|
|
232
|
+
this.#renderPayload(
|
|
233
|
+
argsSection.body,
|
|
234
|
+
{ kind: "arguments", toolName: name, args },
|
|
235
|
+
JSON.stringify(args, null, 2),
|
|
236
|
+
);
|
|
237
|
+
// Drop the region rather than frame an empty object. The marker is what
|
|
238
|
+
// the shadow CSS reads to tell whether the toggle has anything to open:
|
|
239
|
+
// in compact the arguments are behind it too.
|
|
240
|
+
const hasArgs = Object.keys(args).length > 0;
|
|
241
|
+
argsSection.root.hidden = !hasArgs;
|
|
242
|
+
this.element.toggleAttribute("data-has-args", hasArgs);
|
|
243
|
+
|
|
244
|
+
const resultSection = this.#section("result", strings.resultLabel);
|
|
245
|
+
this.#resultSection = resultSection.root;
|
|
246
|
+
this.#resultLabel = resultSection.label;
|
|
247
|
+
this.#resultBody = resultSection.body;
|
|
248
|
+
// Nothing to show until `settle` supplies it, or a pending card expands
|
|
249
|
+
// onto an empty region.
|
|
250
|
+
resultSection.root.hidden = true;
|
|
251
|
+
|
|
252
|
+
this.#toggle = document.createElement("button");
|
|
253
|
+
this.#toggle.type = "button";
|
|
254
|
+
this.#toggle.className = "tool-call-toggle";
|
|
255
|
+
this.#toggle.setAttribute("part", "tool-card-toggle");
|
|
256
|
+
this.#toggle.setAttribute("aria-expanded", "false");
|
|
257
|
+
this.#toggle.textContent = strings.details;
|
|
258
|
+
this.#toggle.addEventListener("click", () => this.#setExpanded(!this.#expanded()));
|
|
259
|
+
|
|
260
|
+
const body = document.createElement("div");
|
|
261
|
+
body.className = "tool-call-body";
|
|
262
|
+
body.setAttribute("part", "tool-card-body");
|
|
263
|
+
body.append(argsSection.root, resultSection.root);
|
|
264
|
+
|
|
265
|
+
this.approvalSlot = document.createElement("div");
|
|
266
|
+
this.approvalSlot.className = "tool-call-approval";
|
|
267
|
+
this.approvalSlot.setAttribute("part", "tool-card-approval");
|
|
268
|
+
|
|
269
|
+
this.subagentSlot = document.createElement("div");
|
|
270
|
+
this.subagentSlot.className = "tool-call-subagent";
|
|
271
|
+
this.subagentSlot.setAttribute("part", "tool-card-subagent");
|
|
272
|
+
|
|
273
|
+
this.element.append(head, this.subagentSlot, this.#toggle, body, this.approvalSlot);
|
|
274
|
+
}
|
|
275
|
+
|
|
276
|
+
/**
|
|
277
|
+
* Move between the two states that are not an outcome — `pending` (running)
|
|
278
|
+
* and `deferred` (gated, waiting on a person).
|
|
279
|
+
*
|
|
280
|
+
* Ignored once {@link settle} has run: a card that was declined must not be
|
|
281
|
+
* talked back into looking live by a late event.
|
|
282
|
+
*/
|
|
283
|
+
mark(status: UnsettledStatus): void {
|
|
284
|
+
if (this.#settled) {
|
|
285
|
+
return;
|
|
286
|
+
}
|
|
287
|
+
this.#setStatus(status);
|
|
288
|
+
}
|
|
289
|
+
|
|
290
|
+
/**
|
|
291
|
+
* Say whether a prompt is open on this call, a question it asked or a
|
|
292
|
+
* confirmation it needs. A flag of its own beside the status, which stays
|
|
293
|
+
* `pending`: the call is still running as far as the status goes, and a card
|
|
294
|
+
* display mode that reads the status draws it exactly as before. The step
|
|
295
|
+
* group reads the flag to tell a call waiting on a person from one working.
|
|
296
|
+
*/
|
|
297
|
+
setAsking(asking: boolean): void {
|
|
298
|
+
this.element.toggleAttribute("data-asking", asking);
|
|
299
|
+
}
|
|
300
|
+
|
|
301
|
+
/**
|
|
302
|
+
* Record that a human approved or declined this call, as a line in the card.
|
|
303
|
+
* The prompt disappears once answered, so this is the only lasting trace that
|
|
304
|
+
* the call was gated at all.
|
|
305
|
+
*/
|
|
306
|
+
recordDecision(kind: "approved" | "declined"): void {
|
|
307
|
+
this.element.setAttribute("data-decision", kind);
|
|
308
|
+
this.#decision.textContent =
|
|
309
|
+
kind === "approved" ? this.#strings.decisionApproved : this.#strings.decisionDeclined;
|
|
310
|
+
this.#decision.hidden = false;
|
|
311
|
+
}
|
|
312
|
+
|
|
313
|
+
/** Whether {@link settle} has already run (so a terminal sweep can skip it). */
|
|
314
|
+
get settled(): boolean {
|
|
315
|
+
return this.#settled;
|
|
316
|
+
}
|
|
317
|
+
|
|
318
|
+
/**
|
|
319
|
+
* Flip the status pill to `status` and fill in the result region, whose
|
|
320
|
+
* heading names the outcome (result / error / declined).
|
|
321
|
+
*
|
|
322
|
+
* A blank `text` leaves the region out, as the constructor does for empty
|
|
323
|
+
* arguments: the call settled with nothing to show, so the card stays a
|
|
324
|
+
* status row and its toggle is not offered. The formatter is not asked about
|
|
325
|
+
* a result that is not there.
|
|
326
|
+
*/
|
|
327
|
+
settle(status: SettledStatus, text: string): void {
|
|
328
|
+
// Idempotent: a duplicate `TOOL_CALL_RESULT`, or a replayed tool message
|
|
329
|
+
// for an already-settled card, must not overwrite the first outcome.
|
|
330
|
+
if (this.#settled) {
|
|
331
|
+
return;
|
|
332
|
+
}
|
|
333
|
+
this.#settled = true;
|
|
334
|
+
this.#setStatus(status);
|
|
335
|
+
if (text.trim() === "") {
|
|
336
|
+
return;
|
|
337
|
+
}
|
|
338
|
+
this.#resultLabel.textContent = resultLabels(this.#strings)[status];
|
|
339
|
+
this.#renderPayload(
|
|
340
|
+
this.#resultBody,
|
|
341
|
+
{ kind: "result", toolName: this.#name, status, text },
|
|
342
|
+
formatPayload(text),
|
|
343
|
+
);
|
|
344
|
+
this.#resultSection.hidden = false;
|
|
345
|
+
// Read by the shadow CSS, which offers the toggle only over something, and
|
|
346
|
+
// by a step group, which offers its row on the same terms.
|
|
347
|
+
this.element.setAttribute("data-has-result", "");
|
|
348
|
+
}
|
|
349
|
+
|
|
350
|
+
/**
|
|
351
|
+
* Write the status everywhere it is read from, in one place so they cannot
|
|
352
|
+
* disagree: `data-status` for the shadow CSS, the pill's text, and the part
|
|
353
|
+
* lists. `::part()` takes no attribute selector, so the card and its pill also
|
|
354
|
+
* name the status as a part (`tool-card-error`, `tool-card-status-error`), the
|
|
355
|
+
* modifier convention a run notice uses, and a host styles failures alone.
|
|
356
|
+
* Setting the whole list replaces the previous modifier.
|
|
357
|
+
*/
|
|
358
|
+
#setStatus(status: ToolCallStatus): void {
|
|
359
|
+
this.element.setAttribute("data-status", status);
|
|
360
|
+
this.element.setAttribute("part", `tool-card tool-card-${status}`);
|
|
361
|
+
this.#status.setAttribute("part", `tool-card-status tool-card-status-${status}`);
|
|
362
|
+
this.#status.textContent = statusLabels(this.#strings)[status];
|
|
363
|
+
}
|
|
364
|
+
|
|
365
|
+
/**
|
|
366
|
+
* Fill one body region, offering it to the host formatter first.
|
|
367
|
+
*
|
|
368
|
+
* `fallback` is computed by the caller rather than here because the two
|
|
369
|
+
* regions build it differently -- arguments are already parsed, a result is a
|
|
370
|
+
* string that may or may not be JSON -- and because a formatter that takes
|
|
371
|
+
* the region over should not have paid for a pretty-print nobody sees. It is
|
|
372
|
+
* cheap either way; the point is that the built-in rendering stays written
|
|
373
|
+
* once, beside the payload it belongs to.
|
|
374
|
+
*
|
|
375
|
+
* The `data-formatted` marker is what the shadow CSS reads to relax the
|
|
376
|
+
* preformatted whitespace on a region a host owns -- a table inherits it as
|
|
377
|
+
* mangled cell spacing, a sentence as line breaks nobody typed. Marked for a
|
|
378
|
+
* returned string too: one rule, and a summary line wants ordinary wrapping
|
|
379
|
+
* as much as a table does.
|
|
380
|
+
*/
|
|
381
|
+
#renderPayload(body: HTMLPreElement, payload: ToolPayload, fallback: string): void {
|
|
382
|
+
const rendered = this.#formatPayload === null ? null : this.#formatPayload(payload);
|
|
383
|
+
if (rendered === null) {
|
|
384
|
+
body.textContent = fallback;
|
|
385
|
+
return;
|
|
386
|
+
}
|
|
387
|
+
body.setAttribute("data-formatted", "true");
|
|
388
|
+
if (typeof rendered === "string") {
|
|
389
|
+
body.textContent = rendered;
|
|
390
|
+
return;
|
|
391
|
+
}
|
|
392
|
+
body.replaceChildren(rendered);
|
|
393
|
+
}
|
|
394
|
+
|
|
395
|
+
/** Build one labelled region of the body: a heading plus a payload block. */
|
|
396
|
+
#section(
|
|
397
|
+
kind: string,
|
|
398
|
+
labelText: string,
|
|
399
|
+
): {
|
|
400
|
+
root: HTMLDivElement;
|
|
401
|
+
label: HTMLSpanElement;
|
|
402
|
+
body: HTMLPreElement;
|
|
403
|
+
} {
|
|
404
|
+
const root = document.createElement("div");
|
|
405
|
+
root.className = `tool-call-section tool-call-section--${kind}`;
|
|
406
|
+
root.setAttribute("part", `tool-card-section tool-card-${kind}-section`);
|
|
407
|
+
|
|
408
|
+
const label = document.createElement("span");
|
|
409
|
+
label.className = "tool-call-section-label";
|
|
410
|
+
label.setAttribute("part", `tool-card-section-label tool-card-${kind}-label`);
|
|
411
|
+
label.textContent = labelText;
|
|
412
|
+
|
|
413
|
+
const body = document.createElement("pre");
|
|
414
|
+
body.className = `tool-call-${kind}`;
|
|
415
|
+
body.setAttribute("part", `tool-card-${kind}`);
|
|
416
|
+
|
|
417
|
+
root.append(label, body);
|
|
418
|
+
return { root, label, body };
|
|
419
|
+
}
|
|
420
|
+
|
|
421
|
+
#expanded(): boolean {
|
|
422
|
+
return this.element.getAttribute("data-expanded") === "true";
|
|
423
|
+
}
|
|
424
|
+
|
|
425
|
+
#setExpanded(expand: boolean): void {
|
|
426
|
+
this.element.setAttribute("data-expanded", String(expand));
|
|
427
|
+
this.#toggle.setAttribute("aria-expanded", String(expand));
|
|
428
|
+
}
|
|
429
|
+
}
|