@athenaintel/react 0.28.0 → 0.30.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 +418 -10
- package/dist/agent-runtime/src/asset-attachment.cjs.map +1 -0
- package/dist/agent-runtime/src/asset-attachment.js.map +1 -0
- package/dist/agent-runtime/src/auth-denial.cjs.map +1 -0
- package/dist/agent-runtime/src/auth-denial.js.map +1 -0
- package/dist/agent-runtime/src/client-tool-bridge.cjs.map +1 -0
- package/dist/agent-runtime/src/client-tool-bridge.js.map +1 -0
- package/dist/agent-runtime/src/client-tools.cjs.map +1 -0
- package/dist/agent-runtime/src/client-tools.js.map +1 -0
- package/dist/agent-runtime/src/composer-markdown.cjs +124 -0
- package/dist/agent-runtime/src/composer-markdown.cjs.map +1 -0
- package/dist/agent-runtime/src/composer-markdown.js +124 -0
- package/dist/agent-runtime/src/composer-markdown.js.map +1 -0
- package/dist/agent-runtime/src/conversation-index.cjs.map +1 -0
- package/dist/agent-runtime/src/conversation-index.js.map +1 -0
- package/dist/{packages/agent-runtime → agent-runtime}/src/conversation-list.cjs +36 -0
- package/dist/agent-runtime/src/conversation-list.cjs.map +1 -0
- package/dist/{packages/agent-runtime → agent-runtime}/src/conversation-list.js +36 -0
- package/dist/agent-runtime/src/conversation-list.js.map +1 -0
- package/dist/{packages/agent-runtime → agent-runtime}/src/deep-agent-transport-recipe.cjs +5 -3
- package/dist/agent-runtime/src/deep-agent-transport-recipe.cjs.map +1 -0
- package/dist/{packages/agent-runtime → agent-runtime}/src/deep-agent-transport-recipe.js +6 -4
- package/dist/agent-runtime/src/deep-agent-transport-recipe.js.map +1 -0
- package/dist/agent-runtime/src/edit-command.cjs.map +1 -0
- package/dist/agent-runtime/src/edit-command.js.map +1 -0
- package/dist/{packages/agent-runtime → agent-runtime}/src/errors.cjs +23 -0
- package/dist/agent-runtime/src/errors.cjs.map +1 -0
- package/dist/{packages/agent-runtime → agent-runtime}/src/errors.js +23 -0
- package/dist/agent-runtime/src/errors.js.map +1 -0
- package/dist/agent-runtime/src/execute-output.cjs +41 -0
- package/dist/agent-runtime/src/execute-output.cjs.map +1 -0
- package/dist/agent-runtime/src/execute-output.js +41 -0
- package/dist/agent-runtime/src/execute-output.js.map +1 -0
- package/dist/{packages/agent-runtime → agent-runtime}/src/generated/runconfig-contract.cjs +12 -2
- package/dist/agent-runtime/src/generated/runconfig-contract.cjs.map +1 -0
- package/dist/{packages/agent-runtime → agent-runtime}/src/generated/runconfig-contract.js +12 -2
- package/dist/agent-runtime/src/generated/runconfig-contract.js.map +1 -0
- package/dist/agent-runtime/src/github-wake-event.cjs.map +1 -0
- package/dist/agent-runtime/src/github-wake-event.js.map +1 -0
- package/dist/{packages/agent-runtime → agent-runtime}/src/interrupts.cjs +24 -1
- package/dist/agent-runtime/src/interrupts.cjs.map +1 -0
- package/dist/{packages/agent-runtime → agent-runtime}/src/interrupts.js +24 -1
- package/dist/agent-runtime/src/interrupts.js.map +1 -0
- package/dist/agent-runtime/src/message-author.cjs.map +1 -0
- package/dist/agent-runtime/src/message-author.js.map +1 -0
- package/dist/agent-runtime/src/message-window.cjs.map +1 -0
- package/dist/agent-runtime/src/message-window.js.map +1 -0
- package/dist/{packages/agent-runtime → agent-runtime}/src/messages.cjs +8 -4
- package/dist/agent-runtime/src/messages.cjs.map +1 -0
- package/dist/{packages/agent-runtime → agent-runtime}/src/messages.js +6 -2
- package/dist/agent-runtime/src/messages.js.map +1 -0
- package/dist/agent-runtime/src/model-context.cjs.map +1 -0
- package/dist/agent-runtime/src/model-context.js.map +1 -0
- package/dist/agent-runtime/src/optimistic-content.cjs.map +1 -0
- package/dist/agent-runtime/src/optimistic-content.js.map +1 -0
- package/dist/agent-runtime/src/protocol.cjs.map +1 -0
- package/dist/agent-runtime/src/protocol.js.map +1 -0
- package/dist/{packages/agent-runtime → agent-runtime}/src/queue.cjs +23 -2
- package/dist/agent-runtime/src/queue.cjs.map +1 -0
- package/dist/{packages/agent-runtime → agent-runtime}/src/queue.js +23 -2
- package/dist/agent-runtime/src/queue.js.map +1 -0
- package/dist/{packages/agent-runtime → agent-runtime}/src/quota-safe-local-storage-session.cjs +23 -13
- package/dist/agent-runtime/src/quota-safe-local-storage-session.cjs.map +1 -0
- package/dist/{packages/agent-runtime → agent-runtime}/src/quota-safe-local-storage-session.js +24 -14
- package/dist/agent-runtime/src/quota-safe-local-storage-session.js.map +1 -0
- package/dist/agent-runtime/src/runtime-messages.cjs.map +1 -0
- package/dist/agent-runtime/src/runtime-messages.js.map +1 -0
- package/dist/agent-runtime/src/screen-point.cjs.map +1 -0
- package/dist/agent-runtime/src/screen-point.js.map +1 -0
- package/dist/agent-runtime/src/send-recovery.cjs.map +1 -0
- package/dist/agent-runtime/src/send-recovery.js.map +1 -0
- package/dist/agent-runtime/src/statewire-attach-observer.cjs.map +1 -0
- package/dist/agent-runtime/src/statewire-attach-observer.js.map +1 -0
- package/dist/{packages/agent-runtime → agent-runtime}/src/statewire-state.cjs +8 -0
- package/dist/agent-runtime/src/statewire-state.cjs.map +1 -0
- package/dist/{packages/agent-runtime → agent-runtime}/src/statewire-state.js +8 -0
- package/dist/agent-runtime/src/statewire-state.js.map +1 -0
- package/dist/{packages/agent-runtime → agent-runtime}/src/statewire-suspended.cjs +4 -0
- package/dist/agent-runtime/src/statewire-suspended.cjs.map +1 -0
- package/dist/{packages/agent-runtime → agent-runtime}/src/statewire-suspended.js +4 -0
- package/dist/agent-runtime/src/statewire-suspended.js.map +1 -0
- package/dist/agent-runtime/src/statewire-transport.cjs +43 -0
- package/dist/agent-runtime/src/statewire-transport.cjs.map +1 -0
- package/dist/agent-runtime/src/statewire-transport.js +43 -0
- package/dist/agent-runtime/src/statewire-transport.js.map +1 -0
- package/dist/agent-runtime/src/streaming-markdown.cjs.map +1 -0
- package/dist/agent-runtime/src/streaming-markdown.js.map +1 -0
- package/dist/agent-runtime/src/subscription-wake-event.cjs +252 -0
- package/dist/agent-runtime/src/subscription-wake-event.cjs.map +1 -0
- package/dist/agent-runtime/src/subscription-wake-event.js +252 -0
- package/dist/agent-runtime/src/subscription-wake-event.js.map +1 -0
- package/dist/agent-runtime/src/thread-extras.cjs.map +1 -0
- package/dist/agent-runtime/src/thread-extras.js.map +1 -0
- package/dist/agent-runtime/src/thread-snapshot-cache.cjs.map +1 -0
- package/dist/agent-runtime/src/thread-snapshot-cache.js.map +1 -0
- package/dist/agent-runtime/src/thread-status.cjs.map +1 -0
- package/dist/agent-runtime/src/thread-status.js.map +1 -0
- package/dist/{packages/agent-runtime → agent-runtime}/src/tool-metadata.cjs +365 -3
- package/dist/agent-runtime/src/tool-metadata.cjs.map +1 -0
- package/dist/{packages/agent-runtime → agent-runtime}/src/tool-metadata.js +365 -3
- package/dist/agent-runtime/src/tool-metadata.js.map +1 -0
- package/dist/agent-runtime/src/tool-names.cjs +5 -0
- package/dist/agent-runtime/src/tool-names.cjs.map +1 -0
- package/dist/agent-runtime/src/tool-names.js +5 -0
- package/dist/agent-runtime/src/tool-names.js.map +1 -0
- package/dist/agent-runtime/src/tool-outputs.cjs.map +1 -0
- package/dist/agent-runtime/src/tool-outputs.js.map +1 -0
- package/dist/agent-runtime/src/tool-result.cjs.map +1 -0
- package/dist/agent-runtime/src/tool-result.js.map +1 -0
- package/dist/{packages/agent-runtime → agent-runtime}/src/use-conversation-list.cjs +33 -22
- package/dist/agent-runtime/src/use-conversation-list.cjs.map +1 -0
- package/dist/{packages/agent-runtime → agent-runtime}/src/use-conversation-list.js +34 -23
- package/dist/agent-runtime/src/use-conversation-list.js.map +1 -0
- package/dist/agent-runtime/src/use-deep-agent-config.cjs.map +1 -0
- package/dist/agent-runtime/src/use-deep-agent-config.js.map +1 -0
- package/dist/{packages/agent-runtime → agent-runtime}/src/use-deep-agent-edit-submit.cjs +2 -0
- package/dist/agent-runtime/src/use-deep-agent-edit-submit.cjs.map +1 -0
- package/dist/{packages/agent-runtime → agent-runtime}/src/use-deep-agent-edit-submit.js +2 -0
- package/dist/agent-runtime/src/use-deep-agent-edit-submit.js.map +1 -0
- package/dist/agent-runtime/src/use-deep-agent-runtime.cjs.map +1 -0
- package/dist/agent-runtime/src/use-deep-agent-runtime.js.map +1 -0
- package/dist/{packages/agent-runtime → agent-runtime}/src/use-deep-agent-thread.cjs +1 -0
- package/dist/agent-runtime/src/use-deep-agent-thread.cjs.map +1 -0
- package/dist/{packages/agent-runtime → agent-runtime}/src/use-deep-agent-thread.js +2 -1
- package/dist/agent-runtime/src/use-deep-agent-thread.js.map +1 -0
- package/dist/agent-runtime/src/use-deep-agent-window-sync.cjs.map +1 -0
- package/dist/agent-runtime/src/use-deep-agent-window-sync.js.map +1 -0
- package/dist/agent-runtime/src/use-historical-edit-attachments.cjs +52 -0
- package/dist/agent-runtime/src/use-historical-edit-attachments.cjs.map +1 -0
- package/dist/agent-runtime/src/use-historical-edit-attachments.js +52 -0
- package/dist/agent-runtime/src/use-historical-edit-attachments.js.map +1 -0
- package/dist/{packages/agent-runtime → agent-runtime}/src/voice-presentation.cjs +14 -0
- package/dist/agent-runtime/src/voice-presentation.cjs.map +1 -0
- package/dist/{packages/agent-runtime → agent-runtime}/src/voice-presentation.js +14 -0
- package/dist/agent-runtime/src/voice-presentation.js.map +1 -0
- package/dist/agent-runtime/src/voice-turn-grouping.cjs.map +1 -0
- package/dist/agent-runtime/src/voice-turn-grouping.js.map +1 -0
- package/dist/assets/AthenaAssetEmbed.cjs +8 -2
- package/dist/assets/AthenaAssetEmbed.cjs.map +1 -1
- package/dist/assets/AthenaAssetEmbed.d.ts +8 -0
- package/dist/assets/AthenaAssetEmbed.js +8 -2
- package/dist/assets/AthenaAssetEmbed.js.map +1 -1
- package/dist/assets/AthenaLayout.cjs +97 -31
- package/dist/assets/AthenaLayout.cjs.map +1 -1
- package/dist/assets/AthenaLayout.d.ts +13 -0
- package/dist/assets/AthenaLayout.js +98 -32
- package/dist/assets/AthenaLayout.js.map +1 -1
- package/dist/assets/asset-embed-messages.cjs.map +1 -1
- package/dist/assets/asset-embed-messages.d.ts +6 -0
- package/dist/assets/asset-embed-messages.js.map +1 -1
- package/dist/assets/asset-panel-store.cjs +68 -32
- package/dist/assets/asset-panel-store.cjs.map +1 -1
- package/dist/assets/asset-panel-store.d.ts +47 -1
- package/dist/assets/asset-panel-store.js +68 -32
- package/dist/assets/asset-panel-store.js.map +1 -1
- package/dist/assets/use-asset-embed.cjs +29 -8
- package/dist/assets/use-asset-embed.cjs.map +1 -1
- package/dist/assets/use-asset-embed.d.ts +7 -0
- package/dist/assets/use-asset-embed.js +29 -8
- package/dist/assets/use-asset-embed.js.map +1 -1
- package/dist/catalog/chat-pickers.cjs +152 -0
- package/dist/catalog/chat-pickers.cjs.map +1 -0
- package/dist/catalog/chat-pickers.d.ts +22 -0
- package/dist/catalog/chat-pickers.js +152 -0
- package/dist/catalog/chat-pickers.js.map +1 -0
- package/dist/catalog/runtime-catalog.cjs +181 -0
- package/dist/catalog/runtime-catalog.cjs.map +1 -0
- package/dist/catalog/runtime-catalog.d.ts +100 -0
- package/dist/catalog/runtime-catalog.js +181 -0
- package/dist/catalog/runtime-catalog.js.map +1 -0
- package/dist/chat/AthenaChat.cjs +86 -46
- package/dist/chat/AthenaChat.cjs.map +1 -1
- package/dist/chat/AthenaChat.d.ts +21 -4
- package/dist/chat/AthenaChat.js +88 -48
- package/dist/chat/AthenaChat.js.map +1 -1
- package/dist/chat/StatewireApprovalCard.cjs +38 -37
- package/dist/chat/StatewireApprovalCard.cjs.map +1 -1
- package/dist/chat/StatewireApprovalCard.d.ts +2 -0
- package/dist/chat/StatewireApprovalCard.js +39 -38
- package/dist/chat/StatewireApprovalCard.js.map +1 -1
- package/dist/chat/StatewireClientToolBridge.cjs +2 -2
- package/dist/chat/StatewireClientToolBridge.js +2 -2
- package/dist/chat/StatewireQueuedMessages.cjs +15 -12
- package/dist/chat/StatewireQueuedMessages.cjs.map +1 -1
- package/dist/chat/StatewireQueuedMessages.d.ts +22 -2
- package/dist/chat/StatewireQueuedMessages.js +15 -12
- package/dist/chat/StatewireQueuedMessages.js.map +1 -1
- package/dist/chat/StatewireRunRefusalNotice.cjs +48 -0
- package/dist/chat/StatewireRunRefusalNotice.cjs.map +1 -0
- package/dist/chat/StatewireRunRefusalNotice.d.ts +25 -0
- package/dist/chat/StatewireRunRefusalNotice.js +48 -0
- package/dist/chat/StatewireRunRefusalNotice.js.map +1 -0
- package/dist/chat/WaitingOnYouBanner.cjs +2 -2
- package/dist/chat/WaitingOnYouBanner.js +2 -2
- package/dist/chat/athena-citation-links.cjs +19 -15
- package/dist/chat/athena-citation-links.cjs.map +1 -1
- package/dist/chat/athena-citation-links.js +19 -15
- package/dist/chat/athena-citation-links.js.map +1 -1
- package/dist/chat/run-activity.cjs +9 -1
- package/dist/chat/run-activity.cjs.map +1 -1
- package/dist/chat/run-activity.d.ts +6 -0
- package/dist/chat/run-activity.js +10 -2
- package/dist/chat/run-activity.js.map +1 -1
- package/dist/chat/statewire-banners.cjs +30 -1
- package/dist/chat/statewire-banners.cjs.map +1 -1
- package/dist/chat/statewire-banners.d.ts +20 -1
- package/dist/chat/statewire-banners.js +32 -3
- package/dist/chat/statewire-banners.js.map +1 -1
- package/dist/chat/statewire-client-tools.cjs +1 -1
- package/dist/chat/statewire-client-tools.js +1 -1
- package/dist/chat/super-grouping/CollapsibleGroup.cjs +1 -1
- package/dist/chat/super-grouping/CollapsibleGroup.cjs.map +1 -1
- package/dist/chat/super-grouping/CollapsibleGroup.js +1 -1
- package/dist/chat/super-grouping/CollapsibleGroup.js.map +1 -1
- package/dist/chat/super-grouping/SuperGroupingCard.cjs +7 -5
- package/dist/chat/super-grouping/SuperGroupingCard.cjs.map +1 -1
- package/dist/chat/super-grouping/SuperGroupingCard.d.ts +8 -2
- package/dist/chat/super-grouping/SuperGroupingCard.js +7 -5
- package/dist/chat/super-grouping/SuperGroupingCard.js.map +1 -1
- package/dist/chat/super-grouping/SuperGroupingTranscript.cjs +350 -0
- package/dist/chat/super-grouping/SuperGroupingTranscript.cjs.map +1 -0
- package/dist/chat/super-grouping/SuperGroupingTranscript.d.ts +31 -0
- package/dist/chat/super-grouping/SuperGroupingTranscript.js +350 -0
- package/dist/chat/super-grouping/SuperGroupingTranscript.js.map +1 -0
- package/dist/chat/super-grouping/ToolTimeline.cjs +13 -2
- package/dist/chat/super-grouping/ToolTimeline.cjs.map +1 -1
- package/dist/chat/super-grouping/ToolTimeline.d.ts +10 -3
- package/dist/chat/super-grouping/ToolTimeline.js +13 -2
- package/dist/chat/super-grouping/ToolTimeline.js.map +1 -1
- package/dist/chat/super-grouping/activity-timeline.cjs +51 -26
- package/dist/chat/super-grouping/activity-timeline.cjs.map +1 -1
- package/dist/chat/super-grouping/activity-timeline.d.ts +40 -8
- package/dist/chat/super-grouping/activity-timeline.js +52 -27
- package/dist/chat/super-grouping/activity-timeline.js.map +1 -1
- package/dist/chat/super-grouping/index.cjs +12 -0
- package/dist/chat/super-grouping/index.cjs.map +1 -1
- package/dist/chat/super-grouping/index.d.ts +7 -2
- package/dist/chat/super-grouping/index.js +14 -2
- package/dist/chat/super-grouping/index.js.map +1 -1
- package/dist/chat/super-grouping/timeline-step.cjs +14 -5
- package/dist/chat/super-grouping/timeline-step.cjs.map +1 -1
- package/dist/chat/super-grouping/timeline-step.d.ts +10 -1
- package/dist/chat/super-grouping/timeline-step.js +15 -6
- package/dist/chat/super-grouping/timeline-step.js.map +1 -1
- package/dist/chat/super-grouping/turn-segments.cjs +82 -0
- package/dist/chat/super-grouping/turn-segments.cjs.map +1 -0
- package/dist/chat/super-grouping/turn-segments.d.ts +69 -0
- package/dist/chat/super-grouping/turn-segments.js +82 -0
- package/dist/chat/super-grouping/turn-segments.js.map +1 -0
- package/dist/chat/super-grouping/turn-timing.cjs +110 -0
- package/dist/chat/super-grouping/turn-timing.cjs.map +1 -0
- package/dist/chat/super-grouping/turn-timing.d.ts +52 -0
- package/dist/chat/super-grouping/turn-timing.js +110 -0
- package/dist/chat/super-grouping/turn-timing.js.map +1 -0
- package/dist/chat/tiptap-text.cjs +1 -1
- package/dist/chat/tiptap-text.js +1 -1
- package/dist/chat/use-athena-run-live.cjs +1 -1
- package/dist/chat/use-athena-run-live.js +1 -1
- package/dist/chat/use-statewire-approval-request.cjs +73 -4
- package/dist/chat/use-statewire-approval-request.cjs.map +1 -1
- package/dist/chat/use-statewire-approval-request.js +74 -5
- package/dist/chat/use-statewire-approval-request.js.map +1 -1
- package/dist/chat-ui/composer/composer-message.cjs +284 -0
- package/dist/chat-ui/composer/composer-message.cjs.map +1 -0
- package/dist/chat-ui/composer/composer-message.d.ts +152 -0
- package/dist/chat-ui/composer/composer-message.js +284 -0
- package/dist/chat-ui/composer/composer-message.js.map +1 -0
- package/dist/chat-ui/composer/tiptap-composer.cjs +57 -11
- package/dist/chat-ui/composer/tiptap-composer.cjs.map +1 -1
- package/dist/chat-ui/composer/tiptap-composer.d.ts +34 -6
- package/dist/chat-ui/composer/tiptap-composer.js +57 -11
- package/dist/chat-ui/composer/tiptap-composer.js.map +1 -1
- package/dist/chat-ui/index.cjs +4 -1
- package/dist/chat-ui/index.cjs.map +1 -1
- package/dist/chat-ui/index.d.ts +3 -2
- package/dist/chat-ui/index.js +5 -2
- package/dist/chat-ui/index.js.map +1 -1
- package/dist/chat-ui/mentions/mention-chip.cjs +3 -2
- package/dist/chat-ui/mentions/mention-chip.cjs.map +1 -1
- package/dist/chat-ui/mentions/mention-chip.js +4 -3
- package/dist/chat-ui/mentions/mention-chip.js.map +1 -1
- package/dist/chat-ui/mentions/mention-extension.cjs +8 -2
- package/dist/chat-ui/mentions/mention-extension.cjs.map +1 -1
- package/dist/chat-ui/mentions/mention-extension.js +8 -2
- package/dist/chat-ui/mentions/mention-extension.js.map +1 -1
- package/dist/chat-ui/mentions/suggestions/components/mention-suggestion-popup.cjs +3 -1
- package/dist/chat-ui/mentions/suggestions/components/mention-suggestion-popup.cjs.map +1 -1
- package/dist/chat-ui/mentions/suggestions/components/mention-suggestion-popup.js +3 -1
- package/dist/chat-ui/mentions/suggestions/components/mention-suggestion-popup.js.map +1 -1
- package/dist/chat-ui/mentions/suggestions/data/sources/index.cjs +65 -19
- package/dist/chat-ui/mentions/suggestions/data/sources/index.cjs.map +1 -1
- package/dist/chat-ui/mentions/suggestions/data/sources/index.d.ts +15 -0
- package/dist/chat-ui/mentions/suggestions/data/sources/index.js +67 -21
- package/dist/chat-ui/mentions/suggestions/data/sources/index.js.map +1 -1
- package/dist/chat-ui/mentions/suggestions/data/use-mention-suggestions.cjs +4 -2
- 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 +2 -1
- package/dist/chat-ui/mentions/suggestions/data/use-mention-suggestions.js +5 -3
- package/dist/chat-ui/mentions/suggestions/data/use-mention-suggestions.js.map +1 -1
- package/dist/chat-ui/messages/message-components.cjs +30 -10
- package/dist/chat-ui/messages/message-components.cjs.map +1 -1
- package/dist/chat-ui/messages/message-components.d.ts +21 -1
- package/dist/chat-ui/messages/message-components.js +30 -10
- package/dist/chat-ui/messages/message-components.js.map +1 -1
- package/dist/chat-ui/messages/runtime-message.cjs +1 -1
- package/dist/chat-ui/messages/runtime-message.js +1 -1
- package/dist/chat-ui/messages/statewire-continue-run.cjs +5 -5
- package/dist/chat-ui/messages/statewire-continue-run.js +5 -5
- package/dist/chat-ui/messages/user-edit-composer.cjs +1 -1
- package/dist/chat-ui/messages/user-edit-composer.js +1 -1
- package/dist/chat-ui/messages/wake-marker.cjs +39 -4
- package/dist/chat-ui/messages/wake-marker.cjs.map +1 -1
- package/dist/chat-ui/messages/wake-marker.d.ts +16 -5
- package/dist/chat-ui/messages/wake-marker.js +40 -5
- package/dist/chat-ui/messages/wake-marker.js.map +1 -1
- package/dist/chat-ui/rich-text/chat-message-body.cjs +12 -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 +6 -1
- package/dist/chat-ui/rich-text/chat-message-body.js +13 -9
- package/dist/chat-ui/rich-text/chat-message-body.js.map +1 -1
- package/dist/chat-ui/rich-text/chat-text-schema.cjs +64 -6
- package/dist/chat-ui/rich-text/chat-text-schema.cjs.map +1 -1
- package/dist/chat-ui/rich-text/chat-text-schema.d.ts +5 -0
- package/dist/chat-ui/rich-text/chat-text-schema.js +66 -8
- package/dist/chat-ui/rich-text/chat-text-schema.js.map +1 -1
- package/dist/chat-ui/statewire.cjs +1 -1
- package/dist/chat-ui/statewire.d.ts +1 -1
- package/dist/chat-ui/statewire.js +1 -1
- package/dist/chat-ui/thread/statewire-history-edge.cjs +2 -2
- package/dist/chat-ui/thread/statewire-history-edge.js +2 -2
- package/dist/collab/client.cjs +218 -13
- package/dist/collab/client.cjs.map +1 -1
- package/dist/collab/client.d.ts +105 -2
- package/dist/collab/client.js +221 -17
- package/dist/collab/client.js.map +1 -1
- package/dist/collab/index.cjs +2 -0
- package/dist/collab/index.cjs.map +1 -1
- package/dist/collab/index.d.ts +1 -1
- package/dist/collab/index.js +3 -1
- package/dist/composer/AttachmentContext.cjs +38 -12
- package/dist/composer/AttachmentContext.cjs.map +1 -1
- package/dist/composer/AttachmentContext.d.ts +22 -1
- package/dist/composer/AttachmentContext.js +40 -14
- package/dist/composer/AttachmentContext.js.map +1 -1
- package/dist/composer/QuoteContext.cjs +80 -28
- package/dist/composer/QuoteContext.cjs.map +1 -1
- package/dist/composer/QuoteContext.d.ts +35 -6
- package/dist/composer/QuoteContext.js +82 -30
- package/dist/composer/QuoteContext.js.map +1 -1
- package/dist/composer/build-composed-message.cjs +27 -0
- package/dist/composer/build-composed-message.cjs.map +1 -1
- package/dist/composer/build-composed-message.d.ts +21 -0
- package/dist/composer/build-composed-message.js +28 -1
- package/dist/composer/build-composed-message.js.map +1 -1
- package/dist/composer/composer-handoff.cjs +13 -1
- package/dist/composer/composer-handoff.cjs.map +1 -1
- package/dist/composer/composer-handoff.d.ts +12 -0
- package/dist/composer/composer-handoff.js +15 -3
- package/dist/composer/composer-handoff.js.map +1 -1
- package/dist/composer/index.d.ts +6 -3
- package/dist/composer/useReadComposerDraft.cjs +16 -0
- package/dist/composer/useReadComposerDraft.cjs.map +1 -0
- package/dist/composer/useReadComposerDraft.d.ts +6 -0
- package/dist/composer/useReadComposerDraft.js +16 -0
- package/dist/composer/useReadComposerDraft.js.map +1 -0
- package/dist/diagnostics/errors.cjs +6 -0
- package/dist/diagnostics/errors.cjs.map +1 -1
- package/dist/diagnostics/errors.d.ts +6 -0
- package/dist/diagnostics/errors.js +6 -0
- package/dist/diagnostics/errors.js.map +1 -1
- package/dist/index.cjs +159 -7
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.ts +53 -12
- package/dist/index.js +166 -14
- package/dist/index.js.map +1 -1
- package/dist/lib/owner-document.cjs +32 -0
- package/dist/lib/owner-document.cjs.map +1 -0
- package/dist/lib/owner-document.d.ts +17 -0
- package/dist/lib/owner-document.js +32 -0
- package/dist/lib/owner-document.js.map +1 -0
- package/dist/lib/portal-surface.cjs +55 -0
- package/dist/lib/portal-surface.cjs.map +1 -0
- package/dist/lib/portal-surface.d.ts +37 -0
- package/dist/lib/portal-surface.js +55 -0
- package/dist/lib/portal-surface.js.map +1 -0
- package/dist/lib/use-athena-rest-query.cjs +34 -0
- package/dist/lib/use-athena-rest-query.cjs.map +1 -0
- package/dist/lib/use-athena-rest-query.d.ts +31 -0
- package/dist/lib/use-athena-rest-query.js +34 -0
- package/dist/lib/use-athena-rest-query.js.map +1 -0
- package/dist/provider/AthenaProvider.cjs +36 -6
- package/dist/provider/AthenaProvider.cjs.map +1 -1
- package/dist/provider/AthenaProvider.d.ts +20 -1
- package/dist/provider/AthenaProvider.js +38 -8
- package/dist/provider/AthenaProvider.js.map +1 -1
- package/dist/provider/citation-links.d.ts +10 -2
- package/dist/{packages/react → react}/package.json.cjs +1 -1
- package/dist/{packages/react → react}/package.json.js +1 -1
- package/dist/runtime/statewire-lifecycle.cjs +15 -3
- package/dist/runtime/statewire-lifecycle.cjs.map +1 -1
- package/dist/runtime/statewire-lifecycle.d.ts +6 -0
- package/dist/runtime/statewire-lifecycle.js +15 -3
- package/dist/runtime/statewire-lifecycle.js.map +1 -1
- package/dist/runtime/useAthenaStatewireRuntime.cjs +11 -7
- package/dist/runtime/useAthenaStatewireRuntime.cjs.map +1 -1
- package/dist/runtime/useAthenaStatewireRuntime.js +11 -7
- package/dist/runtime/useAthenaStatewireRuntime.js.map +1 -1
- package/dist/search/useAthenaRepoSearch.cjs +5 -13
- package/dist/search/useAthenaRepoSearch.cjs.map +1 -1
- package/dist/search/useAthenaRepoSearch.d.ts +3 -3
- package/dist/search/useAthenaRepoSearch.js +6 -14
- package/dist/search/useAthenaRepoSearch.js.map +1 -1
- package/dist/sheet-range/a1.cjs +162 -0
- package/dist/sheet-range/a1.cjs.map +1 -0
- package/dist/sheet-range/a1.d.ts +91 -0
- package/dist/sheet-range/a1.js +162 -0
- package/dist/sheet-range/a1.js.map +1 -0
- package/dist/sheet-range/index.cjs +22 -0
- package/dist/sheet-range/index.cjs.map +1 -0
- package/dist/sheet-range/index.d.ts +12 -0
- package/dist/sheet-range/index.js +22 -0
- package/dist/sheet-range/index.js.map +1 -0
- package/dist/sheet-range/range-preview-table.cjs +75 -0
- package/dist/sheet-range/range-preview-table.cjs.map +1 -0
- package/dist/sheet-range/range-preview-table.d.ts +20 -0
- package/dist/sheet-range/range-preview-table.js +75 -0
- package/dist/sheet-range/range-preview-table.js.map +1 -0
- package/dist/sheet-range/range-preview.cjs +116 -0
- package/dist/sheet-range/range-preview.cjs.map +1 -0
- package/dist/sheet-range/range-preview.d.ts +67 -0
- package/dist/sheet-range/range-preview.js +116 -0
- package/dist/sheet-range/range-preview.js.map +1 -0
- package/dist/styles.css +1 -1
- package/dist/threads/Inbox.cjs +289 -0
- package/dist/threads/Inbox.cjs.map +1 -0
- package/dist/threads/Inbox.d.ts +46 -0
- package/dist/threads/Inbox.js +289 -0
- package/dist/threads/Inbox.js.map +1 -0
- package/dist/threads/SessionList.cjs +51 -126
- package/dist/threads/SessionList.cjs.map +1 -1
- package/dist/threads/SessionList.d.ts +26 -1
- package/dist/threads/SessionList.js +45 -120
- package/dist/threads/SessionList.js.map +1 -1
- package/dist/threads/SessionsPage.cjs +753 -0
- package/dist/threads/SessionsPage.cjs.map +1 -0
- package/dist/threads/SessionsPage.d.ts +35 -0
- package/dist/threads/SessionsPage.js +753 -0
- package/dist/threads/SessionsPage.js.map +1 -0
- package/dist/threads/api.cjs +21 -1
- package/dist/threads/api.cjs.map +1 -1
- package/dist/threads/api.d.ts +59 -0
- package/dist/threads/api.js +21 -1
- package/dist/threads/api.js.map +1 -1
- package/dist/threads/conversation-list-fetcher.cjs +9 -2
- package/dist/threads/conversation-list-fetcher.cjs.map +1 -1
- package/dist/threads/conversation-list-fetcher.d.ts +14 -1
- package/dist/threads/conversation-list-fetcher.js +9 -2
- package/dist/threads/conversation-list-fetcher.js.map +1 -1
- package/dist/threads/index.d.ts +2 -1
- package/dist/threads/pull-request-display.cjs +25 -0
- package/dist/threads/pull-request-display.cjs.map +1 -0
- package/dist/threads/pull-request-display.d.ts +15 -0
- package/dist/threads/pull-request-display.js +25 -0
- package/dist/threads/pull-request-display.js.map +1 -0
- package/dist/threads/session-list-model.cjs +16 -2
- package/dist/threads/session-list-model.cjs.map +1 -1
- package/dist/threads/session-list-model.d.ts +10 -0
- package/dist/threads/session-list-model.js +16 -2
- package/dist/threads/session-list-model.js.map +1 -1
- package/dist/threads/session-row-parts.cjs +152 -0
- package/dist/threads/session-row-parts.cjs.map +1 -0
- package/dist/threads/session-row-parts.d.ts +50 -0
- package/dist/threads/session-row-parts.js +152 -0
- package/dist/threads/session-row-parts.js.map +1 -0
- package/dist/threads/sessions-page-model.cjs +305 -0
- package/dist/threads/sessions-page-model.cjs.map +1 -0
- package/dist/threads/sessions-page-model.d.ts +86 -0
- package/dist/threads/sessions-page-model.js +305 -0
- package/dist/threads/sessions-page-model.js.map +1 -0
- package/dist/threads/sessions-page-storage.cjs +93 -0
- package/dist/threads/sessions-page-storage.cjs.map +1 -0
- package/dist/threads/sessions-page-storage.d.ts +23 -0
- package/dist/threads/sessions-page-storage.js +93 -0
- package/dist/threads/sessions-page-storage.js.map +1 -0
- package/dist/threads/sessions-query.cjs +235 -0
- package/dist/threads/sessions-query.cjs.map +1 -0
- package/dist/threads/sessions-query.d.ts +119 -0
- package/dist/threads/sessions-query.js +235 -0
- package/dist/threads/sessions-query.js.map +1 -0
- package/dist/threads/statewire-thread-list.cjs +133 -40
- package/dist/threads/statewire-thread-list.cjs.map +1 -1
- package/dist/threads/statewire-thread-list.d.ts +83 -2
- package/dist/threads/statewire-thread-list.js +134 -41
- package/dist/threads/statewire-thread-list.js.map +1 -1
- package/dist/threads/use-athena-sessions.cjs +198 -0
- package/dist/threads/use-athena-sessions.cjs.map +1 -0
- package/dist/threads/use-athena-sessions.d.ts +81 -0
- package/dist/threads/use-athena-sessions.js +198 -0
- package/dist/threads/use-athena-sessions.js.map +1 -0
- package/dist/threads/use-rest-conversation-history.cjs +1 -1
- package/dist/threads/use-rest-conversation-history.js +1 -1
- package/dist/threads/use-statewire-conversation-history.cjs +1 -1
- package/dist/threads/use-statewire-conversation-history.d.ts +3 -0
- package/dist/threads/use-statewire-conversation-history.js +1 -1
- package/dist/threads/use-thread-read-state.cjs +73 -0
- package/dist/threads/use-thread-read-state.cjs.map +1 -0
- package/dist/threads/use-thread-read-state.d.ts +51 -0
- package/dist/threads/use-thread-read-state.js +73 -0
- package/dist/threads/use-thread-read-state.js.map +1 -0
- package/dist/tiptap-markdown-table/src/markdown-table-serializer.cjs.map +1 -0
- package/dist/tiptap-markdown-table/src/markdown-table-serializer.js.map +1 -0
- package/dist/tools/auto-open-tools.cjs +2 -0
- package/dist/tools/auto-open-tools.cjs.map +1 -1
- package/dist/tools/auto-open-tools.js +2 -0
- package/dist/tools/auto-open-tools.js.map +1 -1
- package/dist/tools/file-tool-uis.cjs +18 -43
- package/dist/tools/file-tool-uis.cjs.map +1 -1
- package/dist/tools/file-tool-uis.d.ts +1 -2
- package/dist/tools/file-tool-uis.js +18 -42
- package/dist/tools/file-tool-uis.js.map +1 -1
- package/dist/tools/index.cjs +6 -2
- package/dist/tools/index.cjs.map +1 -1
- package/dist/tools/index.d.ts +1 -0
- package/dist/tools/index.js +6 -2
- package/dist/tools/index.js.map +1 -1
- package/dist/tools/misc-tool-uis.cjs +2 -2
- package/dist/tools/misc-tool-uis.js +2 -2
- package/dist/tools/primitives.cjs +1 -1
- package/dist/tools/primitives.js +1 -1
- package/dist/tools/read-asset-tool-ui.cjs +21 -70
- package/dist/tools/read-asset-tool-ui.cjs.map +1 -1
- package/dist/tools/read-asset-tool-ui.js +21 -70
- package/dist/tools/read-asset-tool-ui.js.map +1 -1
- package/dist/tools/step-text.cjs +21 -0
- package/dist/tools/step-text.cjs.map +1 -0
- package/dist/tools/step-text.d.ts +10 -0
- package/dist/tools/step-text.js +21 -0
- package/dist/tools/step-text.js.map +1 -0
- package/dist/tools/tool-fallback.cjs +24 -5
- package/dist/tools/tool-fallback.cjs.map +1 -1
- package/dist/tools/tool-fallback.d.ts +3 -1
- package/dist/tools/tool-fallback.js +24 -5
- package/dist/tools/tool-fallback.js.map +1 -1
- package/dist/tools/tool-summary.cjs +661 -0
- package/dist/tools/tool-summary.cjs.map +1 -0
- package/dist/tools/tool-summary.d.ts +99 -0
- package/dist/tools/tool-summary.js +661 -0
- package/dist/tools/tool-summary.js.map +1 -0
- package/dist/tools/tool-uis.cjs +39 -97
- package/dist/tools/tool-uis.cjs.map +1 -1
- package/dist/tools/tool-uis.js +39 -97
- package/dist/tools/tool-uis.js.map +1 -1
- package/dist/tools/voice-update-tool-ui.cjs +1 -1
- package/dist/tools/voice-update-tool-ui.js +1 -1
- package/dist/tools/write-todos-tool-ui.cjs +3 -2
- package/dist/tools/write-todos-tool-ui.cjs.map +1 -1
- package/dist/tools/write-todos-tool-ui.d.ts +5 -0
- package/dist/tools/write-todos-tool-ui.js +5 -4
- package/dist/tools/write-todos-tool-ui.js.map +1 -1
- package/dist/ui/popover.cjs +6 -6
- package/dist/ui/popover.cjs.map +1 -1
- package/dist/ui/popover.js +6 -6
- package/dist/ui/popover.js.map +1 -1
- package/dist/ui/tooltip.cjs +16 -2
- package/dist/ui/tooltip.cjs.map +1 -1
- package/dist/ui/tooltip.d.ts +1 -1
- package/dist/ui/tooltip.js +16 -2
- package/dist/ui/tooltip.js.map +1 -1
- package/dist/version.cjs +1 -1
- package/dist/version.js +1 -1
- package/dist/voice/use-athena-voice-session.cjs.map +1 -1
- package/dist/voice/use-athena-voice-session.d.ts +3 -3
- package/dist/voice/use-athena-voice-session.js.map +1 -1
- package/dist/workbench/SessionWorkbench.cjs +378 -0
- package/dist/workbench/SessionWorkbench.cjs.map +1 -0
- package/dist/workbench/SessionWorkbench.d.ts +30 -0
- package/dist/workbench/SessionWorkbench.js +378 -0
- package/dist/workbench/SessionWorkbench.js.map +1 -0
- package/dist/workbench/session-workbench-context.cjs +26 -0
- package/dist/workbench/session-workbench-context.cjs.map +1 -0
- package/dist/workbench/session-workbench-context.d.ts +55 -0
- package/dist/workbench/session-workbench-context.js +26 -0
- package/dist/workbench/session-workbench-context.js.map +1 -0
- package/dist/workbench/session-workbench-model.cjs +288 -0
- package/dist/workbench/session-workbench-model.cjs.map +1 -0
- package/dist/workbench/session-workbench-model.d.ts +168 -0
- package/dist/workbench/session-workbench-model.js +288 -0
- package/dist/workbench/session-workbench-model.js.map +1 -0
- package/dist/workbench/session-workbench-panes.cjs +580 -0
- package/dist/workbench/session-workbench-panes.cjs.map +1 -0
- package/dist/workbench/session-workbench-panes.d.ts +16 -0
- package/dist/workbench/session-workbench-panes.js +580 -0
- package/dist/workbench/session-workbench-panes.js.map +1 -0
- package/dist/workbench/session-workspace-api.cjs +157 -0
- package/dist/workbench/session-workspace-api.cjs.map +1 -0
- package/dist/workbench/session-workspace-api.d.ts +70 -0
- package/dist/workbench/session-workspace-api.js +157 -0
- package/dist/workbench/session-workspace-api.js.map +1 -0
- package/dist/workbench/use-session-workspace.cjs +100 -0
- package/dist/workbench/use-session-workspace.cjs.map +1 -0
- package/dist/workbench/use-session-workspace.d.ts +45 -0
- package/dist/workbench/use-session-workspace.js +100 -0
- package/dist/workbench/use-session-workspace.js.map +1 -0
- package/dist/workbench/workbench-layout-context.cjs +10 -0
- package/dist/workbench/workbench-layout-context.cjs.map +1 -0
- package/dist/workbench/workbench-layout-context.d.ts +17 -0
- package/dist/workbench/workbench-layout-context.js +10 -0
- package/dist/workbench/workbench-layout-context.js.map +1 -0
- package/package.json +20 -9
- package/dist/node_modules/@assistant-ui/react-langchain/dist/converter.cjs +0 -77
- package/dist/node_modules/@assistant-ui/react-langchain/dist/converter.cjs.map +0 -1
- package/dist/node_modules/@assistant-ui/react-langchain/dist/converter.js +0 -77
- package/dist/node_modules/@assistant-ui/react-langchain/dist/converter.js.map +0 -1
- package/dist/node_modules/@assistant-ui/react-langgraph/dist/convertLangChainMessages.cjs +0 -181
- package/dist/node_modules/@assistant-ui/react-langgraph/dist/convertLangChainMessages.cjs.map +0 -1
- package/dist/node_modules/@assistant-ui/react-langgraph/dist/convertLangChainMessages.js +0 -181
- package/dist/node_modules/@assistant-ui/react-langgraph/dist/convertLangChainMessages.js.map +0 -1
- package/dist/packages/agent-runtime/src/asset-attachment.cjs.map +0 -1
- package/dist/packages/agent-runtime/src/asset-attachment.js.map +0 -1
- package/dist/packages/agent-runtime/src/auth-denial.cjs.map +0 -1
- package/dist/packages/agent-runtime/src/auth-denial.js.map +0 -1
- package/dist/packages/agent-runtime/src/client-tool-bridge.cjs.map +0 -1
- package/dist/packages/agent-runtime/src/client-tool-bridge.js.map +0 -1
- package/dist/packages/agent-runtime/src/client-tools.cjs.map +0 -1
- package/dist/packages/agent-runtime/src/client-tools.js.map +0 -1
- package/dist/packages/agent-runtime/src/conversation-index.cjs.map +0 -1
- package/dist/packages/agent-runtime/src/conversation-index.js.map +0 -1
- package/dist/packages/agent-runtime/src/conversation-list.cjs.map +0 -1
- package/dist/packages/agent-runtime/src/conversation-list.js.map +0 -1
- package/dist/packages/agent-runtime/src/deep-agent-transport-recipe.cjs.map +0 -1
- package/dist/packages/agent-runtime/src/deep-agent-transport-recipe.js.map +0 -1
- package/dist/packages/agent-runtime/src/edit-command.cjs.map +0 -1
- package/dist/packages/agent-runtime/src/edit-command.js.map +0 -1
- package/dist/packages/agent-runtime/src/errors.cjs.map +0 -1
- package/dist/packages/agent-runtime/src/errors.js.map +0 -1
- package/dist/packages/agent-runtime/src/generated/runconfig-contract.cjs.map +0 -1
- package/dist/packages/agent-runtime/src/generated/runconfig-contract.js.map +0 -1
- package/dist/packages/agent-runtime/src/github-wake-event.cjs.map +0 -1
- package/dist/packages/agent-runtime/src/github-wake-event.js.map +0 -1
- package/dist/packages/agent-runtime/src/interrupts.cjs.map +0 -1
- package/dist/packages/agent-runtime/src/interrupts.js.map +0 -1
- package/dist/packages/agent-runtime/src/message-author.cjs.map +0 -1
- package/dist/packages/agent-runtime/src/message-author.js.map +0 -1
- package/dist/packages/agent-runtime/src/message-window.cjs.map +0 -1
- package/dist/packages/agent-runtime/src/message-window.js.map +0 -1
- package/dist/packages/agent-runtime/src/messages.cjs.map +0 -1
- package/dist/packages/agent-runtime/src/messages.js.map +0 -1
- package/dist/packages/agent-runtime/src/model-context.cjs.map +0 -1
- package/dist/packages/agent-runtime/src/model-context.js.map +0 -1
- package/dist/packages/agent-runtime/src/optimistic-content.cjs.map +0 -1
- package/dist/packages/agent-runtime/src/optimistic-content.js.map +0 -1
- package/dist/packages/agent-runtime/src/protocol.cjs.map +0 -1
- package/dist/packages/agent-runtime/src/protocol.js.map +0 -1
- package/dist/packages/agent-runtime/src/queue.cjs.map +0 -1
- package/dist/packages/agent-runtime/src/queue.js.map +0 -1
- package/dist/packages/agent-runtime/src/quota-safe-local-storage-session.cjs.map +0 -1
- package/dist/packages/agent-runtime/src/quota-safe-local-storage-session.js.map +0 -1
- package/dist/packages/agent-runtime/src/runtime-messages.cjs.map +0 -1
- package/dist/packages/agent-runtime/src/runtime-messages.js.map +0 -1
- package/dist/packages/agent-runtime/src/screen-point.cjs.map +0 -1
- package/dist/packages/agent-runtime/src/screen-point.js.map +0 -1
- package/dist/packages/agent-runtime/src/send-recovery.cjs.map +0 -1
- package/dist/packages/agent-runtime/src/send-recovery.js.map +0 -1
- package/dist/packages/agent-runtime/src/statewire-attach-observer.cjs.map +0 -1
- package/dist/packages/agent-runtime/src/statewire-attach-observer.js.map +0 -1
- package/dist/packages/agent-runtime/src/statewire-state.cjs.map +0 -1
- package/dist/packages/agent-runtime/src/statewire-state.js.map +0 -1
- package/dist/packages/agent-runtime/src/statewire-suspended.cjs.map +0 -1
- package/dist/packages/agent-runtime/src/statewire-suspended.js.map +0 -1
- package/dist/packages/agent-runtime/src/statewire-transport.cjs +0 -11
- package/dist/packages/agent-runtime/src/statewire-transport.cjs.map +0 -1
- package/dist/packages/agent-runtime/src/statewire-transport.js +0 -11
- package/dist/packages/agent-runtime/src/statewire-transport.js.map +0 -1
- package/dist/packages/agent-runtime/src/streaming-markdown.cjs.map +0 -1
- package/dist/packages/agent-runtime/src/streaming-markdown.js.map +0 -1
- package/dist/packages/agent-runtime/src/thread-extras.cjs.map +0 -1
- package/dist/packages/agent-runtime/src/thread-extras.js.map +0 -1
- package/dist/packages/agent-runtime/src/thread-snapshot-cache.cjs.map +0 -1
- package/dist/packages/agent-runtime/src/thread-snapshot-cache.js.map +0 -1
- package/dist/packages/agent-runtime/src/thread-status.cjs.map +0 -1
- package/dist/packages/agent-runtime/src/thread-status.js.map +0 -1
- package/dist/packages/agent-runtime/src/tool-metadata.cjs.map +0 -1
- package/dist/packages/agent-runtime/src/tool-metadata.js.map +0 -1
- package/dist/packages/agent-runtime/src/tool-outputs.cjs.map +0 -1
- package/dist/packages/agent-runtime/src/tool-outputs.js.map +0 -1
- package/dist/packages/agent-runtime/src/tool-result.cjs.map +0 -1
- package/dist/packages/agent-runtime/src/tool-result.js.map +0 -1
- package/dist/packages/agent-runtime/src/use-conversation-list.cjs.map +0 -1
- package/dist/packages/agent-runtime/src/use-conversation-list.js.map +0 -1
- package/dist/packages/agent-runtime/src/use-deep-agent-config.cjs.map +0 -1
- package/dist/packages/agent-runtime/src/use-deep-agent-config.js.map +0 -1
- package/dist/packages/agent-runtime/src/use-deep-agent-edit-submit.cjs.map +0 -1
- package/dist/packages/agent-runtime/src/use-deep-agent-edit-submit.js.map +0 -1
- package/dist/packages/agent-runtime/src/use-deep-agent-runtime.cjs.map +0 -1
- package/dist/packages/agent-runtime/src/use-deep-agent-runtime.js.map +0 -1
- package/dist/packages/agent-runtime/src/use-deep-agent-thread.cjs.map +0 -1
- package/dist/packages/agent-runtime/src/use-deep-agent-thread.js.map +0 -1
- package/dist/packages/agent-runtime/src/use-deep-agent-window-sync.cjs.map +0 -1
- package/dist/packages/agent-runtime/src/use-deep-agent-window-sync.js.map +0 -1
- package/dist/packages/agent-runtime/src/voice-presentation.cjs.map +0 -1
- package/dist/packages/agent-runtime/src/voice-presentation.js.map +0 -1
- package/dist/packages/agent-runtime/src/voice-turn-grouping.cjs.map +0 -1
- package/dist/packages/agent-runtime/src/voice-turn-grouping.js.map +0 -1
- package/dist/packages/tiptap-markdown-table/src/markdown-table-serializer.cjs.map +0 -1
- package/dist/packages/tiptap-markdown-table/src/markdown-table-serializer.js.map +0 -1
- /package/dist/{packages/agent-runtime → agent-runtime}/src/asset-attachment.cjs +0 -0
- /package/dist/{packages/agent-runtime → agent-runtime}/src/asset-attachment.js +0 -0
- /package/dist/{packages/agent-runtime → agent-runtime}/src/auth-denial.cjs +0 -0
- /package/dist/{packages/agent-runtime → agent-runtime}/src/auth-denial.js +0 -0
- /package/dist/{packages/agent-runtime → agent-runtime}/src/client-tool-bridge.cjs +0 -0
- /package/dist/{packages/agent-runtime → agent-runtime}/src/client-tool-bridge.js +0 -0
- /package/dist/{packages/agent-runtime → agent-runtime}/src/client-tools.cjs +0 -0
- /package/dist/{packages/agent-runtime → agent-runtime}/src/client-tools.js +0 -0
- /package/dist/{packages/agent-runtime → agent-runtime}/src/conversation-index.cjs +0 -0
- /package/dist/{packages/agent-runtime → agent-runtime}/src/conversation-index.js +0 -0
- /package/dist/{packages/agent-runtime → agent-runtime}/src/edit-command.cjs +0 -0
- /package/dist/{packages/agent-runtime → agent-runtime}/src/edit-command.js +0 -0
- /package/dist/{packages/agent-runtime → agent-runtime}/src/github-wake-event.cjs +0 -0
- /package/dist/{packages/agent-runtime → agent-runtime}/src/github-wake-event.js +0 -0
- /package/dist/{packages/agent-runtime → agent-runtime}/src/message-author.cjs +0 -0
- /package/dist/{packages/agent-runtime → agent-runtime}/src/message-author.js +0 -0
- /package/dist/{packages/agent-runtime → agent-runtime}/src/message-window.cjs +0 -0
- /package/dist/{packages/agent-runtime → agent-runtime}/src/message-window.js +0 -0
- /package/dist/{packages/agent-runtime → agent-runtime}/src/model-context.cjs +0 -0
- /package/dist/{packages/agent-runtime → agent-runtime}/src/model-context.js +0 -0
- /package/dist/{packages/agent-runtime → agent-runtime}/src/optimistic-content.cjs +0 -0
- /package/dist/{packages/agent-runtime → agent-runtime}/src/optimistic-content.js +0 -0
- /package/dist/{packages/agent-runtime → agent-runtime}/src/protocol.cjs +0 -0
- /package/dist/{packages/agent-runtime → agent-runtime}/src/protocol.js +0 -0
- /package/dist/{packages/agent-runtime → agent-runtime}/src/runtime-messages.cjs +0 -0
- /package/dist/{packages/agent-runtime → agent-runtime}/src/runtime-messages.js +0 -0
- /package/dist/{packages/agent-runtime → agent-runtime}/src/screen-point.cjs +0 -0
- /package/dist/{packages/agent-runtime → agent-runtime}/src/screen-point.js +0 -0
- /package/dist/{packages/agent-runtime → agent-runtime}/src/send-recovery.cjs +0 -0
- /package/dist/{packages/agent-runtime → agent-runtime}/src/send-recovery.js +0 -0
- /package/dist/{packages/agent-runtime → agent-runtime}/src/statewire-attach-observer.cjs +0 -0
- /package/dist/{packages/agent-runtime → agent-runtime}/src/statewire-attach-observer.js +0 -0
- /package/dist/{packages/agent-runtime → agent-runtime}/src/streaming-markdown.cjs +0 -0
- /package/dist/{packages/agent-runtime → agent-runtime}/src/streaming-markdown.js +0 -0
- /package/dist/{packages/agent-runtime → agent-runtime}/src/thread-extras.cjs +0 -0
- /package/dist/{packages/agent-runtime → agent-runtime}/src/thread-extras.js +0 -0
- /package/dist/{packages/agent-runtime → agent-runtime}/src/thread-snapshot-cache.cjs +0 -0
- /package/dist/{packages/agent-runtime → agent-runtime}/src/thread-snapshot-cache.js +0 -0
- /package/dist/{packages/agent-runtime → agent-runtime}/src/thread-status.cjs +0 -0
- /package/dist/{packages/agent-runtime → agent-runtime}/src/thread-status.js +0 -0
- /package/dist/{packages/agent-runtime → agent-runtime}/src/tool-outputs.cjs +0 -0
- /package/dist/{packages/agent-runtime → agent-runtime}/src/tool-outputs.js +0 -0
- /package/dist/{packages/agent-runtime → agent-runtime}/src/tool-result.cjs +0 -0
- /package/dist/{packages/agent-runtime → agent-runtime}/src/tool-result.js +0 -0
- /package/dist/{packages/agent-runtime → agent-runtime}/src/use-deep-agent-config.cjs +0 -0
- /package/dist/{packages/agent-runtime → agent-runtime}/src/use-deep-agent-config.js +0 -0
- /package/dist/{packages/agent-runtime → agent-runtime}/src/use-deep-agent-runtime.cjs +0 -0
- /package/dist/{packages/agent-runtime → agent-runtime}/src/use-deep-agent-runtime.js +0 -0
- /package/dist/{packages/agent-runtime → agent-runtime}/src/use-deep-agent-window-sync.cjs +0 -0
- /package/dist/{packages/agent-runtime → agent-runtime}/src/use-deep-agent-window-sync.js +0 -0
- /package/dist/{packages/agent-runtime → agent-runtime}/src/voice-turn-grouping.cjs +0 -0
- /package/dist/{packages/agent-runtime → agent-runtime}/src/voice-turn-grouping.js +0 -0
- /package/dist/{packages/react → react}/package.json.cjs.map +0 -0
- /package/dist/{packages/react → react}/package.json.js.map +0 -0
- /package/dist/{packages/tiptap-markdown-table → tiptap-markdown-table}/src/markdown-table-serializer.cjs +0 -0
- /package/dist/{packages/tiptap-markdown-table → tiptap-markdown-table}/src/markdown-table-serializer.js +0 -0
|
@@ -6,6 +6,12 @@ export type AthenaAssetCitationBehavior = "browser" | "host";
|
|
|
6
6
|
export type AthenaAssetCitationAction = "open-in-spaces";
|
|
7
7
|
export interface AthenaAssetCitationReference {
|
|
8
8
|
id: string;
|
|
9
|
+
/**
|
|
10
|
+
* Where in the asset the citation points. Either the anchor's raw query string as Athena links,
|
|
11
|
+
* citations and search results carry it (`anchor=slide&slide_index=3`, `anchor=time&time=0:42`,
|
|
12
|
+
* `asset_x?anchor=pm_node&node_id=…`), which an embed receives as written whatever kind of
|
|
13
|
+
* place it names, or a typed page or sheet anchor (`{ type: 'page', page: 34 }`).
|
|
14
|
+
*/
|
|
9
15
|
anchor?: unknown;
|
|
10
16
|
meta?: Record<string, unknown>;
|
|
11
17
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"asset-embed-messages.js","sources":["../../src/assets/asset-embed-messages.ts"],"sourcesContent":["export const ATHENA_ASSET_EMBED_READY_MESSAGE = \"athena:asset-embed-ready\" as const;\nexport const ATHENA_ASSET_EMBED_CONFIG_MESSAGE = \"athena:asset-embed-config\" as const;\nexport const ATHENA_ASSET_CITATION_CLICK_MESSAGE = \"athena:asset-citation-click\" as const;\nexport const ATHENA_ASSET_CITATION_ACTION_MESSAGE = \"athena:asset-citation-action\" as const;\n\nexport type AthenaAssetCitationBehavior = \"browser\" | \"host\";\nexport type AthenaAssetCitationAction = \"open-in-spaces\";\n\nexport interface AthenaAssetCitationReference {\n id: string;\n anchor?: unknown;\n meta?: Record<string, unknown>;\n}\n\nexport interface AthenaAssetCitationClickEvent {\n type: typeof ATHENA_ASSET_CITATION_CLICK_MESSAGE;\n version: 1;\n sourceAssetId?: string;\n reference: AthenaAssetCitationReference;\n}\n\nexport interface AthenaAssetCitationActionEvent {\n type: typeof ATHENA_ASSET_CITATION_ACTION_MESSAGE;\n version: 1;\n action: AthenaAssetCitationAction;\n reference: AthenaAssetCitationReference;\n}\n\nexport interface AthenaAssetEmbedReadyEvent {\n type: typeof ATHENA_ASSET_EMBED_READY_MESSAGE;\n version: 1;\n}\n\nexport interface AthenaAssetEmbedConfigEvent {\n type: typeof ATHENA_ASSET_EMBED_CONFIG_MESSAGE;\n version: 1;\n token?: string;\n citationBehavior: AthenaAssetCitationBehavior;\n citationActionBehavior?: AthenaAssetCitationBehavior;\n}\n\nexport function resolveAthenaAssetCitationBehavior({\n citationBehavior,\n hasCitationClickHandler,\n}: {\n citationBehavior?: AthenaAssetCitationBehavior;\n hasCitationClickHandler: boolean;\n}): AthenaAssetCitationBehavior {\n if (citationBehavior === \"host\" && !hasCitationClickHandler) return \"browser\";\n return citationBehavior ?? (hasCitationClickHandler ? \"host\" : \"browser\");\n}\n\nexport function resolveAthenaAssetCitationActionBehavior({\n citationActionBehavior,\n hasCitationActionHandler,\n}: {\n citationActionBehavior?: AthenaAssetCitationBehavior;\n hasCitationActionHandler: boolean;\n}): AthenaAssetCitationBehavior {\n if (citationActionBehavior === \"host\" && !hasCitationActionHandler) return \"browser\";\n return citationActionBehavior ?? (hasCitationActionHandler ? \"host\" : \"browser\");\n}\n\nexport function isAthenaAssetEmbedReadyEvent(value: unknown): value is AthenaAssetEmbedReadyEvent {\n return (\n typeof value === \"object\" &&\n value !== null &&\n \"type\" in value &&\n value.type === ATHENA_ASSET_EMBED_READY_MESSAGE &&\n \"version\" in value &&\n value.version === 1\n );\n}\n\nexport function isAthenaAssetCitationClickEvent(value: unknown): value is AthenaAssetCitationClickEvent {\n return (\n typeof value === \"object\" &&\n value !== null &&\n \"type\" in value &&\n value.type === ATHENA_ASSET_CITATION_CLICK_MESSAGE &&\n \"version\" in value &&\n value.version === 1 &&\n \"reference\" in value &&\n typeof value.reference === \"object\" &&\n value.reference !== null &&\n \"id\" in value.reference &&\n typeof value.reference.id === \"string\"\n );\n}\n\nexport function isAthenaAssetCitationActionEvent(value: unknown): value is AthenaAssetCitationActionEvent {\n return (\n typeof value === \"object\" &&\n value !== null &&\n \"type\" in value &&\n value.type === ATHENA_ASSET_CITATION_ACTION_MESSAGE &&\n \"version\" in value &&\n value.version === 1 &&\n \"action\" in value &&\n value.action === \"open-in-spaces\" &&\n \"reference\" in value &&\n typeof value.reference === \"object\" &&\n value.reference !== null &&\n \"id\" in value.reference &&\n typeof value.reference.id === \"string\"\n );\n}\n"],"names":[],"mappings":"AAAO,MAAM,mCAAmC;AACzC,MAAM,oCAAoC;AAC1C,MAAM,sCAAsC;AAC5C,MAAM,uCAAuC;
|
|
1
|
+
{"version":3,"file":"asset-embed-messages.js","sources":["../../src/assets/asset-embed-messages.ts"],"sourcesContent":["export const ATHENA_ASSET_EMBED_READY_MESSAGE = \"athena:asset-embed-ready\" as const;\nexport const ATHENA_ASSET_EMBED_CONFIG_MESSAGE = \"athena:asset-embed-config\" as const;\nexport const ATHENA_ASSET_CITATION_CLICK_MESSAGE = \"athena:asset-citation-click\" as const;\nexport const ATHENA_ASSET_CITATION_ACTION_MESSAGE = \"athena:asset-citation-action\" as const;\n\nexport type AthenaAssetCitationBehavior = \"browser\" | \"host\";\nexport type AthenaAssetCitationAction = \"open-in-spaces\";\n\nexport interface AthenaAssetCitationReference {\n id: string;\n /**\n * Where in the asset the citation points. Either the anchor's raw query string as Athena links,\n * citations and search results carry it (`anchor=slide&slide_index=3`, `anchor=time&time=0:42`,\n * `asset_x?anchor=pm_node&node_id=…`), which an embed receives as written whatever kind of\n * place it names, or a typed page or sheet anchor (`{ type: 'page', page: 34 }`).\n */\n anchor?: unknown;\n meta?: Record<string, unknown>;\n}\n\nexport interface AthenaAssetCitationClickEvent {\n type: typeof ATHENA_ASSET_CITATION_CLICK_MESSAGE;\n version: 1;\n sourceAssetId?: string;\n reference: AthenaAssetCitationReference;\n}\n\nexport interface AthenaAssetCitationActionEvent {\n type: typeof ATHENA_ASSET_CITATION_ACTION_MESSAGE;\n version: 1;\n action: AthenaAssetCitationAction;\n reference: AthenaAssetCitationReference;\n}\n\nexport interface AthenaAssetEmbedReadyEvent {\n type: typeof ATHENA_ASSET_EMBED_READY_MESSAGE;\n version: 1;\n}\n\nexport interface AthenaAssetEmbedConfigEvent {\n type: typeof ATHENA_ASSET_EMBED_CONFIG_MESSAGE;\n version: 1;\n token?: string;\n citationBehavior: AthenaAssetCitationBehavior;\n citationActionBehavior?: AthenaAssetCitationBehavior;\n}\n\nexport function resolveAthenaAssetCitationBehavior({\n citationBehavior,\n hasCitationClickHandler,\n}: {\n citationBehavior?: AthenaAssetCitationBehavior;\n hasCitationClickHandler: boolean;\n}): AthenaAssetCitationBehavior {\n if (citationBehavior === \"host\" && !hasCitationClickHandler) return \"browser\";\n return citationBehavior ?? (hasCitationClickHandler ? \"host\" : \"browser\");\n}\n\nexport function resolveAthenaAssetCitationActionBehavior({\n citationActionBehavior,\n hasCitationActionHandler,\n}: {\n citationActionBehavior?: AthenaAssetCitationBehavior;\n hasCitationActionHandler: boolean;\n}): AthenaAssetCitationBehavior {\n if (citationActionBehavior === \"host\" && !hasCitationActionHandler) return \"browser\";\n return citationActionBehavior ?? (hasCitationActionHandler ? \"host\" : \"browser\");\n}\n\nexport function isAthenaAssetEmbedReadyEvent(value: unknown): value is AthenaAssetEmbedReadyEvent {\n return (\n typeof value === \"object\" &&\n value !== null &&\n \"type\" in value &&\n value.type === ATHENA_ASSET_EMBED_READY_MESSAGE &&\n \"version\" in value &&\n value.version === 1\n );\n}\n\nexport function isAthenaAssetCitationClickEvent(value: unknown): value is AthenaAssetCitationClickEvent {\n return (\n typeof value === \"object\" &&\n value !== null &&\n \"type\" in value &&\n value.type === ATHENA_ASSET_CITATION_CLICK_MESSAGE &&\n \"version\" in value &&\n value.version === 1 &&\n \"reference\" in value &&\n typeof value.reference === \"object\" &&\n value.reference !== null &&\n \"id\" in value.reference &&\n typeof value.reference.id === \"string\"\n );\n}\n\nexport function isAthenaAssetCitationActionEvent(value: unknown): value is AthenaAssetCitationActionEvent {\n return (\n typeof value === \"object\" &&\n value !== null &&\n \"type\" in value &&\n value.type === ATHENA_ASSET_CITATION_ACTION_MESSAGE &&\n \"version\" in value &&\n value.version === 1 &&\n \"action\" in value &&\n value.action === \"open-in-spaces\" &&\n \"reference\" in value &&\n typeof value.reference === \"object\" &&\n value.reference !== null &&\n \"id\" in value.reference &&\n typeof value.reference.id === \"string\"\n );\n}\n"],"names":[],"mappings":"AAAO,MAAM,mCAAmC;AACzC,MAAM,oCAAoC;AAC1C,MAAM,sCAAsC;AAC5C,MAAM,uCAAuC;AA4C7C,SAAS,mCAAmC;AAAA,EACjD;AAAA,EACA;AACF,GAGgC;AAC9B,MAAI,qBAAqB,UAAU,CAAC,wBAAyB,QAAO;AACpE,SAAO,qBAAqB,0BAA0B,SAAS;AACjE;AAEO,SAAS,yCAAyC;AAAA,EACvD;AAAA,EACA;AACF,GAGgC;AAC9B,MAAI,2BAA2B,UAAU,CAAC,yBAA0B,QAAO;AAC3E,SAAO,2BAA2B,2BAA2B,SAAS;AACxE;AAEO,SAAS,6BAA6B,OAAqD;AAChG,SACE,OAAO,UAAU,YACjB,UAAU,QACV,UAAU,SACV,MAAM,SAAS,oCACf,aAAa,SACb,MAAM,YAAY;AAEtB;AAEO,SAAS,gCAAgC,OAAwD;AACtG,SACE,OAAO,UAAU,YACjB,UAAU,QACV,UAAU,SACV,MAAM,SAAS,uCACf,aAAa,SACb,MAAM,YAAY,KAClB,eAAe,SACf,OAAO,MAAM,cAAc,YAC3B,MAAM,cAAc,QACpB,QAAQ,MAAM,aACd,OAAO,MAAM,UAAU,OAAO;AAElC;AAEO,SAAS,iCAAiC,OAAyD;AACxG,SACE,OAAO,UAAU,YACjB,UAAU,QACV,UAAU,SACV,MAAM,SAAS,wCACf,aAAa,SACb,MAAM,YAAY,KAClB,YAAY,SACZ,MAAM,WAAW,oBACjB,eAAe,SACf,OAAO,MAAM,cAAc,YAC3B,MAAM,cAAc,QACpB,QAAQ,MAAM,aACd,OAAO,MAAM,UAAU,OAAO;AAElC;"}
|
|
@@ -2,6 +2,20 @@
|
|
|
2
2
|
Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
|
|
3
3
|
const zustand = require("zustand");
|
|
4
4
|
const middleware = require("zustand/middleware");
|
|
5
|
+
function assetOpenRequest({
|
|
6
|
+
assetId,
|
|
7
|
+
meta
|
|
8
|
+
}) {
|
|
9
|
+
return {
|
|
10
|
+
assetId,
|
|
11
|
+
origin: (meta == null ? void 0 : meta.origin) ?? "user",
|
|
12
|
+
...(meta == null ? void 0 : meta.name) !== void 0 ? { name: meta.name } : {},
|
|
13
|
+
...(meta == null ? void 0 : meta.type) !== void 0 ? { type: meta.type } : {},
|
|
14
|
+
...(meta == null ? void 0 : meta.slideNumber) !== void 0 ? { slideNumber: meta.slideNumber } : {},
|
|
15
|
+
...(meta == null ? void 0 : meta.reference) !== void 0 ? { reference: meta.reference } : {},
|
|
16
|
+
...(meta == null ? void 0 : meta.href) !== void 0 ? { href: meta.href } : {}
|
|
17
|
+
};
|
|
18
|
+
}
|
|
5
19
|
const useAssetPanelStore = zustand.create()(
|
|
6
20
|
middleware.persist(
|
|
7
21
|
(set, get) => ({
|
|
@@ -13,43 +27,65 @@ const useAssetPanelStore = zustand.create()(
|
|
|
13
27
|
currentThreadId: null,
|
|
14
28
|
threadStates: {},
|
|
15
29
|
assetPanelHostCount: 0,
|
|
30
|
+
assetOpeners: [],
|
|
16
31
|
autoOpenGeneration: 0,
|
|
17
32
|
autoOpenedAssets: /* @__PURE__ */ new Map(),
|
|
33
|
+
openRequestSeq: 0,
|
|
18
34
|
registerAssetPanelHost: () => set((state) => ({ assetPanelHostCount: state.assetPanelHostCount + 1 })),
|
|
19
35
|
unregisterAssetPanelHost: () => set((state) => ({ assetPanelHostCount: Math.max(0, state.assetPanelHostCount - 1) })),
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
const
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
tabs
|
|
48
|
-
return { isOpen: true, tabs, activeTabId: assetId };
|
|
36
|
+
registerAssetOpener: (opener) => {
|
|
37
|
+
set((state) => ({ assetOpeners: [...state.assetOpeners, opener] }));
|
|
38
|
+
return () => set((state) => {
|
|
39
|
+
const index = state.assetOpeners.lastIndexOf(opener);
|
|
40
|
+
if (index === -1) return state;
|
|
41
|
+
const assetOpeners = state.assetOpeners.slice();
|
|
42
|
+
assetOpeners.splice(index, 1);
|
|
43
|
+
return { assetOpeners };
|
|
44
|
+
});
|
|
45
|
+
},
|
|
46
|
+
openAsset: (assetId, meta) => {
|
|
47
|
+
const opener = get().assetOpeners.at(-1);
|
|
48
|
+
if (opener && opener(assetOpenRequest({ assetId, meta })) !== false) return true;
|
|
49
|
+
set((s) => {
|
|
50
|
+
const existing = s.tabs.find((t) => t.id === assetId);
|
|
51
|
+
if (existing) {
|
|
52
|
+
const tabs = meta ? s.tabs.map(
|
|
53
|
+
(t) => t.id === assetId ? {
|
|
54
|
+
...t,
|
|
55
|
+
name: meta.name ?? t.name,
|
|
56
|
+
type: meta.type ?? t.type,
|
|
57
|
+
slideNumber: "slideNumber" in meta ? meta.slideNumber : t.slideNumber,
|
|
58
|
+
// A repeat citation click re-targets the open tab: the new
|
|
59
|
+
// reference reaches the iframe (src change -> navigation).
|
|
60
|
+
reference: "reference" in meta ? meta.reference : t.reference
|
|
61
|
+
} : t
|
|
62
|
+
) : s.tabs;
|
|
63
|
+
return { isOpen: true, tabs, activeTabId: assetId, openRequestSeq: s.openRequestSeq + 1 };
|
|
49
64
|
}
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
65
|
+
const newTab = {
|
|
66
|
+
id: assetId,
|
|
67
|
+
name: (meta == null ? void 0 : meta.name) ?? null,
|
|
68
|
+
type: (meta == null ? void 0 : meta.type) ?? "unknown",
|
|
69
|
+
slideNumber: meta == null ? void 0 : meta.slideNumber,
|
|
70
|
+
reference: meta == null ? void 0 : meta.reference
|
|
71
|
+
};
|
|
72
|
+
if ((meta == null ? void 0 : meta.replaceActiveTab) && s.activeTabId) {
|
|
73
|
+
const activeIndex = s.tabs.findIndex((t) => t.id === s.activeTabId);
|
|
74
|
+
if (activeIndex >= 0) {
|
|
75
|
+
const tabs = s.tabs.slice();
|
|
76
|
+
tabs[activeIndex] = newTab;
|
|
77
|
+
return { isOpen: true, tabs, activeTabId: assetId, openRequestSeq: s.openRequestSeq + 1 };
|
|
78
|
+
}
|
|
79
|
+
}
|
|
80
|
+
return {
|
|
81
|
+
isOpen: true,
|
|
82
|
+
tabs: [...s.tabs, newTab],
|
|
83
|
+
activeTabId: assetId,
|
|
84
|
+
openRequestSeq: s.openRequestSeq + 1
|
|
85
|
+
};
|
|
86
|
+
});
|
|
87
|
+
return get().assetPanelHostCount > 0;
|
|
88
|
+
},
|
|
53
89
|
closeTab: (assetId) => set((s) => {
|
|
54
90
|
var _a;
|
|
55
91
|
const tabs = s.tabs.filter((t) => t.id !== assetId);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"asset-panel-store.cjs","sources":["../../src/assets/asset-panel-store.ts"],"sourcesContent":["import { create } from 'zustand';\nimport { createJSONStorage, persist } from 'zustand/middleware';\nimport type { AthenaAssetCitationReference } from './asset-embed-messages';\n\nexport type AssetType = 'presentation' | 'spreadsheet' | 'document' | 'notebook' | 'unknown';\n\nexport type ViewMode = 'tabs' | 'tiled';\n\nexport interface AssetTab {\n id: string;\n name: string | null;\n type: AssetType;\n slideNumber?: number;\n /** The citation target (anchor + excerpt) the tab was last opened at. */\n reference?: AthenaAssetCitationReference;\n}\n\ninterface ThreadAssetState {\n tabs: AssetTab[];\n activeTabId: string | null;\n isOpen: boolean;\n}\n\nexport interface AssetPanelState {\n isOpen: boolean;\n tabs: AssetTab[];\n activeTabId: string | null;\n viewMode: ViewMode;\n isFullscreen: boolean;\n /** The current thread ID. Asset panel state is scoped per thread. */\n currentThreadId: string | null;\n /** Per-thread asset panel state — tabs and active tab persist per thread. */\n threadStates: Record<string, ThreadAssetState>;\n /** Number of registered hosts that can reveal the asset panel. */\n assetPanelHostCount: number;\n /** Generation counter for auto-open tracking — incremented on reset */\n autoOpenGeneration: number;\n /** Tracks which assets have been auto-opened in the current generation */\n autoOpenedAssets: Map<string, number>;\n registerAssetPanelHost: () => void;\n unregisterAssetPanelHost: () => void;\n openAsset: (\n assetId: string,\n meta?: {\n name?: string;\n type?: AssetType;\n slideNumber?: number;\n /** Citation target (anchor + excerpt) the open should navigate to. */\n reference?: AthenaAssetCitationReference;\n /**\n * Swap the active tab for this asset instead of appending another tab.\n * Citation clicks use this: reading references shouldn't accumulate a\n * tab per cited document — the panel behaves as one preview surface.\n * A tab that already exists for the asset is re-targeted either way.\n */\n replaceActiveTab?: boolean;\n },\n ) => void;\n closeTab: (assetId: string) => void;\n setActiveTab: (assetId: string) => void;\n setViewMode: (mode: ViewMode) => void;\n closePanel: () => void;\n toggleFullscreen: () => void;\n /**\n * Switch the active thread. Saves the current thread's asset panel state\n * and restores the new thread's state (if any). Pass null to clear.\n */\n setCurrentThread: (threadId: string | null) => void;\n /** Reset auto-open tracking (increments generation so new assets can auto-open) */\n resetAutoOpen: () => void;\n /** Check if an asset should auto-open, and mark it as opened if so */\n markAutoOpened: (assetId: string) => boolean;\n}\n\nexport const useAssetPanelStore = create<AssetPanelState>()(\n persist(\n (set, get) => ({\n isOpen: false,\n tabs: [],\n activeTabId: null,\n viewMode: 'tabs',\n isFullscreen: false,\n currentThreadId: null,\n threadStates: {},\n assetPanelHostCount: 0,\n autoOpenGeneration: 0,\n autoOpenedAssets: new Map(),\n\n registerAssetPanelHost: () =>\n set((state) => ({ assetPanelHostCount: state.assetPanelHostCount + 1 })),\n\n unregisterAssetPanelHost: () =>\n set((state) => ({ assetPanelHostCount: Math.max(0, state.assetPanelHostCount - 1) })),\n\n openAsset: (assetId, meta) =>\n set((s) => {\n const existing = s.tabs.find((t) => t.id === assetId);\n if (existing) {\n const tabs = meta\n ? s.tabs.map((t) =>\n t.id === assetId\n ? {\n ...t,\n name: meta.name ?? t.name,\n type: meta.type ?? t.type,\n slideNumber:\n 'slideNumber' in meta ? meta.slideNumber : t.slideNumber,\n // A repeat citation click re-targets the open tab: the new\n // reference reaches the iframe (src change -> navigation).\n reference:\n 'reference' in meta ? meta.reference : t.reference,\n }\n : t,\n )\n : s.tabs;\n return { isOpen: true, tabs, activeTabId: assetId };\n }\n const newTab: AssetTab = {\n id: assetId,\n name: meta?.name ?? null,\n type: meta?.type ?? 'unknown',\n slideNumber: meta?.slideNumber,\n reference: meta?.reference,\n };\n if (meta?.replaceActiveTab && s.activeTabId) {\n const activeIndex = s.tabs.findIndex((t) => t.id === s.activeTabId);\n if (activeIndex >= 0) {\n const tabs = s.tabs.slice();\n tabs[activeIndex] = newTab;\n return { isOpen: true, tabs, activeTabId: assetId };\n }\n }\n return { isOpen: true, tabs: [...s.tabs, newTab], activeTabId: assetId };\n }),\n\n closeTab: (assetId) =>\n set((s) => {\n const tabs = s.tabs.filter((t) => t.id !== assetId);\n if (tabs.length === 0) {\n return { isOpen: false, tabs: [], activeTabId: null, isFullscreen: false };\n }\n const activeTabId =\n s.activeTabId === assetId\n ? tabs[Math.min(s.tabs.findIndex((t) => t.id === assetId), tabs.length - 1)]?.id ?? null\n : s.activeTabId;\n return { tabs, activeTabId };\n }),\n\n setActiveTab: (assetId) => set({ activeTabId: assetId, viewMode: 'tabs' }),\n\n setViewMode: (mode) => set({ viewMode: mode }),\n\n closePanel: () =>\n set({ isOpen: false, tabs: [], activeTabId: null, viewMode: 'tabs', isFullscreen: false }),\n\n toggleFullscreen: () => set((s) => ({ isFullscreen: !s.isFullscreen })),\n\n setCurrentThread: (threadId) =>\n set((s) => {\n // No-op if same thread\n if (s.currentThreadId === threadId) {\n return s;\n }\n\n // Save current thread's asset state to the map (if we had one)\n const threadStates = { ...s.threadStates };\n if (s.currentThreadId !== null) {\n threadStates[s.currentThreadId] = {\n tabs: s.tabs,\n activeTabId: s.activeTabId,\n isOpen: s.isOpen,\n };\n }\n\n // Restore the new thread's state (or start fresh)\n const restored = threadId !== null ? threadStates[threadId] : undefined;\n\n return {\n currentThreadId: threadId,\n threadStates,\n tabs: restored?.tabs ?? [],\n activeTabId: restored?.activeTabId ?? null,\n isOpen: restored?.isOpen ?? false,\n // Reset transient UI state on thread switch\n isFullscreen: false,\n viewMode: 'tabs',\n };\n }),\n\n resetAutoOpen: () =>\n set((s) => ({ autoOpenGeneration: s.autoOpenGeneration + 1 })),\n\n markAutoOpened: (assetId: string) => {\n const state = get();\n if (state.autoOpenedAssets.get(assetId) === state.autoOpenGeneration) {\n return false; // already auto-opened in this generation\n }\n state.autoOpenedAssets.set(assetId, state.autoOpenGeneration);\n return true;\n },\n }),\n {\n name: 'athena-react-asset-panel',\n partialize: ({\n isOpen,\n tabs,\n activeTabId,\n viewMode,\n isFullscreen,\n currentThreadId,\n threadStates,\n }) => ({\n isOpen,\n tabs,\n activeTabId,\n viewMode,\n isFullscreen,\n currentThreadId,\n threadStates,\n }),\n storage: createJSONStorage(() => sessionStorage),\n },\n ),\n);\n"],"names":["create","persist","createJSONStorage"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"asset-panel-store.cjs","sources":["../../src/assets/asset-panel-store.ts"],"sourcesContent":["import { create } from 'zustand';\nimport { createJSONStorage, persist } from 'zustand/middleware';\nimport type { AthenaAssetCitationReference } from './asset-embed-messages';\n\nexport type AssetType = 'presentation' | 'spreadsheet' | 'document' | 'notebook' | 'unknown';\n\nexport type ViewMode = 'tabs' | 'tiled';\n\nexport interface AssetTab {\n id: string;\n name: string | null;\n type: AssetType;\n slideNumber?: number;\n /** The citation target (anchor + excerpt) the tab was last opened at. */\n reference?: AthenaAssetCitationReference;\n}\n\ninterface ThreadAssetState {\n tabs: AssetTab[];\n activeTabId: string | null;\n isOpen: boolean;\n}\n\n/**\n * Who asked for an asset: the person (a tool card's Open, a citation or asset link in a message)\n * or the SDK's auto-open after a tool created or touched the asset.\n */\nexport type AssetOpenOrigin = 'user' | 'auto';\n\n/** A request to open an asset, as a host's own opener receives it (`AthenaProvider onOpenAsset`). */\nexport interface AssetOpenRequest {\n assetId: string;\n origin: AssetOpenOrigin;\n name?: string;\n type?: AssetType;\n slideNumber?: number;\n /** The citation target (anchor + excerpt) the open should navigate to. */\n reference?: AthenaAssetCitationReference;\n /** The link's own address, when a link asked: a host that opens it on the web keeps every parameter it carried. */\n href?: string;\n}\n\n/**\n * A host's own way to open an asset (a desktop app's tabs, a route of its own). Return `false` to\n * leave the request to the SDK's asset panel.\n */\nexport type AssetOpener = (request: AssetOpenRequest) => boolean | void;\n\nfunction assetOpenRequest({\n assetId,\n meta,\n}: {\n assetId: string;\n meta: Parameters<AssetPanelState['openAsset']>[1];\n}): AssetOpenRequest {\n return {\n assetId,\n origin: meta?.origin ?? 'user',\n ...(meta?.name !== undefined ? { name: meta.name } : {}),\n ...(meta?.type !== undefined ? { type: meta.type } : {}),\n ...(meta?.slideNumber !== undefined ? { slideNumber: meta.slideNumber } : {}),\n ...(meta?.reference !== undefined ? { reference: meta.reference } : {}),\n ...(meta?.href !== undefined ? { href: meta.href } : {}),\n };\n}\n\nexport interface AssetPanelState {\n isOpen: boolean;\n tabs: AssetTab[];\n activeTabId: string | null;\n viewMode: ViewMode;\n isFullscreen: boolean;\n /** The current thread ID. Asset panel state is scoped per thread. */\n currentThreadId: string | null;\n /** Per-thread asset panel state — tabs and active tab persist per thread. */\n threadStates: Record<string, ThreadAssetState>;\n /** Number of registered hosts that can reveal the asset panel. */\n assetPanelHostCount: number;\n /**\n * The hosts' own openers (`AthenaProvider onOpenAsset`), newest last. While one is registered,\n * `openAsset` hands it the request first, and the panel opens the asset only when it returns\n * `false`.\n */\n assetOpeners: AssetOpener[];\n /** Generation counter for auto-open tracking — incremented on reset */\n autoOpenGeneration: number;\n /** Tracks which assets have been auto-opened in the current generation */\n autoOpenedAssets: Map<string, number>;\n /**\n * Advances on every `openAsset` call — a repeat open of the asset already\n * showing included — so a host that hides the panel (a workbench tab) can\n * reveal it for each request. A thread switch restoring that thread's open\n * assets does not advance it. Not persisted.\n */\n openRequestSeq: number;\n registerAssetPanelHost: () => void;\n unregisterAssetPanelHost: () => void;\n /** Registers a host's own opener; returns what unregisters it. */\n registerAssetOpener: (opener: AssetOpener) => () => void;\n /**\n * Opens an asset: a host's opener first, else the asset panel. Returns whether anything shows it:\n * an opener took it, or a mounted asset panel will. `false` (the host declined and no panel is\n * mounted) leaves the asset to whatever asked, such as a link that can still open as a link.\n */\n openAsset: (\n assetId: string,\n meta?: {\n name?: string;\n type?: AssetType;\n slideNumber?: number;\n /** Citation target (anchor + excerpt) the open should navigate to. */\n reference?: AthenaAssetCitationReference;\n /**\n * Swap the active tab for this asset instead of appending another tab.\n * Citation clicks use this: reading references shouldn't accumulate a\n * tab per cited document — the panel behaves as one preview surface.\n * A tab that already exists for the asset is re-targeted either way.\n */\n replaceActiveTab?: boolean;\n /** Who asked (default `'user'`); the SDK's auto-open passes `'auto'`. */\n origin?: AssetOpenOrigin;\n /** The link's own address, when a link asked (handed to a host's opener). */\n href?: string;\n },\n ) => boolean;\n closeTab: (assetId: string) => void;\n setActiveTab: (assetId: string) => void;\n setViewMode: (mode: ViewMode) => void;\n closePanel: () => void;\n toggleFullscreen: () => void;\n /**\n * Switch the active thread. Saves the current thread's asset panel state\n * and restores the new thread's state (if any). Pass null to clear.\n */\n setCurrentThread: (threadId: string | null) => void;\n /** Reset auto-open tracking (increments generation so new assets can auto-open) */\n resetAutoOpen: () => void;\n /** Check if an asset should auto-open, and mark it as opened if so */\n markAutoOpened: (assetId: string) => boolean;\n}\n\nexport const useAssetPanelStore = create<AssetPanelState>()(\n persist(\n (set, get) => ({\n isOpen: false,\n tabs: [],\n activeTabId: null,\n viewMode: 'tabs',\n isFullscreen: false,\n currentThreadId: null,\n threadStates: {},\n assetPanelHostCount: 0,\n assetOpeners: [],\n autoOpenGeneration: 0,\n autoOpenedAssets: new Map(),\n openRequestSeq: 0,\n\n registerAssetPanelHost: () =>\n set((state) => ({ assetPanelHostCount: state.assetPanelHostCount + 1 })),\n\n unregisterAssetPanelHost: () =>\n set((state) => ({ assetPanelHostCount: Math.max(0, state.assetPanelHostCount - 1) })),\n\n registerAssetOpener: (opener) => {\n set((state) => ({ assetOpeners: [...state.assetOpeners, opener] }));\n return () =>\n set((state) => {\n const index = state.assetOpeners.lastIndexOf(opener);\n if (index === -1) return state;\n const assetOpeners = state.assetOpeners.slice();\n assetOpeners.splice(index, 1);\n return { assetOpeners };\n });\n },\n\n openAsset: (assetId, meta) => {\n // A host that opens assets its own way takes the request first; `false` leaves it here.\n const opener = get().assetOpeners.at(-1);\n if (opener && opener(assetOpenRequest({ assetId, meta })) !== false) return true;\n set((s) => {\n const existing = s.tabs.find((t) => t.id === assetId);\n if (existing) {\n const tabs = meta\n ? s.tabs.map((t) =>\n t.id === assetId\n ? {\n ...t,\n name: meta.name ?? t.name,\n type: meta.type ?? t.type,\n slideNumber:\n 'slideNumber' in meta ? meta.slideNumber : t.slideNumber,\n // A repeat citation click re-targets the open tab: the new\n // reference reaches the iframe (src change -> navigation).\n reference:\n 'reference' in meta ? meta.reference : t.reference,\n }\n : t,\n )\n : s.tabs;\n return { isOpen: true, tabs, activeTabId: assetId, openRequestSeq: s.openRequestSeq + 1 };\n }\n const newTab: AssetTab = {\n id: assetId,\n name: meta?.name ?? null,\n type: meta?.type ?? 'unknown',\n slideNumber: meta?.slideNumber,\n reference: meta?.reference,\n };\n if (meta?.replaceActiveTab && s.activeTabId) {\n const activeIndex = s.tabs.findIndex((t) => t.id === s.activeTabId);\n if (activeIndex >= 0) {\n const tabs = s.tabs.slice();\n tabs[activeIndex] = newTab;\n return { isOpen: true, tabs, activeTabId: assetId, openRequestSeq: s.openRequestSeq + 1 };\n }\n }\n return {\n isOpen: true,\n tabs: [...s.tabs, newTab],\n activeTabId: assetId,\n openRequestSeq: s.openRequestSeq + 1,\n };\n });\n return get().assetPanelHostCount > 0;\n },\n\n closeTab: (assetId) =>\n set((s) => {\n const tabs = s.tabs.filter((t) => t.id !== assetId);\n if (tabs.length === 0) {\n return { isOpen: false, tabs: [], activeTabId: null, isFullscreen: false };\n }\n const activeTabId =\n s.activeTabId === assetId\n ? tabs[Math.min(s.tabs.findIndex((t) => t.id === assetId), tabs.length - 1)]?.id ?? null\n : s.activeTabId;\n return { tabs, activeTabId };\n }),\n\n setActiveTab: (assetId) => set({ activeTabId: assetId, viewMode: 'tabs' }),\n\n setViewMode: (mode) => set({ viewMode: mode }),\n\n closePanel: () =>\n set({ isOpen: false, tabs: [], activeTabId: null, viewMode: 'tabs', isFullscreen: false }),\n\n toggleFullscreen: () => set((s) => ({ isFullscreen: !s.isFullscreen })),\n\n setCurrentThread: (threadId) =>\n set((s) => {\n // No-op if same thread\n if (s.currentThreadId === threadId) {\n return s;\n }\n\n // Save current thread's asset state to the map (if we had one)\n const threadStates = { ...s.threadStates };\n if (s.currentThreadId !== null) {\n threadStates[s.currentThreadId] = {\n tabs: s.tabs,\n activeTabId: s.activeTabId,\n isOpen: s.isOpen,\n };\n }\n\n // Restore the new thread's state (or start fresh)\n const restored = threadId !== null ? threadStates[threadId] : undefined;\n\n return {\n currentThreadId: threadId,\n threadStates,\n tabs: restored?.tabs ?? [],\n activeTabId: restored?.activeTabId ?? null,\n isOpen: restored?.isOpen ?? false,\n // Reset transient UI state on thread switch\n isFullscreen: false,\n viewMode: 'tabs',\n };\n }),\n\n resetAutoOpen: () =>\n set((s) => ({ autoOpenGeneration: s.autoOpenGeneration + 1 })),\n\n markAutoOpened: (assetId: string) => {\n const state = get();\n if (state.autoOpenedAssets.get(assetId) === state.autoOpenGeneration) {\n return false; // already auto-opened in this generation\n }\n state.autoOpenedAssets.set(assetId, state.autoOpenGeneration);\n return true;\n },\n }),\n {\n name: 'athena-react-asset-panel',\n partialize: ({\n isOpen,\n tabs,\n activeTabId,\n viewMode,\n isFullscreen,\n currentThreadId,\n threadStates,\n }) => ({\n isOpen,\n tabs,\n activeTabId,\n viewMode,\n isFullscreen,\n currentThreadId,\n threadStates,\n }),\n storage: createJSONStorage(() => sessionStorage),\n },\n ),\n);\n"],"names":["create","persist","createJSONStorage"],"mappings":"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"}
|
|
@@ -14,6 +14,28 @@ interface ThreadAssetState {
|
|
|
14
14
|
activeTabId: string | null;
|
|
15
15
|
isOpen: boolean;
|
|
16
16
|
}
|
|
17
|
+
/**
|
|
18
|
+
* Who asked for an asset: the person (a tool card's Open, a citation or asset link in a message)
|
|
19
|
+
* or the SDK's auto-open after a tool created or touched the asset.
|
|
20
|
+
*/
|
|
21
|
+
export type AssetOpenOrigin = 'user' | 'auto';
|
|
22
|
+
/** A request to open an asset, as a host's own opener receives it (`AthenaProvider onOpenAsset`). */
|
|
23
|
+
export interface AssetOpenRequest {
|
|
24
|
+
assetId: string;
|
|
25
|
+
origin: AssetOpenOrigin;
|
|
26
|
+
name?: string;
|
|
27
|
+
type?: AssetType;
|
|
28
|
+
slideNumber?: number;
|
|
29
|
+
/** The citation target (anchor + excerpt) the open should navigate to. */
|
|
30
|
+
reference?: AthenaAssetCitationReference;
|
|
31
|
+
/** The link's own address, when a link asked: a host that opens it on the web keeps every parameter it carried. */
|
|
32
|
+
href?: string;
|
|
33
|
+
}
|
|
34
|
+
/**
|
|
35
|
+
* A host's own way to open an asset (a desktop app's tabs, a route of its own). Return `false` to
|
|
36
|
+
* leave the request to the SDK's asset panel.
|
|
37
|
+
*/
|
|
38
|
+
export type AssetOpener = (request: AssetOpenRequest) => boolean | void;
|
|
17
39
|
export interface AssetPanelState {
|
|
18
40
|
isOpen: boolean;
|
|
19
41
|
tabs: AssetTab[];
|
|
@@ -26,12 +48,32 @@ export interface AssetPanelState {
|
|
|
26
48
|
threadStates: Record<string, ThreadAssetState>;
|
|
27
49
|
/** Number of registered hosts that can reveal the asset panel. */
|
|
28
50
|
assetPanelHostCount: number;
|
|
51
|
+
/**
|
|
52
|
+
* The hosts' own openers (`AthenaProvider onOpenAsset`), newest last. While one is registered,
|
|
53
|
+
* `openAsset` hands it the request first, and the panel opens the asset only when it returns
|
|
54
|
+
* `false`.
|
|
55
|
+
*/
|
|
56
|
+
assetOpeners: AssetOpener[];
|
|
29
57
|
/** Generation counter for auto-open tracking — incremented on reset */
|
|
30
58
|
autoOpenGeneration: number;
|
|
31
59
|
/** Tracks which assets have been auto-opened in the current generation */
|
|
32
60
|
autoOpenedAssets: Map<string, number>;
|
|
61
|
+
/**
|
|
62
|
+
* Advances on every `openAsset` call — a repeat open of the asset already
|
|
63
|
+
* showing included — so a host that hides the panel (a workbench tab) can
|
|
64
|
+
* reveal it for each request. A thread switch restoring that thread's open
|
|
65
|
+
* assets does not advance it. Not persisted.
|
|
66
|
+
*/
|
|
67
|
+
openRequestSeq: number;
|
|
33
68
|
registerAssetPanelHost: () => void;
|
|
34
69
|
unregisterAssetPanelHost: () => void;
|
|
70
|
+
/** Registers a host's own opener; returns what unregisters it. */
|
|
71
|
+
registerAssetOpener: (opener: AssetOpener) => () => void;
|
|
72
|
+
/**
|
|
73
|
+
* Opens an asset: a host's opener first, else the asset panel. Returns whether anything shows it:
|
|
74
|
+
* an opener took it, or a mounted asset panel will. `false` (the host declined and no panel is
|
|
75
|
+
* mounted) leaves the asset to whatever asked, such as a link that can still open as a link.
|
|
76
|
+
*/
|
|
35
77
|
openAsset: (assetId: string, meta?: {
|
|
36
78
|
name?: string;
|
|
37
79
|
type?: AssetType;
|
|
@@ -45,7 +87,11 @@ export interface AssetPanelState {
|
|
|
45
87
|
* A tab that already exists for the asset is re-targeted either way.
|
|
46
88
|
*/
|
|
47
89
|
replaceActiveTab?: boolean;
|
|
48
|
-
|
|
90
|
+
/** Who asked (default `'user'`); the SDK's auto-open passes `'auto'`. */
|
|
91
|
+
origin?: AssetOpenOrigin;
|
|
92
|
+
/** The link's own address, when a link asked (handed to a host's opener). */
|
|
93
|
+
href?: string;
|
|
94
|
+
}) => boolean;
|
|
49
95
|
closeTab: (assetId: string) => void;
|
|
50
96
|
setActiveTab: (assetId: string) => void;
|
|
51
97
|
setViewMode: (mode: ViewMode) => void;
|
|
@@ -1,5 +1,19 @@
|
|
|
1
1
|
import { create } from "zustand";
|
|
2
2
|
import { persist, createJSONStorage } from "zustand/middleware";
|
|
3
|
+
function assetOpenRequest({
|
|
4
|
+
assetId,
|
|
5
|
+
meta
|
|
6
|
+
}) {
|
|
7
|
+
return {
|
|
8
|
+
assetId,
|
|
9
|
+
origin: (meta == null ? void 0 : meta.origin) ?? "user",
|
|
10
|
+
...(meta == null ? void 0 : meta.name) !== void 0 ? { name: meta.name } : {},
|
|
11
|
+
...(meta == null ? void 0 : meta.type) !== void 0 ? { type: meta.type } : {},
|
|
12
|
+
...(meta == null ? void 0 : meta.slideNumber) !== void 0 ? { slideNumber: meta.slideNumber } : {},
|
|
13
|
+
...(meta == null ? void 0 : meta.reference) !== void 0 ? { reference: meta.reference } : {},
|
|
14
|
+
...(meta == null ? void 0 : meta.href) !== void 0 ? { href: meta.href } : {}
|
|
15
|
+
};
|
|
16
|
+
}
|
|
3
17
|
const useAssetPanelStore = create()(
|
|
4
18
|
persist(
|
|
5
19
|
(set, get) => ({
|
|
@@ -11,43 +25,65 @@ const useAssetPanelStore = create()(
|
|
|
11
25
|
currentThreadId: null,
|
|
12
26
|
threadStates: {},
|
|
13
27
|
assetPanelHostCount: 0,
|
|
28
|
+
assetOpeners: [],
|
|
14
29
|
autoOpenGeneration: 0,
|
|
15
30
|
autoOpenedAssets: /* @__PURE__ */ new Map(),
|
|
31
|
+
openRequestSeq: 0,
|
|
16
32
|
registerAssetPanelHost: () => set((state) => ({ assetPanelHostCount: state.assetPanelHostCount + 1 })),
|
|
17
33
|
unregisterAssetPanelHost: () => set((state) => ({ assetPanelHostCount: Math.max(0, state.assetPanelHostCount - 1) })),
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
const
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
tabs
|
|
46
|
-
return { isOpen: true, tabs, activeTabId: assetId };
|
|
34
|
+
registerAssetOpener: (opener) => {
|
|
35
|
+
set((state) => ({ assetOpeners: [...state.assetOpeners, opener] }));
|
|
36
|
+
return () => set((state) => {
|
|
37
|
+
const index = state.assetOpeners.lastIndexOf(opener);
|
|
38
|
+
if (index === -1) return state;
|
|
39
|
+
const assetOpeners = state.assetOpeners.slice();
|
|
40
|
+
assetOpeners.splice(index, 1);
|
|
41
|
+
return { assetOpeners };
|
|
42
|
+
});
|
|
43
|
+
},
|
|
44
|
+
openAsset: (assetId, meta) => {
|
|
45
|
+
const opener = get().assetOpeners.at(-1);
|
|
46
|
+
if (opener && opener(assetOpenRequest({ assetId, meta })) !== false) return true;
|
|
47
|
+
set((s) => {
|
|
48
|
+
const existing = s.tabs.find((t) => t.id === assetId);
|
|
49
|
+
if (existing) {
|
|
50
|
+
const tabs = meta ? s.tabs.map(
|
|
51
|
+
(t) => t.id === assetId ? {
|
|
52
|
+
...t,
|
|
53
|
+
name: meta.name ?? t.name,
|
|
54
|
+
type: meta.type ?? t.type,
|
|
55
|
+
slideNumber: "slideNumber" in meta ? meta.slideNumber : t.slideNumber,
|
|
56
|
+
// A repeat citation click re-targets the open tab: the new
|
|
57
|
+
// reference reaches the iframe (src change -> navigation).
|
|
58
|
+
reference: "reference" in meta ? meta.reference : t.reference
|
|
59
|
+
} : t
|
|
60
|
+
) : s.tabs;
|
|
61
|
+
return { isOpen: true, tabs, activeTabId: assetId, openRequestSeq: s.openRequestSeq + 1 };
|
|
47
62
|
}
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
63
|
+
const newTab = {
|
|
64
|
+
id: assetId,
|
|
65
|
+
name: (meta == null ? void 0 : meta.name) ?? null,
|
|
66
|
+
type: (meta == null ? void 0 : meta.type) ?? "unknown",
|
|
67
|
+
slideNumber: meta == null ? void 0 : meta.slideNumber,
|
|
68
|
+
reference: meta == null ? void 0 : meta.reference
|
|
69
|
+
};
|
|
70
|
+
if ((meta == null ? void 0 : meta.replaceActiveTab) && s.activeTabId) {
|
|
71
|
+
const activeIndex = s.tabs.findIndex((t) => t.id === s.activeTabId);
|
|
72
|
+
if (activeIndex >= 0) {
|
|
73
|
+
const tabs = s.tabs.slice();
|
|
74
|
+
tabs[activeIndex] = newTab;
|
|
75
|
+
return { isOpen: true, tabs, activeTabId: assetId, openRequestSeq: s.openRequestSeq + 1 };
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
return {
|
|
79
|
+
isOpen: true,
|
|
80
|
+
tabs: [...s.tabs, newTab],
|
|
81
|
+
activeTabId: assetId,
|
|
82
|
+
openRequestSeq: s.openRequestSeq + 1
|
|
83
|
+
};
|
|
84
|
+
});
|
|
85
|
+
return get().assetPanelHostCount > 0;
|
|
86
|
+
},
|
|
51
87
|
closeTab: (assetId) => set((s) => {
|
|
52
88
|
var _a;
|
|
53
89
|
const tabs = s.tabs.filter((t) => t.id !== assetId);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"asset-panel-store.js","sources":["../../src/assets/asset-panel-store.ts"],"sourcesContent":["import { create } from 'zustand';\nimport { createJSONStorage, persist } from 'zustand/middleware';\nimport type { AthenaAssetCitationReference } from './asset-embed-messages';\n\nexport type AssetType = 'presentation' | 'spreadsheet' | 'document' | 'notebook' | 'unknown';\n\nexport type ViewMode = 'tabs' | 'tiled';\n\nexport interface AssetTab {\n id: string;\n name: string | null;\n type: AssetType;\n slideNumber?: number;\n /** The citation target (anchor + excerpt) the tab was last opened at. */\n reference?: AthenaAssetCitationReference;\n}\n\ninterface ThreadAssetState {\n tabs: AssetTab[];\n activeTabId: string | null;\n isOpen: boolean;\n}\n\nexport interface AssetPanelState {\n isOpen: boolean;\n tabs: AssetTab[];\n activeTabId: string | null;\n viewMode: ViewMode;\n isFullscreen: boolean;\n /** The current thread ID. Asset panel state is scoped per thread. */\n currentThreadId: string | null;\n /** Per-thread asset panel state — tabs and active tab persist per thread. */\n threadStates: Record<string, ThreadAssetState>;\n /** Number of registered hosts that can reveal the asset panel. */\n assetPanelHostCount: number;\n /** Generation counter for auto-open tracking — incremented on reset */\n autoOpenGeneration: number;\n /** Tracks which assets have been auto-opened in the current generation */\n autoOpenedAssets: Map<string, number>;\n registerAssetPanelHost: () => void;\n unregisterAssetPanelHost: () => void;\n openAsset: (\n assetId: string,\n meta?: {\n name?: string;\n type?: AssetType;\n slideNumber?: number;\n /** Citation target (anchor + excerpt) the open should navigate to. */\n reference?: AthenaAssetCitationReference;\n /**\n * Swap the active tab for this asset instead of appending another tab.\n * Citation clicks use this: reading references shouldn't accumulate a\n * tab per cited document — the panel behaves as one preview surface.\n * A tab that already exists for the asset is re-targeted either way.\n */\n replaceActiveTab?: boolean;\n },\n ) => void;\n closeTab: (assetId: string) => void;\n setActiveTab: (assetId: string) => void;\n setViewMode: (mode: ViewMode) => void;\n closePanel: () => void;\n toggleFullscreen: () => void;\n /**\n * Switch the active thread. Saves the current thread's asset panel state\n * and restores the new thread's state (if any). Pass null to clear.\n */\n setCurrentThread: (threadId: string | null) => void;\n /** Reset auto-open tracking (increments generation so new assets can auto-open) */\n resetAutoOpen: () => void;\n /** Check if an asset should auto-open, and mark it as opened if so */\n markAutoOpened: (assetId: string) => boolean;\n}\n\nexport const useAssetPanelStore = create<AssetPanelState>()(\n persist(\n (set, get) => ({\n isOpen: false,\n tabs: [],\n activeTabId: null,\n viewMode: 'tabs',\n isFullscreen: false,\n currentThreadId: null,\n threadStates: {},\n assetPanelHostCount: 0,\n autoOpenGeneration: 0,\n autoOpenedAssets: new Map(),\n\n registerAssetPanelHost: () =>\n set((state) => ({ assetPanelHostCount: state.assetPanelHostCount + 1 })),\n\n unregisterAssetPanelHost: () =>\n set((state) => ({ assetPanelHostCount: Math.max(0, state.assetPanelHostCount - 1) })),\n\n openAsset: (assetId, meta) =>\n set((s) => {\n const existing = s.tabs.find((t) => t.id === assetId);\n if (existing) {\n const tabs = meta\n ? s.tabs.map((t) =>\n t.id === assetId\n ? {\n ...t,\n name: meta.name ?? t.name,\n type: meta.type ?? t.type,\n slideNumber:\n 'slideNumber' in meta ? meta.slideNumber : t.slideNumber,\n // A repeat citation click re-targets the open tab: the new\n // reference reaches the iframe (src change -> navigation).\n reference:\n 'reference' in meta ? meta.reference : t.reference,\n }\n : t,\n )\n : s.tabs;\n return { isOpen: true, tabs, activeTabId: assetId };\n }\n const newTab: AssetTab = {\n id: assetId,\n name: meta?.name ?? null,\n type: meta?.type ?? 'unknown',\n slideNumber: meta?.slideNumber,\n reference: meta?.reference,\n };\n if (meta?.replaceActiveTab && s.activeTabId) {\n const activeIndex = s.tabs.findIndex((t) => t.id === s.activeTabId);\n if (activeIndex >= 0) {\n const tabs = s.tabs.slice();\n tabs[activeIndex] = newTab;\n return { isOpen: true, tabs, activeTabId: assetId };\n }\n }\n return { isOpen: true, tabs: [...s.tabs, newTab], activeTabId: assetId };\n }),\n\n closeTab: (assetId) =>\n set((s) => {\n const tabs = s.tabs.filter((t) => t.id !== assetId);\n if (tabs.length === 0) {\n return { isOpen: false, tabs: [], activeTabId: null, isFullscreen: false };\n }\n const activeTabId =\n s.activeTabId === assetId\n ? tabs[Math.min(s.tabs.findIndex((t) => t.id === assetId), tabs.length - 1)]?.id ?? null\n : s.activeTabId;\n return { tabs, activeTabId };\n }),\n\n setActiveTab: (assetId) => set({ activeTabId: assetId, viewMode: 'tabs' }),\n\n setViewMode: (mode) => set({ viewMode: mode }),\n\n closePanel: () =>\n set({ isOpen: false, tabs: [], activeTabId: null, viewMode: 'tabs', isFullscreen: false }),\n\n toggleFullscreen: () => set((s) => ({ isFullscreen: !s.isFullscreen })),\n\n setCurrentThread: (threadId) =>\n set((s) => {\n // No-op if same thread\n if (s.currentThreadId === threadId) {\n return s;\n }\n\n // Save current thread's asset state to the map (if we had one)\n const threadStates = { ...s.threadStates };\n if (s.currentThreadId !== null) {\n threadStates[s.currentThreadId] = {\n tabs: s.tabs,\n activeTabId: s.activeTabId,\n isOpen: s.isOpen,\n };\n }\n\n // Restore the new thread's state (or start fresh)\n const restored = threadId !== null ? threadStates[threadId] : undefined;\n\n return {\n currentThreadId: threadId,\n threadStates,\n tabs: restored?.tabs ?? [],\n activeTabId: restored?.activeTabId ?? null,\n isOpen: restored?.isOpen ?? false,\n // Reset transient UI state on thread switch\n isFullscreen: false,\n viewMode: 'tabs',\n };\n }),\n\n resetAutoOpen: () =>\n set((s) => ({ autoOpenGeneration: s.autoOpenGeneration + 1 })),\n\n markAutoOpened: (assetId: string) => {\n const state = get();\n if (state.autoOpenedAssets.get(assetId) === state.autoOpenGeneration) {\n return false; // already auto-opened in this generation\n }\n state.autoOpenedAssets.set(assetId, state.autoOpenGeneration);\n return true;\n },\n }),\n {\n name: 'athena-react-asset-panel',\n partialize: ({\n isOpen,\n tabs,\n activeTabId,\n viewMode,\n isFullscreen,\n currentThreadId,\n threadStates,\n }) => ({\n isOpen,\n tabs,\n activeTabId,\n viewMode,\n isFullscreen,\n currentThreadId,\n threadStates,\n }),\n storage: createJSONStorage(() => sessionStorage),\n },\n ),\n);\n"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"asset-panel-store.js","sources":["../../src/assets/asset-panel-store.ts"],"sourcesContent":["import { create } from 'zustand';\nimport { createJSONStorage, persist } from 'zustand/middleware';\nimport type { AthenaAssetCitationReference } from './asset-embed-messages';\n\nexport type AssetType = 'presentation' | 'spreadsheet' | 'document' | 'notebook' | 'unknown';\n\nexport type ViewMode = 'tabs' | 'tiled';\n\nexport interface AssetTab {\n id: string;\n name: string | null;\n type: AssetType;\n slideNumber?: number;\n /** The citation target (anchor + excerpt) the tab was last opened at. */\n reference?: AthenaAssetCitationReference;\n}\n\ninterface ThreadAssetState {\n tabs: AssetTab[];\n activeTabId: string | null;\n isOpen: boolean;\n}\n\n/**\n * Who asked for an asset: the person (a tool card's Open, a citation or asset link in a message)\n * or the SDK's auto-open after a tool created or touched the asset.\n */\nexport type AssetOpenOrigin = 'user' | 'auto';\n\n/** A request to open an asset, as a host's own opener receives it (`AthenaProvider onOpenAsset`). */\nexport interface AssetOpenRequest {\n assetId: string;\n origin: AssetOpenOrigin;\n name?: string;\n type?: AssetType;\n slideNumber?: number;\n /** The citation target (anchor + excerpt) the open should navigate to. */\n reference?: AthenaAssetCitationReference;\n /** The link's own address, when a link asked: a host that opens it on the web keeps every parameter it carried. */\n href?: string;\n}\n\n/**\n * A host's own way to open an asset (a desktop app's tabs, a route of its own). Return `false` to\n * leave the request to the SDK's asset panel.\n */\nexport type AssetOpener = (request: AssetOpenRequest) => boolean | void;\n\nfunction assetOpenRequest({\n assetId,\n meta,\n}: {\n assetId: string;\n meta: Parameters<AssetPanelState['openAsset']>[1];\n}): AssetOpenRequest {\n return {\n assetId,\n origin: meta?.origin ?? 'user',\n ...(meta?.name !== undefined ? { name: meta.name } : {}),\n ...(meta?.type !== undefined ? { type: meta.type } : {}),\n ...(meta?.slideNumber !== undefined ? { slideNumber: meta.slideNumber } : {}),\n ...(meta?.reference !== undefined ? { reference: meta.reference } : {}),\n ...(meta?.href !== undefined ? { href: meta.href } : {}),\n };\n}\n\nexport interface AssetPanelState {\n isOpen: boolean;\n tabs: AssetTab[];\n activeTabId: string | null;\n viewMode: ViewMode;\n isFullscreen: boolean;\n /** The current thread ID. Asset panel state is scoped per thread. */\n currentThreadId: string | null;\n /** Per-thread asset panel state — tabs and active tab persist per thread. */\n threadStates: Record<string, ThreadAssetState>;\n /** Number of registered hosts that can reveal the asset panel. */\n assetPanelHostCount: number;\n /**\n * The hosts' own openers (`AthenaProvider onOpenAsset`), newest last. While one is registered,\n * `openAsset` hands it the request first, and the panel opens the asset only when it returns\n * `false`.\n */\n assetOpeners: AssetOpener[];\n /** Generation counter for auto-open tracking — incremented on reset */\n autoOpenGeneration: number;\n /** Tracks which assets have been auto-opened in the current generation */\n autoOpenedAssets: Map<string, number>;\n /**\n * Advances on every `openAsset` call — a repeat open of the asset already\n * showing included — so a host that hides the panel (a workbench tab) can\n * reveal it for each request. A thread switch restoring that thread's open\n * assets does not advance it. Not persisted.\n */\n openRequestSeq: number;\n registerAssetPanelHost: () => void;\n unregisterAssetPanelHost: () => void;\n /** Registers a host's own opener; returns what unregisters it. */\n registerAssetOpener: (opener: AssetOpener) => () => void;\n /**\n * Opens an asset: a host's opener first, else the asset panel. Returns whether anything shows it:\n * an opener took it, or a mounted asset panel will. `false` (the host declined and no panel is\n * mounted) leaves the asset to whatever asked, such as a link that can still open as a link.\n */\n openAsset: (\n assetId: string,\n meta?: {\n name?: string;\n type?: AssetType;\n slideNumber?: number;\n /** Citation target (anchor + excerpt) the open should navigate to. */\n reference?: AthenaAssetCitationReference;\n /**\n * Swap the active tab for this asset instead of appending another tab.\n * Citation clicks use this: reading references shouldn't accumulate a\n * tab per cited document — the panel behaves as one preview surface.\n * A tab that already exists for the asset is re-targeted either way.\n */\n replaceActiveTab?: boolean;\n /** Who asked (default `'user'`); the SDK's auto-open passes `'auto'`. */\n origin?: AssetOpenOrigin;\n /** The link's own address, when a link asked (handed to a host's opener). */\n href?: string;\n },\n ) => boolean;\n closeTab: (assetId: string) => void;\n setActiveTab: (assetId: string) => void;\n setViewMode: (mode: ViewMode) => void;\n closePanel: () => void;\n toggleFullscreen: () => void;\n /**\n * Switch the active thread. Saves the current thread's asset panel state\n * and restores the new thread's state (if any). Pass null to clear.\n */\n setCurrentThread: (threadId: string | null) => void;\n /** Reset auto-open tracking (increments generation so new assets can auto-open) */\n resetAutoOpen: () => void;\n /** Check if an asset should auto-open, and mark it as opened if so */\n markAutoOpened: (assetId: string) => boolean;\n}\n\nexport const useAssetPanelStore = create<AssetPanelState>()(\n persist(\n (set, get) => ({\n isOpen: false,\n tabs: [],\n activeTabId: null,\n viewMode: 'tabs',\n isFullscreen: false,\n currentThreadId: null,\n threadStates: {},\n assetPanelHostCount: 0,\n assetOpeners: [],\n autoOpenGeneration: 0,\n autoOpenedAssets: new Map(),\n openRequestSeq: 0,\n\n registerAssetPanelHost: () =>\n set((state) => ({ assetPanelHostCount: state.assetPanelHostCount + 1 })),\n\n unregisterAssetPanelHost: () =>\n set((state) => ({ assetPanelHostCount: Math.max(0, state.assetPanelHostCount - 1) })),\n\n registerAssetOpener: (opener) => {\n set((state) => ({ assetOpeners: [...state.assetOpeners, opener] }));\n return () =>\n set((state) => {\n const index = state.assetOpeners.lastIndexOf(opener);\n if (index === -1) return state;\n const assetOpeners = state.assetOpeners.slice();\n assetOpeners.splice(index, 1);\n return { assetOpeners };\n });\n },\n\n openAsset: (assetId, meta) => {\n // A host that opens assets its own way takes the request first; `false` leaves it here.\n const opener = get().assetOpeners.at(-1);\n if (opener && opener(assetOpenRequest({ assetId, meta })) !== false) return true;\n set((s) => {\n const existing = s.tabs.find((t) => t.id === assetId);\n if (existing) {\n const tabs = meta\n ? s.tabs.map((t) =>\n t.id === assetId\n ? {\n ...t,\n name: meta.name ?? t.name,\n type: meta.type ?? t.type,\n slideNumber:\n 'slideNumber' in meta ? meta.slideNumber : t.slideNumber,\n // A repeat citation click re-targets the open tab: the new\n // reference reaches the iframe (src change -> navigation).\n reference:\n 'reference' in meta ? meta.reference : t.reference,\n }\n : t,\n )\n : s.tabs;\n return { isOpen: true, tabs, activeTabId: assetId, openRequestSeq: s.openRequestSeq + 1 };\n }\n const newTab: AssetTab = {\n id: assetId,\n name: meta?.name ?? null,\n type: meta?.type ?? 'unknown',\n slideNumber: meta?.slideNumber,\n reference: meta?.reference,\n };\n if (meta?.replaceActiveTab && s.activeTabId) {\n const activeIndex = s.tabs.findIndex((t) => t.id === s.activeTabId);\n if (activeIndex >= 0) {\n const tabs = s.tabs.slice();\n tabs[activeIndex] = newTab;\n return { isOpen: true, tabs, activeTabId: assetId, openRequestSeq: s.openRequestSeq + 1 };\n }\n }\n return {\n isOpen: true,\n tabs: [...s.tabs, newTab],\n activeTabId: assetId,\n openRequestSeq: s.openRequestSeq + 1,\n };\n });\n return get().assetPanelHostCount > 0;\n },\n\n closeTab: (assetId) =>\n set((s) => {\n const tabs = s.tabs.filter((t) => t.id !== assetId);\n if (tabs.length === 0) {\n return { isOpen: false, tabs: [], activeTabId: null, isFullscreen: false };\n }\n const activeTabId =\n s.activeTabId === assetId\n ? tabs[Math.min(s.tabs.findIndex((t) => t.id === assetId), tabs.length - 1)]?.id ?? null\n : s.activeTabId;\n return { tabs, activeTabId };\n }),\n\n setActiveTab: (assetId) => set({ activeTabId: assetId, viewMode: 'tabs' }),\n\n setViewMode: (mode) => set({ viewMode: mode }),\n\n closePanel: () =>\n set({ isOpen: false, tabs: [], activeTabId: null, viewMode: 'tabs', isFullscreen: false }),\n\n toggleFullscreen: () => set((s) => ({ isFullscreen: !s.isFullscreen })),\n\n setCurrentThread: (threadId) =>\n set((s) => {\n // No-op if same thread\n if (s.currentThreadId === threadId) {\n return s;\n }\n\n // Save current thread's asset state to the map (if we had one)\n const threadStates = { ...s.threadStates };\n if (s.currentThreadId !== null) {\n threadStates[s.currentThreadId] = {\n tabs: s.tabs,\n activeTabId: s.activeTabId,\n isOpen: s.isOpen,\n };\n }\n\n // Restore the new thread's state (or start fresh)\n const restored = threadId !== null ? threadStates[threadId] : undefined;\n\n return {\n currentThreadId: threadId,\n threadStates,\n tabs: restored?.tabs ?? [],\n activeTabId: restored?.activeTabId ?? null,\n isOpen: restored?.isOpen ?? false,\n // Reset transient UI state on thread switch\n isFullscreen: false,\n viewMode: 'tabs',\n };\n }),\n\n resetAutoOpen: () =>\n set((s) => ({ autoOpenGeneration: s.autoOpenGeneration + 1 })),\n\n markAutoOpened: (assetId: string) => {\n const state = get();\n if (state.autoOpenedAssets.get(assetId) === state.autoOpenGeneration) {\n return false; // already auto-opened in this generation\n }\n state.autoOpenedAssets.set(assetId, state.autoOpenGeneration);\n return true;\n },\n }),\n {\n name: 'athena-react-asset-panel',\n partialize: ({\n isOpen,\n tabs,\n activeTabId,\n viewMode,\n isFullscreen,\n currentThreadId,\n threadStates,\n }) => ({\n isOpen,\n tabs,\n activeTabId,\n viewMode,\n isFullscreen,\n currentThreadId,\n threadStates,\n }),\n storage: createJSONStorage(() => sessionStorage),\n },\n ),\n);\n"],"names":[],"mappings":"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"}
|
|
@@ -127,15 +127,24 @@ function setNonEmptyStringParam({ params, key, value }) {
|
|
|
127
127
|
params.set(key, value);
|
|
128
128
|
}
|
|
129
129
|
}
|
|
130
|
-
|
|
130
|
+
const SDK_BRIDGE_PARAM = "athena_sdk_bridge";
|
|
131
|
+
function rawAnchorQueryPairs(query) {
|
|
132
|
+
const queryIndex = query.indexOf("?");
|
|
133
|
+
const search = queryIndex === -1 ? query : query.slice(queryIndex + 1);
|
|
134
|
+
const pairs = [...new URLSearchParams(search)].filter(([key]) => key !== SDK_BRIDGE_PARAM);
|
|
135
|
+
if (pairs.length === 0 || pairs.some(([key]) => key.length === 0)) return null;
|
|
136
|
+
return pairs;
|
|
137
|
+
}
|
|
138
|
+
function appendRawAnchorQuery({ params, query }) {
|
|
139
|
+
const pairs = rawAnchorQueryPairs(query);
|
|
140
|
+
if (!pairs) return;
|
|
141
|
+
for (const [key] of pairs) params.delete(key);
|
|
142
|
+
for (const [key, value] of pairs) params.append(key, value);
|
|
143
|
+
}
|
|
144
|
+
function appendTypedAnchorParams({
|
|
131
145
|
params,
|
|
132
|
-
|
|
146
|
+
anchor
|
|
133
147
|
}) {
|
|
134
|
-
var _a;
|
|
135
|
-
const anchor = reference == null ? void 0 : reference.anchor;
|
|
136
|
-
if (!anchor || typeof anchor !== "object" || !("type" in anchor) || typeof anchor.type !== "string") {
|
|
137
|
-
return;
|
|
138
|
-
}
|
|
139
148
|
switch (anchor.type) {
|
|
140
149
|
case "page":
|
|
141
150
|
params.set("anchor", anchor.type);
|
|
@@ -229,7 +238,19 @@ function appendCitationReferenceParams({
|
|
|
229
238
|
}
|
|
230
239
|
break;
|
|
231
240
|
}
|
|
232
|
-
|
|
241
|
+
}
|
|
242
|
+
function appendCitationReferenceParams({
|
|
243
|
+
params,
|
|
244
|
+
reference
|
|
245
|
+
}) {
|
|
246
|
+
var _a;
|
|
247
|
+
const anchor = reference == null ? void 0 : reference.anchor;
|
|
248
|
+
if (typeof anchor === "string") {
|
|
249
|
+
appendRawAnchorQuery({ params, query: anchor });
|
|
250
|
+
} else if (anchor && typeof anchor === "object" && "type" in anchor && typeof anchor.type === "string") {
|
|
251
|
+
appendTypedAnchorParams({ params, anchor: { ...anchor, type: anchor.type } });
|
|
252
|
+
}
|
|
253
|
+
const excerpt = (_a = reference == null ? void 0 : reference.meta) == null ? void 0 : _a.excerpt;
|
|
233
254
|
if (typeof excerpt === "string" && excerpt) {
|
|
234
255
|
params.set("excerpt", excerpt);
|
|
235
256
|
}
|