@athenaintel/react 0.42.2 → 0.48.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/README.md +225 -3
- package/dist/agent-runtime/src/answer-label.cjs +137 -0
- package/dist/agent-runtime/src/answer-label.cjs.map +1 -0
- package/dist/agent-runtime/src/answer-label.d.ts +104 -0
- package/dist/agent-runtime/src/answer-label.js +137 -0
- package/dist/agent-runtime/src/answer-label.js.map +1 -0
- package/dist/agent-runtime/src/answer-rows.cjs +180 -0
- package/dist/agent-runtime/src/answer-rows.cjs.map +1 -0
- package/dist/agent-runtime/src/answer-rows.d.ts +86 -0
- package/dist/agent-runtime/src/answer-rows.js +180 -0
- package/dist/agent-runtime/src/answer-rows.js.map +1 -0
- package/dist/agent-runtime/src/client-tool-bridge.cjs +15 -15
- package/dist/agent-runtime/src/client-tool-bridge.cjs.map +1 -1
- package/dist/agent-runtime/src/conversation-index.cjs +8 -8
- package/dist/agent-runtime/src/conversation-index.cjs.map +1 -1
- package/dist/agent-runtime/src/conversation-list-groups.d.ts +74 -0
- package/dist/agent-runtime/src/decision-checks.cjs +207 -0
- package/dist/agent-runtime/src/decision-checks.cjs.map +1 -0
- package/dist/agent-runtime/src/decision-checks.d.ts +142 -0
- package/dist/agent-runtime/src/decision-checks.js +207 -0
- package/dist/agent-runtime/src/decision-checks.js.map +1 -0
- package/dist/agent-runtime/src/desktop-handoff.d.ts +12 -0
- package/dist/agent-runtime/src/errors.cjs +18 -0
- package/dist/agent-runtime/src/errors.cjs.map +1 -1
- package/dist/agent-runtime/src/errors.d.ts +7 -0
- package/dist/agent-runtime/src/errors.js +18 -0
- package/dist/agent-runtime/src/errors.js.map +1 -1
- package/dist/agent-runtime/src/generated/runconfig-contract.cjs +12 -0
- package/dist/agent-runtime/src/generated/runconfig-contract.cjs.map +1 -1
- package/dist/agent-runtime/src/generated/runconfig-contract.d.ts +6 -6
- package/dist/agent-runtime/src/generated/runconfig-contract.js +12 -0
- package/dist/agent-runtime/src/generated/runconfig-contract.js.map +1 -1
- package/dist/agent-runtime/src/handoff-arrival.cjs +60 -0
- package/dist/agent-runtime/src/handoff-arrival.cjs.map +1 -0
- package/dist/agent-runtime/src/handoff-arrival.d.ts +46 -0
- package/dist/agent-runtime/src/handoff-arrival.js +60 -0
- package/dist/agent-runtime/src/handoff-arrival.js.map +1 -0
- package/dist/agent-runtime/src/index.d.ts +15 -8
- package/dist/agent-runtime/src/interrupts.cjs +43 -18
- package/dist/agent-runtime/src/interrupts.cjs.map +1 -1
- package/dist/agent-runtime/src/interrupts.d.ts +19 -2
- package/dist/agent-runtime/src/interrupts.js +28 -3
- package/dist/agent-runtime/src/interrupts.js.map +1 -1
- package/dist/agent-runtime/src/lane-history.cjs +8 -8
- package/dist/agent-runtime/src/lane-history.cjs.map +1 -1
- package/dist/agent-runtime/src/messages.cjs +43 -8
- package/dist/agent-runtime/src/messages.cjs.map +1 -1
- package/dist/agent-runtime/src/messages.d.ts +25 -3
- package/dist/agent-runtime/src/messages.js +43 -8
- package/dist/agent-runtime/src/messages.js.map +1 -1
- package/dist/agent-runtime/src/offline-status.cjs +36 -0
- package/dist/agent-runtime/src/offline-status.cjs.map +1 -0
- package/dist/agent-runtime/src/offline-status.d.ts +118 -3
- package/dist/agent-runtime/src/offline-status.js +36 -0
- package/dist/agent-runtime/src/offline-status.js.map +1 -0
- package/dist/agent-runtime/src/queue.cjs +0 -9
- package/dist/agent-runtime/src/queue.cjs.map +1 -1
- package/dist/agent-runtime/src/queue.js +0 -9
- package/dist/agent-runtime/src/queue.js.map +1 -1
- package/dist/agent-runtime/src/quota-safe-local-storage-session.cjs +9 -9
- package/dist/agent-runtime/src/quota-safe-local-storage-session.cjs.map +1 -1
- package/dist/agent-runtime/src/runtime-catalog.cjs +42 -0
- package/dist/agent-runtime/src/runtime-catalog.cjs.map +1 -0
- package/dist/agent-runtime/src/runtime-catalog.d.ts +35 -0
- package/dist/agent-runtime/src/runtime-catalog.js +42 -0
- package/dist/agent-runtime/src/runtime-catalog.js.map +1 -0
- package/dist/agent-runtime/src/runtime-messages.cjs.map +1 -1
- package/dist/agent-runtime/src/runtime-messages.d.ts +1 -1
- package/dist/agent-runtime/src/runtime-messages.js.map +1 -1
- package/dist/agent-runtime/src/runtime.d.ts +40 -0
- package/dist/agent-runtime/src/statewire-suspended.cjs +3 -3
- package/dist/agent-runtime/src/statewire-suspended.cjs.map +1 -1
- package/dist/agent-runtime/src/subagents.cjs +32 -2
- package/dist/agent-runtime/src/subagents.cjs.map +1 -1
- package/dist/agent-runtime/src/subagents.d.ts +9 -0
- package/dist/agent-runtime/src/subagents.js +30 -0
- package/dist/agent-runtime/src/subagents.js.map +1 -1
- package/dist/agent-runtime/src/thread-driver.cjs +67 -0
- package/dist/agent-runtime/src/thread-driver.cjs.map +1 -0
- package/dist/agent-runtime/src/thread-driver.d.ts +49 -0
- package/dist/agent-runtime/src/thread-driver.js +67 -0
- package/dist/agent-runtime/src/thread-driver.js.map +1 -0
- package/dist/agent-runtime/src/thread-handoff-flow-machine.d.ts +172 -0
- package/dist/agent-runtime/src/thread-handoff-protocol.d.ts +756 -0
- package/dist/agent-runtime/src/thread-handoff-qr.d.ts +11 -0
- package/dist/agent-runtime/src/thread-handoff.d.ts +3 -364
- package/dist/agent-runtime/src/thread-status.cjs +3 -3
- package/dist/agent-runtime/src/thread-status.cjs.map +1 -1
- package/dist/agent-runtime/src/tool-metadata.cjs +210 -33
- package/dist/agent-runtime/src/tool-metadata.cjs.map +1 -1
- package/dist/agent-runtime/src/tool-metadata.d.ts +12 -0
- package/dist/agent-runtime/src/tool-metadata.js +210 -33
- package/dist/agent-runtime/src/tool-metadata.js.map +1 -1
- package/dist/agent-runtime/src/tool-names.cjs +2 -0
- package/dist/agent-runtime/src/tool-names.cjs.map +1 -1
- package/dist/agent-runtime/src/tool-names.d.ts +2 -0
- package/dist/agent-runtime/src/tool-names.js +2 -0
- package/dist/agent-runtime/src/tool-names.js.map +1 -1
- package/dist/agent-runtime/src/types.d.ts +10 -2
- package/dist/agent-runtime/src/use-conversation-list.cjs +11 -11
- package/dist/agent-runtime/src/use-conversation-list.cjs.map +1 -1
- package/dist/agent-runtime/src/use-deep-agent-chat-outbox.cjs +24 -19
- package/dist/agent-runtime/src/use-deep-agent-chat-outbox.cjs.map +1 -1
- package/dist/agent-runtime/src/use-deep-agent-chat-outbox.d.ts +2 -1
- package/dist/agent-runtime/src/use-deep-agent-chat-outbox.js +6 -1
- package/dist/agent-runtime/src/use-deep-agent-chat-outbox.js.map +1 -1
- package/dist/agent-runtime/src/use-deep-agent-config.cjs +14 -14
- package/dist/agent-runtime/src/use-deep-agent-config.cjs.map +1 -1
- package/dist/agent-runtime/src/use-deep-agent-edit-submit.cjs +6 -6
- package/dist/agent-runtime/src/use-deep-agent-edit-submit.cjs.map +1 -1
- package/dist/agent-runtime/src/use-deep-agent-runtime.cjs +16 -16
- package/dist/agent-runtime/src/use-deep-agent-runtime.cjs.map +1 -1
- package/dist/agent-runtime/src/use-deep-agent-thread.cjs +45 -45
- package/dist/agent-runtime/src/use-deep-agent-thread.cjs.map +1 -1
- package/dist/agent-runtime/src/use-deep-agent-voice.cjs +572 -134
- package/dist/agent-runtime/src/use-deep-agent-voice.cjs.map +1 -1
- package/dist/agent-runtime/src/use-deep-agent-voice.d.ts +137 -10
- package/dist/agent-runtime/src/use-deep-agent-voice.js +514 -76
- package/dist/agent-runtime/src/use-deep-agent-voice.js.map +1 -1
- package/dist/agent-runtime/src/use-deep-agent-window-sync.cjs +26 -26
- package/dist/agent-runtime/src/use-deep-agent-window-sync.cjs.map +1 -1
- package/dist/agent-runtime/src/use-historical-edit-attachments.cjs +4 -4
- package/dist/agent-runtime/src/use-historical-edit-attachments.cjs.map +1 -1
- package/dist/agent-runtime/src/use-thread-handoff-flow.d.ts +28 -26
- package/dist/agent-runtime/src/voice-media.cjs +117 -0
- package/dist/agent-runtime/src/voice-media.cjs.map +1 -0
- package/dist/agent-runtime/src/voice-media.d.ts +49 -0
- package/dist/agent-runtime/src/voice-media.js +117 -0
- package/dist/agent-runtime/src/voice-media.js.map +1 -0
- package/dist/agent-runtime/src/voice-wire-types.d.ts +32 -0
- package/dist/assets/AssetPanel.cjs +11 -11
- package/dist/assets/AssetPanel.cjs.map +1 -1
- package/dist/assets/AthenaAssetEmbed.cjs +11 -9
- package/dist/assets/AthenaAssetEmbed.cjs.map +1 -1
- package/dist/assets/AthenaAssetEmbed.d.ts +7 -0
- package/dist/assets/AthenaAssetEmbed.js +4 -2
- package/dist/assets/AthenaAssetEmbed.js.map +1 -1
- package/dist/assets/AthenaLayout.cjs +16 -16
- package/dist/assets/AthenaLayout.cjs.map +1 -1
- package/dist/assets/use-asset-content.cjs +4 -4
- package/dist/assets/use-asset-content.cjs.map +1 -1
- package/dist/assets/use-asset-embed.cjs +14 -7
- package/dist/assets/use-asset-embed.cjs.map +1 -1
- package/dist/assets/use-asset-embed.d.ts +11 -1
- package/dist/assets/use-asset-embed.js +10 -3
- package/dist/assets/use-asset-embed.js.map +1 -1
- package/dist/auth/AthenaAuthContext.cjs +3 -3
- package/dist/auth/AthenaAuthContext.cjs.map +1 -1
- package/dist/auth/AthenaAuthProvider.cjs +8 -8
- package/dist/auth/AthenaAuthProvider.cjs.map +1 -1
- package/dist/auth/AthenaCredentialSourceContext.cjs +5 -5
- package/dist/auth/AthenaCredentialSourceContext.cjs.map +1 -1
- package/dist/auth/AthenaSSOProvider.cjs +14 -14
- package/dist/auth/AthenaSSOProvider.cjs.map +1 -1
- package/dist/auth/credential-source.cjs +26 -13
- package/dist/auth/credential-source.cjs.map +1 -1
- package/dist/auth/credential-source.d.ts +8 -0
- package/dist/auth/credential-source.js +26 -13
- package/dist/auth/credential-source.js.map +1 -1
- package/dist/catalog/agent-model-options.cjs +25 -17
- package/dist/catalog/agent-model-options.cjs.map +1 -1
- package/dist/catalog/agent-model-options.d.ts +38 -5
- package/dist/catalog/agent-model-options.js +25 -17
- package/dist/catalog/agent-model-options.js.map +1 -1
- package/dist/catalog/channel-refusal.cjs +36 -0
- package/dist/catalog/channel-refusal.cjs.map +1 -0
- package/dist/catalog/channel-refusal.d.ts +29 -0
- package/dist/catalog/channel-refusal.js +36 -0
- package/dist/catalog/channel-refusal.js.map +1 -0
- package/dist/catalog/chat-pickers.cjs +60 -24
- package/dist/catalog/chat-pickers.cjs.map +1 -1
- package/dist/catalog/chat-pickers.d.ts +12 -2
- package/dist/catalog/chat-pickers.js +56 -20
- package/dist/catalog/chat-pickers.js.map +1 -1
- package/dist/catalog/runtime-catalog.cjs +89 -23
- package/dist/catalog/runtime-catalog.cjs.map +1 -1
- package/dist/catalog/runtime-catalog.d.ts +8 -2
- package/dist/catalog/runtime-catalog.js +83 -17
- package/dist/catalog/runtime-catalog.js.map +1 -1
- package/dist/catalog/use-athena-chat-mode.cjs +12 -12
- package/dist/catalog/use-athena-chat-mode.cjs.map +1 -1
- package/dist/chat/AthenaChat.cjs +155 -67
- package/dist/chat/AthenaChat.cjs.map +1 -1
- package/dist/chat/AthenaChat.d.ts +42 -2
- package/dist/chat/AthenaChat.js +106 -18
- package/dist/chat/AthenaChat.js.map +1 -1
- package/dist/chat/AthenaChatErrorBoundary.cjs +3 -3
- package/dist/chat/AthenaChatErrorBoundary.cjs.map +1 -1
- package/dist/chat/DrivingOnChip.cjs +23 -0
- package/dist/chat/DrivingOnChip.cjs.map +1 -0
- package/dist/chat/DrivingOnChip.d.ts +17 -0
- package/dist/chat/DrivingOnChip.js +23 -0
- package/dist/chat/DrivingOnChip.js.map +1 -0
- package/dist/chat/StatewireApprovalCard.cjs +125 -31
- package/dist/chat/StatewireApprovalCard.cjs.map +1 -1
- package/dist/chat/StatewireApprovalCard.d.ts +73 -1
- package/dist/chat/StatewireApprovalCard.js +115 -21
- package/dist/chat/StatewireApprovalCard.js.map +1 -1
- package/dist/chat/StatewireClientToolBridge.cjs +2 -2
- package/dist/chat/StatewireClientToolBridge.cjs.map +1 -1
- package/dist/chat/StatewireQueuedMessages.cjs +25 -63
- package/dist/chat/StatewireQueuedMessages.cjs.map +1 -1
- package/dist/chat/StatewireQueuedMessages.d.ts +11 -13
- package/dist/chat/StatewireQueuedMessages.js +16 -54
- package/dist/chat/StatewireQueuedMessages.js.map +1 -1
- package/dist/chat/WaitingOnYouBanner.cjs +3 -3
- package/dist/chat/WaitingOnYouBanner.cjs.map +1 -1
- package/dist/chat/athena-chat-welcome.cjs +2 -2
- package/dist/chat/athena-chat-welcome.cjs.map +1 -1
- package/dist/chat/athena-citation-links.cjs +5 -5
- package/dist/chat/athena-citation-links.cjs.map +1 -1
- package/dist/chat/athena-composer-controls.cjs +26 -16
- package/dist/chat/athena-composer-controls.cjs.map +1 -1
- package/dist/chat/athena-composer-controls.d.ts +6 -0
- package/dist/chat/athena-composer-controls.js +26 -16
- package/dist/chat/athena-composer-controls.js.map +1 -1
- package/dist/chat/athena-turn-end-status.cjs +42 -0
- package/dist/chat/athena-turn-end-status.cjs.map +1 -0
- package/dist/chat/athena-turn-end-status.d.ts +24 -0
- package/dist/chat/athena-turn-end-status.js +42 -0
- package/dist/chat/athena-turn-end-status.js.map +1 -0
- package/dist/chat/browser-decision-check.cjs +131 -0
- package/dist/chat/browser-decision-check.cjs.map +1 -0
- package/dist/chat/browser-decision-check.d.ts +61 -0
- package/dist/chat/browser-decision-check.js +131 -0
- package/dist/chat/browser-decision-check.js.map +1 -0
- package/dist/chat/chat-outbox-rows.cjs +3 -3
- package/dist/chat/chat-outbox-rows.cjs.map +1 -1
- package/dist/chat/chat-voice-controls.cjs +93 -28
- package/dist/chat/chat-voice-controls.cjs.map +1 -1
- package/dist/chat/chat-voice-controls.d.ts +36 -2
- package/dist/chat/chat-voice-controls.js +89 -24
- package/dist/chat/chat-voice-controls.js.map +1 -1
- package/dist/chat/composer-keyboard-hint.cjs +5 -5
- package/dist/chat/composer-keyboard-hint.cjs.map +1 -1
- package/dist/chat/device-operation.cjs +29 -0
- package/dist/chat/device-operation.cjs.map +1 -0
- package/dist/chat/device-operation.d.ts +34 -0
- package/dist/chat/device-operation.js +29 -0
- package/dist/chat/device-operation.js.map +1 -0
- package/dist/chat/super-grouping/CollapsibleGroup.cjs +14 -14
- package/dist/chat/super-grouping/CollapsibleGroup.cjs.map +1 -1
- package/dist/chat/super-grouping/GroupedMessageParts.cjs +4 -4
- package/dist/chat/super-grouping/GroupedMessageParts.cjs.map +1 -1
- package/dist/chat/super-grouping/SuperGroupingCard.cjs +60 -38
- package/dist/chat/super-grouping/SuperGroupingCard.cjs.map +1 -1
- package/dist/chat/super-grouping/SuperGroupingCard.d.ts +24 -4
- package/dist/chat/super-grouping/SuperGroupingCard.js +37 -15
- package/dist/chat/super-grouping/SuperGroupingCard.js.map +1 -1
- package/dist/chat/super-grouping/SuperGroupingTranscript.cjs +32 -32
- package/dist/chat/super-grouping/SuperGroupingTranscript.cjs.map +1 -1
- package/dist/chat/super-grouping/SuperGroupingTranscript.js +3 -3
- package/dist/chat/super-grouping/SuperGroupingTranscript.js.map +1 -1
- package/dist/chat/super-grouping/ToolTimeline.cjs +97 -37
- package/dist/chat/super-grouping/ToolTimeline.cjs.map +1 -1
- package/dist/chat/super-grouping/ToolTimeline.d.ts +14 -2
- package/dist/chat/super-grouping/ToolTimeline.js +94 -34
- package/dist/chat/super-grouping/ToolTimeline.js.map +1 -1
- package/dist/chat/super-grouping/activity-timeline.cjs +47 -12
- package/dist/chat/super-grouping/activity-timeline.cjs.map +1 -1
- package/dist/chat/super-grouping/activity-timeline.d.ts +21 -0
- package/dist/chat/super-grouping/activity-timeline.js +47 -12
- package/dist/chat/super-grouping/activity-timeline.js.map +1 -1
- package/dist/chat/super-grouping/grouping-function.cjs +4 -0
- package/dist/chat/super-grouping/grouping-function.cjs.map +1 -1
- package/dist/chat/super-grouping/grouping-function.d.ts +7 -0
- package/dist/chat/super-grouping/grouping-function.js +5 -1
- package/dist/chat/super-grouping/grouping-function.js.map +1 -1
- package/dist/chat/super-grouping/index.cjs +6 -0
- package/dist/chat/super-grouping/index.cjs.map +1 -1
- package/dist/chat/super-grouping/index.d.ts +6 -2
- package/dist/chat/super-grouping/index.js +7 -1
- package/dist/chat/super-grouping/index.js.map +1 -1
- package/dist/chat/super-grouping/timeline-step.cjs +61 -2
- package/dist/chat/super-grouping/timeline-step.cjs.map +1 -1
- package/dist/chat/super-grouping/timeline-step.d.ts +13 -1
- package/dist/chat/super-grouping/timeline-step.js +61 -2
- package/dist/chat/super-grouping/timeline-step.js.map +1 -1
- package/dist/chat/super-grouping/tool-part-placement.cjs +17 -0
- package/dist/chat/super-grouping/tool-part-placement.cjs.map +1 -0
- package/dist/chat/super-grouping/tool-part-placement.d.ts +22 -0
- package/dist/chat/super-grouping/tool-part-placement.js +17 -0
- package/dist/chat/super-grouping/tool-part-placement.js.map +1 -0
- package/dist/chat/thread-scroll-to-bottom.cjs +2 -2
- package/dist/chat/thread-scroll-to-bottom.cjs.map +1 -1
- package/dist/chat/thread-scroll-to-bottom.d.ts +10 -7
- package/dist/chat/thread-scroll-to-bottom.js +2 -2
- package/dist/chat/thread-scroll-to-bottom.js.map +1 -1
- package/dist/chat/tooltip-icon-button.cjs +2 -2
- package/dist/chat/tooltip-icon-button.cjs.map +1 -1
- package/dist/chat/use-athena-voice-live.cjs +11 -0
- package/dist/chat/use-athena-voice-live.cjs.map +1 -0
- package/dist/chat/use-athena-voice-live.d.ts +11 -0
- package/dist/chat/use-athena-voice-live.js +11 -0
- package/dist/chat/use-athena-voice-live.js.map +1 -0
- package/dist/chat/use-statewire-approval-request.cjs +56 -24
- package/dist/chat/use-statewire-approval-request.cjs.map +1 -1
- package/dist/chat/use-statewire-approval-request.d.ts +33 -4
- package/dist/chat/use-statewire-approval-request.js +41 -9
- package/dist/chat/use-statewire-approval-request.js.map +1 -1
- package/dist/chat-ui/auth/sign-in-card.cjs +2 -2
- package/dist/chat-ui/auth/sign-in-card.cjs.map +1 -1
- package/dist/chat-ui/composer/tiptap-composer.cjs +138 -107
- package/dist/chat-ui/composer/tiptap-composer.cjs.map +1 -1
- package/dist/chat-ui/composer/tiptap-composer.d.ts +20 -4
- package/dist/chat-ui/composer/tiptap-composer.js +85 -54
- package/dist/chat-ui/composer/tiptap-composer.js.map +1 -1
- package/dist/chat-ui/header/conversation-history-panel.cjs +49 -23
- package/dist/chat-ui/header/conversation-history-panel.cjs.map +1 -1
- package/dist/chat-ui/header/conversation-history-panel.d.ts +12 -1
- package/dist/chat-ui/header/conversation-history-panel.js +38 -12
- package/dist/chat-ui/header/conversation-history-panel.js.map +1 -1
- package/dist/chat-ui/index.cjs +18 -0
- package/dist/chat-ui/index.cjs.map +1 -1
- package/dist/chat-ui/index.d.ts +7 -1
- package/dist/chat-ui/index.js +18 -0
- package/dist/chat-ui/index.js.map +1 -1
- package/dist/chat-ui/mentions/mention-chip.cjs +147 -38
- package/dist/chat-ui/mentions/mention-chip.cjs.map +1 -1
- package/dist/chat-ui/mentions/mention-chip.d.ts +17 -1
- package/dist/chat-ui/mentions/mention-chip.js +146 -37
- package/dist/chat-ui/mentions/mention-chip.js.map +1 -1
- package/dist/chat-ui/mentions/suggestions/components/mention-suggestion-list.cjs +10 -9
- package/dist/chat-ui/mentions/suggestions/components/mention-suggestion-list.cjs.map +1 -1
- package/dist/chat-ui/mentions/suggestions/components/mention-suggestion-list.js +3 -2
- package/dist/chat-ui/mentions/suggestions/components/mention-suggestion-list.js.map +1 -1
- package/dist/chat-ui/mentions/suggestions/components/mention-suggestion-popup.cjs +2 -2
- package/dist/chat-ui/mentions/suggestions/components/mention-suggestion-popup.cjs.map +1 -1
- package/dist/chat-ui/mentions/suggestions/components/menu-list.cjs +29 -6
- package/dist/chat-ui/mentions/suggestions/components/menu-list.cjs.map +1 -1
- package/dist/chat-ui/mentions/suggestions/components/menu-list.d.ts +7 -1
- package/dist/chat-ui/mentions/suggestions/components/menu-list.js +25 -2
- package/dist/chat-ui/mentions/suggestions/components/menu-list.js.map +1 -1
- package/dist/chat-ui/mentions/suggestions/components/use-keyboard-navigation.cjs +2 -2
- package/dist/chat-ui/mentions/suggestions/components/use-keyboard-navigation.cjs.map +1 -1
- package/dist/chat-ui/mentions/suggestions/components/use-menu-navigation.cjs +2 -2
- package/dist/chat-ui/mentions/suggestions/components/use-menu-navigation.cjs.map +1 -1
- package/dist/chat-ui/mentions/suggestions/data/api-client.cjs +3 -3
- package/dist/chat-ui/mentions/suggestions/data/api-client.cjs.map +1 -1
- package/dist/chat-ui/mentions/suggestions/data/orchestrator.cjs +56 -2
- package/dist/chat-ui/mentions/suggestions/data/orchestrator.cjs.map +1 -1
- package/dist/chat-ui/mentions/suggestions/data/orchestrator.d.ts +12 -0
- package/dist/chat-ui/mentions/suggestions/data/orchestrator.js +56 -2
- package/dist/chat-ui/mentions/suggestions/data/orchestrator.js.map +1 -1
- package/dist/chat-ui/mentions/suggestions/data/sources/index.cjs +24 -3
- package/dist/chat-ui/mentions/suggestions/data/sources/index.cjs.map +1 -1
- package/dist/chat-ui/mentions/suggestions/data/sources/index.d.ts +7 -0
- package/dist/chat-ui/mentions/suggestions/data/sources/index.js +24 -3
- package/dist/chat-ui/mentions/suggestions/data/sources/index.js.map +1 -1
- package/dist/chat-ui/mentions/suggestions/data/use-mention-suggestions.cjs +35 -13
- package/dist/chat-ui/mentions/suggestions/data/use-mention-suggestions.cjs.map +1 -1
- package/dist/chat-ui/mentions/suggestions/data/use-mention-suggestions.d.ts +15 -1
- package/dist/chat-ui/mentions/suggestions/data/use-mention-suggestions.js +28 -6
- package/dist/chat-ui/mentions/suggestions/data/use-mention-suggestions.js.map +1 -1
- package/dist/chat-ui/mentions/suggestions/data/use-menu-items.cjs +9 -6
- package/dist/chat-ui/mentions/suggestions/data/use-menu-items.cjs.map +1 -1
- package/dist/chat-ui/mentions/suggestions/data/use-menu-items.d.ts +3 -0
- package/dist/chat-ui/mentions/suggestions/data/use-menu-items.js +5 -2
- package/dist/chat-ui/mentions/suggestions/data/use-menu-items.js.map +1 -1
- package/dist/chat-ui/mentions/use-account-workspace-id.cjs +45 -10
- package/dist/chat-ui/mentions/use-account-workspace-id.cjs.map +1 -1
- package/dist/chat-ui/mentions/use-account-workspace-id.d.ts +24 -1
- package/dist/chat-ui/mentions/use-account-workspace-id.js +46 -11
- package/dist/chat-ui/mentions/use-account-workspace-id.js.map +1 -1
- package/dist/chat-ui/mentions/use-member-avatar.cjs +4 -4
- package/dist/chat-ui/mentions/use-member-avatar.cjs.map +1 -1
- package/dist/chat-ui/mentions/use-mention-asset.cjs +140 -0
- package/dist/chat-ui/mentions/use-mention-asset.cjs.map +1 -0
- package/dist/chat-ui/mentions/use-mention-asset.d.ts +16 -0
- package/dist/chat-ui/mentions/use-mention-asset.js +140 -0
- package/dist/chat-ui/mentions/use-mention-asset.js.map +1 -0
- package/dist/chat-ui/messages/answer-label.cjs +42 -0
- package/dist/chat-ui/messages/answer-label.cjs.map +1 -0
- package/dist/chat-ui/messages/answer-label.d.ts +33 -0
- package/dist/chat-ui/messages/answer-label.js +42 -0
- package/dist/chat-ui/messages/answer-label.js.map +1 -0
- package/dist/chat-ui/messages/arrival-animation.cjs +13 -0
- package/dist/chat-ui/messages/arrival-animation.cjs.map +1 -0
- package/dist/chat-ui/messages/arrival-animation.d.ts +14 -0
- package/dist/chat-ui/messages/arrival-animation.js +13 -0
- package/dist/chat-ui/messages/arrival-animation.js.map +1 -0
- package/dist/chat-ui/messages/continue-pill.cjs +5 -5
- package/dist/chat-ui/messages/continue-pill.cjs.map +1 -1
- package/dist/chat-ui/messages/handoff-arrival-divider.cjs +44 -0
- package/dist/chat-ui/messages/handoff-arrival-divider.cjs.map +1 -0
- package/dist/chat-ui/messages/handoff-arrival-divider.d.ts +17 -0
- package/dist/chat-ui/messages/handoff-arrival-divider.js +44 -0
- package/dist/chat-ui/messages/handoff-arrival-divider.js.map +1 -0
- package/dist/chat-ui/messages/message-actions-config.cjs +3 -3
- package/dist/chat-ui/messages/message-actions-config.cjs.map +1 -1
- package/dist/chat-ui/messages/message-components.cjs +8 -4
- package/dist/chat-ui/messages/message-components.cjs.map +1 -1
- package/dist/chat-ui/messages/message-components.js +5 -1
- package/dist/chat-ui/messages/message-components.js.map +1 -1
- package/dist/chat-ui/messages/message-images.cjs +66 -0
- package/dist/chat-ui/messages/message-images.cjs.map +1 -0
- package/dist/chat-ui/messages/message-images.d.ts +16 -0
- package/dist/chat-ui/messages/message-images.js +66 -0
- package/dist/chat-ui/messages/message-images.js.map +1 -0
- package/dist/chat-ui/messages/user-edit-composer.cjs +2 -2
- package/dist/chat-ui/messages/user-edit-composer.cjs.map +1 -1
- package/dist/chat-ui/messages/wake-marker.cjs +3 -3
- package/dist/chat-ui/messages/wake-marker.cjs.map +1 -1
- package/dist/chat-ui/rich-text/chat-link.cjs +7 -6
- package/dist/chat-ui/rich-text/chat-link.cjs.map +1 -1
- package/dist/chat-ui/rich-text/chat-link.d.ts +2 -3
- package/dist/chat-ui/rich-text/chat-link.js +6 -5
- package/dist/chat-ui/rich-text/chat-link.js.map +1 -1
- package/dist/chat-ui/rich-text/chat-message-body.cjs +8 -8
- package/dist/chat-ui/rich-text/chat-message-body.cjs.map +1 -1
- package/dist/chat-ui/rich-text/chat-node-views.cjs +7 -6
- package/dist/chat-ui/rich-text/chat-node-views.cjs.map +1 -1
- package/dist/chat-ui/rich-text/chat-node-views.js +1 -0
- package/dist/chat-ui/rich-text/chat-node-views.js.map +1 -1
- package/dist/chat-ui/rich-text/dom-output-spec.cjs +2 -2
- package/dist/chat-ui/rich-text/dom-output-spec.cjs.map +1 -1
- package/dist/chat-ui/statewire.cjs +3 -0
- package/dist/chat-ui/statewire.cjs.map +1 -1
- package/dist/chat-ui/statewire.d.ts +2 -1
- package/dist/chat-ui/statewire.js +3 -0
- package/dist/chat-ui/statewire.js.map +1 -1
- package/dist/chat-ui/thread/chat-thread-shell.cjs +43 -14
- package/dist/chat-ui/thread/chat-thread-shell.cjs.map +1 -1
- package/dist/chat-ui/thread/chat-thread-shell.d.ts +16 -2
- package/dist/chat-ui/thread/chat-thread-shell.js +35 -6
- package/dist/chat-ui/thread/chat-thread-shell.js.map +1 -1
- package/dist/chat-ui/thread/composer-send-or-stop.cjs +30 -20
- package/dist/chat-ui/thread/composer-send-or-stop.cjs.map +1 -1
- package/dist/chat-ui/thread/composer-send-or-stop.d.ts +8 -0
- package/dist/chat-ui/thread/composer-send-or-stop.js +29 -19
- package/dist/chat-ui/thread/composer-send-or-stop.js.map +1 -1
- package/dist/chat-ui/thread/statewire-history-edge.cjs +20 -21
- package/dist/chat-ui/thread/statewire-history-edge.cjs.map +1 -1
- package/dist/chat-ui/thread/statewire-history-edge.js +3 -4
- package/dist/chat-ui/thread/statewire-history-edge.js.map +1 -1
- package/dist/chat-ui/thread/thread-loading-overlay.cjs +5 -5
- package/dist/chat-ui/thread/thread-loading-overlay.cjs.map +1 -1
- package/dist/collab/client.cjs +40 -3
- package/dist/collab/client.cjs.map +1 -1
- package/dist/collab/client.d.ts +25 -0
- package/dist/collab/client.js +40 -3
- package/dist/collab/client.js.map +1 -1
- package/dist/collab/document-status.cjs +150 -0
- package/dist/collab/document-status.cjs.map +1 -0
- package/dist/collab/document-status.d.ts +68 -0
- package/dist/collab/document-status.js +150 -0
- package/dist/collab/document-status.js.map +1 -0
- package/dist/collab/index.cjs +7 -0
- package/dist/collab/index.cjs.map +1 -1
- package/dist/collab/index.d.ts +6 -1
- package/dist/collab/index.js +7 -0
- package/dist/collab/index.js.map +1 -1
- package/dist/collab/presence-react.cjs +11 -11
- package/dist/collab/presence-react.cjs.map +1 -1
- package/dist/collab/react.cjs +6 -6
- package/dist/collab/react.cjs.map +1 -1
- package/dist/composer/AttachmentContext.cjs +24 -11
- package/dist/composer/AttachmentContext.cjs.map +1 -1
- package/dist/composer/AttachmentContext.js +18 -5
- package/dist/composer/AttachmentContext.js.map +1 -1
- package/dist/composer/ComposerAttachmentPreview.cjs +78 -23
- package/dist/composer/ComposerAttachmentPreview.cjs.map +1 -1
- package/dist/composer/ComposerAttachmentPreview.d.ts +5 -3
- package/dist/composer/ComposerAttachmentPreview.js +79 -24
- package/dist/composer/ComposerAttachmentPreview.js.map +1 -1
- package/dist/composer/ComposerDropZone.cjs +7 -7
- package/dist/composer/ComposerDropZone.cjs.map +1 -1
- package/dist/composer/FileUploadButton.cjs +37 -22
- package/dist/composer/FileUploadButton.cjs.map +1 -1
- package/dist/composer/FileUploadButton.d.ts +6 -0
- package/dist/composer/FileUploadButton.js +34 -19
- package/dist/composer/FileUploadButton.js.map +1 -1
- package/dist/composer/QuoteContext.cjs +8 -8
- package/dist/composer/QuoteContext.cjs.map +1 -1
- package/dist/composer/composer-handoff.cjs +4 -4
- package/dist/composer/composer-handoff.cjs.map +1 -1
- package/dist/composer/useAppendToComposer.cjs +4 -4
- package/dist/composer/useAppendToComposer.cjs.map +1 -1
- package/dist/composer/useAttachFiles.cjs +23 -6
- package/dist/composer/useAttachFiles.cjs.map +1 -1
- package/dist/composer/useAttachFiles.d.ts +15 -7
- package/dist/composer/useAttachFiles.js +22 -5
- package/dist/composer/useAttachFiles.js.map +1 -1
- package/dist/composer/useComposerAttachment.cjs +4 -4
- package/dist/composer/useComposerAttachment.cjs.map +1 -1
- package/dist/composer/useFileUpload.cjs +21 -16
- package/dist/composer/useFileUpload.cjs.map +1 -1
- package/dist/composer/useFileUpload.d.ts +12 -0
- package/dist/composer/useFileUpload.js +12 -7
- package/dist/composer/useFileUpload.js.map +1 -1
- package/dist/composer/useReadComposerDraft.cjs +2 -2
- package/dist/composer/useReadComposerDraft.cjs.map +1 -1
- package/dist/composer/useSendMessage.cjs +4 -4
- package/dist/composer/useSendMessage.cjs.map +1 -1
- package/dist/diagnostics/useAthenaDiagnostics.cjs +4 -4
- package/dist/diagnostics/useAthenaDiagnostics.cjs.map +1 -1
- package/dist/dictation/audio-level-history.cjs +3 -3
- package/dist/dictation/audio-level-history.cjs.map +1 -1
- package/dist/dictation/dictation-controls.cjs +24 -20
- package/dist/dictation/dictation-controls.cjs.map +1 -1
- package/dist/dictation/dictation-controls.d.ts +6 -1
- package/dist/dictation/dictation-controls.js +24 -20
- package/dist/dictation/dictation-controls.js.map +1 -1
- package/dist/dictation/use-athena-dictation-engine.cjs +3 -3
- package/dist/dictation/use-athena-dictation-engine.cjs.map +1 -1
- package/dist/dictation/use-dictation.cjs +22 -22
- package/dist/dictation/use-dictation.cjs.map +1 -1
- package/dist/index.cjs +26 -2
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.ts +15 -3
- package/dist/index.js +26 -2
- package/dist/index.js.map +1 -1
- package/dist/keryx-http/src/receive-only-socket.cjs +40 -0
- package/dist/keryx-http/src/receive-only-socket.cjs.map +1 -0
- package/dist/keryx-http/src/receive-only-socket.d.ts +27 -0
- package/dist/keryx-http/src/receive-only-socket.js +40 -0
- package/dist/keryx-http/src/receive-only-socket.js.map +1 -0
- package/dist/keryx-http/src/update-attributions.cjs +111 -0
- package/dist/keryx-http/src/update-attributions.cjs.map +1 -0
- package/dist/keryx-http/src/update-attributions.d.ts +75 -0
- package/dist/keryx-http/src/update-attributions.js +111 -0
- package/dist/keryx-http/src/update-attributions.js.map +1 -0
- package/dist/lib/owner-document.cjs +6 -6
- package/dist/lib/owner-document.cjs.map +1 -1
- package/dist/lib/use-athena-rest-query.cjs +4 -4
- package/dist/lib/use-athena-rest-query.cjs.map +1 -1
- package/dist/lib/use-document-active.cjs +4 -4
- package/dist/lib/use-document-active.cjs.map +1 -1
- package/dist/lib/use-prefers-reduced-motion.cjs +2 -2
- package/dist/lib/use-prefers-reduced-motion.cjs.map +1 -1
- package/dist/offline/offline-history.cjs +7 -7
- package/dist/offline/offline-history.cjs.map +1 -1
- package/dist/provider/AthenaContext.cjs +3 -3
- package/dist/provider/AthenaContext.cjs.map +1 -1
- package/dist/provider/AthenaProvider.cjs +116 -79
- package/dist/provider/AthenaProvider.cjs.map +1 -1
- package/dist/provider/AthenaProvider.js +40 -3
- package/dist/provider/AthenaProvider.js.map +1 -1
- package/dist/provider/PostHogProvider.cjs +2 -2
- package/dist/provider/PostHogProvider.cjs.map +1 -1
- package/dist/provider/agent-selection-context.cjs +2 -2
- package/dist/provider/agent-selection-context.cjs.map +1 -1
- package/dist/provider/chat-mode-context.cjs +2 -2
- package/dist/provider/chat-mode-context.cjs.map +1 -1
- package/dist/provider/session-persistence-context.cjs +10 -0
- package/dist/provider/session-persistence-context.cjs.map +1 -0
- package/dist/provider/session-persistence-context.d.ts +15 -0
- package/dist/provider/session-persistence-context.js +10 -0
- package/dist/provider/session-persistence-context.js.map +1 -0
- package/dist/provider/statewire-history-context.cjs +4 -4
- package/dist/provider/statewire-history-context.cjs.map +1 -1
- package/dist/provider/statewire-lifecycle-context.cjs +3 -3
- package/dist/provider/statewire-lifecycle-context.cjs.map +1 -1
- package/dist/provider/statewire-window-context.cjs +3 -3
- package/dist/provider/statewire-window-context.cjs.map +1 -1
- package/dist/provider/theme-style-context.cjs +3 -3
- package/dist/provider/theme-style-context.cjs.map +1 -1
- package/dist/react/package.json.cjs +1 -1
- package/dist/react/package.json.js +1 -1
- package/dist/references/src/tool-option-schemas.d.ts +0 -34
- package/dist/runtime/StatewireThreadConfigLaneSync.cjs +10 -10
- package/dist/runtime/StatewireThreadConfigLaneSync.cjs.map +1 -1
- package/dist/runtime/auth-refusal-restart.cjs +7 -7
- package/dist/runtime/auth-refusal-restart.cjs.map +1 -1
- package/dist/runtime/auth.cjs +13 -13
- package/dist/runtime/auth.cjs.map +1 -1
- package/dist/runtime/statewire-lifecycle.cjs +1 -0
- package/dist/runtime/statewire-lifecycle.cjs.map +1 -1
- package/dist/runtime/statewire-lifecycle.d.ts +3 -1
- package/dist/runtime/statewire-lifecycle.js +2 -1
- package/dist/runtime/statewire-lifecycle.js.map +1 -1
- package/dist/runtime/statewire-server-lane-context.cjs +2 -2
- package/dist/runtime/statewire-server-lane-context.cjs.map +1 -1
- package/dist/runtime/statewire-session-lane.cjs +4 -4
- package/dist/runtime/statewire-session-lane.cjs.map +1 -1
- package/dist/runtime/useAthenaStatewireRuntime.cjs +10 -8
- package/dist/runtime/useAthenaStatewireRuntime.cjs.map +1 -1
- package/dist/runtime/useAthenaStatewireRuntime.d.ts +2 -0
- package/dist/runtime/useAthenaStatewireRuntime.js +2 -0
- package/dist/runtime/useAthenaStatewireRuntime.js.map +1 -1
- package/dist/styles.css +1 -1
- package/dist/threads/Inbox.cjs +8 -8
- package/dist/threads/Inbox.cjs.map +1 -1
- package/dist/threads/SessionList.cjs +9 -9
- package/dist/threads/SessionList.cjs.map +1 -1
- package/dist/threads/SessionsPage.cjs +11 -11
- package/dist/threads/SessionsPage.cjs.map +1 -1
- package/dist/threads/index-triggered-refresh.cjs +10 -10
- package/dist/threads/index-triggered-refresh.cjs.map +1 -1
- package/dist/threads/mark-viewed-thread-read.cjs +12 -12
- package/dist/threads/mark-viewed-thread-read.cjs.map +1 -1
- package/dist/threads/offline-session-list.cjs +3 -3
- package/dist/threads/offline-session-list.cjs.map +1 -1
- package/dist/threads/session-list-tab-share.cjs +5 -5
- package/dist/threads/session-list-tab-share.cjs.map +1 -1
- package/dist/threads/statewire-thread-list.cjs +55 -51
- package/dist/threads/statewire-thread-list.cjs.map +1 -1
- package/dist/threads/statewire-thread-list.js +6 -2
- package/dist/threads/statewire-thread-list.js.map +1 -1
- package/dist/threads/thread-id-context.cjs +5 -5
- package/dist/threads/thread-id-context.cjs.map +1 -1
- package/dist/threads/use-athena-session-attention.cjs +2 -2
- package/dist/threads/use-athena-session-attention.cjs.map +1 -1
- package/dist/threads/use-athena-sessions.cjs +10 -10
- package/dist/threads/use-athena-sessions.cjs.map +1 -1
- package/dist/threads/use-athena-thread-model.cjs +3 -3
- package/dist/threads/use-athena-thread-model.cjs.map +1 -1
- package/dist/threads/use-rest-conversation-history.cjs +3 -3
- package/dist/threads/use-rest-conversation-history.cjs.map +1 -1
- package/dist/threads/use-statewire-conversation-history.cjs +8 -8
- package/dist/threads/use-statewire-conversation-history.cjs.map +1 -1
- package/dist/threads/use-thread-archive.cjs +9 -9
- package/dist/threads/use-thread-archive.cjs.map +1 -1
- package/dist/threads/use-thread-favorite.cjs +2 -2
- package/dist/threads/use-thread-favorite.cjs.map +1 -1
- package/dist/threads/use-thread-field-override.cjs +20 -20
- package/dist/threads/use-thread-field-override.cjs.map +1 -1
- package/dist/threads/use-thread-read-state.cjs +4 -4
- package/dist/threads/use-thread-read-state.cjs.map +1 -1
- package/dist/threads/use-thread-rename.cjs +2 -2
- package/dist/threads/use-thread-rename.cjs.map +1 -1
- package/dist/threads/useAthenaThreadManager.cjs +2 -2
- package/dist/threads/useAthenaThreadManager.cjs.map +1 -1
- package/dist/tools/NestedPtcMessages.cjs +6 -6
- package/dist/tools/NestedPtcMessages.cjs.map +1 -1
- package/dist/tools/append-document-tool-ui.cjs +7 -7
- package/dist/tools/append-document-tool-ui.cjs.map +1 -1
- package/dist/tools/file-tool-uis.cjs +2 -2
- package/dist/tools/file-tool-uis.cjs.map +1 -1
- package/dist/tools/misc-tool-uis.cjs +2 -2
- package/dist/tools/misc-tool-uis.cjs.map +1 -1
- package/dist/tools/primitives.cjs +6 -6
- package/dist/tools/primitives.cjs.map +1 -1
- package/dist/tools/read-asset-tool-ui.cjs +6 -6
- package/dist/tools/read-asset-tool-ui.cjs.map +1 -1
- package/dist/tools/subagent-task-tool-ui.cjs +21 -21
- package/dist/tools/subagent-task-tool-ui.cjs.map +1 -1
- package/dist/tools/test-recording-tool-uis.cjs +16 -16
- package/dist/tools/test-recording-tool-uis.cjs.map +1 -1
- package/dist/tools/todo-plan-store.cjs +4 -4
- package/dist/tools/todo-plan-store.cjs.map +1 -1
- package/dist/tools/tool-appearance.cjs +3 -3
- package/dist/tools/tool-appearance.cjs.map +1 -1
- package/dist/tools/tool-fallback.cjs +14 -14
- package/dist/tools/tool-fallback.cjs.map +1 -1
- package/dist/tools/tool-summary.cjs +0 -2
- package/dist/tools/tool-summary.cjs.map +1 -1
- package/dist/tools/tool-summary.js +0 -2
- package/dist/tools/tool-summary.js.map +1 -1
- package/dist/tools/tool-uis.cjs +74 -74
- package/dist/tools/tool-uis.cjs.map +1 -1
- package/dist/tools/use-elapsed-seconds.cjs +3 -3
- package/dist/tools/use-elapsed-seconds.cjs.map +1 -1
- package/dist/tools/write-todos-tool-ui.cjs +9 -9
- package/dist/tools/write-todos-tool-ui.cjs.map +1 -1
- package/dist/ui/image-viewer.cjs +382 -0
- package/dist/ui/image-viewer.cjs.map +1 -0
- package/dist/ui/image-viewer.d.ts +50 -0
- package/dist/ui/image-viewer.js +382 -0
- package/dist/ui/image-viewer.js.map +1 -0
- package/dist/voice/chat.cjs +6 -0
- package/dist/voice/chat.cjs.map +1 -1
- package/dist/voice/chat.d.ts +1 -1
- package/dist/voice/chat.js +8 -2
- package/dist/voice/livekit-join.cjs +52 -101
- package/dist/voice/livekit-join.cjs.map +1 -1
- package/dist/voice/livekit-join.d.ts +1 -6
- package/dist/voice/livekit-join.js +52 -101
- package/dist/voice/livekit-join.js.map +1 -1
- package/dist/voice/livekit.cjs.map +1 -1
- package/dist/voice/livekit.d.ts +11 -1
- package/dist/voice/livekit.js.map +1 -1
- package/dist/voice/use-athena-voice-session.cjs +34 -34
- package/dist/voice/use-athena-voice-session.cjs.map +1 -1
- package/dist/workbench/ComputerLiveDesktop.cjs +13 -13
- package/dist/workbench/ComputerLiveDesktop.cjs.map +1 -1
- package/dist/workbench/SessionWorkbench.cjs +22 -22
- package/dist/workbench/SessionWorkbench.cjs.map +1 -1
- package/dist/workbench/session-workbench-context.cjs +3 -3
- package/dist/workbench/session-workbench-context.cjs.map +1 -1
- package/dist/workbench/session-workbench-panes.cjs +8 -8
- package/dist/workbench/session-workbench-panes.cjs.map +1 -1
- package/dist/workbench/workbench-layout-context.cjs +3 -3
- package/dist/workbench/workbench-layout-context.cjs.map +1 -1
- package/package.json +2 -1
|
@@ -2,7 +2,8 @@
|
|
|
2
2
|
Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
|
|
3
3
|
const jsxRuntime = require("react/jsx-runtime");
|
|
4
4
|
const lucideReact = require("lucide-react");
|
|
5
|
-
const
|
|
5
|
+
const require$$0 = require("react");
|
|
6
|
+
const citationAnchors = require("../../chat-ui/rich-text/citation-anchors.cjs");
|
|
6
7
|
const stepText = require("../../tools/step-text.cjs");
|
|
7
8
|
const collapsible = require("../../ui/collapsible.cjs");
|
|
8
9
|
const timelineStep = require("./timeline-step.cjs");
|
|
@@ -21,6 +22,28 @@ function StepIcon({ state }) {
|
|
|
21
22
|
}
|
|
22
23
|
);
|
|
23
24
|
}
|
|
25
|
+
function SourceFavicon({ url }) {
|
|
26
|
+
const [failed, setFailed] = require$$0.useState(false);
|
|
27
|
+
const src = citationAnchors.sourceFaviconUrl(url);
|
|
28
|
+
if (!src || failed) return null;
|
|
29
|
+
return /* @__PURE__ */ jsxRuntime.jsx(
|
|
30
|
+
"img",
|
|
31
|
+
{
|
|
32
|
+
src,
|
|
33
|
+
alt: "",
|
|
34
|
+
width: 14,
|
|
35
|
+
height: 14,
|
|
36
|
+
className: "size-3.5 shrink-0 rounded-[3px] ring-2 ring-background [&:not(:first-child)]:-ml-1",
|
|
37
|
+
loading: "lazy",
|
|
38
|
+
referrerPolicy: "no-referrer",
|
|
39
|
+
draggable: false,
|
|
40
|
+
onError: () => setFailed(true)
|
|
41
|
+
}
|
|
42
|
+
);
|
|
43
|
+
}
|
|
44
|
+
function StepSourceFavicons({ urls }) {
|
|
45
|
+
return /* @__PURE__ */ jsxRuntime.jsx("span", { "data-slot": "tool-timeline-sources", className: "flex shrink-0 items-center", children: urls.map((url) => /* @__PURE__ */ jsxRuntime.jsx(SourceFavicon, { url }, url)) });
|
|
46
|
+
}
|
|
24
47
|
function ToolTimeline({
|
|
25
48
|
steps,
|
|
26
49
|
open,
|
|
@@ -32,13 +55,27 @@ function ToolTimeline({
|
|
|
32
55
|
keepMounted,
|
|
33
56
|
actions,
|
|
34
57
|
meta,
|
|
58
|
+
renderStepIcon,
|
|
59
|
+
renderStepRow,
|
|
60
|
+
showSourceFavicons = false,
|
|
35
61
|
children
|
|
36
62
|
}) {
|
|
37
|
-
const panelId =
|
|
38
|
-
const [showAll, setShowAll] =
|
|
63
|
+
const panelId = require$$0.useId();
|
|
64
|
+
const [showAll, setShowAll] = require$$0.useState(false);
|
|
39
65
|
const recentSteps = timelineStep.visibleTimelineSteps({ steps, limit: maxVisibleSteps });
|
|
40
|
-
const shown = showAll ? steps : recentSteps;
|
|
41
66
|
const hiddenCount = steps.length - recentSteps.length;
|
|
67
|
+
const recent = new Set(recentSteps);
|
|
68
|
+
const hostRows = /* @__PURE__ */ new Map();
|
|
69
|
+
if (renderStepRow) {
|
|
70
|
+
for (const step of steps) {
|
|
71
|
+
const row = renderStepRow(step);
|
|
72
|
+
if (row) hostRows.set(step, row);
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
const hostRowId = (position) => `${panelId}-step-${position}`;
|
|
76
|
+
const foldedHostRowIds = steps.flatMap(
|
|
77
|
+
(step, position) => hostRows.has(step) && !recent.has(step) && (showAll || keepMounted) ? [hostRowId(position)] : []
|
|
78
|
+
);
|
|
42
79
|
return /* @__PURE__ */ jsxRuntime.jsxs(collapsible.Collapsible, { "data-slot": "tool-timeline", open, onOpenChange, className: "w-full min-w-0", children: [
|
|
43
80
|
/* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex min-w-0 items-center gap-2", children: [
|
|
44
81
|
/* @__PURE__ */ jsxRuntime.jsxs(
|
|
@@ -94,43 +131,66 @@ function ToolTimeline({
|
|
|
94
131
|
{
|
|
95
132
|
type: "button",
|
|
96
133
|
onClick: () => setShowAll((previous) => !previous),
|
|
134
|
+
...foldedHostRowIds.length > 0 ? { "aria-controls": foldedHostRowIds.join(" "), "aria-expanded": showAll } : {},
|
|
97
135
|
className: "rounded text-xs text-muted-foreground hover:text-foreground focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring",
|
|
98
136
|
children: showAll ? "Show recent steps" : `Show ${hiddenCount} earlier ${hiddenCount === 1 ? "step" : "steps"}`
|
|
99
137
|
}
|
|
100
138
|
) }) : null,
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
"
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
}
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
139
|
+
steps.map((step, position) => {
|
|
140
|
+
const folded = !showAll && !recent.has(step);
|
|
141
|
+
const hostRow = hostRows.get(step);
|
|
142
|
+
if (hostRow) {
|
|
143
|
+
if (folded && !keepMounted) return null;
|
|
144
|
+
return /* @__PURE__ */ jsxRuntime.jsx(
|
|
145
|
+
"li",
|
|
146
|
+
{
|
|
147
|
+
id: hostRowId(position),
|
|
148
|
+
"data-step-id": step.id,
|
|
149
|
+
"data-step-state": step.state,
|
|
150
|
+
hidden: folded,
|
|
151
|
+
className: "min-w-0",
|
|
152
|
+
children: hostRow
|
|
153
|
+
},
|
|
154
|
+
step.id
|
|
155
|
+
);
|
|
156
|
+
}
|
|
157
|
+
if (folded) return null;
|
|
158
|
+
return /* @__PURE__ */ jsxRuntime.jsxs(
|
|
159
|
+
"li",
|
|
160
|
+
{
|
|
161
|
+
"data-step-id": step.id,
|
|
162
|
+
"data-step-state": step.state,
|
|
163
|
+
className: "flex min-w-0 items-center gap-2 text-[13px] text-muted-foreground",
|
|
164
|
+
children: [
|
|
165
|
+
/* @__PURE__ */ jsxRuntime.jsx(StepIcon, { state: step.state }),
|
|
166
|
+
renderStepIcon == null ? void 0 : renderStepIcon(step),
|
|
167
|
+
/* @__PURE__ */ jsxRuntime.jsx(
|
|
168
|
+
"span",
|
|
169
|
+
{
|
|
170
|
+
title: step.detail,
|
|
171
|
+
className: cnfast.cn(
|
|
172
|
+
"min-w-0 break-words leading-5",
|
|
173
|
+
step.state === "error" && "text-destructive",
|
|
174
|
+
step.state === "running" && "text-foreground"
|
|
175
|
+
),
|
|
176
|
+
children: /* @__PURE__ */ jsxRuntime.jsx(stepText.StepText, { text: step.verb, code: step.code })
|
|
177
|
+
}
|
|
178
|
+
),
|
|
179
|
+
showSourceFavicons && step.sourceUrls ? /* @__PURE__ */ jsxRuntime.jsx(StepSourceFavicons, { urls: step.sourceUrls }) : null,
|
|
180
|
+
step.chip ? /* @__PURE__ */ jsxRuntime.jsx(
|
|
181
|
+
"span",
|
|
182
|
+
{
|
|
183
|
+
title: step.chip,
|
|
184
|
+
className: "max-w-[45%] truncate rounded-md bg-foreground/[0.06] px-1.5 py-0.5 font-mono text-[11px] text-foreground/70",
|
|
185
|
+
children: step.chip
|
|
186
|
+
}
|
|
187
|
+
) : null,
|
|
188
|
+
/* @__PURE__ */ jsxRuntime.jsx("span", { className: "sr-only", children: step.state })
|
|
189
|
+
]
|
|
190
|
+
},
|
|
191
|
+
step.id
|
|
192
|
+
);
|
|
193
|
+
})
|
|
134
194
|
] }),
|
|
135
195
|
children
|
|
136
196
|
]
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ToolTimeline.cjs","sources":["../../../src/chat/super-grouping/ToolTimeline.tsx"],"sourcesContent":["'use client';\n\n/*!\n * Adapted from assistant-ui's ToolTimeline element:\n * https://github.com/assistant-ui/assistant-ui/blob/main/packages/ui/src/components/react/assistant-ui/elements/tool-timeline.tsx\n * MIT License — Copyright (c) 2025 AgentbaseAI Inc.\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to deal\n * in the Software without restriction, including without limitation the rights\n * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n * copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n * The above copyright notice and this permission notice shall be included in all\n * copies or substantial portions of the Software.\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n * SOFTWARE.\n */\nimport { AlertCircle, Check, ChevronRight, Circle, LoaderCircle, Pause, X } from 'lucide-react';\nimport { type ReactNode, useId, useState } from 'react';\nimport { cn } from '../../lib/utils';\nimport { StepText } from '../../tools/step-text';\nimport { Collapsible, CollapsibleContent, CollapsibleTrigger } from '../../ui/collapsible';\nimport type { ActivityPhase } from './activity-timeline';\nimport { type TimelineStep, visibleTimelineSteps } from './timeline-step';\n\nfunction StepIcon({ state }: { state: TimelineStep['state'] }) {\n const Icon =\n state === 'running'\n ? LoaderCircle\n : state === 'complete'\n ? Check\n : state === 'error'\n ? AlertCircle\n : state === 'rejected'\n ? X\n : state === 'paused'\n ? Pause\n : Circle;\n return (\n <Icon\n aria-hidden=\"true\"\n className={cn(\n 'size-3.5 shrink-0',\n state === 'running' && 'motion-safe:animate-spin',\n state === 'error'\n ? 'text-destructive'\n : state === 'waiting' || state === 'paused'\n ? 'text-amber-600 dark:text-amber-400'\n : 'text-muted-foreground',\n )}\n />\n );\n}\n\n/**\n * The upstream disclosure/verb/chip layout, with real per-call states and live\n * tool UIs. `meta` (a host's elapsed counter) sits on the header row itself,\n * right of the status and before `actions`, so a live card carries one status\n * line rather than a second row repeating what the header already says.\n */\nexport function ToolTimeline({\n steps,\n open,\n onOpenChange,\n label,\n labelTitle,\n phase,\n maxVisibleSteps,\n keepMounted,\n actions,\n meta,\n children,\n}: {\n steps: readonly TimelineStep[];\n open: boolean;\n onOpenChange: (open: boolean) => void;\n label: ReactNode;\n /** Tooltip for the header line (the full form of a clipped label). */\n labelTitle?: string;\n phase: ActivityPhase;\n maxVisibleSteps: number;\n keepMounted: boolean;\n actions?: ReactNode;\n meta?: ReactNode;\n children?: ReactNode;\n}) {\n const panelId = useId();\n const [showAll, setShowAll] = useState(false);\n const recentSteps = visibleTimelineSteps({ steps, limit: maxVisibleSteps });\n const shown = showAll ? steps : recentSteps;\n const hiddenCount = steps.length - recentSteps.length;\n return (\n <Collapsible data-slot=\"tool-timeline\" open={open} onOpenChange={onOpenChange} className=\"w-full min-w-0\">\n <div className=\"flex min-w-0 items-center gap-2\">\n <CollapsibleTrigger\n aria-controls={panelId}\n className=\"group/trigger flex min-w-0 flex-1 items-center gap-1.5 rounded-md py-1 text-left text-[13px] text-muted-foreground transition-colors hover:text-foreground focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring\"\n >\n <ChevronRight\n aria-hidden=\"true\"\n className=\"size-3.5 shrink-0 opacity-60 transition-transform duration-200 group-data-[state=open]/trigger:rotate-90 motion-reduce:transition-none\"\n />\n {phase === 'error' || phase === 'waiting' ? <StepIcon state={phase} /> : null}\n <span\n title={labelTitle}\n className={cn(\n 'min-w-0 break-words leading-5',\n phase === 'running' && 'motion-safe:animate-pulse',\n phase === 'error' && 'text-destructive',\n )}\n >\n {label}\n </span>\n </CollapsibleTrigger>\n {meta ? (\n <div\n data-slot=\"tool-timeline-meta\"\n className=\"flex shrink-0 items-center text-xs text-muted-foreground tabular-nums\"\n >\n {meta}\n </div>\n ) : null}\n {actions ? <div className=\"flex shrink-0 items-center gap-1\">{actions}</div> : null}\n </div>\n <CollapsibleContent\n id={panelId}\n forceMount={keepMounted ? true : undefined}\n hidden={!open}\n className=\"min-w-0\"\n >\n <ol aria-label=\"Work status updates\" className=\"flex list-none flex-col gap-2.5 py-2.5 pl-5\">\n {hiddenCount > 0 ? (\n <li>\n <button\n type=\"button\"\n onClick={() => setShowAll((previous) => !previous)}\n className=\"rounded text-xs text-muted-foreground hover:text-foreground focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring\"\n >\n {showAll\n ? 'Show recent steps'\n : `Show ${hiddenCount} earlier ${hiddenCount === 1 ? 'step' : 'steps'}`}\n </button>\n </li>\n ) : null}\n {shown.map((step) => (\n <li\n key={step.id}\n data-step-id={step.id}\n data-step-state={step.state}\n className=\"flex min-w-0 items-center gap-2 text-[13px] text-muted-foreground\"\n >\n <StepIcon state={step.state} />\n <span\n title={step.detail}\n className={cn(\n 'min-w-0 break-words leading-5',\n step.state === 'error' && 'text-destructive',\n step.state === 'running' && 'text-foreground',\n )}\n >\n <StepText text={step.verb} code={step.code} />\n </span>\n {step.chip ? (\n <span\n title={step.chip}\n className=\"max-w-[45%] truncate rounded-md bg-foreground/[0.06] px-1.5 py-0.5 font-mono text-[11px] text-foreground/70\"\n >\n {step.chip}\n </span>\n ) : null}\n <span className=\"sr-only\">{step.state}</span>\n </li>\n ))}\n </ol>\n {children}\n </CollapsibleContent>\n </Collapsible>\n );\n}\n"],"names":["LoaderCircle","Check","AlertCircle","X","Pause","Circle","jsx","cn","useId","useState","visibleTimelineSteps","Collapsible","jsxs","CollapsibleTrigger","ChevronRight","CollapsibleContent","StepText"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"ToolTimeline.cjs","sources":["../../../src/chat/super-grouping/ToolTimeline.tsx"],"sourcesContent":["'use client';\n\n/*!\n * Adapted from assistant-ui's ToolTimeline element:\n * https://github.com/assistant-ui/assistant-ui/blob/main/packages/ui/src/components/react/assistant-ui/elements/tool-timeline.tsx\n * MIT License — Copyright (c) 2025 AgentbaseAI Inc.\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to deal\n * in the Software without restriction, including without limitation the rights\n * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n * copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n * The above copyright notice and this permission notice shall be included in all\n * copies or substantial portions of the Software.\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n * SOFTWARE.\n */\nimport { AlertCircle, Check, ChevronRight, Circle, LoaderCircle, Pause, X } from 'lucide-react';\nimport { type ReactElement, type ReactNode, useId, useState } from 'react';\nimport { sourceFaviconUrl } from '../../chat-ui/rich-text/citation-anchors';\nimport { cn } from '../../lib/utils';\nimport { StepText } from '../../tools/step-text';\nimport { Collapsible, CollapsibleContent, CollapsibleTrigger } from '../../ui/collapsible';\nimport type { ActivityPhase } from './activity-timeline';\nimport { type TimelineStep, visibleTimelineSteps } from './timeline-step';\n\nfunction StepIcon({ state }: { state: TimelineStep['state'] }) {\n const Icon =\n state === 'running'\n ? LoaderCircle\n : state === 'complete'\n ? Check\n : state === 'error'\n ? AlertCircle\n : state === 'rejected'\n ? X\n : state === 'paused'\n ? Pause\n : Circle;\n return (\n <Icon\n aria-hidden=\"true\"\n className={cn(\n 'size-3.5 shrink-0',\n state === 'running' && 'motion-safe:animate-spin',\n state === 'error'\n ? 'text-destructive'\n : state === 'waiting' || state === 'paused'\n ? 'text-amber-600 dark:text-amber-400'\n : 'text-muted-foreground',\n )}\n />\n );\n}\n\nfunction SourceFavicon({ url }: { url: string }) {\n const [failed, setFailed] = useState(false);\n const src = sourceFaviconUrl(url);\n if (!src || failed) return null;\n return (\n <img\n src={src}\n alt=\"\"\n width={14}\n height={14}\n className=\"size-3.5 shrink-0 rounded-[3px] ring-2 ring-background [&:not(:first-child)]:-ml-1\"\n loading=\"lazy\"\n referrerPolicy=\"no-referrer\"\n draggable={false}\n onError={() => setFailed(true)}\n />\n );\n}\n\n/** The sites a step's result came from, as overlapping favicons; one that fails to load is left out. */\nfunction StepSourceFavicons({ urls }: { urls: readonly string[] }) {\n return (\n <span data-slot=\"tool-timeline-sources\" className=\"flex shrink-0 items-center\">\n {urls.map((url) => (\n <SourceFavicon key={url} url={url} />\n ))}\n </span>\n );\n}\n\n/**\n * The upstream disclosure/verb/chip layout, with real per-call states and live\n * tool UIs. `meta` (a host's elapsed counter) sits on the header row itself,\n * right of the status and before `actions`, so a live card carries one status\n * line rather than a second row repeating what the header already says.\n *\n * A step can be drawn by the host instead (`renderStepRow`): its node fills\n * the step's `<li>`. While `keepMounted` holds, such a row stays mounted even\n * when \"Show N earlier steps\" folds it away (hidden), so what it renders keeps\n * running, and the fold button names it in `aria-controls`, so a deep link's\n * reveal can open the fold to it.\n */\nexport function ToolTimeline({\n steps,\n open,\n onOpenChange,\n label,\n labelTitle,\n phase,\n maxVisibleSteps,\n keepMounted,\n actions,\n meta,\n renderStepIcon,\n renderStepRow,\n showSourceFavicons = false,\n children,\n}: {\n steps: readonly TimelineStep[];\n open: boolean;\n onOpenChange: (open: boolean) => void;\n label: ReactNode;\n /** Tooltip for the header line (the full form of a clipped label). */\n labelTitle?: string;\n phase: ActivityPhase;\n maxVisibleSteps: number;\n keepMounted: boolean;\n actions?: ReactNode;\n meta?: ReactNode;\n /** The host's icon for a step's tool (its toolkit icon), after the status icon. */\n renderStepIcon?: (step: TimelineStep) => ReactNode;\n /** The host's own row for a step, in place of its status line; `null` keeps the status line. */\n renderStepRow?: (step: TimelineStep) => ReactElement | null;\n /** Show the favicons of the sites a finished step's result lists. */\n showSourceFavicons?: boolean;\n children?: ReactNode;\n}) {\n const panelId = useId();\n const [showAll, setShowAll] = useState(false);\n const recentSteps = visibleTimelineSteps({ steps, limit: maxVisibleSteps });\n const hiddenCount = steps.length - recentSteps.length;\n const recent = new Set(recentSteps);\n const hostRows = new Map<TimelineStep, ReactElement>();\n if (renderStepRow) {\n for (const step of steps) {\n const row = renderStepRow(step);\n if (row) hostRows.set(step, row);\n }\n }\n const hostRowId = (position: number) => `${panelId}-step-${position}`;\n // The host rows the fold hides while they are mounted: the ones it shows\n // again, or keeps mounted hidden.\n const foldedHostRowIds = steps.flatMap((step, position) =>\n hostRows.has(step) && !recent.has(step) && (showAll || keepMounted) ? [hostRowId(position)] : [],\n );\n return (\n <Collapsible data-slot=\"tool-timeline\" open={open} onOpenChange={onOpenChange} className=\"w-full min-w-0\">\n <div className=\"flex min-w-0 items-center gap-2\">\n <CollapsibleTrigger\n aria-controls={panelId}\n className=\"group/trigger flex min-w-0 flex-1 items-center gap-1.5 rounded-md py-1 text-left text-[13px] text-muted-foreground transition-colors hover:text-foreground focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring\"\n >\n <ChevronRight\n aria-hidden=\"true\"\n className=\"size-3.5 shrink-0 opacity-60 transition-transform duration-200 group-data-[state=open]/trigger:rotate-90 motion-reduce:transition-none\"\n />\n {phase === 'error' || phase === 'waiting' ? <StepIcon state={phase} /> : null}\n <span\n title={labelTitle}\n className={cn(\n 'min-w-0 break-words leading-5',\n phase === 'running' && 'motion-safe:animate-pulse',\n phase === 'error' && 'text-destructive',\n )}\n >\n {label}\n </span>\n </CollapsibleTrigger>\n {meta ? (\n <div\n data-slot=\"tool-timeline-meta\"\n className=\"flex shrink-0 items-center text-xs text-muted-foreground tabular-nums\"\n >\n {meta}\n </div>\n ) : null}\n {actions ? <div className=\"flex shrink-0 items-center gap-1\">{actions}</div> : null}\n </div>\n <CollapsibleContent\n id={panelId}\n forceMount={keepMounted ? true : undefined}\n hidden={!open}\n className=\"min-w-0\"\n >\n <ol aria-label=\"Work status updates\" className=\"flex list-none flex-col gap-2.5 py-2.5 pl-5\">\n {hiddenCount > 0 ? (\n <li>\n <button\n type=\"button\"\n onClick={() => setShowAll((previous) => !previous)}\n {...(foldedHostRowIds.length > 0\n ? { 'aria-controls': foldedHostRowIds.join(' '), 'aria-expanded': showAll }\n : {})}\n className=\"rounded text-xs text-muted-foreground hover:text-foreground focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring\"\n >\n {showAll\n ? 'Show recent steps'\n : `Show ${hiddenCount} earlier ${hiddenCount === 1 ? 'step' : 'steps'}`}\n </button>\n </li>\n ) : null}\n {steps.map((step, position) => {\n const folded = !showAll && !recent.has(step);\n const hostRow = hostRows.get(step);\n if (hostRow) {\n if (folded && !keepMounted) return null;\n // No display utility: `hidden` alone hides a folded row.\n return (\n <li\n key={step.id}\n id={hostRowId(position)}\n data-step-id={step.id}\n data-step-state={step.state}\n hidden={folded}\n className=\"min-w-0\"\n >\n {hostRow}\n </li>\n );\n }\n if (folded) return null;\n return (\n <li\n key={step.id}\n data-step-id={step.id}\n data-step-state={step.state}\n className=\"flex min-w-0 items-center gap-2 text-[13px] text-muted-foreground\"\n >\n <StepIcon state={step.state} />\n {renderStepIcon?.(step)}\n <span\n title={step.detail}\n className={cn(\n 'min-w-0 break-words leading-5',\n step.state === 'error' && 'text-destructive',\n step.state === 'running' && 'text-foreground',\n )}\n >\n <StepText text={step.verb} code={step.code} />\n </span>\n {showSourceFavicons && step.sourceUrls ? <StepSourceFavicons urls={step.sourceUrls} /> : null}\n {step.chip ? (\n <span\n title={step.chip}\n className=\"max-w-[45%] truncate rounded-md bg-foreground/[0.06] px-1.5 py-0.5 font-mono text-[11px] text-foreground/70\"\n >\n {step.chip}\n </span>\n ) : null}\n <span className=\"sr-only\">{step.state}</span>\n </li>\n );\n })}\n </ol>\n {children}\n </CollapsibleContent>\n </Collapsible>\n );\n}\n"],"names":["LoaderCircle","Check","AlertCircle","X","Pause","Circle","jsx","cn","useState","sourceFaviconUrl","useId","visibleTimelineSteps","Collapsible","jsxs","CollapsibleTrigger","ChevronRight","CollapsibleContent","StepText"],"mappings":"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"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { type ReactNode } from 'react';
|
|
1
|
+
import { type ReactElement, type ReactNode } from 'react';
|
|
2
2
|
import type { ActivityPhase } from './activity-timeline';
|
|
3
3
|
import { type TimelineStep } from './timeline-step';
|
|
4
4
|
/**
|
|
@@ -6,8 +6,14 @@ import { type TimelineStep } from './timeline-step';
|
|
|
6
6
|
* tool UIs. `meta` (a host's elapsed counter) sits on the header row itself,
|
|
7
7
|
* right of the status and before `actions`, so a live card carries one status
|
|
8
8
|
* line rather than a second row repeating what the header already says.
|
|
9
|
+
*
|
|
10
|
+
* A step can be drawn by the host instead (`renderStepRow`): its node fills
|
|
11
|
+
* the step's `<li>`. While `keepMounted` holds, such a row stays mounted even
|
|
12
|
+
* when "Show N earlier steps" folds it away (hidden), so what it renders keeps
|
|
13
|
+
* running, and the fold button names it in `aria-controls`, so a deep link's
|
|
14
|
+
* reveal can open the fold to it.
|
|
9
15
|
*/
|
|
10
|
-
export declare function ToolTimeline({ steps, open, onOpenChange, label, labelTitle, phase, maxVisibleSteps, keepMounted, actions, meta, children, }: {
|
|
16
|
+
export declare function ToolTimeline({ steps, open, onOpenChange, label, labelTitle, phase, maxVisibleSteps, keepMounted, actions, meta, renderStepIcon, renderStepRow, showSourceFavicons, children, }: {
|
|
11
17
|
steps: readonly TimelineStep[];
|
|
12
18
|
open: boolean;
|
|
13
19
|
onOpenChange: (open: boolean) => void;
|
|
@@ -19,5 +25,11 @@ export declare function ToolTimeline({ steps, open, onOpenChange, label, labelTi
|
|
|
19
25
|
keepMounted: boolean;
|
|
20
26
|
actions?: ReactNode;
|
|
21
27
|
meta?: ReactNode;
|
|
28
|
+
/** The host's icon for a step's tool (its toolkit icon), after the status icon. */
|
|
29
|
+
renderStepIcon?: (step: TimelineStep) => ReactNode;
|
|
30
|
+
/** The host's own row for a step, in place of its status line; `null` keeps the status line. */
|
|
31
|
+
renderStepRow?: (step: TimelineStep) => ReactElement | null;
|
|
32
|
+
/** Show the favicons of the sites a finished step's result lists. */
|
|
33
|
+
showSourceFavicons?: boolean;
|
|
22
34
|
children?: ReactNode;
|
|
23
35
|
}): import("react").JSX.Element;
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import { jsxs, jsx } from "react/jsx-runtime";
|
|
2
2
|
import { ChevronRight, LoaderCircle, Check, AlertCircle, X, Pause, Circle } from "lucide-react";
|
|
3
3
|
import { useId, useState } from "react";
|
|
4
|
+
import { sourceFaviconUrl } from "../../chat-ui/rich-text/citation-anchors.js";
|
|
4
5
|
import { StepText } from "../../tools/step-text.js";
|
|
5
6
|
import { Collapsible, CollapsibleTrigger, CollapsibleContent } from "../../ui/collapsible.js";
|
|
6
7
|
import { visibleTimelineSteps } from "./timeline-step.js";
|
|
@@ -19,6 +20,28 @@ function StepIcon({ state }) {
|
|
|
19
20
|
}
|
|
20
21
|
);
|
|
21
22
|
}
|
|
23
|
+
function SourceFavicon({ url }) {
|
|
24
|
+
const [failed, setFailed] = useState(false);
|
|
25
|
+
const src = sourceFaviconUrl(url);
|
|
26
|
+
if (!src || failed) return null;
|
|
27
|
+
return /* @__PURE__ */ jsx(
|
|
28
|
+
"img",
|
|
29
|
+
{
|
|
30
|
+
src,
|
|
31
|
+
alt: "",
|
|
32
|
+
width: 14,
|
|
33
|
+
height: 14,
|
|
34
|
+
className: "size-3.5 shrink-0 rounded-[3px] ring-2 ring-background [&:not(:first-child)]:-ml-1",
|
|
35
|
+
loading: "lazy",
|
|
36
|
+
referrerPolicy: "no-referrer",
|
|
37
|
+
draggable: false,
|
|
38
|
+
onError: () => setFailed(true)
|
|
39
|
+
}
|
|
40
|
+
);
|
|
41
|
+
}
|
|
42
|
+
function StepSourceFavicons({ urls }) {
|
|
43
|
+
return /* @__PURE__ */ jsx("span", { "data-slot": "tool-timeline-sources", className: "flex shrink-0 items-center", children: urls.map((url) => /* @__PURE__ */ jsx(SourceFavicon, { url }, url)) });
|
|
44
|
+
}
|
|
22
45
|
function ToolTimeline({
|
|
23
46
|
steps,
|
|
24
47
|
open,
|
|
@@ -30,13 +53,27 @@ function ToolTimeline({
|
|
|
30
53
|
keepMounted,
|
|
31
54
|
actions,
|
|
32
55
|
meta,
|
|
56
|
+
renderStepIcon,
|
|
57
|
+
renderStepRow,
|
|
58
|
+
showSourceFavicons = false,
|
|
33
59
|
children
|
|
34
60
|
}) {
|
|
35
61
|
const panelId = useId();
|
|
36
62
|
const [showAll, setShowAll] = useState(false);
|
|
37
63
|
const recentSteps = visibleTimelineSteps({ steps, limit: maxVisibleSteps });
|
|
38
|
-
const shown = showAll ? steps : recentSteps;
|
|
39
64
|
const hiddenCount = steps.length - recentSteps.length;
|
|
65
|
+
const recent = new Set(recentSteps);
|
|
66
|
+
const hostRows = /* @__PURE__ */ new Map();
|
|
67
|
+
if (renderStepRow) {
|
|
68
|
+
for (const step of steps) {
|
|
69
|
+
const row = renderStepRow(step);
|
|
70
|
+
if (row) hostRows.set(step, row);
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
const hostRowId = (position) => `${panelId}-step-${position}`;
|
|
74
|
+
const foldedHostRowIds = steps.flatMap(
|
|
75
|
+
(step, position) => hostRows.has(step) && !recent.has(step) && (showAll || keepMounted) ? [hostRowId(position)] : []
|
|
76
|
+
);
|
|
40
77
|
return /* @__PURE__ */ jsxs(Collapsible, { "data-slot": "tool-timeline", open, onOpenChange, className: "w-full min-w-0", children: [
|
|
41
78
|
/* @__PURE__ */ jsxs("div", { className: "flex min-w-0 items-center gap-2", children: [
|
|
42
79
|
/* @__PURE__ */ jsxs(
|
|
@@ -92,43 +129,66 @@ function ToolTimeline({
|
|
|
92
129
|
{
|
|
93
130
|
type: "button",
|
|
94
131
|
onClick: () => setShowAll((previous) => !previous),
|
|
132
|
+
...foldedHostRowIds.length > 0 ? { "aria-controls": foldedHostRowIds.join(" "), "aria-expanded": showAll } : {},
|
|
95
133
|
className: "rounded text-xs text-muted-foreground hover:text-foreground focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring",
|
|
96
134
|
children: showAll ? "Show recent steps" : `Show ${hiddenCount} earlier ${hiddenCount === 1 ? "step" : "steps"}`
|
|
97
135
|
}
|
|
98
136
|
) }) : null,
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
"
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
}
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
137
|
+
steps.map((step, position) => {
|
|
138
|
+
const folded = !showAll && !recent.has(step);
|
|
139
|
+
const hostRow = hostRows.get(step);
|
|
140
|
+
if (hostRow) {
|
|
141
|
+
if (folded && !keepMounted) return null;
|
|
142
|
+
return /* @__PURE__ */ jsx(
|
|
143
|
+
"li",
|
|
144
|
+
{
|
|
145
|
+
id: hostRowId(position),
|
|
146
|
+
"data-step-id": step.id,
|
|
147
|
+
"data-step-state": step.state,
|
|
148
|
+
hidden: folded,
|
|
149
|
+
className: "min-w-0",
|
|
150
|
+
children: hostRow
|
|
151
|
+
},
|
|
152
|
+
step.id
|
|
153
|
+
);
|
|
154
|
+
}
|
|
155
|
+
if (folded) return null;
|
|
156
|
+
return /* @__PURE__ */ jsxs(
|
|
157
|
+
"li",
|
|
158
|
+
{
|
|
159
|
+
"data-step-id": step.id,
|
|
160
|
+
"data-step-state": step.state,
|
|
161
|
+
className: "flex min-w-0 items-center gap-2 text-[13px] text-muted-foreground",
|
|
162
|
+
children: [
|
|
163
|
+
/* @__PURE__ */ jsx(StepIcon, { state: step.state }),
|
|
164
|
+
renderStepIcon == null ? void 0 : renderStepIcon(step),
|
|
165
|
+
/* @__PURE__ */ jsx(
|
|
166
|
+
"span",
|
|
167
|
+
{
|
|
168
|
+
title: step.detail,
|
|
169
|
+
className: cn(
|
|
170
|
+
"min-w-0 break-words leading-5",
|
|
171
|
+
step.state === "error" && "text-destructive",
|
|
172
|
+
step.state === "running" && "text-foreground"
|
|
173
|
+
),
|
|
174
|
+
children: /* @__PURE__ */ jsx(StepText, { text: step.verb, code: step.code })
|
|
175
|
+
}
|
|
176
|
+
),
|
|
177
|
+
showSourceFavicons && step.sourceUrls ? /* @__PURE__ */ jsx(StepSourceFavicons, { urls: step.sourceUrls }) : null,
|
|
178
|
+
step.chip ? /* @__PURE__ */ jsx(
|
|
179
|
+
"span",
|
|
180
|
+
{
|
|
181
|
+
title: step.chip,
|
|
182
|
+
className: "max-w-[45%] truncate rounded-md bg-foreground/[0.06] px-1.5 py-0.5 font-mono text-[11px] text-foreground/70",
|
|
183
|
+
children: step.chip
|
|
184
|
+
}
|
|
185
|
+
) : null,
|
|
186
|
+
/* @__PURE__ */ jsx("span", { className: "sr-only", children: step.state })
|
|
187
|
+
]
|
|
188
|
+
},
|
|
189
|
+
step.id
|
|
190
|
+
);
|
|
191
|
+
})
|
|
132
192
|
] }),
|
|
133
193
|
children
|
|
134
194
|
]
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ToolTimeline.js","sources":["../../../src/chat/super-grouping/ToolTimeline.tsx"],"sourcesContent":["'use client';\n\n/*!\n * Adapted from assistant-ui's ToolTimeline element:\n * https://github.com/assistant-ui/assistant-ui/blob/main/packages/ui/src/components/react/assistant-ui/elements/tool-timeline.tsx\n * MIT License — Copyright (c) 2025 AgentbaseAI Inc.\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to deal\n * in the Software without restriction, including without limitation the rights\n * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n * copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n * The above copyright notice and this permission notice shall be included in all\n * copies or substantial portions of the Software.\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n * SOFTWARE.\n */\nimport { AlertCircle, Check, ChevronRight, Circle, LoaderCircle, Pause, X } from 'lucide-react';\nimport { type ReactNode, useId, useState } from 'react';\nimport { cn } from '../../lib/utils';\nimport { StepText } from '../../tools/step-text';\nimport { Collapsible, CollapsibleContent, CollapsibleTrigger } from '../../ui/collapsible';\nimport type { ActivityPhase } from './activity-timeline';\nimport { type TimelineStep, visibleTimelineSteps } from './timeline-step';\n\nfunction StepIcon({ state }: { state: TimelineStep['state'] }) {\n const Icon =\n state === 'running'\n ? LoaderCircle\n : state === 'complete'\n ? Check\n : state === 'error'\n ? AlertCircle\n : state === 'rejected'\n ? X\n : state === 'paused'\n ? Pause\n : Circle;\n return (\n <Icon\n aria-hidden=\"true\"\n className={cn(\n 'size-3.5 shrink-0',\n state === 'running' && 'motion-safe:animate-spin',\n state === 'error'\n ? 'text-destructive'\n : state === 'waiting' || state === 'paused'\n ? 'text-amber-600 dark:text-amber-400'\n : 'text-muted-foreground',\n )}\n />\n );\n}\n\n/**\n * The upstream disclosure/verb/chip layout, with real per-call states and live\n * tool UIs. `meta` (a host's elapsed counter) sits on the header row itself,\n * right of the status and before `actions`, so a live card carries one status\n * line rather than a second row repeating what the header already says.\n */\nexport function ToolTimeline({\n steps,\n open,\n onOpenChange,\n label,\n labelTitle,\n phase,\n maxVisibleSteps,\n keepMounted,\n actions,\n meta,\n children,\n}: {\n steps: readonly TimelineStep[];\n open: boolean;\n onOpenChange: (open: boolean) => void;\n label: ReactNode;\n /** Tooltip for the header line (the full form of a clipped label). */\n labelTitle?: string;\n phase: ActivityPhase;\n maxVisibleSteps: number;\n keepMounted: boolean;\n actions?: ReactNode;\n meta?: ReactNode;\n children?: ReactNode;\n}) {\n const panelId = useId();\n const [showAll, setShowAll] = useState(false);\n const recentSteps = visibleTimelineSteps({ steps, limit: maxVisibleSteps });\n const shown = showAll ? steps : recentSteps;\n const hiddenCount = steps.length - recentSteps.length;\n return (\n <Collapsible data-slot=\"tool-timeline\" open={open} onOpenChange={onOpenChange} className=\"w-full min-w-0\">\n <div className=\"flex min-w-0 items-center gap-2\">\n <CollapsibleTrigger\n aria-controls={panelId}\n className=\"group/trigger flex min-w-0 flex-1 items-center gap-1.5 rounded-md py-1 text-left text-[13px] text-muted-foreground transition-colors hover:text-foreground focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring\"\n >\n <ChevronRight\n aria-hidden=\"true\"\n className=\"size-3.5 shrink-0 opacity-60 transition-transform duration-200 group-data-[state=open]/trigger:rotate-90 motion-reduce:transition-none\"\n />\n {phase === 'error' || phase === 'waiting' ? <StepIcon state={phase} /> : null}\n <span\n title={labelTitle}\n className={cn(\n 'min-w-0 break-words leading-5',\n phase === 'running' && 'motion-safe:animate-pulse',\n phase === 'error' && 'text-destructive',\n )}\n >\n {label}\n </span>\n </CollapsibleTrigger>\n {meta ? (\n <div\n data-slot=\"tool-timeline-meta\"\n className=\"flex shrink-0 items-center text-xs text-muted-foreground tabular-nums\"\n >\n {meta}\n </div>\n ) : null}\n {actions ? <div className=\"flex shrink-0 items-center gap-1\">{actions}</div> : null}\n </div>\n <CollapsibleContent\n id={panelId}\n forceMount={keepMounted ? true : undefined}\n hidden={!open}\n className=\"min-w-0\"\n >\n <ol aria-label=\"Work status updates\" className=\"flex list-none flex-col gap-2.5 py-2.5 pl-5\">\n {hiddenCount > 0 ? (\n <li>\n <button\n type=\"button\"\n onClick={() => setShowAll((previous) => !previous)}\n className=\"rounded text-xs text-muted-foreground hover:text-foreground focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring\"\n >\n {showAll\n ? 'Show recent steps'\n : `Show ${hiddenCount} earlier ${hiddenCount === 1 ? 'step' : 'steps'}`}\n </button>\n </li>\n ) : null}\n {shown.map((step) => (\n <li\n key={step.id}\n data-step-id={step.id}\n data-step-state={step.state}\n className=\"flex min-w-0 items-center gap-2 text-[13px] text-muted-foreground\"\n >\n <StepIcon state={step.state} />\n <span\n title={step.detail}\n className={cn(\n 'min-w-0 break-words leading-5',\n step.state === 'error' && 'text-destructive',\n step.state === 'running' && 'text-foreground',\n )}\n >\n <StepText text={step.verb} code={step.code} />\n </span>\n {step.chip ? (\n <span\n title={step.chip}\n className=\"max-w-[45%] truncate rounded-md bg-foreground/[0.06] px-1.5 py-0.5 font-mono text-[11px] text-foreground/70\"\n >\n {step.chip}\n </span>\n ) : null}\n <span className=\"sr-only\">{step.state}</span>\n </li>\n ))}\n </ol>\n {children}\n </CollapsibleContent>\n </Collapsible>\n );\n}\n"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"ToolTimeline.js","sources":["../../../src/chat/super-grouping/ToolTimeline.tsx"],"sourcesContent":["'use client';\n\n/*!\n * Adapted from assistant-ui's ToolTimeline element:\n * https://github.com/assistant-ui/assistant-ui/blob/main/packages/ui/src/components/react/assistant-ui/elements/tool-timeline.tsx\n * MIT License — Copyright (c) 2025 AgentbaseAI Inc.\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to deal\n * in the Software without restriction, including without limitation the rights\n * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n * copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n * The above copyright notice and this permission notice shall be included in all\n * copies or substantial portions of the Software.\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n * SOFTWARE.\n */\nimport { AlertCircle, Check, ChevronRight, Circle, LoaderCircle, Pause, X } from 'lucide-react';\nimport { type ReactElement, type ReactNode, useId, useState } from 'react';\nimport { sourceFaviconUrl } from '../../chat-ui/rich-text/citation-anchors';\nimport { cn } from '../../lib/utils';\nimport { StepText } from '../../tools/step-text';\nimport { Collapsible, CollapsibleContent, CollapsibleTrigger } from '../../ui/collapsible';\nimport type { ActivityPhase } from './activity-timeline';\nimport { type TimelineStep, visibleTimelineSteps } from './timeline-step';\n\nfunction StepIcon({ state }: { state: TimelineStep['state'] }) {\n const Icon =\n state === 'running'\n ? LoaderCircle\n : state === 'complete'\n ? Check\n : state === 'error'\n ? AlertCircle\n : state === 'rejected'\n ? X\n : state === 'paused'\n ? Pause\n : Circle;\n return (\n <Icon\n aria-hidden=\"true\"\n className={cn(\n 'size-3.5 shrink-0',\n state === 'running' && 'motion-safe:animate-spin',\n state === 'error'\n ? 'text-destructive'\n : state === 'waiting' || state === 'paused'\n ? 'text-amber-600 dark:text-amber-400'\n : 'text-muted-foreground',\n )}\n />\n );\n}\n\nfunction SourceFavicon({ url }: { url: string }) {\n const [failed, setFailed] = useState(false);\n const src = sourceFaviconUrl(url);\n if (!src || failed) return null;\n return (\n <img\n src={src}\n alt=\"\"\n width={14}\n height={14}\n className=\"size-3.5 shrink-0 rounded-[3px] ring-2 ring-background [&:not(:first-child)]:-ml-1\"\n loading=\"lazy\"\n referrerPolicy=\"no-referrer\"\n draggable={false}\n onError={() => setFailed(true)}\n />\n );\n}\n\n/** The sites a step's result came from, as overlapping favicons; one that fails to load is left out. */\nfunction StepSourceFavicons({ urls }: { urls: readonly string[] }) {\n return (\n <span data-slot=\"tool-timeline-sources\" className=\"flex shrink-0 items-center\">\n {urls.map((url) => (\n <SourceFavicon key={url} url={url} />\n ))}\n </span>\n );\n}\n\n/**\n * The upstream disclosure/verb/chip layout, with real per-call states and live\n * tool UIs. `meta` (a host's elapsed counter) sits on the header row itself,\n * right of the status and before `actions`, so a live card carries one status\n * line rather than a second row repeating what the header already says.\n *\n * A step can be drawn by the host instead (`renderStepRow`): its node fills\n * the step's `<li>`. While `keepMounted` holds, such a row stays mounted even\n * when \"Show N earlier steps\" folds it away (hidden), so what it renders keeps\n * running, and the fold button names it in `aria-controls`, so a deep link's\n * reveal can open the fold to it.\n */\nexport function ToolTimeline({\n steps,\n open,\n onOpenChange,\n label,\n labelTitle,\n phase,\n maxVisibleSteps,\n keepMounted,\n actions,\n meta,\n renderStepIcon,\n renderStepRow,\n showSourceFavicons = false,\n children,\n}: {\n steps: readonly TimelineStep[];\n open: boolean;\n onOpenChange: (open: boolean) => void;\n label: ReactNode;\n /** Tooltip for the header line (the full form of a clipped label). */\n labelTitle?: string;\n phase: ActivityPhase;\n maxVisibleSteps: number;\n keepMounted: boolean;\n actions?: ReactNode;\n meta?: ReactNode;\n /** The host's icon for a step's tool (its toolkit icon), after the status icon. */\n renderStepIcon?: (step: TimelineStep) => ReactNode;\n /** The host's own row for a step, in place of its status line; `null` keeps the status line. */\n renderStepRow?: (step: TimelineStep) => ReactElement | null;\n /** Show the favicons of the sites a finished step's result lists. */\n showSourceFavicons?: boolean;\n children?: ReactNode;\n}) {\n const panelId = useId();\n const [showAll, setShowAll] = useState(false);\n const recentSteps = visibleTimelineSteps({ steps, limit: maxVisibleSteps });\n const hiddenCount = steps.length - recentSteps.length;\n const recent = new Set(recentSteps);\n const hostRows = new Map<TimelineStep, ReactElement>();\n if (renderStepRow) {\n for (const step of steps) {\n const row = renderStepRow(step);\n if (row) hostRows.set(step, row);\n }\n }\n const hostRowId = (position: number) => `${panelId}-step-${position}`;\n // The host rows the fold hides while they are mounted: the ones it shows\n // again, or keeps mounted hidden.\n const foldedHostRowIds = steps.flatMap((step, position) =>\n hostRows.has(step) && !recent.has(step) && (showAll || keepMounted) ? [hostRowId(position)] : [],\n );\n return (\n <Collapsible data-slot=\"tool-timeline\" open={open} onOpenChange={onOpenChange} className=\"w-full min-w-0\">\n <div className=\"flex min-w-0 items-center gap-2\">\n <CollapsibleTrigger\n aria-controls={panelId}\n className=\"group/trigger flex min-w-0 flex-1 items-center gap-1.5 rounded-md py-1 text-left text-[13px] text-muted-foreground transition-colors hover:text-foreground focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring\"\n >\n <ChevronRight\n aria-hidden=\"true\"\n className=\"size-3.5 shrink-0 opacity-60 transition-transform duration-200 group-data-[state=open]/trigger:rotate-90 motion-reduce:transition-none\"\n />\n {phase === 'error' || phase === 'waiting' ? <StepIcon state={phase} /> : null}\n <span\n title={labelTitle}\n className={cn(\n 'min-w-0 break-words leading-5',\n phase === 'running' && 'motion-safe:animate-pulse',\n phase === 'error' && 'text-destructive',\n )}\n >\n {label}\n </span>\n </CollapsibleTrigger>\n {meta ? (\n <div\n data-slot=\"tool-timeline-meta\"\n className=\"flex shrink-0 items-center text-xs text-muted-foreground tabular-nums\"\n >\n {meta}\n </div>\n ) : null}\n {actions ? <div className=\"flex shrink-0 items-center gap-1\">{actions}</div> : null}\n </div>\n <CollapsibleContent\n id={panelId}\n forceMount={keepMounted ? true : undefined}\n hidden={!open}\n className=\"min-w-0\"\n >\n <ol aria-label=\"Work status updates\" className=\"flex list-none flex-col gap-2.5 py-2.5 pl-5\">\n {hiddenCount > 0 ? (\n <li>\n <button\n type=\"button\"\n onClick={() => setShowAll((previous) => !previous)}\n {...(foldedHostRowIds.length > 0\n ? { 'aria-controls': foldedHostRowIds.join(' '), 'aria-expanded': showAll }\n : {})}\n className=\"rounded text-xs text-muted-foreground hover:text-foreground focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring\"\n >\n {showAll\n ? 'Show recent steps'\n : `Show ${hiddenCount} earlier ${hiddenCount === 1 ? 'step' : 'steps'}`}\n </button>\n </li>\n ) : null}\n {steps.map((step, position) => {\n const folded = !showAll && !recent.has(step);\n const hostRow = hostRows.get(step);\n if (hostRow) {\n if (folded && !keepMounted) return null;\n // No display utility: `hidden` alone hides a folded row.\n return (\n <li\n key={step.id}\n id={hostRowId(position)}\n data-step-id={step.id}\n data-step-state={step.state}\n hidden={folded}\n className=\"min-w-0\"\n >\n {hostRow}\n </li>\n );\n }\n if (folded) return null;\n return (\n <li\n key={step.id}\n data-step-id={step.id}\n data-step-state={step.state}\n className=\"flex min-w-0 items-center gap-2 text-[13px] text-muted-foreground\"\n >\n <StepIcon state={step.state} />\n {renderStepIcon?.(step)}\n <span\n title={step.detail}\n className={cn(\n 'min-w-0 break-words leading-5',\n step.state === 'error' && 'text-destructive',\n step.state === 'running' && 'text-foreground',\n )}\n >\n <StepText text={step.verb} code={step.code} />\n </span>\n {showSourceFavicons && step.sourceUrls ? <StepSourceFavicons urls={step.sourceUrls} /> : null}\n {step.chip ? (\n <span\n title={step.chip}\n className=\"max-w-[45%] truncate rounded-md bg-foreground/[0.06] px-1.5 py-0.5 font-mono text-[11px] text-foreground/70\"\n >\n {step.chip}\n </span>\n ) : null}\n <span className=\"sr-only\">{step.state}</span>\n </li>\n );\n })}\n </ol>\n {children}\n </CollapsibleContent>\n </Collapsible>\n );\n}\n"],"names":[],"mappings":"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"}
|
|
@@ -1,8 +1,10 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
|
|
3
3
|
const toolSummary = require("../../tools/tool-summary.cjs");
|
|
4
|
+
const toolNames = require("../../agent-runtime/src/tool-names.cjs");
|
|
4
5
|
const toolResult = require("../../agent-runtime/src/tool-result.cjs");
|
|
5
6
|
const runningToolPlaceholder = require("../../agent-runtime/src/running-tool-placeholder.cjs");
|
|
7
|
+
const subagents = require("../../agent-runtime/src/subagents.cjs");
|
|
6
8
|
const voicePresentation = require("../../agent-runtime/src/voice-presentation.cjs");
|
|
7
9
|
const NO_TOOLS = /* @__PURE__ */ new Set();
|
|
8
10
|
const NO_TOOL_CALLS = /* @__PURE__ */ new Set();
|
|
@@ -65,6 +67,8 @@ function buildActivityTimeline(content, messageStatus, options = {}) {
|
|
|
65
67
|
const part = content[index];
|
|
66
68
|
if (part.type === "tool-call") {
|
|
67
69
|
const result = finalResult(part);
|
|
70
|
+
const state = getActivityToolState(part, messageStatus, options);
|
|
71
|
+
const delegations = toolCallDelegations({ part, state });
|
|
68
72
|
timeline.push({
|
|
69
73
|
kind: "tool",
|
|
70
74
|
id: part.toolCallId,
|
|
@@ -72,7 +76,8 @@ function buildActivityTimeline(content, messageStatus, options = {}) {
|
|
|
72
76
|
args: part.args,
|
|
73
77
|
...result !== void 0 ? { result } : {},
|
|
74
78
|
toolName: part.toolName,
|
|
75
|
-
state
|
|
79
|
+
state,
|
|
80
|
+
...delegations !== null ? { delegations } : {}
|
|
76
81
|
});
|
|
77
82
|
continue;
|
|
78
83
|
}
|
|
@@ -90,9 +95,32 @@ function buildActivityTimeline(content, messageStatus, options = {}) {
|
|
|
90
95
|
}
|
|
91
96
|
return timeline;
|
|
92
97
|
}
|
|
98
|
+
function toolCallDelegations({
|
|
99
|
+
part,
|
|
100
|
+
state
|
|
101
|
+
}) {
|
|
102
|
+
var _a, _b;
|
|
103
|
+
if (part.toolName === toolNames.TASK_TOOL_NAME) {
|
|
104
|
+
const withdrawn = ((_a = part.approval) == null ? void 0 : _a.resolution) === "cancelled" || ((_b = part.approval) == null ? void 0 : _b.resolution) === "expired";
|
|
105
|
+
return state === "rejected" || withdrawn ? 0 : 1;
|
|
106
|
+
}
|
|
107
|
+
if (part.toolName === toolNames.EVAL_TOOL_NAME) {
|
|
108
|
+
const dispatches = subagents.countInEvalDispatches(part.artifact);
|
|
109
|
+
return dispatches > 0 ? dispatches : null;
|
|
110
|
+
}
|
|
111
|
+
return null;
|
|
112
|
+
}
|
|
93
113
|
function countActivityTools(timeline) {
|
|
94
114
|
return timeline.reduce((count, item) => item.kind === "tool" ? count + 1 : count, 0);
|
|
95
115
|
}
|
|
116
|
+
function countActivityDelegations(timeline) {
|
|
117
|
+
return timeline.reduce((count, item) => {
|
|
118
|
+
if (item.kind !== "tool") return count;
|
|
119
|
+
if (item.delegations !== void 0) return count + item.delegations;
|
|
120
|
+
const ranTask = item.toolName === toolNames.TASK_TOOL_NAME && item.state !== "rejected" && item.state !== "cancelled";
|
|
121
|
+
return ranTask ? count + 1 : count;
|
|
122
|
+
}, 0);
|
|
123
|
+
}
|
|
96
124
|
function resolveActivityPhase(status, timeline, { waitingForInput = false } = {}) {
|
|
97
125
|
if (waitingForInput || (status == null ? void 0 : status.type) === "requires-action" || timeline.some((item) => item.kind === "tool" && item.state === "waiting")) {
|
|
98
126
|
return "waiting";
|
|
@@ -125,21 +153,27 @@ function summarizeActivityTool(item, resolveToolDisplayName, assetTitles) {
|
|
|
125
153
|
});
|
|
126
154
|
}
|
|
127
155
|
function getActivitySummary(timeline) {
|
|
128
|
-
const toolCount = countActivityTools(timeline);
|
|
129
156
|
const tools = timeline.filter((item) => item.kind === "tool");
|
|
130
|
-
const
|
|
131
|
-
const
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
if (timeline.some((item) => item.kind === "tool" && item.state === "paused")) {
|
|
138
|
-
return "Paused during tool use";
|
|
157
|
+
const outcome = activityOutcome(tools);
|
|
158
|
+
const delegations = countActivityDelegations(timeline);
|
|
159
|
+
if (delegations > 0) {
|
|
160
|
+
const lead = `Delegated to ${delegations} ${delegations === 1 ? "agent" : "agents"}`;
|
|
161
|
+
const otherTools = tools.filter((item) => item.toolName !== toolNames.TASK_TOOL_NAME).length;
|
|
162
|
+
const rest = outcome ? `${outcome.charAt(0).toLowerCase()}${outcome.slice(1)}` : otherTools > 0 ? `used ${otherTools} ${otherTools === 1 ? "tool" : "tools"}` : null;
|
|
163
|
+
return rest ? `${lead} · ${rest}` : lead;
|
|
139
164
|
}
|
|
140
|
-
if (
|
|
165
|
+
if (outcome) return outcome;
|
|
166
|
+
if (tools.length > 0) return `Used ${tools.length} ${tools.length === 1 ? "tool" : "tools"}`;
|
|
141
167
|
return "Reasoning complete";
|
|
142
168
|
}
|
|
169
|
+
function activityOutcome(tools) {
|
|
170
|
+
const lastFailure = tools.findLastIndex((item) => item.state === "error");
|
|
171
|
+
const endedOnFailure = lastFailure >= 0 && !tools.slice(lastFailure + 1).some((item) => item.state === "complete");
|
|
172
|
+
if (endedOnFailure || tools.some((item) => item.state === "rejected")) return "Completed with issues";
|
|
173
|
+
if (tools.some((item) => item.state === "cancelled")) return "Action cancelled";
|
|
174
|
+
if (tools.some((item) => item.state === "paused")) return "Paused during tool use";
|
|
175
|
+
return null;
|
|
176
|
+
}
|
|
143
177
|
function isAnswerTextPart(part, index, lastToolIndex) {
|
|
144
178
|
return (part == null ? void 0 : part.type) === "text" && (index > lastToolIndex || voicePresentation.isSpokenTurnTextPart(part));
|
|
145
179
|
}
|
|
@@ -175,6 +209,7 @@ function excludePartsFromGroups(grouping, exclude) {
|
|
|
175
209
|
})).filter((group) => group.indices.length > 0);
|
|
176
210
|
}
|
|
177
211
|
exports.buildActivityTimeline = buildActivityTimeline;
|
|
212
|
+
exports.countActivityDelegations = countActivityDelegations;
|
|
178
213
|
exports.countActivityTools = countActivityTools;
|
|
179
214
|
exports.excludeFinalTextFromGroups = excludeFinalTextFromGroups;
|
|
180
215
|
exports.excludePartsFromGroups = excludePartsFromGroups;
|