@athenaintel/react 0.43.0 → 0.50.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 +258 -8
- 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/call-recap.cjs +319 -0
- package/dist/agent-runtime/src/call-recap.cjs.map +1 -0
- package/dist/agent-runtime/src/call-recap.d.ts +142 -0
- package/dist/agent-runtime/src/call-recap.js +319 -0
- package/dist/agent-runtime/src/call-recap.js.map +1 -0
- package/dist/agent-runtime/src/chat-outbox-store.cjs +1 -0
- package/dist/agent-runtime/src/chat-outbox-store.cjs.map +1 -1
- package/dist/agent-runtime/src/chat-outbox-store.d.ts +7 -0
- package/dist/agent-runtime/src/chat-outbox-store.js +1 -0
- package/dist/agent-runtime/src/chat-outbox-store.js.map +1 -1
- package/dist/agent-runtime/src/chat-outbox.cjs +46 -5
- package/dist/agent-runtime/src/chat-outbox.cjs.map +1 -1
- package/dist/agent-runtime/src/chat-outbox.d.ts +29 -0
- package/dist/agent-runtime/src/chat-outbox.js +46 -5
- package/dist/agent-runtime/src/chat-outbox.js.map +1 -1
- 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-index.d.ts +7 -0
- package/dist/agent-runtime/src/conversation-index.js.map +1 -1
- package/dist/agent-runtime/src/conversation-list.cjs +2 -1
- package/dist/agent-runtime/src/conversation-list.cjs.map +1 -1
- package/dist/agent-runtime/src/conversation-list.d.ts +19 -3
- package/dist/agent-runtime/src/conversation-list.js +2 -1
- package/dist/agent-runtime/src/conversation-list.js.map +1 -1
- 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 +16 -9
- package/dist/agent-runtime/src/interrupts.cjs +71 -19
- package/dist/agent-runtime/src/interrupts.cjs.map +1 -1
- package/dist/agent-runtime/src/interrupts.d.ts +40 -3
- package/dist/agent-runtime/src/interrupts.js +56 -4
- 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/model-context.cjs +3 -2
- package/dist/agent-runtime/src/model-context.cjs.map +1 -1
- package/dist/agent-runtime/src/model-context.d.ts +6 -1
- package/dist/agent-runtime/src/model-context.js +3 -2
- package/dist/agent-runtime/src/model-context.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 +41 -0
- package/dist/agent-runtime/src/send-recovery.cjs +37 -3
- package/dist/agent-runtime/src/send-recovery.cjs.map +1 -1
- package/dist/agent-runtime/src/send-recovery.d.ts +19 -0
- package/dist/agent-runtime/src/send-recovery.js +37 -3
- package/dist/agent-runtime/src/send-recovery.js.map +1 -1
- 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 +868 -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 -25
- 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 -25
- 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 +14 -13
- package/dist/agent-runtime/src/use-conversation-list.cjs.map +1 -1
- package/dist/agent-runtime/src/use-conversation-list.d.ts +6 -0
- package/dist/agent-runtime/src/use-conversation-list.js +3 -2
- package/dist/agent-runtime/src/use-conversation-list.js.map +1 -1
- package/dist/agent-runtime/src/use-deep-agent-chat-outbox.cjs +45 -20
- 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 +10 -3
- package/dist/agent-runtime/src/use-deep-agent-chat-outbox.js +27 -2
- 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 +40 -22
- package/dist/agent-runtime/src/use-deep-agent-runtime.cjs.map +1 -1
- package/dist/agent-runtime/src/use-deep-agent-runtime.d.ts +17 -0
- package/dist/agent-runtime/src/use-deep-agent-runtime.js +24 -6
- package/dist/agent-runtime/src/use-deep-agent-runtime.js.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 +588 -130
- package/dist/agent-runtime/src/use-deep-agent-voice.cjs.map +1 -1
- package/dist/agent-runtime/src/use-deep-agent-voice.d.ts +162 -10
- package/dist/agent-runtime/src/use-deep-agent-voice.js +529 -71
- 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 +34 -26
- package/dist/agent-runtime/src/voice-earcon.cjs +139 -0
- package/dist/agent-runtime/src/voice-earcon.cjs.map +1 -0
- package/dist/agent-runtime/src/voice-earcon.d.ts +38 -0
- package/dist/agent-runtime/src/voice-earcon.js +139 -0
- package/dist/agent-runtime/src/voice-earcon.js.map +1 -0
- 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 +63 -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-presentation.cjs +2 -0
- package/dist/agent-runtime/src/voice-presentation.cjs.map +1 -1
- package/dist/agent-runtime/src/voice-presentation.js +2 -0
- package/dist/agent-runtime/src/voice-presentation.js.map +1 -1
- 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 +18 -5
- 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 +23 -6
- 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 +166 -37
- package/dist/chat/StatewireApprovalCard.cjs.map +1 -1
- package/dist/chat/StatewireApprovalCard.d.ts +91 -2
- package/dist/chat/StatewireApprovalCard.js +156 -27
- 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 +81 -69
- package/dist/chat/StatewireQueuedMessages.cjs.map +1 -1
- package/dist/chat/StatewireQueuedMessages.d.ts +25 -13
- package/dist/chat/StatewireQueuedMessages.js +73 -61
- package/dist/chat/StatewireQueuedMessages.js.map +1 -1
- package/dist/chat/WaitingOnYouBanner.cjs +9 -5
- package/dist/chat/WaitingOnYouBanner.cjs.map +1 -1
- package/dist/chat/WaitingOnYouBanner.js +7 -3
- package/dist/chat/WaitingOnYouBanner.js.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 +96 -29
- package/dist/chat/chat-voice-controls.cjs.map +1 -1
- package/dist/chat/chat-voice-controls.d.ts +42 -3
- package/dist/chat/chat-voice-controls.js +92 -25
- 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 +52 -36
- package/dist/chat/super-grouping/SuperGroupingCard.cjs.map +1 -1
- package/dist/chat/super-grouping/SuperGroupingCard.d.ts +19 -4
- package/dist/chat/super-grouping/SuperGroupingCard.js +29 -13
- 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 +73 -40
- package/dist/chat/super-grouping/ToolTimeline.cjs.map +1 -1
- package/dist/chat/super-grouping/ToolTimeline.d.ts +10 -2
- package/dist/chat/super-grouping/ToolTimeline.js +69 -36
- 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 +5 -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/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 +21 -0
- package/dist/chat-ui/index.cjs.map +1 -1
- package/dist/chat-ui/index.d.ts +8 -1
- package/dist/chat-ui/index.js +21 -0
- package/dist/chat-ui/index.js.map +1 -1
- package/dist/chat-ui/mentions/mention-chip.cjs +4 -4
- package/dist/chat-ui/mentions/mention-chip.cjs.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 +3 -3
- package/dist/chat-ui/mentions/use-mention-asset.cjs.map +1 -1
- 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/from-the-call-card.cjs +124 -0
- package/dist/chat-ui/messages/from-the-call-card.cjs.map +1 -0
- package/dist/chat-ui/messages/from-the-call-card.d.ts +17 -0
- package/dist/chat-ui/messages/from-the-call-card.js +124 -0
- package/dist/chat-ui/messages/from-the-call-card.js.map +1 -0
- 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 +3 -2
- package/dist/chat-ui/rich-text/chat-link.cjs.map +1 -1
- package/dist/chat-ui/rich-text/chat-link.d.ts +4 -0
- package/dist/chat-ui/rich-text/chat-link.js +4 -3
- package/dist/chat-ui/rich-text/chat-link.js.map +1 -1
- package/dist/chat-ui/rich-text/chat-message-body.cjs +9 -8
- package/dist/chat-ui/rich-text/chat-message-body.cjs.map +1 -1
- package/dist/chat-ui/rich-text/chat-message-body.d.ts +12 -0
- package/dist/chat-ui/rich-text/chat-message-body.js +2 -1
- package/dist/chat-ui/rich-text/chat-message-body.js.map +1 -1
- package/dist/chat-ui/rich-text/chat-node-views.cjs +6 -6
- package/dist/chat-ui/rich-text/chat-node-views.cjs.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 +45 -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 +37 -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 +52 -3
- package/dist/collab/client.cjs.map +1 -1
- package/dist/collab/client.d.ts +27 -0
- package/dist/collab/client.js +52 -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/index.d.ts +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 +27 -8
- package/dist/composer/useReadComposerDraft.cjs.map +1 -1
- package/dist/composer/useReadComposerDraft.d.ts +23 -1
- package/dist/composer/useReadComposerDraft.js +27 -8
- package/dist/composer/useReadComposerDraft.js.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 +29 -2
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.ts +18 -4
- package/dist/index.js +30 -3
- 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/unconfirmed-update-attributions.cjs +190 -0
- package/dist/keryx-http/src/unconfirmed-update-attributions.cjs.map +1 -0
- package/dist/keryx-http/src/unconfirmed-update-attributions.d.ts +132 -0
- package/dist/keryx-http/src/unconfirmed-update-attributions.js +190 -0
- package/dist/keryx-http/src/unconfirmed-update-attributions.js.map +1 -0
- package/dist/keryx-http/src/update-attributions.cjs +141 -0
- package/dist/keryx-http/src/update-attributions.cjs.map +1 -0
- package/dist/keryx-http/src/update-attributions.d.ts +107 -0
- package/dist/keryx-http/src/update-attributions.js +141 -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 +120 -79
- package/dist/provider/AthenaProvider.cjs.map +1 -1
- package/dist/provider/AthenaProvider.d.ts +11 -1
- package/dist/provider/AthenaProvider.js +44 -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/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/api.cjs.map +1 -1
- package/dist/threads/api.d.ts +15 -0
- package/dist/threads/api.js.map +1 -1
- package/dist/threads/conversation-list-fetcher.cjs +13 -5
- package/dist/threads/conversation-list-fetcher.cjs.map +1 -1
- package/dist/threads/conversation-list-fetcher.d.ts +4 -1
- package/dist/threads/conversation-list-fetcher.js +13 -5
- package/dist/threads/conversation-list-fetcher.js.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 +79 -57
- package/dist/threads/statewire-thread-list.cjs.map +1 -1
- package/dist/threads/statewire-thread-list.d.ts +20 -8
- package/dist/threads/statewire-thread-list.js +28 -6
- 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 +37 -15
- package/dist/threads/use-athena-sessions.cjs.map +1 -1
- package/dist/threads/use-athena-sessions.d.ts +10 -5
- package/dist/threads/use-athena-sessions.js +28 -6
- package/dist/threads/use-athena-sessions.js.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-rest-conversation-history.d.ts +1 -0
- 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-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
|
@@ -1,12 +1,41 @@
|
|
|
1
|
-
import { jsx, jsxs } from "react/jsx-runtime";
|
|
2
|
-
import { ThreadPrimitive, AuiIf } from "@assistant-ui/react";
|
|
1
|
+
import { jsx, jsxs, Fragment } from "react/jsx-runtime";
|
|
2
|
+
import { ThreadPrimitive, AuiIf, useAuiState } from "@assistant-ui/react";
|
|
3
3
|
import { ChevronDownIcon } from "lucide-react";
|
|
4
4
|
import { useMemo } from "react";
|
|
5
5
|
import { THREAD_SCROLL_TO_BOTTOM_CLASS } from "../messages/message-components.js";
|
|
6
|
+
import { AnswerLabelScope } from "../messages/answer-label.js";
|
|
6
7
|
import { MessageActionsReadOnlyProvider } from "../messages/message-actions-config.js";
|
|
7
8
|
import { UserEditComposer } from "../messages/user-edit-composer.js";
|
|
8
9
|
import { ThreadRunningIndicator } from "../messages/running-indicator.js";
|
|
10
|
+
import { HandoffArrivalScope, HandoffArrivalAfterMessage } from "../messages/handoff-arrival-divider.js";
|
|
11
|
+
import { FromTheCallAfterMessage } from "../messages/from-the-call-card.js";
|
|
9
12
|
import { THREAD_PANEL_CLASS } from "../messages/thread-chrome.js";
|
|
13
|
+
import { deepAgentRowKey } from "../../agent-runtime/src/messages.js";
|
|
14
|
+
const withArrivalDivider = /* @__PURE__ */ (() => {
|
|
15
|
+
const wrapped = /* @__PURE__ */ new WeakMap();
|
|
16
|
+
return (Message) => {
|
|
17
|
+
const existing = wrapped.get(Message);
|
|
18
|
+
if (existing) return existing;
|
|
19
|
+
const WithArrivalDivider = () => /* @__PURE__ */ jsxs(Fragment, { children: [
|
|
20
|
+
/* @__PURE__ */ jsx(Message, {}),
|
|
21
|
+
/* @__PURE__ */ jsx(FromTheCallAfterMessage, {}),
|
|
22
|
+
/* @__PURE__ */ jsx(HandoffArrivalAfterMessage, {})
|
|
23
|
+
] });
|
|
24
|
+
wrapped.set(Message, WithArrivalDivider);
|
|
25
|
+
return WithArrivalDivider;
|
|
26
|
+
};
|
|
27
|
+
})();
|
|
28
|
+
const ROW_KEY_SEPARATOR = "\0";
|
|
29
|
+
const ThreadRows = ({ components }) => {
|
|
30
|
+
const joinedKeys = useAuiState(
|
|
31
|
+
(s) => s.thread.messages.map((message) => deepAgentRowKey(message)).join(ROW_KEY_SEPARATOR)
|
|
32
|
+
);
|
|
33
|
+
const rowKeys = useMemo(
|
|
34
|
+
() => joinedKeys === "" ? [] : joinedKeys.split(ROW_KEY_SEPARATOR),
|
|
35
|
+
[joinedKeys]
|
|
36
|
+
);
|
|
37
|
+
return /* @__PURE__ */ jsx(Fragment, { children: rowKeys.map((key, index) => /* @__PURE__ */ jsx(ThreadPrimitive.MessageByIndex, { index, components }, key)) });
|
|
38
|
+
};
|
|
10
39
|
const DEFAULT_VIEWPORT_CLASS = "relative flex flex-1 flex-col overflow-y-auto scroll-smooth";
|
|
11
40
|
const DEFAULT_CONTENT_CLASS = "w-full flex-1 px-3 pt-3";
|
|
12
41
|
const DEFAULT_VIEWPORT_FOOTER_CLASS = "sticky bottom-0";
|
|
@@ -39,7 +68,9 @@ function ChatThreadShell({
|
|
|
39
68
|
scrollToBottom = /* @__PURE__ */ jsx(DefaultScrollToBottom, {}),
|
|
40
69
|
viewportFooter,
|
|
41
70
|
viewportFooterClassName,
|
|
42
|
-
readOnly = false
|
|
71
|
+
readOnly = false,
|
|
72
|
+
arrivalThreadId = null,
|
|
73
|
+
viewerUserId = null
|
|
43
74
|
}) {
|
|
44
75
|
const {
|
|
45
76
|
UserMessage,
|
|
@@ -48,13 +79,13 @@ function ChatThreadShell({
|
|
|
48
79
|
} = components;
|
|
49
80
|
const messageComponents = useMemo(
|
|
50
81
|
() => ({
|
|
51
|
-
UserMessage,
|
|
52
|
-
AssistantMessage,
|
|
82
|
+
UserMessage: withArrivalDivider(UserMessage),
|
|
83
|
+
AssistantMessage: withArrivalDivider(AssistantMessage),
|
|
53
84
|
UserEditComposer: UserEditComposerComponent
|
|
54
85
|
}),
|
|
55
86
|
[UserMessage, AssistantMessage, UserEditComposerComponent]
|
|
56
87
|
);
|
|
57
|
-
const messages = /* @__PURE__ */ jsx(
|
|
88
|
+
const messages = /* @__PURE__ */ jsx(HandoffArrivalScope, { threadId: arrivalThreadId, children: /* @__PURE__ */ jsx(AnswerLabelScope, { viewerUserId, children: /* @__PURE__ */ jsx(ThreadRows, { components: messageComponents }) }) });
|
|
58
89
|
return /* @__PURE__ */ jsx(MessageActionsReadOnlyProvider, { readOnly, children: /* @__PURE__ */ jsxs(
|
|
59
90
|
ThreadPrimitive.Root,
|
|
60
91
|
{
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"chat-thread-shell.js","sources":["../../../src/chat-ui/thread/chat-thread-shell.tsx"],"sourcesContent":["import { AuiIf, ThreadPrimitive } from \"@assistant-ui/react\";\nimport { ChevronDownIcon } from \"lucide-react\";\nimport type { CSSProperties, FC, ReactNode } from \"react\";\nimport { useMemo } from \"react\";\nimport {\n THREAD_PANEL_CLASS,\n THREAD_SCROLL_TO_BOTTOM_CLASS,\n} from \"../messages/message-components\";\nimport { MessageActionsReadOnlyProvider } from \"../messages/message-actions-config\";\nimport { UserEditComposer } from \"../messages/user-edit-composer\";\nimport { ThreadRunningIndicator } from \"../messages/running-indicator\";\n\nexport interface ChatThreadMessageComponents {\n UserMessage: FC;\n AssistantMessage: FC;\n /**\n * Rendered in place of a user message while it is being edited (the action\n * bar's Edit control). Defaults to the shared UserEditComposer.\n */\n UserEditComposer?: FC;\n}\n\nconst DEFAULT_VIEWPORT_CLASS =\n \"relative flex flex-1 flex-col overflow-y-auto scroll-smooth\";\nconst DEFAULT_CONTENT_CLASS = \"w-full flex-1 px-3 pt-3\";\nconst DEFAULT_VIEWPORT_FOOTER_CLASS = \"sticky bottom-0\";\n\nconst DefaultScrollToBottom: FC = () => (\n <AuiIf condition={(state) => !state.thread.isEmpty}>\n <div className=\"flex justify-center pb-0.5\">\n <ThreadPrimitive.ScrollToBottom\n aria-label=\"Scroll to bottom\"\n title=\"Scroll to bottom\"\n className={THREAD_SCROLL_TO_BOTTOM_CLASS}\n >\n <ChevronDownIcon className=\"size-3.5\" />\n </ThreadPrimitive.ScrollToBottom>\n </div>\n </AuiIf>\n);\n\nexport interface ChatThreadShellProps {\n /**\n * Rendered as the first child of the panel — for absolutely-positioned\n * scrims that must cover the whole panel (AthenaChat's thread-loading\n * overlay). The shell does not force a positioning context; hosts include\n * `relative` in `panelClassName` when the scrim anchors to the panel.\n */\n overlay?: ReactNode;\n /**\n * Rendered above the viewport, inside the panel: header rows, slide-over\n * panels, and anything else the host docks at the top.\n */\n header?: ReactNode;\n /** Status/approval banners rendered between the header and the viewport. */\n banners?: ReactNode;\n /**\n * Nodes rendered inside the scroll viewport before the message column —\n * absolutely/sticky-positioned overlays (thread-switch skeletons,\n * scroll-to-top controls) and invisible observers (read receipts).\n */\n viewportOverlay?: ReactNode;\n /** Empty-thread state, rendered via ThreadPrimitive.Empty when provided. */\n welcome?: ReactNode;\n /**\n * Rendered inside the message column right above the messages — the\n * windowed wire's history edge (`StatewireHistoryEdge`): the \"N earlier\n * messages\" row that pages older history in and fetches cut tool outputs.\n */\n beforeMessages?: ReactNode;\n /** Message renderers for ThreadPrimitive.Messages. */\n components: ChatThreadMessageComponents;\n /**\n * Wraps the messages element — for hosts that provide message-scoped\n * context (e.g. activity-grouping providers). Must render its argument.\n */\n renderMessages?: (messages: ReactNode) => ReactNode;\n /**\n * Rendered between the viewport and the composer: connection banners,\n * queued-message trays.\n */\n belowViewport?: ReactNode;\n /** The composer dock (or a read-only notice replacing it). */\n composer?: ReactNode;\n /**\n * Replaces the docked-panel card chrome — for hosts that render a\n * full-page column (AthenaChat's `aui-*` surface) instead of the\n * side-panel/task-pane card.\n */\n panelClassName?: string;\n /**\n * Value of the `--thread-max-width` variable read by width-capped\n * message/welcome/footer columns. Panels fill their width (the default,\n * \"100%\"); full-page hosts cap the column (AthenaChat defaults to 44rem).\n */\n maxWidth?: string;\n /**\n * Anchors the latest turn to the top of the viewport instead of pinning\n * scroll to the bottom (AthenaChat). Omitted = the primitive's default.\n */\n turnAnchor?: \"top\" | \"bottom\";\n /** Replaces the scroll-viewport chrome (padding, overflow tuning). */\n viewportClassName?: string;\n /**\n * Replaces the message-column chrome. Hosts whose welcome screen centers\n * vertically make this a flex column so the welcome node can grow.\n */\n contentClassName?: string;\n /**\n * Thread-level \"Thinking...\" indicator rendered after the messages. Hosts\n * whose message components render their own per-message indicators pass\n * null so the two never double up.\n */\n runningIndicator?: ReactNode;\n /**\n * Replaces the default centered scroll-to-bottom pill inside the sticky\n * viewport footer (AthenaChat floats a circular button above its composer).\n */\n scrollToBottom?: ReactNode;\n /**\n * Content docked inside the sticky viewport footer, after the\n * scroll-to-bottom control — for hosts whose banners + composer float over\n * the scrolling messages (AthenaChat) instead of sitting below the\n * viewport via `belowViewport`/`composer`.\n */\n viewportFooter?: ReactNode;\n /** Replaces the sticky viewport-footer chrome. */\n viewportFooterClassName?: string;\n /**\n * Marks the transcript read-only: mutating message actions (Edit,\n * Regenerate) hide while Copy stays available. For threads whose server\n * rejects dispatch (e.g. legacy pre-cutover conversations) — the runtime's\n * static capability flags cannot express a per-thread fence.\n */\n readOnly?: boolean;\n}\n\n/**\n * The shared thread layout: panel chrome, scroll viewport with welcome +\n * messages + running indicator, the sticky scroll-to-bottom control, and the\n * host-supplied composer dock.\n *\n * Hosts express their genuine divergences through the slots above; the\n * layout, scroll behaviour, and empty/running states stay identical across\n * surfaces so fixes land once.\n */\nexport function ChatThreadShell({\n overlay,\n header,\n banners,\n viewportOverlay,\n welcome,\n beforeMessages,\n components,\n renderMessages,\n belowViewport,\n composer,\n panelClassName,\n maxWidth = \"100%\",\n turnAnchor,\n viewportClassName,\n contentClassName,\n runningIndicator = <ThreadRunningIndicator />,\n scrollToBottom = <DefaultScrollToBottom />,\n viewportFooter,\n viewportFooterClassName,\n readOnly = false,\n}: ChatThreadShellProps) {\n const {\n UserMessage,\n AssistantMessage,\n UserEditComposer: UserEditComposerComponent = UserEditComposer,\n } = components;\n // ThreadPrimitive.Messages resolves per-message renderers by component\n // identity, so keep the merged map referentially stable across renders.\n const messageComponents = useMemo(\n () => ({\n UserMessage,\n AssistantMessage,\n UserEditComposer: UserEditComposerComponent,\n }),\n [UserMessage, AssistantMessage, UserEditComposerComponent],\n );\n const messages = <ThreadPrimitive.Messages components={messageComponents} />;\n return (\n <MessageActionsReadOnlyProvider readOnly={readOnly}>\n <ThreadPrimitive.Root\n className={panelClassName ?? THREAD_PANEL_CLASS}\n style={{ \"--thread-max-width\": maxWidth } as CSSProperties}\n >\n {overlay}\n {header}\n {banners}\n <ThreadPrimitive.Viewport\n turnAnchor={turnAnchor}\n className={viewportClassName ?? DEFAULT_VIEWPORT_CLASS}\n data-aui-thread-viewport=\"\"\n >\n {viewportOverlay}\n {/* No min-h-0 here: the column's automatic minimum height is what\n lets it extend past one screen, keeping the sticky footer's flow\n position after the full message list. Capping it detaches the\n footer (scroll pill, docked composers) as soon as the thread\n scrolls — proven in a live-browser probe of both structures. */}\n <div className=\"flex flex-1 flex-col items-center\">\n <div className={contentClassName ?? DEFAULT_CONTENT_CLASS}>\n {welcome != null ? (\n <ThreadPrimitive.Empty>{welcome}</ThreadPrimitive.Empty>\n ) : null}\n {beforeMessages}\n {renderMessages ? renderMessages(messages) : messages}\n {runningIndicator}\n </div>\n </div>\n <ThreadPrimitive.ViewportFooter\n className={viewportFooterClassName ?? DEFAULT_VIEWPORT_FOOTER_CLASS}\n >\n {scrollToBottom}\n {viewportFooter}\n </ThreadPrimitive.ViewportFooter>\n </ThreadPrimitive.Viewport>\n {belowViewport}\n {composer}\n </ThreadPrimitive.Root>\n </MessageActionsReadOnlyProvider>\n );\n}\n"],"names":[],"mappings":";;;;;;;;;AAsBA,MAAM,yBACJ;AACF,MAAM,wBAAwB;AAC9B,MAAM,gCAAgC;AAEtC,MAAM,wBAA4B,MAChC,oBAAC,OAAA,EAAM,WAAW,CAAC,UAAU,CAAC,MAAM,OAAO,SACzC,UAAA,oBAAC,OAAA,EAAI,WAAU,8BACb,UAAA;AAAA,EAAC,gBAAgB;AAAA,EAAhB;AAAA,IACC,cAAW;AAAA,IACX,OAAM;AAAA,IACN,WAAW;AAAA,IAEX,UAAA,oBAAC,iBAAA,EAAgB,WAAU,WAAA,CAAW;AAAA,EAAA;AACxC,EAAA,CACF,EAAA,CACF;AA4GK,SAAS,gBAAgB;AAAA,EAC9B;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA,WAAW;AAAA,EACX;AAAA,EACA;AAAA,EACA;AAAA,EACA,uCAAoB,wBAAA,EAAuB;AAAA,EAC3C,qCAAkB,uBAAA,EAAsB;AAAA,EACxC;AAAA,EACA;AAAA,EACA,WAAW;AACb,GAAyB;AACvB,QAAM;AAAA,IACJ;AAAA,IACA;AAAA,IACA,kBAAkB,4BAA4B;AAAA,EAAA,IAC5C;AAGJ,QAAM,oBAAoB;AAAA,IACxB,OAAO;AAAA,MACL;AAAA,MACA;AAAA,MACA,kBAAkB;AAAA,IAAA;AAAA,IAEpB,CAAC,aAAa,kBAAkB,yBAAyB;AAAA,EAAA;AAE3D,QAAM,WAAW,oBAAC,gBAAgB,UAAhB,EAAyB,YAAY,mBAAmB;AAC1E,SACE,oBAAC,kCAA+B,UAC9B,UAAA;AAAA,IAAC,gBAAgB;AAAA,IAAhB;AAAA,MACC,WAAW,kBAAkB;AAAA,MAC7B,OAAO,EAAE,sBAAsB,SAAA;AAAA,MAE9B,UAAA;AAAA,QAAA;AAAA,QACA;AAAA,QACA;AAAA,QACD;AAAA,UAAC,gBAAgB;AAAA,UAAhB;AAAA,YACC;AAAA,YACA,WAAW,qBAAqB;AAAA,YAChC,4BAAyB;AAAA,YAExB,UAAA;AAAA,cAAA;AAAA,cAMD,oBAAC,SAAI,WAAU,qCACb,+BAAC,OAAA,EAAI,WAAW,oBAAoB,uBACjC,UAAA;AAAA,gBAAA,WAAW,OACV,oBAAC,gBAAgB,OAAhB,EAAuB,mBAAQ,IAC9B;AAAA,gBACH;AAAA,gBACA,iBAAiB,eAAe,QAAQ,IAAI;AAAA,gBAC5C;AAAA,cAAA,EAAA,CACH,EAAA,CACF;AAAA,cACA;AAAA,gBAAC,gBAAgB;AAAA,gBAAhB;AAAA,kBACC,WAAW,2BAA2B;AAAA,kBAErC,UAAA;AAAA,oBAAA;AAAA,oBACA;AAAA,kBAAA;AAAA,gBAAA;AAAA,cAAA;AAAA,YACH;AAAA,UAAA;AAAA,QAAA;AAAA,QAED;AAAA,QACA;AAAA,MAAA;AAAA,IAAA;AAAA,EAAA,GAEL;AAEJ;"}
|
|
1
|
+
{"version":3,"file":"chat-thread-shell.js","sources":["../../../src/chat-ui/thread/chat-thread-shell.tsx"],"sourcesContent":["import { AuiIf, ThreadPrimitive, useAuiState } from \"@assistant-ui/react\";\nimport { deepAgentRowKey } from \"@athenaintel/agent-runtime\";\nimport { ChevronDownIcon } from \"lucide-react\";\nimport type { ComponentProps, CSSProperties, FC, ReactNode } from \"react\";\nimport { useMemo } from \"react\";\nimport {\n THREAD_PANEL_CLASS,\n THREAD_SCROLL_TO_BOTTOM_CLASS,\n} from \"../messages/message-components\";\nimport { AnswerLabelScope } from \"../messages/answer-label\";\nimport { MessageActionsReadOnlyProvider } from \"../messages/message-actions-config\";\nimport { UserEditComposer } from \"../messages/user-edit-composer\";\nimport { ThreadRunningIndicator } from \"../messages/running-indicator\";\nimport {\n HandoffArrivalAfterMessage,\n HandoffArrivalScope,\n} from \"../messages/handoff-arrival-divider\";\nimport { FromTheCallAfterMessage } from \"../messages/from-the-call-card\";\n\nexport interface ChatThreadMessageComponents {\n UserMessage: FC;\n AssistantMessage: FC;\n /**\n * Rendered in place of a user message while it is being edited (the action\n * bar's Edit control). Defaults to the shared UserEditComposer.\n */\n UserEditComposer?: FC;\n}\n\n// One wrapper per message renderer, so a renderer keeps its identity across\n// shells and renders: a row renders its message through the component it is\n// handed, and a new component identity would remount every row.\nconst withArrivalDivider = (() => {\n const wrapped = new WeakMap<FC, FC>();\n return (Message: FC): FC => {\n const existing = wrapped.get(Message);\n if (existing) return existing;\n // After the message: the \"From the call\" card where a call's stretch\n // ends, then the arrival divider (the arrival came after the call).\n const WithArrivalDivider: FC = () => (\n <>\n <Message />\n <FromTheCallAfterMessage />\n <HandoffArrivalAfterMessage />\n </>\n );\n wrapped.set(Message, WithArrivalDivider);\n return WithArrivalDivider;\n };\n})();\n\ntype ThreadRowComponents = ComponentProps<typeof ThreadPrimitive.MessageByIndex>[\"components\"];\n\nconst ROW_KEY_SEPARATOR = \"\\u0000\";\n\n/**\n * The thread's messages, one row each under its row key (`deepAgentRowKey`).\n *\n * `ThreadPrimitive.Messages` keys a row by its message id. A page of older\n * history that folds into the first loaded turn (a long run's earlier steps)\n * gives that turn a new id on every page, so keyed by id the turn's row\n * remounted once per page: it flashed through its entrance animation, closed\n * what the person had opened in it and took the browser's scroll anchor with\n * it. The row key stays with the row the turn continues, so the page lands in\n * the mounted row. A message from another runtime keys by its id, as before.\n */\nconst ThreadRows: FC<{ components: ThreadRowComponents }> = ({ components }) => {\n const joinedKeys = useAuiState((s) =>\n s.thread.messages.map((message) => deepAgentRowKey(message)).join(ROW_KEY_SEPARATOR),\n );\n const rowKeys = useMemo(\n () => (joinedKeys === \"\" ? [] : joinedKeys.split(ROW_KEY_SEPARATOR)),\n [joinedKeys],\n );\n return (\n <>\n {rowKeys.map((key, index) => (\n <ThreadPrimitive.MessageByIndex key={key} index={index} components={components} />\n ))}\n </>\n );\n};\n\nconst DEFAULT_VIEWPORT_CLASS =\n \"relative flex flex-1 flex-col overflow-y-auto scroll-smooth\";\nconst DEFAULT_CONTENT_CLASS = \"w-full flex-1 px-3 pt-3\";\nconst DEFAULT_VIEWPORT_FOOTER_CLASS = \"sticky bottom-0\";\n\nconst DefaultScrollToBottom: FC = () => (\n <AuiIf condition={(state) => !state.thread.isEmpty}>\n <div className=\"flex justify-center pb-0.5\">\n <ThreadPrimitive.ScrollToBottom\n aria-label=\"Scroll to bottom\"\n title=\"Scroll to bottom\"\n className={THREAD_SCROLL_TO_BOTTOM_CLASS}\n >\n <ChevronDownIcon className=\"size-3.5\" />\n </ThreadPrimitive.ScrollToBottom>\n </div>\n </AuiIf>\n);\n\nexport interface ChatThreadShellProps {\n /**\n * Rendered as the first child of the panel — for absolutely-positioned\n * scrims that must cover the whole panel (AthenaChat's thread-loading\n * overlay). The shell does not force a positioning context; hosts include\n * `relative` in `panelClassName` when the scrim anchors to the panel.\n */\n overlay?: ReactNode;\n /**\n * Rendered above the viewport, inside the panel: header rows, slide-over\n * panels, and anything else the host docks at the top.\n */\n header?: ReactNode;\n /** Status/approval banners rendered between the header and the viewport. */\n banners?: ReactNode;\n /**\n * Nodes rendered inside the scroll viewport before the message column —\n * absolutely/sticky-positioned overlays (thread-switch skeletons,\n * scroll-to-top controls) and invisible observers (read receipts).\n */\n viewportOverlay?: ReactNode;\n /** Empty-thread state, rendered via ThreadPrimitive.Empty when provided. */\n welcome?: ReactNode;\n /**\n * Rendered inside the message column right above the messages — the\n * windowed wire's history edge (`StatewireHistoryEdge`): the \"N earlier\n * messages\" row that pages older history in and fetches cut tool outputs.\n */\n beforeMessages?: ReactNode;\n /** Message renderers for the thread's rows. */\n components: ChatThreadMessageComponents;\n /**\n * Wraps the messages element — for hosts that provide message-scoped\n * context (e.g. activity-grouping providers). Must render its argument.\n */\n renderMessages?: (messages: ReactNode) => ReactNode;\n /**\n * Rendered between the viewport and the composer: connection banners,\n * queued-message trays.\n */\n belowViewport?: ReactNode;\n /** The composer dock (or a read-only notice replacing it). */\n composer?: ReactNode;\n /**\n * Replaces the docked-panel card chrome — for hosts that render a\n * full-page column (AthenaChat's `aui-*` surface) instead of the\n * side-panel/task-pane card.\n */\n panelClassName?: string;\n /**\n * Value of the `--thread-max-width` variable read by width-capped\n * message/welcome/footer columns. Panels fill their width (the default,\n * \"100%\"); full-page hosts cap the column (AthenaChat defaults to 44rem).\n */\n maxWidth?: string;\n /**\n * Anchors the latest turn to the top of the viewport instead of pinning\n * scroll to the bottom (AthenaChat). Omitted = the primitive's default.\n */\n turnAnchor?: \"top\" | \"bottom\";\n /** Replaces the scroll-viewport chrome (padding, overflow tuning). */\n viewportClassName?: string;\n /**\n * Replaces the message-column chrome. Hosts whose welcome screen centers\n * vertically make this a flex column so the welcome node can grow.\n */\n contentClassName?: string;\n /**\n * Thread-level \"Thinking...\" indicator rendered after the messages. Hosts\n * whose message components render their own per-message indicators pass\n * null so the two never double up.\n */\n runningIndicator?: ReactNode;\n /**\n * Replaces the default centered scroll-to-bottom pill inside the sticky\n * viewport footer (AthenaChat floats a circular button above its composer).\n */\n scrollToBottom?: ReactNode;\n /**\n * Content docked inside the sticky viewport footer, after the\n * scroll-to-bottom control — for hosts whose banners + composer float over\n * the scrolling messages (AthenaChat) instead of sitting below the\n * viewport via `belowViewport`/`composer`.\n */\n viewportFooter?: ReactNode;\n /** Replaces the sticky viewport-footer chrome. */\n viewportFooterClassName?: string;\n /**\n * Marks the transcript read-only: mutating message actions (Edit,\n * Regenerate) hide while Copy stays available. For threads whose server\n * rejects dispatch (e.g. legacy pre-cutover conversations) — the runtime's\n * static capability flags cannot express a per-thread fence.\n */\n readOnly?: boolean;\n /**\n * The backend id of the thread on screen. When this surface picked the\n * conversation up from another one (`recordHandoffArrival`), the transcript\n * shows \"Continued from …\" after the last message that was already there.\n */\n arrivalThreadId?: string | null;\n /**\n * The signed-in viewer's Athena user id (`user_…`), for the answer labels\n * (`AnswerLabel`): their own answers read \"for you\", and an answer for\n * another person is labelled even in a 1:1 chat. Omitted, answers name the\n * person by name and are labelled only once the thread holds several agents\n * or several people.\n */\n viewerUserId?: string | null;\n}\n\n/**\n * The shared thread layout: panel chrome, scroll viewport with welcome +\n * messages + running indicator, the sticky scroll-to-bottom control, and the\n * host-supplied composer dock.\n *\n * Hosts express their genuine divergences through the slots above; the\n * layout, scroll behaviour, and empty/running states stay identical across\n * surfaces so fixes land once.\n */\nexport function ChatThreadShell({\n overlay,\n header,\n banners,\n viewportOverlay,\n welcome,\n beforeMessages,\n components,\n renderMessages,\n belowViewport,\n composer,\n panelClassName,\n maxWidth = \"100%\",\n turnAnchor,\n viewportClassName,\n contentClassName,\n runningIndicator = <ThreadRunningIndicator />,\n scrollToBottom = <DefaultScrollToBottom />,\n viewportFooter,\n viewportFooterClassName,\n readOnly = false,\n arrivalThreadId = null,\n viewerUserId = null,\n}: ChatThreadShellProps) {\n const {\n UserMessage,\n AssistantMessage,\n UserEditComposer: UserEditComposerComponent = UserEditComposer,\n } = components;\n // A row resolves its renderer by component identity, so keep the merged map\n // referentially stable across renders.\n const messageComponents = useMemo(\n () => ({\n UserMessage: withArrivalDivider(UserMessage),\n AssistantMessage: withArrivalDivider(AssistantMessage),\n UserEditComposer: UserEditComposerComponent,\n }),\n [UserMessage, AssistantMessage, UserEditComposerComponent],\n );\n const messages = (\n <HandoffArrivalScope threadId={arrivalThreadId}>\n <AnswerLabelScope viewerUserId={viewerUserId}>\n <ThreadRows components={messageComponents} />\n </AnswerLabelScope>\n </HandoffArrivalScope>\n );\n return (\n <MessageActionsReadOnlyProvider readOnly={readOnly}>\n <ThreadPrimitive.Root\n className={panelClassName ?? THREAD_PANEL_CLASS}\n style={{ \"--thread-max-width\": maxWidth } as CSSProperties}\n >\n {overlay}\n {header}\n {banners}\n <ThreadPrimitive.Viewport\n turnAnchor={turnAnchor}\n className={viewportClassName ?? DEFAULT_VIEWPORT_CLASS}\n data-aui-thread-viewport=\"\"\n >\n {viewportOverlay}\n {/* No min-h-0 here: the column's automatic minimum height is what\n lets it extend past one screen, keeping the sticky footer's flow\n position after the full message list. Capping it detaches the\n footer (scroll pill, docked composers) as soon as the thread\n scrolls — proven in a live-browser probe of both structures. */}\n <div className=\"flex flex-1 flex-col items-center\">\n <div className={contentClassName ?? DEFAULT_CONTENT_CLASS}>\n {welcome != null ? (\n <ThreadPrimitive.Empty>{welcome}</ThreadPrimitive.Empty>\n ) : null}\n {beforeMessages}\n {renderMessages ? renderMessages(messages) : messages}\n {runningIndicator}\n </div>\n </div>\n <ThreadPrimitive.ViewportFooter\n className={viewportFooterClassName ?? DEFAULT_VIEWPORT_FOOTER_CLASS}\n >\n {scrollToBottom}\n {viewportFooter}\n </ThreadPrimitive.ViewportFooter>\n </ThreadPrimitive.Viewport>\n {belowViewport}\n {composer}\n </ThreadPrimitive.Root>\n </MessageActionsReadOnlyProvider>\n );\n}\n"],"names":[],"mappings":";;;;;;;;;;;;;AAgCA,MAAM,qBAAsB,uBAAM;AAChC,QAAM,8BAAc,QAAA;AACpB,SAAO,CAAC,YAAoB;AAC1B,UAAM,WAAW,QAAQ,IAAI,OAAO;AACpC,QAAI,SAAU,QAAO;AAGrB,UAAM,qBAAyB,MAC7B,qBAAA,UAAA,EACE,UAAA;AAAA,MAAA,oBAAC,SAAA,EAAQ;AAAA,0BACR,yBAAA,EAAwB;AAAA,0BACxB,4BAAA,CAAA,CAA2B;AAAA,IAAA,GAC9B;AAEF,YAAQ,IAAI,SAAS,kBAAkB;AACvC,WAAO;AAAA,EACT;AACF,GAAA;AAIA,MAAM,oBAAoB;AAa1B,MAAM,aAAsD,CAAC,EAAE,iBAAiB;AAC9E,QAAM,aAAa;AAAA,IAAY,CAAC,MAC9B,EAAE,OAAO,SAAS,IAAI,CAAC,YAAY,gBAAgB,OAAO,CAAC,EAAE,KAAK,iBAAiB;AAAA,EAAA;AAErF,QAAM,UAAU;AAAA,IACd,MAAO,eAAe,KAAK,CAAA,IAAK,WAAW,MAAM,iBAAiB;AAAA,IAClE,CAAC,UAAU;AAAA,EAAA;AAEb,SACE,oBAAA,UAAA,EACG,UAAA,QAAQ,IAAI,CAAC,KAAK,UACjB,oBAAC,gBAAgB,gBAAhB,EAAyC,OAAc,cAAnB,GAA2C,CACjF,GACH;AAEJ;AAEA,MAAM,yBACJ;AACF,MAAM,wBAAwB;AAC9B,MAAM,gCAAgC;AAEtC,MAAM,wBAA4B,MAChC,oBAAC,OAAA,EAAM,WAAW,CAAC,UAAU,CAAC,MAAM,OAAO,SACzC,UAAA,oBAAC,OAAA,EAAI,WAAU,8BACb,UAAA;AAAA,EAAC,gBAAgB;AAAA,EAAhB;AAAA,IACC,cAAW;AAAA,IACX,OAAM;AAAA,IACN,WAAW;AAAA,IAEX,UAAA,oBAAC,iBAAA,EAAgB,WAAU,WAAA,CAAW;AAAA,EAAA;AACxC,EAAA,CACF,EAAA,CACF;AA0HK,SAAS,gBAAgB;AAAA,EAC9B;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA,WAAW;AAAA,EACX;AAAA,EACA;AAAA,EACA;AAAA,EACA,uCAAoB,wBAAA,EAAuB;AAAA,EAC3C,qCAAkB,uBAAA,EAAsB;AAAA,EACxC;AAAA,EACA;AAAA,EACA,WAAW;AAAA,EACX,kBAAkB;AAAA,EAClB,eAAe;AACjB,GAAyB;AACvB,QAAM;AAAA,IACJ;AAAA,IACA;AAAA,IACA,kBAAkB,4BAA4B;AAAA,EAAA,IAC5C;AAGJ,QAAM,oBAAoB;AAAA,IACxB,OAAO;AAAA,MACL,aAAa,mBAAmB,WAAW;AAAA,MAC3C,kBAAkB,mBAAmB,gBAAgB;AAAA,MACrD,kBAAkB;AAAA,IAAA;AAAA,IAEpB,CAAC,aAAa,kBAAkB,yBAAyB;AAAA,EAAA;AAE3D,QAAM,WACJ,oBAAC,qBAAA,EAAoB,UAAU,iBAC7B,UAAA,oBAAC,kBAAA,EAAiB,cAChB,UAAA,oBAAC,YAAA,EAAW,YAAY,kBAAA,CAAmB,GAC7C,GACF;AAEF,SACE,oBAAC,kCAA+B,UAC9B,UAAA;AAAA,IAAC,gBAAgB;AAAA,IAAhB;AAAA,MACC,WAAW,kBAAkB;AAAA,MAC7B,OAAO,EAAE,sBAAsB,SAAA;AAAA,MAE9B,UAAA;AAAA,QAAA;AAAA,QACA;AAAA,QACA;AAAA,QACD;AAAA,UAAC,gBAAgB;AAAA,UAAhB;AAAA,YACC;AAAA,YACA,WAAW,qBAAqB;AAAA,YAChC,4BAAyB;AAAA,YAExB,UAAA;AAAA,cAAA;AAAA,cAMD,oBAAC,SAAI,WAAU,qCACb,+BAAC,OAAA,EAAI,WAAW,oBAAoB,uBACjC,UAAA;AAAA,gBAAA,WAAW,OACV,oBAAC,gBAAgB,OAAhB,EAAuB,mBAAQ,IAC9B;AAAA,gBACH;AAAA,gBACA,iBAAiB,eAAe,QAAQ,IAAI;AAAA,gBAC5C;AAAA,cAAA,EAAA,CACH,EAAA,CACF;AAAA,cACA;AAAA,gBAAC,gBAAgB;AAAA,gBAAhB;AAAA,kBACC,WAAW,2BAA2B;AAAA,kBAErC,UAAA;AAAA,oBAAA;AAAA,oBACA;AAAA,kBAAA;AAAA,gBAAA;AAAA,cAAA;AAAA,YACH;AAAA,UAAA;AAAA,QAAA;AAAA,QAED;AAAA,QACA;AAAA,MAAA;AAAA,IAAA;AAAA,EAAA,GAEL;AAEJ;"}
|
|
@@ -3,13 +3,14 @@ Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
|
|
|
3
3
|
const jsxRuntime = require("react/jsx-runtime");
|
|
4
4
|
const athenaDiagnostics = require("../../diagnostics/athena-diagnostics.cjs");
|
|
5
5
|
const react = require("@assistant-ui/react");
|
|
6
|
-
const
|
|
6
|
+
const require$$0 = require("react");
|
|
7
7
|
const composerAction = require("../composer/composer-action.cjs");
|
|
8
8
|
const messageComponents = require("../messages/message-components.cjs");
|
|
9
9
|
const ComposerSendOrStop = ({
|
|
10
10
|
composerRef,
|
|
11
11
|
hasDraft,
|
|
12
12
|
liveVoice = false,
|
|
13
|
+
liveSession = null,
|
|
13
14
|
disabled = false,
|
|
14
15
|
sendBlockedReason = null,
|
|
15
16
|
sendDisabledTitle,
|
|
@@ -25,10 +26,10 @@ const ComposerSendOrStop = ({
|
|
|
25
26
|
return ((_a = state.optional.thread) == null ? void 0 : _a.isRunning) ?? false;
|
|
26
27
|
}
|
|
27
28
|
);
|
|
28
|
-
const action = liveVoice && hasDraft ? "send" : composerAction.resolveComposerAction({ hasDraft, isRunning });
|
|
29
|
+
const action = liveVoice && hasDraft ? "send" : !hasDraft && liveSession !== null ? "stop" : composerAction.resolveComposerAction({ hasDraft, isRunning });
|
|
29
30
|
const SendButton = (components == null ? void 0 : components.SendButton) ?? messageComponents.ComposerSendButton;
|
|
30
31
|
const StopButton = (components == null ? void 0 : components.StopButton) ?? messageComponents.ComposerStopButton;
|
|
31
|
-
const cancelRun =
|
|
32
|
+
const cancelRun = require$$0.useCallback(() => {
|
|
32
33
|
try {
|
|
33
34
|
aui.thread.cancelRun();
|
|
34
35
|
return true;
|
|
@@ -40,29 +41,31 @@ const ComposerSendOrStop = ({
|
|
|
40
41
|
return false;
|
|
41
42
|
}
|
|
42
43
|
}, [aui]);
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
44
|
+
const stopRun = () => isRunning ? cancelRun() : true;
|
|
45
|
+
const stopEverything = () => {
|
|
46
|
+
liveSession == null ? void 0 : liveSession.end();
|
|
47
|
+
if (onStop) {
|
|
48
|
+
onStop({ cancelRun: stopRun });
|
|
49
|
+
} else {
|
|
50
|
+
stopRun();
|
|
51
|
+
}
|
|
52
|
+
};
|
|
53
|
+
const stopControl = /* @__PURE__ */ jsxRuntime.jsx(
|
|
54
|
+
StopButton,
|
|
55
|
+
{
|
|
56
|
+
onStop: stopEverything,
|
|
57
|
+
disabled,
|
|
58
|
+
title: disabled && stopDisabledTitle ? stopDisabledTitle : liveSession ? "Stop" : void 0
|
|
59
|
+
}
|
|
60
|
+
);
|
|
61
|
+
if (action === "stop") return stopControl;
|
|
59
62
|
const handleSend = async () => {
|
|
60
63
|
var _a;
|
|
61
64
|
await (onBeforeSend == null ? void 0 : onBeforeSend({ action }));
|
|
62
65
|
await ((_a = composerRef.current) == null ? void 0 : _a.submit());
|
|
63
66
|
};
|
|
64
67
|
const sendTitle = disabled && sendDisabledTitle ? sendDisabledTitle : sendBlockedReason ?? void 0;
|
|
65
|
-
|
|
68
|
+
const sendControl = /* @__PURE__ */ jsxRuntime.jsx(
|
|
66
69
|
SendButton,
|
|
67
70
|
{
|
|
68
71
|
action,
|
|
@@ -71,6 +74,13 @@ const ComposerSendOrStop = ({
|
|
|
71
74
|
title: sendTitle
|
|
72
75
|
}
|
|
73
76
|
);
|
|
77
|
+
if (liveSession !== null) {
|
|
78
|
+
return /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
|
|
79
|
+
stopControl,
|
|
80
|
+
sendControl
|
|
81
|
+
] });
|
|
82
|
+
}
|
|
83
|
+
return sendControl;
|
|
74
84
|
};
|
|
75
85
|
exports.ComposerSendOrStop = ComposerSendOrStop;
|
|
76
86
|
//# sourceMappingURL=composer-send-or-stop.cjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"composer-send-or-stop.cjs","sources":["../../../src/chat-ui/thread/composer-send-or-stop.tsx"],"sourcesContent":["import { athenaDiagnostics } from \"../../diagnostics/athena-diagnostics\";\nimport { useAui, useAuiState } from \"@assistant-ui/react\";\nimport type { FC, RefObject } from \"react\";\nimport { useCallback } from \"react\";\nimport {\n resolveComposerAction,\n type ComposerAction,\n} from \"../composer/composer-action\";\nimport {\n ComposerSendButton,\n ComposerStopButton,\n type ComposerSendButtonProps,\n type ComposerStopButtonProps,\n} from \"../messages/message-components\";\n\n/**\n * The slice of a composer handle this control needs: something whose draft\n * can be submitted. `TiptapComposerHandle` satisfies it; hosts with their own\n * editor plumbing (the SDK's AthenaChat) expose a compatible handle.\n */\nexport interface ComposerSubmitHandle {\n submit: () => void | Promise<void>;\n}\n\nexport interface ComposerStopControls {\n /**\n * Cancels the active run via the runtime. Returns false when cancellation\n * threw (e.g. the run already settled), so hosts can report whether their\n * own teardown still needs to stop backend work.\n */\n cancelRun: () => boolean;\n}\n\n/**\n * Control renderers, for hosts with their own published theming contract\n * (AthenaChat's `aui-*` class system). Defaults render the shared buttons.\n */\nexport interface ComposerSendOrStopComponents {\n SendButton?: FC<ComposerSendButtonProps>;\n StopButton?: FC<ComposerStopButtonProps>;\n}\n\nexport interface ComposerSendOrStopProps {\n composerRef: RefObject<ComposerSubmitHandle | null>;\n hasDraft: boolean;\n /** A plain draft enters the live voice conversation instead of the run queue. */\n liveVoice?: boolean;\n /** Disables both send and stop (e.g. while a conversation restores). */\n disabled?: boolean;\n /**\n * Blocks sending (not stopping) with this reason as the tooltip — e.g. a\n * broken host tunnel that would make tool calls silently fail.\n */\n sendBlockedReason?: string | null;\n /** Tooltip for the send/queue control while `disabled`. */\n sendDisabledTitle?: string;\n /** Tooltip for the stop control while `disabled`. */\n stopDisabledTitle?: string;\n /**\n * Host work to run before the draft submits (per-turn bookkeeping).\n * `action` distinguishes a fresh send from queueing into an active run.\n */\n onBeforeSend?: (context: {\n action: Extract<ComposerAction, \"send\" | \"queue\">;\n }) => void | Promise<void>;\n /**\n * Full custom stop sequence. Hosts that must tear down in-flight host-side\n * work sequence it around `controls.cancelRun()`. Default: cancel the run.\n */\n onStop?: (controls: ComposerStopControls) => void;\n components?: ComposerSendOrStopComponents;\n}\n\n/**\n * The shared send/queue/stop control: sends the composer draft, queues it as\n * a follow-up while a run is in flight, or stops the run when there is\n * nothing to queue.\n */\nexport const ComposerSendOrStop: FC<ComposerSendOrStopProps> = ({\n composerRef,\n hasDraft,\n liveVoice = false,\n disabled = false,\n sendBlockedReason = null,\n sendDisabledTitle,\n stopDisabledTitle,\n onBeforeSend,\n onStop,\n components,\n}) => {\n const aui = useAui();\n const isRunning = useAuiState(\n (state) => state.optional.thread?.isRunning ?? false,\n );\n const action
|
|
1
|
+
{"version":3,"file":"composer-send-or-stop.cjs","sources":["../../../src/chat-ui/thread/composer-send-or-stop.tsx"],"sourcesContent":["import { athenaDiagnostics } from \"../../diagnostics/athena-diagnostics\";\nimport { useAui, useAuiState } from \"@assistant-ui/react\";\nimport type { FC, RefObject } from \"react\";\nimport { useCallback } from \"react\";\nimport {\n resolveComposerAction,\n type ComposerAction,\n} from \"../composer/composer-action\";\nimport {\n ComposerSendButton,\n ComposerStopButton,\n type ComposerSendButtonProps,\n type ComposerStopButtonProps,\n} from \"../messages/message-components\";\n\n/**\n * The slice of a composer handle this control needs: something whose draft\n * can be submitted. `TiptapComposerHandle` satisfies it; hosts with their own\n * editor plumbing (the SDK's AthenaChat) expose a compatible handle.\n */\nexport interface ComposerSubmitHandle {\n submit: () => void | Promise<void>;\n}\n\nexport interface ComposerStopControls {\n /**\n * Cancels the active run via the runtime. Returns false when cancellation\n * threw (e.g. the run already settled), so hosts can report whether their\n * own teardown still needs to stop backend work.\n */\n cancelRun: () => boolean;\n}\n\n/**\n * Control renderers, for hosts with their own published theming contract\n * (AthenaChat's `aui-*` class system). Defaults render the shared buttons.\n */\nexport interface ComposerSendOrStopComponents {\n SendButton?: FC<ComposerSendButtonProps>;\n StopButton?: FC<ComposerStopButtonProps>;\n}\n\nexport interface ComposerSendOrStopProps {\n composerRef: RefObject<ComposerSubmitHandle | null>;\n hasDraft: boolean;\n /** A plain draft enters the live voice conversation instead of the run queue. */\n liveVoice?: boolean;\n /**\n * A live session (voice, connecting or live) the Stop control also ends.\n * With it, an empty draft shows Stop even when no run is in flight, and\n * Stop ends the session AND cancels any run: one control stops everything.\n */\n liveSession?: { end: () => void } | null;\n /** Disables both send and stop (e.g. while a conversation restores). */\n disabled?: boolean;\n /**\n * Blocks sending (not stopping) with this reason as the tooltip — e.g. a\n * broken host tunnel that would make tool calls silently fail.\n */\n sendBlockedReason?: string | null;\n /** Tooltip for the send/queue control while `disabled`. */\n sendDisabledTitle?: string;\n /** Tooltip for the stop control while `disabled`. */\n stopDisabledTitle?: string;\n /**\n * Host work to run before the draft submits (per-turn bookkeeping).\n * `action` distinguishes a fresh send from queueing into an active run.\n */\n onBeforeSend?: (context: {\n action: Extract<ComposerAction, \"send\" | \"queue\">;\n }) => void | Promise<void>;\n /**\n * Full custom stop sequence. Hosts that must tear down in-flight host-side\n * work sequence it around `controls.cancelRun()`. Default: cancel the run.\n */\n onStop?: (controls: ComposerStopControls) => void;\n components?: ComposerSendOrStopComponents;\n}\n\n/**\n * The shared send/queue/stop control: sends the composer draft, queues it as\n * a follow-up while a run is in flight, or stops the run when there is\n * nothing to queue.\n */\nexport const ComposerSendOrStop: FC<ComposerSendOrStopProps> = ({\n composerRef,\n hasDraft,\n liveVoice = false,\n liveSession = null,\n disabled = false,\n sendBlockedReason = null,\n sendDisabledTitle,\n stopDisabledTitle,\n onBeforeSend,\n onStop,\n components,\n}) => {\n const aui = useAui();\n const isRunning = useAuiState(\n (state) => state.optional.thread?.isRunning ?? false,\n );\n // A draft sends (into the live voice conversation, or as a run) or queues\n // behind a run; only an empty draft turns the control into Stop, and a\n // live session alone is enough for that.\n const action: ComposerAction =\n liveVoice && hasDraft\n ? \"send\"\n : !hasDraft && liveSession !== null\n ? \"stop\"\n : resolveComposerAction({ hasDraft, isRunning });\n const SendButton = components?.SendButton ?? ComposerSendButton;\n const StopButton = components?.StopButton ?? ComposerStopButton;\n\n const cancelRun = useCallback((): boolean => {\n try {\n aui.thread.cancelRun();\n return true;\n } catch (error) {\n athenaDiagnostics.emit(\"composer.cancel.error\", {\n level: \"warn\",\n data: { error: error instanceof Error ? error.message : String(error) },\n });\n return false;\n }\n }, [aui]);\n\n // With only a session to end, a cancel would find no run to stop.\n const stopRun = (): boolean => (isRunning ? cancelRun() : true);\n const stopEverything = () => {\n liveSession?.end();\n if (onStop) {\n onStop({ cancelRun: stopRun });\n } else {\n stopRun();\n }\n };\n const stopControl = (\n <StopButton\n onStop={stopEverything}\n disabled={disabled}\n title={\n disabled && stopDisabledTitle\n ? stopDisabledTitle\n : liveSession\n ? \"Stop\"\n : undefined\n }\n />\n );\n\n if (action === \"stop\") return stopControl;\n\n const handleSend = async () => {\n await onBeforeSend?.({ action });\n await composerRef.current?.submit();\n };\n const sendTitle =\n disabled && sendDisabledTitle\n ? sendDisabledTitle\n : (sendBlockedReason ?? undefined);\n const sendControl = (\n <SendButton\n action={action}\n onSend={() => void handleSend()}\n disabled={disabled || !hasDraft || sendBlockedReason != null}\n title={sendTitle}\n />\n );\n // A live session keeps its Stop beside Send while a draft is typed, so the\n // call (and any run) can end without sending or discarding the words; the\n // draft stays in the composer.\n if (liveSession !== null) {\n return (\n <>\n {stopControl}\n {sendControl}\n </>\n );\n }\n return sendControl;\n};\n"],"names":["useAui","useAuiState","resolveComposerAction","ComposerSendButton","ComposerStopButton","useCallback","athenaDiagnostics","jsx","jsxs","Fragment"],"mappings":";;;;;;;;AAoFO,MAAM,qBAAkD,CAAC;AAAA,EAC9D;AAAA,EACA;AAAA,EACA,YAAY;AAAA,EACZ,cAAc;AAAA,EACd,WAAW;AAAA,EACX,oBAAoB;AAAA,EACpB;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,MAAM;AACJ,QAAM,MAAMA,MAAAA,OAAA;AACZ,QAAM,YAAYC,MAAAA;AAAAA,IAChB,CAAC,UAAA;;AAAU,0BAAM,SAAS,WAAf,mBAAuB,cAAa;AAAA;AAAA,EAAA;AAKjD,QAAM,SACJ,aAAa,WACT,SACA,CAAC,YAAY,gBAAgB,OAC3B,SACAC,eAAAA,sBAAsB,EAAE,UAAU,WAAW;AACrD,QAAM,cAAa,yCAAY,eAAcC,kBAAAA;AAC7C,QAAM,cAAa,yCAAY,eAAcC,kBAAAA;AAE7C,QAAM,YAAYC,WAAAA,YAAY,MAAe;AAC3C,QAAI;AACF,UAAI,OAAO,UAAA;AACX,aAAO;AAAA,IACT,SAAS,OAAO;AACdC,wBAAAA,kBAAkB,KAAK,yBAAyB;AAAA,QAC9C,OAAO;AAAA,QACP,MAAM,EAAE,OAAO,iBAAiB,QAAQ,MAAM,UAAU,OAAO,KAAK,EAAA;AAAA,MAAE,CACvE;AACD,aAAO;AAAA,IACT;AAAA,EACF,GAAG,CAAC,GAAG,CAAC;AAGR,QAAM,UAAU,MAAgB,YAAY,UAAA,IAAc;AAC1D,QAAM,iBAAiB,MAAM;AAC3B,+CAAa;AACb,QAAI,QAAQ;AACV,aAAO,EAAE,WAAW,SAAS;AAAA,IAC/B,OAAO;AACL,cAAA;AAAA,IACF;AAAA,EACF;AACA,QAAM,cACJC,2BAAAA;AAAAA,IAAC;AAAA,IAAA;AAAA,MACC,QAAQ;AAAA,MACR;AAAA,MACA,OACE,YAAY,oBACR,oBACA,cACE,SACA;AAAA,IAAA;AAAA,EAAA;AAKZ,MAAI,WAAW,OAAQ,QAAO;AAE9B,QAAM,aAAa,YAAY;;AAC7B,WAAM,6CAAe,EAAE;AACvB,YAAM,iBAAY,YAAZ,mBAAqB;AAAA,EAC7B;AACA,QAAM,YACJ,YAAY,oBACR,oBACC,qBAAqB;AAC5B,QAAM,cACJA,2BAAAA;AAAAA,IAAC;AAAA,IAAA;AAAA,MACC;AAAA,MACA,QAAQ,MAAM,KAAK,WAAA;AAAA,MACnB,UAAU,YAAY,CAAC,YAAY,qBAAqB;AAAA,MACxD,OAAO;AAAA,IAAA;AAAA,EAAA;AAMX,MAAI,gBAAgB,MAAM;AACxB,WACEC,2BAAAA,KAAAC,qBAAA,EACG,UAAA;AAAA,MAAA;AAAA,MACA;AAAA,IAAA,GACH;AAAA,EAEJ;AACA,SAAO;AACT;;"}
|
|
@@ -30,6 +30,14 @@ export interface ComposerSendOrStopProps {
|
|
|
30
30
|
hasDraft: boolean;
|
|
31
31
|
/** A plain draft enters the live voice conversation instead of the run queue. */
|
|
32
32
|
liveVoice?: boolean;
|
|
33
|
+
/**
|
|
34
|
+
* A live session (voice, connecting or live) the Stop control also ends.
|
|
35
|
+
* With it, an empty draft shows Stop even when no run is in flight, and
|
|
36
|
+
* Stop ends the session AND cancels any run: one control stops everything.
|
|
37
|
+
*/
|
|
38
|
+
liveSession?: {
|
|
39
|
+
end: () => void;
|
|
40
|
+
} | null;
|
|
33
41
|
/** Disables both send and stop (e.g. while a conversation restores). */
|
|
34
42
|
disabled?: boolean;
|
|
35
43
|
/**
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { jsx } from "react/jsx-runtime";
|
|
1
|
+
import { jsxs, Fragment, jsx } from "react/jsx-runtime";
|
|
2
2
|
import { athenaDiagnostics } from "../../diagnostics/athena-diagnostics.js";
|
|
3
3
|
import { useAui, useAuiState } from "@assistant-ui/react";
|
|
4
4
|
import { useCallback } from "react";
|
|
@@ -8,6 +8,7 @@ const ComposerSendOrStop = ({
|
|
|
8
8
|
composerRef,
|
|
9
9
|
hasDraft,
|
|
10
10
|
liveVoice = false,
|
|
11
|
+
liveSession = null,
|
|
11
12
|
disabled = false,
|
|
12
13
|
sendBlockedReason = null,
|
|
13
14
|
sendDisabledTitle,
|
|
@@ -23,7 +24,7 @@ const ComposerSendOrStop = ({
|
|
|
23
24
|
return ((_a = state.optional.thread) == null ? void 0 : _a.isRunning) ?? false;
|
|
24
25
|
}
|
|
25
26
|
);
|
|
26
|
-
const action = liveVoice && hasDraft ? "send" : resolveComposerAction({ hasDraft, isRunning });
|
|
27
|
+
const action = liveVoice && hasDraft ? "send" : !hasDraft && liveSession !== null ? "stop" : resolveComposerAction({ hasDraft, isRunning });
|
|
27
28
|
const SendButton = (components == null ? void 0 : components.SendButton) ?? ComposerSendButton;
|
|
28
29
|
const StopButton = (components == null ? void 0 : components.StopButton) ?? ComposerStopButton;
|
|
29
30
|
const cancelRun = useCallback(() => {
|
|
@@ -38,29 +39,31 @@ const ComposerSendOrStop = ({
|
|
|
38
39
|
return false;
|
|
39
40
|
}
|
|
40
41
|
}, [aui]);
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
42
|
+
const stopRun = () => isRunning ? cancelRun() : true;
|
|
43
|
+
const stopEverything = () => {
|
|
44
|
+
liveSession == null ? void 0 : liveSession.end();
|
|
45
|
+
if (onStop) {
|
|
46
|
+
onStop({ cancelRun: stopRun });
|
|
47
|
+
} else {
|
|
48
|
+
stopRun();
|
|
49
|
+
}
|
|
50
|
+
};
|
|
51
|
+
const stopControl = /* @__PURE__ */ jsx(
|
|
52
|
+
StopButton,
|
|
53
|
+
{
|
|
54
|
+
onStop: stopEverything,
|
|
55
|
+
disabled,
|
|
56
|
+
title: disabled && stopDisabledTitle ? stopDisabledTitle : liveSession ? "Stop" : void 0
|
|
57
|
+
}
|
|
58
|
+
);
|
|
59
|
+
if (action === "stop") return stopControl;
|
|
57
60
|
const handleSend = async () => {
|
|
58
61
|
var _a;
|
|
59
62
|
await (onBeforeSend == null ? void 0 : onBeforeSend({ action }));
|
|
60
63
|
await ((_a = composerRef.current) == null ? void 0 : _a.submit());
|
|
61
64
|
};
|
|
62
65
|
const sendTitle = disabled && sendDisabledTitle ? sendDisabledTitle : sendBlockedReason ?? void 0;
|
|
63
|
-
|
|
66
|
+
const sendControl = /* @__PURE__ */ jsx(
|
|
64
67
|
SendButton,
|
|
65
68
|
{
|
|
66
69
|
action,
|
|
@@ -69,6 +72,13 @@ const ComposerSendOrStop = ({
|
|
|
69
72
|
title: sendTitle
|
|
70
73
|
}
|
|
71
74
|
);
|
|
75
|
+
if (liveSession !== null) {
|
|
76
|
+
return /* @__PURE__ */ jsxs(Fragment, { children: [
|
|
77
|
+
stopControl,
|
|
78
|
+
sendControl
|
|
79
|
+
] });
|
|
80
|
+
}
|
|
81
|
+
return sendControl;
|
|
72
82
|
};
|
|
73
83
|
export {
|
|
74
84
|
ComposerSendOrStop
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"composer-send-or-stop.js","sources":["../../../src/chat-ui/thread/composer-send-or-stop.tsx"],"sourcesContent":["import { athenaDiagnostics } from \"../../diagnostics/athena-diagnostics\";\nimport { useAui, useAuiState } from \"@assistant-ui/react\";\nimport type { FC, RefObject } from \"react\";\nimport { useCallback } from \"react\";\nimport {\n resolveComposerAction,\n type ComposerAction,\n} from \"../composer/composer-action\";\nimport {\n ComposerSendButton,\n ComposerStopButton,\n type ComposerSendButtonProps,\n type ComposerStopButtonProps,\n} from \"../messages/message-components\";\n\n/**\n * The slice of a composer handle this control needs: something whose draft\n * can be submitted. `TiptapComposerHandle` satisfies it; hosts with their own\n * editor plumbing (the SDK's AthenaChat) expose a compatible handle.\n */\nexport interface ComposerSubmitHandle {\n submit: () => void | Promise<void>;\n}\n\nexport interface ComposerStopControls {\n /**\n * Cancels the active run via the runtime. Returns false when cancellation\n * threw (e.g. the run already settled), so hosts can report whether their\n * own teardown still needs to stop backend work.\n */\n cancelRun: () => boolean;\n}\n\n/**\n * Control renderers, for hosts with their own published theming contract\n * (AthenaChat's `aui-*` class system). Defaults render the shared buttons.\n */\nexport interface ComposerSendOrStopComponents {\n SendButton?: FC<ComposerSendButtonProps>;\n StopButton?: FC<ComposerStopButtonProps>;\n}\n\nexport interface ComposerSendOrStopProps {\n composerRef: RefObject<ComposerSubmitHandle | null>;\n hasDraft: boolean;\n /** A plain draft enters the live voice conversation instead of the run queue. */\n liveVoice?: boolean;\n /** Disables both send and stop (e.g. while a conversation restores). */\n disabled?: boolean;\n /**\n * Blocks sending (not stopping) with this reason as the tooltip — e.g. a\n * broken host tunnel that would make tool calls silently fail.\n */\n sendBlockedReason?: string | null;\n /** Tooltip for the send/queue control while `disabled`. */\n sendDisabledTitle?: string;\n /** Tooltip for the stop control while `disabled`. */\n stopDisabledTitle?: string;\n /**\n * Host work to run before the draft submits (per-turn bookkeeping).\n * `action` distinguishes a fresh send from queueing into an active run.\n */\n onBeforeSend?: (context: {\n action: Extract<ComposerAction, \"send\" | \"queue\">;\n }) => void | Promise<void>;\n /**\n * Full custom stop sequence. Hosts that must tear down in-flight host-side\n * work sequence it around `controls.cancelRun()`. Default: cancel the run.\n */\n onStop?: (controls: ComposerStopControls) => void;\n components?: ComposerSendOrStopComponents;\n}\n\n/**\n * The shared send/queue/stop control: sends the composer draft, queues it as\n * a follow-up while a run is in flight, or stops the run when there is\n * nothing to queue.\n */\nexport const ComposerSendOrStop: FC<ComposerSendOrStopProps> = ({\n composerRef,\n hasDraft,\n liveVoice = false,\n disabled = false,\n sendBlockedReason = null,\n sendDisabledTitle,\n stopDisabledTitle,\n onBeforeSend,\n onStop,\n components,\n}) => {\n const aui = useAui();\n const isRunning = useAuiState(\n (state) => state.optional.thread?.isRunning ?? false,\n );\n const action
|
|
1
|
+
{"version":3,"file":"composer-send-or-stop.js","sources":["../../../src/chat-ui/thread/composer-send-or-stop.tsx"],"sourcesContent":["import { athenaDiagnostics } from \"../../diagnostics/athena-diagnostics\";\nimport { useAui, useAuiState } from \"@assistant-ui/react\";\nimport type { FC, RefObject } from \"react\";\nimport { useCallback } from \"react\";\nimport {\n resolveComposerAction,\n type ComposerAction,\n} from \"../composer/composer-action\";\nimport {\n ComposerSendButton,\n ComposerStopButton,\n type ComposerSendButtonProps,\n type ComposerStopButtonProps,\n} from \"../messages/message-components\";\n\n/**\n * The slice of a composer handle this control needs: something whose draft\n * can be submitted. `TiptapComposerHandle` satisfies it; hosts with their own\n * editor plumbing (the SDK's AthenaChat) expose a compatible handle.\n */\nexport interface ComposerSubmitHandle {\n submit: () => void | Promise<void>;\n}\n\nexport interface ComposerStopControls {\n /**\n * Cancels the active run via the runtime. Returns false when cancellation\n * threw (e.g. the run already settled), so hosts can report whether their\n * own teardown still needs to stop backend work.\n */\n cancelRun: () => boolean;\n}\n\n/**\n * Control renderers, for hosts with their own published theming contract\n * (AthenaChat's `aui-*` class system). Defaults render the shared buttons.\n */\nexport interface ComposerSendOrStopComponents {\n SendButton?: FC<ComposerSendButtonProps>;\n StopButton?: FC<ComposerStopButtonProps>;\n}\n\nexport interface ComposerSendOrStopProps {\n composerRef: RefObject<ComposerSubmitHandle | null>;\n hasDraft: boolean;\n /** A plain draft enters the live voice conversation instead of the run queue. */\n liveVoice?: boolean;\n /**\n * A live session (voice, connecting or live) the Stop control also ends.\n * With it, an empty draft shows Stop even when no run is in flight, and\n * Stop ends the session AND cancels any run: one control stops everything.\n */\n liveSession?: { end: () => void } | null;\n /** Disables both send and stop (e.g. while a conversation restores). */\n disabled?: boolean;\n /**\n * Blocks sending (not stopping) with this reason as the tooltip — e.g. a\n * broken host tunnel that would make tool calls silently fail.\n */\n sendBlockedReason?: string | null;\n /** Tooltip for the send/queue control while `disabled`. */\n sendDisabledTitle?: string;\n /** Tooltip for the stop control while `disabled`. */\n stopDisabledTitle?: string;\n /**\n * Host work to run before the draft submits (per-turn bookkeeping).\n * `action` distinguishes a fresh send from queueing into an active run.\n */\n onBeforeSend?: (context: {\n action: Extract<ComposerAction, \"send\" | \"queue\">;\n }) => void | Promise<void>;\n /**\n * Full custom stop sequence. Hosts that must tear down in-flight host-side\n * work sequence it around `controls.cancelRun()`. Default: cancel the run.\n */\n onStop?: (controls: ComposerStopControls) => void;\n components?: ComposerSendOrStopComponents;\n}\n\n/**\n * The shared send/queue/stop control: sends the composer draft, queues it as\n * a follow-up while a run is in flight, or stops the run when there is\n * nothing to queue.\n */\nexport const ComposerSendOrStop: FC<ComposerSendOrStopProps> = ({\n composerRef,\n hasDraft,\n liveVoice = false,\n liveSession = null,\n disabled = false,\n sendBlockedReason = null,\n sendDisabledTitle,\n stopDisabledTitle,\n onBeforeSend,\n onStop,\n components,\n}) => {\n const aui = useAui();\n const isRunning = useAuiState(\n (state) => state.optional.thread?.isRunning ?? false,\n );\n // A draft sends (into the live voice conversation, or as a run) or queues\n // behind a run; only an empty draft turns the control into Stop, and a\n // live session alone is enough for that.\n const action: ComposerAction =\n liveVoice && hasDraft\n ? \"send\"\n : !hasDraft && liveSession !== null\n ? \"stop\"\n : resolveComposerAction({ hasDraft, isRunning });\n const SendButton = components?.SendButton ?? ComposerSendButton;\n const StopButton = components?.StopButton ?? ComposerStopButton;\n\n const cancelRun = useCallback((): boolean => {\n try {\n aui.thread.cancelRun();\n return true;\n } catch (error) {\n athenaDiagnostics.emit(\"composer.cancel.error\", {\n level: \"warn\",\n data: { error: error instanceof Error ? error.message : String(error) },\n });\n return false;\n }\n }, [aui]);\n\n // With only a session to end, a cancel would find no run to stop.\n const stopRun = (): boolean => (isRunning ? cancelRun() : true);\n const stopEverything = () => {\n liveSession?.end();\n if (onStop) {\n onStop({ cancelRun: stopRun });\n } else {\n stopRun();\n }\n };\n const stopControl = (\n <StopButton\n onStop={stopEverything}\n disabled={disabled}\n title={\n disabled && stopDisabledTitle\n ? stopDisabledTitle\n : liveSession\n ? \"Stop\"\n : undefined\n }\n />\n );\n\n if (action === \"stop\") return stopControl;\n\n const handleSend = async () => {\n await onBeforeSend?.({ action });\n await composerRef.current?.submit();\n };\n const sendTitle =\n disabled && sendDisabledTitle\n ? sendDisabledTitle\n : (sendBlockedReason ?? undefined);\n const sendControl = (\n <SendButton\n action={action}\n onSend={() => void handleSend()}\n disabled={disabled || !hasDraft || sendBlockedReason != null}\n title={sendTitle}\n />\n );\n // A live session keeps its Stop beside Send while a draft is typed, so the\n // call (and any run) can end without sending or discarding the words; the\n // draft stays in the composer.\n if (liveSession !== null) {\n return (\n <>\n {stopControl}\n {sendControl}\n </>\n );\n }\n return sendControl;\n};\n"],"names":[],"mappings":";;;;;;AAoFO,MAAM,qBAAkD,CAAC;AAAA,EAC9D;AAAA,EACA;AAAA,EACA,YAAY;AAAA,EACZ,cAAc;AAAA,EACd,WAAW;AAAA,EACX,oBAAoB;AAAA,EACpB;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,MAAM;AACJ,QAAM,MAAM,OAAA;AACZ,QAAM,YAAY;AAAA,IAChB,CAAC,UAAA;;AAAU,0BAAM,SAAS,WAAf,mBAAuB,cAAa;AAAA;AAAA,EAAA;AAKjD,QAAM,SACJ,aAAa,WACT,SACA,CAAC,YAAY,gBAAgB,OAC3B,SACA,sBAAsB,EAAE,UAAU,WAAW;AACrD,QAAM,cAAa,yCAAY,eAAc;AAC7C,QAAM,cAAa,yCAAY,eAAc;AAE7C,QAAM,YAAY,YAAY,MAAe;AAC3C,QAAI;AACF,UAAI,OAAO,UAAA;AACX,aAAO;AAAA,IACT,SAAS,OAAO;AACd,wBAAkB,KAAK,yBAAyB;AAAA,QAC9C,OAAO;AAAA,QACP,MAAM,EAAE,OAAO,iBAAiB,QAAQ,MAAM,UAAU,OAAO,KAAK,EAAA;AAAA,MAAE,CACvE;AACD,aAAO;AAAA,IACT;AAAA,EACF,GAAG,CAAC,GAAG,CAAC;AAGR,QAAM,UAAU,MAAgB,YAAY,UAAA,IAAc;AAC1D,QAAM,iBAAiB,MAAM;AAC3B,+CAAa;AACb,QAAI,QAAQ;AACV,aAAO,EAAE,WAAW,SAAS;AAAA,IAC/B,OAAO;AACL,cAAA;AAAA,IACF;AAAA,EACF;AACA,QAAM,cACJ;AAAA,IAAC;AAAA,IAAA;AAAA,MACC,QAAQ;AAAA,MACR;AAAA,MACA,OACE,YAAY,oBACR,oBACA,cACE,SACA;AAAA,IAAA;AAAA,EAAA;AAKZ,MAAI,WAAW,OAAQ,QAAO;AAE9B,QAAM,aAAa,YAAY;;AAC7B,WAAM,6CAAe,EAAE;AACvB,YAAM,iBAAY,YAAZ,mBAAqB;AAAA,EAC7B;AACA,QAAM,YACJ,YAAY,oBACR,oBACC,qBAAqB;AAC5B,QAAM,cACJ;AAAA,IAAC;AAAA,IAAA;AAAA,MACC;AAAA,MACA,QAAQ,MAAM,KAAK,WAAA;AAAA,MACnB,UAAU,YAAY,CAAC,YAAY,qBAAqB;AAAA,MACxD,OAAO;AAAA,IAAA;AAAA,EAAA;AAMX,MAAI,gBAAgB,MAAM;AACxB,WACE,qBAAA,UAAA,EACG,UAAA;AAAA,MAAA;AAAA,MACA;AAAA,IAAA,GACH;AAAA,EAEJ;AACA,SAAO;AACT;"}
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
|
|
3
3
|
const jsxRuntime = require("react/jsx-runtime");
|
|
4
4
|
const react = require("@assistant-ui/react");
|
|
5
|
-
const
|
|
5
|
+
const require$$0 = require("react");
|
|
6
6
|
const statewireHistoryContext = require("../../provider/statewire-history-context.cjs");
|
|
7
7
|
const statewireWindowContext = require("../../provider/statewire-window-context.cjs");
|
|
8
8
|
const threadIdContext = require("../../threads/thread-id-context.cjs");
|
|
@@ -24,11 +24,11 @@ function useMessagesNearViewport({
|
|
|
24
24
|
hasViewport,
|
|
25
25
|
messages
|
|
26
26
|
}) {
|
|
27
|
-
const [nearIds, setNearIds] =
|
|
27
|
+
const [nearIds, setNearIds] = require$$0.useState(NO_MESSAGE_IDS);
|
|
28
28
|
const observable = hasViewport && typeof IntersectionObserver !== "undefined";
|
|
29
|
-
const trackRef =
|
|
30
|
-
const renderedIdsRef =
|
|
31
|
-
|
|
29
|
+
const trackRef = require$$0.useRef(null);
|
|
30
|
+
const renderedIdsRef = require$$0.useRef(NO_MESSAGE_IDS);
|
|
31
|
+
require$$0.useEffect(() => {
|
|
32
32
|
if (!viewport || !observable) return void 0;
|
|
33
33
|
const near = /* @__PURE__ */ new Set();
|
|
34
34
|
const observed = /* @__PURE__ */ new Set();
|
|
@@ -51,12 +51,11 @@ function useMessagesNearViewport({
|
|
|
51
51
|
{ root: viewport, rootMargin: `${HISTORY_EDGE_NEAR_MARGIN_PX}px 0px` }
|
|
52
52
|
);
|
|
53
53
|
const track = () => {
|
|
54
|
-
let dropped = false;
|
|
55
54
|
for (const element of observed) {
|
|
56
55
|
if (element.isConnected) continue;
|
|
57
56
|
intersections.unobserve(element);
|
|
58
57
|
observed.delete(element);
|
|
59
|
-
|
|
58
|
+
near.delete(element);
|
|
60
59
|
}
|
|
61
60
|
const rendered = /* @__PURE__ */ new Set();
|
|
62
61
|
for (const element of viewport.querySelectorAll(MESSAGE_SELECTOR)) {
|
|
@@ -67,7 +66,7 @@ function useMessagesNearViewport({
|
|
|
67
66
|
intersections.observe(element);
|
|
68
67
|
}
|
|
69
68
|
renderedIdsRef.current = rendered;
|
|
70
|
-
|
|
69
|
+
publish();
|
|
71
70
|
};
|
|
72
71
|
trackRef.current = track;
|
|
73
72
|
track();
|
|
@@ -78,11 +77,11 @@ function useMessagesNearViewport({
|
|
|
78
77
|
setNearIds(NO_MESSAGE_IDS);
|
|
79
78
|
};
|
|
80
79
|
}, [viewport, observable]);
|
|
81
|
-
|
|
80
|
+
require$$0.useEffect(() => {
|
|
82
81
|
var _a;
|
|
83
82
|
(_a = trackRef.current) == null ? void 0 : _a.call(trackRef);
|
|
84
83
|
}, [messages]);
|
|
85
|
-
return
|
|
84
|
+
return require$$0.useMemo(() => {
|
|
86
85
|
if (!observable) return void 0;
|
|
87
86
|
return (messageId) => {
|
|
88
87
|
if (viewport === null) return false;
|
|
@@ -110,7 +109,7 @@ function prependedOlderHistory({
|
|
|
110
109
|
(source, index) => index > 0 && (source == null ? void 0 : source.id) === previousOldest
|
|
111
110
|
);
|
|
112
111
|
}
|
|
113
|
-
class KeepReadingPlace extends
|
|
112
|
+
class KeepReadingPlace extends require$$0.Component {
|
|
114
113
|
getSnapshotBeforeUpdate(previous) {
|
|
115
114
|
const { viewport, threadId, messages } = this.props;
|
|
116
115
|
if (viewport === null || viewport !== previous.viewport || threadId !== previous.threadId || messages === previous.messages || !prependedOlderHistory({ previous: previous.messages, next: messages })) {
|
|
@@ -143,7 +142,7 @@ const HistoryEdgeRow = ({
|
|
|
143
142
|
ref: rowRef,
|
|
144
143
|
"data-testid": "thread-history-edge",
|
|
145
144
|
className: cnfast.cn(
|
|
146
|
-
"flex w-full max-w-(--thread-max-width) items-center justify-center py-1 text-xs text-muted-foreground",
|
|
145
|
+
"mx-auto flex w-full max-w-(--thread-max-width) items-center justify-center py-1 text-xs text-muted-foreground",
|
|
147
146
|
className
|
|
148
147
|
),
|
|
149
148
|
children: loading ? /* @__PURE__ */ jsxRuntime.jsx("span", { "data-testid": "thread-history-edge-loading", children: "Loading earlier messages…" }) : canLoadOlder ? /* @__PURE__ */ jsxRuntime.jsx(
|
|
@@ -167,11 +166,11 @@ const StatewireHistoryEdge = ({
|
|
|
167
166
|
const providerToolOutputs = statewireWindowContext.useStatewireToolOutputs();
|
|
168
167
|
const toolOutputs = toolOutputsProp ?? providerToolOutputs ?? void 0;
|
|
169
168
|
const messages = react.useAuiState((s) => s.thread.messages);
|
|
170
|
-
const threadId =
|
|
171
|
-
const [nearTop, setNearTop] =
|
|
172
|
-
const [nearTopEpoch, setNearTopEpoch] =
|
|
173
|
-
const nearTopRef =
|
|
174
|
-
const [rowEl, setRowEl] =
|
|
169
|
+
const threadId = require$$0.useContext(threadIdContext.AthenaStatewireThreadIdContext);
|
|
170
|
+
const [nearTop, setNearTop] = require$$0.useState(false);
|
|
171
|
+
const [nearTopEpoch, setNearTopEpoch] = require$$0.useState(0);
|
|
172
|
+
const nearTopRef = require$$0.useRef(false);
|
|
173
|
+
const [rowEl, setRowEl] = require$$0.useState(null);
|
|
175
174
|
const hasViewportStore = react.useThreadViewportStore({ optional: true }) !== null;
|
|
176
175
|
const registeredViewport = react.useThreadViewport({
|
|
177
176
|
optional: true,
|
|
@@ -183,7 +182,7 @@ const StatewireHistoryEdge = ({
|
|
|
183
182
|
hasViewport: hasViewportStore || viewport !== null,
|
|
184
183
|
messages
|
|
185
184
|
});
|
|
186
|
-
const historyStore =
|
|
185
|
+
const historyStore = require$$0.useContext(statewireHistoryContext.StatewireHistoryContext);
|
|
187
186
|
const { hasOlder, canLoadOlder, loading, loadOlder } = useDeepAgentWindowSync.useDeepAgentWindowSync({
|
|
188
187
|
messages,
|
|
189
188
|
toolOutputs,
|
|
@@ -197,18 +196,18 @@ const StatewireHistoryEdge = ({
|
|
|
197
196
|
console.warn(`[StatewireHistoryEdge] ${command} failed:`, error);
|
|
198
197
|
}
|
|
199
198
|
});
|
|
200
|
-
|
|
199
|
+
require$$0.useEffect(() => {
|
|
201
200
|
if (!historyStore || !threadId) return void 0;
|
|
202
201
|
historyStore.set({ threadId, hasOlder, canLoadOlder, loading, loadOlder });
|
|
203
202
|
return void 0;
|
|
204
203
|
}, [historyStore, threadId, hasOlder, canLoadOlder, loading, loadOlder]);
|
|
205
|
-
|
|
204
|
+
require$$0.useEffect(() => {
|
|
206
205
|
if (!historyStore || !threadId) return void 0;
|
|
207
206
|
return () => {
|
|
208
207
|
if (historyStore.get().threadId === threadId) historyStore.set(statewireHistoryContext.NO_STATEWIRE_HISTORY);
|
|
209
208
|
};
|
|
210
209
|
}, [historyStore, threadId]);
|
|
211
|
-
|
|
210
|
+
require$$0.useEffect(() => {
|
|
212
211
|
if (!rowEl || !hasOlder || typeof IntersectionObserver === "undefined") return;
|
|
213
212
|
const observer = new IntersectionObserver(
|
|
214
213
|
(entries) => {
|