@athenaintel/react 0.28.1 → 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 +10 -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 +10 -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 +279 -3
- package/dist/agent-runtime/src/tool-metadata.cjs.map +1 -0
- package/dist/{packages/agent-runtime → agent-runtime}/src/tool-metadata.js +279 -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 +37 -95
- package/dist/tools/tool-uis.cjs.map +1 -1
- package/dist/tools/tool-uis.js +37 -95
- 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
|
@@ -0,0 +1,378 @@
|
|
|
1
|
+
import { jsx, jsxs, Fragment } from "react/jsx-runtime";
|
|
2
|
+
import { useAuiState } from "@assistant-ui/react";
|
|
3
|
+
import { QueryClientProvider, useQueryClient } from "@tanstack/react-query";
|
|
4
|
+
import { LayersIcon, PanelRightOpenIcon, XIcon, Minimize2Icon, Maximize2Icon, PanelRightCloseIcon, PlusIcon, SearchIcon } from "lucide-react";
|
|
5
|
+
import { useState, useContext, useMemo, useRef, useEffect, useReducer, useId } from "react";
|
|
6
|
+
import { useAssetPanelStore } from "../assets/asset-panel-store.js";
|
|
7
|
+
import { AssetPanel } from "../assets/AssetPanel.js";
|
|
8
|
+
import { useAthenaQueryClient } from "../lib/use-athena-rest-query.js";
|
|
9
|
+
import { useAthenaStatewireThreadList } from "../threads/statewire-thread-list.js";
|
|
10
|
+
import { AthenaStatewireThreadIdContext } from "../threads/thread-id-context.js";
|
|
11
|
+
import { Popover, PopoverTrigger, PopoverContent } from "../ui/popover.js";
|
|
12
|
+
import { SessionWorkbenchContext } from "./session-workbench-context.js";
|
|
13
|
+
import { workbenchTabsReducer, visibleThreadTabs, threadTabs, filterWorkbenchPanes } from "./session-workbench-model.js";
|
|
14
|
+
import { DEFAULT_SESSION_WORKBENCH_PANES, DEFAULT_SESSION_WORKBENCH_OPEN_PANE_IDS } from "./session-workbench-panes.js";
|
|
15
|
+
import { SESSION_WORKSPACE_QUERY_KEY } from "./use-session-workspace.js";
|
|
16
|
+
import { useWorkbenchLayout } from "./workbench-layout-context.js";
|
|
17
|
+
import { readDeepAgentStreamValues } from "../agent-runtime/src/statewire-state.js";
|
|
18
|
+
import { cn } from "cnfast";
|
|
19
|
+
const SESSION_WORKBENCH_ASSETS_PANE_ID = "open-assets";
|
|
20
|
+
const OPEN_ASSETS_PANE = {
|
|
21
|
+
id: SESSION_WORKBENCH_ASSETS_PANE_ID,
|
|
22
|
+
title: "Open assets",
|
|
23
|
+
description: "The documents, sheets and decks open in this session",
|
|
24
|
+
icon: LayersIcon,
|
|
25
|
+
render: () => /* @__PURE__ */ jsx(AssetPanel, { manageAssetPanelHostRegistration: false })
|
|
26
|
+
};
|
|
27
|
+
const ICON_BUTTON_CLASS = "inline-flex size-7 shrink-0 items-center justify-center rounded-md text-muted-foreground transition-colors hover:bg-muted hover:text-foreground outline-none focus-visible:ring-2 focus-visible:ring-ring/60";
|
|
28
|
+
const SessionWorkbench = (props) => {
|
|
29
|
+
const queryClient = useAthenaQueryClient();
|
|
30
|
+
return /* @__PURE__ */ jsx(QueryClientProvider, { client: queryClient, children: /* @__PURE__ */ jsx(SessionWorkbenchInner, { ...props }) });
|
|
31
|
+
};
|
|
32
|
+
const SessionWorkbenchInner = ({
|
|
33
|
+
panes = DEFAULT_SESSION_WORKBENCH_PANES,
|
|
34
|
+
defaultOpenPaneIds = DEFAULT_SESSION_WORKBENCH_OPEN_PANE_IDS,
|
|
35
|
+
className
|
|
36
|
+
}) => {
|
|
37
|
+
const layout = useWorkbenchLayout();
|
|
38
|
+
const [ownCollapsed, setOwnCollapsed] = useState(false);
|
|
39
|
+
const collapsed = layout ? layout.collapsed : ownCollapsed;
|
|
40
|
+
const setCollapsed = layout ? layout.setCollapsed : setOwnCollapsed;
|
|
41
|
+
const maximized = (layout == null ? void 0 : layout.maximized) ?? false;
|
|
42
|
+
const setMaximized = layout == null ? void 0 : layout.setMaximized;
|
|
43
|
+
const hostsAssetPanel = (layout == null ? void 0 : layout.hostsAssetPanel) ?? false;
|
|
44
|
+
const threadId = useContext(AthenaStatewireThreadIdContext);
|
|
45
|
+
const threadList = useAthenaStatewireThreadList();
|
|
46
|
+
const hasMessages = useAuiState((state) => state.thread.messages.length > 0);
|
|
47
|
+
const sessionPersisted = useAuiState(
|
|
48
|
+
(state) => {
|
|
49
|
+
var _a;
|
|
50
|
+
return readDeepAgentStreamValues((_a = state.thread.extras) == null ? void 0 : _a.state).sessionPersisted;
|
|
51
|
+
}
|
|
52
|
+
);
|
|
53
|
+
const isRunning = useAuiState(
|
|
54
|
+
(state) => {
|
|
55
|
+
var _a;
|
|
56
|
+
return ((_a = state.thread.extras) == null ? void 0 : _a.status) === "running";
|
|
57
|
+
}
|
|
58
|
+
);
|
|
59
|
+
const isPersisted = threadList ? !threadList.isNewChat : sessionPersisted === true || hasMessages;
|
|
60
|
+
const paneContext = useMemo(
|
|
61
|
+
() => ({ threadId, isPersisted, isRunning }),
|
|
62
|
+
[threadId, isPersisted, isRunning]
|
|
63
|
+
);
|
|
64
|
+
const queryClient = useQueryClient();
|
|
65
|
+
const wasRunning = useRef(isRunning);
|
|
66
|
+
useEffect(() => {
|
|
67
|
+
if (wasRunning.current && !isRunning) {
|
|
68
|
+
void queryClient.invalidateQueries({ queryKey: SESSION_WORKSPACE_QUERY_KEY });
|
|
69
|
+
}
|
|
70
|
+
wasRunning.current = isRunning;
|
|
71
|
+
}, [isRunning, queryClient]);
|
|
72
|
+
const assetPanelOpen = useAssetPanelStore((state) => state.isOpen);
|
|
73
|
+
const closeAssetPanel = useAssetPanelStore((state) => state.closePanel);
|
|
74
|
+
const allPanes = useMemo(
|
|
75
|
+
() => hostsAssetPanel && assetPanelOpen ? [...panes, OPEN_ASSETS_PANE] : panes,
|
|
76
|
+
[assetPanelOpen, hostsAssetPanel, panes]
|
|
77
|
+
);
|
|
78
|
+
const paneById = useMemo(() => new Map(allPanes.map((pane) => [pane.id, pane])), [allPanes]);
|
|
79
|
+
const paneIds = useMemo(() => new Set(paneById.keys()), [paneById]);
|
|
80
|
+
const defaults = useMemo(() => {
|
|
81
|
+
const open = defaultOpenPaneIds.filter((id) => panes.some((pane) => pane.id === id));
|
|
82
|
+
return { open, active: open[0] ?? null };
|
|
83
|
+
}, [defaultOpenPaneIds, panes]);
|
|
84
|
+
const [tabsState, dispatchTabs] = useReducer(workbenchTabsReducer, {});
|
|
85
|
+
const threadKey = threadId ?? "";
|
|
86
|
+
let tabs = visibleThreadTabs(threadTabs(tabsState, threadKey, defaults), paneIds);
|
|
87
|
+
if (paneIds.has(SESSION_WORKBENCH_ASSETS_PANE_ID) && !tabs.open.includes(SESSION_WORKBENCH_ASSETS_PANE_ID)) {
|
|
88
|
+
tabs = {
|
|
89
|
+
open: [...tabs.open, SESSION_WORKBENCH_ASSETS_PANE_ID],
|
|
90
|
+
active: tabs.active ?? SESSION_WORKBENCH_ASSETS_PANE_ID
|
|
91
|
+
};
|
|
92
|
+
}
|
|
93
|
+
const latest = useRef({ threadKey, defaults, setCollapsed });
|
|
94
|
+
latest.current = { threadKey, defaults, setCollapsed };
|
|
95
|
+
useEffect(() => {
|
|
96
|
+
if (!hostsAssetPanel) return void 0;
|
|
97
|
+
return useAssetPanelStore.subscribe((state, previous) => {
|
|
98
|
+
if (state.currentThreadId !== previous.currentThreadId) return;
|
|
99
|
+
if (!state.isOpen || state.openRequestSeq === previous.openRequestSeq) return;
|
|
100
|
+
dispatchTabs({
|
|
101
|
+
type: "open",
|
|
102
|
+
threadKey: latest.current.threadKey,
|
|
103
|
+
paneId: SESSION_WORKBENCH_ASSETS_PANE_ID,
|
|
104
|
+
defaults: latest.current.defaults
|
|
105
|
+
});
|
|
106
|
+
latest.current.setCollapsed(false);
|
|
107
|
+
});
|
|
108
|
+
}, [hostsAssetPanel]);
|
|
109
|
+
const openPane = (paneId) => dispatchTabs({ type: "open", threadKey, paneId, defaults });
|
|
110
|
+
const activatePane = openPane;
|
|
111
|
+
const closePane = (paneId) => {
|
|
112
|
+
if (paneId === SESSION_WORKBENCH_ASSETS_PANE_ID) closeAssetPanel();
|
|
113
|
+
dispatchTabs({ type: "close", threadKey, paneId, defaults });
|
|
114
|
+
};
|
|
115
|
+
const baseId = useId();
|
|
116
|
+
const tabId = (paneId) => `${baseId}-tab-${paneId}`;
|
|
117
|
+
const panelId = `${baseId}-panel`;
|
|
118
|
+
const onTabKeyDown = (event, index) => {
|
|
119
|
+
var _a;
|
|
120
|
+
const step = event.key === "ArrowRight" ? 1 : event.key === "ArrowLeft" ? -1 : 0;
|
|
121
|
+
if (step === 0 || tabs.open.length === 0) return;
|
|
122
|
+
event.preventDefault();
|
|
123
|
+
const nextId = tabs.open[(index + step + tabs.open.length) % tabs.open.length];
|
|
124
|
+
if (!nextId) return;
|
|
125
|
+
activatePane(nextId);
|
|
126
|
+
(_a = event.currentTarget.ownerDocument.getElementById(tabId(nextId))) == null ? void 0 : _a.focus();
|
|
127
|
+
};
|
|
128
|
+
const activePane = tabs.active ? paneById.get(tabs.active) : void 0;
|
|
129
|
+
const assetsPane = paneById.get(SESSION_WORKBENCH_ASSETS_PANE_ID);
|
|
130
|
+
const assetsActive = (activePane == null ? void 0 : activePane.id) === SESSION_WORKBENCH_ASSETS_PANE_ID;
|
|
131
|
+
return /* @__PURE__ */ jsx(SessionWorkbenchContext.Provider, { value: paneContext, children: /* @__PURE__ */ jsxs(
|
|
132
|
+
"aside",
|
|
133
|
+
{
|
|
134
|
+
"aria-label": "Session workspace",
|
|
135
|
+
className: cn(
|
|
136
|
+
"athena-sdk-chrome flex h-full flex-col border-border border-l bg-background",
|
|
137
|
+
collapsed ? "w-10 shrink-0 items-center gap-1 py-2" : "min-h-0 w-full min-w-0",
|
|
138
|
+
className
|
|
139
|
+
),
|
|
140
|
+
children: [
|
|
141
|
+
collapsed ? /* @__PURE__ */ jsxs(Fragment, { children: [
|
|
142
|
+
/* @__PURE__ */ jsx(
|
|
143
|
+
"button",
|
|
144
|
+
{
|
|
145
|
+
type: "button",
|
|
146
|
+
"aria-label": "Expand workspace",
|
|
147
|
+
title: "Expand workspace",
|
|
148
|
+
onClick: () => setCollapsed(false),
|
|
149
|
+
className: ICON_BUTTON_CLASS,
|
|
150
|
+
children: /* @__PURE__ */ jsx(PanelRightOpenIcon, { className: "size-4" })
|
|
151
|
+
}
|
|
152
|
+
),
|
|
153
|
+
tabs.open.map((paneId) => {
|
|
154
|
+
const pane = paneById.get(paneId);
|
|
155
|
+
if (!pane) return null;
|
|
156
|
+
const Icon = pane.icon ?? LayersIcon;
|
|
157
|
+
return /* @__PURE__ */ jsx(
|
|
158
|
+
"button",
|
|
159
|
+
{
|
|
160
|
+
type: "button",
|
|
161
|
+
"aria-label": `Show ${pane.title}`,
|
|
162
|
+
title: pane.title,
|
|
163
|
+
onClick: () => {
|
|
164
|
+
activatePane(paneId);
|
|
165
|
+
setCollapsed(false);
|
|
166
|
+
},
|
|
167
|
+
className: cn(
|
|
168
|
+
ICON_BUTTON_CLASS,
|
|
169
|
+
paneId === tabs.active && "bg-muted text-foreground"
|
|
170
|
+
),
|
|
171
|
+
children: /* @__PURE__ */ jsx(Icon, { className: "size-4" })
|
|
172
|
+
},
|
|
173
|
+
paneId
|
|
174
|
+
);
|
|
175
|
+
})
|
|
176
|
+
] }) : /* @__PURE__ */ jsxs("div", { className: "flex h-11 w-full shrink-0 items-center gap-1 border-border border-b pr-1.5 pl-2", children: [
|
|
177
|
+
/* @__PURE__ */ jsx(
|
|
178
|
+
"div",
|
|
179
|
+
{
|
|
180
|
+
role: "tablist",
|
|
181
|
+
"aria-label": "Workspace panes",
|
|
182
|
+
className: "flex min-w-0 items-center gap-1 overflow-x-auto [scrollbar-width:none]",
|
|
183
|
+
children: tabs.open.map((paneId, index) => {
|
|
184
|
+
const pane = paneById.get(paneId);
|
|
185
|
+
if (!pane) return null;
|
|
186
|
+
const Icon = pane.icon;
|
|
187
|
+
const selected = paneId === tabs.active;
|
|
188
|
+
return /* @__PURE__ */ jsxs(
|
|
189
|
+
"div",
|
|
190
|
+
{
|
|
191
|
+
"data-selected": selected ? "" : void 0,
|
|
192
|
+
className: cn(
|
|
193
|
+
"group/tab flex h-7 shrink-0 items-center rounded-md text-[13px] transition-colors",
|
|
194
|
+
selected ? "bg-foreground/[0.06] text-foreground" : "text-muted-foreground hover:bg-foreground/[0.04] hover:text-foreground"
|
|
195
|
+
),
|
|
196
|
+
children: [
|
|
197
|
+
/* @__PURE__ */ jsxs(
|
|
198
|
+
"button",
|
|
199
|
+
{
|
|
200
|
+
type: "button",
|
|
201
|
+
role: "tab",
|
|
202
|
+
id: tabId(paneId),
|
|
203
|
+
"aria-selected": selected,
|
|
204
|
+
"aria-controls": panelId,
|
|
205
|
+
tabIndex: selected ? 0 : -1,
|
|
206
|
+
onClick: () => activatePane(paneId),
|
|
207
|
+
onKeyDown: (event) => onTabKeyDown(event, index),
|
|
208
|
+
className: "flex h-full items-center gap-1.5 rounded-md pr-1 pl-2 outline-none focus-visible:ring-2 focus-visible:ring-ring/60",
|
|
209
|
+
children: [
|
|
210
|
+
Icon ? /* @__PURE__ */ jsx(Icon, { className: "size-3.5" }) : null,
|
|
211
|
+
pane.title
|
|
212
|
+
]
|
|
213
|
+
}
|
|
214
|
+
),
|
|
215
|
+
/* @__PURE__ */ jsx(
|
|
216
|
+
"button",
|
|
217
|
+
{
|
|
218
|
+
type: "button",
|
|
219
|
+
"aria-label": `Close ${pane.title}`,
|
|
220
|
+
title: `Close ${pane.title}`,
|
|
221
|
+
onClick: () => closePane(paneId),
|
|
222
|
+
className: cn(
|
|
223
|
+
"mr-1 rounded p-0.5 transition-opacity hover:bg-background hover:opacity-100 focus-visible:opacity-100 focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring/60",
|
|
224
|
+
selected ? "opacity-60" : "opacity-0 group-hover/tab:opacity-60"
|
|
225
|
+
),
|
|
226
|
+
children: /* @__PURE__ */ jsx(XIcon, { className: "size-3" })
|
|
227
|
+
}
|
|
228
|
+
)
|
|
229
|
+
]
|
|
230
|
+
},
|
|
231
|
+
paneId
|
|
232
|
+
);
|
|
233
|
+
})
|
|
234
|
+
}
|
|
235
|
+
),
|
|
236
|
+
/* @__PURE__ */ jsx(AddPaneMenu, { panes: allPanes, openIds: tabs.open, onOpen: openPane }),
|
|
237
|
+
/* @__PURE__ */ jsx("div", { className: "min-w-0 flex-1" }),
|
|
238
|
+
setMaximized ? /* @__PURE__ */ jsx(
|
|
239
|
+
"button",
|
|
240
|
+
{
|
|
241
|
+
type: "button",
|
|
242
|
+
"aria-label": maximized ? "Restore workspace" : "Maximize workspace",
|
|
243
|
+
title: maximized ? "Restore workspace" : "Maximize workspace",
|
|
244
|
+
"aria-pressed": maximized,
|
|
245
|
+
onClick: () => setMaximized(!maximized),
|
|
246
|
+
className: ICON_BUTTON_CLASS,
|
|
247
|
+
children: maximized ? /* @__PURE__ */ jsx(Minimize2Icon, { className: "size-4" }) : /* @__PURE__ */ jsx(Maximize2Icon, { className: "size-4" })
|
|
248
|
+
}
|
|
249
|
+
) : null,
|
|
250
|
+
/* @__PURE__ */ jsx(
|
|
251
|
+
"button",
|
|
252
|
+
{
|
|
253
|
+
type: "button",
|
|
254
|
+
"aria-label": "Collapse workspace",
|
|
255
|
+
title: "Collapse workspace",
|
|
256
|
+
onClick: () => setCollapsed(true),
|
|
257
|
+
className: ICON_BUTTON_CLASS,
|
|
258
|
+
children: /* @__PURE__ */ jsx(PanelRightCloseIcon, { className: "size-4" })
|
|
259
|
+
}
|
|
260
|
+
)
|
|
261
|
+
] }),
|
|
262
|
+
/* @__PURE__ */ jsxs(
|
|
263
|
+
"div",
|
|
264
|
+
{
|
|
265
|
+
role: "tabpanel",
|
|
266
|
+
id: panelId,
|
|
267
|
+
"aria-labelledby": activePane ? tabId(activePane.id) : void 0,
|
|
268
|
+
className: cn(
|
|
269
|
+
"min-h-0 w-full flex-1",
|
|
270
|
+
assetsActive ? "flex flex-col" : "overflow-y-auto",
|
|
271
|
+
collapsed && "hidden"
|
|
272
|
+
),
|
|
273
|
+
children: [
|
|
274
|
+
assetsActive ? null : activePane ? activePane.render(paneContext) : /* @__PURE__ */ jsx(NoOpenPane, { panes: allPanes, onOpen: openPane }),
|
|
275
|
+
assetsPane ? /* @__PURE__ */ jsx(
|
|
276
|
+
"div",
|
|
277
|
+
{
|
|
278
|
+
"data-workbench-assets": "",
|
|
279
|
+
className: cn(assetsActive ? "flex min-h-0 flex-1 flex-col" : "hidden"),
|
|
280
|
+
children: assetsPane.render(paneContext)
|
|
281
|
+
},
|
|
282
|
+
SESSION_WORKBENCH_ASSETS_PANE_ID
|
|
283
|
+
) : null
|
|
284
|
+
]
|
|
285
|
+
}
|
|
286
|
+
)
|
|
287
|
+
]
|
|
288
|
+
}
|
|
289
|
+
) });
|
|
290
|
+
};
|
|
291
|
+
const PaneMenuItems = ({ panes, openIds, onOpen }) => /* @__PURE__ */ jsx("ul", { className: "flex flex-col", children: panes.map((pane) => {
|
|
292
|
+
const Icon = pane.icon ?? LayersIcon;
|
|
293
|
+
const isOpen = openIds.includes(pane.id);
|
|
294
|
+
return /* @__PURE__ */ jsx("li", { children: /* @__PURE__ */ jsxs(
|
|
295
|
+
"button",
|
|
296
|
+
{
|
|
297
|
+
type: "button",
|
|
298
|
+
title: pane.description,
|
|
299
|
+
onClick: () => onOpen(pane.id),
|
|
300
|
+
className: "flex h-[30px] w-full items-center gap-2 rounded-md px-2 text-left text-[13px] transition-colors hover:bg-muted focus-visible:bg-muted focus-visible:outline-none",
|
|
301
|
+
children: [
|
|
302
|
+
/* @__PURE__ */ jsx(Icon, { className: "size-4 text-muted-foreground" }),
|
|
303
|
+
/* @__PURE__ */ jsx("span", { className: "min-w-0 flex-1 truncate", children: pane.title }),
|
|
304
|
+
isOpen ? /* @__PURE__ */ jsx("span", { className: "text-[11px] text-muted-foreground", children: "Open" }) : null
|
|
305
|
+
]
|
|
306
|
+
}
|
|
307
|
+
) }, pane.id);
|
|
308
|
+
}) });
|
|
309
|
+
const AddPaneMenu = ({ panes, openIds, onOpen }) => {
|
|
310
|
+
const [open, setOpen] = useState(false);
|
|
311
|
+
const [query, setQuery] = useState("");
|
|
312
|
+
const shown = filterWorkbenchPanes(panes, query);
|
|
313
|
+
const choose = (paneId) => {
|
|
314
|
+
onOpen(paneId);
|
|
315
|
+
setOpen(false);
|
|
316
|
+
setQuery("");
|
|
317
|
+
};
|
|
318
|
+
return /* @__PURE__ */ jsxs(
|
|
319
|
+
Popover,
|
|
320
|
+
{
|
|
321
|
+
open,
|
|
322
|
+
onOpenChange: (next) => {
|
|
323
|
+
setOpen(next);
|
|
324
|
+
if (!next) setQuery("");
|
|
325
|
+
},
|
|
326
|
+
children: [
|
|
327
|
+
/* @__PURE__ */ jsx(PopoverTrigger, { asChild: true, children: /* @__PURE__ */ jsx("button", { type: "button", "aria-label": "Open a pane", title: "Open a pane", className: ICON_BUTTON_CLASS, children: /* @__PURE__ */ jsx(PlusIcon, { className: "size-4" }) }) }),
|
|
328
|
+
/* @__PURE__ */ jsxs(PopoverContent, { align: "start", className: "w-56 p-1", "aria-label": "Panes", children: [
|
|
329
|
+
/* @__PURE__ */ jsxs("div", { className: "flex items-center gap-2 border-border border-b px-2 pb-1.5 pt-1", children: [
|
|
330
|
+
/* @__PURE__ */ jsx(SearchIcon, { className: "size-3.5 shrink-0 text-muted-foreground", "aria-hidden": true }),
|
|
331
|
+
/* @__PURE__ */ jsx(
|
|
332
|
+
"input",
|
|
333
|
+
{
|
|
334
|
+
autoFocus: true,
|
|
335
|
+
value: query,
|
|
336
|
+
onChange: (event) => setQuery(event.target.value),
|
|
337
|
+
onKeyDown: (event) => {
|
|
338
|
+
const first = shown[0];
|
|
339
|
+
if (event.key === "Enter" && first) {
|
|
340
|
+
event.preventDefault();
|
|
341
|
+
choose(first.id);
|
|
342
|
+
}
|
|
343
|
+
},
|
|
344
|
+
placeholder: "Search",
|
|
345
|
+
"aria-label": "Search panes",
|
|
346
|
+
className: "h-7 min-w-0 flex-1 bg-transparent text-[13px] outline-none placeholder:text-muted-foreground"
|
|
347
|
+
}
|
|
348
|
+
)
|
|
349
|
+
] }),
|
|
350
|
+
/* @__PURE__ */ jsx("div", { className: "pt-1", children: shown.length > 0 ? /* @__PURE__ */ jsx(PaneMenuItems, { panes: shown, openIds, onOpen: choose }) : /* @__PURE__ */ jsx("p", { className: "px-2 py-1.5 text-[13px] text-muted-foreground", children: "No pane matches." }) })
|
|
351
|
+
] })
|
|
352
|
+
]
|
|
353
|
+
}
|
|
354
|
+
);
|
|
355
|
+
};
|
|
356
|
+
const NoOpenPane = ({ panes, onOpen }) => /* @__PURE__ */ jsx("div", { className: "flex min-h-full items-center justify-center p-6", children: /* @__PURE__ */ jsx("ul", { "aria-label": "Available panes", className: "flex w-full max-w-xs flex-col gap-1", children: panes.map((pane) => {
|
|
357
|
+
const Icon = pane.icon ?? LayersIcon;
|
|
358
|
+
return /* @__PURE__ */ jsx("li", { children: /* @__PURE__ */ jsxs(
|
|
359
|
+
"button",
|
|
360
|
+
{
|
|
361
|
+
type: "button",
|
|
362
|
+
onClick: () => onOpen(pane.id),
|
|
363
|
+
className: "flex w-full items-start gap-3 rounded-lg px-3 py-2 text-left transition-colors hover:bg-muted focus-visible:bg-muted focus-visible:outline-none",
|
|
364
|
+
children: [
|
|
365
|
+
/* @__PURE__ */ jsx(Icon, { className: "mt-0.5 size-4 shrink-0 text-muted-foreground" }),
|
|
366
|
+
/* @__PURE__ */ jsxs("span", { className: "flex min-w-0 flex-col", children: [
|
|
367
|
+
/* @__PURE__ */ jsx("span", { className: "text-[13px] text-foreground", children: pane.title }),
|
|
368
|
+
pane.description ? /* @__PURE__ */ jsx("span", { className: "text-muted-foreground text-xs", children: pane.description }) : null
|
|
369
|
+
] })
|
|
370
|
+
]
|
|
371
|
+
}
|
|
372
|
+
) }, pane.id);
|
|
373
|
+
}) }) });
|
|
374
|
+
export {
|
|
375
|
+
SESSION_WORKBENCH_ASSETS_PANE_ID,
|
|
376
|
+
SessionWorkbench
|
|
377
|
+
};
|
|
378
|
+
//# sourceMappingURL=SessionWorkbench.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"SessionWorkbench.js","sources":["../../src/workbench/SessionWorkbench.tsx"],"sourcesContent":["\"use client\";\n\nimport { useAuiState } from '@assistant-ui/react';\nimport { readDeepAgentStreamValues } from '@athenaintel/agent-runtime';\nimport { QueryClientProvider, useQueryClient } from '@tanstack/react-query';\nimport {\n LayersIcon,\n Maximize2Icon,\n Minimize2Icon,\n PanelRightCloseIcon,\n PanelRightOpenIcon,\n PlusIcon,\n SearchIcon,\n XIcon,\n} from 'lucide-react';\nimport {\n type FC,\n type KeyboardEvent,\n useContext,\n useEffect,\n useId,\n useMemo,\n useReducer,\n useRef,\n useState,\n} from 'react';\nimport { useAssetPanelStore } from '../assets/asset-panel-store';\nimport { AssetPanel } from '../assets/AssetPanel';\nimport { useAthenaQueryClient } from '../lib/use-athena-rest-query';\nimport { cn } from '../lib/utils';\nimport { useAthenaStatewireThreadList } from '../threads/statewire-thread-list';\nimport { AthenaStatewireThreadIdContext } from '../threads/thread-id-context';\nimport { Popover, PopoverContent, PopoverTrigger } from '../ui/popover';\nimport {\n type SessionWorkbenchPane,\n type SessionWorkbenchPaneContext,\n SessionWorkbenchContext,\n} from './session-workbench-context';\nimport {\n filterWorkbenchPanes,\n threadTabs,\n visibleThreadTabs,\n type WorkbenchThreadTabs,\n workbenchTabsReducer,\n} from './session-workbench-model';\nimport {\n DEFAULT_SESSION_WORKBENCH_OPEN_PANE_IDS,\n DEFAULT_SESSION_WORKBENCH_PANES,\n} from './session-workbench-panes';\nimport { SESSION_WORKSPACE_QUERY_KEY } from './use-session-workspace';\nimport { useWorkbenchLayout } from './workbench-layout-context';\n\n/** The tab `AthenaLayout`'s workbench shows the open assets in. */\nexport const SESSION_WORKBENCH_ASSETS_PANE_ID = 'open-assets';\n\nconst OPEN_ASSETS_PANE: SessionWorkbenchPane = {\n id: SESSION_WORKBENCH_ASSETS_PANE_ID,\n title: 'Open assets',\n description: 'The documents, sheets and decks open in this session',\n icon: LayersIcon,\n render: () => <AssetPanel manageAssetPanelHostRegistration={false} />,\n};\n\nexport interface SessionWorkbenchProps {\n /**\n * The panes the \"+\" menu offers, in order. Defaults to the built-in Tasks,\n * Shell, Computer, Pull requests and Attachments\n * (`DEFAULT_SESSION_WORKBENCH_PANES`); spread it to add your own.\n */\n panes?: readonly SessionWorkbenchPane[];\n /**\n * The panes a thread opens with until the person changes its tabs (ids from\n * `panes`; unknown ids are ignored). Defaults to Tasks, Shell and Computer.\n */\n defaultOpenPaneIds?: readonly string[];\n className?: string;\n}\n\nconst ICON_BUTTON_CLASS =\n 'inline-flex size-7 shrink-0 items-center justify-center rounded-md text-muted-foreground transition-colors hover:bg-muted hover:text-foreground outline-none focus-visible:ring-2 focus-visible:ring-ring/60';\n\n/**\n * A Devin-style workspace pane for the active session: a tab strip of panes\n * (Tasks, Shell, Computer, Pull requests, Attachments — and any the host\n * adds), a \"+\" menu to open more, closable tabs, and a collapse to a rail.\n *\n * Mount it inside `<AthenaProvider>` — as `AthenaLayout`'s `workbench` for a\n * resizable right-hand column, or anywhere in your own layout. Each thread\n * keeps its own open tabs while the workbench stays mounted (in memory only);\n * a thread it has not seen opens `defaultOpenPaneIds`. In `AthenaLayout`, the\n * assets the agent or the person opens show here too, as an \"Open assets\" tab.\n */\nexport const SessionWorkbench: FC<SessionWorkbenchProps> = (props) => {\n // One client for every pane, so the workspace read several panes share is\n // fetched once even when the host provides no QueryClient.\n const queryClient = useAthenaQueryClient();\n return (\n <QueryClientProvider client={queryClient}>\n <SessionWorkbenchInner {...props} />\n </QueryClientProvider>\n );\n};\n\nconst SessionWorkbenchInner: FC<SessionWorkbenchProps> = ({\n panes = DEFAULT_SESSION_WORKBENCH_PANES,\n defaultOpenPaneIds = DEFAULT_SESSION_WORKBENCH_OPEN_PANE_IDS,\n className,\n}) => {\n const layout = useWorkbenchLayout();\n const [ownCollapsed, setOwnCollapsed] = useState(false);\n const collapsed = layout ? layout.collapsed : ownCollapsed;\n const setCollapsed = layout ? layout.setCollapsed : setOwnCollapsed;\n // Only a hosting layout can give the workbench the chat's width.\n const maximized = layout?.maximized ?? false;\n const setMaximized = layout?.setMaximized;\n const hostsAssetPanel = layout?.hostsAssetPanel ?? false;\n\n const threadId = useContext(AthenaStatewireThreadIdContext);\n const threadList = useAthenaStatewireThreadList();\n const hasMessages = useAuiState((state) => state.thread.messages.length > 0);\n // The attach snapshot says whether the backend minted the thread's session\n // (`sessionPersisted`) — true for an existing thread before any message.\n const sessionPersisted = useAuiState(\n (state) =>\n readDeepAgentStreamValues((state.thread.extras as { state?: unknown } | undefined)?.state)\n .sessionPersisted,\n );\n const isRunning = useAuiState(\n (state) => (state.thread.extras as { status?: unknown } | undefined)?.status === 'running',\n );\n // In thread-list mode the list knows whether the backend has the thread; a\n // single-thread provider's thread is known once the host says its session\n // exists, or once it has history (a host that predates the flag).\n const isPersisted = threadList\n ? !threadList.isNewChat\n : sessionPersisted === true || hasMessages;\n const paneContext = useMemo<SessionWorkbenchPaneContext>(\n () => ({ threadId, isPersisted, isRunning }),\n [threadId, isPersisted, isRunning],\n );\n\n // Polling stops with the run; read the workspace once more as it settles so\n // what the run's last steps created shows without waiting for a refocus.\n const queryClient = useQueryClient();\n const wasRunning = useRef(isRunning);\n useEffect(() => {\n if (wasRunning.current && !isRunning) {\n void queryClient.invalidateQueries({ queryKey: SESSION_WORKSPACE_QUERY_KEY });\n }\n wasRunning.current = isRunning;\n }, [isRunning, queryClient]);\n\n const assetPanelOpen = useAssetPanelStore((state) => state.isOpen);\n const closeAssetPanel = useAssetPanelStore((state) => state.closePanel);\n const allPanes = useMemo<readonly SessionWorkbenchPane[]>(\n () => (hostsAssetPanel && assetPanelOpen ? [...panes, OPEN_ASSETS_PANE] : panes),\n [assetPanelOpen, hostsAssetPanel, panes],\n );\n const paneById = useMemo(() => new Map(allPanes.map((pane) => [pane.id, pane])), [allPanes]);\n const paneIds = useMemo(() => new Set(paneById.keys()), [paneById]);\n\n const defaults = useMemo<WorkbenchThreadTabs>(() => {\n const open = defaultOpenPaneIds.filter((id) => panes.some((pane) => pane.id === id));\n return { open, active: open[0] ?? null };\n }, [defaultOpenPaneIds, panes]);\n const [tabsState, dispatchTabs] = useReducer(workbenchTabsReducer, {});\n const threadKey = threadId ?? '';\n let tabs = visibleThreadTabs(threadTabs(tabsState, threadKey, defaults), paneIds);\n // Assets already open when the workbench mounts (or when a thread with open\n // assets comes back) show their tab without an opening to react to.\n if (\n paneIds.has(SESSION_WORKBENCH_ASSETS_PANE_ID) &&\n !tabs.open.includes(SESSION_WORKBENCH_ASSETS_PANE_ID)\n ) {\n tabs = {\n open: [...tabs.open, SESSION_WORKBENCH_ASSETS_PANE_ID],\n active: tabs.active ?? SESSION_WORKBENCH_ASSETS_PANE_ID,\n };\n }\n\n // An asset opening (a tool card, a citation, the Attachments pane) brings\n // the \"Open assets\" tab forward and the workbench out of its rail. A thread\n // switch restoring that thread's open assets (`setCurrentThread`) is not an\n // opening: the thread keeps the pane it had selected. Read through refs:\n // the store notifies outside React's render.\n const latest = useRef({ threadKey, defaults, setCollapsed });\n latest.current = { threadKey, defaults, setCollapsed };\n useEffect(() => {\n if (!hostsAssetPanel) return undefined;\n return useAssetPanelStore.subscribe((state, previous) => {\n if (state.currentThreadId !== previous.currentThreadId) return;\n // Every open request, a repeat click on the asset already showing too.\n if (!state.isOpen || state.openRequestSeq === previous.openRequestSeq) return;\n dispatchTabs({\n type: 'open',\n threadKey: latest.current.threadKey,\n paneId: SESSION_WORKBENCH_ASSETS_PANE_ID,\n defaults: latest.current.defaults,\n });\n latest.current.setCollapsed(false);\n });\n }, [hostsAssetPanel]);\n\n // Showing a tab the strip renders is an `open`: it activates a stored tab\n // and records one the strip only derived (the \"Open assets\" tab above).\n const openPane = (paneId: string) =>\n dispatchTabs({ type: 'open', threadKey, paneId, defaults });\n const activatePane = openPane;\n const closePane = (paneId: string) => {\n if (paneId === SESSION_WORKBENCH_ASSETS_PANE_ID) closeAssetPanel();\n dispatchTabs({ type: 'close', threadKey, paneId, defaults });\n };\n\n const baseId = useId();\n const tabId = (paneId: string) => `${baseId}-tab-${paneId}`;\n const panelId = `${baseId}-panel`;\n\n const onTabKeyDown = (event: KeyboardEvent<HTMLButtonElement>, index: number) => {\n const step = event.key === 'ArrowRight' ? 1 : event.key === 'ArrowLeft' ? -1 : 0;\n if (step === 0 || tabs.open.length === 0) return;\n event.preventDefault();\n const nextId = tabs.open[(index + step + tabs.open.length) % tabs.open.length];\n if (!nextId) return;\n activatePane(nextId);\n event.currentTarget.ownerDocument.getElementById(tabId(nextId))?.focus();\n };\n\n const activePane = tabs.active ? paneById.get(tabs.active) : undefined;\n const assetsPane = paneById.get(SESSION_WORKBENCH_ASSETS_PANE_ID);\n const assetsActive = activePane?.id === SESSION_WORKBENCH_ASSETS_PANE_ID;\n\n // One tree for both states: the panel stays mounted (hidden) while the\n // workbench is a rail, and the open assets stay mounted (hidden) while\n // another pane shows — their iframes keep their editing session, as the\n // asset panel's own tabs do.\n return (\n <SessionWorkbenchContext.Provider value={paneContext}>\n <aside\n aria-label=\"Session workspace\"\n className={cn(\n 'athena-sdk-chrome flex h-full flex-col border-border border-l bg-background',\n collapsed ? 'w-10 shrink-0 items-center gap-1 py-2' : 'min-h-0 w-full min-w-0',\n className,\n )}\n >\n {collapsed ? (\n <>\n <button\n type=\"button\"\n aria-label=\"Expand workspace\"\n title=\"Expand workspace\"\n onClick={() => setCollapsed(false)}\n className={ICON_BUTTON_CLASS}\n >\n <PanelRightOpenIcon className=\"size-4\" />\n </button>\n {tabs.open.map((paneId) => {\n const pane = paneById.get(paneId);\n if (!pane) return null;\n const Icon = pane.icon ?? LayersIcon;\n return (\n <button\n key={paneId}\n type=\"button\"\n aria-label={`Show ${pane.title}`}\n title={pane.title}\n onClick={() => {\n activatePane(paneId);\n setCollapsed(false);\n }}\n className={cn(\n ICON_BUTTON_CLASS,\n paneId === tabs.active && 'bg-muted text-foreground',\n )}\n >\n <Icon className=\"size-4\" />\n </button>\n );\n })}\n </>\n ) : (\n <div className=\"flex h-11 w-full shrink-0 items-center gap-1 border-border border-b pr-1.5 pl-2\">\n <div\n role=\"tablist\"\n aria-label=\"Workspace panes\"\n className=\"flex min-w-0 items-center gap-1 overflow-x-auto [scrollbar-width:none]\"\n >\n {tabs.open.map((paneId, index) => {\n const pane = paneById.get(paneId);\n if (!pane) return null;\n const Icon = pane.icon;\n const selected = paneId === tabs.active;\n return (\n <div\n key={paneId}\n data-selected={selected ? '' : undefined}\n className={cn(\n 'group/tab flex h-7 shrink-0 items-center rounded-md text-[13px] transition-colors',\n selected\n ? 'bg-foreground/[0.06] text-foreground'\n : 'text-muted-foreground hover:bg-foreground/[0.04] hover:text-foreground',\n )}\n >\n <button\n type=\"button\"\n role=\"tab\"\n id={tabId(paneId)}\n aria-selected={selected}\n aria-controls={panelId}\n tabIndex={selected ? 0 : -1}\n onClick={() => activatePane(paneId)}\n onKeyDown={(event) => onTabKeyDown(event, index)}\n className=\"flex h-full items-center gap-1.5 rounded-md pr-1 pl-2 outline-none focus-visible:ring-2 focus-visible:ring-ring/60\"\n >\n {Icon ? <Icon className=\"size-3.5\" /> : null}\n {pane.title}\n </button>\n {/* Quiet until the tab is hovered, focused or selected, as in Devin's strip. */}\n <button\n type=\"button\"\n aria-label={`Close ${pane.title}`}\n title={`Close ${pane.title}`}\n onClick={() => closePane(paneId)}\n className={cn(\n 'mr-1 rounded p-0.5 transition-opacity hover:bg-background hover:opacity-100 focus-visible:opacity-100 focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring/60',\n selected ? 'opacity-60' : 'opacity-0 group-hover/tab:opacity-60',\n )}\n >\n <XIcon className=\"size-3\" />\n </button>\n </div>\n );\n })}\n </div>\n <AddPaneMenu panes={allPanes} openIds={tabs.open} onOpen={openPane} />\n <div className=\"min-w-0 flex-1\" />\n {setMaximized ? (\n <button\n type=\"button\"\n aria-label={maximized ? 'Restore workspace' : 'Maximize workspace'}\n title={maximized ? 'Restore workspace' : 'Maximize workspace'}\n aria-pressed={maximized}\n onClick={() => setMaximized(!maximized)}\n className={ICON_BUTTON_CLASS}\n >\n {maximized ? <Minimize2Icon className=\"size-4\" /> : <Maximize2Icon className=\"size-4\" />}\n </button>\n ) : null}\n <button\n type=\"button\"\n aria-label=\"Collapse workspace\"\n title=\"Collapse workspace\"\n onClick={() => setCollapsed(true)}\n className={ICON_BUTTON_CLASS}\n >\n <PanelRightCloseIcon className=\"size-4\" />\n </button>\n </div>\n )}\n <div\n role=\"tabpanel\"\n id={panelId}\n aria-labelledby={activePane ? tabId(activePane.id) : undefined}\n className={cn(\n 'min-h-0 w-full flex-1',\n assetsActive ? 'flex flex-col' : 'overflow-y-auto',\n collapsed && 'hidden',\n )}\n >\n {assetsActive ? null : activePane ? (\n activePane.render(paneContext)\n ) : (\n <NoOpenPane panes={allPanes} onOpen={openPane} />\n )}\n {assetsPane ? (\n <div\n key={SESSION_WORKBENCH_ASSETS_PANE_ID}\n data-workbench-assets=\"\"\n className={cn(assetsActive ? 'flex min-h-0 flex-1 flex-col' : 'hidden')}\n >\n {assetsPane.render(paneContext)}\n </div>\n ) : null}\n </div>\n </aside>\n </SessionWorkbenchContext.Provider>\n );\n};\n\nconst PaneMenuItems: FC<{\n panes: readonly SessionWorkbenchPane[];\n openIds: readonly string[];\n onOpen: (paneId: string) => void;\n}> = ({ panes, openIds, onOpen }) => (\n <ul className=\"flex flex-col\">\n {panes.map((pane) => {\n const Icon = pane.icon ?? LayersIcon;\n const isOpen = openIds.includes(pane.id);\n return (\n <li key={pane.id}>\n <button\n type=\"button\"\n title={pane.description}\n onClick={() => onOpen(pane.id)}\n className=\"flex h-[30px] w-full items-center gap-2 rounded-md px-2 text-left text-[13px] transition-colors hover:bg-muted focus-visible:bg-muted focus-visible:outline-none\"\n >\n <Icon className=\"size-4 text-muted-foreground\" />\n <span className=\"min-w-0 flex-1 truncate\">{pane.title}</span>\n {isOpen ? <span className=\"text-[11px] text-muted-foreground\">Open</span> : null}\n </button>\n </li>\n );\n })}\n </ul>\n);\n\nconst AddPaneMenu: FC<{\n panes: readonly SessionWorkbenchPane[];\n openIds: readonly string[];\n onOpen: (paneId: string) => void;\n}> = ({ panes, openIds, onOpen }) => {\n const [open, setOpen] = useState(false);\n const [query, setQuery] = useState('');\n const shown = filterWorkbenchPanes(panes, query);\n const choose = (paneId: string) => {\n onOpen(paneId);\n setOpen(false);\n setQuery('');\n };\n return (\n <Popover\n open={open}\n onOpenChange={(next) => {\n setOpen(next);\n if (!next) setQuery('');\n }}\n >\n <PopoverTrigger asChild>\n <button type=\"button\" aria-label=\"Open a pane\" title=\"Open a pane\" className={ICON_BUTTON_CLASS}>\n <PlusIcon className=\"size-4\" />\n </button>\n </PopoverTrigger>\n <PopoverContent align=\"start\" className=\"w-56 p-1\" aria-label=\"Panes\">\n <div className=\"flex items-center gap-2 border-border border-b px-2 pb-1.5 pt-1\">\n <SearchIcon className=\"size-3.5 shrink-0 text-muted-foreground\" aria-hidden />\n <input\n // biome-ignore lint/a11y/noAutofocus: the menu opens to type into, as a command menu does.\n autoFocus\n value={query}\n onChange={(event) => setQuery(event.target.value)}\n onKeyDown={(event) => {\n const first = shown[0];\n if (event.key === 'Enter' && first) {\n event.preventDefault();\n choose(first.id);\n }\n }}\n placeholder=\"Search\"\n aria-label=\"Search panes\"\n className=\"h-7 min-w-0 flex-1 bg-transparent text-[13px] outline-none placeholder:text-muted-foreground\"\n />\n </div>\n <div className=\"pt-1\">\n {shown.length > 0 ? (\n <PaneMenuItems panes={shown} openIds={openIds} onOpen={choose} />\n ) : (\n <p className=\"px-2 py-1.5 text-[13px] text-muted-foreground\">No pane matches.</p>\n )}\n </div>\n </PopoverContent>\n </Popover>\n );\n};\n\n/** Nothing open: every pane the \"+\" menu offers, with what each shows, centred in the column. */\nconst NoOpenPane: FC<{\n panes: readonly SessionWorkbenchPane[];\n onOpen: (paneId: string) => void;\n}> = ({ panes, onOpen }) => (\n <div className=\"flex min-h-full items-center justify-center p-6\">\n <ul aria-label=\"Available panes\" className=\"flex w-full max-w-xs flex-col gap-1\">\n {panes.map((pane) => {\n const Icon = pane.icon ?? LayersIcon;\n return (\n <li key={pane.id}>\n <button\n type=\"button\"\n onClick={() => onOpen(pane.id)}\n className=\"flex w-full items-start gap-3 rounded-lg px-3 py-2 text-left transition-colors hover:bg-muted focus-visible:bg-muted focus-visible:outline-none\"\n >\n <Icon className=\"mt-0.5 size-4 shrink-0 text-muted-foreground\" />\n <span className=\"flex min-w-0 flex-col\">\n <span className=\"text-[13px] text-foreground\">{pane.title}</span>\n {pane.description ? (\n <span className=\"text-muted-foreground text-xs\">{pane.description}</span>\n ) : null}\n </span>\n </button>\n </li>\n );\n })}\n </ul>\n </div>\n);\n"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
|
|
3
|
+
const react = require("react");
|
|
4
|
+
const useSessionWorkspace = require("./use-session-workspace.cjs");
|
|
5
|
+
const SessionWorkbenchContext = react.createContext(null);
|
|
6
|
+
function useSessionWorkbench() {
|
|
7
|
+
const context = react.useContext(SessionWorkbenchContext);
|
|
8
|
+
if (context === null) {
|
|
9
|
+
throw new Error("[AthenaSDK] useSessionWorkbench must be used within <SessionWorkbench>");
|
|
10
|
+
}
|
|
11
|
+
return context;
|
|
12
|
+
}
|
|
13
|
+
const SESSION_WORKSPACE_LIVE_REFETCH_MS = 15e3;
|
|
14
|
+
function useSessionWorkbenchWorkspace() {
|
|
15
|
+
const { threadId, isPersisted, isRunning } = useSessionWorkbench();
|
|
16
|
+
return useSessionWorkspace.useAthenaSessionWorkspace({
|
|
17
|
+
threadId,
|
|
18
|
+
enabled: isPersisted,
|
|
19
|
+
refetchIntervalMs: isRunning ? SESSION_WORKSPACE_LIVE_REFETCH_MS : false
|
|
20
|
+
});
|
|
21
|
+
}
|
|
22
|
+
exports.SESSION_WORKSPACE_LIVE_REFETCH_MS = SESSION_WORKSPACE_LIVE_REFETCH_MS;
|
|
23
|
+
exports.SessionWorkbenchContext = SessionWorkbenchContext;
|
|
24
|
+
exports.useSessionWorkbench = useSessionWorkbench;
|
|
25
|
+
exports.useSessionWorkbenchWorkspace = useSessionWorkbenchWorkspace;
|
|
26
|
+
//# sourceMappingURL=session-workbench-context.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"session-workbench-context.cjs","sources":["../../src/workbench/session-workbench-context.ts"],"sourcesContent":["import type { UseQueryResult } from '@tanstack/react-query';\nimport type { ComponentType, ReactNode } from 'react';\nimport { createContext, useContext } from 'react';\nimport type { SessionWorkspace } from './session-workspace-api';\nimport { useAthenaSessionWorkspace } from './use-session-workspace';\n\n/** What every pane knows about the thread the workbench shows. */\nexport interface SessionWorkbenchPaneContext {\n /**\n * The thread the chat is attached to (defined for a never-started chat too);\n * `null` outside `<AthenaProvider>`.\n */\n threadId: string | null;\n /**\n * Whether the backend knows the thread yet. A never-started chat has no\n * workspace, pull requests or history to read, so panes show their empty\n * state instead of asking.\n */\n isPersisted: boolean;\n /** Whether the thread's run is live — panes that read the backend poll while it is. */\n isRunning: boolean;\n}\n\n/**\n * One tab the workbench can open. Hosts add their own beside the built-in\n * ones (`DEFAULT_SESSION_WORKBENCH_PANES`) — a Harvey-style \"Matter\" pane, a\n * Hebbia-style \"Grid\" — and choose which open by default.\n */\nexport interface SessionWorkbenchPane {\n /** Stable id; also what `defaultOpenPaneIds` names. */\n id: string;\n /** Tab label. */\n title: string;\n /**\n * One line on what the pane shows (\"Commands the agent ran and their\n * output\"). The workbench lists it under the title when no pane is open.\n */\n description?: string;\n /** Tab icon (a lucide icon, or any component taking `className`). */\n icon?: ComponentType<{ className?: string }>;\n /** The pane body for the workbench's current thread. */\n render: (context: SessionWorkbenchPaneContext) => ReactNode;\n}\n\nexport const SessionWorkbenchContext = createContext<SessionWorkbenchPaneContext | null>(null);\n\n/**\n * The workbench's thread context, for a custom pane's components. Throws\n * outside `SessionWorkbench`.\n */\nexport function useSessionWorkbench(): SessionWorkbenchPaneContext {\n const context = useContext(SessionWorkbenchContext);\n if (context === null) {\n throw new Error('[AthenaSDK] useSessionWorkbench must be used within <SessionWorkbench>');\n }\n return context;\n}\n\n/** How often a pane re-reads the workspace while the run is live. */\nexport const SESSION_WORKSPACE_LIVE_REFETCH_MS = 15_000;\n\n/**\n * The workbench thread's workspace (computers and assets), shared by every\n * pane through one query: polled while the run is live, idle for a\n * never-started chat.\n */\nexport function useSessionWorkbenchWorkspace(): UseQueryResult<SessionWorkspace, Error> {\n const { threadId, isPersisted, isRunning } = useSessionWorkbench();\n return useAthenaSessionWorkspace({\n threadId,\n enabled: isPersisted,\n refetchIntervalMs: isRunning ? SESSION_WORKSPACE_LIVE_REFETCH_MS : false,\n });\n}\n"],"names":["createContext","useContext","useAthenaSessionWorkspace"],"mappings":";;;;AA4CO,MAAM,0BAA0BA,MAAAA,cAAkD,IAAI;AAMtF,SAAS,sBAAmD;AACjE,QAAM,UAAUC,MAAAA,WAAW,uBAAuB;AAClD,MAAI,YAAY,MAAM;AACpB,UAAM,IAAI,MAAM,wEAAwE;AAAA,EAC1F;AACA,SAAO;AACT;AAGO,MAAM,oCAAoC;AAO1C,SAAS,+BAAwE;AACtF,QAAM,EAAE,UAAU,aAAa,UAAA,IAAc,oBAAA;AAC7C,SAAOC,8CAA0B;AAAA,IAC/B;AAAA,IACA,SAAS;AAAA,IACT,mBAAmB,YAAY,oCAAoC;AAAA,EAAA,CACpE;AACH;;;;;"}
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
import type { UseQueryResult } from '@tanstack/react-query';
|
|
2
|
+
import type { ComponentType, ReactNode } from 'react';
|
|
3
|
+
import type { SessionWorkspace } from './session-workspace-api';
|
|
4
|
+
/** What every pane knows about the thread the workbench shows. */
|
|
5
|
+
export interface SessionWorkbenchPaneContext {
|
|
6
|
+
/**
|
|
7
|
+
* The thread the chat is attached to (defined for a never-started chat too);
|
|
8
|
+
* `null` outside `<AthenaProvider>`.
|
|
9
|
+
*/
|
|
10
|
+
threadId: string | null;
|
|
11
|
+
/**
|
|
12
|
+
* Whether the backend knows the thread yet. A never-started chat has no
|
|
13
|
+
* workspace, pull requests or history to read, so panes show their empty
|
|
14
|
+
* state instead of asking.
|
|
15
|
+
*/
|
|
16
|
+
isPersisted: boolean;
|
|
17
|
+
/** Whether the thread's run is live — panes that read the backend poll while it is. */
|
|
18
|
+
isRunning: boolean;
|
|
19
|
+
}
|
|
20
|
+
/**
|
|
21
|
+
* One tab the workbench can open. Hosts add their own beside the built-in
|
|
22
|
+
* ones (`DEFAULT_SESSION_WORKBENCH_PANES`) — a Harvey-style "Matter" pane, a
|
|
23
|
+
* Hebbia-style "Grid" — and choose which open by default.
|
|
24
|
+
*/
|
|
25
|
+
export interface SessionWorkbenchPane {
|
|
26
|
+
/** Stable id; also what `defaultOpenPaneIds` names. */
|
|
27
|
+
id: string;
|
|
28
|
+
/** Tab label. */
|
|
29
|
+
title: string;
|
|
30
|
+
/**
|
|
31
|
+
* One line on what the pane shows ("Commands the agent ran and their
|
|
32
|
+
* output"). The workbench lists it under the title when no pane is open.
|
|
33
|
+
*/
|
|
34
|
+
description?: string;
|
|
35
|
+
/** Tab icon (a lucide icon, or any component taking `className`). */
|
|
36
|
+
icon?: ComponentType<{
|
|
37
|
+
className?: string;
|
|
38
|
+
}>;
|
|
39
|
+
/** The pane body for the workbench's current thread. */
|
|
40
|
+
render: (context: SessionWorkbenchPaneContext) => ReactNode;
|
|
41
|
+
}
|
|
42
|
+
export declare const SessionWorkbenchContext: import("react").Context<SessionWorkbenchPaneContext | null>;
|
|
43
|
+
/**
|
|
44
|
+
* The workbench's thread context, for a custom pane's components. Throws
|
|
45
|
+
* outside `SessionWorkbench`.
|
|
46
|
+
*/
|
|
47
|
+
export declare function useSessionWorkbench(): SessionWorkbenchPaneContext;
|
|
48
|
+
/** How often a pane re-reads the workspace while the run is live. */
|
|
49
|
+
export declare const SESSION_WORKSPACE_LIVE_REFETCH_MS = 15000;
|
|
50
|
+
/**
|
|
51
|
+
* The workbench thread's workspace (computers and assets), shared by every
|
|
52
|
+
* pane through one query: polled while the run is live, idle for a
|
|
53
|
+
* never-started chat.
|
|
54
|
+
*/
|
|
55
|
+
export declare function useSessionWorkbenchWorkspace(): UseQueryResult<SessionWorkspace, Error>;
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
import { useContext, createContext } from "react";
|
|
2
|
+
import { useAthenaSessionWorkspace } from "./use-session-workspace.js";
|
|
3
|
+
const SessionWorkbenchContext = createContext(null);
|
|
4
|
+
function useSessionWorkbench() {
|
|
5
|
+
const context = useContext(SessionWorkbenchContext);
|
|
6
|
+
if (context === null) {
|
|
7
|
+
throw new Error("[AthenaSDK] useSessionWorkbench must be used within <SessionWorkbench>");
|
|
8
|
+
}
|
|
9
|
+
return context;
|
|
10
|
+
}
|
|
11
|
+
const SESSION_WORKSPACE_LIVE_REFETCH_MS = 15e3;
|
|
12
|
+
function useSessionWorkbenchWorkspace() {
|
|
13
|
+
const { threadId, isPersisted, isRunning } = useSessionWorkbench();
|
|
14
|
+
return useAthenaSessionWorkspace({
|
|
15
|
+
threadId,
|
|
16
|
+
enabled: isPersisted,
|
|
17
|
+
refetchIntervalMs: isRunning ? SESSION_WORKSPACE_LIVE_REFETCH_MS : false
|
|
18
|
+
});
|
|
19
|
+
}
|
|
20
|
+
export {
|
|
21
|
+
SESSION_WORKSPACE_LIVE_REFETCH_MS,
|
|
22
|
+
SessionWorkbenchContext,
|
|
23
|
+
useSessionWorkbench,
|
|
24
|
+
useSessionWorkbenchWorkspace
|
|
25
|
+
};
|
|
26
|
+
//# sourceMappingURL=session-workbench-context.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"session-workbench-context.js","sources":["../../src/workbench/session-workbench-context.ts"],"sourcesContent":["import type { UseQueryResult } from '@tanstack/react-query';\nimport type { ComponentType, ReactNode } from 'react';\nimport { createContext, useContext } from 'react';\nimport type { SessionWorkspace } from './session-workspace-api';\nimport { useAthenaSessionWorkspace } from './use-session-workspace';\n\n/** What every pane knows about the thread the workbench shows. */\nexport interface SessionWorkbenchPaneContext {\n /**\n * The thread the chat is attached to (defined for a never-started chat too);\n * `null` outside `<AthenaProvider>`.\n */\n threadId: string | null;\n /**\n * Whether the backend knows the thread yet. A never-started chat has no\n * workspace, pull requests or history to read, so panes show their empty\n * state instead of asking.\n */\n isPersisted: boolean;\n /** Whether the thread's run is live — panes that read the backend poll while it is. */\n isRunning: boolean;\n}\n\n/**\n * One tab the workbench can open. Hosts add their own beside the built-in\n * ones (`DEFAULT_SESSION_WORKBENCH_PANES`) — a Harvey-style \"Matter\" pane, a\n * Hebbia-style \"Grid\" — and choose which open by default.\n */\nexport interface SessionWorkbenchPane {\n /** Stable id; also what `defaultOpenPaneIds` names. */\n id: string;\n /** Tab label. */\n title: string;\n /**\n * One line on what the pane shows (\"Commands the agent ran and their\n * output\"). The workbench lists it under the title when no pane is open.\n */\n description?: string;\n /** Tab icon (a lucide icon, or any component taking `className`). */\n icon?: ComponentType<{ className?: string }>;\n /** The pane body for the workbench's current thread. */\n render: (context: SessionWorkbenchPaneContext) => ReactNode;\n}\n\nexport const SessionWorkbenchContext = createContext<SessionWorkbenchPaneContext | null>(null);\n\n/**\n * The workbench's thread context, for a custom pane's components. Throws\n * outside `SessionWorkbench`.\n */\nexport function useSessionWorkbench(): SessionWorkbenchPaneContext {\n const context = useContext(SessionWorkbenchContext);\n if (context === null) {\n throw new Error('[AthenaSDK] useSessionWorkbench must be used within <SessionWorkbench>');\n }\n return context;\n}\n\n/** How often a pane re-reads the workspace while the run is live. */\nexport const SESSION_WORKSPACE_LIVE_REFETCH_MS = 15_000;\n\n/**\n * The workbench thread's workspace (computers and assets), shared by every\n * pane through one query: polled while the run is live, idle for a\n * never-started chat.\n */\nexport function useSessionWorkbenchWorkspace(): UseQueryResult<SessionWorkspace, Error> {\n const { threadId, isPersisted, isRunning } = useSessionWorkbench();\n return useAthenaSessionWorkspace({\n threadId,\n enabled: isPersisted,\n refetchIntervalMs: isRunning ? SESSION_WORKSPACE_LIVE_REFETCH_MS : false,\n });\n}\n"],"names":[],"mappings":";;AA4CO,MAAM,0BAA0B,cAAkD,IAAI;AAMtF,SAAS,sBAAmD;AACjE,QAAM,UAAU,WAAW,uBAAuB;AAClD,MAAI,YAAY,MAAM;AACpB,UAAM,IAAI,MAAM,wEAAwE;AAAA,EAC1F;AACA,SAAO;AACT;AAGO,MAAM,oCAAoC;AAO1C,SAAS,+BAAwE;AACtF,QAAM,EAAE,UAAU,aAAa,UAAA,IAAc,oBAAA;AAC7C,SAAO,0BAA0B;AAAA,IAC/B;AAAA,IACA,SAAS;AAAA,IACT,mBAAmB,YAAY,oCAAoC;AAAA,EAAA,CACpE;AACH;"}
|