@athenaintel/react 0.42.2 → 0.48.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +225 -3
- package/dist/agent-runtime/src/answer-label.cjs +137 -0
- package/dist/agent-runtime/src/answer-label.cjs.map +1 -0
- package/dist/agent-runtime/src/answer-label.d.ts +104 -0
- package/dist/agent-runtime/src/answer-label.js +137 -0
- package/dist/agent-runtime/src/answer-label.js.map +1 -0
- package/dist/agent-runtime/src/answer-rows.cjs +180 -0
- package/dist/agent-runtime/src/answer-rows.cjs.map +1 -0
- package/dist/agent-runtime/src/answer-rows.d.ts +86 -0
- package/dist/agent-runtime/src/answer-rows.js +180 -0
- package/dist/agent-runtime/src/answer-rows.js.map +1 -0
- package/dist/agent-runtime/src/client-tool-bridge.cjs +15 -15
- package/dist/agent-runtime/src/client-tool-bridge.cjs.map +1 -1
- package/dist/agent-runtime/src/conversation-index.cjs +8 -8
- package/dist/agent-runtime/src/conversation-index.cjs.map +1 -1
- package/dist/agent-runtime/src/conversation-list-groups.d.ts +74 -0
- package/dist/agent-runtime/src/decision-checks.cjs +207 -0
- package/dist/agent-runtime/src/decision-checks.cjs.map +1 -0
- package/dist/agent-runtime/src/decision-checks.d.ts +142 -0
- package/dist/agent-runtime/src/decision-checks.js +207 -0
- package/dist/agent-runtime/src/decision-checks.js.map +1 -0
- package/dist/agent-runtime/src/desktop-handoff.d.ts +12 -0
- package/dist/agent-runtime/src/errors.cjs +18 -0
- package/dist/agent-runtime/src/errors.cjs.map +1 -1
- package/dist/agent-runtime/src/errors.d.ts +7 -0
- package/dist/agent-runtime/src/errors.js +18 -0
- package/dist/agent-runtime/src/errors.js.map +1 -1
- package/dist/agent-runtime/src/generated/runconfig-contract.cjs +12 -0
- package/dist/agent-runtime/src/generated/runconfig-contract.cjs.map +1 -1
- package/dist/agent-runtime/src/generated/runconfig-contract.d.ts +6 -6
- package/dist/agent-runtime/src/generated/runconfig-contract.js +12 -0
- package/dist/agent-runtime/src/generated/runconfig-contract.js.map +1 -1
- package/dist/agent-runtime/src/handoff-arrival.cjs +60 -0
- package/dist/agent-runtime/src/handoff-arrival.cjs.map +1 -0
- package/dist/agent-runtime/src/handoff-arrival.d.ts +46 -0
- package/dist/agent-runtime/src/handoff-arrival.js +60 -0
- package/dist/agent-runtime/src/handoff-arrival.js.map +1 -0
- package/dist/agent-runtime/src/index.d.ts +15 -8
- package/dist/agent-runtime/src/interrupts.cjs +43 -18
- package/dist/agent-runtime/src/interrupts.cjs.map +1 -1
- package/dist/agent-runtime/src/interrupts.d.ts +19 -2
- package/dist/agent-runtime/src/interrupts.js +28 -3
- package/dist/agent-runtime/src/interrupts.js.map +1 -1
- package/dist/agent-runtime/src/lane-history.cjs +8 -8
- package/dist/agent-runtime/src/lane-history.cjs.map +1 -1
- package/dist/agent-runtime/src/messages.cjs +43 -8
- package/dist/agent-runtime/src/messages.cjs.map +1 -1
- package/dist/agent-runtime/src/messages.d.ts +25 -3
- package/dist/agent-runtime/src/messages.js +43 -8
- package/dist/agent-runtime/src/messages.js.map +1 -1
- package/dist/agent-runtime/src/offline-status.cjs +36 -0
- package/dist/agent-runtime/src/offline-status.cjs.map +1 -0
- package/dist/agent-runtime/src/offline-status.d.ts +118 -3
- package/dist/agent-runtime/src/offline-status.js +36 -0
- package/dist/agent-runtime/src/offline-status.js.map +1 -0
- package/dist/agent-runtime/src/queue.cjs +0 -9
- package/dist/agent-runtime/src/queue.cjs.map +1 -1
- package/dist/agent-runtime/src/queue.js +0 -9
- package/dist/agent-runtime/src/queue.js.map +1 -1
- package/dist/agent-runtime/src/quota-safe-local-storage-session.cjs +9 -9
- package/dist/agent-runtime/src/quota-safe-local-storage-session.cjs.map +1 -1
- package/dist/agent-runtime/src/runtime-catalog.cjs +42 -0
- package/dist/agent-runtime/src/runtime-catalog.cjs.map +1 -0
- package/dist/agent-runtime/src/runtime-catalog.d.ts +35 -0
- package/dist/agent-runtime/src/runtime-catalog.js +42 -0
- package/dist/agent-runtime/src/runtime-catalog.js.map +1 -0
- package/dist/agent-runtime/src/runtime-messages.cjs.map +1 -1
- package/dist/agent-runtime/src/runtime-messages.d.ts +1 -1
- package/dist/agent-runtime/src/runtime-messages.js.map +1 -1
- package/dist/agent-runtime/src/runtime.d.ts +40 -0
- package/dist/agent-runtime/src/statewire-suspended.cjs +3 -3
- package/dist/agent-runtime/src/statewire-suspended.cjs.map +1 -1
- package/dist/agent-runtime/src/subagents.cjs +32 -2
- package/dist/agent-runtime/src/subagents.cjs.map +1 -1
- package/dist/agent-runtime/src/subagents.d.ts +9 -0
- package/dist/agent-runtime/src/subagents.js +30 -0
- package/dist/agent-runtime/src/subagents.js.map +1 -1
- package/dist/agent-runtime/src/thread-driver.cjs +67 -0
- package/dist/agent-runtime/src/thread-driver.cjs.map +1 -0
- package/dist/agent-runtime/src/thread-driver.d.ts +49 -0
- package/dist/agent-runtime/src/thread-driver.js +67 -0
- package/dist/agent-runtime/src/thread-driver.js.map +1 -0
- package/dist/agent-runtime/src/thread-handoff-flow-machine.d.ts +172 -0
- package/dist/agent-runtime/src/thread-handoff-protocol.d.ts +756 -0
- package/dist/agent-runtime/src/thread-handoff-qr.d.ts +11 -0
- package/dist/agent-runtime/src/thread-handoff.d.ts +3 -364
- package/dist/agent-runtime/src/thread-status.cjs +3 -3
- package/dist/agent-runtime/src/thread-status.cjs.map +1 -1
- package/dist/agent-runtime/src/tool-metadata.cjs +210 -33
- package/dist/agent-runtime/src/tool-metadata.cjs.map +1 -1
- package/dist/agent-runtime/src/tool-metadata.d.ts +12 -0
- package/dist/agent-runtime/src/tool-metadata.js +210 -33
- package/dist/agent-runtime/src/tool-metadata.js.map +1 -1
- package/dist/agent-runtime/src/tool-names.cjs +2 -0
- package/dist/agent-runtime/src/tool-names.cjs.map +1 -1
- package/dist/agent-runtime/src/tool-names.d.ts +2 -0
- package/dist/agent-runtime/src/tool-names.js +2 -0
- package/dist/agent-runtime/src/tool-names.js.map +1 -1
- package/dist/agent-runtime/src/types.d.ts +10 -2
- package/dist/agent-runtime/src/use-conversation-list.cjs +11 -11
- package/dist/agent-runtime/src/use-conversation-list.cjs.map +1 -1
- package/dist/agent-runtime/src/use-deep-agent-chat-outbox.cjs +24 -19
- package/dist/agent-runtime/src/use-deep-agent-chat-outbox.cjs.map +1 -1
- package/dist/agent-runtime/src/use-deep-agent-chat-outbox.d.ts +2 -1
- package/dist/agent-runtime/src/use-deep-agent-chat-outbox.js +6 -1
- package/dist/agent-runtime/src/use-deep-agent-chat-outbox.js.map +1 -1
- package/dist/agent-runtime/src/use-deep-agent-config.cjs +14 -14
- package/dist/agent-runtime/src/use-deep-agent-config.cjs.map +1 -1
- package/dist/agent-runtime/src/use-deep-agent-edit-submit.cjs +6 -6
- package/dist/agent-runtime/src/use-deep-agent-edit-submit.cjs.map +1 -1
- package/dist/agent-runtime/src/use-deep-agent-runtime.cjs +16 -16
- package/dist/agent-runtime/src/use-deep-agent-runtime.cjs.map +1 -1
- package/dist/agent-runtime/src/use-deep-agent-thread.cjs +45 -45
- package/dist/agent-runtime/src/use-deep-agent-thread.cjs.map +1 -1
- package/dist/agent-runtime/src/use-deep-agent-voice.cjs +572 -134
- package/dist/agent-runtime/src/use-deep-agent-voice.cjs.map +1 -1
- package/dist/agent-runtime/src/use-deep-agent-voice.d.ts +137 -10
- package/dist/agent-runtime/src/use-deep-agent-voice.js +514 -76
- package/dist/agent-runtime/src/use-deep-agent-voice.js.map +1 -1
- package/dist/agent-runtime/src/use-deep-agent-window-sync.cjs +26 -26
- package/dist/agent-runtime/src/use-deep-agent-window-sync.cjs.map +1 -1
- package/dist/agent-runtime/src/use-historical-edit-attachments.cjs +4 -4
- package/dist/agent-runtime/src/use-historical-edit-attachments.cjs.map +1 -1
- package/dist/agent-runtime/src/use-thread-handoff-flow.d.ts +28 -26
- package/dist/agent-runtime/src/voice-media.cjs +117 -0
- package/dist/agent-runtime/src/voice-media.cjs.map +1 -0
- package/dist/agent-runtime/src/voice-media.d.ts +49 -0
- package/dist/agent-runtime/src/voice-media.js +117 -0
- package/dist/agent-runtime/src/voice-media.js.map +1 -0
- package/dist/agent-runtime/src/voice-wire-types.d.ts +32 -0
- package/dist/assets/AssetPanel.cjs +11 -11
- package/dist/assets/AssetPanel.cjs.map +1 -1
- package/dist/assets/AthenaAssetEmbed.cjs +11 -9
- package/dist/assets/AthenaAssetEmbed.cjs.map +1 -1
- package/dist/assets/AthenaAssetEmbed.d.ts +7 -0
- package/dist/assets/AthenaAssetEmbed.js +4 -2
- package/dist/assets/AthenaAssetEmbed.js.map +1 -1
- package/dist/assets/AthenaLayout.cjs +16 -16
- package/dist/assets/AthenaLayout.cjs.map +1 -1
- package/dist/assets/use-asset-content.cjs +4 -4
- package/dist/assets/use-asset-content.cjs.map +1 -1
- package/dist/assets/use-asset-embed.cjs +14 -7
- package/dist/assets/use-asset-embed.cjs.map +1 -1
- package/dist/assets/use-asset-embed.d.ts +11 -1
- package/dist/assets/use-asset-embed.js +10 -3
- package/dist/assets/use-asset-embed.js.map +1 -1
- package/dist/auth/AthenaAuthContext.cjs +3 -3
- package/dist/auth/AthenaAuthContext.cjs.map +1 -1
- package/dist/auth/AthenaAuthProvider.cjs +8 -8
- package/dist/auth/AthenaAuthProvider.cjs.map +1 -1
- package/dist/auth/AthenaCredentialSourceContext.cjs +5 -5
- package/dist/auth/AthenaCredentialSourceContext.cjs.map +1 -1
- package/dist/auth/AthenaSSOProvider.cjs +14 -14
- package/dist/auth/AthenaSSOProvider.cjs.map +1 -1
- package/dist/auth/credential-source.cjs +26 -13
- package/dist/auth/credential-source.cjs.map +1 -1
- package/dist/auth/credential-source.d.ts +8 -0
- package/dist/auth/credential-source.js +26 -13
- package/dist/auth/credential-source.js.map +1 -1
- package/dist/catalog/agent-model-options.cjs +25 -17
- package/dist/catalog/agent-model-options.cjs.map +1 -1
- package/dist/catalog/agent-model-options.d.ts +38 -5
- package/dist/catalog/agent-model-options.js +25 -17
- package/dist/catalog/agent-model-options.js.map +1 -1
- package/dist/catalog/channel-refusal.cjs +36 -0
- package/dist/catalog/channel-refusal.cjs.map +1 -0
- package/dist/catalog/channel-refusal.d.ts +29 -0
- package/dist/catalog/channel-refusal.js +36 -0
- package/dist/catalog/channel-refusal.js.map +1 -0
- package/dist/catalog/chat-pickers.cjs +60 -24
- package/dist/catalog/chat-pickers.cjs.map +1 -1
- package/dist/catalog/chat-pickers.d.ts +12 -2
- package/dist/catalog/chat-pickers.js +56 -20
- package/dist/catalog/chat-pickers.js.map +1 -1
- package/dist/catalog/runtime-catalog.cjs +89 -23
- package/dist/catalog/runtime-catalog.cjs.map +1 -1
- package/dist/catalog/runtime-catalog.d.ts +8 -2
- package/dist/catalog/runtime-catalog.js +83 -17
- package/dist/catalog/runtime-catalog.js.map +1 -1
- package/dist/catalog/use-athena-chat-mode.cjs +12 -12
- package/dist/catalog/use-athena-chat-mode.cjs.map +1 -1
- package/dist/chat/AthenaChat.cjs +155 -67
- package/dist/chat/AthenaChat.cjs.map +1 -1
- package/dist/chat/AthenaChat.d.ts +42 -2
- package/dist/chat/AthenaChat.js +106 -18
- package/dist/chat/AthenaChat.js.map +1 -1
- package/dist/chat/AthenaChatErrorBoundary.cjs +3 -3
- package/dist/chat/AthenaChatErrorBoundary.cjs.map +1 -1
- package/dist/chat/DrivingOnChip.cjs +23 -0
- package/dist/chat/DrivingOnChip.cjs.map +1 -0
- package/dist/chat/DrivingOnChip.d.ts +17 -0
- package/dist/chat/DrivingOnChip.js +23 -0
- package/dist/chat/DrivingOnChip.js.map +1 -0
- package/dist/chat/StatewireApprovalCard.cjs +125 -31
- package/dist/chat/StatewireApprovalCard.cjs.map +1 -1
- package/dist/chat/StatewireApprovalCard.d.ts +73 -1
- package/dist/chat/StatewireApprovalCard.js +115 -21
- package/dist/chat/StatewireApprovalCard.js.map +1 -1
- package/dist/chat/StatewireClientToolBridge.cjs +2 -2
- package/dist/chat/StatewireClientToolBridge.cjs.map +1 -1
- package/dist/chat/StatewireQueuedMessages.cjs +25 -63
- package/dist/chat/StatewireQueuedMessages.cjs.map +1 -1
- package/dist/chat/StatewireQueuedMessages.d.ts +11 -13
- package/dist/chat/StatewireQueuedMessages.js +16 -54
- package/dist/chat/StatewireQueuedMessages.js.map +1 -1
- package/dist/chat/WaitingOnYouBanner.cjs +3 -3
- package/dist/chat/WaitingOnYouBanner.cjs.map +1 -1
- package/dist/chat/athena-chat-welcome.cjs +2 -2
- package/dist/chat/athena-chat-welcome.cjs.map +1 -1
- package/dist/chat/athena-citation-links.cjs +5 -5
- package/dist/chat/athena-citation-links.cjs.map +1 -1
- package/dist/chat/athena-composer-controls.cjs +26 -16
- package/dist/chat/athena-composer-controls.cjs.map +1 -1
- package/dist/chat/athena-composer-controls.d.ts +6 -0
- package/dist/chat/athena-composer-controls.js +26 -16
- package/dist/chat/athena-composer-controls.js.map +1 -1
- package/dist/chat/athena-turn-end-status.cjs +42 -0
- package/dist/chat/athena-turn-end-status.cjs.map +1 -0
- package/dist/chat/athena-turn-end-status.d.ts +24 -0
- package/dist/chat/athena-turn-end-status.js +42 -0
- package/dist/chat/athena-turn-end-status.js.map +1 -0
- package/dist/chat/browser-decision-check.cjs +131 -0
- package/dist/chat/browser-decision-check.cjs.map +1 -0
- package/dist/chat/browser-decision-check.d.ts +61 -0
- package/dist/chat/browser-decision-check.js +131 -0
- package/dist/chat/browser-decision-check.js.map +1 -0
- package/dist/chat/chat-outbox-rows.cjs +3 -3
- package/dist/chat/chat-outbox-rows.cjs.map +1 -1
- package/dist/chat/chat-voice-controls.cjs +93 -28
- package/dist/chat/chat-voice-controls.cjs.map +1 -1
- package/dist/chat/chat-voice-controls.d.ts +36 -2
- package/dist/chat/chat-voice-controls.js +89 -24
- package/dist/chat/chat-voice-controls.js.map +1 -1
- package/dist/chat/composer-keyboard-hint.cjs +5 -5
- package/dist/chat/composer-keyboard-hint.cjs.map +1 -1
- package/dist/chat/device-operation.cjs +29 -0
- package/dist/chat/device-operation.cjs.map +1 -0
- package/dist/chat/device-operation.d.ts +34 -0
- package/dist/chat/device-operation.js +29 -0
- package/dist/chat/device-operation.js.map +1 -0
- package/dist/chat/super-grouping/CollapsibleGroup.cjs +14 -14
- package/dist/chat/super-grouping/CollapsibleGroup.cjs.map +1 -1
- package/dist/chat/super-grouping/GroupedMessageParts.cjs +4 -4
- package/dist/chat/super-grouping/GroupedMessageParts.cjs.map +1 -1
- package/dist/chat/super-grouping/SuperGroupingCard.cjs +60 -38
- package/dist/chat/super-grouping/SuperGroupingCard.cjs.map +1 -1
- package/dist/chat/super-grouping/SuperGroupingCard.d.ts +24 -4
- package/dist/chat/super-grouping/SuperGroupingCard.js +37 -15
- package/dist/chat/super-grouping/SuperGroupingCard.js.map +1 -1
- package/dist/chat/super-grouping/SuperGroupingTranscript.cjs +32 -32
- package/dist/chat/super-grouping/SuperGroupingTranscript.cjs.map +1 -1
- package/dist/chat/super-grouping/SuperGroupingTranscript.js +3 -3
- package/dist/chat/super-grouping/SuperGroupingTranscript.js.map +1 -1
- package/dist/chat/super-grouping/ToolTimeline.cjs +97 -37
- package/dist/chat/super-grouping/ToolTimeline.cjs.map +1 -1
- package/dist/chat/super-grouping/ToolTimeline.d.ts +14 -2
- package/dist/chat/super-grouping/ToolTimeline.js +94 -34
- package/dist/chat/super-grouping/ToolTimeline.js.map +1 -1
- package/dist/chat/super-grouping/activity-timeline.cjs +47 -12
- package/dist/chat/super-grouping/activity-timeline.cjs.map +1 -1
- package/dist/chat/super-grouping/activity-timeline.d.ts +21 -0
- package/dist/chat/super-grouping/activity-timeline.js +47 -12
- package/dist/chat/super-grouping/activity-timeline.js.map +1 -1
- package/dist/chat/super-grouping/grouping-function.cjs +4 -0
- package/dist/chat/super-grouping/grouping-function.cjs.map +1 -1
- package/dist/chat/super-grouping/grouping-function.d.ts +7 -0
- package/dist/chat/super-grouping/grouping-function.js +5 -1
- package/dist/chat/super-grouping/grouping-function.js.map +1 -1
- package/dist/chat/super-grouping/index.cjs +6 -0
- package/dist/chat/super-grouping/index.cjs.map +1 -1
- package/dist/chat/super-grouping/index.d.ts +6 -2
- package/dist/chat/super-grouping/index.js +7 -1
- package/dist/chat/super-grouping/index.js.map +1 -1
- package/dist/chat/super-grouping/timeline-step.cjs +61 -2
- package/dist/chat/super-grouping/timeline-step.cjs.map +1 -1
- package/dist/chat/super-grouping/timeline-step.d.ts +13 -1
- package/dist/chat/super-grouping/timeline-step.js +61 -2
- package/dist/chat/super-grouping/timeline-step.js.map +1 -1
- package/dist/chat/super-grouping/tool-part-placement.cjs +17 -0
- package/dist/chat/super-grouping/tool-part-placement.cjs.map +1 -0
- package/dist/chat/super-grouping/tool-part-placement.d.ts +22 -0
- package/dist/chat/super-grouping/tool-part-placement.js +17 -0
- package/dist/chat/super-grouping/tool-part-placement.js.map +1 -0
- package/dist/chat/thread-scroll-to-bottom.cjs +2 -2
- package/dist/chat/thread-scroll-to-bottom.cjs.map +1 -1
- package/dist/chat/thread-scroll-to-bottom.d.ts +10 -7
- package/dist/chat/thread-scroll-to-bottom.js +2 -2
- package/dist/chat/thread-scroll-to-bottom.js.map +1 -1
- package/dist/chat/tooltip-icon-button.cjs +2 -2
- package/dist/chat/tooltip-icon-button.cjs.map +1 -1
- package/dist/chat/use-athena-voice-live.cjs +11 -0
- package/dist/chat/use-athena-voice-live.cjs.map +1 -0
- package/dist/chat/use-athena-voice-live.d.ts +11 -0
- package/dist/chat/use-athena-voice-live.js +11 -0
- package/dist/chat/use-athena-voice-live.js.map +1 -0
- package/dist/chat/use-statewire-approval-request.cjs +56 -24
- package/dist/chat/use-statewire-approval-request.cjs.map +1 -1
- package/dist/chat/use-statewire-approval-request.d.ts +33 -4
- package/dist/chat/use-statewire-approval-request.js +41 -9
- package/dist/chat/use-statewire-approval-request.js.map +1 -1
- package/dist/chat-ui/auth/sign-in-card.cjs +2 -2
- package/dist/chat-ui/auth/sign-in-card.cjs.map +1 -1
- package/dist/chat-ui/composer/tiptap-composer.cjs +138 -107
- package/dist/chat-ui/composer/tiptap-composer.cjs.map +1 -1
- package/dist/chat-ui/composer/tiptap-composer.d.ts +20 -4
- package/dist/chat-ui/composer/tiptap-composer.js +85 -54
- package/dist/chat-ui/composer/tiptap-composer.js.map +1 -1
- package/dist/chat-ui/header/conversation-history-panel.cjs +49 -23
- package/dist/chat-ui/header/conversation-history-panel.cjs.map +1 -1
- package/dist/chat-ui/header/conversation-history-panel.d.ts +12 -1
- package/dist/chat-ui/header/conversation-history-panel.js +38 -12
- package/dist/chat-ui/header/conversation-history-panel.js.map +1 -1
- package/dist/chat-ui/index.cjs +18 -0
- package/dist/chat-ui/index.cjs.map +1 -1
- package/dist/chat-ui/index.d.ts +7 -1
- package/dist/chat-ui/index.js +18 -0
- package/dist/chat-ui/index.js.map +1 -1
- package/dist/chat-ui/mentions/mention-chip.cjs +147 -38
- package/dist/chat-ui/mentions/mention-chip.cjs.map +1 -1
- package/dist/chat-ui/mentions/mention-chip.d.ts +17 -1
- package/dist/chat-ui/mentions/mention-chip.js +146 -37
- package/dist/chat-ui/mentions/mention-chip.js.map +1 -1
- package/dist/chat-ui/mentions/suggestions/components/mention-suggestion-list.cjs +10 -9
- package/dist/chat-ui/mentions/suggestions/components/mention-suggestion-list.cjs.map +1 -1
- package/dist/chat-ui/mentions/suggestions/components/mention-suggestion-list.js +3 -2
- package/dist/chat-ui/mentions/suggestions/components/mention-suggestion-list.js.map +1 -1
- package/dist/chat-ui/mentions/suggestions/components/mention-suggestion-popup.cjs +2 -2
- package/dist/chat-ui/mentions/suggestions/components/mention-suggestion-popup.cjs.map +1 -1
- package/dist/chat-ui/mentions/suggestions/components/menu-list.cjs +29 -6
- package/dist/chat-ui/mentions/suggestions/components/menu-list.cjs.map +1 -1
- package/dist/chat-ui/mentions/suggestions/components/menu-list.d.ts +7 -1
- package/dist/chat-ui/mentions/suggestions/components/menu-list.js +25 -2
- package/dist/chat-ui/mentions/suggestions/components/menu-list.js.map +1 -1
- package/dist/chat-ui/mentions/suggestions/components/use-keyboard-navigation.cjs +2 -2
- package/dist/chat-ui/mentions/suggestions/components/use-keyboard-navigation.cjs.map +1 -1
- package/dist/chat-ui/mentions/suggestions/components/use-menu-navigation.cjs +2 -2
- package/dist/chat-ui/mentions/suggestions/components/use-menu-navigation.cjs.map +1 -1
- package/dist/chat-ui/mentions/suggestions/data/api-client.cjs +3 -3
- package/dist/chat-ui/mentions/suggestions/data/api-client.cjs.map +1 -1
- package/dist/chat-ui/mentions/suggestions/data/orchestrator.cjs +56 -2
- package/dist/chat-ui/mentions/suggestions/data/orchestrator.cjs.map +1 -1
- package/dist/chat-ui/mentions/suggestions/data/orchestrator.d.ts +12 -0
- package/dist/chat-ui/mentions/suggestions/data/orchestrator.js +56 -2
- package/dist/chat-ui/mentions/suggestions/data/orchestrator.js.map +1 -1
- package/dist/chat-ui/mentions/suggestions/data/sources/index.cjs +24 -3
- package/dist/chat-ui/mentions/suggestions/data/sources/index.cjs.map +1 -1
- package/dist/chat-ui/mentions/suggestions/data/sources/index.d.ts +7 -0
- package/dist/chat-ui/mentions/suggestions/data/sources/index.js +24 -3
- package/dist/chat-ui/mentions/suggestions/data/sources/index.js.map +1 -1
- package/dist/chat-ui/mentions/suggestions/data/use-mention-suggestions.cjs +35 -13
- package/dist/chat-ui/mentions/suggestions/data/use-mention-suggestions.cjs.map +1 -1
- package/dist/chat-ui/mentions/suggestions/data/use-mention-suggestions.d.ts +15 -1
- package/dist/chat-ui/mentions/suggestions/data/use-mention-suggestions.js +28 -6
- package/dist/chat-ui/mentions/suggestions/data/use-mention-suggestions.js.map +1 -1
- package/dist/chat-ui/mentions/suggestions/data/use-menu-items.cjs +9 -6
- package/dist/chat-ui/mentions/suggestions/data/use-menu-items.cjs.map +1 -1
- package/dist/chat-ui/mentions/suggestions/data/use-menu-items.d.ts +3 -0
- package/dist/chat-ui/mentions/suggestions/data/use-menu-items.js +5 -2
- package/dist/chat-ui/mentions/suggestions/data/use-menu-items.js.map +1 -1
- package/dist/chat-ui/mentions/use-account-workspace-id.cjs +45 -10
- package/dist/chat-ui/mentions/use-account-workspace-id.cjs.map +1 -1
- package/dist/chat-ui/mentions/use-account-workspace-id.d.ts +24 -1
- package/dist/chat-ui/mentions/use-account-workspace-id.js +46 -11
- package/dist/chat-ui/mentions/use-account-workspace-id.js.map +1 -1
- package/dist/chat-ui/mentions/use-member-avatar.cjs +4 -4
- package/dist/chat-ui/mentions/use-member-avatar.cjs.map +1 -1
- package/dist/chat-ui/mentions/use-mention-asset.cjs +140 -0
- package/dist/chat-ui/mentions/use-mention-asset.cjs.map +1 -0
- package/dist/chat-ui/mentions/use-mention-asset.d.ts +16 -0
- package/dist/chat-ui/mentions/use-mention-asset.js +140 -0
- package/dist/chat-ui/mentions/use-mention-asset.js.map +1 -0
- package/dist/chat-ui/messages/answer-label.cjs +42 -0
- package/dist/chat-ui/messages/answer-label.cjs.map +1 -0
- package/dist/chat-ui/messages/answer-label.d.ts +33 -0
- package/dist/chat-ui/messages/answer-label.js +42 -0
- package/dist/chat-ui/messages/answer-label.js.map +1 -0
- package/dist/chat-ui/messages/arrival-animation.cjs +13 -0
- package/dist/chat-ui/messages/arrival-animation.cjs.map +1 -0
- package/dist/chat-ui/messages/arrival-animation.d.ts +14 -0
- package/dist/chat-ui/messages/arrival-animation.js +13 -0
- package/dist/chat-ui/messages/arrival-animation.js.map +1 -0
- package/dist/chat-ui/messages/continue-pill.cjs +5 -5
- package/dist/chat-ui/messages/continue-pill.cjs.map +1 -1
- package/dist/chat-ui/messages/handoff-arrival-divider.cjs +44 -0
- package/dist/chat-ui/messages/handoff-arrival-divider.cjs.map +1 -0
- package/dist/chat-ui/messages/handoff-arrival-divider.d.ts +17 -0
- package/dist/chat-ui/messages/handoff-arrival-divider.js +44 -0
- package/dist/chat-ui/messages/handoff-arrival-divider.js.map +1 -0
- package/dist/chat-ui/messages/message-actions-config.cjs +3 -3
- package/dist/chat-ui/messages/message-actions-config.cjs.map +1 -1
- package/dist/chat-ui/messages/message-components.cjs +8 -4
- package/dist/chat-ui/messages/message-components.cjs.map +1 -1
- package/dist/chat-ui/messages/message-components.js +5 -1
- package/dist/chat-ui/messages/message-components.js.map +1 -1
- package/dist/chat-ui/messages/message-images.cjs +66 -0
- package/dist/chat-ui/messages/message-images.cjs.map +1 -0
- package/dist/chat-ui/messages/message-images.d.ts +16 -0
- package/dist/chat-ui/messages/message-images.js +66 -0
- package/dist/chat-ui/messages/message-images.js.map +1 -0
- package/dist/chat-ui/messages/user-edit-composer.cjs +2 -2
- package/dist/chat-ui/messages/user-edit-composer.cjs.map +1 -1
- package/dist/chat-ui/messages/wake-marker.cjs +3 -3
- package/dist/chat-ui/messages/wake-marker.cjs.map +1 -1
- package/dist/chat-ui/rich-text/chat-link.cjs +7 -6
- package/dist/chat-ui/rich-text/chat-link.cjs.map +1 -1
- package/dist/chat-ui/rich-text/chat-link.d.ts +2 -3
- package/dist/chat-ui/rich-text/chat-link.js +6 -5
- package/dist/chat-ui/rich-text/chat-link.js.map +1 -1
- package/dist/chat-ui/rich-text/chat-message-body.cjs +8 -8
- package/dist/chat-ui/rich-text/chat-message-body.cjs.map +1 -1
- package/dist/chat-ui/rich-text/chat-node-views.cjs +7 -6
- package/dist/chat-ui/rich-text/chat-node-views.cjs.map +1 -1
- package/dist/chat-ui/rich-text/chat-node-views.js +1 -0
- package/dist/chat-ui/rich-text/chat-node-views.js.map +1 -1
- package/dist/chat-ui/rich-text/dom-output-spec.cjs +2 -2
- package/dist/chat-ui/rich-text/dom-output-spec.cjs.map +1 -1
- package/dist/chat-ui/statewire.cjs +3 -0
- package/dist/chat-ui/statewire.cjs.map +1 -1
- package/dist/chat-ui/statewire.d.ts +2 -1
- package/dist/chat-ui/statewire.js +3 -0
- package/dist/chat-ui/statewire.js.map +1 -1
- package/dist/chat-ui/thread/chat-thread-shell.cjs +43 -14
- package/dist/chat-ui/thread/chat-thread-shell.cjs.map +1 -1
- package/dist/chat-ui/thread/chat-thread-shell.d.ts +16 -2
- package/dist/chat-ui/thread/chat-thread-shell.js +35 -6
- package/dist/chat-ui/thread/chat-thread-shell.js.map +1 -1
- package/dist/chat-ui/thread/composer-send-or-stop.cjs +30 -20
- package/dist/chat-ui/thread/composer-send-or-stop.cjs.map +1 -1
- package/dist/chat-ui/thread/composer-send-or-stop.d.ts +8 -0
- package/dist/chat-ui/thread/composer-send-or-stop.js +29 -19
- package/dist/chat-ui/thread/composer-send-or-stop.js.map +1 -1
- package/dist/chat-ui/thread/statewire-history-edge.cjs +20 -21
- package/dist/chat-ui/thread/statewire-history-edge.cjs.map +1 -1
- package/dist/chat-ui/thread/statewire-history-edge.js +3 -4
- package/dist/chat-ui/thread/statewire-history-edge.js.map +1 -1
- package/dist/chat-ui/thread/thread-loading-overlay.cjs +5 -5
- package/dist/chat-ui/thread/thread-loading-overlay.cjs.map +1 -1
- package/dist/collab/client.cjs +40 -3
- package/dist/collab/client.cjs.map +1 -1
- package/dist/collab/client.d.ts +25 -0
- package/dist/collab/client.js +40 -3
- package/dist/collab/client.js.map +1 -1
- package/dist/collab/document-status.cjs +150 -0
- package/dist/collab/document-status.cjs.map +1 -0
- package/dist/collab/document-status.d.ts +68 -0
- package/dist/collab/document-status.js +150 -0
- package/dist/collab/document-status.js.map +1 -0
- package/dist/collab/index.cjs +7 -0
- package/dist/collab/index.cjs.map +1 -1
- package/dist/collab/index.d.ts +6 -1
- package/dist/collab/index.js +7 -0
- package/dist/collab/index.js.map +1 -1
- package/dist/collab/presence-react.cjs +11 -11
- package/dist/collab/presence-react.cjs.map +1 -1
- package/dist/collab/react.cjs +6 -6
- package/dist/collab/react.cjs.map +1 -1
- package/dist/composer/AttachmentContext.cjs +24 -11
- package/dist/composer/AttachmentContext.cjs.map +1 -1
- package/dist/composer/AttachmentContext.js +18 -5
- package/dist/composer/AttachmentContext.js.map +1 -1
- package/dist/composer/ComposerAttachmentPreview.cjs +78 -23
- package/dist/composer/ComposerAttachmentPreview.cjs.map +1 -1
- package/dist/composer/ComposerAttachmentPreview.d.ts +5 -3
- package/dist/composer/ComposerAttachmentPreview.js +79 -24
- package/dist/composer/ComposerAttachmentPreview.js.map +1 -1
- package/dist/composer/ComposerDropZone.cjs +7 -7
- package/dist/composer/ComposerDropZone.cjs.map +1 -1
- package/dist/composer/FileUploadButton.cjs +37 -22
- package/dist/composer/FileUploadButton.cjs.map +1 -1
- package/dist/composer/FileUploadButton.d.ts +6 -0
- package/dist/composer/FileUploadButton.js +34 -19
- package/dist/composer/FileUploadButton.js.map +1 -1
- package/dist/composer/QuoteContext.cjs +8 -8
- package/dist/composer/QuoteContext.cjs.map +1 -1
- package/dist/composer/composer-handoff.cjs +4 -4
- package/dist/composer/composer-handoff.cjs.map +1 -1
- package/dist/composer/useAppendToComposer.cjs +4 -4
- package/dist/composer/useAppendToComposer.cjs.map +1 -1
- package/dist/composer/useAttachFiles.cjs +23 -6
- package/dist/composer/useAttachFiles.cjs.map +1 -1
- package/dist/composer/useAttachFiles.d.ts +15 -7
- package/dist/composer/useAttachFiles.js +22 -5
- package/dist/composer/useAttachFiles.js.map +1 -1
- package/dist/composer/useComposerAttachment.cjs +4 -4
- package/dist/composer/useComposerAttachment.cjs.map +1 -1
- package/dist/composer/useFileUpload.cjs +21 -16
- package/dist/composer/useFileUpload.cjs.map +1 -1
- package/dist/composer/useFileUpload.d.ts +12 -0
- package/dist/composer/useFileUpload.js +12 -7
- package/dist/composer/useFileUpload.js.map +1 -1
- package/dist/composer/useReadComposerDraft.cjs +2 -2
- package/dist/composer/useReadComposerDraft.cjs.map +1 -1
- package/dist/composer/useSendMessage.cjs +4 -4
- package/dist/composer/useSendMessage.cjs.map +1 -1
- package/dist/diagnostics/useAthenaDiagnostics.cjs +4 -4
- package/dist/diagnostics/useAthenaDiagnostics.cjs.map +1 -1
- package/dist/dictation/audio-level-history.cjs +3 -3
- package/dist/dictation/audio-level-history.cjs.map +1 -1
- package/dist/dictation/dictation-controls.cjs +24 -20
- package/dist/dictation/dictation-controls.cjs.map +1 -1
- package/dist/dictation/dictation-controls.d.ts +6 -1
- package/dist/dictation/dictation-controls.js +24 -20
- package/dist/dictation/dictation-controls.js.map +1 -1
- package/dist/dictation/use-athena-dictation-engine.cjs +3 -3
- package/dist/dictation/use-athena-dictation-engine.cjs.map +1 -1
- package/dist/dictation/use-dictation.cjs +22 -22
- package/dist/dictation/use-dictation.cjs.map +1 -1
- package/dist/index.cjs +26 -2
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.ts +15 -3
- package/dist/index.js +26 -2
- package/dist/index.js.map +1 -1
- package/dist/keryx-http/src/receive-only-socket.cjs +40 -0
- package/dist/keryx-http/src/receive-only-socket.cjs.map +1 -0
- package/dist/keryx-http/src/receive-only-socket.d.ts +27 -0
- package/dist/keryx-http/src/receive-only-socket.js +40 -0
- package/dist/keryx-http/src/receive-only-socket.js.map +1 -0
- package/dist/keryx-http/src/update-attributions.cjs +111 -0
- package/dist/keryx-http/src/update-attributions.cjs.map +1 -0
- package/dist/keryx-http/src/update-attributions.d.ts +75 -0
- package/dist/keryx-http/src/update-attributions.js +111 -0
- package/dist/keryx-http/src/update-attributions.js.map +1 -0
- package/dist/lib/owner-document.cjs +6 -6
- package/dist/lib/owner-document.cjs.map +1 -1
- package/dist/lib/use-athena-rest-query.cjs +4 -4
- package/dist/lib/use-athena-rest-query.cjs.map +1 -1
- package/dist/lib/use-document-active.cjs +4 -4
- package/dist/lib/use-document-active.cjs.map +1 -1
- package/dist/lib/use-prefers-reduced-motion.cjs +2 -2
- package/dist/lib/use-prefers-reduced-motion.cjs.map +1 -1
- package/dist/offline/offline-history.cjs +7 -7
- package/dist/offline/offline-history.cjs.map +1 -1
- package/dist/provider/AthenaContext.cjs +3 -3
- package/dist/provider/AthenaContext.cjs.map +1 -1
- package/dist/provider/AthenaProvider.cjs +116 -79
- package/dist/provider/AthenaProvider.cjs.map +1 -1
- package/dist/provider/AthenaProvider.js +40 -3
- package/dist/provider/AthenaProvider.js.map +1 -1
- package/dist/provider/PostHogProvider.cjs +2 -2
- package/dist/provider/PostHogProvider.cjs.map +1 -1
- package/dist/provider/agent-selection-context.cjs +2 -2
- package/dist/provider/agent-selection-context.cjs.map +1 -1
- package/dist/provider/chat-mode-context.cjs +2 -2
- package/dist/provider/chat-mode-context.cjs.map +1 -1
- package/dist/provider/session-persistence-context.cjs +10 -0
- package/dist/provider/session-persistence-context.cjs.map +1 -0
- package/dist/provider/session-persistence-context.d.ts +15 -0
- package/dist/provider/session-persistence-context.js +10 -0
- package/dist/provider/session-persistence-context.js.map +1 -0
- package/dist/provider/statewire-history-context.cjs +4 -4
- package/dist/provider/statewire-history-context.cjs.map +1 -1
- package/dist/provider/statewire-lifecycle-context.cjs +3 -3
- package/dist/provider/statewire-lifecycle-context.cjs.map +1 -1
- package/dist/provider/statewire-window-context.cjs +3 -3
- package/dist/provider/statewire-window-context.cjs.map +1 -1
- package/dist/provider/theme-style-context.cjs +3 -3
- package/dist/provider/theme-style-context.cjs.map +1 -1
- package/dist/react/package.json.cjs +1 -1
- package/dist/react/package.json.js +1 -1
- package/dist/references/src/tool-option-schemas.d.ts +0 -34
- package/dist/runtime/StatewireThreadConfigLaneSync.cjs +10 -10
- package/dist/runtime/StatewireThreadConfigLaneSync.cjs.map +1 -1
- package/dist/runtime/auth-refusal-restart.cjs +7 -7
- package/dist/runtime/auth-refusal-restart.cjs.map +1 -1
- package/dist/runtime/auth.cjs +13 -13
- package/dist/runtime/auth.cjs.map +1 -1
- package/dist/runtime/statewire-lifecycle.cjs +1 -0
- package/dist/runtime/statewire-lifecycle.cjs.map +1 -1
- package/dist/runtime/statewire-lifecycle.d.ts +3 -1
- package/dist/runtime/statewire-lifecycle.js +2 -1
- package/dist/runtime/statewire-lifecycle.js.map +1 -1
- package/dist/runtime/statewire-server-lane-context.cjs +2 -2
- package/dist/runtime/statewire-server-lane-context.cjs.map +1 -1
- package/dist/runtime/statewire-session-lane.cjs +4 -4
- package/dist/runtime/statewire-session-lane.cjs.map +1 -1
- package/dist/runtime/useAthenaStatewireRuntime.cjs +10 -8
- package/dist/runtime/useAthenaStatewireRuntime.cjs.map +1 -1
- package/dist/runtime/useAthenaStatewireRuntime.d.ts +2 -0
- package/dist/runtime/useAthenaStatewireRuntime.js +2 -0
- package/dist/runtime/useAthenaStatewireRuntime.js.map +1 -1
- package/dist/styles.css +1 -1
- package/dist/threads/Inbox.cjs +8 -8
- package/dist/threads/Inbox.cjs.map +1 -1
- package/dist/threads/SessionList.cjs +9 -9
- package/dist/threads/SessionList.cjs.map +1 -1
- package/dist/threads/SessionsPage.cjs +11 -11
- package/dist/threads/SessionsPage.cjs.map +1 -1
- package/dist/threads/index-triggered-refresh.cjs +10 -10
- package/dist/threads/index-triggered-refresh.cjs.map +1 -1
- package/dist/threads/mark-viewed-thread-read.cjs +12 -12
- package/dist/threads/mark-viewed-thread-read.cjs.map +1 -1
- package/dist/threads/offline-session-list.cjs +3 -3
- package/dist/threads/offline-session-list.cjs.map +1 -1
- package/dist/threads/session-list-tab-share.cjs +5 -5
- package/dist/threads/session-list-tab-share.cjs.map +1 -1
- package/dist/threads/statewire-thread-list.cjs +55 -51
- package/dist/threads/statewire-thread-list.cjs.map +1 -1
- package/dist/threads/statewire-thread-list.js +6 -2
- package/dist/threads/statewire-thread-list.js.map +1 -1
- package/dist/threads/thread-id-context.cjs +5 -5
- package/dist/threads/thread-id-context.cjs.map +1 -1
- package/dist/threads/use-athena-session-attention.cjs +2 -2
- package/dist/threads/use-athena-session-attention.cjs.map +1 -1
- package/dist/threads/use-athena-sessions.cjs +10 -10
- package/dist/threads/use-athena-sessions.cjs.map +1 -1
- package/dist/threads/use-athena-thread-model.cjs +3 -3
- package/dist/threads/use-athena-thread-model.cjs.map +1 -1
- package/dist/threads/use-rest-conversation-history.cjs +3 -3
- package/dist/threads/use-rest-conversation-history.cjs.map +1 -1
- package/dist/threads/use-statewire-conversation-history.cjs +8 -8
- package/dist/threads/use-statewire-conversation-history.cjs.map +1 -1
- package/dist/threads/use-thread-archive.cjs +9 -9
- package/dist/threads/use-thread-archive.cjs.map +1 -1
- package/dist/threads/use-thread-favorite.cjs +2 -2
- package/dist/threads/use-thread-favorite.cjs.map +1 -1
- package/dist/threads/use-thread-field-override.cjs +20 -20
- package/dist/threads/use-thread-field-override.cjs.map +1 -1
- package/dist/threads/use-thread-read-state.cjs +4 -4
- package/dist/threads/use-thread-read-state.cjs.map +1 -1
- package/dist/threads/use-thread-rename.cjs +2 -2
- package/dist/threads/use-thread-rename.cjs.map +1 -1
- package/dist/threads/useAthenaThreadManager.cjs +2 -2
- package/dist/threads/useAthenaThreadManager.cjs.map +1 -1
- package/dist/tools/NestedPtcMessages.cjs +6 -6
- package/dist/tools/NestedPtcMessages.cjs.map +1 -1
- package/dist/tools/append-document-tool-ui.cjs +7 -7
- package/dist/tools/append-document-tool-ui.cjs.map +1 -1
- package/dist/tools/file-tool-uis.cjs +2 -2
- package/dist/tools/file-tool-uis.cjs.map +1 -1
- package/dist/tools/misc-tool-uis.cjs +2 -2
- package/dist/tools/misc-tool-uis.cjs.map +1 -1
- package/dist/tools/primitives.cjs +6 -6
- package/dist/tools/primitives.cjs.map +1 -1
- package/dist/tools/read-asset-tool-ui.cjs +6 -6
- package/dist/tools/read-asset-tool-ui.cjs.map +1 -1
- package/dist/tools/subagent-task-tool-ui.cjs +21 -21
- package/dist/tools/subagent-task-tool-ui.cjs.map +1 -1
- package/dist/tools/test-recording-tool-uis.cjs +16 -16
- package/dist/tools/test-recording-tool-uis.cjs.map +1 -1
- package/dist/tools/todo-plan-store.cjs +4 -4
- package/dist/tools/todo-plan-store.cjs.map +1 -1
- package/dist/tools/tool-appearance.cjs +3 -3
- package/dist/tools/tool-appearance.cjs.map +1 -1
- package/dist/tools/tool-fallback.cjs +14 -14
- package/dist/tools/tool-fallback.cjs.map +1 -1
- package/dist/tools/tool-summary.cjs +0 -2
- package/dist/tools/tool-summary.cjs.map +1 -1
- package/dist/tools/tool-summary.js +0 -2
- package/dist/tools/tool-summary.js.map +1 -1
- package/dist/tools/tool-uis.cjs +74 -74
- package/dist/tools/tool-uis.cjs.map +1 -1
- package/dist/tools/use-elapsed-seconds.cjs +3 -3
- package/dist/tools/use-elapsed-seconds.cjs.map +1 -1
- package/dist/tools/write-todos-tool-ui.cjs +9 -9
- package/dist/tools/write-todos-tool-ui.cjs.map +1 -1
- package/dist/ui/image-viewer.cjs +382 -0
- package/dist/ui/image-viewer.cjs.map +1 -0
- package/dist/ui/image-viewer.d.ts +50 -0
- package/dist/ui/image-viewer.js +382 -0
- package/dist/ui/image-viewer.js.map +1 -0
- package/dist/voice/chat.cjs +6 -0
- package/dist/voice/chat.cjs.map +1 -1
- package/dist/voice/chat.d.ts +1 -1
- package/dist/voice/chat.js +8 -2
- package/dist/voice/livekit-join.cjs +52 -101
- package/dist/voice/livekit-join.cjs.map +1 -1
- package/dist/voice/livekit-join.d.ts +1 -6
- package/dist/voice/livekit-join.js +52 -101
- package/dist/voice/livekit-join.js.map +1 -1
- package/dist/voice/livekit.cjs.map +1 -1
- package/dist/voice/livekit.d.ts +11 -1
- package/dist/voice/livekit.js.map +1 -1
- package/dist/voice/use-athena-voice-session.cjs +34 -34
- package/dist/voice/use-athena-voice-session.cjs.map +1 -1
- package/dist/workbench/ComputerLiveDesktop.cjs +13 -13
- package/dist/workbench/ComputerLiveDesktop.cjs.map +1 -1
- package/dist/workbench/SessionWorkbench.cjs +22 -22
- package/dist/workbench/SessionWorkbench.cjs.map +1 -1
- package/dist/workbench/session-workbench-context.cjs +3 -3
- package/dist/workbench/session-workbench-context.cjs.map +1 -1
- package/dist/workbench/session-workbench-panes.cjs +8 -8
- package/dist/workbench/session-workbench-panes.cjs.map +1 -1
- package/dist/workbench/workbench-layout-context.cjs +3 -3
- package/dist/workbench/workbench-layout-context.cjs.map +1 -1
- package/package.json +2 -1
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"channel-refusal.cjs","sources":["../../src/catalog/channel-refusal.ts"],"sourcesContent":["/**\n * A deployment's D12 refusal day (identity v7, `CHANNEL_REPLACEMENTS_REFUSED_FROM` in agora, read as\n * `FeatureGateEnv.channelReplacementsRefusedFrom`). From UTC midnight of that day, a collab agent's\n * channel or mode settings that replace the agent no longer apply: agora compiles every layer\n * without them (`refused_text_layer`), and a channel's model gives way to the agent's own.\n *\n * Agora decides at every compile from its own setting, never from anything a client sends. The SDK\n * reads the day only to show what a run takes: the default model of an agent's picker. Pure, for\n * `useAgentModelChoices` and the tests.\n */\n\nexport const ATHENA_CHANNEL_REFUSAL_QUERY = `\n query AthenaChannelReplacementsRefusedFrom {\n featureGateEnv { channelReplacementsRefusedFrom }\n }\n`;\n\n/** A GraphQL `Date`: `YYYY-MM-DD`. */\nconst DAY = /^\\d{4}-\\d{2}-\\d{2}$/;\n\nconst isRecord = (value: unknown): value is Record<string, unknown> =>\n typeof value === 'object' && value !== null && !Array.isArray(value);\n\n/**\n * The refusal day agora answered, or `null`: unset (the deployment only reports replacements), or\n * an answer this client cannot read.\n */\nexport function refusalDayOf(data: unknown): string | null {\n const gate = isRecord(data) ? data.featureGateEnv : null;\n const day = isRecord(gate) ? gate.channelReplacementsRefusedFrom : null;\n return typeof day === 'string' && DAY.test(day) ? day : null;\n}\n\n/**\n * What GraphQL answers a query for a field its schema lacks (\"Cannot query field\n * 'channelReplacementsRefusedFrom' on type 'FeatureGateEnv'.\"), as graphql-core words it.\n */\nconst UNKNOWN_REFUSAL_DAY_FIELD = /Cannot query field [\"']?channelReplacementsRefusedFrom\\b/;\n\n/**\n * Whether a GraphQL error's message says the agora has no refusal day at all (one from before D12's\n * date, which refuses nothing). Any other error is a failed read, not an answer: the day stays\n * unknown, or as last read.\n */\nexport function answersWithoutRefusalDay(message: string): boolean {\n return UNKNOWN_REFUSAL_DAY_FIELD.test(message);\n}\n\n/** UTC midnight of `refusedFrom`, in milliseconds since the epoch; `null` without a day. */\nexport function channelReplacementsRefusalStartsAt(refusedFrom: string | null): number | null {\n if (refusedFrom === null) return null;\n const startsAt = Date.parse(`${refusedFrom}T00:00:00Z`);\n return Number.isNaN(startsAt) ? null : startsAt;\n}\n\n/** Whether `refusedFrom`'s day has come at `now` (UTC midnight, whatever the device's time zone). */\nexport function channelReplacementsRefusedOn({\n refusedFrom,\n now,\n}: {\n refusedFrom: string | null;\n now: number;\n}): boolean {\n const startsAt = channelReplacementsRefusalStartsAt(refusedFrom);\n return startsAt !== null && now >= startsAt;\n}\n"],"names":[],"mappings":";;AAWO,MAAM,+BAA+B;AAAA;AAAA;AAAA;AAAA;AAO5C,MAAM,MAAM;AAEZ,MAAM,WAAW,CAAC,UAChB,OAAO,UAAU,YAAY,UAAU,QAAQ,CAAC,MAAM,QAAQ,KAAK;AAM9D,SAAS,aAAa,MAA8B;AACzD,QAAM,OAAO,SAAS,IAAI,IAAI,KAAK,iBAAiB;AACpD,QAAM,MAAM,SAAS,IAAI,IAAI,KAAK,iCAAiC;AACnE,SAAO,OAAO,QAAQ,YAAY,IAAI,KAAK,GAAG,IAAI,MAAM;AAC1D;AAMA,MAAM,4BAA4B;AAO3B,SAAS,yBAAyB,SAA0B;AACjE,SAAO,0BAA0B,KAAK,OAAO;AAC/C;AAGO,SAAS,mCAAmC,aAA2C;AAC5F,MAAI,gBAAgB,KAAM,QAAO;AACjC,QAAM,WAAW,KAAK,MAAM,GAAG,WAAW,YAAY;AACtD,SAAO,OAAO,MAAM,QAAQ,IAAI,OAAO;AACzC;AAGO,SAAS,6BAA6B;AAAA,EAC3C;AAAA,EACA;AACF,GAGY;AACV,QAAM,WAAW,mCAAmC,WAAW;AAC/D,SAAO,aAAa,QAAQ,OAAO;AACrC;;;;;;"}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* A deployment's D12 refusal day (identity v7, `CHANNEL_REPLACEMENTS_REFUSED_FROM` in agora, read as
|
|
3
|
+
* `FeatureGateEnv.channelReplacementsRefusedFrom`). From UTC midnight of that day, a collab agent's
|
|
4
|
+
* channel or mode settings that replace the agent no longer apply: agora compiles every layer
|
|
5
|
+
* without them (`refused_text_layer`), and a channel's model gives way to the agent's own.
|
|
6
|
+
*
|
|
7
|
+
* Agora decides at every compile from its own setting, never from anything a client sends. The SDK
|
|
8
|
+
* reads the day only to show what a run takes: the default model of an agent's picker. Pure, for
|
|
9
|
+
* `useAgentModelChoices` and the tests.
|
|
10
|
+
*/
|
|
11
|
+
export declare const ATHENA_CHANNEL_REFUSAL_QUERY = "\n query AthenaChannelReplacementsRefusedFrom {\n featureGateEnv { channelReplacementsRefusedFrom }\n }\n";
|
|
12
|
+
/**
|
|
13
|
+
* The refusal day agora answered, or `null`: unset (the deployment only reports replacements), or
|
|
14
|
+
* an answer this client cannot read.
|
|
15
|
+
*/
|
|
16
|
+
export declare function refusalDayOf(data: unknown): string | null;
|
|
17
|
+
/**
|
|
18
|
+
* Whether a GraphQL error's message says the agora has no refusal day at all (one from before D12's
|
|
19
|
+
* date, which refuses nothing). Any other error is a failed read, not an answer: the day stays
|
|
20
|
+
* unknown, or as last read.
|
|
21
|
+
*/
|
|
22
|
+
export declare function answersWithoutRefusalDay(message: string): boolean;
|
|
23
|
+
/** UTC midnight of `refusedFrom`, in milliseconds since the epoch; `null` without a day. */
|
|
24
|
+
export declare function channelReplacementsRefusalStartsAt(refusedFrom: string | null): number | null;
|
|
25
|
+
/** Whether `refusedFrom`'s day has come at `now` (UTC midnight, whatever the device's time zone). */
|
|
26
|
+
export declare function channelReplacementsRefusedOn({ refusedFrom, now, }: {
|
|
27
|
+
refusedFrom: string | null;
|
|
28
|
+
now: number;
|
|
29
|
+
}): boolean;
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
const ATHENA_CHANNEL_REFUSAL_QUERY = `
|
|
2
|
+
query AthenaChannelReplacementsRefusedFrom {
|
|
3
|
+
featureGateEnv { channelReplacementsRefusedFrom }
|
|
4
|
+
}
|
|
5
|
+
`;
|
|
6
|
+
const DAY = /^\d{4}-\d{2}-\d{2}$/;
|
|
7
|
+
const isRecord = (value) => typeof value === "object" && value !== null && !Array.isArray(value);
|
|
8
|
+
function refusalDayOf(data) {
|
|
9
|
+
const gate = isRecord(data) ? data.featureGateEnv : null;
|
|
10
|
+
const day = isRecord(gate) ? gate.channelReplacementsRefusedFrom : null;
|
|
11
|
+
return typeof day === "string" && DAY.test(day) ? day : null;
|
|
12
|
+
}
|
|
13
|
+
const UNKNOWN_REFUSAL_DAY_FIELD = /Cannot query field ["']?channelReplacementsRefusedFrom\b/;
|
|
14
|
+
function answersWithoutRefusalDay(message) {
|
|
15
|
+
return UNKNOWN_REFUSAL_DAY_FIELD.test(message);
|
|
16
|
+
}
|
|
17
|
+
function channelReplacementsRefusalStartsAt(refusedFrom) {
|
|
18
|
+
if (refusedFrom === null) return null;
|
|
19
|
+
const startsAt = Date.parse(`${refusedFrom}T00:00:00Z`);
|
|
20
|
+
return Number.isNaN(startsAt) ? null : startsAt;
|
|
21
|
+
}
|
|
22
|
+
function channelReplacementsRefusedOn({
|
|
23
|
+
refusedFrom,
|
|
24
|
+
now
|
|
25
|
+
}) {
|
|
26
|
+
const startsAt = channelReplacementsRefusalStartsAt(refusedFrom);
|
|
27
|
+
return startsAt !== null && now >= startsAt;
|
|
28
|
+
}
|
|
29
|
+
export {
|
|
30
|
+
ATHENA_CHANNEL_REFUSAL_QUERY,
|
|
31
|
+
answersWithoutRefusalDay,
|
|
32
|
+
channelReplacementsRefusalStartsAt,
|
|
33
|
+
channelReplacementsRefusedOn,
|
|
34
|
+
refusalDayOf
|
|
35
|
+
};
|
|
36
|
+
//# sourceMappingURL=channel-refusal.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"channel-refusal.js","sources":["../../src/catalog/channel-refusal.ts"],"sourcesContent":["/**\n * A deployment's D12 refusal day (identity v7, `CHANNEL_REPLACEMENTS_REFUSED_FROM` in agora, read as\n * `FeatureGateEnv.channelReplacementsRefusedFrom`). From UTC midnight of that day, a collab agent's\n * channel or mode settings that replace the agent no longer apply: agora compiles every layer\n * without them (`refused_text_layer`), and a channel's model gives way to the agent's own.\n *\n * Agora decides at every compile from its own setting, never from anything a client sends. The SDK\n * reads the day only to show what a run takes: the default model of an agent's picker. Pure, for\n * `useAgentModelChoices` and the tests.\n */\n\nexport const ATHENA_CHANNEL_REFUSAL_QUERY = `\n query AthenaChannelReplacementsRefusedFrom {\n featureGateEnv { channelReplacementsRefusedFrom }\n }\n`;\n\n/** A GraphQL `Date`: `YYYY-MM-DD`. */\nconst DAY = /^\\d{4}-\\d{2}-\\d{2}$/;\n\nconst isRecord = (value: unknown): value is Record<string, unknown> =>\n typeof value === 'object' && value !== null && !Array.isArray(value);\n\n/**\n * The refusal day agora answered, or `null`: unset (the deployment only reports replacements), or\n * an answer this client cannot read.\n */\nexport function refusalDayOf(data: unknown): string | null {\n const gate = isRecord(data) ? data.featureGateEnv : null;\n const day = isRecord(gate) ? gate.channelReplacementsRefusedFrom : null;\n return typeof day === 'string' && DAY.test(day) ? day : null;\n}\n\n/**\n * What GraphQL answers a query for a field its schema lacks (\"Cannot query field\n * 'channelReplacementsRefusedFrom' on type 'FeatureGateEnv'.\"), as graphql-core words it.\n */\nconst UNKNOWN_REFUSAL_DAY_FIELD = /Cannot query field [\"']?channelReplacementsRefusedFrom\\b/;\n\n/**\n * Whether a GraphQL error's message says the agora has no refusal day at all (one from before D12's\n * date, which refuses nothing). Any other error is a failed read, not an answer: the day stays\n * unknown, or as last read.\n */\nexport function answersWithoutRefusalDay(message: string): boolean {\n return UNKNOWN_REFUSAL_DAY_FIELD.test(message);\n}\n\n/** UTC midnight of `refusedFrom`, in milliseconds since the epoch; `null` without a day. */\nexport function channelReplacementsRefusalStartsAt(refusedFrom: string | null): number | null {\n if (refusedFrom === null) return null;\n const startsAt = Date.parse(`${refusedFrom}T00:00:00Z`);\n return Number.isNaN(startsAt) ? null : startsAt;\n}\n\n/** Whether `refusedFrom`'s day has come at `now` (UTC midnight, whatever the device's time zone). */\nexport function channelReplacementsRefusedOn({\n refusedFrom,\n now,\n}: {\n refusedFrom: string | null;\n now: number;\n}): boolean {\n const startsAt = channelReplacementsRefusalStartsAt(refusedFrom);\n return startsAt !== null && now >= startsAt;\n}\n"],"names":[],"mappings":"AAWO,MAAM,+BAA+B;AAAA;AAAA;AAAA;AAAA;AAO5C,MAAM,MAAM;AAEZ,MAAM,WAAW,CAAC,UAChB,OAAO,UAAU,YAAY,UAAU,QAAQ,CAAC,MAAM,QAAQ,KAAK;AAM9D,SAAS,aAAa,MAA8B;AACzD,QAAM,OAAO,SAAS,IAAI,IAAI,KAAK,iBAAiB;AACpD,QAAM,MAAM,SAAS,IAAI,IAAI,KAAK,iCAAiC;AACnE,SAAO,OAAO,QAAQ,YAAY,IAAI,KAAK,GAAG,IAAI,MAAM;AAC1D;AAMA,MAAM,4BAA4B;AAO3B,SAAS,yBAAyB,SAA0B;AACjE,SAAO,0BAA0B,KAAK,OAAO;AAC/C;AAGO,SAAS,mCAAmC,aAA2C;AAC5F,MAAI,gBAAgB,KAAM,QAAO;AACjC,QAAM,WAAW,KAAK,MAAM,GAAG,WAAW,YAAY;AACtD,SAAO,OAAO,MAAM,QAAQ,IAAI,OAAO;AACzC;AAGO,SAAS,6BAA6B;AAAA,EAC3C;AAAA,EACA;AACF,GAGY;AACV,QAAM,WAAW,mCAAmC,WAAW;AAC/D,SAAO,aAAa,QAAQ,OAAO;AACrC;"}
|
|
@@ -3,7 +3,7 @@ Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
|
|
|
3
3
|
const jsxRuntime = require("react/jsx-runtime");
|
|
4
4
|
const lucideReact = require("lucide-react");
|
|
5
5
|
const radixUi = require("radix-ui");
|
|
6
|
-
const
|
|
6
|
+
const require$$0 = require("react");
|
|
7
7
|
const lib_ownerDocument = require("../lib/owner-document.cjs");
|
|
8
8
|
const portalSurface = require("../lib/portal-surface.cjs");
|
|
9
9
|
const agentSelectionContext = require("../provider/agent-selection-context.cjs");
|
|
@@ -49,6 +49,21 @@ function PickerItem({
|
|
|
49
49
|
/* @__PURE__ */ jsxRuntime.jsx(radixUi.DropdownMenu.ItemIndicator, { className: "absolute right-2 inline-flex", children: /* @__PURE__ */ jsxRuntime.jsx(lucideReact.CheckIcon, { className: "size-3.5", "aria-hidden": true }) })
|
|
50
50
|
] });
|
|
51
51
|
}
|
|
52
|
+
function DisabledReason({ reason, children }) {
|
|
53
|
+
if (!reason) return /* @__PURE__ */ jsxRuntime.jsx(jsxRuntime.Fragment, { children });
|
|
54
|
+
return /* @__PURE__ */ jsxRuntime.jsx("span", { className: "inline-flex", title: reason, "data-slot": "chat-picker-disabled-reason", children });
|
|
55
|
+
}
|
|
56
|
+
function usePickerMenu(disabled) {
|
|
57
|
+
const [open, setOpenState] = require$$0.useState(false);
|
|
58
|
+
if (disabled && open) setOpenState(false);
|
|
59
|
+
return {
|
|
60
|
+
open: open && !disabled,
|
|
61
|
+
setOpen: (next) => setOpenState(next && !disabled),
|
|
62
|
+
choose: (apply) => {
|
|
63
|
+
if (!disabled) apply();
|
|
64
|
+
}
|
|
65
|
+
};
|
|
66
|
+
}
|
|
52
67
|
function PickerNote({ children, alert = false }) {
|
|
53
68
|
return /* @__PURE__ */ jsxRuntime.jsx(
|
|
54
69
|
"p",
|
|
@@ -67,9 +82,10 @@ function ChatModelPicker({
|
|
|
67
82
|
agent,
|
|
68
83
|
channel,
|
|
69
84
|
disabled = false,
|
|
85
|
+
disabledReason,
|
|
70
86
|
className
|
|
71
87
|
}) {
|
|
72
|
-
const providerSelection =
|
|
88
|
+
const providerSelection = require$$0.useContext(agentSelectionContext.AthenaAgentSelectionContext);
|
|
73
89
|
const agentAssetId = agent !== void 0 ? agentModelOptions.agentAssetIdOf(agent) : agentSelected ? (providerSelection == null ? void 0 : providerSelection.agentAssetId) ?? null : null;
|
|
74
90
|
if (agentAssetId !== null) {
|
|
75
91
|
const agentChannel = channel !== void 0 ? channel : (providerSelection == null ? void 0 : providerSelection.agentAssetId) === agentAssetId ? providerSelection.channel : null;
|
|
@@ -82,6 +98,7 @@ function ChatModelPicker({
|
|
|
82
98
|
onChange,
|
|
83
99
|
defaultModelId,
|
|
84
100
|
disabled,
|
|
101
|
+
disabledReason,
|
|
85
102
|
className
|
|
86
103
|
}
|
|
87
104
|
);
|
|
@@ -94,6 +111,7 @@ function ChatModelPicker({
|
|
|
94
111
|
defaultModelId,
|
|
95
112
|
agentSelected,
|
|
96
113
|
disabled,
|
|
114
|
+
disabledReason,
|
|
97
115
|
className
|
|
98
116
|
}
|
|
99
117
|
);
|
|
@@ -105,6 +123,7 @@ function AgentAwareModelPicker({
|
|
|
105
123
|
onChange,
|
|
106
124
|
defaultModelId,
|
|
107
125
|
disabled,
|
|
126
|
+
disabledReason,
|
|
108
127
|
className
|
|
109
128
|
}) {
|
|
110
129
|
const { choices, modelLabel, catalog } = runtimeCatalog.useAgentModelChoices({ agent: agentAssetId, channel });
|
|
@@ -117,6 +136,7 @@ function AgentAwareModelPicker({
|
|
|
117
136
|
value,
|
|
118
137
|
onChange,
|
|
119
138
|
disabled,
|
|
139
|
+
disabledReason,
|
|
120
140
|
className
|
|
121
141
|
}
|
|
122
142
|
);
|
|
@@ -132,6 +152,7 @@ function AgentAwareModelPicker({
|
|
|
132
152
|
agentDefaultLabel: choices.defaultModel === null ? null : modelLabel(choices.defaultModel),
|
|
133
153
|
holdReplacement: choices.status === "loading",
|
|
134
154
|
disabled,
|
|
155
|
+
disabledReason,
|
|
135
156
|
className
|
|
136
157
|
}
|
|
137
158
|
);
|
|
@@ -149,28 +170,31 @@ function WorkspaceModelMenu({
|
|
|
149
170
|
agentDefaultLabel = null,
|
|
150
171
|
holdReplacement = false,
|
|
151
172
|
disabled,
|
|
173
|
+
disabledReason,
|
|
152
174
|
className
|
|
153
175
|
}) {
|
|
154
|
-
const
|
|
176
|
+
const { open, setOpen, choose } = usePickerMenu(disabled);
|
|
155
177
|
const models = catalog.data ?? [];
|
|
178
|
+
const reason = disabled ? disabledReason ?? null : null;
|
|
156
179
|
const resolved = value === null && agentSelected ? null : runtimeCatalog.resolveCatalogModelId({ stored: value, defaultModelId, models });
|
|
157
180
|
const current = models.find((model) => model.id === resolved);
|
|
158
181
|
const label = resolved === null ? "Agent’s model" : (current == null ? void 0 : current.label) ?? resolved;
|
|
159
|
-
const replacedRef =
|
|
160
|
-
|
|
182
|
+
const replacedRef = require$$0.useRef(null);
|
|
183
|
+
require$$0.useEffect(() => {
|
|
161
184
|
if (holdReplacement) return;
|
|
162
185
|
if (!catalog.isSuccess || value === null || resolved === null || resolved === value) return;
|
|
163
186
|
if (models.some((model) => model.id === value) || replacedRef.current === value) return;
|
|
164
187
|
replacedRef.current = value;
|
|
165
188
|
onChange(resolved);
|
|
166
189
|
}, [holdReplacement, catalog.isSuccess, models, value, resolved, onChange]);
|
|
167
|
-
return /* @__PURE__ */ jsxRuntime.jsxs(radixUi.DropdownMenu.Root, { open, onOpenChange: setOpen, children: [
|
|
190
|
+
return /* @__PURE__ */ jsxRuntime.jsx(DisabledReason, { reason, children: /* @__PURE__ */ jsxRuntime.jsxs(radixUi.DropdownMenu.Root, { open, onOpenChange: setOpen, children: [
|
|
168
191
|
/* @__PURE__ */ jsxRuntime.jsx(radixUi.DropdownMenu.Trigger, { asChild: true, children: /* @__PURE__ */ jsxRuntime.jsxs(
|
|
169
192
|
"button",
|
|
170
193
|
{
|
|
171
194
|
type: "button",
|
|
172
195
|
className: cnfast.cn(CHIP_CLASS, className),
|
|
173
196
|
disabled,
|
|
197
|
+
title: reason ?? void 0,
|
|
174
198
|
"aria-label": `Model: ${label}`,
|
|
175
199
|
children: [
|
|
176
200
|
/* @__PURE__ */ jsxRuntime.jsx(lucideReact.SparklesIcon, { className: "size-3.5 shrink-0", "aria-hidden": true }),
|
|
@@ -183,7 +207,7 @@ function WorkspaceModelMenu({
|
|
|
183
207
|
radixUi.DropdownMenu.RadioGroup,
|
|
184
208
|
{
|
|
185
209
|
value: resolved ?? AGENT_OWN_MODEL,
|
|
186
|
-
onValueChange: (next) => onChange(next === AGENT_OWN_MODEL ? null : next),
|
|
210
|
+
onValueChange: (next) => choose(() => onChange(next === AGENT_OWN_MODEL ? null : next)),
|
|
187
211
|
children: [
|
|
188
212
|
agentSelected && /* @__PURE__ */ jsxRuntime.jsx(PickerItem, { value: AGENT_OWN_MODEL, detail: agentDefaultLabel, children: "Agent’s own model" }),
|
|
189
213
|
catalog.isPending && /* @__PURE__ */ jsxRuntime.jsx(PickerNote, { children: "Loading models…" }),
|
|
@@ -198,7 +222,7 @@ function WorkspaceModelMenu({
|
|
|
198
222
|
]
|
|
199
223
|
}
|
|
200
224
|
) })
|
|
201
|
-
] });
|
|
225
|
+
] }) });
|
|
202
226
|
}
|
|
203
227
|
function AgentModelMenu({
|
|
204
228
|
choices,
|
|
@@ -206,9 +230,11 @@ function AgentModelMenu({
|
|
|
206
230
|
value,
|
|
207
231
|
onChange,
|
|
208
232
|
disabled,
|
|
233
|
+
disabledReason,
|
|
209
234
|
className
|
|
210
235
|
}) {
|
|
211
|
-
const
|
|
236
|
+
const { open, setOpen, choose } = usePickerMenu(disabled);
|
|
237
|
+
const reason = disabled ? disabledReason ?? null : null;
|
|
212
238
|
const pinsDefault = value !== null && value === choices.defaultModel;
|
|
213
239
|
const items = choices.options.map((option) => {
|
|
214
240
|
const display = modelLabel(option.model);
|
|
@@ -254,13 +280,14 @@ function AgentModelMenu({
|
|
|
254
280
|
}
|
|
255
281
|
);
|
|
256
282
|
}
|
|
257
|
-
return /* @__PURE__ */ jsxRuntime.jsxs(radixUi.DropdownMenu.Root, { open, onOpenChange: setOpen, children: [
|
|
283
|
+
return /* @__PURE__ */ jsxRuntime.jsx(DisabledReason, { reason, children: /* @__PURE__ */ jsxRuntime.jsxs(radixUi.DropdownMenu.Root, { open, onOpenChange: setOpen, children: [
|
|
258
284
|
/* @__PURE__ */ jsxRuntime.jsx(radixUi.DropdownMenu.Trigger, { asChild: true, children: /* @__PURE__ */ jsxRuntime.jsxs(
|
|
259
285
|
"button",
|
|
260
286
|
{
|
|
261
287
|
type: "button",
|
|
262
288
|
className: cnfast.cn(CHIP_CLASS, className),
|
|
263
289
|
disabled,
|
|
290
|
+
title: reason ?? void 0,
|
|
264
291
|
"aria-label": `Model: ${label}`,
|
|
265
292
|
children: [
|
|
266
293
|
/* @__PURE__ */ jsxRuntime.jsx(lucideReact.SparklesIcon, { className: "size-3.5 shrink-0", "aria-hidden": true }),
|
|
@@ -273,7 +300,7 @@ function AgentModelMenu({
|
|
|
273
300
|
radixUi.DropdownMenu.RadioGroup,
|
|
274
301
|
{
|
|
275
302
|
value: selectedValue,
|
|
276
|
-
onValueChange: (next) => onChange(next === AGENT_OWN_MODEL ? null : next),
|
|
303
|
+
onValueChange: (next) => choose(() => onChange(next === AGENT_OWN_MODEL ? null : next)),
|
|
277
304
|
children: [
|
|
278
305
|
/* @__PURE__ */ jsxRuntime.jsx(radixUi.DropdownMenu.Label, { className: "px-2 pb-0.5 pt-1.5 text-[11px] font-medium uppercase tracking-wide text-muted-foreground", children: "Agent models" }),
|
|
279
306
|
items.map((item) => /* @__PURE__ */ jsxRuntime.jsxs(PickerItem, { value: item.value, detail: item.detail, children: [
|
|
@@ -283,29 +310,37 @@ function AgentModelMenu({
|
|
|
283
310
|
]
|
|
284
311
|
}
|
|
285
312
|
) })
|
|
286
|
-
] });
|
|
313
|
+
] }) });
|
|
287
314
|
}
|
|
288
315
|
const NO_AGENT = "__athena__";
|
|
289
|
-
function ChatAgentPicker({
|
|
316
|
+
function ChatAgentPicker({
|
|
317
|
+
value,
|
|
318
|
+
onChange,
|
|
319
|
+
disabled = false,
|
|
320
|
+
disabledReason,
|
|
321
|
+
className
|
|
322
|
+
}) {
|
|
290
323
|
var _a;
|
|
291
324
|
const catalog = runtimeCatalog.useAthenaAgentCatalog();
|
|
292
|
-
const
|
|
325
|
+
const { open, setOpen, choose } = usePickerMenu(disabled);
|
|
326
|
+
const reason = disabled ? disabledReason ?? null : null;
|
|
293
327
|
const agents = catalog.data ?? [];
|
|
294
328
|
const label = value === null ? "Athena" : ((_a = agents.find((agent) => agent.id === value)) == null ? void 0 : _a.name) ?? "Agent";
|
|
295
|
-
const clearedRef =
|
|
296
|
-
|
|
329
|
+
const clearedRef = require$$0.useRef(null);
|
|
330
|
+
require$$0.useEffect(() => {
|
|
297
331
|
if (!catalog.isSuccess || value === null || clearedRef.current === value) return;
|
|
298
332
|
if (agents.some((agent) => agent.id === value)) return;
|
|
299
333
|
clearedRef.current = value;
|
|
300
334
|
onChange(null);
|
|
301
335
|
}, [catalog.isSuccess, agents, value, onChange]);
|
|
302
|
-
return /* @__PURE__ */ jsxRuntime.jsxs(radixUi.DropdownMenu.Root, { open, onOpenChange: setOpen, children: [
|
|
336
|
+
return /* @__PURE__ */ jsxRuntime.jsx(DisabledReason, { reason, children: /* @__PURE__ */ jsxRuntime.jsxs(radixUi.DropdownMenu.Root, { open, onOpenChange: setOpen, children: [
|
|
303
337
|
/* @__PURE__ */ jsxRuntime.jsx(radixUi.DropdownMenu.Trigger, { asChild: true, children: /* @__PURE__ */ jsxRuntime.jsxs(
|
|
304
338
|
"button",
|
|
305
339
|
{
|
|
306
340
|
type: "button",
|
|
307
341
|
className: cnfast.cn(CHIP_CLASS, className),
|
|
308
342
|
disabled,
|
|
343
|
+
title: reason ?? void 0,
|
|
309
344
|
"aria-label": `Agent: ${label}`,
|
|
310
345
|
children: [
|
|
311
346
|
/* @__PURE__ */ jsxRuntime.jsx(lucideReact.BotIcon, { className: "size-3.5 shrink-0", "aria-hidden": true }),
|
|
@@ -318,7 +353,7 @@ function ChatAgentPicker({ value, onChange, disabled = false, className }) {
|
|
|
318
353
|
radixUi.DropdownMenu.RadioGroup,
|
|
319
354
|
{
|
|
320
355
|
value: value ?? NO_AGENT,
|
|
321
|
-
onValueChange: (next) => onChange(next === NO_AGENT ? null : next),
|
|
356
|
+
onValueChange: (next) => choose(() => onChange(next === NO_AGENT ? null : next)),
|
|
322
357
|
children: [
|
|
323
358
|
/* @__PURE__ */ jsxRuntime.jsx(PickerItem, { value: NO_AGENT, children: "Athena" }),
|
|
324
359
|
catalog.isError && /* @__PURE__ */ jsxRuntime.jsx(PickerNote, { alert: true, children: "Couldn’t load the agents. Try again in a moment." }),
|
|
@@ -326,7 +361,7 @@ function ChatAgentPicker({ value, onChange, disabled = false, className }) {
|
|
|
326
361
|
]
|
|
327
362
|
}
|
|
328
363
|
) })
|
|
329
|
-
] });
|
|
364
|
+
] }) });
|
|
330
365
|
}
|
|
331
366
|
function ChatModePicker({
|
|
332
367
|
value,
|
|
@@ -338,16 +373,17 @@ function ChatModePicker({
|
|
|
338
373
|
className
|
|
339
374
|
}) {
|
|
340
375
|
var _a;
|
|
341
|
-
const
|
|
376
|
+
const { open, setOpen, choose } = usePickerMenu(disabled);
|
|
342
377
|
const label = ((_a = options.find((option) => option.id === value)) == null ? void 0 : _a.label) ?? valueLabel ?? value;
|
|
343
|
-
|
|
378
|
+
const reason = disabled ? disabledReason ?? null : null;
|
|
379
|
+
return /* @__PURE__ */ jsxRuntime.jsx(DisabledReason, { reason, children: /* @__PURE__ */ jsxRuntime.jsxs(radixUi.DropdownMenu.Root, { open, onOpenChange: setOpen, children: [
|
|
344
380
|
/* @__PURE__ */ jsxRuntime.jsx(radixUi.DropdownMenu.Trigger, { asChild: true, children: /* @__PURE__ */ jsxRuntime.jsxs(
|
|
345
381
|
"button",
|
|
346
382
|
{
|
|
347
383
|
type: "button",
|
|
348
384
|
className: cnfast.cn(CHIP_CLASS, className),
|
|
349
385
|
disabled,
|
|
350
|
-
title:
|
|
386
|
+
title: reason ?? void 0,
|
|
351
387
|
"aria-label": `Mode: ${label}`,
|
|
352
388
|
"data-slot": "chat-mode-picker",
|
|
353
389
|
children: [
|
|
@@ -357,8 +393,8 @@ function ChatModePicker({
|
|
|
357
393
|
]
|
|
358
394
|
}
|
|
359
395
|
) }),
|
|
360
|
-
/* @__PURE__ */ jsxRuntime.jsx(PickerMenu, { label: "Mode", children: /* @__PURE__ */ jsxRuntime.jsx(radixUi.DropdownMenu.RadioGroup, { value, onValueChange: onChange, children: options.map((option) => /* @__PURE__ */ jsxRuntime.jsx(PickerItem, { value: option.id, children: option.label }, option.id)) }) })
|
|
361
|
-
] });
|
|
396
|
+
/* @__PURE__ */ jsxRuntime.jsx(PickerMenu, { label: "Mode", children: /* @__PURE__ */ jsxRuntime.jsx(radixUi.DropdownMenu.RadioGroup, { value, onValueChange: (next) => choose(() => onChange(next)), children: options.map((option) => /* @__PURE__ */ jsxRuntime.jsx(PickerItem, { value: option.id, children: option.label }, option.id)) }) })
|
|
397
|
+
] }) });
|
|
362
398
|
}
|
|
363
399
|
function AthenaChatModeMenu({ className }) {
|
|
364
400
|
const mode = useAthenaChatMode.useAthenaChatMode();
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"chat-pickers.cjs","sources":["../../src/catalog/chat-pickers.tsx"],"sourcesContent":["import { BotIcon, CheckIcon, ChevronDownIcon, LayersIcon, SparklesIcon } from 'lucide-react';\nimport { DropdownMenu } from 'radix-ui';\nimport { type ReactNode, useContext, useEffect, useRef, useState } from 'react';\nimport { usePortalContainer } from '../lib/owner-document';\nimport { portalSurfaceStyle } from '../lib/portal-surface';\nimport { cn } from '../lib/utils';\nimport { AthenaAgentSelectionContext } from '../provider/agent-selection-context';\nimport { useAthenaThemeStyle } from '../provider/theme-style-context';\nimport type { AthenaChatModeOption } from './agent-mode-menu';\nimport { agentAssetIdOf } from './agent-model-options';\nimport {\n type AthenaAgentModelOptions,\n groupModelsByProvider,\n resolveCatalogModelId,\n useAgentModelChoices,\n useAthenaAgentCatalog,\n useAthenaModelCatalog,\n} from './runtime-catalog';\nimport { useAthenaChatMode } from './use-athena-chat-mode';\n\n/**\n * The composer's agent and model pickers: compact chips for `AthenaChat`'s `toolbarStart` slot\n * that open a menu, as ChatGPT's and Codex's composers do. They are controlled: the host keeps the\n * choice (and remembers it if it likes) and passes it to `AthenaProvider` as `model` and\n * `agent=\"collab_agent:<id>\"`. New messages run with the choice. The menus are Radix radio menus,\n * so arrow keys, typeahead, Escape and focus return work as in any native menu.\n */\n\nconst CHIP_CLASS =\n 'inline-flex h-7 max-w-[14rem] items-center gap-1 rounded-md px-2 text-xs text-muted-foreground hover:bg-muted hover:text-foreground focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring disabled:pointer-events-none disabled:opacity-50';\n\n/** The chip without a menu: one choice, shown as a label. */\nconst STATIC_CHIP_CLASS =\n 'inline-flex h-7 max-w-[14rem] items-center gap-1 rounded-md px-2 text-xs text-muted-foreground';\n\nconst ITEM_CLASS =\n 'relative flex w-full cursor-default select-none items-center gap-2 rounded-sm py-1.5 pl-2 pr-7 text-sm outline-none data-[highlighted]:bg-muted data-[state=checked]:font-medium';\n\n/** The \"Agent's own model\" item's value: a chosen agent runs the model its author set. */\nconst AGENT_OWN_MODEL = '__agent_own_model__';\n\n/** What the chip says while a chosen agent's model is not known. */\nconst AGENT_MODEL_LABEL = 'Agent’s model';\n\n/** The menu body, portaled and themed like the SDK's popovers (it renders outside the provider). */\nfunction PickerMenu({ label, children }: { label: string; children: ReactNode }) {\n const themeStyle = useAthenaThemeStyle();\n const container = usePortalContainer();\n return (\n <DropdownMenu.Portal container={container}>\n <DropdownMenu.Content\n align=\"start\"\n sideOffset={4}\n collisionPadding={8}\n aria-label={label}\n // Its box and colours inline: no host stylesheet can take them away\n // (lib/portal-surface.ts).\n style={portalSurfaceStyle({ surface: 'popover', themeStyle })}\n className={cn(\n 'athena-sdk athena-sdk-chrome',\n 'z-50 block max-h-80 w-64 overflow-y-auto rounded-md border bg-popover p-1 text-popover-foreground shadow-md outline-none',\n )}\n >\n {children}\n </DropdownMenu.Content>\n </DropdownMenu.Portal>\n );\n}\n\nfunction PickerItem({\n value,\n detail,\n children,\n}: {\n value: string;\n /** A second, muted line (the model behind an author's label, or why the item is listed). */\n detail?: ReactNode;\n children: ReactNode;\n}) {\n return (\n <DropdownMenu.RadioItem value={value} className={ITEM_CLASS}>\n {detail ? (\n <span className=\"flex min-w-0 flex-1 flex-col\">\n <span className=\"truncate\">{children}</span>\n <span className=\"truncate text-xs font-normal text-muted-foreground\">{detail}</span>\n </span>\n ) : (\n <span className=\"min-w-0 flex-1 truncate\">{children}</span>\n )}\n <DropdownMenu.ItemIndicator className=\"absolute right-2 inline-flex\">\n <CheckIcon className=\"size-3.5\" aria-hidden />\n </DropdownMenu.ItemIndicator>\n </DropdownMenu.RadioItem>\n );\n}\n\nfunction PickerNote({ children, alert = false }: { children: ReactNode; alert?: boolean }) {\n return (\n <p\n className={cn('px-2 py-1.5 text-xs', alert ? 'text-destructive' : 'text-muted-foreground')}\n role={alert ? 'alert' : undefined}\n >\n {children}\n </p>\n );\n}\n\nexport interface ChatModelPickerProps {\n /** The chosen model id; `null` lets a selected agent run its own model. */\n value: string | null;\n onChange: (modelId: string | null) => void;\n /** The model a person who chose nothing runs, e.g. `claude-opus-5-5`. */\n defaultModelId: string;\n /**\n * A collab agent is chosen: the picker offers the workspace's models and\n * \"Agent's own model\" (`null`), as before, unless the agent restricts its\n * models (its \"Allow any workspace model\" switch is off), when it offers\n * exactly the agent's own (`useAthenaAgentModelOptions`). Which agent:\n * `agent`, else the one the surrounding `AthenaProvider` runs as.\n */\n agentSelected?: boolean;\n /**\n * The chosen collab agent, as its asset id or `collab_agent:<id>` (implies\n * `agentSelected`). `null` is no agent.\n */\n agent?: string | null;\n /**\n * The collab channel the chat runs on (its model override is the default\n * there). Defaults to the provider's `channel` when the agent is the\n * provider's.\n */\n channel?: string | null;\n disabled?: boolean;\n className?: string;\n}\n\n/**\n * Which model new messages run, from the models the workspace allows this\n * person; with an agent chosen, also \"Agent's own model\" (`null`), or exactly\n * the models its author listed when the agent restricts its models\n * (`allowAnyModel: false`, opt-in per agent). The host passes the choice to\n * `AthenaProvider` as `model`; a change reaches an open session too (the\n * provider writes it to the session's server config).\n */\nexport function ChatModelPicker({\n value,\n onChange,\n defaultModelId,\n agentSelected = false,\n agent,\n channel,\n disabled = false,\n className,\n}: ChatModelPickerProps) {\n const providerSelection = useContext(AthenaAgentSelectionContext);\n const agentAssetId =\n agent !== undefined\n ? agentAssetIdOf(agent)\n : agentSelected\n ? (providerSelection?.agentAssetId ?? null)\n : null;\n if (agentAssetId !== null) {\n const agentChannel =\n channel !== undefined\n ? channel\n : providerSelection?.agentAssetId === agentAssetId\n ? providerSelection.channel\n : null;\n return (\n <AgentAwareModelPicker\n agentAssetId={agentAssetId}\n channel={agentChannel}\n value={value}\n onChange={onChange}\n defaultModelId={defaultModelId}\n disabled={disabled}\n className={className}\n />\n );\n }\n return (\n <WorkspaceModelPicker\n value={value}\n onChange={onChange}\n defaultModelId={defaultModelId}\n agentSelected={agentSelected}\n disabled={disabled}\n className={className}\n />\n );\n}\n\n/**\n * The picker with a collab agent chosen. The agent is read first: one that\n * restricts its models gets {@link AgentModelMenu}; every other agent (the\n * default, and one this person cannot read) gets the workspace menu as before,\n * its \"Agent's own model\" naming the agent's default when known. Until the\n * read settles the workspace menu shows but replaces nothing on the host's\n * behalf, since the host's model may be one only the agent offers.\n */\nfunction AgentAwareModelPicker({\n agentAssetId,\n channel,\n value,\n onChange,\n defaultModelId,\n disabled,\n className,\n}: {\n agentAssetId: string;\n channel: string | null;\n value: string | null;\n onChange: (modelId: string | null) => void;\n defaultModelId: string;\n disabled: boolean;\n className?: string;\n}) {\n // One query client for the agent read and the catalog both menus name models from.\n const { choices, modelLabel, catalog } = useAgentModelChoices({ agent: agentAssetId, channel });\n if (choices.status === 'ready' && !choices.allowAnyModel) {\n return (\n <AgentModelMenu\n choices={choices}\n modelLabel={modelLabel}\n value={value}\n onChange={onChange}\n disabled={disabled}\n className={className}\n />\n );\n }\n return (\n <WorkspaceModelMenu\n catalog={catalog}\n value={value}\n onChange={onChange}\n defaultModelId={defaultModelId}\n agentSelected\n agentDefaultLabel={choices.defaultModel === null ? null : modelLabel(choices.defaultModel)}\n holdReplacement={choices.status === 'loading'}\n disabled={disabled}\n className={className}\n />\n );\n}\n\n/** The model picker over the workspace's catalog, with no agent chosen (or none it can name). */\nfunction WorkspaceModelPicker(props: {\n value: string | null;\n onChange: (modelId: string | null) => void;\n defaultModelId: string;\n agentSelected: boolean;\n disabled: boolean;\n className?: string;\n}) {\n const catalog = useAthenaModelCatalog();\n return <WorkspaceModelMenu catalog={catalog} {...props} />;\n}\n\n/** The workspace catalog's menu (the picker as it was before agents could restrict models). */\nfunction WorkspaceModelMenu({\n catalog,\n value,\n onChange,\n defaultModelId,\n agentSelected,\n agentDefaultLabel = null,\n holdReplacement = false,\n disabled,\n className,\n}: {\n catalog: ReturnType<typeof useAthenaModelCatalog>;\n value: string | null;\n onChange: (modelId: string | null) => void;\n defaultModelId: string;\n agentSelected: boolean;\n /** The chosen agent's default model (its channel's override when it has one), named under \"Agent's own model\". */\n agentDefaultLabel?: string | null;\n /** Replace no unoffered choice yet (the chosen agent is still being read). */\n holdReplacement?: boolean;\n disabled: boolean;\n className?: string;\n}) {\n const [open, setOpen] = useState(false);\n const models = catalog.data ?? [];\n const resolved =\n value === null && agentSelected\n ? null\n : resolveCatalogModelId({ stored: value, defaultModelId, models });\n const current = models.find((model) => model.id === resolved);\n const label = resolved === null ? 'Agent’s model' : (current?.label ?? resolved);\n // The host's choice is no longer offered (retired, or the workspace stopped allowing it): hand\n // the host the model the chip shows, so new messages run it instead of the dropped id. Once per\n // choice, so a host that keeps the old value is not asked again on every render.\n const replacedRef = useRef<string | null>(null);\n useEffect(() => {\n if (holdReplacement) return;\n if (!catalog.isSuccess || value === null || resolved === null || resolved === value) return;\n if (models.some((model) => model.id === value) || replacedRef.current === value) return;\n replacedRef.current = value;\n onChange(resolved);\n }, [holdReplacement, catalog.isSuccess, models, value, resolved, onChange]);\n return (\n <DropdownMenu.Root open={open} onOpenChange={setOpen}>\n <DropdownMenu.Trigger asChild>\n <button\n type=\"button\"\n className={cn(CHIP_CLASS, className)}\n disabled={disabled}\n aria-label={`Model: ${label}`}\n >\n <SparklesIcon className=\"size-3.5 shrink-0\" aria-hidden />\n <span className=\"truncate\">{label}</span>\n <ChevronDownIcon className=\"size-3 shrink-0\" aria-hidden />\n </button>\n </DropdownMenu.Trigger>\n <PickerMenu label=\"Model\">\n <DropdownMenu.RadioGroup\n value={resolved ?? AGENT_OWN_MODEL}\n onValueChange={(next) => onChange(next === AGENT_OWN_MODEL ? null : next)}\n >\n {agentSelected && (\n <PickerItem value={AGENT_OWN_MODEL} detail={agentDefaultLabel}>\n Agent’s own model\n </PickerItem>\n )}\n {catalog.isPending && <PickerNote>Loading models…</PickerNote>}\n {catalog.isError && <PickerNote alert>Couldn’t load the models. Try again in a moment.</PickerNote>}\n {groupModelsByProvider({ models }).map((group) => (\n <DropdownMenu.Group key={group.provider}>\n <DropdownMenu.Label className=\"px-2 pb-0.5 pt-1.5 text-[11px] font-medium uppercase tracking-wide text-muted-foreground\">\n {group.provider}\n </DropdownMenu.Label>\n {group.models.map((model) => (\n <PickerItem key={model.id} value={model.id}>\n {model.label}\n {model.status === 'LEGACY' ? ' (legacy)' : ''}\n </PickerItem>\n ))}\n </DropdownMenu.Group>\n ))}\n </DropdownMenu.RadioGroup>\n </PickerMenu>\n </DropdownMenu.Root>\n );\n}\n\n/** One item of the agent's model menu. */\ninterface AgentModelItem {\n /** The radio value: a model id, or {@link AGENT_OWN_MODEL} for \"the agent's default\" (`null`). */\n value: string;\n label: string;\n isDefault: boolean;\n detail: string | null;\n}\n\n/**\n * The menu of a chosen collab agent that restricts its models: exactly its own\n * (`useAthenaAgentModelOptions`), the default as `null`. One choice is a label;\n * two or more a menu. Nothing is replaced on the host's behalf: a host choice\n * the agent does not list (an older pick) is shown and listed as it is, as is\n * a model the session pins outside the agent's list. A host choice that names\n * the default model explicitly is a pin, which the agent's next default would\n * not follow, so the menu then also offers \"Agent's own model\" (`null`).\n */\nfunction AgentModelMenu({\n choices,\n modelLabel,\n value,\n onChange,\n disabled,\n className,\n}: {\n choices: AthenaAgentModelOptions;\n modelLabel: (model: string) => string;\n value: string | null;\n onChange: (modelId: string | null) => void;\n disabled: boolean;\n className?: string;\n}) {\n const [open, setOpen] = useState(false);\n const pinsDefault = value !== null && value === choices.defaultModel;\n const items: AgentModelItem[] = choices.options.map((option) => {\n const display = modelLabel(option.model);\n return {\n value: option.isDefault && !pinsDefault ? AGENT_OWN_MODEL : option.model,\n label: option.label,\n isDefault: option.isDefault,\n detail: option.pinnedOutside\n ? 'Set for this conversation outside the agent'\n : display === option.label\n ? null\n : display,\n };\n });\n if (value !== null && !choices.options.some((option) => option.model === value)) {\n items.push({\n value,\n label: modelLabel(value),\n isDefault: false,\n detail: 'Not one of the agent’s models',\n });\n }\n if (pinsDefault) {\n items.push({\n value: AGENT_OWN_MODEL,\n label: 'Agent’s own model',\n isDefault: false,\n detail: 'Follows the agent’s default',\n });\n }\n const selectedValue = value ?? AGENT_OWN_MODEL;\n const selected = items.find((item) => item.value === selectedValue) ?? null;\n const label = selected?.label || AGENT_MODEL_LABEL;\n\n if (items.length < 2) {\n return (\n <span\n role=\"img\"\n aria-label={`Model: ${label}`}\n title={selected ? `This agent runs ${label}` : 'This agent runs its own model'}\n data-slot=\"chat-model-picker-label\"\n className={cn(STATIC_CHIP_CLASS, className)}\n >\n <SparklesIcon className=\"size-3.5 shrink-0\" aria-hidden />\n <span className=\"truncate\">{label}</span>\n </span>\n );\n }\n return (\n <DropdownMenu.Root open={open} onOpenChange={setOpen}>\n <DropdownMenu.Trigger asChild>\n <button\n type=\"button\"\n className={cn(CHIP_CLASS, className)}\n disabled={disabled}\n aria-label={`Model: ${label}`}\n >\n <SparklesIcon className=\"size-3.5 shrink-0\" aria-hidden />\n <span className=\"truncate\">{label}</span>\n <ChevronDownIcon className=\"size-3 shrink-0\" aria-hidden />\n </button>\n </DropdownMenu.Trigger>\n <PickerMenu label=\"Model\">\n <DropdownMenu.RadioGroup\n value={selectedValue}\n onValueChange={(next) => onChange(next === AGENT_OWN_MODEL ? null : next)}\n >\n <DropdownMenu.Label className=\"px-2 pb-0.5 pt-1.5 text-[11px] font-medium uppercase tracking-wide text-muted-foreground\">\n Agent models\n </DropdownMenu.Label>\n {items.map((item) => (\n <PickerItem key={item.value} value={item.value} detail={item.detail}>\n {item.label}\n {item.isDefault ? ' (default)' : ''}\n </PickerItem>\n ))}\n </DropdownMenu.RadioGroup>\n </PickerMenu>\n </DropdownMenu.Root>\n );\n}\n\nexport interface ChatAgentPickerProps {\n /** The chosen collab agent's asset id; `null` is Athena. */\n value: string | null;\n onChange: (agentId: string | null) => void;\n disabled?: boolean;\n className?: string;\n}\n\n/** The \"Athena\" item's value: no collab agent. */\nconst NO_AGENT = '__athena__';\n\n/** Who answers new messages: Athena, or a published collab agent the person can see. */\nexport function ChatAgentPicker({ value, onChange, disabled = false, className }: ChatAgentPickerProps) {\n const catalog = useAthenaAgentCatalog();\n const [open, setOpen] = useState(false);\n const agents = catalog.data ?? [];\n const label = value === null ? 'Athena' : (agents.find((agent) => agent.id === value)?.name ?? 'Agent');\n // The chosen agent is gone (unpublished, or no longer shared with this person): fall back to\n // Athena, so new messages do not target an agent they cannot reach. Once per choice.\n const clearedRef = useRef<string | null>(null);\n useEffect(() => {\n if (!catalog.isSuccess || value === null || clearedRef.current === value) return;\n if (agents.some((agent) => agent.id === value)) return;\n clearedRef.current = value;\n onChange(null);\n }, [catalog.isSuccess, agents, value, onChange]);\n return (\n <DropdownMenu.Root open={open} onOpenChange={setOpen}>\n <DropdownMenu.Trigger asChild>\n <button\n type=\"button\"\n className={cn(CHIP_CLASS, className)}\n disabled={disabled}\n aria-label={`Agent: ${label}`}\n >\n <BotIcon className=\"size-3.5 shrink-0\" aria-hidden />\n <span className=\"truncate\">{label}</span>\n <ChevronDownIcon className=\"size-3 shrink-0\" aria-hidden />\n </button>\n </DropdownMenu.Trigger>\n <PickerMenu label=\"Agent\">\n <DropdownMenu.RadioGroup\n value={value ?? NO_AGENT}\n onValueChange={(next) => onChange(next === NO_AGENT ? null : next)}\n >\n <PickerItem value={NO_AGENT}>Athena</PickerItem>\n {catalog.isError && <PickerNote alert>Couldn’t load the agents. Try again in a moment.</PickerNote>}\n {agents.map((agent) => (\n <PickerItem key={agent.id} value={agent.id}>\n {agent.name}\n </PickerItem>\n ))}\n </DropdownMenu.RadioGroup>\n </PickerMenu>\n </DropdownMenu.Root>\n );\n}\n\nexport interface ChatModePickerProps {\n /** The mode the session runs in: `base` or a mode's id. */\n value: string;\n /** The modes to offer. */\n options: readonly AthenaChatModeOption[];\n onChange: (modeId: string) => void;\n /** The name of `value` when it is none of `options`. */\n valueLabel?: string;\n disabled?: boolean;\n /** Why the picker is disabled, shown as its tooltip. */\n disabledReason?: string;\n className?: string;\n}\n\n/**\n * Which of the agent's modes the chat runs in, as a chip with a radio menu\n * like the other composer pickers. Controlled: `useAthenaChatMode` gives the\n * options, the current mode and `select`, which `AthenaChat`'s built-in menu\n * ({@link AthenaChatModeMenu}) wires up for you.\n */\nexport function ChatModePicker({\n value,\n options,\n onChange,\n valueLabel,\n disabled = false,\n disabledReason,\n className,\n}: ChatModePickerProps) {\n const [open, setOpen] = useState(false);\n const label = options.find((option) => option.id === value)?.label ?? valueLabel ?? value;\n return (\n <DropdownMenu.Root open={open} onOpenChange={setOpen}>\n <DropdownMenu.Trigger asChild>\n <button\n type=\"button\"\n className={cn(CHIP_CLASS, className)}\n disabled={disabled}\n title={disabled ? disabledReason : undefined}\n aria-label={`Mode: ${label}`}\n data-slot=\"chat-mode-picker\"\n >\n <LayersIcon className=\"size-3.5 shrink-0\" aria-hidden />\n <span className=\"truncate\">{label}</span>\n <ChevronDownIcon className=\"size-3 shrink-0\" aria-hidden />\n </button>\n </DropdownMenu.Trigger>\n <PickerMenu label=\"Mode\">\n <DropdownMenu.RadioGroup value={value} onValueChange={onChange}>\n {options.map((option) => (\n <PickerItem key={option.id} value={option.id}>\n {option.label}\n </PickerItem>\n ))}\n </DropdownMenu.RadioGroup>\n </PickerMenu>\n </DropdownMenu.Root>\n );\n}\n\n/**\n * `AthenaChat`'s mode menu: {@link ChatModePicker} over `useAthenaChatMode`,\n * shown only while the provider's `modes` give the chat two or more modes.\n */\nexport function AthenaChatModeMenu({ className }: { className?: string }) {\n const mode = useAthenaChatMode();\n if (mode.status !== 'ready') return null;\n return (\n <ChatModePicker\n value={mode.current}\n valueLabel={mode.currentLabel}\n options={mode.options}\n onChange={mode.select}\n disabled={!mode.canSwitch}\n disabledReason=\"This channel keeps each conversation in the mode it started in. Start a new conversation to pick another.\"\n className={className}\n />\n );\n}\n"],"names":["useAthenaThemeStyle","usePortalContainer","jsx","DropdownMenu","portalSurfaceStyle","cn","jsxs","CheckIcon","useContext","AthenaAgentSelectionContext","agentAssetIdOf","useAgentModelChoices","useAthenaModelCatalog","useState","resolveCatalogModelId","useRef","useEffect","SparklesIcon","ChevronDownIcon","groupModelsByProvider","useAthenaAgentCatalog","BotIcon","LayersIcon","useAthenaChatMode"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"chat-pickers.cjs","sources":["../../src/catalog/chat-pickers.tsx"],"sourcesContent":["import { BotIcon, CheckIcon, ChevronDownIcon, LayersIcon, SparklesIcon } from 'lucide-react';\nimport { DropdownMenu } from 'radix-ui';\nimport { type ReactNode, useContext, useEffect, useRef, useState } from 'react';\nimport { usePortalContainer } from '../lib/owner-document';\nimport { portalSurfaceStyle } from '../lib/portal-surface';\nimport { cn } from '../lib/utils';\nimport { AthenaAgentSelectionContext } from '../provider/agent-selection-context';\nimport { useAthenaThemeStyle } from '../provider/theme-style-context';\nimport type { AthenaChatModeOption } from './agent-mode-menu';\nimport { agentAssetIdOf } from './agent-model-options';\nimport {\n type AthenaAgentModelOptions,\n groupModelsByProvider,\n resolveCatalogModelId,\n useAgentModelChoices,\n useAthenaAgentCatalog,\n useAthenaModelCatalog,\n} from './runtime-catalog';\nimport { useAthenaChatMode } from './use-athena-chat-mode';\n\n/**\n * The composer's agent and model pickers: compact chips for `AthenaChat`'s `toolbarStart` slot\n * that open a menu, as ChatGPT's and Codex's composers do. They are controlled: the host keeps the\n * choice (and remembers it if it likes) and passes it to `AthenaProvider` as `model` and\n * `agent=\"collab_agent:<id>\"`. New messages run with the choice. The menus are Radix radio menus,\n * so arrow keys, typeahead, Escape and focus return work as in any native menu.\n */\n\nconst CHIP_CLASS =\n 'inline-flex h-7 max-w-[14rem] items-center gap-1 rounded-md px-2 text-xs text-muted-foreground hover:bg-muted hover:text-foreground focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring disabled:pointer-events-none disabled:opacity-50';\n\n/** The chip without a menu: one choice, shown as a label. */\nconst STATIC_CHIP_CLASS =\n 'inline-flex h-7 max-w-[14rem] items-center gap-1 rounded-md px-2 text-xs text-muted-foreground';\n\nconst ITEM_CLASS =\n 'relative flex w-full cursor-default select-none items-center gap-2 rounded-sm py-1.5 pl-2 pr-7 text-sm outline-none data-[highlighted]:bg-muted data-[state=checked]:font-medium';\n\n/** The \"Agent's own model\" item's value: a chosen agent runs the model its author set. */\nconst AGENT_OWN_MODEL = '__agent_own_model__';\n\n/** What the chip says while a chosen agent's model is not known. */\nconst AGENT_MODEL_LABEL = 'Agent’s model';\n\n/** The menu body, portaled and themed like the SDK's popovers (it renders outside the provider). */\nfunction PickerMenu({ label, children }: { label: string; children: ReactNode }) {\n const themeStyle = useAthenaThemeStyle();\n const container = usePortalContainer();\n return (\n <DropdownMenu.Portal container={container}>\n <DropdownMenu.Content\n align=\"start\"\n sideOffset={4}\n collisionPadding={8}\n aria-label={label}\n // Its box and colours inline: no host stylesheet can take them away\n // (lib/portal-surface.ts).\n style={portalSurfaceStyle({ surface: 'popover', themeStyle })}\n className={cn(\n 'athena-sdk athena-sdk-chrome',\n 'z-50 block max-h-80 w-64 overflow-y-auto rounded-md border bg-popover p-1 text-popover-foreground shadow-md outline-none',\n )}\n >\n {children}\n </DropdownMenu.Content>\n </DropdownMenu.Portal>\n );\n}\n\nfunction PickerItem({\n value,\n detail,\n children,\n}: {\n value: string;\n /** A second, muted line (the model behind an author's label, or why the item is listed). */\n detail?: ReactNode;\n children: ReactNode;\n}) {\n return (\n <DropdownMenu.RadioItem value={value} className={ITEM_CLASS}>\n {detail ? (\n <span className=\"flex min-w-0 flex-1 flex-col\">\n <span className=\"truncate\">{children}</span>\n <span className=\"truncate text-xs font-normal text-muted-foreground\">{detail}</span>\n </span>\n ) : (\n <span className=\"min-w-0 flex-1 truncate\">{children}</span>\n )}\n <DropdownMenu.ItemIndicator className=\"absolute right-2 inline-flex\">\n <CheckIcon className=\"size-3.5\" aria-hidden />\n </DropdownMenu.ItemIndicator>\n </DropdownMenu.RadioItem>\n );\n}\n\n/**\n * Where a chip disabled with a reason keeps it: a disabled button gets no pointer events, so its\n * reason is also the tooltip of a wrapper the pointer reaches (the button carries it as its own\n * description, for a screen reader). Without a reason, the chip alone.\n */\nfunction DisabledReason({ reason, children }: { reason: string | null; children: ReactNode }) {\n if (!reason) return <>{children}</>;\n return (\n <span className=\"inline-flex\" title={reason} data-slot=\"chat-picker-disabled-reason\">\n {children}\n </span>\n );\n}\n\n/**\n * A picker's menu, closed while the picker is disabled: one open when it turns disabled (Athena out\n * of reach while it shows) closes, and it opens again only on the person's next press, never by\n * itself once the picker is back. `choose` drops a choice made while disabled.\n */\nfunction usePickerMenu(disabled: boolean): {\n open: boolean;\n setOpen: (next: boolean) => void;\n choose: (apply: () => void) => void;\n} {\n const [open, setOpenState] = useState(false);\n if (disabled && open) setOpenState(false);\n return {\n open: open && !disabled,\n setOpen: (next) => setOpenState(next && !disabled),\n choose: (apply) => {\n if (!disabled) apply();\n },\n };\n}\n\nfunction PickerNote({ children, alert = false }: { children: ReactNode; alert?: boolean }) {\n return (\n <p\n className={cn('px-2 py-1.5 text-xs', alert ? 'text-destructive' : 'text-muted-foreground')}\n role={alert ? 'alert' : undefined}\n >\n {children}\n </p>\n );\n}\n\nexport interface ChatModelPickerProps {\n /** The chosen model id; `null` lets a selected agent run its own model. */\n value: string | null;\n onChange: (modelId: string | null) => void;\n /** The model a person who chose nothing runs, e.g. `claude-opus-5-5`. */\n defaultModelId: string;\n /**\n * A collab agent is chosen: the picker offers the workspace's models and\n * \"Agent's own model\" (`null`), as before, unless the agent restricts its\n * models (its \"Allow any workspace model\" switch is off), when it offers\n * exactly the agent's own (`useAthenaAgentModelOptions`). Which agent:\n * `agent`, else the one the surrounding `AthenaProvider` runs as.\n */\n agentSelected?: boolean;\n /**\n * The chosen collab agent, as its asset id or `collab_agent:<id>` (implies\n * `agentSelected`). `null` is no agent.\n */\n agent?: string | null;\n /**\n * The collab channel the chat runs on (its model override is the default\n * there). Defaults to the provider's `channel` when the agent is the\n * provider's.\n */\n channel?: string | null;\n disabled?: boolean;\n /**\n * Why the picker is disabled (e.g. \"Needs a connection…\" while the host knows Athena can't be\n * reached), shown as its tooltip while `disabled`.\n */\n disabledReason?: string;\n className?: string;\n}\n\n/**\n * Which model new messages run, from the models the workspace allows this\n * person; with an agent chosen, also \"Agent's own model\" (`null`), or exactly\n * the models its author listed when the agent restricts its models\n * (`allowAnyModel: false`, opt-in per agent). The host passes the choice to\n * `AthenaProvider` as `model`; a change reaches an open session too (the\n * provider writes it to the session's server config).\n */\nexport function ChatModelPicker({\n value,\n onChange,\n defaultModelId,\n agentSelected = false,\n agent,\n channel,\n disabled = false,\n disabledReason,\n className,\n}: ChatModelPickerProps) {\n const providerSelection = useContext(AthenaAgentSelectionContext);\n const agentAssetId =\n agent !== undefined\n ? agentAssetIdOf(agent)\n : agentSelected\n ? (providerSelection?.agentAssetId ?? null)\n : null;\n if (agentAssetId !== null) {\n const agentChannel =\n channel !== undefined\n ? channel\n : providerSelection?.agentAssetId === agentAssetId\n ? providerSelection.channel\n : null;\n return (\n <AgentAwareModelPicker\n agentAssetId={agentAssetId}\n channel={agentChannel}\n value={value}\n onChange={onChange}\n defaultModelId={defaultModelId}\n disabled={disabled}\n disabledReason={disabledReason}\n className={className}\n />\n );\n }\n return (\n <WorkspaceModelPicker\n value={value}\n onChange={onChange}\n defaultModelId={defaultModelId}\n agentSelected={agentSelected}\n disabled={disabled}\n disabledReason={disabledReason}\n className={className}\n />\n );\n}\n\n/**\n * The picker with a collab agent chosen. The agent is read first: one that\n * restricts its models gets {@link AgentModelMenu}; every other agent (the\n * default, and one this person cannot read) gets the workspace menu as before,\n * its \"Agent's own model\" naming the agent's default when known. Until the\n * read settles the workspace menu shows but replaces nothing on the host's\n * behalf, since the host's model may be one only the agent offers.\n */\nfunction AgentAwareModelPicker({\n agentAssetId,\n channel,\n value,\n onChange,\n defaultModelId,\n disabled,\n disabledReason,\n className,\n}: {\n agentAssetId: string;\n channel: string | null;\n value: string | null;\n onChange: (modelId: string | null) => void;\n defaultModelId: string;\n disabled: boolean;\n disabledReason?: string;\n className?: string;\n}) {\n // One query client for the agent read and the catalog both menus name models from.\n const { choices, modelLabel, catalog } = useAgentModelChoices({ agent: agentAssetId, channel });\n if (choices.status === 'ready' && !choices.allowAnyModel) {\n return (\n <AgentModelMenu\n choices={choices}\n modelLabel={modelLabel}\n value={value}\n onChange={onChange}\n disabled={disabled}\n disabledReason={disabledReason}\n className={className}\n />\n );\n }\n return (\n <WorkspaceModelMenu\n catalog={catalog}\n value={value}\n onChange={onChange}\n defaultModelId={defaultModelId}\n agentSelected\n agentDefaultLabel={choices.defaultModel === null ? null : modelLabel(choices.defaultModel)}\n holdReplacement={choices.status === 'loading'}\n disabled={disabled}\n disabledReason={disabledReason}\n className={className}\n />\n );\n}\n\n/** The model picker over the workspace's catalog, with no agent chosen (or none it can name). */\nfunction WorkspaceModelPicker(props: {\n value: string | null;\n onChange: (modelId: string | null) => void;\n defaultModelId: string;\n agentSelected: boolean;\n disabled: boolean;\n disabledReason?: string;\n className?: string;\n}) {\n const catalog = useAthenaModelCatalog();\n return <WorkspaceModelMenu catalog={catalog} {...props} />;\n}\n\n/** The workspace catalog's menu (the picker as it was before agents could restrict models). */\nfunction WorkspaceModelMenu({\n catalog,\n value,\n onChange,\n defaultModelId,\n agentSelected,\n agentDefaultLabel = null,\n holdReplacement = false,\n disabled,\n disabledReason,\n className,\n}: {\n catalog: ReturnType<typeof useAthenaModelCatalog>;\n value: string | null;\n onChange: (modelId: string | null) => void;\n defaultModelId: string;\n agentSelected: boolean;\n /** The chosen agent's default model (its channel's override when it has one), named under \"Agent's own model\". */\n agentDefaultLabel?: string | null;\n /** Replace no unoffered choice yet (the chosen agent is still being read). */\n holdReplacement?: boolean;\n disabled: boolean;\n disabledReason?: string;\n className?: string;\n}) {\n const { open, setOpen, choose } = usePickerMenu(disabled);\n const models = catalog.data ?? [];\n const reason = disabled ? (disabledReason ?? null) : null;\n const resolved =\n value === null && agentSelected\n ? null\n : resolveCatalogModelId({ stored: value, defaultModelId, models });\n const current = models.find((model) => model.id === resolved);\n const label = resolved === null ? 'Agent’s model' : (current?.label ?? resolved);\n // The host's choice is no longer offered (retired, or the workspace stopped allowing it): hand\n // the host the model the chip shows, so new messages run it instead of the dropped id. Once per\n // choice, so a host that keeps the old value is not asked again on every render.\n const replacedRef = useRef<string | null>(null);\n useEffect(() => {\n if (holdReplacement) return;\n if (!catalog.isSuccess || value === null || resolved === null || resolved === value) return;\n if (models.some((model) => model.id === value) || replacedRef.current === value) return;\n replacedRef.current = value;\n onChange(resolved);\n }, [holdReplacement, catalog.isSuccess, models, value, resolved, onChange]);\n return (\n <DisabledReason reason={reason}>\n <DropdownMenu.Root open={open} onOpenChange={setOpen}>\n <DropdownMenu.Trigger asChild>\n <button\n type=\"button\"\n className={cn(CHIP_CLASS, className)}\n disabled={disabled}\n title={reason ?? undefined}\n aria-label={`Model: ${label}`}\n >\n <SparklesIcon className=\"size-3.5 shrink-0\" aria-hidden />\n <span className=\"truncate\">{label}</span>\n <ChevronDownIcon className=\"size-3 shrink-0\" aria-hidden />\n </button>\n </DropdownMenu.Trigger>\n <PickerMenu label=\"Model\">\n <DropdownMenu.RadioGroup\n value={resolved ?? AGENT_OWN_MODEL}\n onValueChange={(next) => choose(() => onChange(next === AGENT_OWN_MODEL ? null : next))}\n >\n {agentSelected && (\n <PickerItem value={AGENT_OWN_MODEL} detail={agentDefaultLabel}>\n Agent’s own model\n </PickerItem>\n )}\n {catalog.isPending && <PickerNote>Loading models…</PickerNote>}\n {catalog.isError && <PickerNote alert>Couldn’t load the models. Try again in a moment.</PickerNote>}\n {groupModelsByProvider({ models }).map((group) => (\n <DropdownMenu.Group key={group.provider}>\n <DropdownMenu.Label className=\"px-2 pb-0.5 pt-1.5 text-[11px] font-medium uppercase tracking-wide text-muted-foreground\">\n {group.provider}\n </DropdownMenu.Label>\n {group.models.map((model) => (\n <PickerItem key={model.id} value={model.id}>\n {model.label}\n {model.status === 'LEGACY' ? ' (legacy)' : ''}\n </PickerItem>\n ))}\n </DropdownMenu.Group>\n ))}\n </DropdownMenu.RadioGroup>\n </PickerMenu>\n </DropdownMenu.Root>\n </DisabledReason>\n );\n}\n\n/** One item of the agent's model menu. */\ninterface AgentModelItem {\n /** The radio value: a model id, or {@link AGENT_OWN_MODEL} for \"the agent's default\" (`null`). */\n value: string;\n label: string;\n isDefault: boolean;\n detail: string | null;\n}\n\n/**\n * The menu of a chosen collab agent that restricts its models: exactly its own\n * (`useAthenaAgentModelOptions`), the default as `null`. One choice is a label;\n * two or more a menu. Nothing is replaced on the host's behalf: a host choice\n * the agent does not list (an older pick) is shown and listed as it is, as is\n * a model the session pins outside the agent's list. A host choice that names\n * the default model explicitly is a pin, which the agent's next default would\n * not follow, so the menu then also offers \"Agent's own model\" (`null`).\n */\nfunction AgentModelMenu({\n choices,\n modelLabel,\n value,\n onChange,\n disabled,\n disabledReason,\n className,\n}: {\n choices: AthenaAgentModelOptions;\n modelLabel: (model: string) => string;\n value: string | null;\n onChange: (modelId: string | null) => void;\n disabled: boolean;\n disabledReason?: string;\n className?: string;\n}) {\n const { open, setOpen, choose } = usePickerMenu(disabled);\n const reason = disabled ? (disabledReason ?? null) : null;\n const pinsDefault = value !== null && value === choices.defaultModel;\n const items: AgentModelItem[] = choices.options.map((option) => {\n const display = modelLabel(option.model);\n return {\n value: option.isDefault && !pinsDefault ? AGENT_OWN_MODEL : option.model,\n label: option.label,\n isDefault: option.isDefault,\n detail: option.pinnedOutside\n ? 'Set for this conversation outside the agent'\n : display === option.label\n ? null\n : display,\n };\n });\n if (value !== null && !choices.options.some((option) => option.model === value)) {\n items.push({\n value,\n label: modelLabel(value),\n isDefault: false,\n detail: 'Not one of the agent’s models',\n });\n }\n if (pinsDefault) {\n items.push({\n value: AGENT_OWN_MODEL,\n label: 'Agent’s own model',\n isDefault: false,\n detail: 'Follows the agent’s default',\n });\n }\n const selectedValue = value ?? AGENT_OWN_MODEL;\n const selected = items.find((item) => item.value === selectedValue) ?? null;\n const label = selected?.label || AGENT_MODEL_LABEL;\n\n if (items.length < 2) {\n return (\n <span\n role=\"img\"\n aria-label={`Model: ${label}`}\n title={selected ? `This agent runs ${label}` : 'This agent runs its own model'}\n data-slot=\"chat-model-picker-label\"\n className={cn(STATIC_CHIP_CLASS, className)}\n >\n <SparklesIcon className=\"size-3.5 shrink-0\" aria-hidden />\n <span className=\"truncate\">{label}</span>\n </span>\n );\n }\n return (\n <DisabledReason reason={reason}>\n <DropdownMenu.Root open={open} onOpenChange={setOpen}>\n <DropdownMenu.Trigger asChild>\n <button\n type=\"button\"\n className={cn(CHIP_CLASS, className)}\n disabled={disabled}\n title={reason ?? undefined}\n aria-label={`Model: ${label}`}\n >\n <SparklesIcon className=\"size-3.5 shrink-0\" aria-hidden />\n <span className=\"truncate\">{label}</span>\n <ChevronDownIcon className=\"size-3 shrink-0\" aria-hidden />\n </button>\n </DropdownMenu.Trigger>\n <PickerMenu label=\"Model\">\n <DropdownMenu.RadioGroup\n value={selectedValue}\n onValueChange={(next) => choose(() => onChange(next === AGENT_OWN_MODEL ? null : next))}\n >\n <DropdownMenu.Label className=\"px-2 pb-0.5 pt-1.5 text-[11px] font-medium uppercase tracking-wide text-muted-foreground\">\n Agent models\n </DropdownMenu.Label>\n {items.map((item) => (\n <PickerItem key={item.value} value={item.value} detail={item.detail}>\n {item.label}\n {item.isDefault ? ' (default)' : ''}\n </PickerItem>\n ))}\n </DropdownMenu.RadioGroup>\n </PickerMenu>\n </DropdownMenu.Root>\n </DisabledReason>\n );\n}\n\nexport interface ChatAgentPickerProps {\n /** The chosen collab agent's asset id; `null` is Athena. */\n value: string | null;\n onChange: (agentId: string | null) => void;\n disabled?: boolean;\n /**\n * Why the picker is disabled (e.g. \"Needs a connection…\" while the host knows Athena can't be\n * reached), shown as its tooltip while `disabled`.\n */\n disabledReason?: string;\n className?: string;\n}\n\n/** The \"Athena\" item's value: no collab agent. */\nconst NO_AGENT = '__athena__';\n\n/** Who answers new messages: Athena, or a published collab agent the person can see. */\nexport function ChatAgentPicker({\n value,\n onChange,\n disabled = false,\n disabledReason,\n className,\n}: ChatAgentPickerProps) {\n const catalog = useAthenaAgentCatalog();\n const { open, setOpen, choose } = usePickerMenu(disabled);\n const reason = disabled ? (disabledReason ?? null) : null;\n const agents = catalog.data ?? [];\n const label = value === null ? 'Athena' : (agents.find((agent) => agent.id === value)?.name ?? 'Agent');\n // The chosen agent is gone (unpublished, or no longer shared with this person): fall back to\n // Athena, so new messages do not target an agent they cannot reach. Once per choice.\n const clearedRef = useRef<string | null>(null);\n useEffect(() => {\n if (!catalog.isSuccess || value === null || clearedRef.current === value) return;\n if (agents.some((agent) => agent.id === value)) return;\n clearedRef.current = value;\n onChange(null);\n }, [catalog.isSuccess, agents, value, onChange]);\n return (\n <DisabledReason reason={reason}>\n <DropdownMenu.Root open={open} onOpenChange={setOpen}>\n <DropdownMenu.Trigger asChild>\n <button\n type=\"button\"\n className={cn(CHIP_CLASS, className)}\n disabled={disabled}\n title={reason ?? undefined}\n aria-label={`Agent: ${label}`}\n >\n <BotIcon className=\"size-3.5 shrink-0\" aria-hidden />\n <span className=\"truncate\">{label}</span>\n <ChevronDownIcon className=\"size-3 shrink-0\" aria-hidden />\n </button>\n </DropdownMenu.Trigger>\n <PickerMenu label=\"Agent\">\n <DropdownMenu.RadioGroup\n value={value ?? NO_AGENT}\n onValueChange={(next) => choose(() => onChange(next === NO_AGENT ? null : next))}\n >\n <PickerItem value={NO_AGENT}>Athena</PickerItem>\n {catalog.isError && <PickerNote alert>Couldn’t load the agents. Try again in a moment.</PickerNote>}\n {agents.map((agent) => (\n <PickerItem key={agent.id} value={agent.id}>\n {agent.name}\n </PickerItem>\n ))}\n </DropdownMenu.RadioGroup>\n </PickerMenu>\n </DropdownMenu.Root>\n </DisabledReason>\n );\n}\n\nexport interface ChatModePickerProps {\n /** The mode the session runs in: `base` or a mode's id. */\n value: string;\n /** The modes to offer. */\n options: readonly AthenaChatModeOption[];\n onChange: (modeId: string) => void;\n /** The name of `value` when it is none of `options`. */\n valueLabel?: string;\n disabled?: boolean;\n /** Why the picker is disabled, shown as its tooltip. */\n disabledReason?: string;\n className?: string;\n}\n\n/**\n * Which of the agent's modes the chat runs in, as a chip with a radio menu\n * like the other composer pickers. Controlled: `useAthenaChatMode` gives the\n * options, the current mode and `select`, which `AthenaChat`'s built-in menu\n * ({@link AthenaChatModeMenu}) wires up for you.\n */\nexport function ChatModePicker({\n value,\n options,\n onChange,\n valueLabel,\n disabled = false,\n disabledReason,\n className,\n}: ChatModePickerProps) {\n const { open, setOpen, choose } = usePickerMenu(disabled);\n const label = options.find((option) => option.id === value)?.label ?? valueLabel ?? value;\n const reason = disabled ? (disabledReason ?? null) : null;\n return (\n <DisabledReason reason={reason}>\n <DropdownMenu.Root open={open} onOpenChange={setOpen}>\n <DropdownMenu.Trigger asChild>\n <button\n type=\"button\"\n className={cn(CHIP_CLASS, className)}\n disabled={disabled}\n title={reason ?? undefined}\n aria-label={`Mode: ${label}`}\n data-slot=\"chat-mode-picker\"\n >\n <LayersIcon className=\"size-3.5 shrink-0\" aria-hidden />\n <span className=\"truncate\">{label}</span>\n <ChevronDownIcon className=\"size-3 shrink-0\" aria-hidden />\n </button>\n </DropdownMenu.Trigger>\n <PickerMenu label=\"Mode\">\n <DropdownMenu.RadioGroup value={value} onValueChange={(next) => choose(() => onChange(next))}>\n {options.map((option) => (\n <PickerItem key={option.id} value={option.id}>\n {option.label}\n </PickerItem>\n ))}\n </DropdownMenu.RadioGroup>\n </PickerMenu>\n </DropdownMenu.Root>\n </DisabledReason>\n );\n}\n\n/**\n * `AthenaChat`'s mode menu: {@link ChatModePicker} over `useAthenaChatMode`,\n * shown only while the provider's `modes` give the chat two or more modes.\n */\nexport function AthenaChatModeMenu({ className }: { className?: string }) {\n const mode = useAthenaChatMode();\n if (mode.status !== 'ready') return null;\n return (\n <ChatModePicker\n value={mode.current}\n valueLabel={mode.currentLabel}\n options={mode.options}\n onChange={mode.select}\n disabled={!mode.canSwitch}\n disabledReason=\"This channel keeps each conversation in the mode it started in. Start a new conversation to pick another.\"\n className={className}\n />\n );\n}\n"],"names":["useAthenaThemeStyle","usePortalContainer","jsx","DropdownMenu","portalSurfaceStyle","cn","jsxs","CheckIcon","Fragment","useState","useContext","AthenaAgentSelectionContext","agentAssetIdOf","useAgentModelChoices","useAthenaModelCatalog","resolveCatalogModelId","useRef","useEffect","SparklesIcon","ChevronDownIcon","groupModelsByProvider","useAthenaAgentCatalog","BotIcon","LayersIcon","useAthenaChatMode"],"mappings":"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"}
|
|
@@ -25,6 +25,11 @@ export interface ChatModelPickerProps {
|
|
|
25
25
|
*/
|
|
26
26
|
channel?: string | null;
|
|
27
27
|
disabled?: boolean;
|
|
28
|
+
/**
|
|
29
|
+
* Why the picker is disabled (e.g. "Needs a connection…" while the host knows Athena can't be
|
|
30
|
+
* reached), shown as its tooltip while `disabled`.
|
|
31
|
+
*/
|
|
32
|
+
disabledReason?: string;
|
|
28
33
|
className?: string;
|
|
29
34
|
}
|
|
30
35
|
/**
|
|
@@ -35,16 +40,21 @@ export interface ChatModelPickerProps {
|
|
|
35
40
|
* `AthenaProvider` as `model`; a change reaches an open session too (the
|
|
36
41
|
* provider writes it to the session's server config).
|
|
37
42
|
*/
|
|
38
|
-
export declare function ChatModelPicker({ value, onChange, defaultModelId, agentSelected, agent, channel, disabled, className, }: ChatModelPickerProps): import("react").JSX.Element;
|
|
43
|
+
export declare function ChatModelPicker({ value, onChange, defaultModelId, agentSelected, agent, channel, disabled, disabledReason, className, }: ChatModelPickerProps): import("react").JSX.Element;
|
|
39
44
|
export interface ChatAgentPickerProps {
|
|
40
45
|
/** The chosen collab agent's asset id; `null` is Athena. */
|
|
41
46
|
value: string | null;
|
|
42
47
|
onChange: (agentId: string | null) => void;
|
|
43
48
|
disabled?: boolean;
|
|
49
|
+
/**
|
|
50
|
+
* Why the picker is disabled (e.g. "Needs a connection…" while the host knows Athena can't be
|
|
51
|
+
* reached), shown as its tooltip while `disabled`.
|
|
52
|
+
*/
|
|
53
|
+
disabledReason?: string;
|
|
44
54
|
className?: string;
|
|
45
55
|
}
|
|
46
56
|
/** Who answers new messages: Athena, or a published collab agent the person can see. */
|
|
47
|
-
export declare function ChatAgentPicker({ value, onChange, disabled, className }: ChatAgentPickerProps): import("react").JSX.Element;
|
|
57
|
+
export declare function ChatAgentPicker({ value, onChange, disabled, disabledReason, className, }: ChatAgentPickerProps): import("react").JSX.Element;
|
|
48
58
|
export interface ChatModePickerProps {
|
|
49
59
|
/** The mode the session runs in: `base` or a mode's id. */
|
|
50
60
|
value: string;
|