@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
|
@@ -30,7 +30,8 @@ function toTimelineStep({
|
|
|
30
30
|
item,
|
|
31
31
|
index,
|
|
32
32
|
resolveToolDisplayName,
|
|
33
|
-
assetTitles
|
|
33
|
+
assetTitles,
|
|
34
|
+
withSourceUrls = false
|
|
34
35
|
}) {
|
|
35
36
|
const id = item.id ?? `${item.kind}-${index}`;
|
|
36
37
|
if (item.kind !== "tool") {
|
|
@@ -44,8 +45,13 @@ function toTimelineStep({
|
|
|
44
45
|
...summary.detail ? { detail: summary.detail } : {},
|
|
45
46
|
...summary.meta ? { chip: summary.meta } : {},
|
|
46
47
|
state: item.state,
|
|
47
|
-
kind: item.kind
|
|
48
|
+
kind: item.kind,
|
|
49
|
+
toolName: item.toolName
|
|
48
50
|
};
|
|
51
|
+
if (withSourceUrls && item.state === "complete") {
|
|
52
|
+
const sourceUrls = collectSourceUrls(item.result);
|
|
53
|
+
if (sourceUrls.length > 0) step.sourceUrls = sourceUrls;
|
|
54
|
+
}
|
|
49
55
|
const args = item.args;
|
|
50
56
|
if (!args || !item.toolName.startsWith("chrome_")) return step;
|
|
51
57
|
const tabId = args.tabId ?? args.tab_id;
|
|
@@ -69,6 +75,59 @@ function visibleTimelineSteps({ steps, limit }) {
|
|
|
69
75
|
(step, index) => index >= steps.length - safeLimit || step.state === "running" || step.state === "waiting"
|
|
70
76
|
);
|
|
71
77
|
}
|
|
78
|
+
const SOURCE_URL_KEYS = ["url", "link", "href"];
|
|
79
|
+
const MAX_SOURCE_URLS = 3;
|
|
80
|
+
const MAX_SOURCE_DEPTH = 4;
|
|
81
|
+
const MAX_SOURCE_RESULT_CHARS = 256 * 1024;
|
|
82
|
+
function parseJson(text) {
|
|
83
|
+
if (text.length > MAX_SOURCE_RESULT_CHARS) return void 0;
|
|
84
|
+
try {
|
|
85
|
+
return JSON.parse(text);
|
|
86
|
+
} catch {
|
|
87
|
+
return void 0;
|
|
88
|
+
}
|
|
89
|
+
}
|
|
90
|
+
function parseResult(result) {
|
|
91
|
+
if (typeof result === "string") return parseJson(result);
|
|
92
|
+
if (Array.isArray(result) && result.length > 0 && result.every(isTextBlock)) {
|
|
93
|
+
return parseJson(result.map((block) => block.text).join(""));
|
|
94
|
+
}
|
|
95
|
+
return result;
|
|
96
|
+
}
|
|
97
|
+
function isTextBlock(value) {
|
|
98
|
+
if (typeof value !== "object" || value === null) return false;
|
|
99
|
+
const block = value;
|
|
100
|
+
return block.type === "text" && typeof block.text === "string";
|
|
101
|
+
}
|
|
102
|
+
function collectSourceUrls(result) {
|
|
103
|
+
const urls = [];
|
|
104
|
+
const hosts = /* @__PURE__ */ new Set();
|
|
105
|
+
const visit = ({ value, depth }) => {
|
|
106
|
+
if (urls.length >= MAX_SOURCE_URLS || depth > MAX_SOURCE_DEPTH || value === null) return;
|
|
107
|
+
if (Array.isArray(value)) {
|
|
108
|
+
for (const entry of value) visit({ value: entry, depth: depth + 1 });
|
|
109
|
+
return;
|
|
110
|
+
}
|
|
111
|
+
if (typeof value !== "object") return;
|
|
112
|
+
const record = value;
|
|
113
|
+
for (const key of SOURCE_URL_KEYS) {
|
|
114
|
+
const candidate = record[key];
|
|
115
|
+
if (typeof candidate !== "string") continue;
|
|
116
|
+
const host = pageTarget(candidate);
|
|
117
|
+
if (host && !hosts.has(host)) {
|
|
118
|
+
hosts.add(host);
|
|
119
|
+
urls.push(candidate);
|
|
120
|
+
}
|
|
121
|
+
break;
|
|
122
|
+
}
|
|
123
|
+
for (const entry of Object.values(record)) {
|
|
124
|
+
if (typeof entry === "object") visit({ value: entry, depth: depth + 1 });
|
|
125
|
+
}
|
|
126
|
+
};
|
|
127
|
+
visit({ value: parseResult(result), depth: 0 });
|
|
128
|
+
return urls;
|
|
129
|
+
}
|
|
130
|
+
exports.collectSourceUrls = collectSourceUrls;
|
|
72
131
|
exports.toTimelineStep = toTimelineStep;
|
|
73
132
|
exports.visibleTimelineSteps = visibleTimelineSteps;
|
|
74
133
|
//# sourceMappingURL=timeline-step.cjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"timeline-step.cjs","sources":["../../../src/chat/super-grouping/timeline-step.ts"],"sourcesContent":["import { type ActivityItem, getReasoningLabel, summarizeActivityTool } from './activity-timeline';\n\nexport interface TimelineStep {\n id: string;\n /** The row's line (\"Ran git status\"); `code` marks the literal part of it. */\n verb: string;\n /** The span of `verb` that is literal code (a command, a file name, a pattern). */\n code?: string;\n /** Longer form for the row's tooltip (the full path, the whole command line). */\n detail?: string;\n /** A short chip after the line (\"+4 −1\", \"on jevin-box\", \"Tab 7\"). */\n chip?: string;\n state: ActivityItem['state'];\n kind: ActivityItem['kind'];\n}\n\nconst COMPUTER_ACTIONS: Record<string, readonly [string, string]> = {\n screenshot: ['Taking screenshot', 'Took screenshot'],\n left_click: ['Clicking', 'Clicked'],\n right_click: ['Right-clicking', 'Right-clicked'],\n double_click: ['Double-clicking', 'Double-clicked'],\n triple_click: ['Triple-clicking', 'Triple-clicked'],\n type: ['Typing', 'Typed'],\n key: ['Pressing keys', 'Pressed keys'],\n scroll: ['Scrolling', 'Scrolled'],\n scroll_to: ['Scrolling to element', 'Scrolled to element'],\n zoom: ['Zooming', 'Zoomed'],\n hover: ['Hovering', 'Hovered'],\n left_click_drag: ['Dragging', 'Dragged'],\n wait: ['Waiting', 'Waited'],\n};\n\n/** Keep credentials, query strings, fragments, and typed input out of summary chips. */\nfunction pageTarget(value: unknown): string | undefined {\n if (typeof value !== 'string') return undefined;\n try {\n const url = new URL(value);\n if (url.protocol !== 'http:' && url.protocol !== 'https:') return undefined;\n return url.hostname;\n } catch {\n return undefined;\n }\n}\n\nexport function toTimelineStep({\n item,\n index,\n resolveToolDisplayName,\n assetTitles,\n}: {\n item: ActivityItem;\n index: number;\n resolveToolDisplayName?: (toolName: string) => string | undefined;\n /** Titles for asset ids earlier results in the turn named (see `collectAssetTitles`). */\n assetTitles?: ReadonlyMap<string, string>;\n}): TimelineStep {\n const id = item.id ?? `${item.kind}-${index}`;\n if (item.kind !== 'tool') {\n return { id, verb: getReasoningLabel(item.text, item.state), state: item.state, kind: item.kind };\n }\n const summary = summarizeActivityTool(item, resolveToolDisplayName, assetTitles);\n const step: TimelineStep = {\n id,\n verb: summary.label,\n ...(summary.code ? { code: summary.code } : {}),\n ...(summary.detail ? { detail: summary.detail } : {}),\n ...(summary.meta ? { chip: summary.meta } : {}),\n state: item.state,\n kind: item.kind,\n };\n const args = item.args;\n if (!args || !item.toolName.startsWith('chrome_')) return step;\n\n const tabId = args.tabId ?? args.tab_id;\n step.chip = pageTarget(args.url) ?? (typeof tabId === 'number' ? `Tab ${tabId}` : undefined);\n // Only successful/live actions get action-specific tense. Failure, rejection,\n // cancellation and approval copy continues to come from the shared classifier.\n if (item.state !== 'running' && item.state !== 'complete') return step;\n if (item.toolName === 'chrome_computer' && typeof args.action === 'string') {\n const action = COMPUTER_ACTIONS[args.action];\n if (action) step.verb = action[item.state === 'running' ? 0 : 1];\n } else if (item.toolName === 'chrome_navigate') {\n step.verb = item.state === 'running' ? 'Navigating to' : 'Navigated to';\n } else if (item.toolName === 'chrome_batch' && Array.isArray(args.steps)) {\n const count = args.steps.length;\n step.verb = item.state === 'running' ? 'Running Chrome actions' : 'Completed Chrome actions';\n step.chip = `${count} ${count === 1 ? 'action' : 'actions'}`;\n }\n return step;\n}\n\n/** Every unresolved parallel call stays visible even when older settled steps fold away. */\nexport function visibleTimelineSteps({ steps, limit }: { steps: readonly TimelineStep[]; limit: number }) {\n const safeLimit = Number.isFinite(limit) ? Math.max(1, Math.floor(limit)) : 3;\n return steps.filter(\n (step, index) =>\n index >= steps.length - safeLimit || step.state === 'running' || step.state === 'waiting',\n );\n}\n"],"names":["getReasoningLabel","summarizeActivityTool"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"timeline-step.cjs","sources":["../../../src/chat/super-grouping/timeline-step.ts"],"sourcesContent":["import { type ActivityItem, getReasoningLabel, summarizeActivityTool } from './activity-timeline';\n\nexport interface TimelineStep {\n id: string;\n /** The row's line (\"Ran git status\"); `code` marks the literal part of it. */\n verb: string;\n /** The span of `verb` that is literal code (a command, a file name, a pattern). */\n code?: string;\n /** Longer form for the row's tooltip (the full path, the whole command line). */\n detail?: string;\n /** A short chip after the line (\"+4 −1\", \"on jevin-box\", \"Tab 7\"). */\n chip?: string;\n state: ActivityItem['state'];\n kind: ActivityItem['kind'];\n /** The tool a `tool` step called, so a host can show that tool's icon. */\n toolName?: string;\n /** Web pages a finished step's result names (up to three, one per site), for their favicons. */\n sourceUrls?: readonly string[];\n}\n\nconst COMPUTER_ACTIONS: Record<string, readonly [string, string]> = {\n screenshot: ['Taking screenshot', 'Took screenshot'],\n left_click: ['Clicking', 'Clicked'],\n right_click: ['Right-clicking', 'Right-clicked'],\n double_click: ['Double-clicking', 'Double-clicked'],\n triple_click: ['Triple-clicking', 'Triple-clicked'],\n type: ['Typing', 'Typed'],\n key: ['Pressing keys', 'Pressed keys'],\n scroll: ['Scrolling', 'Scrolled'],\n scroll_to: ['Scrolling to element', 'Scrolled to element'],\n zoom: ['Zooming', 'Zoomed'],\n hover: ['Hovering', 'Hovered'],\n left_click_drag: ['Dragging', 'Dragged'],\n wait: ['Waiting', 'Waited'],\n};\n\n/** Keep credentials, query strings, fragments, and typed input out of summary chips. */\nfunction pageTarget(value: unknown): string | undefined {\n if (typeof value !== 'string') return undefined;\n try {\n const url = new URL(value);\n if (url.protocol !== 'http:' && url.protocol !== 'https:') return undefined;\n return url.hostname;\n } catch {\n return undefined;\n }\n}\n\nexport function toTimelineStep({\n item,\n index,\n resolveToolDisplayName,\n assetTitles,\n withSourceUrls = false,\n}: {\n item: ActivityItem;\n index: number;\n resolveToolDisplayName?: (toolName: string) => string | undefined;\n /** Titles for asset ids earlier results in the turn named (see `collectAssetTitles`). */\n assetTitles?: ReadonlyMap<string, string>;\n /** Read the web pages a finished result names into `sourceUrls` (only when the card shows favicons). */\n withSourceUrls?: boolean;\n}): TimelineStep {\n const id = item.id ?? `${item.kind}-${index}`;\n if (item.kind !== 'tool') {\n return { id, verb: getReasoningLabel(item.text, item.state), state: item.state, kind: item.kind };\n }\n const summary = summarizeActivityTool(item, resolveToolDisplayName, assetTitles);\n const step: TimelineStep = {\n id,\n verb: summary.label,\n ...(summary.code ? { code: summary.code } : {}),\n ...(summary.detail ? { detail: summary.detail } : {}),\n ...(summary.meta ? { chip: summary.meta } : {}),\n state: item.state,\n kind: item.kind,\n toolName: item.toolName,\n };\n if (withSourceUrls && item.state === 'complete') {\n const sourceUrls = collectSourceUrls(item.result);\n if (sourceUrls.length > 0) step.sourceUrls = sourceUrls;\n }\n const args = item.args;\n if (!args || !item.toolName.startsWith('chrome_')) return step;\n\n const tabId = args.tabId ?? args.tab_id;\n step.chip = pageTarget(args.url) ?? (typeof tabId === 'number' ? `Tab ${tabId}` : undefined);\n // Only successful/live actions get action-specific tense. Failure, rejection,\n // cancellation and approval copy continues to come from the shared classifier.\n if (item.state !== 'running' && item.state !== 'complete') return step;\n if (item.toolName === 'chrome_computer' && typeof args.action === 'string') {\n const action = COMPUTER_ACTIONS[args.action];\n if (action) step.verb = action[item.state === 'running' ? 0 : 1];\n } else if (item.toolName === 'chrome_navigate') {\n step.verb = item.state === 'running' ? 'Navigating to' : 'Navigated to';\n } else if (item.toolName === 'chrome_batch' && Array.isArray(args.steps)) {\n const count = args.steps.length;\n step.verb = item.state === 'running' ? 'Running Chrome actions' : 'Completed Chrome actions';\n step.chip = `${count} ${count === 1 ? 'action' : 'actions'}`;\n }\n return step;\n}\n\n/** Every unresolved parallel call stays visible even when older settled steps fold away. */\nexport function visibleTimelineSteps({ steps, limit }: { steps: readonly TimelineStep[]; limit: number }) {\n const safeLimit = Number.isFinite(limit) ? Math.max(1, Math.floor(limit)) : 3;\n return steps.filter(\n (step, index) =>\n index >= steps.length - safeLimit || step.state === 'running' || step.state === 'waiting',\n );\n}\n\nconst SOURCE_URL_KEYS = ['url', 'link', 'href'] as const;\nconst MAX_SOURCE_URLS = 3;\nconst MAX_SOURCE_DEPTH = 4;\n\nconst MAX_SOURCE_RESULT_CHARS = 256 * 1024;\n\nfunction parseJson(text: string): unknown {\n if (text.length > MAX_SOURCE_RESULT_CHARS) return undefined;\n try {\n return JSON.parse(text);\n } catch {\n return undefined;\n }\n}\n\n/** A result as JSON: an object, a JSON string, or LangChain text blocks holding JSON. */\nfunction parseResult(result: unknown): unknown {\n if (typeof result === 'string') return parseJson(result);\n if (Array.isArray(result) && result.length > 0 && result.every(isTextBlock)) {\n return parseJson(result.map((block) => block.text).join(''));\n }\n return result;\n}\n\nfunction isTextBlock(value: unknown): value is { type: 'text'; text: string } {\n if (typeof value !== 'object' || value === null) return false;\n const block = value as Record<string, unknown>;\n return block.type === 'text' && typeof block.text === 'string';\n}\n\n/**\n * The web pages a tool result lists (a search's `results[].url`), at most one\n * per site and three in all, in the order the result gives them. Only http(s)\n * links count; anything else in the result is ignored.\n */\nexport function collectSourceUrls(result: unknown): string[] {\n const urls: string[] = [];\n const hosts = new Set<string>();\n const visit = ({ value, depth }: { value: unknown; depth: number }): void => {\n if (urls.length >= MAX_SOURCE_URLS || depth > MAX_SOURCE_DEPTH || value === null) return;\n if (Array.isArray(value)) {\n for (const entry of value) visit({ value: entry, depth: depth + 1 });\n return;\n }\n if (typeof value !== 'object') return;\n const record = value as Record<string, unknown>;\n for (const key of SOURCE_URL_KEYS) {\n const candidate = record[key];\n if (typeof candidate !== 'string') continue;\n const host = pageTarget(candidate);\n if (host && !hosts.has(host)) {\n hosts.add(host);\n urls.push(candidate);\n }\n break;\n }\n for (const entry of Object.values(record)) {\n if (typeof entry === 'object') visit({ value: entry, depth: depth + 1 });\n }\n };\n visit({ value: parseResult(result), depth: 0 });\n return urls;\n}\n"],"names":["getReasoningLabel","summarizeActivityTool"],"mappings":";;;AAoBA,MAAM,mBAA8D;AAAA,EAClE,YAAY,CAAC,qBAAqB,iBAAiB;AAAA,EACnD,YAAY,CAAC,YAAY,SAAS;AAAA,EAClC,aAAa,CAAC,kBAAkB,eAAe;AAAA,EAC/C,cAAc,CAAC,mBAAmB,gBAAgB;AAAA,EAClD,cAAc,CAAC,mBAAmB,gBAAgB;AAAA,EAClD,MAAM,CAAC,UAAU,OAAO;AAAA,EACxB,KAAK,CAAC,iBAAiB,cAAc;AAAA,EACrC,QAAQ,CAAC,aAAa,UAAU;AAAA,EAChC,WAAW,CAAC,wBAAwB,qBAAqB;AAAA,EACzD,MAAM,CAAC,WAAW,QAAQ;AAAA,EAC1B,OAAO,CAAC,YAAY,SAAS;AAAA,EAC7B,iBAAiB,CAAC,YAAY,SAAS;AAAA,EACvC,MAAM,CAAC,WAAW,QAAQ;AAC5B;AAGA,SAAS,WAAW,OAAoC;AACtD,MAAI,OAAO,UAAU,SAAU,QAAO;AACtC,MAAI;AACF,UAAM,MAAM,IAAI,IAAI,KAAK;AACzB,QAAI,IAAI,aAAa,WAAW,IAAI,aAAa,SAAU,QAAO;AAClE,WAAO,IAAI;AAAA,EACb,QAAQ;AACN,WAAO;AAAA,EACT;AACF;AAEO,SAAS,eAAe;AAAA,EAC7B;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA,iBAAiB;AACnB,GAQiB;AACf,QAAM,KAAK,KAAK,MAAM,GAAG,KAAK,IAAI,IAAI,KAAK;AAC3C,MAAI,KAAK,SAAS,QAAQ;AACxB,WAAO,EAAE,IAAI,MAAMA,iBAAAA,kBAAkB,KAAK,MAAM,KAAK,KAAK,GAAG,OAAO,KAAK,OAAO,MAAM,KAAK,KAAA;AAAA,EAC7F;AACA,QAAM,UAAUC,iBAAAA,sBAAsB,MAAM,wBAAwB,WAAW;AAC/E,QAAM,OAAqB;AAAA,IACzB;AAAA,IACA,MAAM,QAAQ;AAAA,IACd,GAAI,QAAQ,OAAO,EAAE,MAAM,QAAQ,KAAA,IAAS,CAAA;AAAA,IAC5C,GAAI,QAAQ,SAAS,EAAE,QAAQ,QAAQ,OAAA,IAAW,CAAA;AAAA,IAClD,GAAI,QAAQ,OAAO,EAAE,MAAM,QAAQ,KAAA,IAAS,CAAA;AAAA,IAC5C,OAAO,KAAK;AAAA,IACZ,MAAM,KAAK;AAAA,IACX,UAAU,KAAK;AAAA,EAAA;AAEjB,MAAI,kBAAkB,KAAK,UAAU,YAAY;AAC/C,UAAM,aAAa,kBAAkB,KAAK,MAAM;AAChD,QAAI,WAAW,SAAS,EAAG,MAAK,aAAa;AAAA,EAC/C;AACA,QAAM,OAAO,KAAK;AAClB,MAAI,CAAC,QAAQ,CAAC,KAAK,SAAS,WAAW,SAAS,EAAG,QAAO;AAE1D,QAAM,QAAQ,KAAK,SAAS,KAAK;AACjC,OAAK,OAAO,WAAW,KAAK,GAAG,MAAM,OAAO,UAAU,WAAW,OAAO,KAAK,KAAK;AAGlF,MAAI,KAAK,UAAU,aAAa,KAAK,UAAU,WAAY,QAAO;AAClE,MAAI,KAAK,aAAa,qBAAqB,OAAO,KAAK,WAAW,UAAU;AAC1E,UAAM,SAAS,iBAAiB,KAAK,MAAM;AAC3C,QAAI,aAAa,OAAO,OAAO,KAAK,UAAU,YAAY,IAAI,CAAC;AAAA,EACjE,WAAW,KAAK,aAAa,mBAAmB;AAC9C,SAAK,OAAO,KAAK,UAAU,YAAY,kBAAkB;AAAA,EAC3D,WAAW,KAAK,aAAa,kBAAkB,MAAM,QAAQ,KAAK,KAAK,GAAG;AACxE,UAAM,QAAQ,KAAK,MAAM;AACzB,SAAK,OAAO,KAAK,UAAU,YAAY,2BAA2B;AAClE,SAAK,OAAO,GAAG,KAAK,IAAI,UAAU,IAAI,WAAW,SAAS;AAAA,EAC5D;AACA,SAAO;AACT;AAGO,SAAS,qBAAqB,EAAE,OAAO,SAA4D;AACxG,QAAM,YAAY,OAAO,SAAS,KAAK,IAAI,KAAK,IAAI,GAAG,KAAK,MAAM,KAAK,CAAC,IAAI;AAC5E,SAAO,MAAM;AAAA,IACX,CAAC,MAAM,UACL,SAAS,MAAM,SAAS,aAAa,KAAK,UAAU,aAAa,KAAK,UAAU;AAAA,EAAA;AAEtF;AAEA,MAAM,kBAAkB,CAAC,OAAO,QAAQ,MAAM;AAC9C,MAAM,kBAAkB;AACxB,MAAM,mBAAmB;AAEzB,MAAM,0BAA0B,MAAM;AAEtC,SAAS,UAAU,MAAuB;AACxC,MAAI,KAAK,SAAS,wBAAyB,QAAO;AAClD,MAAI;AACF,WAAO,KAAK,MAAM,IAAI;AAAA,EACxB,QAAQ;AACN,WAAO;AAAA,EACT;AACF;AAGA,SAAS,YAAY,QAA0B;AAC7C,MAAI,OAAO,WAAW,SAAU,QAAO,UAAU,MAAM;AACvD,MAAI,MAAM,QAAQ,MAAM,KAAK,OAAO,SAAS,KAAK,OAAO,MAAM,WAAW,GAAG;AAC3E,WAAO,UAAU,OAAO,IAAI,CAAC,UAAU,MAAM,IAAI,EAAE,KAAK,EAAE,CAAC;AAAA,EAC7D;AACA,SAAO;AACT;AAEA,SAAS,YAAY,OAAyD;AAC5E,MAAI,OAAO,UAAU,YAAY,UAAU,KAAM,QAAO;AACxD,QAAM,QAAQ;AACd,SAAO,MAAM,SAAS,UAAU,OAAO,MAAM,SAAS;AACxD;AAOO,SAAS,kBAAkB,QAA2B;AAC3D,QAAM,OAAiB,CAAA;AACvB,QAAM,4BAAY,IAAA;AAClB,QAAM,QAAQ,CAAC,EAAE,OAAO,YAAqD;AAC3E,QAAI,KAAK,UAAU,mBAAmB,QAAQ,oBAAoB,UAAU,KAAM;AAClF,QAAI,MAAM,QAAQ,KAAK,GAAG;AACxB,iBAAW,SAAS,MAAO,OAAM,EAAE,OAAO,OAAO,OAAO,QAAQ,GAAG;AACnE;AAAA,IACF;AACA,QAAI,OAAO,UAAU,SAAU;AAC/B,UAAM,SAAS;AACf,eAAW,OAAO,iBAAiB;AACjC,YAAM,YAAY,OAAO,GAAG;AAC5B,UAAI,OAAO,cAAc,SAAU;AACnC,YAAM,OAAO,WAAW,SAAS;AACjC,UAAI,QAAQ,CAAC,MAAM,IAAI,IAAI,GAAG;AAC5B,cAAM,IAAI,IAAI;AACd,aAAK,KAAK,SAAS;AAAA,MACrB;AACA;AAAA,IACF;AACA,eAAW,SAAS,OAAO,OAAO,MAAM,GAAG;AACzC,UAAI,OAAO,UAAU,SAAU,OAAM,EAAE,OAAO,OAAO,OAAO,QAAQ,GAAG;AAAA,IACzE;AAAA,EACF;AACA,QAAM,EAAE,OAAO,YAAY,MAAM,GAAG,OAAO,GAAG;AAC9C,SAAO;AACT;;;;"}
|
|
@@ -11,16 +11,28 @@ export interface TimelineStep {
|
|
|
11
11
|
chip?: string;
|
|
12
12
|
state: ActivityItem['state'];
|
|
13
13
|
kind: ActivityItem['kind'];
|
|
14
|
+
/** The tool a `tool` step called, so a host can show that tool's icon. */
|
|
15
|
+
toolName?: string;
|
|
16
|
+
/** Web pages a finished step's result names (up to three, one per site), for their favicons. */
|
|
17
|
+
sourceUrls?: readonly string[];
|
|
14
18
|
}
|
|
15
|
-
export declare function toTimelineStep({ item, index, resolveToolDisplayName, assetTitles, }: {
|
|
19
|
+
export declare function toTimelineStep({ item, index, resolveToolDisplayName, assetTitles, withSourceUrls, }: {
|
|
16
20
|
item: ActivityItem;
|
|
17
21
|
index: number;
|
|
18
22
|
resolveToolDisplayName?: (toolName: string) => string | undefined;
|
|
19
23
|
/** Titles for asset ids earlier results in the turn named (see `collectAssetTitles`). */
|
|
20
24
|
assetTitles?: ReadonlyMap<string, string>;
|
|
25
|
+
/** Read the web pages a finished result names into `sourceUrls` (only when the card shows favicons). */
|
|
26
|
+
withSourceUrls?: boolean;
|
|
21
27
|
}): TimelineStep;
|
|
22
28
|
/** Every unresolved parallel call stays visible even when older settled steps fold away. */
|
|
23
29
|
export declare function visibleTimelineSteps({ steps, limit }: {
|
|
24
30
|
steps: readonly TimelineStep[];
|
|
25
31
|
limit: number;
|
|
26
32
|
}): TimelineStep[];
|
|
33
|
+
/**
|
|
34
|
+
* The web pages a tool result lists (a search's `results[].url`), at most one
|
|
35
|
+
* per site and three in all, in the order the result gives them. Only http(s)
|
|
36
|
+
* links count; anything else in the result is ignored.
|
|
37
|
+
*/
|
|
38
|
+
export declare function collectSourceUrls(result: unknown): string[];
|
|
@@ -28,7 +28,8 @@ function toTimelineStep({
|
|
|
28
28
|
item,
|
|
29
29
|
index,
|
|
30
30
|
resolveToolDisplayName,
|
|
31
|
-
assetTitles
|
|
31
|
+
assetTitles,
|
|
32
|
+
withSourceUrls = false
|
|
32
33
|
}) {
|
|
33
34
|
const id = item.id ?? `${item.kind}-${index}`;
|
|
34
35
|
if (item.kind !== "tool") {
|
|
@@ -42,8 +43,13 @@ function toTimelineStep({
|
|
|
42
43
|
...summary.detail ? { detail: summary.detail } : {},
|
|
43
44
|
...summary.meta ? { chip: summary.meta } : {},
|
|
44
45
|
state: item.state,
|
|
45
|
-
kind: item.kind
|
|
46
|
+
kind: item.kind,
|
|
47
|
+
toolName: item.toolName
|
|
46
48
|
};
|
|
49
|
+
if (withSourceUrls && item.state === "complete") {
|
|
50
|
+
const sourceUrls = collectSourceUrls(item.result);
|
|
51
|
+
if (sourceUrls.length > 0) step.sourceUrls = sourceUrls;
|
|
52
|
+
}
|
|
47
53
|
const args = item.args;
|
|
48
54
|
if (!args || !item.toolName.startsWith("chrome_")) return step;
|
|
49
55
|
const tabId = args.tabId ?? args.tab_id;
|
|
@@ -67,7 +73,60 @@ function visibleTimelineSteps({ steps, limit }) {
|
|
|
67
73
|
(step, index) => index >= steps.length - safeLimit || step.state === "running" || step.state === "waiting"
|
|
68
74
|
);
|
|
69
75
|
}
|
|
76
|
+
const SOURCE_URL_KEYS = ["url", "link", "href"];
|
|
77
|
+
const MAX_SOURCE_URLS = 3;
|
|
78
|
+
const MAX_SOURCE_DEPTH = 4;
|
|
79
|
+
const MAX_SOURCE_RESULT_CHARS = 256 * 1024;
|
|
80
|
+
function parseJson(text) {
|
|
81
|
+
if (text.length > MAX_SOURCE_RESULT_CHARS) return void 0;
|
|
82
|
+
try {
|
|
83
|
+
return JSON.parse(text);
|
|
84
|
+
} catch {
|
|
85
|
+
return void 0;
|
|
86
|
+
}
|
|
87
|
+
}
|
|
88
|
+
function parseResult(result) {
|
|
89
|
+
if (typeof result === "string") return parseJson(result);
|
|
90
|
+
if (Array.isArray(result) && result.length > 0 && result.every(isTextBlock)) {
|
|
91
|
+
return parseJson(result.map((block) => block.text).join(""));
|
|
92
|
+
}
|
|
93
|
+
return result;
|
|
94
|
+
}
|
|
95
|
+
function isTextBlock(value) {
|
|
96
|
+
if (typeof value !== "object" || value === null) return false;
|
|
97
|
+
const block = value;
|
|
98
|
+
return block.type === "text" && typeof block.text === "string";
|
|
99
|
+
}
|
|
100
|
+
function collectSourceUrls(result) {
|
|
101
|
+
const urls = [];
|
|
102
|
+
const hosts = /* @__PURE__ */ new Set();
|
|
103
|
+
const visit = ({ value, depth }) => {
|
|
104
|
+
if (urls.length >= MAX_SOURCE_URLS || depth > MAX_SOURCE_DEPTH || value === null) return;
|
|
105
|
+
if (Array.isArray(value)) {
|
|
106
|
+
for (const entry of value) visit({ value: entry, depth: depth + 1 });
|
|
107
|
+
return;
|
|
108
|
+
}
|
|
109
|
+
if (typeof value !== "object") return;
|
|
110
|
+
const record = value;
|
|
111
|
+
for (const key of SOURCE_URL_KEYS) {
|
|
112
|
+
const candidate = record[key];
|
|
113
|
+
if (typeof candidate !== "string") continue;
|
|
114
|
+
const host = pageTarget(candidate);
|
|
115
|
+
if (host && !hosts.has(host)) {
|
|
116
|
+
hosts.add(host);
|
|
117
|
+
urls.push(candidate);
|
|
118
|
+
}
|
|
119
|
+
break;
|
|
120
|
+
}
|
|
121
|
+
for (const entry of Object.values(record)) {
|
|
122
|
+
if (typeof entry === "object") visit({ value: entry, depth: depth + 1 });
|
|
123
|
+
}
|
|
124
|
+
};
|
|
125
|
+
visit({ value: parseResult(result), depth: 0 });
|
|
126
|
+
return urls;
|
|
127
|
+
}
|
|
70
128
|
export {
|
|
129
|
+
collectSourceUrls,
|
|
71
130
|
toTimelineStep,
|
|
72
131
|
visibleTimelineSteps
|
|
73
132
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"timeline-step.js","sources":["../../../src/chat/super-grouping/timeline-step.ts"],"sourcesContent":["import { type ActivityItem, getReasoningLabel, summarizeActivityTool } from './activity-timeline';\n\nexport interface TimelineStep {\n id: string;\n /** The row's line (\"Ran git status\"); `code` marks the literal part of it. */\n verb: string;\n /** The span of `verb` that is literal code (a command, a file name, a pattern). */\n code?: string;\n /** Longer form for the row's tooltip (the full path, the whole command line). */\n detail?: string;\n /** A short chip after the line (\"+4 −1\", \"on jevin-box\", \"Tab 7\"). */\n chip?: string;\n state: ActivityItem['state'];\n kind: ActivityItem['kind'];\n}\n\nconst COMPUTER_ACTIONS: Record<string, readonly [string, string]> = {\n screenshot: ['Taking screenshot', 'Took screenshot'],\n left_click: ['Clicking', 'Clicked'],\n right_click: ['Right-clicking', 'Right-clicked'],\n double_click: ['Double-clicking', 'Double-clicked'],\n triple_click: ['Triple-clicking', 'Triple-clicked'],\n type: ['Typing', 'Typed'],\n key: ['Pressing keys', 'Pressed keys'],\n scroll: ['Scrolling', 'Scrolled'],\n scroll_to: ['Scrolling to element', 'Scrolled to element'],\n zoom: ['Zooming', 'Zoomed'],\n hover: ['Hovering', 'Hovered'],\n left_click_drag: ['Dragging', 'Dragged'],\n wait: ['Waiting', 'Waited'],\n};\n\n/** Keep credentials, query strings, fragments, and typed input out of summary chips. */\nfunction pageTarget(value: unknown): string | undefined {\n if (typeof value !== 'string') return undefined;\n try {\n const url = new URL(value);\n if (url.protocol !== 'http:' && url.protocol !== 'https:') return undefined;\n return url.hostname;\n } catch {\n return undefined;\n }\n}\n\nexport function toTimelineStep({\n item,\n index,\n resolveToolDisplayName,\n assetTitles,\n}: {\n item: ActivityItem;\n index: number;\n resolveToolDisplayName?: (toolName: string) => string | undefined;\n /** Titles for asset ids earlier results in the turn named (see `collectAssetTitles`). */\n assetTitles?: ReadonlyMap<string, string>;\n}): TimelineStep {\n const id = item.id ?? `${item.kind}-${index}`;\n if (item.kind !== 'tool') {\n return { id, verb: getReasoningLabel(item.text, item.state), state: item.state, kind: item.kind };\n }\n const summary = summarizeActivityTool(item, resolveToolDisplayName, assetTitles);\n const step: TimelineStep = {\n id,\n verb: summary.label,\n ...(summary.code ? { code: summary.code } : {}),\n ...(summary.detail ? { detail: summary.detail } : {}),\n ...(summary.meta ? { chip: summary.meta } : {}),\n state: item.state,\n kind: item.kind,\n };\n const args = item.args;\n if (!args || !item.toolName.startsWith('chrome_')) return step;\n\n const tabId = args.tabId ?? args.tab_id;\n step.chip = pageTarget(args.url) ?? (typeof tabId === 'number' ? `Tab ${tabId}` : undefined);\n // Only successful/live actions get action-specific tense. Failure, rejection,\n // cancellation and approval copy continues to come from the shared classifier.\n if (item.state !== 'running' && item.state !== 'complete') return step;\n if (item.toolName === 'chrome_computer' && typeof args.action === 'string') {\n const action = COMPUTER_ACTIONS[args.action];\n if (action) step.verb = action[item.state === 'running' ? 0 : 1];\n } else if (item.toolName === 'chrome_navigate') {\n step.verb = item.state === 'running' ? 'Navigating to' : 'Navigated to';\n } else if (item.toolName === 'chrome_batch' && Array.isArray(args.steps)) {\n const count = args.steps.length;\n step.verb = item.state === 'running' ? 'Running Chrome actions' : 'Completed Chrome actions';\n step.chip = `${count} ${count === 1 ? 'action' : 'actions'}`;\n }\n return step;\n}\n\n/** Every unresolved parallel call stays visible even when older settled steps fold away. */\nexport function visibleTimelineSteps({ steps, limit }: { steps: readonly TimelineStep[]; limit: number }) {\n const safeLimit = Number.isFinite(limit) ? Math.max(1, Math.floor(limit)) : 3;\n return steps.filter(\n (step, index) =>\n index >= steps.length - safeLimit || step.state === 'running' || step.state === 'waiting',\n );\n}\n"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"timeline-step.js","sources":["../../../src/chat/super-grouping/timeline-step.ts"],"sourcesContent":["import { type ActivityItem, getReasoningLabel, summarizeActivityTool } from './activity-timeline';\n\nexport interface TimelineStep {\n id: string;\n /** The row's line (\"Ran git status\"); `code` marks the literal part of it. */\n verb: string;\n /** The span of `verb` that is literal code (a command, a file name, a pattern). */\n code?: string;\n /** Longer form for the row's tooltip (the full path, the whole command line). */\n detail?: string;\n /** A short chip after the line (\"+4 −1\", \"on jevin-box\", \"Tab 7\"). */\n chip?: string;\n state: ActivityItem['state'];\n kind: ActivityItem['kind'];\n /** The tool a `tool` step called, so a host can show that tool's icon. */\n toolName?: string;\n /** Web pages a finished step's result names (up to three, one per site), for their favicons. */\n sourceUrls?: readonly string[];\n}\n\nconst COMPUTER_ACTIONS: Record<string, readonly [string, string]> = {\n screenshot: ['Taking screenshot', 'Took screenshot'],\n left_click: ['Clicking', 'Clicked'],\n right_click: ['Right-clicking', 'Right-clicked'],\n double_click: ['Double-clicking', 'Double-clicked'],\n triple_click: ['Triple-clicking', 'Triple-clicked'],\n type: ['Typing', 'Typed'],\n key: ['Pressing keys', 'Pressed keys'],\n scroll: ['Scrolling', 'Scrolled'],\n scroll_to: ['Scrolling to element', 'Scrolled to element'],\n zoom: ['Zooming', 'Zoomed'],\n hover: ['Hovering', 'Hovered'],\n left_click_drag: ['Dragging', 'Dragged'],\n wait: ['Waiting', 'Waited'],\n};\n\n/** Keep credentials, query strings, fragments, and typed input out of summary chips. */\nfunction pageTarget(value: unknown): string | undefined {\n if (typeof value !== 'string') return undefined;\n try {\n const url = new URL(value);\n if (url.protocol !== 'http:' && url.protocol !== 'https:') return undefined;\n return url.hostname;\n } catch {\n return undefined;\n }\n}\n\nexport function toTimelineStep({\n item,\n index,\n resolveToolDisplayName,\n assetTitles,\n withSourceUrls = false,\n}: {\n item: ActivityItem;\n index: number;\n resolveToolDisplayName?: (toolName: string) => string | undefined;\n /** Titles for asset ids earlier results in the turn named (see `collectAssetTitles`). */\n assetTitles?: ReadonlyMap<string, string>;\n /** Read the web pages a finished result names into `sourceUrls` (only when the card shows favicons). */\n withSourceUrls?: boolean;\n}): TimelineStep {\n const id = item.id ?? `${item.kind}-${index}`;\n if (item.kind !== 'tool') {\n return { id, verb: getReasoningLabel(item.text, item.state), state: item.state, kind: item.kind };\n }\n const summary = summarizeActivityTool(item, resolveToolDisplayName, assetTitles);\n const step: TimelineStep = {\n id,\n verb: summary.label,\n ...(summary.code ? { code: summary.code } : {}),\n ...(summary.detail ? { detail: summary.detail } : {}),\n ...(summary.meta ? { chip: summary.meta } : {}),\n state: item.state,\n kind: item.kind,\n toolName: item.toolName,\n };\n if (withSourceUrls && item.state === 'complete') {\n const sourceUrls = collectSourceUrls(item.result);\n if (sourceUrls.length > 0) step.sourceUrls = sourceUrls;\n }\n const args = item.args;\n if (!args || !item.toolName.startsWith('chrome_')) return step;\n\n const tabId = args.tabId ?? args.tab_id;\n step.chip = pageTarget(args.url) ?? (typeof tabId === 'number' ? `Tab ${tabId}` : undefined);\n // Only successful/live actions get action-specific tense. Failure, rejection,\n // cancellation and approval copy continues to come from the shared classifier.\n if (item.state !== 'running' && item.state !== 'complete') return step;\n if (item.toolName === 'chrome_computer' && typeof args.action === 'string') {\n const action = COMPUTER_ACTIONS[args.action];\n if (action) step.verb = action[item.state === 'running' ? 0 : 1];\n } else if (item.toolName === 'chrome_navigate') {\n step.verb = item.state === 'running' ? 'Navigating to' : 'Navigated to';\n } else if (item.toolName === 'chrome_batch' && Array.isArray(args.steps)) {\n const count = args.steps.length;\n step.verb = item.state === 'running' ? 'Running Chrome actions' : 'Completed Chrome actions';\n step.chip = `${count} ${count === 1 ? 'action' : 'actions'}`;\n }\n return step;\n}\n\n/** Every unresolved parallel call stays visible even when older settled steps fold away. */\nexport function visibleTimelineSteps({ steps, limit }: { steps: readonly TimelineStep[]; limit: number }) {\n const safeLimit = Number.isFinite(limit) ? Math.max(1, Math.floor(limit)) : 3;\n return steps.filter(\n (step, index) =>\n index >= steps.length - safeLimit || step.state === 'running' || step.state === 'waiting',\n );\n}\n\nconst SOURCE_URL_KEYS = ['url', 'link', 'href'] as const;\nconst MAX_SOURCE_URLS = 3;\nconst MAX_SOURCE_DEPTH = 4;\n\nconst MAX_SOURCE_RESULT_CHARS = 256 * 1024;\n\nfunction parseJson(text: string): unknown {\n if (text.length > MAX_SOURCE_RESULT_CHARS) return undefined;\n try {\n return JSON.parse(text);\n } catch {\n return undefined;\n }\n}\n\n/** A result as JSON: an object, a JSON string, or LangChain text blocks holding JSON. */\nfunction parseResult(result: unknown): unknown {\n if (typeof result === 'string') return parseJson(result);\n if (Array.isArray(result) && result.length > 0 && result.every(isTextBlock)) {\n return parseJson(result.map((block) => block.text).join(''));\n }\n return result;\n}\n\nfunction isTextBlock(value: unknown): value is { type: 'text'; text: string } {\n if (typeof value !== 'object' || value === null) return false;\n const block = value as Record<string, unknown>;\n return block.type === 'text' && typeof block.text === 'string';\n}\n\n/**\n * The web pages a tool result lists (a search's `results[].url`), at most one\n * per site and three in all, in the order the result gives them. Only http(s)\n * links count; anything else in the result is ignored.\n */\nexport function collectSourceUrls(result: unknown): string[] {\n const urls: string[] = [];\n const hosts = new Set<string>();\n const visit = ({ value, depth }: { value: unknown; depth: number }): void => {\n if (urls.length >= MAX_SOURCE_URLS || depth > MAX_SOURCE_DEPTH || value === null) return;\n if (Array.isArray(value)) {\n for (const entry of value) visit({ value: entry, depth: depth + 1 });\n return;\n }\n if (typeof value !== 'object') return;\n const record = value as Record<string, unknown>;\n for (const key of SOURCE_URL_KEYS) {\n const candidate = record[key];\n if (typeof candidate !== 'string') continue;\n const host = pageTarget(candidate);\n if (host && !hosts.has(host)) {\n hosts.add(host);\n urls.push(candidate);\n }\n break;\n }\n for (const entry of Object.values(record)) {\n if (typeof entry === 'object') visit({ value: entry, depth: depth + 1 });\n }\n };\n visit({ value: parseResult(result), depth: 0 });\n return urls;\n}\n"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
|
|
3
|
+
const jsxRuntime = require("react/jsx-runtime");
|
|
4
|
+
const require$$0 = require("react");
|
|
5
|
+
const ToolPartPlacementContext = require$$0.createContext(null);
|
|
6
|
+
function ToolPartPlacementProvider({
|
|
7
|
+
value,
|
|
8
|
+
children
|
|
9
|
+
}) {
|
|
10
|
+
return /* @__PURE__ */ jsxRuntime.jsx(ToolPartPlacementContext.Provider, { value, children });
|
|
11
|
+
}
|
|
12
|
+
function useToolPartPlacement() {
|
|
13
|
+
return require$$0.useContext(ToolPartPlacementContext);
|
|
14
|
+
}
|
|
15
|
+
exports.ToolPartPlacementProvider = ToolPartPlacementProvider;
|
|
16
|
+
exports.useToolPartPlacement = useToolPartPlacement;
|
|
17
|
+
//# sourceMappingURL=tool-part-placement.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tool-part-placement.cjs","sources":["../../../src/chat/super-grouping/tool-part-placement.tsx"],"sourcesContent":["'use client';\n\nimport { createContext, type ReactNode, useContext } from 'react';\n\n/**\n * Where `SuperGroupingCard` renders a tool call's UI outside its details\n * panel: as the call's own row in the step list the card opens to (`'step'`,\n * the host's `isStepRowTool`), or in the slot below the header that stays on\n * screen with the card closed (`'inline'`, the host's `isInlineTool`). One\n * call can render in both, so its tool UI reads the placement to draw the part\n * that belongs there (Olympus: a code run's row in the steps, the subagents it\n * dispatched below the header).\n */\nexport type ToolPartPlacement = 'step' | 'inline';\n\nconst ToolPartPlacementContext = createContext<ToolPartPlacement | null>(null);\n\n/**\n * The placement of the tool UIs below it. `null` ends one: the card's details\n * panel, and content a tool UI opens that lays its own tool calls out (a\n * transcript drawer opened from a subagent card in the inline slot).\n */\nexport function ToolPartPlacementProvider({\n value,\n children,\n}: {\n value: ToolPartPlacement | null;\n children: ReactNode;\n}) {\n return <ToolPartPlacementContext.Provider value={value}>{children}</ToolPartPlacementContext.Provider>;\n}\n\n/** Where the card renders the calling tool UI; `null` anywhere else (its details panel, an ungrouped thread). */\nexport function useToolPartPlacement(): ToolPartPlacement | null {\n return useContext(ToolPartPlacementContext);\n}\n"],"names":["createContext","jsx","useContext"],"mappings":";;;;AAeA,MAAM,2BAA2BA,WAAAA,cAAwC,IAAI;AAOtE,SAAS,0BAA0B;AAAA,EACxC;AAAA,EACA;AACF,GAGG;AACD,SAAOC,2BAAAA,IAAC,yBAAyB,UAAzB,EAAkC,OAAe,SAAA,CAAS;AACpE;AAGO,SAAS,uBAAiD;AAC/D,SAAOC,WAAAA,WAAW,wBAAwB;AAC5C;;;"}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import { type ReactNode } from 'react';
|
|
2
|
+
/**
|
|
3
|
+
* Where `SuperGroupingCard` renders a tool call's UI outside its details
|
|
4
|
+
* panel: as the call's own row in the step list the card opens to (`'step'`,
|
|
5
|
+
* the host's `isStepRowTool`), or in the slot below the header that stays on
|
|
6
|
+
* screen with the card closed (`'inline'`, the host's `isInlineTool`). One
|
|
7
|
+
* call can render in both, so its tool UI reads the placement to draw the part
|
|
8
|
+
* that belongs there (Olympus: a code run's row in the steps, the subagents it
|
|
9
|
+
* dispatched below the header).
|
|
10
|
+
*/
|
|
11
|
+
export type ToolPartPlacement = 'step' | 'inline';
|
|
12
|
+
/**
|
|
13
|
+
* The placement of the tool UIs below it. `null` ends one: the card's details
|
|
14
|
+
* panel, and content a tool UI opens that lays its own tool calls out (a
|
|
15
|
+
* transcript drawer opened from a subagent card in the inline slot).
|
|
16
|
+
*/
|
|
17
|
+
export declare function ToolPartPlacementProvider({ value, children, }: {
|
|
18
|
+
value: ToolPartPlacement | null;
|
|
19
|
+
children: ReactNode;
|
|
20
|
+
}): import("react").JSX.Element;
|
|
21
|
+
/** Where the card renders the calling tool UI; `null` anywhere else (its details panel, an ungrouped thread). */
|
|
22
|
+
export declare function useToolPartPlacement(): ToolPartPlacement | null;
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import { jsx } from "react/jsx-runtime";
|
|
2
|
+
import { useContext, createContext } from "react";
|
|
3
|
+
const ToolPartPlacementContext = createContext(null);
|
|
4
|
+
function ToolPartPlacementProvider({
|
|
5
|
+
value,
|
|
6
|
+
children
|
|
7
|
+
}) {
|
|
8
|
+
return /* @__PURE__ */ jsx(ToolPartPlacementContext.Provider, { value, children });
|
|
9
|
+
}
|
|
10
|
+
function useToolPartPlacement() {
|
|
11
|
+
return useContext(ToolPartPlacementContext);
|
|
12
|
+
}
|
|
13
|
+
export {
|
|
14
|
+
ToolPartPlacementProvider,
|
|
15
|
+
useToolPartPlacement
|
|
16
|
+
};
|
|
17
|
+
//# sourceMappingURL=tool-part-placement.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tool-part-placement.js","sources":["../../../src/chat/super-grouping/tool-part-placement.tsx"],"sourcesContent":["'use client';\n\nimport { createContext, type ReactNode, useContext } from 'react';\n\n/**\n * Where `SuperGroupingCard` renders a tool call's UI outside its details\n * panel: as the call's own row in the step list the card opens to (`'step'`,\n * the host's `isStepRowTool`), or in the slot below the header that stays on\n * screen with the card closed (`'inline'`, the host's `isInlineTool`). One\n * call can render in both, so its tool UI reads the placement to draw the part\n * that belongs there (Olympus: a code run's row in the steps, the subagents it\n * dispatched below the header).\n */\nexport type ToolPartPlacement = 'step' | 'inline';\n\nconst ToolPartPlacementContext = createContext<ToolPartPlacement | null>(null);\n\n/**\n * The placement of the tool UIs below it. `null` ends one: the card's details\n * panel, and content a tool UI opens that lays its own tool calls out (a\n * transcript drawer opened from a subagent card in the inline slot).\n */\nexport function ToolPartPlacementProvider({\n value,\n children,\n}: {\n value: ToolPartPlacement | null;\n children: ReactNode;\n}) {\n return <ToolPartPlacementContext.Provider value={value}>{children}</ToolPartPlacementContext.Provider>;\n}\n\n/** Where the card renders the calling tool UI; `null` anywhere else (its details panel, an ungrouped thread). */\nexport function useToolPartPlacement(): ToolPartPlacement | null {\n return useContext(ToolPartPlacementContext);\n}\n"],"names":[],"mappings":";;AAeA,MAAM,2BAA2B,cAAwC,IAAI;AAOtE,SAAS,0BAA0B;AAAA,EACxC;AAAA,EACA;AACF,GAGG;AACD,SAAO,oBAAC,yBAAyB,UAAzB,EAAkC,OAAe,SAAA,CAAS;AACpE;AAGO,SAAS,uBAAiD;AAC/D,SAAO,WAAW,wBAAwB;AAC5C;"}
|
|
@@ -8,13 +8,13 @@ const ThreadScrollToBottom = () => /* @__PURE__ */ jsxRuntime.jsx(
|
|
|
8
8
|
"div",
|
|
9
9
|
{
|
|
10
10
|
"data-slot": "thread-scroll-to-bottom-anchor",
|
|
11
|
-
className: "aui-thread-scroll-to-bottom-anchor pointer-events-none
|
|
11
|
+
className: "aui-thread-scroll-to-bottom-anchor pointer-events-none absolute inset-x-0 top-0 h-0",
|
|
12
12
|
children: /* @__PURE__ */ jsxRuntime.jsx(react.ThreadPrimitive.ScrollToBottom, { asChild: true, children: /* @__PURE__ */ jsxRuntime.jsx(
|
|
13
13
|
tooltipIconButton.TooltipIconButton,
|
|
14
14
|
{
|
|
15
15
|
tooltip: "Scroll to bottom",
|
|
16
16
|
variant: "outline",
|
|
17
|
-
className: "aui-thread-scroll-to-bottom pointer-events-auto absolute -top-
|
|
17
|
+
className: "aui-thread-scroll-to-bottom pointer-events-auto absolute -top-10 left-1/2 z-10 size-8 -translate-x-1/2 rounded-full bg-background shadow-sm disabled:invisible dark:bg-background dark:hover:bg-accent",
|
|
18
18
|
children: /* @__PURE__ */ jsxRuntime.jsx(lucideReact.ArrowDownIcon, { className: "size-4" })
|
|
19
19
|
}
|
|
20
20
|
) })
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"thread-scroll-to-bottom.cjs","sources":["../../src/chat/thread-scroll-to-bottom.tsx"],"sourcesContent":["import { ThreadPrimitive } from \"@assistant-ui/react\";\nimport { ArrowDownIcon } from \"lucide-react\";\nimport type { FC } from \"react\";\nimport { TooltipIconButton } from \"./tooltip-icon-button\";\n\n/**\n * The scroll-to-bottom pill,
|
|
1
|
+
{"version":3,"file":"thread-scroll-to-bottom.cjs","sources":["../../src/chat/thread-scroll-to-bottom.tsx"],"sourcesContent":["import { ThreadPrimitive } from \"@assistant-ui/react\";\nimport { ArrowDownIcon } from \"lucide-react\";\nimport type { FC } from \"react\";\nimport { TooltipIconButton } from \"./tooltip-icon-button\";\n\n/**\n * The scroll-to-bottom pill, where Athena on the web's Spaces places it\n * (`olympus/src/components/assistant-ui/thread.tsx`): centred on the column,\n * just above the thread viewport's footer. So it covers nothing the footer\n * holds (queued messages, banners, the composer), and stays out of the\n * trailing corner where the reader's own (right-aligned) messages end, whose\n * bubble it drew over there. `ThreadPrimitive.ScrollToBottom` disables it\n * while the viewport is at the bottom, and `disabled:invisible` hides it then,\n * so it appears only once the reader has scrolled up. Mount it in the footer\n * (the thread shell's `scrollToBottom`): its anchor is laid out against the\n * footer's top edge and takes no room among the footer's rows.\n */\nexport const ThreadScrollToBottom: FC = () => (\n <div\n data-slot=\"thread-scroll-to-bottom-anchor\"\n className=\"aui-thread-scroll-to-bottom-anchor pointer-events-none absolute inset-x-0 top-0 h-0\"\n >\n <ThreadPrimitive.ScrollToBottom asChild>\n <TooltipIconButton\n tooltip=\"Scroll to bottom\"\n variant=\"outline\"\n className=\"aui-thread-scroll-to-bottom pointer-events-auto absolute -top-10 left-1/2 z-10 size-8 -translate-x-1/2 rounded-full bg-background shadow-sm disabled:invisible dark:bg-background dark:hover:bg-accent\"\n >\n <ArrowDownIcon className=\"size-4\" />\n </TooltipIconButton>\n </ThreadPrimitive.ScrollToBottom>\n </div>\n);\n"],"names":["jsx","ThreadPrimitive","TooltipIconButton","ArrowDownIcon"],"mappings":";;;;;;AAiBO,MAAM,uBAA2B,MACtCA,2BAAAA;AAAAA,EAAC;AAAA,EAAA;AAAA,IACC,aAAU;AAAA,IACV,WAAU;AAAA,IAEV,UAAAA,2BAAAA,IAACC,sBAAgB,gBAAhB,EAA+B,SAAO,MACrC,UAAAD,2BAAAA;AAAAA,MAACE,kBAAAA;AAAAA,MAAA;AAAA,QACC,SAAQ;AAAA,QACR,SAAQ;AAAA,QACR,WAAU;AAAA,QAEV,UAAAF,2BAAAA,IAACG,YAAAA,eAAA,EAAc,WAAU,SAAA,CAAS;AAAA,MAAA;AAAA,IAAA,EACpC,CACF;AAAA,EAAA;AACF;;"}
|
|
@@ -1,11 +1,14 @@
|
|
|
1
1
|
import type { FC } from "react";
|
|
2
2
|
/**
|
|
3
|
-
* The scroll-to-bottom pill,
|
|
4
|
-
*
|
|
5
|
-
*
|
|
6
|
-
*
|
|
7
|
-
*
|
|
8
|
-
*
|
|
9
|
-
*
|
|
3
|
+
* The scroll-to-bottom pill, where Athena on the web's Spaces places it
|
|
4
|
+
* (`olympus/src/components/assistant-ui/thread.tsx`): centred on the column,
|
|
5
|
+
* just above the thread viewport's footer. So it covers nothing the footer
|
|
6
|
+
* holds (queued messages, banners, the composer), and stays out of the
|
|
7
|
+
* trailing corner where the reader's own (right-aligned) messages end, whose
|
|
8
|
+
* bubble it drew over there. `ThreadPrimitive.ScrollToBottom` disables it
|
|
9
|
+
* while the viewport is at the bottom, and `disabled:invisible` hides it then,
|
|
10
|
+
* so it appears only once the reader has scrolled up. Mount it in the footer
|
|
11
|
+
* (the thread shell's `scrollToBottom`): its anchor is laid out against the
|
|
12
|
+
* footer's top edge and takes no room among the footer's rows.
|
|
10
13
|
*/
|
|
11
14
|
export declare const ThreadScrollToBottom: FC;
|
|
@@ -6,13 +6,13 @@ const ThreadScrollToBottom = () => /* @__PURE__ */ jsx(
|
|
|
6
6
|
"div",
|
|
7
7
|
{
|
|
8
8
|
"data-slot": "thread-scroll-to-bottom-anchor",
|
|
9
|
-
className: "aui-thread-scroll-to-bottom-anchor pointer-events-none
|
|
9
|
+
className: "aui-thread-scroll-to-bottom-anchor pointer-events-none absolute inset-x-0 top-0 h-0",
|
|
10
10
|
children: /* @__PURE__ */ jsx(ThreadPrimitive.ScrollToBottom, { asChild: true, children: /* @__PURE__ */ jsx(
|
|
11
11
|
TooltipIconButton,
|
|
12
12
|
{
|
|
13
13
|
tooltip: "Scroll to bottom",
|
|
14
14
|
variant: "outline",
|
|
15
|
-
className: "aui-thread-scroll-to-bottom pointer-events-auto absolute -top-
|
|
15
|
+
className: "aui-thread-scroll-to-bottom pointer-events-auto absolute -top-10 left-1/2 z-10 size-8 -translate-x-1/2 rounded-full bg-background shadow-sm disabled:invisible dark:bg-background dark:hover:bg-accent",
|
|
16
16
|
children: /* @__PURE__ */ jsx(ArrowDownIcon, { className: "size-4" })
|
|
17
17
|
}
|
|
18
18
|
) })
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"thread-scroll-to-bottom.js","sources":["../../src/chat/thread-scroll-to-bottom.tsx"],"sourcesContent":["import { ThreadPrimitive } from \"@assistant-ui/react\";\nimport { ArrowDownIcon } from \"lucide-react\";\nimport type { FC } from \"react\";\nimport { TooltipIconButton } from \"./tooltip-icon-button\";\n\n/**\n * The scroll-to-bottom pill,
|
|
1
|
+
{"version":3,"file":"thread-scroll-to-bottom.js","sources":["../../src/chat/thread-scroll-to-bottom.tsx"],"sourcesContent":["import { ThreadPrimitive } from \"@assistant-ui/react\";\nimport { ArrowDownIcon } from \"lucide-react\";\nimport type { FC } from \"react\";\nimport { TooltipIconButton } from \"./tooltip-icon-button\";\n\n/**\n * The scroll-to-bottom pill, where Athena on the web's Spaces places it\n * (`olympus/src/components/assistant-ui/thread.tsx`): centred on the column,\n * just above the thread viewport's footer. So it covers nothing the footer\n * holds (queued messages, banners, the composer), and stays out of the\n * trailing corner where the reader's own (right-aligned) messages end, whose\n * bubble it drew over there. `ThreadPrimitive.ScrollToBottom` disables it\n * while the viewport is at the bottom, and `disabled:invisible` hides it then,\n * so it appears only once the reader has scrolled up. Mount it in the footer\n * (the thread shell's `scrollToBottom`): its anchor is laid out against the\n * footer's top edge and takes no room among the footer's rows.\n */\nexport const ThreadScrollToBottom: FC = () => (\n <div\n data-slot=\"thread-scroll-to-bottom-anchor\"\n className=\"aui-thread-scroll-to-bottom-anchor pointer-events-none absolute inset-x-0 top-0 h-0\"\n >\n <ThreadPrimitive.ScrollToBottom asChild>\n <TooltipIconButton\n tooltip=\"Scroll to bottom\"\n variant=\"outline\"\n className=\"aui-thread-scroll-to-bottom pointer-events-auto absolute -top-10 left-1/2 z-10 size-8 -translate-x-1/2 rounded-full bg-background shadow-sm disabled:invisible dark:bg-background dark:hover:bg-accent\"\n >\n <ArrowDownIcon className=\"size-4\" />\n </TooltipIconButton>\n </ThreadPrimitive.ScrollToBottom>\n </div>\n);\n"],"names":[],"mappings":";;;;AAiBO,MAAM,uBAA2B,MACtC;AAAA,EAAC;AAAA,EAAA;AAAA,IACC,aAAU;AAAA,IACV,WAAU;AAAA,IAEV,UAAA,oBAAC,gBAAgB,gBAAhB,EAA+B,SAAO,MACrC,UAAA;AAAA,MAAC;AAAA,MAAA;AAAA,QACC,SAAQ;AAAA,QACR,SAAQ;AAAA,QACR,WAAU;AAAA,QAEV,UAAA,oBAAC,eAAA,EAAc,WAAU,SAAA,CAAS;AAAA,MAAA;AAAA,IAAA,EACpC,CACF;AAAA,EAAA;AACF;"}
|
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
|
|
3
3
|
const jsxRuntime = require("react/jsx-runtime");
|
|
4
|
-
const
|
|
4
|
+
const require$$0 = require("react");
|
|
5
5
|
const radixUi = require("radix-ui");
|
|
6
6
|
const tooltip = require("../ui/tooltip.cjs");
|
|
7
7
|
const button = require("../ui/button.cjs");
|
|
8
8
|
const cnfast = require("cnfast");
|
|
9
|
-
const TooltipIconButton =
|
|
9
|
+
const TooltipIconButton = require$$0.forwardRef(
|
|
10
10
|
({ children, tooltip: tooltip$1, side = "bottom", className, ...rest }, ref) => {
|
|
11
11
|
return /* @__PURE__ */ jsxRuntime.jsxs(tooltip.Tooltip, { children: [
|
|
12
12
|
/* @__PURE__ */ jsxRuntime.jsx(tooltip.TooltipTrigger, { asChild: true, children: /* @__PURE__ */ jsxRuntime.jsxs(
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tooltip-icon-button.cjs","sources":["../../src/chat/tooltip-icon-button.tsx"],"sourcesContent":["\"use client\";\n\nimport { ComponentPropsWithRef, forwardRef } from \"react\";\nimport { Slot } from \"radix-ui\";\nimport { Tooltip, TooltipContent, TooltipTrigger } from \"../ui/tooltip\";\nimport { Button } from \"../ui/button\";\nimport { cn } from \"../lib/utils\";\n\nexport type TooltipIconButtonProps = ComponentPropsWithRef<typeof Button> & {\n tooltip: string;\n side?: \"top\" | \"bottom\" | \"left\" | \"right\";\n};\n\nexport const TooltipIconButton = forwardRef<HTMLButtonElement, TooltipIconButtonProps>(\n ({ children, tooltip, side = \"bottom\", className, ...rest }, ref) => {\n return (\n <Tooltip>\n <TooltipTrigger asChild>\n <Button\n variant=\"ghost\"\n size=\"icon\"\n {...rest}\n className={cn(\"aui-button-icon size-6 p-1\", className)}\n ref={ref}\n >\n <Slot.Slottable>{children}</Slot.Slottable>\n <span className=\"aui-sr-only sr-only\">{tooltip}</span>\n </Button>\n </TooltipTrigger>\n <TooltipContent side={side}>{tooltip}</TooltipContent>\n </Tooltip>\n );\n }\n);\n\nTooltipIconButton.displayName = \"TooltipIconButton\";\n"],"names":["forwardRef","tooltip","Tooltip","jsx","TooltipTrigger","jsxs","Button","cn","Slot","TooltipContent"],"mappings":";;;;;;;;AAaO,MAAM,oBAAoBA,
|
|
1
|
+
{"version":3,"file":"tooltip-icon-button.cjs","sources":["../../src/chat/tooltip-icon-button.tsx"],"sourcesContent":["\"use client\";\n\nimport { ComponentPropsWithRef, forwardRef } from \"react\";\nimport { Slot } from \"radix-ui\";\nimport { Tooltip, TooltipContent, TooltipTrigger } from \"../ui/tooltip\";\nimport { Button } from \"../ui/button\";\nimport { cn } from \"../lib/utils\";\n\nexport type TooltipIconButtonProps = ComponentPropsWithRef<typeof Button> & {\n tooltip: string;\n side?: \"top\" | \"bottom\" | \"left\" | \"right\";\n};\n\nexport const TooltipIconButton = forwardRef<HTMLButtonElement, TooltipIconButtonProps>(\n ({ children, tooltip, side = \"bottom\", className, ...rest }, ref) => {\n return (\n <Tooltip>\n <TooltipTrigger asChild>\n <Button\n variant=\"ghost\"\n size=\"icon\"\n {...rest}\n className={cn(\"aui-button-icon size-6 p-1\", className)}\n ref={ref}\n >\n <Slot.Slottable>{children}</Slot.Slottable>\n <span className=\"aui-sr-only sr-only\">{tooltip}</span>\n </Button>\n </TooltipTrigger>\n <TooltipContent side={side}>{tooltip}</TooltipContent>\n </Tooltip>\n );\n }\n);\n\nTooltipIconButton.displayName = \"TooltipIconButton\";\n"],"names":["forwardRef","tooltip","Tooltip","jsx","TooltipTrigger","jsxs","Button","cn","Slot","TooltipContent"],"mappings":";;;;;;;;AAaO,MAAM,oBAAoBA,WAAAA;AAAAA,EAC/B,CAAC,EAAE,UAAA,SAAUC,WAAS,OAAO,UAAU,WAAW,GAAG,KAAA,GAAQ,QAAQ;AACnE,2CACGC,iBAAA,EACC,UAAA;AAAA,MAAAC,2BAAAA,IAACC,QAAAA,gBAAA,EAAe,SAAO,MACrB,UAAAC,2BAAAA;AAAAA,QAACC,OAAAA;AAAAA,QAAA;AAAA,UACC,SAAQ;AAAA,UACR,MAAK;AAAA,UACJ,GAAG;AAAA,UACJ,WAAWC,OAAAA,GAAG,8BAA8B,SAAS;AAAA,UACrD;AAAA,UAEA,UAAA;AAAA,YAAAJ,2BAAAA,IAACK,QAAAA,KAAK,WAAL,EAAgB,SAAA,CAAS;AAAA,YAC1BL,2BAAAA,IAAC,QAAA,EAAK,WAAU,uBAAuB,UAAAF,UAAA,CAAQ;AAAA,UAAA;AAAA,QAAA;AAAA,MAAA,GAEnD;AAAA,MACAE,2BAAAA,IAACM,QAAAA,gBAAA,EAAe,MAAa,UAAAR,UAAA,CAAQ;AAAA,IAAA,GACvC;AAAA,EAEJ;AACF;AAEA,kBAAkB,cAAc;;"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
|
|
3
|
+
const reactStatewire = require("@assistant-ui/react-statewire");
|
|
4
|
+
const statewireState = require("../agent-runtime/src/statewire-state.cjs");
|
|
5
|
+
function useAthenaVoiceLive() {
|
|
6
|
+
return reactStatewire.useStatewireState(
|
|
7
|
+
(s) => statewireState.isDeepAgentStateHydrated(s) && (statewireState.readDeepAgentStreamValues(s).voice ?? null) !== null
|
|
8
|
+
);
|
|
9
|
+
}
|
|
10
|
+
exports.useAthenaVoiceLive = useAthenaVoiceLive;
|
|
11
|
+
//# sourceMappingURL=use-athena-voice-live.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"use-athena-voice-live.cjs","sources":["../../src/chat/use-athena-voice-live.ts"],"sourcesContent":["import { useStatewireState } from '@assistant-ui/react-statewire';\nimport { isDeepAgentStateHydrated, readDeepAgentStreamValues } from '@athenaintel/agent-runtime';\n\n/**\n * Whether a voice session is live on this thread (any client's: the host\n * replicates `state.voice` while one is connected, and clears it when it\n * ends). Read from the thread's replicated state rather than from the\n * composer's voice controller, so a transcript component, a tool UI or a\n * `components` override can follow it without reaching into the composer.\n *\n * Scope: like `useAthenaRunLive`, call it from a component rendered inside\n * `AthenaChat`. Before the attach snapshot hydrates it reads `false`.\n */\nexport function useAthenaVoiceLive(): boolean {\n return useStatewireState(\n (s) => isDeepAgentStateHydrated(s) && (readDeepAgentStreamValues(s).voice ?? null) !== null,\n );\n}\n"],"names":["useStatewireState","isDeepAgentStateHydrated","readDeepAgentStreamValues"],"mappings":";;;;AAaO,SAAS,qBAA8B;AAC5C,SAAOA,eAAAA;AAAAA,IACL,CAAC,MAAMC,eAAAA,yBAAyB,CAAC,MAAMC,eAAAA,0BAA0B,CAAC,EAAE,SAAS,UAAU;AAAA,EAAA;AAE3F;;"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Whether a voice session is live on this thread (any client's: the host
|
|
3
|
+
* replicates `state.voice` while one is connected, and clears it when it
|
|
4
|
+
* ends). Read from the thread's replicated state rather than from the
|
|
5
|
+
* composer's voice controller, so a transcript component, a tool UI or a
|
|
6
|
+
* `components` override can follow it without reaching into the composer.
|
|
7
|
+
*
|
|
8
|
+
* Scope: like `useAthenaRunLive`, call it from a component rendered inside
|
|
9
|
+
* `AthenaChat`. Before the attach snapshot hydrates it reads `false`.
|
|
10
|
+
*/
|
|
11
|
+
export declare function useAthenaVoiceLive(): boolean;
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import { useStatewireState } from "@assistant-ui/react-statewire";
|
|
2
|
+
import { isDeepAgentStateHydrated, readDeepAgentStreamValues } from "../agent-runtime/src/statewire-state.js";
|
|
3
|
+
function useAthenaVoiceLive() {
|
|
4
|
+
return useStatewireState(
|
|
5
|
+
(s) => isDeepAgentStateHydrated(s) && (readDeepAgentStreamValues(s).voice ?? null) !== null
|
|
6
|
+
);
|
|
7
|
+
}
|
|
8
|
+
export {
|
|
9
|
+
useAthenaVoiceLive
|
|
10
|
+
};
|
|
11
|
+
//# sourceMappingURL=use-athena-voice-live.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"use-athena-voice-live.js","sources":["../../src/chat/use-athena-voice-live.ts"],"sourcesContent":["import { useStatewireState } from '@assistant-ui/react-statewire';\nimport { isDeepAgentStateHydrated, readDeepAgentStreamValues } from '@athenaintel/agent-runtime';\n\n/**\n * Whether a voice session is live on this thread (any client's: the host\n * replicates `state.voice` while one is connected, and clears it when it\n * ends). Read from the thread's replicated state rather than from the\n * composer's voice controller, so a transcript component, a tool UI or a\n * `components` override can follow it without reaching into the composer.\n *\n * Scope: like `useAthenaRunLive`, call it from a component rendered inside\n * `AthenaChat`. Before the attach snapshot hydrates it reads `false`.\n */\nexport function useAthenaVoiceLive(): boolean {\n return useStatewireState(\n (s) => isDeepAgentStateHydrated(s) && (readDeepAgentStreamValues(s).voice ?? null) !== null,\n );\n}\n"],"names":[],"mappings":";;AAaO,SAAS,qBAA8B;AAC5C,SAAO;AAAA,IACL,CAAC,MAAM,yBAAyB,CAAC,MAAM,0BAA0B,CAAC,EAAE,SAAS,UAAU;AAAA,EAAA;AAE3F;"}
|