@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,123 @@
|
|
|
1
|
+
import { X_SUMMARY_KEY } from "../constants.js";
|
|
2
|
+
import { scrollIntoCenterView } from "../dom/animations.js";
|
|
3
|
+
import type { ClientTool } from "./client_tool_registry.js";
|
|
4
|
+
|
|
5
|
+
/**
|
|
6
|
+
* Resolve a page-action target string to a host-page element, or `null` when it
|
|
7
|
+
* matches nothing. The default treats the string as a CSS selector; a host with
|
|
8
|
+
* a page map overrides it to map its own element ids.
|
|
9
|
+
*/
|
|
10
|
+
export type ResolvePageTarget = (target: string) => HTMLElement | null;
|
|
11
|
+
|
|
12
|
+
/** The built-in page-action tool tokens, opted in via `data-page-actions`. */
|
|
13
|
+
export const PAGE_ACTIONS = {
|
|
14
|
+
SCROLL: "scroll",
|
|
15
|
+
DRAG: "drag",
|
|
16
|
+
/** The widget's own position: see `createChatSurfaceTools`. */
|
|
17
|
+
CHAT: "chat",
|
|
18
|
+
} as const;
|
|
19
|
+
|
|
20
|
+
/**
|
|
21
|
+
* The opt-in page-action tools selected by `enabled` (a set of
|
|
22
|
+
* {@link PAGE_ACTIONS} tokens), bound to a {@link ResolvePageTarget}.
|
|
23
|
+
*
|
|
24
|
+
* - `scroll_to` — scroll a target (`top` / `bottom` / a resolver target) into
|
|
25
|
+
* view. Benign; no confirmation.
|
|
26
|
+
* - `drag_and_drop` — drag one element onto another, firing the standard HTML5
|
|
27
|
+
* drag sequence so the host page's own drop handler reacts. Deliberately not
|
|
28
|
+
* stamped destructive: a drag rearranges transient state, and the durable
|
|
29
|
+
* change happens at the page's explicit commit. A host whose page persists on
|
|
30
|
+
* drop must gate it with the element's `confirmPredicate`.
|
|
31
|
+
*
|
|
32
|
+
* Both report a model-readable error when a target resolves to nothing.
|
|
33
|
+
*/
|
|
34
|
+
export function createPageActionTools(
|
|
35
|
+
enabled: ReadonlySet<string>,
|
|
36
|
+
resolveTarget: ResolvePageTarget,
|
|
37
|
+
): ClientTool[] {
|
|
38
|
+
const tools: ClientTool[] = [];
|
|
39
|
+
if (enabled.has(PAGE_ACTIONS.SCROLL)) {
|
|
40
|
+
tools.push(scrollTool(resolveTarget));
|
|
41
|
+
}
|
|
42
|
+
if (enabled.has(PAGE_ACTIONS.DRAG)) {
|
|
43
|
+
tools.push(dragTool(resolveTarget));
|
|
44
|
+
}
|
|
45
|
+
return tools;
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
function scrollTool(resolveTarget: ResolvePageTarget): ClientTool {
|
|
49
|
+
return {
|
|
50
|
+
name: "scroll_to",
|
|
51
|
+
description:
|
|
52
|
+
"Scroll a target into view. `target` is `top`, `bottom`, or a CSS " +
|
|
53
|
+
"selector / page-map element id. Read-only: it changes nothing on the page.",
|
|
54
|
+
parameters: {
|
|
55
|
+
type: "object",
|
|
56
|
+
properties: { target: { type: "string" } },
|
|
57
|
+
required: ["target"],
|
|
58
|
+
[X_SUMMARY_KEY]: "Scroll into view",
|
|
59
|
+
},
|
|
60
|
+
handler: (args) => {
|
|
61
|
+
const target = String(args["target"] ?? "");
|
|
62
|
+
if (target === "top" || target === "bottom") {
|
|
63
|
+
const top = target === "top" ? 0 : document.body.scrollHeight;
|
|
64
|
+
window.scrollTo({ top, behavior: "smooth" });
|
|
65
|
+
return { scrolled: true, target };
|
|
66
|
+
}
|
|
67
|
+
const element = resolveTarget(target);
|
|
68
|
+
if (element === null) {
|
|
69
|
+
throw new Error(`no element matching "${target}"`);
|
|
70
|
+
}
|
|
71
|
+
scrollIntoCenterView(element);
|
|
72
|
+
return { scrolled: true, target };
|
|
73
|
+
},
|
|
74
|
+
};
|
|
75
|
+
}
|
|
76
|
+
|
|
77
|
+
function dragTool(resolveTarget: ResolvePageTarget): ClientTool {
|
|
78
|
+
return {
|
|
79
|
+
name: "drag_and_drop",
|
|
80
|
+
description:
|
|
81
|
+
"Drag the `from` element onto the `to` element (CSS selectors or page-map " +
|
|
82
|
+
"element ids), firing the page's native drag-and-drop. Use for reordering " +
|
|
83
|
+
"sortable lists. The page decides what the drop commits.",
|
|
84
|
+
parameters: {
|
|
85
|
+
type: "object",
|
|
86
|
+
properties: { from: { type: "string" }, to: { type: "string" } },
|
|
87
|
+
required: ["from", "to"],
|
|
88
|
+
[X_SUMMARY_KEY]: "Drag and drop",
|
|
89
|
+
},
|
|
90
|
+
handler: (args) => {
|
|
91
|
+
const fromTarget = String(args["from"] ?? "");
|
|
92
|
+
const toTarget = String(args["to"] ?? "");
|
|
93
|
+
const from = resolveTarget(fromTarget);
|
|
94
|
+
if (from === null) {
|
|
95
|
+
throw new Error(`no element matching "${fromTarget}"`);
|
|
96
|
+
}
|
|
97
|
+
const to = resolveTarget(toTarget);
|
|
98
|
+
if (to === null) {
|
|
99
|
+
throw new Error(`no element matching "${toTarget}"`);
|
|
100
|
+
}
|
|
101
|
+
dispatchDragSequence(from, to);
|
|
102
|
+
return { dragged: true, from: fromTarget, to: toTarget };
|
|
103
|
+
},
|
|
104
|
+
};
|
|
105
|
+
}
|
|
106
|
+
|
|
107
|
+
/** Fire the HTML5 drag sequence, sharing one {@link DataTransfer} attached to each event explicitly. */
|
|
108
|
+
function dispatchDragSequence(from: HTMLElement, to: HTMLElement): void {
|
|
109
|
+
const dataTransfer = new DataTransfer();
|
|
110
|
+
fire(from, "dragstart", dataTransfer);
|
|
111
|
+
fire(to, "dragenter", dataTransfer);
|
|
112
|
+
fire(to, "dragover", dataTransfer);
|
|
113
|
+
fire(to, "drop", dataTransfer);
|
|
114
|
+
fire(from, "dragend", dataTransfer);
|
|
115
|
+
}
|
|
116
|
+
|
|
117
|
+
function fire(target: HTMLElement, type: string, dataTransfer: DataTransfer): void {
|
|
118
|
+
const event = new Event(type, { bubbles: true, cancelable: true }) as Event & {
|
|
119
|
+
dataTransfer: DataTransfer;
|
|
120
|
+
};
|
|
121
|
+
event.dataTransfer = dataTransfer;
|
|
122
|
+
target.dispatchEvent(event);
|
|
123
|
+
}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
import type { Context } from "@ag-ui/core";
|
|
2
|
+
import { PAGE_MAP_CONTEXT } from "../constants.js";
|
|
3
|
+
|
|
4
|
+
/**
|
|
5
|
+
* A compact snapshot of the current page's actionable surface (field
|
|
6
|
+
* names/types/labels, button labels+handles — not values). Host-defined shape;
|
|
7
|
+
* kept small because it rides in every `RunAgentInput.context`.
|
|
8
|
+
*/
|
|
9
|
+
export type PageMap = Record<string, unknown>;
|
|
10
|
+
|
|
11
|
+
/**
|
|
12
|
+
* Build the per-run context entry for the page map.
|
|
13
|
+
*
|
|
14
|
+
* Returns a single `page_map` context item when auto-injection is on and a
|
|
15
|
+
* provider is set, else nothing. Recomputed each run so it reflects the page
|
|
16
|
+
* the agent is currently looking at.
|
|
17
|
+
*/
|
|
18
|
+
export function createPageMapContext(
|
|
19
|
+
getPageMap: (() => PageMap) | null,
|
|
20
|
+
autoInject: boolean,
|
|
21
|
+
): Context[] {
|
|
22
|
+
if (!autoInject || getPageMap === null) {
|
|
23
|
+
return [];
|
|
24
|
+
}
|
|
25
|
+
return [{ description: PAGE_MAP_CONTEXT, value: JSON.stringify(getPageMap()) }];
|
|
26
|
+
}
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
import { X_DESTRUCTIVE_KEY, X_SUMMARY_KEY } from "../constants.js";
|
|
2
|
+
import type { ClientTool } from "./client_tool_registry.js";
|
|
3
|
+
|
|
4
|
+
/**
|
|
5
|
+
* A binding from a named piece of host page state to agent tools.
|
|
6
|
+
*
|
|
7
|
+
* Ergonomic sugar over `registerTool` for SPA state (Redux/Zustand/signals):
|
|
8
|
+
* generates a read tool and, when `write` is given, a destructive set tool.
|
|
9
|
+
*
|
|
10
|
+
* Not AG-UI shared state. `STATE_SNAPSHOT` / `STATE_DELTA` are protocol events
|
|
11
|
+
* carrying state between agent and client; these are ordinary client tools the
|
|
12
|
+
* agent calls like any other.
|
|
13
|
+
*/
|
|
14
|
+
export interface PageState {
|
|
15
|
+
/** Base name; tools become `read_<name>` and `set_<name>`. */
|
|
16
|
+
readonly name: string;
|
|
17
|
+
/** Returns the current state value. */
|
|
18
|
+
readonly read: () => unknown;
|
|
19
|
+
/** Mutates the state from the agent-supplied args. Omit for read-only. */
|
|
20
|
+
readonly write?: (args: Record<string, unknown>) => unknown;
|
|
21
|
+
/** JSON-Schema for the set tool's args. Defaults to an open object. */
|
|
22
|
+
readonly schema?: Record<string, unknown>;
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
/**
|
|
26
|
+
* Build the tools for a {@link PageState}: always a `read_<name>` (read-only)
|
|
27
|
+
* tool, plus a `set_<name>` (`x-destructive`) tool when `write` is supplied.
|
|
28
|
+
*/
|
|
29
|
+
export function createPageStateTools(binding: PageState): ClientTool[] {
|
|
30
|
+
const tools: ClientTool[] = [
|
|
31
|
+
{
|
|
32
|
+
name: `read_${binding.name}`,
|
|
33
|
+
description: `Read the "${binding.name}" state.`,
|
|
34
|
+
parameters: {
|
|
35
|
+
type: "object",
|
|
36
|
+
properties: {},
|
|
37
|
+
required: [],
|
|
38
|
+
[X_SUMMARY_KEY]: `Read ${binding.name}`,
|
|
39
|
+
},
|
|
40
|
+
handler: () => binding.read(),
|
|
41
|
+
},
|
|
42
|
+
];
|
|
43
|
+
const write = binding.write;
|
|
44
|
+
if (write !== undefined) {
|
|
45
|
+
tools.push({
|
|
46
|
+
name: `set_${binding.name}`,
|
|
47
|
+
description: `Update the "${binding.name}" state.`,
|
|
48
|
+
parameters: {
|
|
49
|
+
...(binding.schema ?? { type: "object" }),
|
|
50
|
+
[X_DESTRUCTIVE_KEY]: true,
|
|
51
|
+
[X_SUMMARY_KEY]: `Update ${binding.name}`,
|
|
52
|
+
},
|
|
53
|
+
handler: (args) => write(args),
|
|
54
|
+
});
|
|
55
|
+
}
|
|
56
|
+
return tools;
|
|
57
|
+
}
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* One entry in the server-tool catalog served by django-ag-ui's `tools/`
|
|
3
|
+
* endpoint and fetched via the `data-tools-url` attribute.
|
|
4
|
+
*/
|
|
5
|
+
export interface ToolCatalogEntry {
|
|
6
|
+
/** The tool's wire name (matches the name in `TOOL_CALL_START`). */
|
|
7
|
+
readonly name: string;
|
|
8
|
+
/** A friendly card label for the tool. */
|
|
9
|
+
readonly summary: string;
|
|
10
|
+
/** Optional longer blurb (e.g. for a tooltip). */
|
|
11
|
+
readonly description?: string;
|
|
12
|
+
}
|
|
13
|
+
|
|
14
|
+
/**
|
|
15
|
+
* Parse a fetched tool catalog into a `name → entry` map, skipping any entry
|
|
16
|
+
* that isn't a `{ name: string, summary: string }` object. Tolerant by design:
|
|
17
|
+
* a malformed payload yields an empty map rather than throwing, and an
|
|
18
|
+
* optional field of the wrong type costs that field rather than the entry.
|
|
19
|
+
* Whole entries are kept, so a consumer can reach `description`.
|
|
20
|
+
*/
|
|
21
|
+
export function parseToolCatalog(data: unknown): Record<string, ToolCatalogEntry> {
|
|
22
|
+
const out: Record<string, ToolCatalogEntry> = {};
|
|
23
|
+
if (!Array.isArray(data)) {
|
|
24
|
+
return out;
|
|
25
|
+
}
|
|
26
|
+
for (const entry of data) {
|
|
27
|
+
if (entry === null || typeof entry !== "object") {
|
|
28
|
+
continue;
|
|
29
|
+
}
|
|
30
|
+
const record = entry as Record<string, unknown>;
|
|
31
|
+
const name = record["name"];
|
|
32
|
+
const summary = record["summary"];
|
|
33
|
+
const description = record["description"];
|
|
34
|
+
if (typeof name === "string" && typeof summary === "string") {
|
|
35
|
+
// `exactOptionalPropertyTypes`: absent is not the same type as present-as-undefined.
|
|
36
|
+
out[name] =
|
|
37
|
+
typeof description === "string" ? { name, summary, description } : { name, summary };
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
return out;
|
|
41
|
+
}
|
|
@@ -0,0 +1,132 @@
|
|
|
1
|
+
import { X_NAVIGATES_KEY, X_SUMMARY_KEY } from "../constants.js";
|
|
2
|
+
import type { ClientTool } from "./client_tool_registry.js";
|
|
3
|
+
|
|
4
|
+
/** A single navigable route the host declares for the agent. */
|
|
5
|
+
export interface Route {
|
|
6
|
+
/** Stable id the agent uses with `navigate_to_route`. */
|
|
7
|
+
readonly id: string;
|
|
8
|
+
/**
|
|
9
|
+
* The URL path to navigate to. May contain `:name` placeholders for dynamic
|
|
10
|
+
* segments (e.g. `/admin/shop/book/:pk/change/`), which the agent fills via
|
|
11
|
+
* `navigate_to_route`'s `params` argument.
|
|
12
|
+
*/
|
|
13
|
+
readonly path: string;
|
|
14
|
+
/** Human label shown to the agent. */
|
|
15
|
+
readonly title?: string;
|
|
16
|
+
/** Optional grouping (e.g. an app or section). */
|
|
17
|
+
readonly group?: string;
|
|
18
|
+
/** Optional longer description of when to use the route. */
|
|
19
|
+
readonly description?: string;
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
/** The host-declared catalog of navigable routes. */
|
|
23
|
+
export type RouteMap = readonly Route[];
|
|
24
|
+
|
|
25
|
+
/** A route enriched with its derived dynamic-segment parameter names. */
|
|
26
|
+
export interface RouteWithParams extends Route {
|
|
27
|
+
/** Names of the `:name` placeholders in {@link Route.path} (may be empty). */
|
|
28
|
+
readonly pathParams: readonly string[];
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
const PATH_PARAM_RE = /:([A-Za-z_][A-Za-z0-9_]*)/g;
|
|
32
|
+
|
|
33
|
+
/** The `:name` path-parameter names declared in a path template, in order. */
|
|
34
|
+
function pathParamNames(path: string): string[] {
|
|
35
|
+
// Slicing the match avoids an uncoverable `undefined` guard on the capture group.
|
|
36
|
+
return [...path.matchAll(PATH_PARAM_RE)].map((match) => match[0].slice(1));
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
/**
|
|
40
|
+
* Substitute `:name` placeholders in `path` from `params`.
|
|
41
|
+
*
|
|
42
|
+
* Returns the concrete path plus the params no placeholder consumed, for the
|
|
43
|
+
* caller to append as a query string. Throws (naming `routeId`) when a declared
|
|
44
|
+
* path param is missing or empty — a half-filled path must never be navigated
|
|
45
|
+
* to.
|
|
46
|
+
*/
|
|
47
|
+
function fillPath(
|
|
48
|
+
routeId: string,
|
|
49
|
+
path: string,
|
|
50
|
+
params: Record<string, unknown>,
|
|
51
|
+
): { path: string; leftover: Record<string, unknown> } {
|
|
52
|
+
const leftover: Record<string, unknown> = { ...params };
|
|
53
|
+
const filled = path.replace(PATH_PARAM_RE, (_match, name: string) => {
|
|
54
|
+
const value = params[name];
|
|
55
|
+
if (value === undefined || value === null || String(value) === "") {
|
|
56
|
+
throw new Error(`route "${routeId}" requires path param "${name}"`);
|
|
57
|
+
}
|
|
58
|
+
delete leftover[name];
|
|
59
|
+
return encodeURIComponent(String(value));
|
|
60
|
+
});
|
|
61
|
+
return { path: filled, leftover };
|
|
62
|
+
}
|
|
63
|
+
|
|
64
|
+
/** Append `params` to `path` as a query string (no-op when empty). */
|
|
65
|
+
function withQuery(path: string, params: Record<string, unknown>): string {
|
|
66
|
+
const usp = new URLSearchParams();
|
|
67
|
+
for (const [key, value] of Object.entries(params)) {
|
|
68
|
+
usp.set(key, String(value));
|
|
69
|
+
}
|
|
70
|
+
const query = usp.toString();
|
|
71
|
+
return query === "" ? path : `${path}?${query}`;
|
|
72
|
+
}
|
|
73
|
+
|
|
74
|
+
/**
|
|
75
|
+
* The built-in `route.*` tools, bound to live getters so a host can set
|
|
76
|
+
* `routeMap` / `navigate` before or after mount.
|
|
77
|
+
*
|
|
78
|
+
* `list_routes` is read-only and advertises each route's `pathParams` so the
|
|
79
|
+
* model knows what to supply. `navigate_to_route` fills those params, appends
|
|
80
|
+
* the rest as a query string, and is stamped `x-navigates` so an MPA reload
|
|
81
|
+
* checkpoints and resumes; with a host `navigate(path)` callback (an SPA) it
|
|
82
|
+
* routes client-side and the run loop continues instead.
|
|
83
|
+
*/
|
|
84
|
+
export function createRouteTools(
|
|
85
|
+
getRouteMap: () => RouteMap,
|
|
86
|
+
getNavigate: () => ((path: string) => void) | null,
|
|
87
|
+
): ClientTool[] {
|
|
88
|
+
return [
|
|
89
|
+
{
|
|
90
|
+
name: "list_routes",
|
|
91
|
+
description:
|
|
92
|
+
"List the routes the app can navigate to. Each route's `pathParams` " +
|
|
93
|
+
"names the dynamic segments to pass as `params` to `navigate_to_route`.",
|
|
94
|
+
parameters: { type: "object", properties: {}, required: [], [X_SUMMARY_KEY]: "List pages" },
|
|
95
|
+
handler: (): RouteWithParams[] =>
|
|
96
|
+
getRouteMap().map((route) => ({ ...route, pathParams: pathParamNames(route.path) })),
|
|
97
|
+
},
|
|
98
|
+
{
|
|
99
|
+
name: "navigate_to_route",
|
|
100
|
+
description:
|
|
101
|
+
"Navigate to one of the app's routes by its id, filling any dynamic " +
|
|
102
|
+
"`:name` path segments (and extra query params) from `params`.",
|
|
103
|
+
parameters: {
|
|
104
|
+
type: "object",
|
|
105
|
+
properties: {
|
|
106
|
+
route_id: { type: "string" },
|
|
107
|
+
params: { type: "object" },
|
|
108
|
+
},
|
|
109
|
+
required: ["route_id"],
|
|
110
|
+
[X_NAVIGATES_KEY]: true,
|
|
111
|
+
[X_SUMMARY_KEY]: "Navigate",
|
|
112
|
+
},
|
|
113
|
+
handler: (args) => {
|
|
114
|
+
const routeId = args["route_id"];
|
|
115
|
+
const route = getRouteMap().find((r) => r.id === routeId);
|
|
116
|
+
if (route === undefined) {
|
|
117
|
+
throw new Error(`unknown route "${String(routeId)}"`);
|
|
118
|
+
}
|
|
119
|
+
const provided = (args["params"] as Record<string, unknown> | undefined) ?? {};
|
|
120
|
+
const { path: filledPath, leftover } = fillPath(route.id, route.path, provided);
|
|
121
|
+
const path = withQuery(filledPath, leftover);
|
|
122
|
+
const navigate = getNavigate();
|
|
123
|
+
if (navigate !== null) {
|
|
124
|
+
navigate(path);
|
|
125
|
+
} else {
|
|
126
|
+
window.location.assign(path);
|
|
127
|
+
}
|
|
128
|
+
return { navigated: true, path };
|
|
129
|
+
},
|
|
130
|
+
},
|
|
131
|
+
];
|
|
132
|
+
}
|