@athenaintel/react 0.43.0 → 0.50.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +258 -8
- package/dist/agent-runtime/src/answer-label.cjs +137 -0
- package/dist/agent-runtime/src/answer-label.cjs.map +1 -0
- package/dist/agent-runtime/src/answer-label.d.ts +104 -0
- package/dist/agent-runtime/src/answer-label.js +137 -0
- package/dist/agent-runtime/src/answer-label.js.map +1 -0
- package/dist/agent-runtime/src/answer-rows.cjs +180 -0
- package/dist/agent-runtime/src/answer-rows.cjs.map +1 -0
- package/dist/agent-runtime/src/answer-rows.d.ts +86 -0
- package/dist/agent-runtime/src/answer-rows.js +180 -0
- package/dist/agent-runtime/src/answer-rows.js.map +1 -0
- package/dist/agent-runtime/src/call-recap.cjs +319 -0
- package/dist/agent-runtime/src/call-recap.cjs.map +1 -0
- package/dist/agent-runtime/src/call-recap.d.ts +142 -0
- package/dist/agent-runtime/src/call-recap.js +319 -0
- package/dist/agent-runtime/src/call-recap.js.map +1 -0
- package/dist/agent-runtime/src/chat-outbox-store.cjs +1 -0
- package/dist/agent-runtime/src/chat-outbox-store.cjs.map +1 -1
- package/dist/agent-runtime/src/chat-outbox-store.d.ts +7 -0
- package/dist/agent-runtime/src/chat-outbox-store.js +1 -0
- package/dist/agent-runtime/src/chat-outbox-store.js.map +1 -1
- package/dist/agent-runtime/src/chat-outbox.cjs +46 -5
- package/dist/agent-runtime/src/chat-outbox.cjs.map +1 -1
- package/dist/agent-runtime/src/chat-outbox.d.ts +29 -0
- package/dist/agent-runtime/src/chat-outbox.js +46 -5
- package/dist/agent-runtime/src/chat-outbox.js.map +1 -1
- package/dist/agent-runtime/src/client-tool-bridge.cjs +15 -15
- package/dist/agent-runtime/src/client-tool-bridge.cjs.map +1 -1
- package/dist/agent-runtime/src/conversation-index.cjs +8 -8
- package/dist/agent-runtime/src/conversation-index.cjs.map +1 -1
- package/dist/agent-runtime/src/conversation-index.d.ts +7 -0
- package/dist/agent-runtime/src/conversation-index.js.map +1 -1
- package/dist/agent-runtime/src/conversation-list.cjs +2 -1
- package/dist/agent-runtime/src/conversation-list.cjs.map +1 -1
- package/dist/agent-runtime/src/conversation-list.d.ts +19 -3
- package/dist/agent-runtime/src/conversation-list.js +2 -1
- package/dist/agent-runtime/src/conversation-list.js.map +1 -1
- package/dist/agent-runtime/src/decision-checks.cjs +207 -0
- package/dist/agent-runtime/src/decision-checks.cjs.map +1 -0
- package/dist/agent-runtime/src/decision-checks.d.ts +142 -0
- package/dist/agent-runtime/src/decision-checks.js +207 -0
- package/dist/agent-runtime/src/decision-checks.js.map +1 -0
- package/dist/agent-runtime/src/desktop-handoff.d.ts +12 -0
- package/dist/agent-runtime/src/errors.cjs +18 -0
- package/dist/agent-runtime/src/errors.cjs.map +1 -1
- package/dist/agent-runtime/src/errors.d.ts +7 -0
- package/dist/agent-runtime/src/errors.js +18 -0
- package/dist/agent-runtime/src/errors.js.map +1 -1
- package/dist/agent-runtime/src/generated/runconfig-contract.cjs +12 -0
- package/dist/agent-runtime/src/generated/runconfig-contract.cjs.map +1 -1
- package/dist/agent-runtime/src/generated/runconfig-contract.d.ts +6 -6
- package/dist/agent-runtime/src/generated/runconfig-contract.js +12 -0
- package/dist/agent-runtime/src/generated/runconfig-contract.js.map +1 -1
- package/dist/agent-runtime/src/handoff-arrival.cjs +60 -0
- package/dist/agent-runtime/src/handoff-arrival.cjs.map +1 -0
- package/dist/agent-runtime/src/handoff-arrival.d.ts +46 -0
- package/dist/agent-runtime/src/handoff-arrival.js +60 -0
- package/dist/agent-runtime/src/handoff-arrival.js.map +1 -0
- package/dist/agent-runtime/src/index.d.ts +16 -9
- package/dist/agent-runtime/src/interrupts.cjs +71 -19
- package/dist/agent-runtime/src/interrupts.cjs.map +1 -1
- package/dist/agent-runtime/src/interrupts.d.ts +40 -3
- package/dist/agent-runtime/src/interrupts.js +56 -4
- package/dist/agent-runtime/src/interrupts.js.map +1 -1
- package/dist/agent-runtime/src/lane-history.cjs +8 -8
- package/dist/agent-runtime/src/lane-history.cjs.map +1 -1
- package/dist/agent-runtime/src/messages.cjs +43 -8
- package/dist/agent-runtime/src/messages.cjs.map +1 -1
- package/dist/agent-runtime/src/messages.d.ts +25 -3
- package/dist/agent-runtime/src/messages.js +43 -8
- package/dist/agent-runtime/src/messages.js.map +1 -1
- package/dist/agent-runtime/src/model-context.cjs +3 -2
- package/dist/agent-runtime/src/model-context.cjs.map +1 -1
- package/dist/agent-runtime/src/model-context.d.ts +6 -1
- package/dist/agent-runtime/src/model-context.js +3 -2
- package/dist/agent-runtime/src/model-context.js.map +1 -1
- package/dist/agent-runtime/src/offline-status.cjs +36 -0
- package/dist/agent-runtime/src/offline-status.cjs.map +1 -0
- package/dist/agent-runtime/src/offline-status.d.ts +118 -3
- package/dist/agent-runtime/src/offline-status.js +36 -0
- package/dist/agent-runtime/src/offline-status.js.map +1 -0
- package/dist/agent-runtime/src/queue.cjs +0 -9
- package/dist/agent-runtime/src/queue.cjs.map +1 -1
- package/dist/agent-runtime/src/queue.js +0 -9
- package/dist/agent-runtime/src/queue.js.map +1 -1
- package/dist/agent-runtime/src/quota-safe-local-storage-session.cjs +9 -9
- package/dist/agent-runtime/src/quota-safe-local-storage-session.cjs.map +1 -1
- package/dist/agent-runtime/src/runtime-catalog.cjs +42 -0
- package/dist/agent-runtime/src/runtime-catalog.cjs.map +1 -0
- package/dist/agent-runtime/src/runtime-catalog.d.ts +35 -0
- package/dist/agent-runtime/src/runtime-catalog.js +42 -0
- package/dist/agent-runtime/src/runtime-catalog.js.map +1 -0
- package/dist/agent-runtime/src/runtime-messages.cjs.map +1 -1
- package/dist/agent-runtime/src/runtime-messages.d.ts +1 -1
- package/dist/agent-runtime/src/runtime-messages.js.map +1 -1
- package/dist/agent-runtime/src/runtime.d.ts +41 -0
- package/dist/agent-runtime/src/send-recovery.cjs +37 -3
- package/dist/agent-runtime/src/send-recovery.cjs.map +1 -1
- package/dist/agent-runtime/src/send-recovery.d.ts +19 -0
- package/dist/agent-runtime/src/send-recovery.js +37 -3
- package/dist/agent-runtime/src/send-recovery.js.map +1 -1
- package/dist/agent-runtime/src/statewire-suspended.cjs +3 -3
- package/dist/agent-runtime/src/statewire-suspended.cjs.map +1 -1
- package/dist/agent-runtime/src/subagents.cjs +32 -2
- package/dist/agent-runtime/src/subagents.cjs.map +1 -1
- package/dist/agent-runtime/src/subagents.d.ts +9 -0
- package/dist/agent-runtime/src/subagents.js +30 -0
- package/dist/agent-runtime/src/subagents.js.map +1 -1
- package/dist/agent-runtime/src/thread-driver.cjs +67 -0
- package/dist/agent-runtime/src/thread-driver.cjs.map +1 -0
- package/dist/agent-runtime/src/thread-driver.d.ts +49 -0
- package/dist/agent-runtime/src/thread-driver.js +67 -0
- package/dist/agent-runtime/src/thread-driver.js.map +1 -0
- package/dist/agent-runtime/src/thread-handoff-flow-machine.d.ts +172 -0
- package/dist/agent-runtime/src/thread-handoff-protocol.d.ts +868 -0
- package/dist/agent-runtime/src/thread-handoff-qr.d.ts +11 -0
- package/dist/agent-runtime/src/thread-handoff.d.ts +3 -364
- package/dist/agent-runtime/src/thread-status.cjs +3 -3
- package/dist/agent-runtime/src/thread-status.cjs.map +1 -1
- package/dist/agent-runtime/src/tool-metadata.cjs +210 -25
- package/dist/agent-runtime/src/tool-metadata.cjs.map +1 -1
- package/dist/agent-runtime/src/tool-metadata.d.ts +12 -0
- package/dist/agent-runtime/src/tool-metadata.js +210 -25
- package/dist/agent-runtime/src/tool-metadata.js.map +1 -1
- package/dist/agent-runtime/src/tool-names.cjs +2 -0
- package/dist/agent-runtime/src/tool-names.cjs.map +1 -1
- package/dist/agent-runtime/src/tool-names.d.ts +2 -0
- package/dist/agent-runtime/src/tool-names.js +2 -0
- package/dist/agent-runtime/src/tool-names.js.map +1 -1
- package/dist/agent-runtime/src/types.d.ts +10 -2
- package/dist/agent-runtime/src/use-conversation-list.cjs +14 -13
- package/dist/agent-runtime/src/use-conversation-list.cjs.map +1 -1
- package/dist/agent-runtime/src/use-conversation-list.d.ts +6 -0
- package/dist/agent-runtime/src/use-conversation-list.js +3 -2
- package/dist/agent-runtime/src/use-conversation-list.js.map +1 -1
- package/dist/agent-runtime/src/use-deep-agent-chat-outbox.cjs +45 -20
- package/dist/agent-runtime/src/use-deep-agent-chat-outbox.cjs.map +1 -1
- package/dist/agent-runtime/src/use-deep-agent-chat-outbox.d.ts +10 -3
- package/dist/agent-runtime/src/use-deep-agent-chat-outbox.js +27 -2
- package/dist/agent-runtime/src/use-deep-agent-chat-outbox.js.map +1 -1
- package/dist/agent-runtime/src/use-deep-agent-config.cjs +14 -14
- package/dist/agent-runtime/src/use-deep-agent-config.cjs.map +1 -1
- package/dist/agent-runtime/src/use-deep-agent-edit-submit.cjs +6 -6
- package/dist/agent-runtime/src/use-deep-agent-edit-submit.cjs.map +1 -1
- package/dist/agent-runtime/src/use-deep-agent-runtime.cjs +40 -22
- package/dist/agent-runtime/src/use-deep-agent-runtime.cjs.map +1 -1
- package/dist/agent-runtime/src/use-deep-agent-runtime.d.ts +17 -0
- package/dist/agent-runtime/src/use-deep-agent-runtime.js +24 -6
- package/dist/agent-runtime/src/use-deep-agent-runtime.js.map +1 -1
- package/dist/agent-runtime/src/use-deep-agent-thread.cjs +45 -45
- package/dist/agent-runtime/src/use-deep-agent-thread.cjs.map +1 -1
- package/dist/agent-runtime/src/use-deep-agent-voice.cjs +588 -130
- package/dist/agent-runtime/src/use-deep-agent-voice.cjs.map +1 -1
- package/dist/agent-runtime/src/use-deep-agent-voice.d.ts +162 -10
- package/dist/agent-runtime/src/use-deep-agent-voice.js +529 -71
- package/dist/agent-runtime/src/use-deep-agent-voice.js.map +1 -1
- package/dist/agent-runtime/src/use-deep-agent-window-sync.cjs +26 -26
- package/dist/agent-runtime/src/use-deep-agent-window-sync.cjs.map +1 -1
- package/dist/agent-runtime/src/use-historical-edit-attachments.cjs +4 -4
- package/dist/agent-runtime/src/use-historical-edit-attachments.cjs.map +1 -1
- package/dist/agent-runtime/src/use-thread-handoff-flow.d.ts +34 -26
- package/dist/agent-runtime/src/voice-earcon.cjs +139 -0
- package/dist/agent-runtime/src/voice-earcon.cjs.map +1 -0
- package/dist/agent-runtime/src/voice-earcon.d.ts +38 -0
- package/dist/agent-runtime/src/voice-earcon.js +139 -0
- package/dist/agent-runtime/src/voice-earcon.js.map +1 -0
- package/dist/agent-runtime/src/voice-media.cjs +117 -0
- package/dist/agent-runtime/src/voice-media.cjs.map +1 -0
- package/dist/agent-runtime/src/voice-media.d.ts +63 -0
- package/dist/agent-runtime/src/voice-media.js +117 -0
- package/dist/agent-runtime/src/voice-media.js.map +1 -0
- package/dist/agent-runtime/src/voice-presentation.cjs +2 -0
- package/dist/agent-runtime/src/voice-presentation.cjs.map +1 -1
- package/dist/agent-runtime/src/voice-presentation.js +2 -0
- package/dist/agent-runtime/src/voice-presentation.js.map +1 -1
- package/dist/agent-runtime/src/voice-wire-types.d.ts +32 -0
- package/dist/assets/AssetPanel.cjs +11 -11
- package/dist/assets/AssetPanel.cjs.map +1 -1
- package/dist/assets/AthenaAssetEmbed.cjs +11 -9
- package/dist/assets/AthenaAssetEmbed.cjs.map +1 -1
- package/dist/assets/AthenaAssetEmbed.d.ts +18 -5
- package/dist/assets/AthenaAssetEmbed.js +4 -2
- package/dist/assets/AthenaAssetEmbed.js.map +1 -1
- package/dist/assets/AthenaLayout.cjs +16 -16
- package/dist/assets/AthenaLayout.cjs.map +1 -1
- package/dist/assets/use-asset-content.cjs +4 -4
- package/dist/assets/use-asset-content.cjs.map +1 -1
- package/dist/assets/use-asset-embed.cjs +14 -7
- package/dist/assets/use-asset-embed.cjs.map +1 -1
- package/dist/assets/use-asset-embed.d.ts +23 -6
- package/dist/assets/use-asset-embed.js +10 -3
- package/dist/assets/use-asset-embed.js.map +1 -1
- package/dist/auth/AthenaAuthContext.cjs +3 -3
- package/dist/auth/AthenaAuthContext.cjs.map +1 -1
- package/dist/auth/AthenaAuthProvider.cjs +8 -8
- package/dist/auth/AthenaAuthProvider.cjs.map +1 -1
- package/dist/auth/AthenaCredentialSourceContext.cjs +5 -5
- package/dist/auth/AthenaCredentialSourceContext.cjs.map +1 -1
- package/dist/auth/AthenaSSOProvider.cjs +14 -14
- package/dist/auth/AthenaSSOProvider.cjs.map +1 -1
- package/dist/auth/credential-source.cjs +26 -13
- package/dist/auth/credential-source.cjs.map +1 -1
- package/dist/auth/credential-source.d.ts +8 -0
- package/dist/auth/credential-source.js +26 -13
- package/dist/auth/credential-source.js.map +1 -1
- package/dist/catalog/agent-model-options.cjs +25 -17
- package/dist/catalog/agent-model-options.cjs.map +1 -1
- package/dist/catalog/agent-model-options.d.ts +38 -5
- package/dist/catalog/agent-model-options.js +25 -17
- package/dist/catalog/agent-model-options.js.map +1 -1
- package/dist/catalog/channel-refusal.cjs +36 -0
- package/dist/catalog/channel-refusal.cjs.map +1 -0
- package/dist/catalog/channel-refusal.d.ts +29 -0
- package/dist/catalog/channel-refusal.js +36 -0
- package/dist/catalog/channel-refusal.js.map +1 -0
- package/dist/catalog/chat-pickers.cjs +60 -24
- package/dist/catalog/chat-pickers.cjs.map +1 -1
- package/dist/catalog/chat-pickers.d.ts +12 -2
- package/dist/catalog/chat-pickers.js +56 -20
- package/dist/catalog/chat-pickers.js.map +1 -1
- package/dist/catalog/runtime-catalog.cjs +89 -23
- package/dist/catalog/runtime-catalog.cjs.map +1 -1
- package/dist/catalog/runtime-catalog.d.ts +8 -2
- package/dist/catalog/runtime-catalog.js +83 -17
- package/dist/catalog/runtime-catalog.js.map +1 -1
- package/dist/catalog/use-athena-chat-mode.cjs +12 -12
- package/dist/catalog/use-athena-chat-mode.cjs.map +1 -1
- package/dist/chat/AthenaChat.cjs +155 -67
- package/dist/chat/AthenaChat.cjs.map +1 -1
- package/dist/chat/AthenaChat.d.ts +42 -2
- package/dist/chat/AthenaChat.js +106 -18
- package/dist/chat/AthenaChat.js.map +1 -1
- package/dist/chat/AthenaChatErrorBoundary.cjs +3 -3
- package/dist/chat/AthenaChatErrorBoundary.cjs.map +1 -1
- package/dist/chat/DrivingOnChip.cjs +23 -0
- package/dist/chat/DrivingOnChip.cjs.map +1 -0
- package/dist/chat/DrivingOnChip.d.ts +17 -0
- package/dist/chat/DrivingOnChip.js +23 -0
- package/dist/chat/DrivingOnChip.js.map +1 -0
- package/dist/chat/StatewireApprovalCard.cjs +166 -37
- package/dist/chat/StatewireApprovalCard.cjs.map +1 -1
- package/dist/chat/StatewireApprovalCard.d.ts +91 -2
- package/dist/chat/StatewireApprovalCard.js +156 -27
- package/dist/chat/StatewireApprovalCard.js.map +1 -1
- package/dist/chat/StatewireClientToolBridge.cjs +2 -2
- package/dist/chat/StatewireClientToolBridge.cjs.map +1 -1
- package/dist/chat/StatewireQueuedMessages.cjs +81 -69
- package/dist/chat/StatewireQueuedMessages.cjs.map +1 -1
- package/dist/chat/StatewireQueuedMessages.d.ts +25 -13
- package/dist/chat/StatewireQueuedMessages.js +73 -61
- package/dist/chat/StatewireQueuedMessages.js.map +1 -1
- package/dist/chat/WaitingOnYouBanner.cjs +9 -5
- package/dist/chat/WaitingOnYouBanner.cjs.map +1 -1
- package/dist/chat/WaitingOnYouBanner.js +7 -3
- package/dist/chat/WaitingOnYouBanner.js.map +1 -1
- package/dist/chat/athena-chat-welcome.cjs +2 -2
- package/dist/chat/athena-chat-welcome.cjs.map +1 -1
- package/dist/chat/athena-citation-links.cjs +5 -5
- package/dist/chat/athena-citation-links.cjs.map +1 -1
- package/dist/chat/athena-composer-controls.cjs +26 -16
- package/dist/chat/athena-composer-controls.cjs.map +1 -1
- package/dist/chat/athena-composer-controls.d.ts +6 -0
- package/dist/chat/athena-composer-controls.js +26 -16
- package/dist/chat/athena-composer-controls.js.map +1 -1
- package/dist/chat/athena-turn-end-status.cjs +42 -0
- package/dist/chat/athena-turn-end-status.cjs.map +1 -0
- package/dist/chat/athena-turn-end-status.d.ts +24 -0
- package/dist/chat/athena-turn-end-status.js +42 -0
- package/dist/chat/athena-turn-end-status.js.map +1 -0
- package/dist/chat/browser-decision-check.cjs +131 -0
- package/dist/chat/browser-decision-check.cjs.map +1 -0
- package/dist/chat/browser-decision-check.d.ts +61 -0
- package/dist/chat/browser-decision-check.js +131 -0
- package/dist/chat/browser-decision-check.js.map +1 -0
- package/dist/chat/chat-outbox-rows.cjs +3 -3
- package/dist/chat/chat-outbox-rows.cjs.map +1 -1
- package/dist/chat/chat-voice-controls.cjs +96 -29
- package/dist/chat/chat-voice-controls.cjs.map +1 -1
- package/dist/chat/chat-voice-controls.d.ts +42 -3
- package/dist/chat/chat-voice-controls.js +92 -25
- package/dist/chat/chat-voice-controls.js.map +1 -1
- package/dist/chat/composer-keyboard-hint.cjs +5 -5
- package/dist/chat/composer-keyboard-hint.cjs.map +1 -1
- package/dist/chat/device-operation.cjs +29 -0
- package/dist/chat/device-operation.cjs.map +1 -0
- package/dist/chat/device-operation.d.ts +34 -0
- package/dist/chat/device-operation.js +29 -0
- package/dist/chat/device-operation.js.map +1 -0
- package/dist/chat/super-grouping/CollapsibleGroup.cjs +14 -14
- package/dist/chat/super-grouping/CollapsibleGroup.cjs.map +1 -1
- package/dist/chat/super-grouping/GroupedMessageParts.cjs +4 -4
- package/dist/chat/super-grouping/GroupedMessageParts.cjs.map +1 -1
- package/dist/chat/super-grouping/SuperGroupingCard.cjs +52 -36
- package/dist/chat/super-grouping/SuperGroupingCard.cjs.map +1 -1
- package/dist/chat/super-grouping/SuperGroupingCard.d.ts +19 -4
- package/dist/chat/super-grouping/SuperGroupingCard.js +29 -13
- package/dist/chat/super-grouping/SuperGroupingCard.js.map +1 -1
- package/dist/chat/super-grouping/SuperGroupingTranscript.cjs +32 -32
- package/dist/chat/super-grouping/SuperGroupingTranscript.cjs.map +1 -1
- package/dist/chat/super-grouping/SuperGroupingTranscript.js +3 -3
- package/dist/chat/super-grouping/SuperGroupingTranscript.js.map +1 -1
- package/dist/chat/super-grouping/ToolTimeline.cjs +73 -40
- package/dist/chat/super-grouping/ToolTimeline.cjs.map +1 -1
- package/dist/chat/super-grouping/ToolTimeline.d.ts +10 -2
- package/dist/chat/super-grouping/ToolTimeline.js +69 -36
- package/dist/chat/super-grouping/ToolTimeline.js.map +1 -1
- package/dist/chat/super-grouping/activity-timeline.cjs +47 -12
- package/dist/chat/super-grouping/activity-timeline.cjs.map +1 -1
- package/dist/chat/super-grouping/activity-timeline.d.ts +21 -0
- package/dist/chat/super-grouping/activity-timeline.js +47 -12
- package/dist/chat/super-grouping/activity-timeline.js.map +1 -1
- package/dist/chat/super-grouping/grouping-function.cjs +4 -0
- package/dist/chat/super-grouping/grouping-function.cjs.map +1 -1
- package/dist/chat/super-grouping/grouping-function.d.ts +7 -0
- package/dist/chat/super-grouping/grouping-function.js +5 -1
- package/dist/chat/super-grouping/grouping-function.js.map +1 -1
- package/dist/chat/super-grouping/index.cjs +6 -0
- package/dist/chat/super-grouping/index.cjs.map +1 -1
- package/dist/chat/super-grouping/index.d.ts +5 -2
- package/dist/chat/super-grouping/index.js +7 -1
- package/dist/chat/super-grouping/index.js.map +1 -1
- package/dist/chat/super-grouping/tool-part-placement.cjs +17 -0
- package/dist/chat/super-grouping/tool-part-placement.cjs.map +1 -0
- package/dist/chat/super-grouping/tool-part-placement.d.ts +22 -0
- package/dist/chat/super-grouping/tool-part-placement.js +17 -0
- package/dist/chat/super-grouping/tool-part-placement.js.map +1 -0
- package/dist/chat/thread-scroll-to-bottom.cjs +2 -2
- package/dist/chat/thread-scroll-to-bottom.cjs.map +1 -1
- package/dist/chat/thread-scroll-to-bottom.d.ts +10 -7
- package/dist/chat/thread-scroll-to-bottom.js +2 -2
- package/dist/chat/thread-scroll-to-bottom.js.map +1 -1
- package/dist/chat/tooltip-icon-button.cjs +2 -2
- package/dist/chat/tooltip-icon-button.cjs.map +1 -1
- package/dist/chat/use-athena-voice-live.cjs +11 -0
- package/dist/chat/use-athena-voice-live.cjs.map +1 -0
- package/dist/chat/use-athena-voice-live.d.ts +11 -0
- package/dist/chat/use-athena-voice-live.js +11 -0
- package/dist/chat/use-athena-voice-live.js.map +1 -0
- package/dist/chat/use-statewire-approval-request.cjs +56 -24
- package/dist/chat/use-statewire-approval-request.cjs.map +1 -1
- package/dist/chat/use-statewire-approval-request.d.ts +33 -4
- package/dist/chat/use-statewire-approval-request.js +41 -9
- package/dist/chat/use-statewire-approval-request.js.map +1 -1
- package/dist/chat-ui/auth/sign-in-card.cjs +2 -2
- package/dist/chat-ui/auth/sign-in-card.cjs.map +1 -1
- package/dist/chat-ui/composer/tiptap-composer.cjs +138 -107
- package/dist/chat-ui/composer/tiptap-composer.cjs.map +1 -1
- package/dist/chat-ui/composer/tiptap-composer.d.ts +20 -4
- package/dist/chat-ui/composer/tiptap-composer.js +85 -54
- package/dist/chat-ui/composer/tiptap-composer.js.map +1 -1
- package/dist/chat-ui/header/conversation-history-panel.cjs +49 -23
- package/dist/chat-ui/header/conversation-history-panel.cjs.map +1 -1
- package/dist/chat-ui/header/conversation-history-panel.d.ts +12 -1
- package/dist/chat-ui/header/conversation-history-panel.js +38 -12
- package/dist/chat-ui/header/conversation-history-panel.js.map +1 -1
- package/dist/chat-ui/index.cjs +21 -0
- package/dist/chat-ui/index.cjs.map +1 -1
- package/dist/chat-ui/index.d.ts +8 -1
- package/dist/chat-ui/index.js +21 -0
- package/dist/chat-ui/index.js.map +1 -1
- package/dist/chat-ui/mentions/mention-chip.cjs +4 -4
- package/dist/chat-ui/mentions/mention-chip.cjs.map +1 -1
- package/dist/chat-ui/mentions/suggestions/components/mention-suggestion-list.cjs +10 -9
- package/dist/chat-ui/mentions/suggestions/components/mention-suggestion-list.cjs.map +1 -1
- package/dist/chat-ui/mentions/suggestions/components/mention-suggestion-list.js +3 -2
- package/dist/chat-ui/mentions/suggestions/components/mention-suggestion-list.js.map +1 -1
- package/dist/chat-ui/mentions/suggestions/components/mention-suggestion-popup.cjs +2 -2
- package/dist/chat-ui/mentions/suggestions/components/mention-suggestion-popup.cjs.map +1 -1
- package/dist/chat-ui/mentions/suggestions/components/menu-list.cjs +29 -6
- package/dist/chat-ui/mentions/suggestions/components/menu-list.cjs.map +1 -1
- package/dist/chat-ui/mentions/suggestions/components/menu-list.d.ts +7 -1
- package/dist/chat-ui/mentions/suggestions/components/menu-list.js +25 -2
- package/dist/chat-ui/mentions/suggestions/components/menu-list.js.map +1 -1
- package/dist/chat-ui/mentions/suggestions/components/use-keyboard-navigation.cjs +2 -2
- package/dist/chat-ui/mentions/suggestions/components/use-keyboard-navigation.cjs.map +1 -1
- package/dist/chat-ui/mentions/suggestions/components/use-menu-navigation.cjs +2 -2
- package/dist/chat-ui/mentions/suggestions/components/use-menu-navigation.cjs.map +1 -1
- package/dist/chat-ui/mentions/suggestions/data/api-client.cjs +3 -3
- package/dist/chat-ui/mentions/suggestions/data/api-client.cjs.map +1 -1
- package/dist/chat-ui/mentions/suggestions/data/orchestrator.cjs +56 -2
- package/dist/chat-ui/mentions/suggestions/data/orchestrator.cjs.map +1 -1
- package/dist/chat-ui/mentions/suggestions/data/orchestrator.d.ts +12 -0
- package/dist/chat-ui/mentions/suggestions/data/orchestrator.js +56 -2
- package/dist/chat-ui/mentions/suggestions/data/orchestrator.js.map +1 -1
- package/dist/chat-ui/mentions/suggestions/data/sources/index.cjs +24 -3
- package/dist/chat-ui/mentions/suggestions/data/sources/index.cjs.map +1 -1
- package/dist/chat-ui/mentions/suggestions/data/sources/index.d.ts +7 -0
- package/dist/chat-ui/mentions/suggestions/data/sources/index.js +24 -3
- package/dist/chat-ui/mentions/suggestions/data/sources/index.js.map +1 -1
- package/dist/chat-ui/mentions/suggestions/data/use-mention-suggestions.cjs +35 -13
- package/dist/chat-ui/mentions/suggestions/data/use-mention-suggestions.cjs.map +1 -1
- package/dist/chat-ui/mentions/suggestions/data/use-mention-suggestions.d.ts +15 -1
- package/dist/chat-ui/mentions/suggestions/data/use-mention-suggestions.js +28 -6
- package/dist/chat-ui/mentions/suggestions/data/use-mention-suggestions.js.map +1 -1
- package/dist/chat-ui/mentions/suggestions/data/use-menu-items.cjs +9 -6
- package/dist/chat-ui/mentions/suggestions/data/use-menu-items.cjs.map +1 -1
- package/dist/chat-ui/mentions/suggestions/data/use-menu-items.d.ts +3 -0
- package/dist/chat-ui/mentions/suggestions/data/use-menu-items.js +5 -2
- package/dist/chat-ui/mentions/suggestions/data/use-menu-items.js.map +1 -1
- package/dist/chat-ui/mentions/use-account-workspace-id.cjs +45 -10
- package/dist/chat-ui/mentions/use-account-workspace-id.cjs.map +1 -1
- package/dist/chat-ui/mentions/use-account-workspace-id.d.ts +24 -1
- package/dist/chat-ui/mentions/use-account-workspace-id.js +46 -11
- package/dist/chat-ui/mentions/use-account-workspace-id.js.map +1 -1
- package/dist/chat-ui/mentions/use-member-avatar.cjs +4 -4
- package/dist/chat-ui/mentions/use-member-avatar.cjs.map +1 -1
- package/dist/chat-ui/mentions/use-mention-asset.cjs +3 -3
- package/dist/chat-ui/mentions/use-mention-asset.cjs.map +1 -1
- package/dist/chat-ui/messages/answer-label.cjs +42 -0
- package/dist/chat-ui/messages/answer-label.cjs.map +1 -0
- package/dist/chat-ui/messages/answer-label.d.ts +33 -0
- package/dist/chat-ui/messages/answer-label.js +42 -0
- package/dist/chat-ui/messages/answer-label.js.map +1 -0
- package/dist/chat-ui/messages/arrival-animation.cjs +13 -0
- package/dist/chat-ui/messages/arrival-animation.cjs.map +1 -0
- package/dist/chat-ui/messages/arrival-animation.d.ts +14 -0
- package/dist/chat-ui/messages/arrival-animation.js +13 -0
- package/dist/chat-ui/messages/arrival-animation.js.map +1 -0
- package/dist/chat-ui/messages/continue-pill.cjs +5 -5
- package/dist/chat-ui/messages/continue-pill.cjs.map +1 -1
- package/dist/chat-ui/messages/from-the-call-card.cjs +124 -0
- package/dist/chat-ui/messages/from-the-call-card.cjs.map +1 -0
- package/dist/chat-ui/messages/from-the-call-card.d.ts +17 -0
- package/dist/chat-ui/messages/from-the-call-card.js +124 -0
- package/dist/chat-ui/messages/from-the-call-card.js.map +1 -0
- package/dist/chat-ui/messages/handoff-arrival-divider.cjs +44 -0
- package/dist/chat-ui/messages/handoff-arrival-divider.cjs.map +1 -0
- package/dist/chat-ui/messages/handoff-arrival-divider.d.ts +17 -0
- package/dist/chat-ui/messages/handoff-arrival-divider.js +44 -0
- package/dist/chat-ui/messages/handoff-arrival-divider.js.map +1 -0
- package/dist/chat-ui/messages/message-actions-config.cjs +3 -3
- package/dist/chat-ui/messages/message-actions-config.cjs.map +1 -1
- package/dist/chat-ui/messages/message-components.cjs +8 -4
- package/dist/chat-ui/messages/message-components.cjs.map +1 -1
- package/dist/chat-ui/messages/message-components.js +5 -1
- package/dist/chat-ui/messages/message-components.js.map +1 -1
- package/dist/chat-ui/messages/message-images.cjs +66 -0
- package/dist/chat-ui/messages/message-images.cjs.map +1 -0
- package/dist/chat-ui/messages/message-images.d.ts +16 -0
- package/dist/chat-ui/messages/message-images.js +66 -0
- package/dist/chat-ui/messages/message-images.js.map +1 -0
- package/dist/chat-ui/messages/user-edit-composer.cjs +2 -2
- package/dist/chat-ui/messages/user-edit-composer.cjs.map +1 -1
- package/dist/chat-ui/messages/wake-marker.cjs +3 -3
- package/dist/chat-ui/messages/wake-marker.cjs.map +1 -1
- package/dist/chat-ui/rich-text/chat-link.cjs +3 -2
- package/dist/chat-ui/rich-text/chat-link.cjs.map +1 -1
- package/dist/chat-ui/rich-text/chat-link.d.ts +4 -0
- package/dist/chat-ui/rich-text/chat-link.js +4 -3
- package/dist/chat-ui/rich-text/chat-link.js.map +1 -1
- package/dist/chat-ui/rich-text/chat-message-body.cjs +9 -8
- package/dist/chat-ui/rich-text/chat-message-body.cjs.map +1 -1
- package/dist/chat-ui/rich-text/chat-message-body.d.ts +12 -0
- package/dist/chat-ui/rich-text/chat-message-body.js +2 -1
- package/dist/chat-ui/rich-text/chat-message-body.js.map +1 -1
- package/dist/chat-ui/rich-text/chat-node-views.cjs +6 -6
- package/dist/chat-ui/rich-text/chat-node-views.cjs.map +1 -1
- package/dist/chat-ui/rich-text/dom-output-spec.cjs +2 -2
- package/dist/chat-ui/rich-text/dom-output-spec.cjs.map +1 -1
- package/dist/chat-ui/statewire.cjs +3 -0
- package/dist/chat-ui/statewire.cjs.map +1 -1
- package/dist/chat-ui/statewire.d.ts +2 -1
- package/dist/chat-ui/statewire.js +3 -0
- package/dist/chat-ui/statewire.js.map +1 -1
- package/dist/chat-ui/thread/chat-thread-shell.cjs +45 -14
- package/dist/chat-ui/thread/chat-thread-shell.cjs.map +1 -1
- package/dist/chat-ui/thread/chat-thread-shell.d.ts +16 -2
- package/dist/chat-ui/thread/chat-thread-shell.js +37 -6
- package/dist/chat-ui/thread/chat-thread-shell.js.map +1 -1
- package/dist/chat-ui/thread/composer-send-or-stop.cjs +30 -20
- package/dist/chat-ui/thread/composer-send-or-stop.cjs.map +1 -1
- package/dist/chat-ui/thread/composer-send-or-stop.d.ts +8 -0
- package/dist/chat-ui/thread/composer-send-or-stop.js +29 -19
- package/dist/chat-ui/thread/composer-send-or-stop.js.map +1 -1
- package/dist/chat-ui/thread/statewire-history-edge.cjs +20 -21
- package/dist/chat-ui/thread/statewire-history-edge.cjs.map +1 -1
- package/dist/chat-ui/thread/statewire-history-edge.js +3 -4
- package/dist/chat-ui/thread/statewire-history-edge.js.map +1 -1
- package/dist/chat-ui/thread/thread-loading-overlay.cjs +5 -5
- package/dist/chat-ui/thread/thread-loading-overlay.cjs.map +1 -1
- package/dist/collab/client.cjs +52 -3
- package/dist/collab/client.cjs.map +1 -1
- package/dist/collab/client.d.ts +27 -0
- package/dist/collab/client.js +52 -3
- package/dist/collab/client.js.map +1 -1
- package/dist/collab/document-status.cjs +150 -0
- package/dist/collab/document-status.cjs.map +1 -0
- package/dist/collab/document-status.d.ts +68 -0
- package/dist/collab/document-status.js +150 -0
- package/dist/collab/document-status.js.map +1 -0
- package/dist/collab/index.cjs +7 -0
- package/dist/collab/index.cjs.map +1 -1
- package/dist/collab/index.d.ts +6 -1
- package/dist/collab/index.js +7 -0
- package/dist/collab/index.js.map +1 -1
- package/dist/collab/presence-react.cjs +11 -11
- package/dist/collab/presence-react.cjs.map +1 -1
- package/dist/collab/react.cjs +6 -6
- package/dist/collab/react.cjs.map +1 -1
- package/dist/composer/AttachmentContext.cjs +24 -11
- package/dist/composer/AttachmentContext.cjs.map +1 -1
- package/dist/composer/AttachmentContext.js +18 -5
- package/dist/composer/AttachmentContext.js.map +1 -1
- package/dist/composer/ComposerAttachmentPreview.cjs +78 -23
- package/dist/composer/ComposerAttachmentPreview.cjs.map +1 -1
- package/dist/composer/ComposerAttachmentPreview.d.ts +5 -3
- package/dist/composer/ComposerAttachmentPreview.js +79 -24
- package/dist/composer/ComposerAttachmentPreview.js.map +1 -1
- package/dist/composer/ComposerDropZone.cjs +7 -7
- package/dist/composer/ComposerDropZone.cjs.map +1 -1
- package/dist/composer/FileUploadButton.cjs +37 -22
- package/dist/composer/FileUploadButton.cjs.map +1 -1
- package/dist/composer/FileUploadButton.d.ts +6 -0
- package/dist/composer/FileUploadButton.js +34 -19
- package/dist/composer/FileUploadButton.js.map +1 -1
- package/dist/composer/QuoteContext.cjs +8 -8
- package/dist/composer/QuoteContext.cjs.map +1 -1
- package/dist/composer/composer-handoff.cjs +4 -4
- package/dist/composer/composer-handoff.cjs.map +1 -1
- package/dist/composer/index.d.ts +1 -1
- package/dist/composer/useAppendToComposer.cjs +4 -4
- package/dist/composer/useAppendToComposer.cjs.map +1 -1
- package/dist/composer/useAttachFiles.cjs +23 -6
- package/dist/composer/useAttachFiles.cjs.map +1 -1
- package/dist/composer/useAttachFiles.d.ts +15 -7
- package/dist/composer/useAttachFiles.js +22 -5
- package/dist/composer/useAttachFiles.js.map +1 -1
- package/dist/composer/useComposerAttachment.cjs +4 -4
- package/dist/composer/useComposerAttachment.cjs.map +1 -1
- package/dist/composer/useFileUpload.cjs +21 -16
- package/dist/composer/useFileUpload.cjs.map +1 -1
- package/dist/composer/useFileUpload.d.ts +12 -0
- package/dist/composer/useFileUpload.js +12 -7
- package/dist/composer/useFileUpload.js.map +1 -1
- package/dist/composer/useReadComposerDraft.cjs +27 -8
- package/dist/composer/useReadComposerDraft.cjs.map +1 -1
- package/dist/composer/useReadComposerDraft.d.ts +23 -1
- package/dist/composer/useReadComposerDraft.js +27 -8
- package/dist/composer/useReadComposerDraft.js.map +1 -1
- package/dist/composer/useSendMessage.cjs +4 -4
- package/dist/composer/useSendMessage.cjs.map +1 -1
- package/dist/diagnostics/useAthenaDiagnostics.cjs +4 -4
- package/dist/diagnostics/useAthenaDiagnostics.cjs.map +1 -1
- package/dist/dictation/audio-level-history.cjs +3 -3
- package/dist/dictation/audio-level-history.cjs.map +1 -1
- package/dist/dictation/dictation-controls.cjs +24 -20
- package/dist/dictation/dictation-controls.cjs.map +1 -1
- package/dist/dictation/dictation-controls.d.ts +6 -1
- package/dist/dictation/dictation-controls.js +24 -20
- package/dist/dictation/dictation-controls.js.map +1 -1
- package/dist/dictation/use-athena-dictation-engine.cjs +3 -3
- package/dist/dictation/use-athena-dictation-engine.cjs.map +1 -1
- package/dist/dictation/use-dictation.cjs +22 -22
- package/dist/dictation/use-dictation.cjs.map +1 -1
- package/dist/index.cjs +29 -2
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.ts +18 -4
- package/dist/index.js +30 -3
- package/dist/index.js.map +1 -1
- package/dist/keryx-http/src/receive-only-socket.cjs +40 -0
- package/dist/keryx-http/src/receive-only-socket.cjs.map +1 -0
- package/dist/keryx-http/src/receive-only-socket.d.ts +27 -0
- package/dist/keryx-http/src/receive-only-socket.js +40 -0
- package/dist/keryx-http/src/receive-only-socket.js.map +1 -0
- package/dist/keryx-http/src/unconfirmed-update-attributions.cjs +190 -0
- package/dist/keryx-http/src/unconfirmed-update-attributions.cjs.map +1 -0
- package/dist/keryx-http/src/unconfirmed-update-attributions.d.ts +132 -0
- package/dist/keryx-http/src/unconfirmed-update-attributions.js +190 -0
- package/dist/keryx-http/src/unconfirmed-update-attributions.js.map +1 -0
- package/dist/keryx-http/src/update-attributions.cjs +141 -0
- package/dist/keryx-http/src/update-attributions.cjs.map +1 -0
- package/dist/keryx-http/src/update-attributions.d.ts +107 -0
- package/dist/keryx-http/src/update-attributions.js +141 -0
- package/dist/keryx-http/src/update-attributions.js.map +1 -0
- package/dist/lib/owner-document.cjs +6 -6
- package/dist/lib/owner-document.cjs.map +1 -1
- package/dist/lib/use-athena-rest-query.cjs +4 -4
- package/dist/lib/use-athena-rest-query.cjs.map +1 -1
- package/dist/lib/use-document-active.cjs +4 -4
- package/dist/lib/use-document-active.cjs.map +1 -1
- package/dist/lib/use-prefers-reduced-motion.cjs +2 -2
- package/dist/lib/use-prefers-reduced-motion.cjs.map +1 -1
- package/dist/offline/offline-history.cjs +7 -7
- package/dist/offline/offline-history.cjs.map +1 -1
- package/dist/provider/AthenaContext.cjs +3 -3
- package/dist/provider/AthenaContext.cjs.map +1 -1
- package/dist/provider/AthenaProvider.cjs +120 -79
- package/dist/provider/AthenaProvider.cjs.map +1 -1
- package/dist/provider/AthenaProvider.d.ts +11 -1
- package/dist/provider/AthenaProvider.js +44 -3
- package/dist/provider/AthenaProvider.js.map +1 -1
- package/dist/provider/PostHogProvider.cjs +2 -2
- package/dist/provider/PostHogProvider.cjs.map +1 -1
- package/dist/provider/agent-selection-context.cjs +2 -2
- package/dist/provider/agent-selection-context.cjs.map +1 -1
- package/dist/provider/chat-mode-context.cjs +2 -2
- package/dist/provider/chat-mode-context.cjs.map +1 -1
- package/dist/provider/session-persistence-context.cjs +10 -0
- package/dist/provider/session-persistence-context.cjs.map +1 -0
- package/dist/provider/session-persistence-context.d.ts +15 -0
- package/dist/provider/session-persistence-context.js +10 -0
- package/dist/provider/session-persistence-context.js.map +1 -0
- package/dist/provider/statewire-history-context.cjs +4 -4
- package/dist/provider/statewire-history-context.cjs.map +1 -1
- package/dist/provider/statewire-lifecycle-context.cjs +3 -3
- package/dist/provider/statewire-lifecycle-context.cjs.map +1 -1
- package/dist/provider/statewire-window-context.cjs +3 -3
- package/dist/provider/statewire-window-context.cjs.map +1 -1
- package/dist/provider/theme-style-context.cjs +3 -3
- package/dist/provider/theme-style-context.cjs.map +1 -1
- package/dist/react/package.json.cjs +1 -1
- package/dist/react/package.json.js +1 -1
- package/dist/runtime/StatewireThreadConfigLaneSync.cjs +10 -10
- package/dist/runtime/StatewireThreadConfigLaneSync.cjs.map +1 -1
- package/dist/runtime/auth-refusal-restart.cjs +7 -7
- package/dist/runtime/auth-refusal-restart.cjs.map +1 -1
- package/dist/runtime/auth.cjs +13 -13
- package/dist/runtime/auth.cjs.map +1 -1
- package/dist/runtime/statewire-lifecycle.cjs +1 -0
- package/dist/runtime/statewire-lifecycle.cjs.map +1 -1
- package/dist/runtime/statewire-lifecycle.d.ts +3 -1
- package/dist/runtime/statewire-lifecycle.js +2 -1
- package/dist/runtime/statewire-lifecycle.js.map +1 -1
- package/dist/runtime/statewire-server-lane-context.cjs +2 -2
- package/dist/runtime/statewire-server-lane-context.cjs.map +1 -1
- package/dist/runtime/statewire-session-lane.cjs +4 -4
- package/dist/runtime/statewire-session-lane.cjs.map +1 -1
- package/dist/runtime/useAthenaStatewireRuntime.cjs +10 -8
- package/dist/runtime/useAthenaStatewireRuntime.cjs.map +1 -1
- package/dist/runtime/useAthenaStatewireRuntime.d.ts +2 -0
- package/dist/runtime/useAthenaStatewireRuntime.js +2 -0
- package/dist/runtime/useAthenaStatewireRuntime.js.map +1 -1
- package/dist/styles.css +1 -1
- package/dist/threads/Inbox.cjs +8 -8
- package/dist/threads/Inbox.cjs.map +1 -1
- package/dist/threads/SessionList.cjs +9 -9
- package/dist/threads/SessionList.cjs.map +1 -1
- package/dist/threads/SessionsPage.cjs +11 -11
- package/dist/threads/SessionsPage.cjs.map +1 -1
- package/dist/threads/api.cjs.map +1 -1
- package/dist/threads/api.d.ts +15 -0
- package/dist/threads/api.js.map +1 -1
- package/dist/threads/conversation-list-fetcher.cjs +13 -5
- package/dist/threads/conversation-list-fetcher.cjs.map +1 -1
- package/dist/threads/conversation-list-fetcher.d.ts +4 -1
- package/dist/threads/conversation-list-fetcher.js +13 -5
- package/dist/threads/conversation-list-fetcher.js.map +1 -1
- package/dist/threads/index-triggered-refresh.cjs +10 -10
- package/dist/threads/index-triggered-refresh.cjs.map +1 -1
- package/dist/threads/mark-viewed-thread-read.cjs +12 -12
- package/dist/threads/mark-viewed-thread-read.cjs.map +1 -1
- package/dist/threads/offline-session-list.cjs +3 -3
- package/dist/threads/offline-session-list.cjs.map +1 -1
- package/dist/threads/session-list-tab-share.cjs +5 -5
- package/dist/threads/session-list-tab-share.cjs.map +1 -1
- package/dist/threads/statewire-thread-list.cjs +79 -57
- package/dist/threads/statewire-thread-list.cjs.map +1 -1
- package/dist/threads/statewire-thread-list.d.ts +20 -8
- package/dist/threads/statewire-thread-list.js +28 -6
- package/dist/threads/statewire-thread-list.js.map +1 -1
- package/dist/threads/thread-id-context.cjs +5 -5
- package/dist/threads/thread-id-context.cjs.map +1 -1
- package/dist/threads/use-athena-session-attention.cjs +2 -2
- package/dist/threads/use-athena-session-attention.cjs.map +1 -1
- package/dist/threads/use-athena-sessions.cjs +37 -15
- package/dist/threads/use-athena-sessions.cjs.map +1 -1
- package/dist/threads/use-athena-sessions.d.ts +10 -5
- package/dist/threads/use-athena-sessions.js +28 -6
- package/dist/threads/use-athena-sessions.js.map +1 -1
- package/dist/threads/use-athena-thread-model.cjs +3 -3
- package/dist/threads/use-athena-thread-model.cjs.map +1 -1
- package/dist/threads/use-rest-conversation-history.cjs +3 -3
- package/dist/threads/use-rest-conversation-history.cjs.map +1 -1
- package/dist/threads/use-rest-conversation-history.d.ts +1 -0
- package/dist/threads/use-statewire-conversation-history.cjs +8 -8
- package/dist/threads/use-statewire-conversation-history.cjs.map +1 -1
- package/dist/threads/use-thread-archive.cjs +9 -9
- package/dist/threads/use-thread-archive.cjs.map +1 -1
- package/dist/threads/use-thread-favorite.cjs +2 -2
- package/dist/threads/use-thread-favorite.cjs.map +1 -1
- package/dist/threads/use-thread-field-override.cjs +20 -20
- package/dist/threads/use-thread-field-override.cjs.map +1 -1
- package/dist/threads/use-thread-read-state.cjs +4 -4
- package/dist/threads/use-thread-read-state.cjs.map +1 -1
- package/dist/threads/use-thread-rename.cjs +2 -2
- package/dist/threads/use-thread-rename.cjs.map +1 -1
- package/dist/threads/useAthenaThreadManager.cjs +2 -2
- package/dist/threads/useAthenaThreadManager.cjs.map +1 -1
- package/dist/tools/NestedPtcMessages.cjs +6 -6
- package/dist/tools/NestedPtcMessages.cjs.map +1 -1
- package/dist/tools/append-document-tool-ui.cjs +7 -7
- package/dist/tools/append-document-tool-ui.cjs.map +1 -1
- package/dist/tools/file-tool-uis.cjs +2 -2
- package/dist/tools/file-tool-uis.cjs.map +1 -1
- package/dist/tools/misc-tool-uis.cjs +2 -2
- package/dist/tools/misc-tool-uis.cjs.map +1 -1
- package/dist/tools/primitives.cjs +6 -6
- package/dist/tools/primitives.cjs.map +1 -1
- package/dist/tools/read-asset-tool-ui.cjs +6 -6
- package/dist/tools/read-asset-tool-ui.cjs.map +1 -1
- package/dist/tools/subagent-task-tool-ui.cjs +21 -21
- package/dist/tools/subagent-task-tool-ui.cjs.map +1 -1
- package/dist/tools/test-recording-tool-uis.cjs +16 -16
- package/dist/tools/test-recording-tool-uis.cjs.map +1 -1
- package/dist/tools/todo-plan-store.cjs +4 -4
- package/dist/tools/todo-plan-store.cjs.map +1 -1
- package/dist/tools/tool-appearance.cjs +3 -3
- package/dist/tools/tool-appearance.cjs.map +1 -1
- package/dist/tools/tool-fallback.cjs +14 -14
- package/dist/tools/tool-fallback.cjs.map +1 -1
- package/dist/tools/tool-uis.cjs +74 -74
- package/dist/tools/tool-uis.cjs.map +1 -1
- package/dist/tools/use-elapsed-seconds.cjs +3 -3
- package/dist/tools/use-elapsed-seconds.cjs.map +1 -1
- package/dist/tools/write-todos-tool-ui.cjs +9 -9
- package/dist/tools/write-todos-tool-ui.cjs.map +1 -1
- package/dist/ui/image-viewer.cjs +382 -0
- package/dist/ui/image-viewer.cjs.map +1 -0
- package/dist/ui/image-viewer.d.ts +50 -0
- package/dist/ui/image-viewer.js +382 -0
- package/dist/ui/image-viewer.js.map +1 -0
- package/dist/voice/chat.cjs +6 -0
- package/dist/voice/chat.cjs.map +1 -1
- package/dist/voice/chat.d.ts +1 -1
- package/dist/voice/chat.js +8 -2
- package/dist/voice/livekit-join.cjs +52 -101
- package/dist/voice/livekit-join.cjs.map +1 -1
- package/dist/voice/livekit-join.d.ts +1 -6
- package/dist/voice/livekit-join.js +52 -101
- package/dist/voice/livekit-join.js.map +1 -1
- package/dist/voice/livekit.cjs.map +1 -1
- package/dist/voice/livekit.d.ts +11 -1
- package/dist/voice/livekit.js.map +1 -1
- package/dist/voice/use-athena-voice-session.cjs +34 -34
- package/dist/voice/use-athena-voice-session.cjs.map +1 -1
- package/dist/workbench/ComputerLiveDesktop.cjs +13 -13
- package/dist/workbench/ComputerLiveDesktop.cjs.map +1 -1
- package/dist/workbench/SessionWorkbench.cjs +22 -22
- package/dist/workbench/SessionWorkbench.cjs.map +1 -1
- package/dist/workbench/session-workbench-context.cjs +3 -3
- package/dist/workbench/session-workbench-context.cjs.map +1 -1
- package/dist/workbench/session-workbench-panes.cjs +8 -8
- package/dist/workbench/session-workbench-panes.cjs.map +1 -1
- package/dist/workbench/workbench-layout-context.cjs +3 -3
- package/dist/workbench/workbench-layout-context.cjs.map +1 -1
- package/package.json +2 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"misc-tool-uis.cjs","sources":["../../src/tools/misc-tool-uis.tsx"],"sourcesContent":["/**\n * Small dedicated cards for tools whose generic fallback rendering read\n * poorly: currently the pip installer (Olympus registers it; the SDK's own\n * registry includes it).\n */\nimport { PackageIcon } from \"lucide-react\";\nimport { memo } from \"react\";\nimport type { ToolCallMessagePartComponent } from \"@assistant-ui/react\";\nimport {\n classifyToolResult,\n describePackage,\n isToolResultSuccess,\n} from \"@athenaintel/agent-runtime\";\nimport { ExpandableSection, normalizeResult, ToolCard } from \"./primitives\";\nimport { ToolFallback } from \"./tool-fallback\";\n\nconst InstallPackageToolUIImpl: ToolCallMessagePartComponent = (props) => {\n const { toolName, args, result, status } = props;\n // An install the user refused at the approval gate is neither installed\n // nor failed: the generic card owns the rejected treatment.\n if (classifyToolResult({ status, result }).state === \"rejected\") {\n return <ToolFallback {...props} icon={PackageIcon} />;\n }\n const typedArgs = (args ?? {}) as Record<string, unknown>;\n const packageName = describePackage(typedArgs);\n const isRunning = status?.type === \"running\";\n const isFailed =\n status?.type === \"incomplete\" || (status?.type === \"complete\" && !isToolResultSuccess(result));\n const data = normalizeResult(result);\n const detail =\n typeof result === \"string\" ? result : data ? JSON.stringify(data, null, 2) : null;\n\n return (\n <ToolCard\n icon={PackageIcon}\n status={isFailed && status?.type === \"complete\" ? \"incomplete\" : (status?.type ?? \"complete\")}\n title={\n isRunning\n ? \"Installing package...\"\n : isFailed\n ? \"Couldn't install package\"\n : \"Installed package\"\n }\n subtitle={packageName}\n toolName={toolName}\n error={status?.type === \"incomplete\" ? String(status.error ?? \"\") || undefined : undefined}\n args={typedArgs}\n result={result}\n >\n {!isRunning && detail ? (\n <ExpandableSection label=\"Show output\">\n <pre className=\"max-h-64 overflow-auto whitespace-pre-wrap break-all text-[11px] leading-snug text-muted-foreground\">\n {detail}\n </pre>\n </ExpandableSection>\n ) : null}\n </ToolCard>\n );\n};\n\nexport const InstallPackageToolUI = memo(\n InstallPackageToolUIImpl,\n) as unknown as ToolCallMessagePartComponent;\nInstallPackageToolUI.displayName = \"InstallPackageToolUI\";\n"],"names":["classifyToolResult","jsx","ToolFallback","PackageIcon","describePackage","isToolResultSuccess","normalizeResult","ToolCard","ExpandableSection","memo"],"mappings":";;;;;;;;;AAgBA,MAAM,2BAAyD,CAAC,UAAU;AACxE,QAAM,EAAE,UAAU,MAAM,QAAQ,WAAW;AAG3C,MAAIA,WAAAA,mBAAmB,EAAE,QAAQ,QAAQ,EAAE,UAAU,YAAY;AAC/D,WAAOC,2BAAAA,IAACC,aAAAA,cAAA,EAAc,GAAG,OAAO,MAAMC,YAAAA,aAAa;AAAA,EACrD;AACA,QAAM,YAAa,QAAQ,CAAA;AAC3B,QAAM,cAAcC,aAAAA,gBAAgB,SAAS;AAC7C,QAAM,aAAY,iCAAQ,UAAS;AACnC,QAAM,YACJ,iCAAQ,UAAS,iBAAiB,iCAAQ,UAAS,cAAc,CAACC,WAAAA,oBAAoB,MAAM;AAC9F,QAAM,OAAOC,WAAAA,gBAAgB,MAAM;AACnC,QAAM,SACJ,OAAO,WAAW,WAAW,SAAS,OAAO,KAAK,UAAU,MAAM,MAAM,CAAC,IAAI;AAE/E,SACEL,2BAAAA;AAAAA,IAACM,WAAAA;AAAAA,IAAA;AAAA,MACC,MAAMJ,YAAAA;AAAAA,MACN,QAAQ,aAAY,iCAAQ,UAAS,aAAa,gBAAgB,iCAAQ,SAAQ;AAAA,MAClF,OACE,YACI,0BACA,WACE,6BACA;AAAA,MAER,UAAU;AAAA,MACV;AAAA,MACA,QAAO,iCAAQ,UAAS,eAAe,OAAO,OAAO,SAAS,EAAE,KAAK,SAAY;AAAA,MACjF,MAAM;AAAA,MACN;AAAA,MAEC,UAAA,CAAC,aAAa,SACbF,2BAAAA,IAACO,8BAAA,EAAkB,OAAM,eACvB,UAAAP,2BAAAA,IAAC,OAAA,EAAI,WAAU,uGACZ,UAAA,OAAA,CACH,GACF,IACE;AAAA,IAAA;AAAA,EAAA;AAGV;AAEO,MAAM,uBAAuBQ,
|
|
1
|
+
{"version":3,"file":"misc-tool-uis.cjs","sources":["../../src/tools/misc-tool-uis.tsx"],"sourcesContent":["/**\n * Small dedicated cards for tools whose generic fallback rendering read\n * poorly: currently the pip installer (Olympus registers it; the SDK's own\n * registry includes it).\n */\nimport { PackageIcon } from \"lucide-react\";\nimport { memo } from \"react\";\nimport type { ToolCallMessagePartComponent } from \"@assistant-ui/react\";\nimport {\n classifyToolResult,\n describePackage,\n isToolResultSuccess,\n} from \"@athenaintel/agent-runtime\";\nimport { ExpandableSection, normalizeResult, ToolCard } from \"./primitives\";\nimport { ToolFallback } from \"./tool-fallback\";\n\nconst InstallPackageToolUIImpl: ToolCallMessagePartComponent = (props) => {\n const { toolName, args, result, status } = props;\n // An install the user refused at the approval gate is neither installed\n // nor failed: the generic card owns the rejected treatment.\n if (classifyToolResult({ status, result }).state === \"rejected\") {\n return <ToolFallback {...props} icon={PackageIcon} />;\n }\n const typedArgs = (args ?? {}) as Record<string, unknown>;\n const packageName = describePackage(typedArgs);\n const isRunning = status?.type === \"running\";\n const isFailed =\n status?.type === \"incomplete\" || (status?.type === \"complete\" && !isToolResultSuccess(result));\n const data = normalizeResult(result);\n const detail =\n typeof result === \"string\" ? result : data ? JSON.stringify(data, null, 2) : null;\n\n return (\n <ToolCard\n icon={PackageIcon}\n status={isFailed && status?.type === \"complete\" ? \"incomplete\" : (status?.type ?? \"complete\")}\n title={\n isRunning\n ? \"Installing package...\"\n : isFailed\n ? \"Couldn't install package\"\n : \"Installed package\"\n }\n subtitle={packageName}\n toolName={toolName}\n error={status?.type === \"incomplete\" ? String(status.error ?? \"\") || undefined : undefined}\n args={typedArgs}\n result={result}\n >\n {!isRunning && detail ? (\n <ExpandableSection label=\"Show output\">\n <pre className=\"max-h-64 overflow-auto whitespace-pre-wrap break-all text-[11px] leading-snug text-muted-foreground\">\n {detail}\n </pre>\n </ExpandableSection>\n ) : null}\n </ToolCard>\n );\n};\n\nexport const InstallPackageToolUI = memo(\n InstallPackageToolUIImpl,\n) as unknown as ToolCallMessagePartComponent;\nInstallPackageToolUI.displayName = \"InstallPackageToolUI\";\n"],"names":["classifyToolResult","jsx","ToolFallback","PackageIcon","describePackage","isToolResultSuccess","normalizeResult","ToolCard","ExpandableSection","memo"],"mappings":";;;;;;;;;AAgBA,MAAM,2BAAyD,CAAC,UAAU;AACxE,QAAM,EAAE,UAAU,MAAM,QAAQ,WAAW;AAG3C,MAAIA,WAAAA,mBAAmB,EAAE,QAAQ,QAAQ,EAAE,UAAU,YAAY;AAC/D,WAAOC,2BAAAA,IAACC,aAAAA,cAAA,EAAc,GAAG,OAAO,MAAMC,YAAAA,aAAa;AAAA,EACrD;AACA,QAAM,YAAa,QAAQ,CAAA;AAC3B,QAAM,cAAcC,aAAAA,gBAAgB,SAAS;AAC7C,QAAM,aAAY,iCAAQ,UAAS;AACnC,QAAM,YACJ,iCAAQ,UAAS,iBAAiB,iCAAQ,UAAS,cAAc,CAACC,WAAAA,oBAAoB,MAAM;AAC9F,QAAM,OAAOC,WAAAA,gBAAgB,MAAM;AACnC,QAAM,SACJ,OAAO,WAAW,WAAW,SAAS,OAAO,KAAK,UAAU,MAAM,MAAM,CAAC,IAAI;AAE/E,SACEL,2BAAAA;AAAAA,IAACM,WAAAA;AAAAA,IAAA;AAAA,MACC,MAAMJ,YAAAA;AAAAA,MACN,QAAQ,aAAY,iCAAQ,UAAS,aAAa,gBAAgB,iCAAQ,SAAQ;AAAA,MAClF,OACE,YACI,0BACA,WACE,6BACA;AAAA,MAER,UAAU;AAAA,MACV;AAAA,MACA,QAAO,iCAAQ,UAAS,eAAe,OAAO,OAAO,SAAS,EAAE,KAAK,SAAY;AAAA,MACjF,MAAM;AAAA,MACN;AAAA,MAEC,UAAA,CAAC,aAAa,SACbF,2BAAAA,IAACO,8BAAA,EAAkB,OAAM,eACvB,UAAAP,2BAAAA,IAAC,OAAA,EAAI,WAAU,uGACZ,UAAA,OAAA,CACH,GACF,IACE;AAAA,IAAA;AAAA,EAAA;AAGV;AAEO,MAAM,uBAAuBQ,WAAAA;AAAAA,EAClC;AACF;AACA,qBAAqB,cAAc;;"}
|
|
@@ -1,7 +1,7 @@
|
|
|
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 lucideReact = require("lucide-react");
|
|
6
6
|
const toolAppearance = require("./tool-appearance.cjs");
|
|
7
7
|
const toolMetadata = require("../agent-runtime/src/tool-metadata.cjs");
|
|
@@ -29,7 +29,7 @@ function truncate(text, max) {
|
|
|
29
29
|
}
|
|
30
30
|
function ToolCard(props) {
|
|
31
31
|
var _a;
|
|
32
|
-
const ThreadToolCard = (_a =
|
|
32
|
+
const ThreadToolCard = (_a = require$$0.useContext(toolAppearance.ToolAppearanceContext)) == null ? void 0 : _a.ToolCard;
|
|
33
33
|
if (ThreadToolCard) return /* @__PURE__ */ jsxRuntime.jsx(ThreadToolCard, { ...props });
|
|
34
34
|
return /* @__PURE__ */ jsxRuntime.jsx(ToolCardBox, { ...props });
|
|
35
35
|
}
|
|
@@ -88,8 +88,8 @@ function CopyToolSpecButton({
|
|
|
88
88
|
result,
|
|
89
89
|
className
|
|
90
90
|
}) {
|
|
91
|
-
const [copied, setCopied] =
|
|
92
|
-
const handleCopy =
|
|
91
|
+
const [copied, setCopied] = require$$0.useState(false);
|
|
92
|
+
const handleCopy = require$$0.useCallback(() => {
|
|
93
93
|
const spec = { tool_name: toolName };
|
|
94
94
|
if (args) spec.arguments = args;
|
|
95
95
|
else if (argsText) spec.arguments = tryParseJson(argsText) ?? argsText;
|
|
@@ -132,8 +132,8 @@ function ExpandableSection({
|
|
|
132
132
|
defaultOpen = false
|
|
133
133
|
}) {
|
|
134
134
|
var _a;
|
|
135
|
-
const [expanded, setExpanded] =
|
|
136
|
-
const appearance = ((_a =
|
|
135
|
+
const [expanded, setExpanded] = require$$0.useState(defaultOpen);
|
|
136
|
+
const appearance = ((_a = require$$0.useContext(toolAppearance.ToolAppearanceContext)) == null ? void 0 : _a.appearance) ?? "card";
|
|
137
137
|
if (appearance === "thread") {
|
|
138
138
|
const heading = sectionHeading(label);
|
|
139
139
|
return /* @__PURE__ */ jsxRuntime.jsxs("div", { "data-slot": "tool-section", className: "flex flex-col gap-1.5 px-3", children: [
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"primitives.cjs","sources":["../../src/tools/primitives.tsx"],"sourcesContent":["\"use client\";\n\n/**\n * The shared building blocks every SDK tool card is made of — the card shell\n * (`ToolCard`), the collapsible details section, and the result/text helpers.\n * Kept apart from the tool UI registry so a tool UI module can use them\n * without importing the registry that imports it back.\n */\nimport {\n useCallback,\n useContext,\n useState,\n type ElementType,\n type ReactNode,\n} from \"react\";\nimport { formatToolName } from \"@athenaintel/agent-runtime\";\nimport {\n AlertCircleIcon,\n CheckCircle2Icon,\n ChevronDownIcon,\n ClipboardCopyIcon,\n LoaderIcon,\n} from \"lucide-react\";\nimport { cn } from \"../lib/utils\";\nimport { ToolAppearanceContext } from \"./tool-appearance\";\n\nexport { formatToolName };\n\n/** Parse JSON text into a record, or `null` when it is not one. */\nexport function tryParseJson(text: string): Record<string, unknown> | null {\n try {\n const parsed: unknown = JSON.parse(text);\n return typeof parsed === \"object\" && parsed !== null\n ? (parsed as Record<string, unknown>)\n : null;\n } catch {\n return null;\n }\n}\n\n/** Parse a tool result (handles nested `.result`, string-encoded JSON) into a record. */\nexport function normalizeResult(result: unknown): Record<string, unknown> | null {\n if (!result) return null;\n if (typeof result === \"string\") return tryParseJson(result);\n if (typeof result === \"object\") {\n const obj = result as Record<string, unknown>;\n if (typeof obj.result === \"string\") return tryParseJson(obj.result) ?? obj;\n return obj;\n }\n return null;\n}\n\n/** Truncate a string with an ellipsis. */\nexport function truncate(text: string, max: number): string {\n return text.length > max ? `${text.slice(0, max)}...` : text;\n}\n\nexport type ToolStatus = \"running\" | \"complete\" | \"incomplete\" | \"requires-action\";\n\nexport interface ToolCardProps {\n icon: ElementType;\n status: ToolStatus;\n title: string;\n subtitle?: string;\n toolName?: string;\n badge?: string;\n error?: string | null;\n children?: ReactNode;\n args?: Record<string, unknown>;\n result?: unknown;\n}\n\n/**\n * The card shell every dedicated tool UI is built on. Under a thread\n * appearance provider it renders through the provider's row renderer (the\n * `ToolFallback` shell), so a dedicated UI and a generic fallback share one\n * anatomy there; with no provider it is the boxed card below, unchanged.\n */\nexport function ToolCard(props: ToolCardProps) {\n const ThreadToolCard = useContext(ToolAppearanceContext)?.ToolCard;\n if (ThreadToolCard) return <ThreadToolCard {...props} />;\n return <ToolCardBox {...props} />;\n}\n\nfunction ToolCardBox({\n icon: Icon,\n status,\n title,\n subtitle,\n toolName,\n badge,\n error,\n children,\n args,\n result,\n}: ToolCardProps) {\n const isRunning = status === \"running\";\n const isComplete = status === \"complete\";\n const isError = status === \"incomplete\";\n\n return (\n <div className=\"my-3 w-full overflow-hidden rounded-xl border border-border/60 bg-background shadow-sm\">\n <div className=\"flex items-center gap-3 px-4 py-3\">\n <div\n className={cn(\n \"flex size-8 shrink-0 items-center justify-center rounded-lg\",\n isRunning && \"bg-blue-50 text-blue-600\",\n isComplete && \"bg-emerald-50 text-emerald-600\",\n isError && \"bg-destructive/10 text-destructive\",\n )}\n >\n {isRunning ? (\n <LoaderIcon className=\"size-4 animate-spin\" />\n ) : isError ? (\n <AlertCircleIcon className=\"size-4\" />\n ) : (\n <Icon className=\"size-4\" />\n )}\n </div>\n <div className=\"min-w-0 flex-1\">\n <div className=\"flex items-center gap-2\">\n <span className=\"text-[13px] font-medium text-foreground\">\n {title}\n </span>\n {isComplete && !error && (\n <CheckCircle2Icon className=\"size-3.5 text-emerald-500\" />\n )}\n </div>\n {subtitle && (\n <p className=\"truncate text-[12px] text-muted-foreground\">\n {subtitle}\n </p>\n )}\n </div>\n {toolName && (\n <span className=\"shrink-0 rounded-md bg-muted/60 px-1.5 py-0.5 text-[10px] font-mono text-muted-foreground\">\n {formatToolName(toolName)}\n </span>\n )}\n {badge && (\n <span className=\"shrink-0 rounded-full bg-muted px-2 py-0.5 text-[10px] font-medium text-muted-foreground\">\n {badge}\n </span>\n )}\n {isRunning && (\n <div className=\"flex items-center gap-1.5\">\n <div className=\"h-1.5 w-10 animate-pulse rounded-full bg-blue-100\" />\n <div className=\"h-1.5 w-6 animate-pulse rounded-full bg-blue-100\" />\n </div>\n )}\n </div>\n\n {error && (\n <div className=\"border-t border-border/40 bg-destructive/10 px-4 py-2.5\">\n <p className=\"text-[12px] leading-relaxed text-destructive\">\n {error}\n </p>\n </div>\n )}\n\n {children}\n\n {/* Copy tool spec — subtle button at the bottom of every tool card */}\n {toolName && isComplete && (\n <CopyToolSpecButton toolName={toolName} args={args} result={result} />\n )}\n </div>\n );\n}\n\n/** Copies `{ tool_name, arguments, result }` as JSON — the tool spec a support ticket needs. */\nexport function CopyToolSpecButton({\n toolName,\n args,\n argsText,\n result,\n className,\n}: {\n toolName: string;\n args?: Record<string, unknown>;\n argsText?: string;\n result?: unknown;\n className?: string;\n}) {\n const [copied, setCopied] = useState(false);\n\n const handleCopy = useCallback(() => {\n const spec: Record<string, unknown> = { tool_name: toolName };\n if (args) spec.arguments = args;\n else if (argsText) spec.arguments = tryParseJson(argsText) ?? argsText;\n if (result !== undefined) {\n if (typeof result === \"string\") {\n const parsed = tryParseJson(result);\n spec.result = parsed ?? result;\n } else {\n spec.result = result;\n }\n }\n navigator.clipboard.writeText(JSON.stringify(spec, null, 2)).then(() => {\n setCopied(true);\n setTimeout(() => setCopied(false), 2000);\n });\n }, [toolName, args, argsText, result]);\n\n return (\n <div className={cn(\"flex justify-end px-3 pb-1.5\", className)}>\n <button\n type=\"button\"\n onClick={handleCopy}\n className=\"flex items-center gap-1 rounded px-1.5 py-0.5 text-[10px] text-muted-foreground/40 transition-colors hover:bg-muted/50 hover:text-muted-foreground\"\n title=\"Copy tool name, arguments, and result as JSON\"\n >\n <ClipboardCopyIcon className=\"size-2.5\" />\n {copied ? \"Copied!\" : toolName}\n </button>\n </div>\n );\n}\n\n/** \"Show search results\" → \"Search results\": the static heading a section gets once the row's disclosure is the only toggle. */\nfunction sectionHeading(label: string | undefined): string | null {\n if (!label) return null;\n const heading = label.replace(/^show\\s+/i, \"\").trim();\n if (!heading) return null;\n return heading.charAt(0).toUpperCase() + heading.slice(1);\n}\n\nexport function ExpandableSection({\n label,\n children,\n defaultOpen = false,\n}: {\n label?: string;\n children: ReactNode;\n defaultOpen?: boolean;\n}) {\n const [expanded, setExpanded] = useState(defaultOpen);\n const appearance = useContext(ToolAppearanceContext)?.appearance ?? \"card\";\n\n // Inside the thread row the card's own disclosure is the one toggle; a\n // second nested \"Show details\" would make a reader click twice.\n if (appearance === \"thread\") {\n const heading = sectionHeading(label);\n return (\n <div data-slot=\"tool-section\" className=\"flex flex-col gap-1.5 px-3\">\n {heading ? (\n <p className=\"text-xs font-medium text-muted-foreground\">{heading}</p>\n ) : null}\n <div className=\"max-h-72 overflow-y-auto\">{children}</div>\n </div>\n );\n }\n\n return (\n <div className=\"border-t border-border/40\">\n <button\n type=\"button\"\n onClick={() => setExpanded(!expanded)}\n className=\"flex w-full items-center gap-2 px-4 py-2 text-left text-[11px] font-medium text-muted-foreground transition-colors hover:bg-muted/30\"\n >\n <ChevronDownIcon\n className={cn(\n \"size-3.5 shrink-0 transition-transform duration-200\",\n !expanded && \"-rotate-90\",\n )}\n />\n <span>{expanded ? \"Hide details\" : (label ?? \"Show details\")}</span>\n </button>\n {expanded && (\n <div className=\"max-h-72 overflow-y-auto border-t border-border/40 bg-muted/10 px-4 py-3\">\n {children}\n </div>\n )}\n </div>\n );\n}\n"],"names":["useContext","ToolAppearanceContext","jsx","jsxs","cn","LoaderIcon","AlertCircleIcon","CheckCircle2Icon","formatToolName","useState","useCallback","ClipboardCopyIcon","ChevronDownIcon"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"primitives.cjs","sources":["../../src/tools/primitives.tsx"],"sourcesContent":["\"use client\";\n\n/**\n * The shared building blocks every SDK tool card is made of — the card shell\n * (`ToolCard`), the collapsible details section, and the result/text helpers.\n * Kept apart from the tool UI registry so a tool UI module can use them\n * without importing the registry that imports it back.\n */\nimport {\n useCallback,\n useContext,\n useState,\n type ElementType,\n type ReactNode,\n} from \"react\";\nimport { formatToolName } from \"@athenaintel/agent-runtime\";\nimport {\n AlertCircleIcon,\n CheckCircle2Icon,\n ChevronDownIcon,\n ClipboardCopyIcon,\n LoaderIcon,\n} from \"lucide-react\";\nimport { cn } from \"../lib/utils\";\nimport { ToolAppearanceContext } from \"./tool-appearance\";\n\nexport { formatToolName };\n\n/** Parse JSON text into a record, or `null` when it is not one. */\nexport function tryParseJson(text: string): Record<string, unknown> | null {\n try {\n const parsed: unknown = JSON.parse(text);\n return typeof parsed === \"object\" && parsed !== null\n ? (parsed as Record<string, unknown>)\n : null;\n } catch {\n return null;\n }\n}\n\n/** Parse a tool result (handles nested `.result`, string-encoded JSON) into a record. */\nexport function normalizeResult(result: unknown): Record<string, unknown> | null {\n if (!result) return null;\n if (typeof result === \"string\") return tryParseJson(result);\n if (typeof result === \"object\") {\n const obj = result as Record<string, unknown>;\n if (typeof obj.result === \"string\") return tryParseJson(obj.result) ?? obj;\n return obj;\n }\n return null;\n}\n\n/** Truncate a string with an ellipsis. */\nexport function truncate(text: string, max: number): string {\n return text.length > max ? `${text.slice(0, max)}...` : text;\n}\n\nexport type ToolStatus = \"running\" | \"complete\" | \"incomplete\" | \"requires-action\";\n\nexport interface ToolCardProps {\n icon: ElementType;\n status: ToolStatus;\n title: string;\n subtitle?: string;\n toolName?: string;\n badge?: string;\n error?: string | null;\n children?: ReactNode;\n args?: Record<string, unknown>;\n result?: unknown;\n}\n\n/**\n * The card shell every dedicated tool UI is built on. Under a thread\n * appearance provider it renders through the provider's row renderer (the\n * `ToolFallback` shell), so a dedicated UI and a generic fallback share one\n * anatomy there; with no provider it is the boxed card below, unchanged.\n */\nexport function ToolCard(props: ToolCardProps) {\n const ThreadToolCard = useContext(ToolAppearanceContext)?.ToolCard;\n if (ThreadToolCard) return <ThreadToolCard {...props} />;\n return <ToolCardBox {...props} />;\n}\n\nfunction ToolCardBox({\n icon: Icon,\n status,\n title,\n subtitle,\n toolName,\n badge,\n error,\n children,\n args,\n result,\n}: ToolCardProps) {\n const isRunning = status === \"running\";\n const isComplete = status === \"complete\";\n const isError = status === \"incomplete\";\n\n return (\n <div className=\"my-3 w-full overflow-hidden rounded-xl border border-border/60 bg-background shadow-sm\">\n <div className=\"flex items-center gap-3 px-4 py-3\">\n <div\n className={cn(\n \"flex size-8 shrink-0 items-center justify-center rounded-lg\",\n isRunning && \"bg-blue-50 text-blue-600\",\n isComplete && \"bg-emerald-50 text-emerald-600\",\n isError && \"bg-destructive/10 text-destructive\",\n )}\n >\n {isRunning ? (\n <LoaderIcon className=\"size-4 animate-spin\" />\n ) : isError ? (\n <AlertCircleIcon className=\"size-4\" />\n ) : (\n <Icon className=\"size-4\" />\n )}\n </div>\n <div className=\"min-w-0 flex-1\">\n <div className=\"flex items-center gap-2\">\n <span className=\"text-[13px] font-medium text-foreground\">\n {title}\n </span>\n {isComplete && !error && (\n <CheckCircle2Icon className=\"size-3.5 text-emerald-500\" />\n )}\n </div>\n {subtitle && (\n <p className=\"truncate text-[12px] text-muted-foreground\">\n {subtitle}\n </p>\n )}\n </div>\n {toolName && (\n <span className=\"shrink-0 rounded-md bg-muted/60 px-1.5 py-0.5 text-[10px] font-mono text-muted-foreground\">\n {formatToolName(toolName)}\n </span>\n )}\n {badge && (\n <span className=\"shrink-0 rounded-full bg-muted px-2 py-0.5 text-[10px] font-medium text-muted-foreground\">\n {badge}\n </span>\n )}\n {isRunning && (\n <div className=\"flex items-center gap-1.5\">\n <div className=\"h-1.5 w-10 animate-pulse rounded-full bg-blue-100\" />\n <div className=\"h-1.5 w-6 animate-pulse rounded-full bg-blue-100\" />\n </div>\n )}\n </div>\n\n {error && (\n <div className=\"border-t border-border/40 bg-destructive/10 px-4 py-2.5\">\n <p className=\"text-[12px] leading-relaxed text-destructive\">\n {error}\n </p>\n </div>\n )}\n\n {children}\n\n {/* Copy tool spec — subtle button at the bottom of every tool card */}\n {toolName && isComplete && (\n <CopyToolSpecButton toolName={toolName} args={args} result={result} />\n )}\n </div>\n );\n}\n\n/** Copies `{ tool_name, arguments, result }` as JSON — the tool spec a support ticket needs. */\nexport function CopyToolSpecButton({\n toolName,\n args,\n argsText,\n result,\n className,\n}: {\n toolName: string;\n args?: Record<string, unknown>;\n argsText?: string;\n result?: unknown;\n className?: string;\n}) {\n const [copied, setCopied] = useState(false);\n\n const handleCopy = useCallback(() => {\n const spec: Record<string, unknown> = { tool_name: toolName };\n if (args) spec.arguments = args;\n else if (argsText) spec.arguments = tryParseJson(argsText) ?? argsText;\n if (result !== undefined) {\n if (typeof result === \"string\") {\n const parsed = tryParseJson(result);\n spec.result = parsed ?? result;\n } else {\n spec.result = result;\n }\n }\n navigator.clipboard.writeText(JSON.stringify(spec, null, 2)).then(() => {\n setCopied(true);\n setTimeout(() => setCopied(false), 2000);\n });\n }, [toolName, args, argsText, result]);\n\n return (\n <div className={cn(\"flex justify-end px-3 pb-1.5\", className)}>\n <button\n type=\"button\"\n onClick={handleCopy}\n className=\"flex items-center gap-1 rounded px-1.5 py-0.5 text-[10px] text-muted-foreground/40 transition-colors hover:bg-muted/50 hover:text-muted-foreground\"\n title=\"Copy tool name, arguments, and result as JSON\"\n >\n <ClipboardCopyIcon className=\"size-2.5\" />\n {copied ? \"Copied!\" : toolName}\n </button>\n </div>\n );\n}\n\n/** \"Show search results\" → \"Search results\": the static heading a section gets once the row's disclosure is the only toggle. */\nfunction sectionHeading(label: string | undefined): string | null {\n if (!label) return null;\n const heading = label.replace(/^show\\s+/i, \"\").trim();\n if (!heading) return null;\n return heading.charAt(0).toUpperCase() + heading.slice(1);\n}\n\nexport function ExpandableSection({\n label,\n children,\n defaultOpen = false,\n}: {\n label?: string;\n children: ReactNode;\n defaultOpen?: boolean;\n}) {\n const [expanded, setExpanded] = useState(defaultOpen);\n const appearance = useContext(ToolAppearanceContext)?.appearance ?? \"card\";\n\n // Inside the thread row the card's own disclosure is the one toggle; a\n // second nested \"Show details\" would make a reader click twice.\n if (appearance === \"thread\") {\n const heading = sectionHeading(label);\n return (\n <div data-slot=\"tool-section\" className=\"flex flex-col gap-1.5 px-3\">\n {heading ? (\n <p className=\"text-xs font-medium text-muted-foreground\">{heading}</p>\n ) : null}\n <div className=\"max-h-72 overflow-y-auto\">{children}</div>\n </div>\n );\n }\n\n return (\n <div className=\"border-t border-border/40\">\n <button\n type=\"button\"\n onClick={() => setExpanded(!expanded)}\n className=\"flex w-full items-center gap-2 px-4 py-2 text-left text-[11px] font-medium text-muted-foreground transition-colors hover:bg-muted/30\"\n >\n <ChevronDownIcon\n className={cn(\n \"size-3.5 shrink-0 transition-transform duration-200\",\n !expanded && \"-rotate-90\",\n )}\n />\n <span>{expanded ? \"Hide details\" : (label ?? \"Show details\")}</span>\n </button>\n {expanded && (\n <div className=\"max-h-72 overflow-y-auto border-t border-border/40 bg-muted/10 px-4 py-3\">\n {children}\n </div>\n )}\n </div>\n );\n}\n"],"names":["useContext","ToolAppearanceContext","jsx","jsxs","cn","LoaderIcon","AlertCircleIcon","CheckCircle2Icon","formatToolName","useState","useCallback","ClipboardCopyIcon","ChevronDownIcon"],"mappings":"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"}
|
|
@@ -1,7 +1,7 @@
|
|
|
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 lucideReact = require("lucide-react");
|
|
6
6
|
const rangePreview = require("../sheet-range/range-preview.cjs");
|
|
7
7
|
const rangePreviewTable = require("../sheet-range/range-preview-table.cjs");
|
|
@@ -105,20 +105,20 @@ const ReadAssetToolUIImpl = ({
|
|
|
105
105
|
isError: isToolError
|
|
106
106
|
}) => {
|
|
107
107
|
var _a;
|
|
108
|
-
const [expanded, setExpanded] =
|
|
108
|
+
const [expanded, setExpanded] = require$$0.useState(false);
|
|
109
109
|
const typedArgs = args;
|
|
110
110
|
const assetIds = (typedArgs == null ? void 0 : typedArgs.asset_ids) ?? [];
|
|
111
111
|
const firstAssetId = assetIds[0] ?? "";
|
|
112
112
|
const assetCount = assetIds.length;
|
|
113
|
-
const normalizedResult =
|
|
114
|
-
const resultItems =
|
|
113
|
+
const normalizedResult = require$$0.useMemo(() => normalizeResult(result), [result]);
|
|
114
|
+
const resultItems = require$$0.useMemo(
|
|
115
115
|
() => getResultItems(normalizedResult),
|
|
116
116
|
[normalizedResult]
|
|
117
117
|
);
|
|
118
118
|
const isRunning = (status == null ? void 0 : status.type) === "running";
|
|
119
119
|
const isComplete = (status == null ? void 0 : status.type) === "complete";
|
|
120
120
|
const isIncomplete = (status == null ? void 0 : status.type) === "incomplete";
|
|
121
|
-
const reviewedText =
|
|
121
|
+
const reviewedText = require$$0.useMemo(
|
|
122
122
|
() => getReviewedText(resultItems),
|
|
123
123
|
[resultItems]
|
|
124
124
|
);
|
|
@@ -227,7 +227,7 @@ const ReadAssetToolUIImpl = ({
|
|
|
227
227
|
] })
|
|
228
228
|
] });
|
|
229
229
|
};
|
|
230
|
-
const ReadAssetToolUI =
|
|
230
|
+
const ReadAssetToolUI = require$$0.memo(
|
|
231
231
|
ReadAssetToolUIImpl
|
|
232
232
|
);
|
|
233
233
|
ReadAssetToolUI.displayName = "ReadAssetToolUI";
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"read-asset-tool-ui.cjs","sources":["../../src/tools/read-asset-tool-ui.tsx"],"sourcesContent":["import { memo, useMemo, useState } from \"react\";\nimport type { ToolCallMessagePartComponent } from \"@assistant-ui/react\";\nimport {\n CheckCircle2Icon,\n ChevronDownIcon,\n FileTextIcon,\n LoaderIcon,\n AlertCircleIcon,\n BookOpenIcon,\n} from \"lucide-react\";\nimport { cn } from \"../lib/utils\";\nimport { rangePreviewFromCellMap } from \"../sheet-range/range-preview\";\nimport { RangePreviewTable } from \"../sheet-range/range-preview-table\";\nimport { getAssetInfo, tryParseJson } from \"./asset-utils\";\n\nfunction normalizeResult(result: unknown): unknown {\n if (typeof result === \"string\") return tryParseJson(result) ?? result;\n if (typeof result === \"object\" && result !== null) {\n const obj = result as Record<string, unknown>;\n if (typeof obj.result === \"string\")\n return tryParseJson(obj.result) ?? obj.result;\n return obj;\n }\n return result;\n}\n\nfunction isErrorResult(resultText: string): boolean {\n return (\n resultText.startsWith(\"Error reading asset\") ||\n resultText.startsWith(\"Error:\")\n );\n}\n\ninterface ReadAssetResultItem {\n asset_id?: string;\n format?: string;\n content?: string;\n success?: boolean;\n error?: string;\n title?: string;\n}\n\nfunction isReadAssetResultItem(value: unknown): value is ReadAssetResultItem {\n if (!value || typeof value !== \"object\") return false;\n const item = value as Record<string, unknown>;\n return (\n typeof item.asset_id === \"string\" ||\n typeof item.format === \"string\" ||\n typeof item.content === \"string\" ||\n typeof item.success === \"boolean\" ||\n typeof item.error === \"string\"\n );\n}\n\nfunction getResultItems(value: unknown): ReadAssetResultItem[] {\n if (Array.isArray(value)) return value.filter(isReadAssetResultItem);\n if (isReadAssetResultItem(value)) return [value];\n return [];\n}\n\nfunction getResultAssetIds(items: ReadAssetResultItem[]): string[] {\n return items\n .map((item) => item.asset_id?.split(\"?\")[0])\n .filter((assetId): assetId is string => !!assetId);\n}\n\nfunction getReviewedText(items: ReadAssetResultItem[]): string | null {\n const textParts = items\n .filter(\n (item) =>\n item.success !== false &&\n typeof item.content === \"string\" &&\n item.content,\n )\n .map((item) => item.content as string);\n return textParts.length > 0 ? textParts.join(\"\\n\\n---\\n\\n\") : null;\n}\n\nfunction getErrorText(items: ReadAssetResultItem[]): string | null {\n const firstError = items.find((item) => item.success === false && item.error);\n return firstError?.error ?? null;\n}\n\n// --- Workbook preview ---\n\ntype WorkbookCellValue =\n | string\n | number\n | boolean\n | null\n | [string, unknown]\n | [string, unknown, string];\n\ninterface WorkbookSheet {\n sheetName: string;\n dimension: string;\n cells: Record<string, WorkbookCellValue>;\n}\n\ninterface WorkbookFormat {\n workbook: {\n sheets: WorkbookSheet[];\n };\n}\n\nfunction isWorkbookFormat(value: unknown): value is WorkbookFormat {\n if (!value || typeof value !== \"object\") return false;\n const obj = value as Record<string, unknown>;\n if (!obj.workbook || typeof obj.workbook !== \"object\") return false;\n const workbook = obj.workbook as Record<string, unknown>;\n return Array.isArray(workbook.sheets);\n}\n\nfunction formatCellValue(value: WorkbookCellValue | undefined): string {\n if (value === null || value === undefined) return \"\";\n if (Array.isArray(value)) return String(value[0] ?? \"\");\n return String(value);\n}\n\n// A glance at each sheet, not the whole of it: the card's body is short.\nconst WORKBOOK_PREVIEW_MAX_ROWS = 12;\nconst WORKBOOK_PREVIEW_MAX_COLUMNS = 8;\n\nfunction WorkbookPreview({ workbook }: { workbook: WorkbookFormat }) {\n return (\n <div className=\"space-y-3\">\n {workbook.workbook.sheets.map((sheet) => {\n const preview = rangePreviewFromCellMap({\n range: sheet.dimension,\n cells: sheet.cells ?? {},\n formatCell: formatCellValue,\n maxRows: WORKBOOK_PREVIEW_MAX_ROWS,\n maxColumns: WORKBOOK_PREVIEW_MAX_COLUMNS,\n });\n if (!preview) return null;\n\n return (\n <div key={sheet.sheetName}>\n <p className=\"mb-1 text-xs font-semibold text-muted-foreground\">\n {sheet.sheetName}\n </p>\n <RangePreviewTable\n preview={preview}\n maxRows={WORKBOOK_PREVIEW_MAX_ROWS}\n maxColumns={WORKBOOK_PREVIEW_MAX_COLUMNS}\n caption={`${sheet.sheetName} ${sheet.dimension}`}\n />\n <p className=\"mt-1 text-[10px] text-muted-foreground\">\n Showing preview from {sheet.dimension}\n </p>\n </div>\n );\n })}\n </div>\n );\n}\n\nfunction TextContentPreview({ text }: { text: string }) {\n const lines = text.split(\"\\n\");\n const previewLines = lines.slice(0, 20);\n const hasMore = lines.length > 20;\n\n return (\n <pre className=\"whitespace-pre-wrap break-words text-[12px] leading-[1.6] text-muted-foreground\">\n {previewLines.join(\"\\n\")}\n {hasMore && (\n <span className=\"text-muted-foreground/70\">{`\\n... ${lines.length - 20} more lines`}</span>\n )}\n </pre>\n );\n}\n\n// --- Main component ---\n\nconst ReadAssetToolUIImpl: ToolCallMessagePartComponent = ({\n args,\n result,\n status,\n isError: isToolError,\n}) => {\n const [expanded, setExpanded] = useState(false);\n\n const typedArgs = args as Record<string, unknown> | undefined;\n const assetIds = (typedArgs?.asset_ids as string[]) ?? [];\n const firstAssetId = assetIds[0] ?? \"\";\n const assetCount = assetIds.length;\n\n const normalizedResult = useMemo(() => normalizeResult(result), [result]);\n const resultItems = useMemo(\n () => getResultItems(normalizedResult),\n [normalizedResult],\n );\n\n const isRunning = status?.type === \"running\";\n const isComplete = status?.type === \"complete\";\n const isIncomplete = status?.type === \"incomplete\";\n\n const reviewedText = useMemo(\n () => getReviewedText(resultItems),\n [resultItems],\n );\n const resultText =\n typeof normalizedResult === \"string\" ? normalizedResult : reviewedText;\n const workbookData = isWorkbookFormat(normalizedResult)\n ? normalizedResult\n : null;\n const failedItems = resultItems.filter((item) => item.success === false);\n const allFailed =\n resultItems.length > 0 && failedItems.length === resultItems.length;\n const hasPartialIssues = failedItems.length > 0 && !allFailed;\n const resultError = getErrorText(resultItems);\n const hasError =\n isToolError ||\n isIncomplete ||\n allFailed ||\n (resultText != null && isErrorResult(resultText));\n\n const resultAssetIds = getResultAssetIds(resultItems);\n const resolvedAssetCount = Math.max(assetCount, new Set(resultAssetIds).size);\n const primaryAsset = getAssetInfo(firstAssetId || resultAssetIds[0] || \"\");\n // Prefer human titles over raw asset ids — an `asset_<uuid>` label reads as\n // garble to non-technical users. Multi-reads get a per-source checklist of\n // titles below the header; when the runtime offloaded the result (no titles\n // survive, only ids), fall back to a plain count rather than a uuid.\n const resultTitle = resultItems.find((item) => item.title)?.title;\n const isOpaqueId = (label: string) => /^asset_[0-9a-f-]{8,}/i.test(label);\n const primaryLabel =\n resultTitle ??\n (isOpaqueId(primaryAsset.name) ? \"1 document\" : primaryAsset.name);\n const sourceList =\n resolvedAssetCount > 1\n ? resultItems\n .filter((item) => typeof item.title === \"string\" && item.title !== \"\")\n .map((item, index) => ({\n key: item.asset_id ?? `${index}-${item.title}`,\n label: item.title as string,\n failed: item.success === false,\n }))\n : [];\n const assetLabel =\n resolvedAssetCount > 1\n ? `${resolvedAssetCount} documents`\n : primaryLabel;\n const statusTitle = isRunning\n ? \"Reviewing asset content\"\n : hasError\n ? \"Asset content review failed\"\n : hasPartialIssues\n ? \"Asset content reviewed with issues\"\n : \"Asset content review complete\";\n const badge = hasPartialIssues\n ? `${failedItems.length} ${failedItems.length === 1 ? \"issue\" : \"issues\"}`\n : resolvedAssetCount > 1\n ? `${resolvedAssetCount} sources`\n : workbookData\n ? \"Workbook review\"\n : \"Content review\";\n\n const hasContent =\n (isComplete || isIncomplete) && (resultText || workbookData);\n const errorMessage =\n status?.type === \"incomplete\"\n ? String(status.error ?? \"Content review failed\")\n : (resultError ?? (hasError && resultText ? resultText : null));\n\n return (\n <div className=\"my-1.5 w-full overflow-hidden rounded-xl border bg-background shadow-sm\">\n {/* Header */}\n <div className=\"flex items-center gap-3 px-4 py-3\">\n <div\n className={cn(\n \"flex size-9 shrink-0 items-center justify-center rounded-lg\",\n isRunning && \"bg-blue-50 text-blue-600\",\n isComplete && !hasError && \"bg-emerald-50 text-emerald-600\",\n isComplete && hasError && \"bg-red-50 text-red-500\",\n isIncomplete && \"bg-red-50 text-red-500\",\n !isRunning &&\n !isComplete &&\n !isIncomplete &&\n \"bg-muted text-muted-foreground\",\n )}\n >\n {isRunning ? (\n <LoaderIcon className=\"size-4 animate-spin\" />\n ) : hasError || isIncomplete ? (\n <AlertCircleIcon className=\"size-4\" />\n ) : (\n <BookOpenIcon className=\"size-4\" />\n )}\n </div>\n <div className=\"min-w-0 flex-1\">\n <div className=\"flex items-center gap-2\">\n <span className=\"text-[13px] font-semibold\">{statusTitle}</span>\n {isComplete && !hasError && (\n <CheckCircle2Icon className=\"size-3.5 text-emerald-500\" />\n )}\n <span className=\"rounded-full border border-border/60 bg-muted/50 px-2 py-0.5 text-[10px] font-medium uppercase tracking-wide text-muted-foreground\">\n {badge}\n </span>\n </div>\n <div className=\"flex items-center gap-1.5\">\n <FileTextIcon className=\"size-4\" />\n <span className=\"truncate text-[12px] text-muted-foreground\">\n Source: {assetLabel}\n </span>\n </div>\n </div>\n\n {/* Loading shimmer for streaming */}\n {isRunning && (\n <div className=\"flex items-center gap-1.5\">\n <div className=\"h-1.5 w-12 animate-pulse rounded-full bg-blue-100\" />\n <div className=\"h-1.5 w-8 animate-pulse rounded-full bg-blue-100\" />\n </div>\n )}\n </div>\n\n {/* Per-source checklist — actual titles with checkmarks (multi-read only;\n offloaded results carry no titles, so the header count stands alone) */}\n {sourceList.length > 1 && (\n <ul className=\"border-t px-4 py-2\">\n {sourceList.slice(0, 8).map((source) => (\n <li\n key={source.key}\n className=\"flex items-center gap-2 py-0.5 text-[12px] text-muted-foreground\"\n >\n {source.failed ? (\n <AlertCircleIcon className=\"size-3.5 shrink-0 text-red-400\" />\n ) : (\n <CheckCircle2Icon className=\"size-3.5 shrink-0 text-emerald-500\" />\n )}\n <span className=\"min-w-0 truncate\">{source.label}</span>\n </li>\n ))}\n {sourceList.length > 8 && (\n <li className=\"py-0.5 text-[11px] text-muted-foreground/70\">\n and {sourceList.length - 8} more\n </li>\n )}\n </ul>\n )}\n\n {/* Error message */}\n {hasError && errorMessage && (\n <div className=\"border-t bg-red-50/50 px-4 py-2.5\">\n <p className=\"text-[12px] leading-relaxed text-red-600\">\n {errorMessage}\n </p>\n </div>\n )}\n\n {/* Content preview (non-error) */}\n {hasContent && !hasError && (\n <div className=\"border-t\">\n <button\n type=\"button\"\n onClick={() => setExpanded(!expanded)}\n className=\"flex w-full items-center gap-2 px-4 py-2 text-left text-[11px] font-medium text-muted-foreground transition-colors hover:bg-muted/50\"\n >\n <ChevronDownIcon\n className={cn(\n \"size-3.5 shrink-0 transition-transform duration-200\",\n !expanded && \"-rotate-90\",\n )}\n />\n <span>\n {expanded ? \"Hide reviewed content\" : \"Show reviewed content\"}\n </span>\n </button>\n\n {expanded && (\n <div className=\"max-h-80 overflow-y-auto border-t bg-muted/30 px-4 py-3\">\n <div className=\"mb-2 text-[10px] font-semibold uppercase tracking-wide text-muted-foreground\">\n Reviewed content\n </div>\n {workbookData ? (\n <WorkbookPreview workbook={workbookData} />\n ) : resultText ? (\n <TextContentPreview text={resultText} />\n ) : null}\n </div>\n )}\n </div>\n )}\n </div>\n );\n};\n\nexport const ReadAssetToolUI = memo(\n ReadAssetToolUIImpl,\n) as unknown as ToolCallMessagePartComponent;\n\nReadAssetToolUI.displayName = \"ReadAssetToolUI\";\n"],"names":["tryParseJson","jsx","rangePreviewFromCellMap","RangePreviewTable","jsxs","useState","useMemo","getAssetInfo","cn","LoaderIcon","AlertCircleIcon","BookOpenIcon","CheckCircle2Icon","FileTextIcon","ChevronDownIcon","memo"],"mappings":";;;;;;;;;AAeA,SAAS,gBAAgB,QAA0B;AACjD,MAAI,OAAO,WAAW,SAAU,QAAOA,WAAAA,aAAa,MAAM,KAAK;AAC/D,MAAI,OAAO,WAAW,YAAY,WAAW,MAAM;AACjD,UAAM,MAAM;AACZ,QAAI,OAAO,IAAI,WAAW;AACxB,aAAOA,WAAAA,aAAa,IAAI,MAAM,KAAK,IAAI;AACzC,WAAO;AAAA,EACT;AACA,SAAO;AACT;AAEA,SAAS,cAAc,YAA6B;AAClD,SACE,WAAW,WAAW,qBAAqB,KAC3C,WAAW,WAAW,QAAQ;AAElC;AAWA,SAAS,sBAAsB,OAA8C;AAC3E,MAAI,CAAC,SAAS,OAAO,UAAU,SAAU,QAAO;AAChD,QAAM,OAAO;AACb,SACE,OAAO,KAAK,aAAa,YACzB,OAAO,KAAK,WAAW,YACvB,OAAO,KAAK,YAAY,YACxB,OAAO,KAAK,YAAY,aACxB,OAAO,KAAK,UAAU;AAE1B;AAEA,SAAS,eAAe,OAAuC;AAC7D,MAAI,MAAM,QAAQ,KAAK,EAAG,QAAO,MAAM,OAAO,qBAAqB;AACnE,MAAI,sBAAsB,KAAK,EAAG,QAAO,CAAC,KAAK;AAC/C,SAAO,CAAA;AACT;AAEA,SAAS,kBAAkB,OAAwC;AACjE,SAAO,MACJ,IAAI,CAAC,SAAA;;AAAS,sBAAK,aAAL,mBAAe,MAAM,KAAK;AAAA,GAAE,EAC1C,OAAO,CAAC,YAA+B,CAAC,CAAC,OAAO;AACrD;AAEA,SAAS,gBAAgB,OAA6C;AACpE,QAAM,YAAY,MACf;AAAA,IACC,CAAC,SACC,KAAK,YAAY,SACjB,OAAO,KAAK,YAAY,YACxB,KAAK;AAAA,EAAA,EAER,IAAI,CAAC,SAAS,KAAK,OAAiB;AACvC,SAAO,UAAU,SAAS,IAAI,UAAU,KAAK,aAAa,IAAI;AAChE;AAEA,SAAS,aAAa,OAA6C;AACjE,QAAM,aAAa,MAAM,KAAK,CAAC,SAAS,KAAK,YAAY,SAAS,KAAK,KAAK;AAC5E,UAAO,yCAAY,UAAS;AAC9B;AAwBA,SAAS,iBAAiB,OAAyC;AACjE,MAAI,CAAC,SAAS,OAAO,UAAU,SAAU,QAAO;AAChD,QAAM,MAAM;AACZ,MAAI,CAAC,IAAI,YAAY,OAAO,IAAI,aAAa,SAAU,QAAO;AAC9D,QAAM,WAAW,IAAI;AACrB,SAAO,MAAM,QAAQ,SAAS,MAAM;AACtC;AAEA,SAAS,gBAAgB,OAA8C;AACrE,MAAI,UAAU,QAAQ,UAAU,OAAW,QAAO;AAClD,MAAI,MAAM,QAAQ,KAAK,UAAU,OAAO,MAAM,CAAC,KAAK,EAAE;AACtD,SAAO,OAAO,KAAK;AACrB;AAGA,MAAM,4BAA4B;AAClC,MAAM,+BAA+B;AAErC,SAAS,gBAAgB,EAAE,YAA0C;AACnE,SACEC,+BAAC,SAAI,WAAU,aACZ,mBAAS,SAAS,OAAO,IAAI,CAAC,UAAU;AACvC,UAAM,UAAUC,aAAAA,wBAAwB;AAAA,MACtC,OAAO,MAAM;AAAA,MACb,OAAO,MAAM,SAAS,CAAA;AAAA,MACtB,YAAY;AAAA,MACZ,SAAS;AAAA,MACT,YAAY;AAAA,IAAA,CACb;AACD,QAAI,CAAC,QAAS,QAAO;AAErB,2CACG,OAAA,EACC,UAAA;AAAA,MAAAD,2BAAAA,IAAC,KAAA,EAAE,WAAU,oDACV,UAAA,MAAM,WACT;AAAA,MACAA,2BAAAA;AAAAA,QAACE,kBAAAA;AAAAA,QAAA;AAAA,UACC;AAAA,UACA,SAAS;AAAA,UACT,YAAY;AAAA,UACZ,SAAS,GAAG,MAAM,SAAS,IAAI,MAAM,SAAS;AAAA,QAAA;AAAA,MAAA;AAAA,MAEhDC,2BAAAA,KAAC,KAAA,EAAE,WAAU,0CAAyC,UAAA;AAAA,QAAA;AAAA,QAC9B,MAAM;AAAA,MAAA,EAAA,CAC9B;AAAA,IAAA,EAAA,GAZQ,MAAM,SAahB;AAAA,EAEJ,CAAC,EAAA,CACH;AAEJ;AAEA,SAAS,mBAAmB,EAAE,QAA0B;AACtD,QAAM,QAAQ,KAAK,MAAM,IAAI;AAC7B,QAAM,eAAe,MAAM,MAAM,GAAG,EAAE;AACtC,QAAM,UAAU,MAAM,SAAS;AAE/B,SACEA,2BAAAA,KAAC,OAAA,EAAI,WAAU,mFACZ,UAAA;AAAA,IAAA,aAAa,KAAK,IAAI;AAAA,IACtB,WACCH,2BAAAA,IAAC,QAAA,EAAK,WAAU,4BAA4B,UAAA;AAAA,MAAS,MAAM,SAAS,EAAE,cAAA,CAAc;AAAA,EAAA,GAExF;AAEJ;AAIA,MAAM,sBAAoD,CAAC;AAAA,EACzD;AAAA,EACA;AAAA,EACA;AAAA,EACA,SAAS;AACX,MAAM;;AACJ,QAAM,CAAC,UAAU,WAAW,IAAII,MAAAA,SAAS,KAAK;AAE9C,QAAM,YAAY;AAClB,QAAM,YAAY,uCAAW,cAA0B,CAAA;AACvD,QAAM,eAAe,SAAS,CAAC,KAAK;AACpC,QAAM,aAAa,SAAS;AAE5B,QAAM,mBAAmBC,MAAAA,QAAQ,MAAM,gBAAgB,MAAM,GAAG,CAAC,MAAM,CAAC;AACxE,QAAM,cAAcA,MAAAA;AAAAA,IAClB,MAAM,eAAe,gBAAgB;AAAA,IACrC,CAAC,gBAAgB;AAAA,EAAA;AAGnB,QAAM,aAAY,iCAAQ,UAAS;AACnC,QAAM,cAAa,iCAAQ,UAAS;AACpC,QAAM,gBAAe,iCAAQ,UAAS;AAEtC,QAAM,eAAeA,MAAAA;AAAAA,IACnB,MAAM,gBAAgB,WAAW;AAAA,IACjC,CAAC,WAAW;AAAA,EAAA;AAEd,QAAM,aACJ,OAAO,qBAAqB,WAAW,mBAAmB;AAC5D,QAAM,eAAe,iBAAiB,gBAAgB,IAClD,mBACA;AACJ,QAAM,cAAc,YAAY,OAAO,CAAC,SAAS,KAAK,YAAY,KAAK;AACvE,QAAM,YACJ,YAAY,SAAS,KAAK,YAAY,WAAW,YAAY;AAC/D,QAAM,mBAAmB,YAAY,SAAS,KAAK,CAAC;AACpD,QAAM,cAAc,aAAa,WAAW;AAC5C,QAAM,WACJ,eACA,gBACA,aACC,cAAc,QAAQ,cAAc,UAAU;AAEjD,QAAM,iBAAiB,kBAAkB,WAAW;AACpD,QAAM,qBAAqB,KAAK,IAAI,YAAY,IAAI,IAAI,cAAc,EAAE,IAAI;AAC5E,QAAM,eAAeC,WAAAA,aAAa,gBAAgB,eAAe,CAAC,KAAK,EAAE;AAKzE,QAAM,eAAc,iBAAY,KAAK,CAAC,SAAS,KAAK,KAAK,MAArC,mBAAwC;AAC5D,QAAM,aAAa,CAAC,UAAkB,wBAAwB,KAAK,KAAK;AACxE,QAAM,eACJ,gBACC,WAAW,aAAa,IAAI,IAAI,eAAe,aAAa;AAC/D,QAAM,aACJ,qBAAqB,IACjB,YACG,OAAO,CAAC,SAAS,OAAO,KAAK,UAAU,YAAY,KAAK,UAAU,EAAE,EACpE,IAAI,CAAC,MAAM,WAAW;AAAA,IACrB,KAAK,KAAK,YAAY,GAAG,KAAK,IAAI,KAAK,KAAK;AAAA,IAC5C,OAAO,KAAK;AAAA,IACZ,QAAQ,KAAK,YAAY;AAAA,EAAA,EACzB,IACJ,CAAA;AACN,QAAM,aACJ,qBAAqB,IACjB,GAAG,kBAAkB,eACrB;AACN,QAAM,cAAc,YAChB,4BACA,WACE,gCACA,mBACE,uCACA;AACR,QAAM,QAAQ,mBACV,GAAG,YAAY,MAAM,IAAI,YAAY,WAAW,IAAI,UAAU,QAAQ,KACtE,qBAAqB,IACnB,GAAG,kBAAkB,aACrB,eACE,oBACA;AAER,QAAM,cACH,cAAc,kBAAkB,cAAc;AACjD,QAAM,gBACJ,iCAAQ,UAAS,eACb,OAAO,OAAO,SAAS,uBAAuB,IAC7C,gBAAgB,YAAY,aAAa,aAAa;AAE7D,SACEH,2BAAAA,KAAC,OAAA,EAAI,WAAU,2EAEb,UAAA;AAAA,IAAAA,2BAAAA,KAAC,OAAA,EAAI,WAAU,qCACb,UAAA;AAAA,MAAAH,2BAAAA;AAAAA,QAAC;AAAA,QAAA;AAAA,UACC,WAAWO,OAAAA;AAAAA,YACT;AAAA,YACA,aAAa;AAAA,YACb,cAAc,CAAC,YAAY;AAAA,YAC3B,cAAc,YAAY;AAAA,YAC1B,gBAAgB;AAAA,YAChB,CAAC,aACC,CAAC,cACD,CAAC,gBACD;AAAA,UAAA;AAAA,UAGH,sBACCP,2BAAAA,IAACQ,YAAAA,YAAA,EAAW,WAAU,sBAAA,CAAsB,IAC1C,YAAY,eACdR,2BAAAA,IAACS,6BAAA,EAAgB,WAAU,SAAA,CAAS,IAEpCT,2BAAAA,IAACU,YAAAA,cAAA,EAAa,WAAU,SAAA,CAAS;AAAA,QAAA;AAAA,MAAA;AAAA,MAGrCP,2BAAAA,KAAC,OAAA,EAAI,WAAU,kBACb,UAAA;AAAA,QAAAA,2BAAAA,KAAC,OAAA,EAAI,WAAU,2BACb,UAAA;AAAA,UAAAH,2BAAAA,IAAC,QAAA,EAAK,WAAU,6BAA6B,UAAA,aAAY;AAAA,UACxD,cAAc,CAAC,YACdA,2BAAAA,IAACW,YAAAA,kBAAA,EAAiB,WAAU,6BAA4B;AAAA,UAE1DX,2BAAAA,IAAC,QAAA,EAAK,WAAU,sIACb,UAAA,MAAA,CACH;AAAA,QAAA,GACF;AAAA,QACAG,2BAAAA,KAAC,OAAA,EAAI,WAAU,6BACb,UAAA;AAAA,UAAAH,2BAAAA,IAACY,YAAAA,cAAA,EAAa,WAAU,SAAA,CAAS;AAAA,UACjCT,2BAAAA,KAAC,QAAA,EAAK,WAAU,8CAA6C,UAAA;AAAA,YAAA;AAAA,YAClD;AAAA,UAAA,EAAA,CACX;AAAA,QAAA,EAAA,CACF;AAAA,MAAA,GACF;AAAA,MAGC,aACCA,2BAAAA,KAAC,OAAA,EAAI,WAAU,6BACb,UAAA;AAAA,QAAAH,2BAAAA,IAAC,OAAA,EAAI,WAAU,oDAAA,CAAoD;AAAA,QACnEA,2BAAAA,IAAC,OAAA,EAAI,WAAU,mDAAA,CAAmD;AAAA,MAAA,EAAA,CACpE;AAAA,IAAA,GAEJ;AAAA,IAIC,WAAW,SAAS,KACnBG,2BAAAA,KAAC,MAAA,EAAG,WAAU,sBACX,UAAA;AAAA,MAAA,WAAW,MAAM,GAAG,CAAC,EAAE,IAAI,CAAC,WAC3BA,2BAAAA;AAAAA,QAAC;AAAA,QAAA;AAAA,UAEC,WAAU;AAAA,UAET,UAAA;AAAA,YAAA,OAAO,wCACLM,YAAAA,iBAAA,EAAgB,WAAU,kCAAiC,IAE5DT,2BAAAA,IAACW,YAAAA,kBAAA,EAAiB,WAAU,qCAAA,CAAqC;AAAA,YAEnEX,2BAAAA,IAAC,QAAA,EAAK,WAAU,oBAAoB,iBAAO,MAAA,CAAM;AAAA,UAAA;AAAA,QAAA;AAAA,QAR5C,OAAO;AAAA,MAAA,CAUf;AAAA,MACA,WAAW,SAAS,KACnBG,2BAAAA,KAAC,MAAA,EAAG,WAAU,+CAA8C,UAAA;AAAA,QAAA;AAAA,QACrD,WAAW,SAAS;AAAA,QAAE;AAAA,MAAA,EAAA,CAC7B;AAAA,IAAA,GAEJ;AAAA,IAID,YAAY,gBACXH,2BAAAA,IAAC,OAAA,EAAI,WAAU,qCACb,UAAAA,2BAAAA,IAAC,KAAA,EAAE,WAAU,4CACV,UAAA,aAAA,CACH,GACF;AAAA,IAID,cAAc,CAAC,YACdG,2BAAAA,KAAC,OAAA,EAAI,WAAU,YACb,UAAA;AAAA,MAAAA,2BAAAA;AAAAA,QAAC;AAAA,QAAA;AAAA,UACC,MAAK;AAAA,UACL,SAAS,MAAM,YAAY,CAAC,QAAQ;AAAA,UACpC,WAAU;AAAA,UAEV,UAAA;AAAA,YAAAH,2BAAAA;AAAAA,cAACa,YAAAA;AAAAA,cAAA;AAAA,gBACC,WAAWN,OAAAA;AAAAA,kBACT;AAAA,kBACA,CAAC,YAAY;AAAA,gBAAA;AAAA,cACf;AAAA,YAAA;AAAA,YAEFP,2BAAAA,IAAC,QAAA,EACE,UAAA,WAAW,0BAA0B,wBAAA,CACxC;AAAA,UAAA;AAAA,QAAA;AAAA,MAAA;AAAA,MAGD,YACCG,2BAAAA,KAAC,OAAA,EAAI,WAAU,2DACb,UAAA;AAAA,QAAAH,2BAAAA,IAAC,OAAA,EAAI,WAAU,gFAA+E,UAAA,oBAE9F;AAAA,QACC,eACCA,2BAAAA,IAAC,iBAAA,EAAgB,UAAU,aAAA,CAAc,IACvC,aACFA,2BAAAA,IAAC,oBAAA,EAAmB,MAAM,WAAA,CAAY,IACpC;AAAA,MAAA,EAAA,CACN;AAAA,IAAA,EAAA,CAEJ;AAAA,EAAA,GAEJ;AAEJ;AAEO,MAAM,kBAAkBc,MAAAA;AAAAA,EAC7B;AACF;AAEA,gBAAgB,cAAc;;"}
|
|
1
|
+
{"version":3,"file":"read-asset-tool-ui.cjs","sources":["../../src/tools/read-asset-tool-ui.tsx"],"sourcesContent":["import { memo, useMemo, useState } from \"react\";\nimport type { ToolCallMessagePartComponent } from \"@assistant-ui/react\";\nimport {\n CheckCircle2Icon,\n ChevronDownIcon,\n FileTextIcon,\n LoaderIcon,\n AlertCircleIcon,\n BookOpenIcon,\n} from \"lucide-react\";\nimport { cn } from \"../lib/utils\";\nimport { rangePreviewFromCellMap } from \"../sheet-range/range-preview\";\nimport { RangePreviewTable } from \"../sheet-range/range-preview-table\";\nimport { getAssetInfo, tryParseJson } from \"./asset-utils\";\n\nfunction normalizeResult(result: unknown): unknown {\n if (typeof result === \"string\") return tryParseJson(result) ?? result;\n if (typeof result === \"object\" && result !== null) {\n const obj = result as Record<string, unknown>;\n if (typeof obj.result === \"string\")\n return tryParseJson(obj.result) ?? obj.result;\n return obj;\n }\n return result;\n}\n\nfunction isErrorResult(resultText: string): boolean {\n return (\n resultText.startsWith(\"Error reading asset\") ||\n resultText.startsWith(\"Error:\")\n );\n}\n\ninterface ReadAssetResultItem {\n asset_id?: string;\n format?: string;\n content?: string;\n success?: boolean;\n error?: string;\n title?: string;\n}\n\nfunction isReadAssetResultItem(value: unknown): value is ReadAssetResultItem {\n if (!value || typeof value !== \"object\") return false;\n const item = value as Record<string, unknown>;\n return (\n typeof item.asset_id === \"string\" ||\n typeof item.format === \"string\" ||\n typeof item.content === \"string\" ||\n typeof item.success === \"boolean\" ||\n typeof item.error === \"string\"\n );\n}\n\nfunction getResultItems(value: unknown): ReadAssetResultItem[] {\n if (Array.isArray(value)) return value.filter(isReadAssetResultItem);\n if (isReadAssetResultItem(value)) return [value];\n return [];\n}\n\nfunction getResultAssetIds(items: ReadAssetResultItem[]): string[] {\n return items\n .map((item) => item.asset_id?.split(\"?\")[0])\n .filter((assetId): assetId is string => !!assetId);\n}\n\nfunction getReviewedText(items: ReadAssetResultItem[]): string | null {\n const textParts = items\n .filter(\n (item) =>\n item.success !== false &&\n typeof item.content === \"string\" &&\n item.content,\n )\n .map((item) => item.content as string);\n return textParts.length > 0 ? textParts.join(\"\\n\\n---\\n\\n\") : null;\n}\n\nfunction getErrorText(items: ReadAssetResultItem[]): string | null {\n const firstError = items.find((item) => item.success === false && item.error);\n return firstError?.error ?? null;\n}\n\n// --- Workbook preview ---\n\ntype WorkbookCellValue =\n | string\n | number\n | boolean\n | null\n | [string, unknown]\n | [string, unknown, string];\n\ninterface WorkbookSheet {\n sheetName: string;\n dimension: string;\n cells: Record<string, WorkbookCellValue>;\n}\n\ninterface WorkbookFormat {\n workbook: {\n sheets: WorkbookSheet[];\n };\n}\n\nfunction isWorkbookFormat(value: unknown): value is WorkbookFormat {\n if (!value || typeof value !== \"object\") return false;\n const obj = value as Record<string, unknown>;\n if (!obj.workbook || typeof obj.workbook !== \"object\") return false;\n const workbook = obj.workbook as Record<string, unknown>;\n return Array.isArray(workbook.sheets);\n}\n\nfunction formatCellValue(value: WorkbookCellValue | undefined): string {\n if (value === null || value === undefined) return \"\";\n if (Array.isArray(value)) return String(value[0] ?? \"\");\n return String(value);\n}\n\n// A glance at each sheet, not the whole of it: the card's body is short.\nconst WORKBOOK_PREVIEW_MAX_ROWS = 12;\nconst WORKBOOK_PREVIEW_MAX_COLUMNS = 8;\n\nfunction WorkbookPreview({ workbook }: { workbook: WorkbookFormat }) {\n return (\n <div className=\"space-y-3\">\n {workbook.workbook.sheets.map((sheet) => {\n const preview = rangePreviewFromCellMap({\n range: sheet.dimension,\n cells: sheet.cells ?? {},\n formatCell: formatCellValue,\n maxRows: WORKBOOK_PREVIEW_MAX_ROWS,\n maxColumns: WORKBOOK_PREVIEW_MAX_COLUMNS,\n });\n if (!preview) return null;\n\n return (\n <div key={sheet.sheetName}>\n <p className=\"mb-1 text-xs font-semibold text-muted-foreground\">\n {sheet.sheetName}\n </p>\n <RangePreviewTable\n preview={preview}\n maxRows={WORKBOOK_PREVIEW_MAX_ROWS}\n maxColumns={WORKBOOK_PREVIEW_MAX_COLUMNS}\n caption={`${sheet.sheetName} ${sheet.dimension}`}\n />\n <p className=\"mt-1 text-[10px] text-muted-foreground\">\n Showing preview from {sheet.dimension}\n </p>\n </div>\n );\n })}\n </div>\n );\n}\n\nfunction TextContentPreview({ text }: { text: string }) {\n const lines = text.split(\"\\n\");\n const previewLines = lines.slice(0, 20);\n const hasMore = lines.length > 20;\n\n return (\n <pre className=\"whitespace-pre-wrap break-words text-[12px] leading-[1.6] text-muted-foreground\">\n {previewLines.join(\"\\n\")}\n {hasMore && (\n <span className=\"text-muted-foreground/70\">{`\\n... ${lines.length - 20} more lines`}</span>\n )}\n </pre>\n );\n}\n\n// --- Main component ---\n\nconst ReadAssetToolUIImpl: ToolCallMessagePartComponent = ({\n args,\n result,\n status,\n isError: isToolError,\n}) => {\n const [expanded, setExpanded] = useState(false);\n\n const typedArgs = args as Record<string, unknown> | undefined;\n const assetIds = (typedArgs?.asset_ids as string[]) ?? [];\n const firstAssetId = assetIds[0] ?? \"\";\n const assetCount = assetIds.length;\n\n const normalizedResult = useMemo(() => normalizeResult(result), [result]);\n const resultItems = useMemo(\n () => getResultItems(normalizedResult),\n [normalizedResult],\n );\n\n const isRunning = status?.type === \"running\";\n const isComplete = status?.type === \"complete\";\n const isIncomplete = status?.type === \"incomplete\";\n\n const reviewedText = useMemo(\n () => getReviewedText(resultItems),\n [resultItems],\n );\n const resultText =\n typeof normalizedResult === \"string\" ? normalizedResult : reviewedText;\n const workbookData = isWorkbookFormat(normalizedResult)\n ? normalizedResult\n : null;\n const failedItems = resultItems.filter((item) => item.success === false);\n const allFailed =\n resultItems.length > 0 && failedItems.length === resultItems.length;\n const hasPartialIssues = failedItems.length > 0 && !allFailed;\n const resultError = getErrorText(resultItems);\n const hasError =\n isToolError ||\n isIncomplete ||\n allFailed ||\n (resultText != null && isErrorResult(resultText));\n\n const resultAssetIds = getResultAssetIds(resultItems);\n const resolvedAssetCount = Math.max(assetCount, new Set(resultAssetIds).size);\n const primaryAsset = getAssetInfo(firstAssetId || resultAssetIds[0] || \"\");\n // Prefer human titles over raw asset ids — an `asset_<uuid>` label reads as\n // garble to non-technical users. Multi-reads get a per-source checklist of\n // titles below the header; when the runtime offloaded the result (no titles\n // survive, only ids), fall back to a plain count rather than a uuid.\n const resultTitle = resultItems.find((item) => item.title)?.title;\n const isOpaqueId = (label: string) => /^asset_[0-9a-f-]{8,}/i.test(label);\n const primaryLabel =\n resultTitle ??\n (isOpaqueId(primaryAsset.name) ? \"1 document\" : primaryAsset.name);\n const sourceList =\n resolvedAssetCount > 1\n ? resultItems\n .filter((item) => typeof item.title === \"string\" && item.title !== \"\")\n .map((item, index) => ({\n key: item.asset_id ?? `${index}-${item.title}`,\n label: item.title as string,\n failed: item.success === false,\n }))\n : [];\n const assetLabel =\n resolvedAssetCount > 1\n ? `${resolvedAssetCount} documents`\n : primaryLabel;\n const statusTitle = isRunning\n ? \"Reviewing asset content\"\n : hasError\n ? \"Asset content review failed\"\n : hasPartialIssues\n ? \"Asset content reviewed with issues\"\n : \"Asset content review complete\";\n const badge = hasPartialIssues\n ? `${failedItems.length} ${failedItems.length === 1 ? \"issue\" : \"issues\"}`\n : resolvedAssetCount > 1\n ? `${resolvedAssetCount} sources`\n : workbookData\n ? \"Workbook review\"\n : \"Content review\";\n\n const hasContent =\n (isComplete || isIncomplete) && (resultText || workbookData);\n const errorMessage =\n status?.type === \"incomplete\"\n ? String(status.error ?? \"Content review failed\")\n : (resultError ?? (hasError && resultText ? resultText : null));\n\n return (\n <div className=\"my-1.5 w-full overflow-hidden rounded-xl border bg-background shadow-sm\">\n {/* Header */}\n <div className=\"flex items-center gap-3 px-4 py-3\">\n <div\n className={cn(\n \"flex size-9 shrink-0 items-center justify-center rounded-lg\",\n isRunning && \"bg-blue-50 text-blue-600\",\n isComplete && !hasError && \"bg-emerald-50 text-emerald-600\",\n isComplete && hasError && \"bg-red-50 text-red-500\",\n isIncomplete && \"bg-red-50 text-red-500\",\n !isRunning &&\n !isComplete &&\n !isIncomplete &&\n \"bg-muted text-muted-foreground\",\n )}\n >\n {isRunning ? (\n <LoaderIcon className=\"size-4 animate-spin\" />\n ) : hasError || isIncomplete ? (\n <AlertCircleIcon className=\"size-4\" />\n ) : (\n <BookOpenIcon className=\"size-4\" />\n )}\n </div>\n <div className=\"min-w-0 flex-1\">\n <div className=\"flex items-center gap-2\">\n <span className=\"text-[13px] font-semibold\">{statusTitle}</span>\n {isComplete && !hasError && (\n <CheckCircle2Icon className=\"size-3.5 text-emerald-500\" />\n )}\n <span className=\"rounded-full border border-border/60 bg-muted/50 px-2 py-0.5 text-[10px] font-medium uppercase tracking-wide text-muted-foreground\">\n {badge}\n </span>\n </div>\n <div className=\"flex items-center gap-1.5\">\n <FileTextIcon className=\"size-4\" />\n <span className=\"truncate text-[12px] text-muted-foreground\">\n Source: {assetLabel}\n </span>\n </div>\n </div>\n\n {/* Loading shimmer for streaming */}\n {isRunning && (\n <div className=\"flex items-center gap-1.5\">\n <div className=\"h-1.5 w-12 animate-pulse rounded-full bg-blue-100\" />\n <div className=\"h-1.5 w-8 animate-pulse rounded-full bg-blue-100\" />\n </div>\n )}\n </div>\n\n {/* Per-source checklist — actual titles with checkmarks (multi-read only;\n offloaded results carry no titles, so the header count stands alone) */}\n {sourceList.length > 1 && (\n <ul className=\"border-t px-4 py-2\">\n {sourceList.slice(0, 8).map((source) => (\n <li\n key={source.key}\n className=\"flex items-center gap-2 py-0.5 text-[12px] text-muted-foreground\"\n >\n {source.failed ? (\n <AlertCircleIcon className=\"size-3.5 shrink-0 text-red-400\" />\n ) : (\n <CheckCircle2Icon className=\"size-3.5 shrink-0 text-emerald-500\" />\n )}\n <span className=\"min-w-0 truncate\">{source.label}</span>\n </li>\n ))}\n {sourceList.length > 8 && (\n <li className=\"py-0.5 text-[11px] text-muted-foreground/70\">\n and {sourceList.length - 8} more\n </li>\n )}\n </ul>\n )}\n\n {/* Error message */}\n {hasError && errorMessage && (\n <div className=\"border-t bg-red-50/50 px-4 py-2.5\">\n <p className=\"text-[12px] leading-relaxed text-red-600\">\n {errorMessage}\n </p>\n </div>\n )}\n\n {/* Content preview (non-error) */}\n {hasContent && !hasError && (\n <div className=\"border-t\">\n <button\n type=\"button\"\n onClick={() => setExpanded(!expanded)}\n className=\"flex w-full items-center gap-2 px-4 py-2 text-left text-[11px] font-medium text-muted-foreground transition-colors hover:bg-muted/50\"\n >\n <ChevronDownIcon\n className={cn(\n \"size-3.5 shrink-0 transition-transform duration-200\",\n !expanded && \"-rotate-90\",\n )}\n />\n <span>\n {expanded ? \"Hide reviewed content\" : \"Show reviewed content\"}\n </span>\n </button>\n\n {expanded && (\n <div className=\"max-h-80 overflow-y-auto border-t bg-muted/30 px-4 py-3\">\n <div className=\"mb-2 text-[10px] font-semibold uppercase tracking-wide text-muted-foreground\">\n Reviewed content\n </div>\n {workbookData ? (\n <WorkbookPreview workbook={workbookData} />\n ) : resultText ? (\n <TextContentPreview text={resultText} />\n ) : null}\n </div>\n )}\n </div>\n )}\n </div>\n );\n};\n\nexport const ReadAssetToolUI = memo(\n ReadAssetToolUIImpl,\n) as unknown as ToolCallMessagePartComponent;\n\nReadAssetToolUI.displayName = \"ReadAssetToolUI\";\n"],"names":["tryParseJson","jsx","rangePreviewFromCellMap","RangePreviewTable","jsxs","useState","useMemo","getAssetInfo","cn","LoaderIcon","AlertCircleIcon","BookOpenIcon","CheckCircle2Icon","FileTextIcon","ChevronDownIcon","memo"],"mappings":"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"}
|
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
|
|
3
3
|
const jsxRuntime = require("react/jsx-runtime");
|
|
4
|
-
const react
|
|
4
|
+
const react = require("@assistant-ui/react");
|
|
5
5
|
const reactQuery = require("@tanstack/react-query");
|
|
6
6
|
const lucideReact = require("lucide-react");
|
|
7
|
-
const
|
|
7
|
+
const require$$0 = require("react");
|
|
8
8
|
const useStatewireApprovalRequest = require("../chat/use-statewire-approval-request.cjs");
|
|
9
9
|
const messageTime = require("../chat/message-time.cjs");
|
|
10
10
|
const turnTiming = require("../chat/super-grouping/turn-timing.cjs");
|
|
@@ -129,7 +129,7 @@ function laneStepsNote({
|
|
|
129
129
|
return arrivesLater ? `Showing the latest steps. ${leftOff} earlier ${leftOff === 1 ? "step arrives" : "steps arrive"} when this subagent finishes.` : `Showing the latest ${shown} of ${stepsLabel(total)}.`;
|
|
130
130
|
}
|
|
131
131
|
function useInReadOnlyThread() {
|
|
132
|
-
return react
|
|
132
|
+
return react.useAuiState((s) => {
|
|
133
133
|
var _a;
|
|
134
134
|
const thread = (_a = s.optional) == null ? void 0 : _a.thread;
|
|
135
135
|
return thread !== void 0 && !threadExtras.hasStatewireThreadExtras(thread.extras);
|
|
@@ -162,8 +162,8 @@ function LaneStatusGlyph({ phase }) {
|
|
|
162
162
|
);
|
|
163
163
|
}
|
|
164
164
|
function useRunningElapsedMs(running, startMs) {
|
|
165
|
-
const [clock, setClock] =
|
|
166
|
-
|
|
165
|
+
const [clock, setClock] = require$$0.useState(null);
|
|
166
|
+
require$$0.useEffect(() => {
|
|
167
167
|
if (!running) {
|
|
168
168
|
setClock(null);
|
|
169
169
|
return void 0;
|
|
@@ -176,27 +176,27 @@ function useRunningElapsedMs(running, startMs) {
|
|
|
176
176
|
if (!running || clock === null) return null;
|
|
177
177
|
return Math.max(0, clock.now - (startMs ?? clock.seenAt));
|
|
178
178
|
}
|
|
179
|
-
const LaneStepComponentsContext =
|
|
179
|
+
const LaneStepComponentsContext = require$$0.createContext(null);
|
|
180
180
|
const EmptyStepPart = () => null;
|
|
181
181
|
const LaneStep = () => {
|
|
182
|
-
const role = react
|
|
183
|
-
const components =
|
|
182
|
+
const role = react.useAuiState((s) => s.message.role);
|
|
183
|
+
const components = require$$0.useContext(LaneStepComponentsContext);
|
|
184
184
|
if (role !== "assistant") return null;
|
|
185
|
-
return /* @__PURE__ */ jsxRuntime.jsx(react
|
|
185
|
+
return /* @__PURE__ */ jsxRuntime.jsx(react.MessagePrimitive.Parts, { components: { Empty: EmptyStepPart, ...components } });
|
|
186
186
|
};
|
|
187
187
|
const LANE_ROW_COMPONENTS = { Message: LaneStep };
|
|
188
188
|
const ROW_KEY_SEPARATOR = "\0";
|
|
189
189
|
function LaneRows() {
|
|
190
|
-
const joinedKeys = react
|
|
190
|
+
const joinedKeys = react.useAuiState(
|
|
191
191
|
(s) => s.thread.messages.map((message) => messages.deepAgentRowKey(message)).join(ROW_KEY_SEPARATOR)
|
|
192
192
|
);
|
|
193
|
-
const rowKeys =
|
|
193
|
+
const rowKeys = require$$0.useMemo(
|
|
194
194
|
() => joinedKeys === "" ? [] : joinedKeys.split(ROW_KEY_SEPARATOR),
|
|
195
195
|
[joinedKeys]
|
|
196
196
|
);
|
|
197
|
-
return /* @__PURE__ */ jsxRuntime.jsx(jsxRuntime.Fragment, { children: rowKeys.map((key, index) => /* @__PURE__ */ jsxRuntime.jsx(react
|
|
197
|
+
return /* @__PURE__ */ jsxRuntime.jsx(jsxRuntime.Fragment, { children: rowKeys.map((key, index) => /* @__PURE__ */ jsxRuntime.jsx(react.ThreadPrimitive.MessageByIndex, { index, components: LANE_ROW_COMPONENTS }, key)) });
|
|
198
198
|
}
|
|
199
|
-
class LaneStepsBoundary extends
|
|
199
|
+
class LaneStepsBoundary extends require$$0.Component {
|
|
200
200
|
constructor(props) {
|
|
201
201
|
super(props);
|
|
202
202
|
this.state = { failed: false };
|
|
@@ -243,7 +243,7 @@ function LaneSteps({ lane, phase, result, partMessages }) {
|
|
|
243
243
|
total: (_a = source == null ? void 0 : source.truncated) == null ? void 0 : _a.messages,
|
|
244
244
|
finished: ((_b = source == null ? void 0 : source.truncated) == null ? void 0 : _b.finished) === true
|
|
245
245
|
});
|
|
246
|
-
const [convertLane] =
|
|
246
|
+
const [convertLane] = require$$0.useState(() => subagentTranscripts.createSubagentLaneConversion());
|
|
247
247
|
const report = lane.status === "complete" && (source == null ? void 0 : source.messageId) !== void 0 ? lane.output : void 0;
|
|
248
248
|
const messages2 = (source === void 0 ? void 0 : convertLane(subagentTranscripts.withLaneReport(history.steps, report), running)) ?? partMessages ?? NO_MESSAGES;
|
|
249
249
|
const components = NestedPtcMessages.useNestedPtcComponents(toolFallback.ToolFallback);
|
|
@@ -282,7 +282,7 @@ function LaneSteps({ lane, phase, result, partMessages }) {
|
|
|
282
282
|
]
|
|
283
283
|
}
|
|
284
284
|
) : null,
|
|
285
|
-
messages2.length > 0 ? /* @__PURE__ */ jsxRuntime.jsx(LaneStepsBoundary, { name: lane.name, children: /* @__PURE__ */ jsxRuntime.jsx(LaneStepComponentsContext.Provider, { value: components, children: /* @__PURE__ */ jsxRuntime.jsx(react
|
|
285
|
+
messages2.length > 0 ? /* @__PURE__ */ jsxRuntime.jsx(LaneStepsBoundary, { name: lane.name, children: /* @__PURE__ */ jsxRuntime.jsx(LaneStepComponentsContext.Provider, { value: components, children: /* @__PURE__ */ jsxRuntime.jsx(react.ReadonlyThreadProvider, { messages: messages2, children: /* @__PURE__ */ jsxRuntime.jsx("div", { "data-slot": "subagent-step-rows", className: "flex min-w-0 flex-col gap-1", children: /* @__PURE__ */ jsxRuntime.jsx(LaneRows, {}) }) }) }) }) : /* @__PURE__ */ jsxRuntime.jsx("p", { className: "text-xs text-muted-foreground", children: emptyText }),
|
|
286
286
|
closing ? /* @__PURE__ */ jsxRuntime.jsxs("div", { "data-slot": "subagent-result", className: "flex min-w-0 flex-col gap-0.5", children: [
|
|
287
287
|
/* @__PURE__ */ jsxRuntime.jsx(
|
|
288
288
|
"p",
|
|
@@ -325,8 +325,8 @@ function laneMeta({
|
|
|
325
325
|
function SubagentTaskCard({ toolCallId, args, status, artifact, messages: messages2 }) {
|
|
326
326
|
const appearance = toolAppearance.useToolAppearance();
|
|
327
327
|
const isThread = appearance === "thread";
|
|
328
|
-
const readLane = react
|
|
329
|
-
const lane =
|
|
328
|
+
const readLane = react.useAuiState((s) => subagents.taskSubagentsOfTurn(s.message).get(toolCallId));
|
|
329
|
+
const lane = require$$0.useMemo(
|
|
330
330
|
() => readLane ?? laneFromArgs(toolCallId, args),
|
|
331
331
|
[readLane, toolCallId, args]
|
|
332
332
|
);
|
|
@@ -335,12 +335,12 @@ function SubagentTaskCard({ toolCallId, args, status, artifact, messages: messag
|
|
|
335
335
|
const gatedCall = awaitingApproval ? subagents.subagentToolCallAwaitingApproval({ lane, toolCallIds: waitingToolCallIds }) : void 0;
|
|
336
336
|
const phase = subagentLanePhase({ status: lane.status, partStatus: status, awaitingApproval });
|
|
337
337
|
const running = phase === "running";
|
|
338
|
-
const delegatedAt = react
|
|
339
|
-
(s) => running ? laneDelegatedAtMs({ sources: react
|
|
338
|
+
const delegatedAt = react.useAuiState(
|
|
339
|
+
(s) => running ? laneDelegatedAtMs({ sources: react.getExternalStoreMessages(s.message), toolCallId }) : null
|
|
340
340
|
);
|
|
341
341
|
const runningElapsed = useRunningElapsedMs(running, delegatedAt);
|
|
342
342
|
const elapsedMs = running ? runningElapsed : isSettledSubagentLanePhase(phase) ? finishedLaneDurationMs(artifact) : null;
|
|
343
|
-
const step =
|
|
343
|
+
const step = require$$0.useMemo(() => running ? latestLaneStep(lane.messages) : null, [running, lane.messages]);
|
|
344
344
|
const hasSteps = lane.messageCount > 0 || (lane.omittedMessageCount ?? 0) > 0;
|
|
345
345
|
const typeLabel = subagentTypeLabel(lane.name);
|
|
346
346
|
const title = lane.description.trim() || typeLabel;
|
|
@@ -476,7 +476,7 @@ function SubagentDelegationRow({ args, result, isError, status }) {
|
|
|
476
476
|
);
|
|
477
477
|
}
|
|
478
478
|
const SubagentTaskToolUIImpl = (props) => useInReadOnlyThread() ? /* @__PURE__ */ jsxRuntime.jsx(SubagentDelegationRow, { ...props }) : /* @__PURE__ */ jsxRuntime.jsx(SubagentTaskCard, { ...props });
|
|
479
|
-
const SubagentTaskToolUI =
|
|
479
|
+
const SubagentTaskToolUI = require$$0.memo(
|
|
480
480
|
SubagentTaskToolUIImpl
|
|
481
481
|
);
|
|
482
482
|
SubagentTaskToolUI.displayName = "SubagentTaskToolUI";
|