@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
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SessionList.js","sources":["../../src/threads/SessionList.tsx"],"sourcesContent":["import {\n ArchiveIcon,\n ClockIcon,\n GitMergeIcon,\n GitPullRequestClosedIcon,\n GitPullRequestDraftIcon,\n GitPullRequestIcon,\n LoaderCircleIcon,\n PencilIcon,\n PinIcon,\n PlusIcon,\n RefreshCwIcon,\n SearchIcon,\n} from 'lucide-react';\nimport type { ConversationPullRequest } from '@athenaintel/agent-runtime';\nimport type { ChangeEvent, FC, KeyboardEvent, MouseEvent, ReactNode } from 'react';\nimport { useCallback, useEffect, useRef, useState } from 'react';\nimport { cn } from '../lib/utils';\nimport { Popover, PopoverContent, PopoverTrigger } from '../ui/popover';\nimport { THREAD_TITLE_MAX_LENGTH } from './api';\nimport {\n groupSessions,\n orderedPullRequests,\n type PullRequestChip as PullRequestChipModel,\n type PullRequestChipState,\n pullRequestChip,\n pullRequestChipState,\n type SessionIndicator as SessionIndicatorKind,\n type SessionLineTone,\n sessionIndicator,\n sessionOriginLabel,\n sessionSecondaryLine,\n} from './session-list-model';\nimport {\n type AthenaStatewireThreadSummary,\n useAthenaStatewireThreadList,\n} from './statewire-thread-list';\nimport { THREAD_PREFETCH_HOVER_DELAY_MS } from './thread-prefetcher';\nimport type { ThreadFavoriteTarget } from './use-thread-favorite';\nimport type { ThreadRenameTarget } from './use-thread-rename';\n\nexport interface SessionListProps {\n className?: string;\n /**\n * Group rows under \"Needs you\" / \"Working\" / \"Pinned\" / \"Recent\" (default\n * `true`); a session appears once, in the first group that applies. `false`\n * renders one newest-first list.\n */\n grouped?: boolean;\n /** Show the title search box, wired to the server-side `search` (default `true`). */\n showSearch?: boolean;\n /**\n * Offer the pin toggle on each row (default `true`). `false` — or a backend\n * without the favorite route — shows a pinned row's pin read-only instead.\n */\n showPinToggle?: boolean;\n /**\n * Offer the inline rename on each row (default `true`). Withdrawn on a\n * backend without the rename route (`renameAvailable`).\n */\n showRename?: boolean;\n /**\n * Offer the archive action on each row (default `true`). Withdrawn on a\n * backend without the archive route (`archiveAvailable`).\n */\n showArchive?: boolean;\n /**\n * Warm the provider's snapshot cache for a row after a 120 ms hover dwell\n * and on row focus (default `true`), so selecting it paints at once.\n */\n prefetchOnHover?: boolean;\n}\n\nconst INDICATOR_LABEL: Record<NonNullable<SessionIndicatorKind>, string> = {\n needs_you: 'Needs you',\n working: 'Working',\n unread: 'Unread',\n watching: 'Watching',\n};\n\n/**\n * The row's status indicator; an empty spacer keeps titles aligned when a\n * row has none.\n */\nconst SessionStatusIndicator: FC<{ kind: SessionIndicatorKind }> = ({ kind }) => {\n if (kind === null) return <span aria-hidden=\"true\" className=\"mt-0.5 size-4 shrink-0\" />;\n const label = INDICATOR_LABEL[kind];\n if (kind === 'working') {\n return (\n <LoaderCircleIcon\n role=\"img\"\n aria-label={label}\n data-indicator={kind}\n className=\"mt-0.5 size-4 shrink-0 animate-spin text-primary\"\n />\n );\n }\n if (kind === 'watching') {\n return (\n <ClockIcon\n role=\"img\"\n aria-label={label}\n data-indicator={kind}\n className=\"mt-0.5 size-4 shrink-0 text-muted-foreground\"\n />\n );\n }\n return (\n <span\n role=\"img\"\n aria-label={label}\n data-indicator={kind}\n className=\"mt-0.5 flex size-4 shrink-0 items-center justify-center\"\n >\n <span\n className={cn(\n 'size-2 rounded-full',\n kind === 'needs_you' ? 'bg-orange-500' : 'bg-primary',\n )}\n />\n </span>\n );\n};\n\nconst LINE_TONE_CLASS: Record<SessionLineTone, string> = {\n needs_you: 'text-orange-600',\n ready: 'text-green-600',\n error: 'text-red-600',\n muted: 'text-muted-foreground',\n};\n\nconst PR_STATE_ICON: Record<PullRequestChipState, FC<{ className?: string; 'aria-hidden'?: boolean }>> = {\n open: GitPullRequestIcon,\n draft: GitPullRequestDraftIcon,\n merged: GitMergeIcon,\n closed: GitPullRequestClosedIcon,\n};\n\nconst PR_STATE_CLASS: Record<PullRequestChipState, string> = {\n open: 'text-green-600',\n draft: 'text-muted-foreground',\n merged: 'text-violet-600',\n closed: 'text-red-600',\n};\n\n/** The focus treatment every row control and action shares. */\nconst FOCUS_RING_CLASS =\n 'outline-none focus-visible:ring-2 focus-visible:ring-ring/60 focus-visible:ring-offset-0';\n\nconst stopPropagation = (event: MouseEvent) => event.stopPropagation();\n\nconst PR_CHECKS_LABEL: Record<ConversationPullRequest['checksState'], string> = {\n SUCCESS: 'checks passed',\n FAILURE: 'checks failing',\n PENDING: 'checks running',\n NONE: '',\n};\n\nconst PR_CHIP_CLASS =\n 'inline-flex h-4 shrink-0 items-center gap-1 rounded-full border border-border/60 px-1.5 font-medium text-[11px] leading-none transition-colors hover:bg-muted';\n\n/**\n * One row of the pull-request list: the state icon, the title, and the\n * number, state and checks beneath it (the repository too when the list\n * spans several), as a link to GitHub in a new tab.\n */\nconst PullRequestListRow: FC<{ pullRequest: ConversationPullRequest; showRepo: boolean }> = ({\n pullRequest,\n showRepo,\n}) => {\n const state = pullRequestChipState(pullRequest);\n const Icon = PR_STATE_ICON[state];\n const meta = [\n showRepo ? `${pullRequest.repoFullName} #${pullRequest.number}` : `#${pullRequest.number}`,\n state,\n PR_CHECKS_LABEL[pullRequest.checksState],\n ]\n .filter(Boolean)\n .join(' · ');\n return (\n <li>\n <a\n href={pullRequest.url}\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n data-pr-state={state}\n className={cn(\n 'flex items-start gap-2 rounded-sm px-2 py-1.5 text-xs transition-colors hover:bg-muted',\n FOCUS_RING_CLASS,\n )}\n >\n <Icon className={cn('mt-0.5 size-3.5 shrink-0', PR_STATE_CLASS[state])} aria-hidden />\n <span className=\"min-w-0 flex-1\">\n <span className=\"block truncate text-foreground\">\n {pullRequest.title || `#${pullRequest.number}`}\n </span>\n <span className=\"block truncate text-muted-foreground\">{meta}</span>\n </span>\n </a>\n </li>\n );\n};\n\n/**\n * The session's pull-request chip; a sibling of the row button (never nested\n * inside it) so the markup stays valid and a click on it never selects the\n * row. Sits on the row's second line, beside the meta text. One pull request:\n * a link to it. Several: a button that opens all of them — in flight first,\n * then the most recently updated — each a link to GitHub.\n */\nconst PullRequestChip: FC<{\n chip: PullRequestChipModel;\n pullRequests: readonly ConversationPullRequest[];\n}> = ({ chip, pullRequests }) => {\n const Icon = PR_STATE_ICON[chip.state];\n if (chip.count === 1) {\n return (\n <a\n href={chip.url}\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n onClick={stopPropagation}\n title={chip.title}\n aria-label={`Pull request ${chip.label}, ${chip.state}`}\n data-pr-state={chip.state}\n data-pr-count={chip.count}\n className={cn(PR_CHIP_CLASS, FOCUS_RING_CLASS, PR_STATE_CLASS[chip.state])}\n >\n <Icon className=\"size-3\" aria-hidden />\n {chip.label}\n </a>\n );\n }\n const listLabel = `${chip.count} pull requests`;\n const ordered = orderedPullRequests(pullRequests);\n // One repository (the usual case) is named once in the header, so each\n // row's meta line has room for its state and checks.\n const repositories = new Set(ordered.map((pullRequest) => pullRequest.repoFullName));\n const sharedRepository = repositories.size === 1 ? (ordered[0]?.repoFullName ?? null) : null;\n return (\n <Popover>\n <PopoverTrigger asChild>\n <button\n type=\"button\"\n onClick={stopPropagation}\n aria-label={`${chip.label}: show all ${listLabel}`}\n data-pr-state={chip.state}\n data-pr-count={chip.count}\n className={cn(PR_CHIP_CLASS, FOCUS_RING_CLASS, PR_STATE_CLASS[chip.state])}\n >\n <Icon className=\"size-3\" aria-hidden />\n {chip.label}\n </button>\n </PopoverTrigger>\n <PopoverContent align=\"end\" className=\"w-80 p-0\" aria-label={listLabel} data-pr-list=\"\">\n <p className=\"truncate border-b border-border px-3 py-2 font-medium text-muted-foreground text-xs\">\n {sharedRepository ? `${listLabel} in ${sharedRepository}` : listLabel}\n </p>\n <ul className=\"max-h-72 overflow-y-auto p-1\">\n {ordered.map((pullRequest) => (\n <PullRequestListRow\n key={`${pullRequest.repoFullName}#${pullRequest.number}`}\n pullRequest={pullRequest}\n showRepo={sharedRepository === null}\n />\n ))}\n </ul>\n </PopoverContent>\n </Popover>\n );\n};\n\n/**\n * One action in the row's trailing cluster: a sibling of the row control\n * (never nested in it — a click must not select the row), labelled for\n * assistive technology, revealed on hover or focus unless `alwaysVisible`,\n * and disabled while its write is in flight so one row never has two writes\n * racing.\n */\nconst RowActionButton: FC<{\n label: string;\n onClick: (event: MouseEvent<HTMLButtonElement>) => void;\n pending: boolean;\n alwaysVisible: boolean;\n action: string;\n pressed?: boolean;\n children: ReactNode;\n}> = ({ label, onClick, pending, alwaysVisible, action, pressed, children }) => (\n <button\n type=\"button\"\n onClick={onClick}\n disabled={pending}\n aria-busy={pending || undefined}\n aria-pressed={pressed}\n aria-label={label}\n title={label}\n data-action={action}\n data-pending={pending || undefined}\n className={cn(\n 'rounded p-1 text-muted-foreground transition-colors hover:bg-muted hover:text-foreground disabled:cursor-wait disabled:opacity-60',\n FOCUS_RING_CLASS,\n !alwaysVisible &&\n !pending &&\n 'opacity-0 focus-visible:opacity-100 group-focus-within:opacity-100 group-hover:opacity-100',\n )}\n >\n {children}\n </button>\n);\n\n/**\n * The pin toggle: pressed while the session is pinned (and then always\n * visible); otherwise an outline pin revealed on hover or focus so an\n * unpinned row stays quiet.\n */\nconst PinToggle: FC<{\n thread: Pick<AthenaStatewireThreadSummary, 'id' | 'isFavorited'>;\n pending: boolean;\n onToggle: (target: ThreadFavoriteTarget) => void;\n}> = ({ thread, pending, onToggle }) => {\n const label = thread.isFavorited ? 'Unpin session' : 'Pin session';\n const handleClick = (event: MouseEvent) => {\n event.stopPropagation();\n if (pending) return;\n onToggle({ threadId: thread.id, isFavorited: !thread.isFavorited });\n };\n return (\n <span data-pin-toggle={thread.isFavorited ? 'pinned' : 'unpinned'} className=\"contents\">\n <RowActionButton\n label={label}\n onClick={handleClick}\n pending={pending}\n alwaysVisible={thread.isFavorited}\n action=\"pin\"\n pressed={thread.isFavorited}\n >\n <PinIcon className={cn('size-3.5', thread.isFavorited && 'fill-current')} aria-hidden />\n </RowActionButton>\n </span>\n );\n};\n\nconst SKELETON_TITLE_WIDTHS = ['w-3/5', 'w-4/5', 'w-1/2', 'w-2/3'] as const;\n\n/**\n * Placeholder rows shaped like session rows (indicator, title line, meta\n * line) for the first page and for a refresh that has no rows to keep yet.\n */\nexport const SessionListSkeleton: FC<{ rows?: number }> = ({ rows = 4 }) => (\n <div\n role=\"status\"\n aria-busy=\"true\"\n aria-label=\"Loading sessions\"\n data-testid=\"session-list-skeleton\"\n className=\"flex flex-col gap-0.5\"\n >\n {Array.from({ length: rows }, (_, index) => (\n <div key={index} aria-hidden=\"true\" className=\"flex items-start gap-2 px-3 py-2\">\n <span className=\"mt-0.5 size-4 shrink-0 animate-pulse rounded-full bg-muted\" />\n <span className=\"min-w-0 flex-1\">\n <span className=\"flex h-5 items-center\">\n <span\n className={cn(\n 'h-3.5 animate-pulse rounded bg-muted',\n SKELETON_TITLE_WIDTHS[index % SKELETON_TITLE_WIDTHS.length],\n )}\n />\n </span>\n <span className=\"mt-0.5 flex h-4 items-center\">\n <span className=\"h-3 w-1/3 animate-pulse rounded bg-muted/70\" />\n </span>\n </span>\n </div>\n ))}\n </div>\n);\n\nconst SessionRow: FC<{\n thread: AthenaStatewireThreadSummary;\n isActive: boolean;\n onSelect: (threadId: string) => void;\n /** Absent when hover prefetching is off or the provider has no snapshot cache to warm. */\n onPrefetch: ((threadId: string) => void) | undefined;\n /** Absent when the toggle is not offered: a pinned row then shows a read-only pin. */\n onToggleFavorite: ((target: ThreadFavoriteTarget) => void) | undefined;\n /** True while this session's pin write is in flight. */\n favoritePending: boolean;\n /** Absent when the rename is not offered (host opt-out, or a backend without the route). */\n onRename: ((target: ThreadRenameTarget) => void) | undefined;\n renamePending: boolean;\n /** Absent when the archive is not offered (host opt-out, or a backend without the route). */\n onArchive: ((threadId: string) => void) | undefined;\n archivePending: boolean;\n}> = ({\n thread,\n isActive,\n onSelect,\n onPrefetch,\n onToggleFavorite,\n favoritePending,\n onRename,\n renamePending,\n onArchive,\n archivePending,\n}) => {\n const indicator = sessionIndicator(thread);\n const line = sessionSecondaryLine(thread);\n const chip = pullRequestChip(thread.pullRequests);\n const origin = sessionOriginLabel(thread);\n const title = thread.title ?? 'Untitled';\n\n // Hover prefetch: the pointer must rest on the row for the dwell before\n // the fetch starts, so sweeping the pointer down the list fetches nothing.\n const hoverTimerRef = useRef<ReturnType<typeof setTimeout> | null>(null);\n const cancelHover = useCallback(() => {\n if (hoverTimerRef.current === null) return;\n clearTimeout(hoverTimerRef.current);\n hoverTimerRef.current = null;\n }, []);\n useEffect(() => cancelHover, [cancelHover]);\n const handlePointerEnter = () => {\n if (!onPrefetch) return;\n cancelHover();\n hoverTimerRef.current = setTimeout(() => {\n hoverTimerRef.current = null;\n onPrefetch(thread.id);\n }, THREAD_PREFETCH_HOVER_DELAY_MS);\n };\n const handleFocus = () => {\n cancelHover();\n onPrefetch?.(thread.id);\n };\n\n // Inline rename: the title becomes an input; Enter commits, Escape cancels,\n // blur commits. An Enter or Escape settles the edit before the blur its\n // unmount may raise, so the blur never commits a second time.\n const [editing, setEditing] = useState(false);\n const [draft, setDraft] = useState('');\n const settledRef = useRef(false);\n const inputRef = useRef<HTMLInputElement | null>(null);\n useEffect(() => {\n if (!editing) return;\n inputRef.current?.focus();\n inputRef.current?.select();\n }, [editing]);\n const beginRename = (event: MouseEvent) => {\n event.stopPropagation();\n if (renamePending) return;\n settledRef.current = false;\n setDraft(thread.title ?? '');\n setEditing(true);\n };\n const commitRename = () => {\n if (settledRef.current) return;\n settledRef.current = true;\n setEditing(false);\n const next = draft.trim();\n if (!next || next === (thread.title ?? '').trim()) return;\n onRename?.({ threadId: thread.id, title: next });\n };\n const cancelRename = () => {\n settledRef.current = true;\n setEditing(false);\n };\n const handleEditorKeyDown = (event: KeyboardEvent<HTMLInputElement>) => {\n if (event.key === 'Enter') {\n event.preventDefault();\n commitRename();\n } else if (event.key === 'Escape') {\n event.preventDefault();\n event.stopPropagation();\n cancelRename();\n }\n };\n\n const handleArchive = (event: MouseEvent) => {\n event.stopPropagation();\n if (archivePending) return;\n onArchive?.(thread.id);\n };\n\n const hasActions = Boolean(onRename || onToggleFavorite || onArchive);\n const body = (\n <>\n <SessionStatusIndicator kind={indicator} />\n <span className=\"min-w-0 flex-1\">\n <span className=\"flex h-5 items-center gap-1.5\">\n {editing ? (\n <input\n ref={inputRef}\n type=\"text\"\n value={draft}\n maxLength={THREAD_TITLE_MAX_LENGTH}\n aria-label=\"Session title\"\n data-rename-input\n onChange={(event: ChangeEvent<HTMLInputElement>) => setDraft(event.target.value)}\n onKeyDown={handleEditorKeyDown}\n onBlur={commitRename}\n onClick={stopPropagation}\n className={cn(\n 'h-5 min-w-0 flex-1 rounded border border-primary/60 bg-background px-1 font-medium text-foreground text-sm',\n FOCUS_RING_CLASS,\n )}\n />\n ) : (\n <span data-title className=\"min-w-0 truncate font-medium text-sm\">\n {title}\n </span>\n )}\n {thread.isFavorited && !onToggleFavorite ? (\n <PinIcon\n role=\"img\"\n aria-label=\"Pinned\"\n className=\"size-3 shrink-0 fill-current text-muted-foreground\"\n />\n ) : null}\n {origin ? (\n <span\n data-origin={origin}\n className=\"shrink-0 rounded-full border border-border/60 px-1.5 py-px text-[10px] text-muted-foreground\"\n >\n {origin}\n </span>\n ) : null}\n </span>\n <span\n data-line={line.kind}\n className={cn('mt-0.5 block h-4 truncate font-normal text-xs leading-4', LINE_TONE_CLASS[line.tone])}\n >\n {line.text}\n </span>\n </span>\n </>\n );\n\n return (\n <li\n data-active={isActive || undefined}\n data-thread-id={thread.id}\n data-editing={editing || undefined}\n onPointerEnter={handlePointerEnter}\n onPointerLeave={cancelHover}\n className={cn(\n 'group relative flex items-start gap-1 rounded-lg text-muted-foreground transition-colors hover:bg-muted/40 hover:text-foreground',\n isActive && 'bg-muted text-foreground',\n )}\n >\n {isActive ? (\n <span\n aria-hidden=\"true\"\n data-active-accent\n className=\"absolute inset-y-2 left-0 w-0.5 rounded-full bg-primary\"\n />\n ) : null}\n {editing ? (\n <div className=\"flex min-w-0 flex-1 items-start gap-2 p-2 pl-3 text-left\">{body}</div>\n ) : (\n <button\n type=\"button\"\n onClick={() => onSelect(thread.id)}\n onFocus={handleFocus}\n className={cn(\n 'flex min-w-0 flex-1 cursor-pointer items-start gap-2 rounded-lg p-2 pl-3 text-left',\n FOCUS_RING_CLASS,\n )}\n >\n {body}\n </button>\n )}\n {chip || hasActions ? (\n <div className=\"flex shrink-0 flex-col items-end justify-between gap-0.5 py-2 pr-2\">\n {hasActions ? (\n <div data-row-actions className=\"flex h-5 items-center gap-0.5\">\n {onRename ? (\n <RowActionButton\n label=\"Rename session\"\n onClick={beginRename}\n pending={renamePending}\n alwaysVisible={false}\n action=\"rename\"\n >\n <PencilIcon className=\"size-3.5\" aria-hidden />\n </RowActionButton>\n ) : null}\n {onToggleFavorite ? (\n <PinToggle thread={thread} pending={favoritePending} onToggle={onToggleFavorite} />\n ) : null}\n {onArchive ? (\n <RowActionButton\n label=\"Archive session\"\n onClick={handleArchive}\n pending={archivePending}\n alwaysVisible={false}\n action=\"archive\"\n >\n <ArchiveIcon className=\"size-3.5\" aria-hidden />\n </RowActionButton>\n ) : null}\n </div>\n ) : (\n <span aria-hidden=\"true\" className=\"h-5\" />\n )}\n {chip ? <PullRequestChip chip={chip} pullRequests={thread.pullRequests ?? []} /> : null}\n </div>\n ) : null}\n </li>\n );\n};\n\n/**\n * Devin-style session list: the `ThreadList` rows with an attention\n * indicator, the server's next action, pull-request chips, an origin badge\n * and a trailing action cluster (rename inline, pin, archive) revealed on\n * hover or focus, grouped by what each session asks of the viewer. Reads the\n * thread-list state that `<AthenaProvider enableThreadList>` provides and\n * renders nothing outside that mode.\n *\n * Every write is optimistic and rolls back on failure: the pin flips the row\n * and moves it between `Pinned` and `Recent`; the rename shows the new title\n * on commit; the archive removes the row. On a backend that predates a route\n * the matching action is withdrawn (`favoriteToggleAvailable` falls back to a\n * read-only pin; `renameAvailable` / `archiveAvailable` hide the action).\n *\n * Rows warm the provider's snapshot cache after a 120 ms hover dwell (and on\n * focus) so a selection paints its transcript at once. Skeleton rows stand in\n * while the first page loads or a refresh has nothing to keep; the empty\n * state appears only after a settled empty answer, and a background refresh\n * never blanks the rows it already has.\n */\nexport function SessionList({\n className,\n grouped = true,\n showSearch = true,\n showPinToggle = true,\n showRename = true,\n showArchive = true,\n prefetchOnHover = true,\n}: SessionListProps) {\n const list = useAthenaStatewireThreadList();\n if (!list) return null;\n\n const sections = groupSessions(list.threads, grouped);\n const hasSearch = list.search.trim().length > 0;\n const handleSearch = (event: ChangeEvent<HTMLInputElement>) =>\n list.setSearch(event.target.value);\n const onToggleFavorite =\n showPinToggle && list.favoriteToggleAvailable ? list.setFavorited : undefined;\n const onRename = showRename && list.renameAvailable ? list.renameThread : undefined;\n const onArchive = showArchive && list.archiveAvailable ? list.archiveThread : undefined;\n const onPrefetch = prefetchOnHover ? list.prefetchThread : undefined;\n // Skeleton until the first page has answered (no credential yet, or the\n // page in flight) and for a refresh with no rows to keep; a refresh that\n // has rows keeps showing them.\n const showSkeleton =\n !list.hasResolvedFirstPage || (list.isFetching && list.threads.length === 0);\n\n return (\n <div\n className={cn('athena-sdk-chrome flex flex-col gap-2', className)}\n data-testid=\"session-list\"\n >\n <div className=\"flex items-center gap-1\">\n <button\n type=\"button\"\n onClick={list.newThread}\n className={cn(\n 'flex h-9 flex-1 items-center gap-2 rounded-lg border border-border/60 px-3 font-medium text-muted-foreground text-sm transition-colors hover:bg-muted hover:text-foreground',\n FOCUS_RING_CLASS,\n )}\n >\n <PlusIcon className=\"size-4\" />\n New Chat\n </button>\n <button\n type=\"button\"\n onClick={list.refresh}\n disabled={list.isFetching}\n className={cn(\n 'flex size-9 items-center justify-center rounded-lg border border-border/60 text-muted-foreground transition-colors hover:bg-muted hover:text-foreground disabled:opacity-50',\n FOCUS_RING_CLASS,\n )}\n title=\"Refresh sessions\"\n aria-label=\"Refresh sessions\"\n >\n <RefreshCwIcon className={cn('size-4', list.isFetching && 'animate-spin')} />\n </button>\n </div>\n\n {showSearch ? (\n <label className=\"relative block\">\n <SearchIcon className=\"pointer-events-none absolute top-1/2 left-2.5 size-3.5 -translate-y-1/2 text-muted-foreground\" />\n <span className=\"sr-only\">Search sessions</span>\n <input\n type=\"search\"\n value={list.search}\n onChange={handleSearch}\n placeholder=\"Search sessions…\"\n className=\"h-8 w-full rounded-lg border border-border/60 bg-muted/40 pr-2 pl-8 text-sm outline-none focus:border-primary focus:bg-background\"\n />\n </label>\n ) : null}\n\n {showSkeleton ? (\n <SessionListSkeleton />\n ) : sections.length === 0 ? (\n <p data-testid=\"session-list-empty\" className=\"px-3 py-4 text-muted-foreground text-xs\">\n {hasSearch ? 'No matching sessions.' : 'No sessions yet.'}\n </p>\n ) : (\n <div className=\"flex flex-col gap-2\" aria-busy={list.isFetching || undefined}>\n {sections.map(({ group, items }) => (\n <section\n key={group ?? 'all'}\n aria-label={group ?? 'Sessions'}\n data-group={group ?? undefined}\n >\n {group ? (\n <h3 className=\"px-3 pb-1 font-medium text-[11px] text-muted-foreground/70 uppercase tracking-wide\">\n {group}\n </h3>\n ) : null}\n <ul className=\"flex flex-col gap-0.5\">\n {items.map((thread) => (\n <SessionRow\n key={thread.id}\n thread={thread}\n isActive={thread.id === list.activeThreadId}\n onSelect={list.selectThread}\n onPrefetch={onPrefetch}\n onToggleFavorite={onToggleFavorite}\n favoritePending={list.favoritePendingThreadIds.has(thread.id)}\n onRename={onRename}\n renamePending={list.renamePendingThreadIds.has(thread.id)}\n onArchive={onArchive}\n archivePending={list.archivePendingThreadIds.has(thread.id)}\n />\n ))}\n </ul>\n </section>\n ))}\n </div>\n )}\n\n {list.hasNextPage && !showSkeleton ? (\n <button\n type=\"button\"\n disabled={list.isFetchingNextPage}\n onClick={list.fetchNextPage}\n className={cn(\n 'w-full rounded-lg py-2 text-muted-foreground text-xs transition-colors hover:bg-muted disabled:opacity-50',\n FOCUS_RING_CLASS,\n )}\n >\n {list.isFetchingNextPage ? 'Loading…' : 'Load more'}\n </button>\n ) : null}\n </div>\n );\n}\n"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"SessionList.js","sources":["../../src/threads/SessionList.tsx"],"sourcesContent":["import {\n ArchiveIcon,\n ClockIcon,\n LoaderCircleIcon,\n PencilIcon,\n PinIcon,\n PlusIcon,\n SquareArrowOutUpRightIcon,\n RefreshCwIcon,\n SearchIcon,\n} from 'lucide-react';\nimport type { ChangeEvent, FC, KeyboardEvent, MouseEvent, ReactNode } from 'react';\nimport { useCallback, useEffect, useRef, useState } from 'react';\nimport { cn } from '../lib/utils';\nimport { THREAD_TITLE_MAX_LENGTH } from './api';\nimport {\n groupSessions,\n pullRequestChip,\n type SessionIndicator as SessionIndicatorKind,\n type SessionLineTone,\n type SessionOriginBadges,\n sessionIndicator,\n sessionOriginBadge,\n sessionSecondaryLine,\n} from './session-list-model';\nimport { FOCUS_RING_CLASS, PullRequestChip, stopPropagation } from './session-row-parts';\nimport {\n type AthenaStatewireThreadSummary,\n useAthenaStatewireThreadList,\n} from './statewire-thread-list';\nimport { THREAD_PREFETCH_HOVER_DELAY_MS } from './thread-prefetcher';\nimport type { ThreadFavoriteTarget } from './use-thread-favorite';\nimport type { ThreadRenameTarget } from './use-thread-rename';\n\nexport interface SessionListProps {\n className?: string;\n /**\n * Group rows under \"Needs you\" / \"Working\" / \"Pinned\" / \"Recent\" (default\n * `true`); a session appears once, in the first group that applies. `false`\n * renders one newest-first list.\n */\n grouped?: boolean;\n /** Show the title search box, wired to the server-side `search` (default `true`). */\n showSearch?: boolean;\n /**\n * Show the \"New Chat\" and refresh buttons above the rows (default `true`).\n * `false` for a host that places its own new-session control.\n */\n showNewChat?: boolean;\n /**\n * Which rows carry an origin badge (Athena, Slack, GitHub, Chrome …):\n * `all` (default); `external`, every origin but the web app, so sessions\n * started in a browser tab of the app carry none; or `none`.\n */\n originBadges?: SessionOriginBadges;\n /**\n * Offer the pin toggle on each row (default `true`). `false` — or a backend\n * without the favorite route — shows a pinned row's pin read-only instead.\n */\n showPinToggle?: boolean;\n /**\n * Offer the inline rename on each row (default `true`). Withdrawn on a\n * backend without the rename route (`renameAvailable`).\n */\n showRename?: boolean;\n /**\n * Offer the archive action on each row (default `true`). Withdrawn on a\n * backend without the archive route (`archiveAvailable`).\n */\n showArchive?: boolean;\n /**\n * Warm the provider's snapshot cache for a row after a 120 ms hover dwell\n * and on row focus (default `true`), so selecting it paints at once.\n */\n prefetchOnHover?: boolean;\n /**\n * Open a session somewhere other than the provider's chat (a host showing\n * several chats side by side): each row offers \"Open in new tab\", and a\n * ⌘-click (Ctrl-click) or middle-click on it opens it there instead of\n * selecting it. Absent, rows only select.\n */\n onOpenInNewTab?: (target: SessionOpenTarget) => void;\n}\n\n/** The session a row hands `SessionListProps.onOpenInNewTab`. */\nexport interface SessionOpenTarget {\n threadId: string;\n /** The row's title, `null` while the session has none. */\n title: string | null;\n}\n\nconst INDICATOR_LABEL: Record<NonNullable<SessionIndicatorKind>, string> = {\n needs_you: 'Needs you',\n working: 'Working',\n unread: 'Unread',\n watching: 'Watching',\n};\n\n/**\n * The row's status indicator; an empty spacer keeps titles aligned when a\n * row has none.\n */\nconst SessionStatusIndicator: FC<{ kind: SessionIndicatorKind }> = ({ kind }) => {\n if (kind === null) return <span aria-hidden=\"true\" className=\"mt-0.5 size-4 shrink-0\" />;\n const label = INDICATOR_LABEL[kind];\n if (kind === 'working') {\n return (\n <LoaderCircleIcon\n role=\"img\"\n aria-label={label}\n data-indicator={kind}\n className=\"mt-0.5 size-4 shrink-0 animate-spin text-primary\"\n />\n );\n }\n if (kind === 'watching') {\n return (\n <ClockIcon\n role=\"img\"\n aria-label={label}\n data-indicator={kind}\n className=\"mt-0.5 size-4 shrink-0 text-muted-foreground\"\n />\n );\n }\n return (\n <span\n role=\"img\"\n aria-label={label}\n data-indicator={kind}\n className=\"mt-0.5 flex size-4 shrink-0 items-center justify-center\"\n >\n <span\n className={cn(\n 'size-2 rounded-full',\n kind === 'needs_you' ? 'bg-orange-500' : 'bg-primary',\n )}\n />\n </span>\n );\n};\n\nconst LINE_TONE_CLASS: Record<SessionLineTone, string> = {\n needs_you: 'text-orange-600',\n ready: 'text-green-600',\n error: 'text-red-600',\n muted: 'text-muted-foreground',\n};\n\n/**\n * One action in the row's trailing cluster: a sibling of the row control\n * (never nested in it — a click must not select the row), labelled for\n * assistive technology, revealed on hover or focus unless `alwaysVisible`,\n * and disabled while its write is in flight so one row never has two writes\n * racing.\n */\nconst RowActionButton: FC<{\n label: string;\n onClick: (event: MouseEvent<HTMLButtonElement>) => void;\n pending: boolean;\n alwaysVisible: boolean;\n action: string;\n pressed?: boolean;\n children: ReactNode;\n}> = ({ label, onClick, pending, alwaysVisible, action, pressed, children }) => (\n <button\n type=\"button\"\n onClick={onClick}\n disabled={pending}\n aria-busy={pending || undefined}\n aria-pressed={pressed}\n aria-label={label}\n title={label}\n data-action={action}\n data-pending={pending || undefined}\n className={cn(\n 'rounded p-1 text-muted-foreground transition-colors hover:bg-muted hover:text-foreground disabled:cursor-wait disabled:opacity-60',\n FOCUS_RING_CLASS,\n !alwaysVisible &&\n !pending &&\n 'opacity-0 focus-visible:opacity-100 group-focus-within:opacity-100 group-hover:opacity-100',\n )}\n >\n {children}\n </button>\n);\n\n/**\n * The pin toggle: pressed while the session is pinned (and then always\n * visible); otherwise an outline pin revealed on hover or focus so an\n * unpinned row stays quiet.\n */\nconst PinToggle: FC<{\n thread: Pick<AthenaStatewireThreadSummary, 'id' | 'isFavorited'>;\n pending: boolean;\n onToggle: (target: ThreadFavoriteTarget) => void;\n}> = ({ thread, pending, onToggle }) => {\n const label = thread.isFavorited ? 'Unpin session' : 'Pin session';\n const handleClick = (event: MouseEvent) => {\n event.stopPropagation();\n if (pending) return;\n onToggle({ threadId: thread.id, isFavorited: !thread.isFavorited });\n };\n return (\n <span data-pin-toggle={thread.isFavorited ? 'pinned' : 'unpinned'} className=\"contents\">\n <RowActionButton\n label={label}\n onClick={handleClick}\n pending={pending}\n alwaysVisible={thread.isFavorited}\n action=\"pin\"\n pressed={thread.isFavorited}\n >\n <PinIcon className={cn('size-3.5', thread.isFavorited && 'fill-current')} aria-hidden />\n </RowActionButton>\n </span>\n );\n};\n\nconst SKELETON_TITLE_WIDTHS = ['w-3/5', 'w-4/5', 'w-1/2', 'w-2/3'] as const;\n\n/**\n * Placeholder rows shaped like session rows (indicator, title line, meta\n * line) for the first page and for a refresh that has no rows to keep yet.\n */\nexport const SessionListSkeleton: FC<{ rows?: number }> = ({ rows = 4 }) => (\n <div\n role=\"status\"\n aria-busy=\"true\"\n aria-label=\"Loading sessions\"\n data-testid=\"session-list-skeleton\"\n className=\"flex flex-col gap-0.5\"\n >\n {Array.from({ length: rows }, (_, index) => (\n <div key={index} aria-hidden=\"true\" className=\"flex items-start gap-2 px-3 py-2\">\n <span className=\"mt-0.5 size-4 shrink-0 animate-pulse rounded-full bg-muted\" />\n <span className=\"min-w-0 flex-1\">\n <span className=\"flex h-5 items-center\">\n <span\n className={cn(\n 'h-3.5 animate-pulse rounded bg-muted',\n SKELETON_TITLE_WIDTHS[index % SKELETON_TITLE_WIDTHS.length],\n )}\n />\n </span>\n <span className=\"mt-0.5 flex h-4 items-center\">\n <span className=\"h-3 w-1/3 animate-pulse rounded bg-muted/70\" />\n </span>\n </span>\n </div>\n ))}\n </div>\n);\n\nconst SessionRow: FC<{\n thread: AthenaStatewireThreadSummary;\n isActive: boolean;\n onSelect: (threadId: string) => void;\n /** Absent when hover prefetching is off or the provider has no snapshot cache to warm. */\n onPrefetch: ((threadId: string) => void) | undefined;\n /** Absent when the toggle is not offered: a pinned row then shows a read-only pin. */\n onToggleFavorite: ((target: ThreadFavoriteTarget) => void) | undefined;\n /** True while this session's pin write is in flight. */\n favoritePending: boolean;\n /** Absent when the rename is not offered (host opt-out, or a backend without the route). */\n onRename: ((target: ThreadRenameTarget) => void) | undefined;\n renamePending: boolean;\n /** Absent when the archive is not offered (host opt-out, or a backend without the route). */\n onArchive: ((threadId: string) => void) | undefined;\n archivePending: boolean;\n /** Absent when the host offers no other place to open a session. */\n onOpenInNewTab: ((target: SessionOpenTarget) => void) | undefined;\n originBadges: SessionOriginBadges;\n}> = ({\n thread,\n isActive,\n onSelect,\n onPrefetch,\n onToggleFavorite,\n favoritePending,\n onRename,\n renamePending,\n onArchive,\n archivePending,\n onOpenInNewTab,\n originBadges,\n}) => {\n const indicator = sessionIndicator(thread);\n const line = sessionSecondaryLine(thread);\n const chip = pullRequestChip(thread.pullRequests);\n const origin = sessionOriginBadge(thread, originBadges);\n const title = thread.title ?? 'Untitled';\n\n // Hover prefetch: the pointer must rest on the row for the dwell before\n // the fetch starts, so sweeping the pointer down the list fetches nothing.\n const hoverTimerRef = useRef<ReturnType<typeof setTimeout> | null>(null);\n const cancelHover = useCallback(() => {\n if (hoverTimerRef.current === null) return;\n clearTimeout(hoverTimerRef.current);\n hoverTimerRef.current = null;\n }, []);\n useEffect(() => cancelHover, [cancelHover]);\n const handlePointerEnter = () => {\n if (!onPrefetch) return;\n cancelHover();\n hoverTimerRef.current = setTimeout(() => {\n hoverTimerRef.current = null;\n onPrefetch(thread.id);\n }, THREAD_PREFETCH_HOVER_DELAY_MS);\n };\n const handleFocus = () => {\n cancelHover();\n onPrefetch?.(thread.id);\n };\n\n // Inline rename: the title becomes an input; Enter commits, Escape cancels,\n // blur commits. An Enter or Escape settles the edit before the blur its\n // unmount may raise, so the blur never commits a second time.\n const [editing, setEditing] = useState(false);\n const [draft, setDraft] = useState('');\n const settledRef = useRef(false);\n const inputRef = useRef<HTMLInputElement | null>(null);\n useEffect(() => {\n if (!editing) return;\n inputRef.current?.focus();\n inputRef.current?.select();\n }, [editing]);\n const beginRename = (event: MouseEvent) => {\n event.stopPropagation();\n if (renamePending) return;\n settledRef.current = false;\n setDraft(thread.title ?? '');\n setEditing(true);\n };\n const commitRename = () => {\n if (settledRef.current) return;\n settledRef.current = true;\n setEditing(false);\n const next = draft.trim();\n if (!next || next === (thread.title ?? '').trim()) return;\n onRename?.({ threadId: thread.id, title: next });\n };\n const cancelRename = () => {\n settledRef.current = true;\n setEditing(false);\n };\n const handleEditorKeyDown = (event: KeyboardEvent<HTMLInputElement>) => {\n if (event.key === 'Enter') {\n event.preventDefault();\n commitRename();\n } else if (event.key === 'Escape') {\n event.preventDefault();\n event.stopPropagation();\n cancelRename();\n }\n };\n\n const handleArchive = (event: MouseEvent) => {\n event.stopPropagation();\n if (archivePending) return;\n onArchive?.(thread.id);\n };\n\n const openInNewTab = (event: MouseEvent) => {\n event.preventDefault();\n event.stopPropagation();\n onOpenInNewTab?.({ threadId: thread.id, title: thread.title });\n };\n // A ⌘-click (Ctrl-click) opens the row elsewhere, as a browser opens a link in a new tab.\n const handleRowClick = (event: MouseEvent) => {\n if (onOpenInNewTab && (event.metaKey || event.ctrlKey)) {\n openInNewTab(event);\n return;\n }\n onSelect(thread.id);\n };\n const handleRowAuxClick = (event: MouseEvent) => {\n if (onOpenInNewTab && event.button === 1) openInNewTab(event);\n };\n\n const hasActions = Boolean(onRename || onToggleFavorite || onArchive || onOpenInNewTab);\n const body = (\n <>\n <SessionStatusIndicator kind={indicator} />\n <span className=\"min-w-0 flex-1\">\n <span className=\"flex h-5 items-center gap-1.5\">\n {editing ? (\n <input\n ref={inputRef}\n type=\"text\"\n value={draft}\n maxLength={THREAD_TITLE_MAX_LENGTH}\n aria-label=\"Session title\"\n data-rename-input\n onChange={(event: ChangeEvent<HTMLInputElement>) => setDraft(event.target.value)}\n onKeyDown={handleEditorKeyDown}\n onBlur={commitRename}\n onClick={stopPropagation}\n className={cn(\n 'h-5 min-w-0 flex-1 rounded border border-primary/60 bg-background px-1 font-medium text-foreground text-sm',\n FOCUS_RING_CLASS,\n )}\n />\n ) : (\n <span data-title className=\"min-w-0 truncate font-medium text-sm\">\n {title}\n </span>\n )}\n {thread.isFavorited && !onToggleFavorite ? (\n <PinIcon\n role=\"img\"\n aria-label=\"Pinned\"\n className=\"size-3 shrink-0 fill-current text-muted-foreground\"\n />\n ) : null}\n {origin ? (\n <span\n data-origin={origin}\n className=\"shrink-0 rounded-full border border-border/60 px-1.5 py-px text-[10px] text-muted-foreground\"\n >\n {origin}\n </span>\n ) : null}\n </span>\n <span\n data-line={line.kind}\n className={cn('mt-0.5 block h-4 truncate font-normal text-xs leading-4', LINE_TONE_CLASS[line.tone])}\n >\n {line.text}\n </span>\n </span>\n </>\n );\n\n return (\n <li\n data-active={isActive || undefined}\n data-thread-id={thread.id}\n data-editing={editing || undefined}\n onPointerEnter={handlePointerEnter}\n onPointerLeave={cancelHover}\n className={cn(\n 'group relative flex items-start gap-1 rounded-lg text-muted-foreground transition-colors hover:bg-muted/40 hover:text-foreground',\n isActive && 'bg-muted text-foreground',\n )}\n >\n {isActive ? (\n <span\n aria-hidden=\"true\"\n data-active-accent\n className=\"absolute inset-y-2 left-0 w-0.5 rounded-full bg-primary\"\n />\n ) : null}\n {editing ? (\n <div className=\"flex min-w-0 flex-1 items-start gap-2 p-2 pl-3 text-left\">{body}</div>\n ) : (\n <button\n type=\"button\"\n onClick={handleRowClick}\n onAuxClick={handleRowAuxClick}\n onFocus={handleFocus}\n className={cn(\n 'flex min-w-0 flex-1 cursor-pointer items-start gap-2 rounded-lg p-2 pl-3 text-left',\n FOCUS_RING_CLASS,\n )}\n >\n {body}\n </button>\n )}\n {chip || hasActions ? (\n <div className=\"flex shrink-0 flex-col items-end justify-between gap-0.5 py-2 pr-2\">\n {hasActions ? (\n <div data-row-actions className=\"flex h-5 items-center gap-0.5\">\n {onOpenInNewTab ? (\n <RowActionButton\n label=\"Open in new tab\"\n onClick={openInNewTab}\n pending={false}\n alwaysVisible={false}\n action=\"open-in-new-tab\"\n >\n <SquareArrowOutUpRightIcon className=\"size-3.5\" aria-hidden />\n </RowActionButton>\n ) : null}\n {onRename ? (\n <RowActionButton\n label=\"Rename session\"\n onClick={beginRename}\n pending={renamePending}\n alwaysVisible={false}\n action=\"rename\"\n >\n <PencilIcon className=\"size-3.5\" aria-hidden />\n </RowActionButton>\n ) : null}\n {onToggleFavorite ? (\n <PinToggle thread={thread} pending={favoritePending} onToggle={onToggleFavorite} />\n ) : null}\n {onArchive ? (\n <RowActionButton\n label=\"Archive session\"\n onClick={handleArchive}\n pending={archivePending}\n alwaysVisible={false}\n action=\"archive\"\n >\n <ArchiveIcon className=\"size-3.5\" aria-hidden />\n </RowActionButton>\n ) : null}\n </div>\n ) : (\n <span aria-hidden=\"true\" className=\"h-5\" />\n )}\n {chip ? <PullRequestChip chip={chip} pullRequests={thread.pullRequests ?? []} /> : null}\n </div>\n ) : null}\n </li>\n );\n};\n\n/**\n * Devin-style session list: the `ThreadList` rows with an attention\n * indicator, the server's next action, pull-request chips, an origin badge\n * and a trailing action cluster (rename inline, pin, archive) revealed on\n * hover or focus, grouped by what each session asks of the viewer. Reads the\n * thread-list state that `<AthenaProvider enableThreadList>` provides and\n * renders nothing outside that mode.\n *\n * Every write is optimistic and rolls back on failure: the pin flips the row\n * and moves it between `Pinned` and `Recent`; the rename shows the new title\n * on commit; the archive removes the row. On a backend that predates a route\n * the matching action is withdrawn (`favoriteToggleAvailable` falls back to a\n * read-only pin; `renameAvailable` / `archiveAvailable` hide the action).\n *\n * Rows warm the provider's snapshot cache after a 120 ms hover dwell (and on\n * focus) so a selection paints its transcript at once. Skeleton rows stand in\n * while the first page loads or a refresh has nothing to keep; the empty\n * state appears only after a settled empty answer, and a background refresh\n * never blanks the rows it already has.\n */\nexport function SessionList({\n className,\n grouped = true,\n showSearch = true,\n showNewChat = true,\n originBadges = 'all',\n showPinToggle = true,\n showRename = true,\n showArchive = true,\n prefetchOnHover = true,\n onOpenInNewTab,\n}: SessionListProps) {\n const list = useAthenaStatewireThreadList();\n if (!list) return null;\n\n const sections = groupSessions(list.threads, grouped);\n const hasSearch = list.search.trim().length > 0;\n const handleSearch = (event: ChangeEvent<HTMLInputElement>) =>\n list.setSearch(event.target.value);\n const onToggleFavorite =\n showPinToggle && list.favoriteToggleAvailable ? list.setFavorited : undefined;\n const onRename = showRename && list.renameAvailable ? list.renameThread : undefined;\n const onArchive = showArchive && list.archiveAvailable ? list.archiveThread : undefined;\n const onPrefetch = prefetchOnHover ? list.prefetchThread : undefined;\n // Skeleton until the first page has answered (no credential yet, or the\n // page in flight) and for a refresh with no rows to keep; a refresh that\n // has rows keeps showing them.\n const showSkeleton =\n !list.hasResolvedFirstPage || (list.isFetching && list.threads.length === 0);\n\n return (\n <div\n className={cn('athena-sdk-chrome flex flex-col gap-2', className)}\n data-testid=\"session-list\"\n >\n {showNewChat ? (\n <div className=\"flex items-center gap-1\">\n <button\n type=\"button\"\n onClick={list.newThread}\n className={cn(\n 'flex h-9 flex-1 items-center gap-2 rounded-lg border border-border/60 px-3 font-medium text-muted-foreground text-sm transition-colors hover:bg-muted hover:text-foreground',\n FOCUS_RING_CLASS,\n )}\n >\n <PlusIcon className=\"size-4\" />\n New Chat\n </button>\n <button\n type=\"button\"\n onClick={list.refresh}\n disabled={list.isFetching}\n className={cn(\n 'flex size-9 items-center justify-center rounded-lg border border-border/60 text-muted-foreground transition-colors hover:bg-muted hover:text-foreground disabled:opacity-50',\n FOCUS_RING_CLASS,\n )}\n title=\"Refresh sessions\"\n aria-label=\"Refresh sessions\"\n >\n <RefreshCwIcon className={cn('size-4', list.isFetching && 'animate-spin')} />\n </button>\n </div>\n ) : null}\n\n {showSearch ? (\n <label className=\"relative block\">\n <SearchIcon className=\"pointer-events-none absolute top-1/2 left-2.5 size-3.5 -translate-y-1/2 text-muted-foreground\" />\n <span className=\"sr-only\">Search sessions</span>\n <input\n type=\"search\"\n value={list.search}\n onChange={handleSearch}\n placeholder=\"Search sessions…\"\n className=\"h-8 w-full rounded-lg border border-border/60 bg-muted/40 pr-2 pl-8 text-sm outline-none focus:border-primary focus:bg-background\"\n />\n </label>\n ) : null}\n\n {showSkeleton ? (\n <SessionListSkeleton />\n ) : sections.length === 0 ? (\n <p data-testid=\"session-list-empty\" className=\"px-3 py-4 text-muted-foreground text-xs\">\n {hasSearch ? 'No matching sessions.' : 'No sessions yet.'}\n </p>\n ) : (\n <div className=\"flex flex-col gap-2\" aria-busy={list.isFetching || undefined}>\n {sections.map(({ group, items }) => (\n <section\n key={group ?? 'all'}\n aria-label={group ?? 'Sessions'}\n data-group={group ?? undefined}\n >\n {group ? (\n <h3 className=\"px-3 pb-1 font-medium text-[11px] text-muted-foreground/70 uppercase tracking-wide\">\n {group}\n </h3>\n ) : null}\n <ul className=\"flex flex-col gap-0.5\">\n {items.map((thread) => (\n <SessionRow\n key={thread.id}\n thread={thread}\n isActive={thread.id === list.activeThreadId}\n onSelect={list.selectThread}\n onPrefetch={onPrefetch}\n onToggleFavorite={onToggleFavorite}\n favoritePending={list.favoritePendingThreadIds.has(thread.id)}\n onRename={onRename}\n renamePending={list.renamePendingThreadIds.has(thread.id)}\n onArchive={onArchive}\n archivePending={list.archivePendingThreadIds.has(thread.id)}\n onOpenInNewTab={onOpenInNewTab}\n originBadges={originBadges}\n />\n ))}\n </ul>\n </section>\n ))}\n </div>\n )}\n\n {list.hasNextPage && !showSkeleton ? (\n <button\n type=\"button\"\n disabled={list.isFetchingNextPage}\n onClick={list.fetchNextPage}\n className={cn(\n 'w-full rounded-lg py-2 text-muted-foreground text-xs transition-colors hover:bg-muted disabled:opacity-50',\n FOCUS_RING_CLASS,\n )}\n >\n {list.isFetchingNextPage ? 'Loading…' : 'Load more'}\n </button>\n ) : null}\n </div>\n );\n}\n"],"names":[],"mappings":"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"}
|