@athenaintel/react 0.18.0 → 0.20.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 +195 -7
- package/dist/assets/AssetPanel.cjs +277 -0
- package/dist/assets/AssetPanel.cjs.map +1 -0
- package/dist/assets/AssetPanel.js +277 -0
- package/dist/assets/AssetPanel.js.map +1 -0
- package/dist/assets/AthenaAssetEmbed.cjs +151 -0
- package/dist/assets/AthenaAssetEmbed.cjs.map +1 -0
- package/dist/assets/AthenaAssetEmbed.js +151 -0
- package/dist/assets/AthenaAssetEmbed.js.map +1 -0
- package/dist/assets/AthenaLayout.cjs +69 -0
- package/dist/assets/AthenaLayout.cjs.map +1 -0
- package/dist/assets/AthenaLayout.js +69 -0
- package/dist/assets/AthenaLayout.js.map +1 -0
- package/dist/assets/asset-embed-messages.cjs +39 -0
- package/dist/assets/asset-embed-messages.cjs.map +1 -0
- package/dist/assets/asset-embed-messages.js +39 -0
- package/dist/assets/asset-embed-messages.js.map +1 -0
- package/dist/assets/asset-panel-store.cjs +124 -0
- package/dist/assets/asset-panel-store.cjs.map +1 -0
- package/dist/assets/asset-panel-store.js +124 -0
- package/dist/assets/asset-panel-store.js.map +1 -0
- package/dist/assets/asset-panel-url.cjs +40 -0
- package/dist/assets/asset-panel-url.cjs.map +1 -0
- package/dist/assets/asset-panel-url.js +40 -0
- package/dist/assets/asset-panel-url.js.map +1 -0
- package/dist/assets/use-asset-embed.cjs +362 -0
- package/dist/assets/use-asset-embed.cjs.map +1 -0
- package/dist/assets/use-asset-embed.js +362 -0
- package/dist/assets/use-asset-embed.js.map +1 -0
- package/dist/{AthenaAuthContext-B3AwLA5Z.cjs → auth/AthenaAuthContext.cjs} +5 -4
- package/dist/auth/AthenaAuthContext.cjs.map +1 -0
- package/dist/{AthenaAuthContext-DQsdayH2.js → auth/AthenaAuthContext.js} +3 -3
- package/dist/auth/AthenaAuthContext.js.map +1 -0
- package/dist/auth/AthenaAuthProvider.cjs +141 -0
- package/dist/auth/AthenaAuthProvider.cjs.map +1 -0
- package/dist/auth/AthenaAuthProvider.js +141 -0
- package/dist/auth/AthenaAuthProvider.js.map +1 -0
- package/dist/{auth.cjs → auth/AthenaSSOProvider.cjs} +14 -151
- package/dist/auth/AthenaSSOProvider.cjs.map +1 -0
- package/dist/{auth.js → auth/AthenaSSOProvider.js} +4 -142
- package/dist/auth/AthenaSSOProvider.js.map +1 -0
- package/dist/auth/index.cjs +10 -0
- package/dist/auth/index.cjs.map +1 -0
- package/dist/auth/index.js +10 -0
- package/dist/auth/index.js.map +1 -0
- package/dist/chat/AthenaChat.cjs +753 -0
- package/dist/chat/AthenaChat.cjs.map +1 -0
- package/dist/chat/AthenaChat.d.ts +3 -2
- package/dist/chat/AthenaChat.js +753 -0
- package/dist/chat/AthenaChat.js.map +1 -0
- package/dist/chat/AthenaChatErrorBoundary.cjs +53 -0
- package/dist/chat/AthenaChatErrorBoundary.cjs.map +1 -0
- package/dist/chat/AthenaChatErrorBoundary.js +53 -0
- package/dist/chat/AthenaChatErrorBoundary.js.map +1 -0
- package/dist/chat/StatewireApprovalCard.cjs +171 -0
- package/dist/chat/StatewireApprovalCard.cjs.map +1 -0
- package/dist/chat/StatewireApprovalCard.d.ts +59 -2
- package/dist/chat/StatewireApprovalCard.js +171 -0
- package/dist/chat/StatewireApprovalCard.js.map +1 -0
- package/dist/chat/StatewireClientToolBridge.cjs +50 -0
- package/dist/chat/StatewireClientToolBridge.cjs.map +1 -0
- package/dist/chat/StatewireClientToolBridge.d.ts +3 -3
- package/dist/chat/StatewireClientToolBridge.js +50 -0
- package/dist/chat/StatewireClientToolBridge.js.map +1 -0
- package/dist/chat/StatewireQueuedMessages.cjs +432 -0
- package/dist/chat/StatewireQueuedMessages.cjs.map +1 -0
- package/dist/chat/StatewireQueuedMessages.d.ts +104 -6
- package/dist/chat/StatewireQueuedMessages.js +432 -0
- package/dist/chat/StatewireQueuedMessages.js.map +1 -0
- package/dist/chat/athena-citation-links.cjs +326 -0
- package/dist/chat/athena-citation-links.cjs.map +1 -0
- package/dist/chat/athena-citation-links.js +326 -0
- package/dist/chat/athena-citation-links.js.map +1 -0
- package/dist/chat/run-activity.cjs +28 -0
- package/dist/chat/run-activity.cjs.map +1 -0
- package/dist/chat/run-activity.js +28 -0
- package/dist/chat/run-activity.js.map +1 -0
- package/dist/chat/statewire-approval.d.ts +1 -1
- package/dist/chat/statewire-banners.cjs +83 -0
- package/dist/chat/statewire-banners.cjs.map +1 -0
- package/dist/chat/statewire-banners.js +83 -0
- package/dist/chat/statewire-banners.js.map +1 -0
- package/dist/chat/statewire-client-tools.cjs +73 -0
- package/dist/chat/statewire-client-tools.cjs.map +1 -0
- package/dist/chat/statewire-client-tools.d.ts +15 -21
- package/dist/chat/statewire-client-tools.js +73 -0
- package/dist/chat/statewire-client-tools.js.map +1 -0
- package/dist/chat/super-grouping/CollapsibleGroup.cjs +158 -0
- package/dist/chat/super-grouping/CollapsibleGroup.cjs.map +1 -0
- package/dist/chat/super-grouping/CollapsibleGroup.d.ts +52 -11
- package/dist/chat/super-grouping/CollapsibleGroup.js +158 -0
- package/dist/chat/super-grouping/CollapsibleGroup.js.map +1 -0
- package/dist/chat/super-grouping/SuperGroupingCard.cjs +361 -0
- package/dist/chat/super-grouping/SuperGroupingCard.cjs.map +1 -0
- package/dist/chat/super-grouping/SuperGroupingCard.d.ts +81 -21
- package/dist/chat/super-grouping/SuperGroupingCard.js +361 -0
- package/dist/chat/super-grouping/SuperGroupingCard.js.map +1 -0
- package/dist/chat/super-grouping/activity-timeline.cjs +151 -0
- package/dist/chat/super-grouping/activity-timeline.cjs.map +1 -0
- package/dist/chat/super-grouping/activity-timeline.d.ts +91 -0
- package/dist/chat/super-grouping/activity-timeline.js +151 -0
- package/dist/chat/super-grouping/activity-timeline.js.map +1 -0
- package/dist/chat/super-grouping/grouping-function.cjs +55 -0
- package/dist/chat/super-grouping/grouping-function.cjs.map +1 -0
- package/dist/chat/super-grouping/grouping-function.d.ts +13 -10
- package/dist/chat/super-grouping/grouping-function.js +55 -0
- package/dist/chat/super-grouping/grouping-function.js.map +1 -0
- package/dist/chat/super-grouping/index.cjs +26 -0
- package/dist/chat/super-grouping/index.cjs.map +1 -0
- package/dist/chat/super-grouping/index.d.ts +12 -0
- package/dist/chat/super-grouping/index.js +26 -0
- package/dist/chat/super-grouping/index.js.map +1 -0
- package/dist/chat/super-grouping/toolkit-map.cjs +96 -0
- package/dist/chat/super-grouping/toolkit-map.cjs.map +1 -0
- package/dist/chat/super-grouping/toolkit-map.d.ts +8 -1
- package/dist/chat/super-grouping/toolkit-map.js +96 -0
- package/dist/chat/super-grouping/toolkit-map.js.map +1 -0
- package/dist/chat/tiptap-text.cjs +101 -0
- package/dist/chat/tiptap-text.cjs.map +1 -0
- package/dist/chat/tiptap-text.js +101 -0
- package/dist/chat/tiptap-text.js.map +1 -0
- package/dist/chat/tooltip-icon-button.cjs +32 -0
- package/dist/chat/tooltip-icon-button.cjs.map +1 -0
- package/dist/chat/tooltip-icon-button.js +32 -0
- package/dist/chat/tooltip-icon-button.js.map +1 -0
- package/dist/chat/use-athena-run-live.cjs +23 -0
- package/dist/chat/use-athena-run-live.cjs.map +1 -0
- package/dist/chat/use-athena-run-live.d.ts +10 -0
- package/dist/chat/use-athena-run-live.js +23 -0
- package/dist/chat/use-athena-run-live.js.map +1 -0
- package/dist/chat/use-statewire-approval-request.cjs +46 -0
- package/dist/chat/use-statewire-approval-request.cjs.map +1 -0
- package/dist/chat/use-statewire-approval-request.d.ts +44 -0
- package/dist/chat/use-statewire-approval-request.js +46 -0
- package/dist/chat/use-statewire-approval-request.js.map +1 -0
- package/dist/chat-ui/auth/sign-in-card.cjs +128 -0
- package/dist/chat-ui/auth/sign-in-card.cjs.map +1 -0
- package/dist/chat-ui/auth/sign-in-card.js +128 -0
- package/dist/chat-ui/auth/sign-in-card.js.map +1 -0
- package/dist/chat-ui/composer/composer-action.cjs +11 -0
- package/dist/chat-ui/composer/composer-action.cjs.map +1 -0
- package/dist/chat-ui/composer/composer-action.d.ts +5 -8
- package/dist/chat-ui/composer/composer-action.js +11 -0
- package/dist/chat-ui/composer/composer-action.js.map +1 -0
- package/dist/chat-ui/composer/pending-attachment-uploads.cjs +25 -0
- package/dist/chat-ui/composer/pending-attachment-uploads.cjs.map +1 -0
- package/dist/chat-ui/composer/pending-attachment-uploads.js +25 -0
- package/dist/chat-ui/composer/pending-attachment-uploads.js.map +1 -0
- package/dist/chat-ui/composer/tiptap-composer.cjs +590 -0
- package/dist/chat-ui/composer/tiptap-composer.cjs.map +1 -0
- package/dist/chat-ui/composer/tiptap-composer.d.ts +44 -7
- package/dist/chat-ui/composer/tiptap-composer.js +590 -0
- package/dist/chat-ui/composer/tiptap-composer.js.map +1 -0
- package/dist/chat-ui/header/chat-header.cjs +33 -0
- package/dist/chat-ui/header/chat-header.cjs.map +1 -0
- package/dist/chat-ui/header/chat-header.js +33 -0
- package/dist/chat-ui/header/chat-header.js.map +1 -0
- package/dist/chat-ui/header/conversation-history-panel.cjs +369 -0
- package/dist/chat-ui/header/conversation-history-panel.cjs.map +1 -0
- package/dist/chat-ui/header/conversation-history-panel.d.ts +11 -1
- package/dist/chat-ui/header/conversation-history-panel.js +369 -0
- package/dist/chat-ui/header/conversation-history-panel.js.map +1 -0
- package/dist/chat-ui/index.cjs +139 -0
- package/dist/chat-ui/index.cjs.map +1 -0
- package/dist/chat-ui/index.d.ts +11 -4
- package/dist/chat-ui/index.js +139 -0
- package/dist/chat-ui/index.js.map +1 -0
- package/dist/chat-ui/lib/asset-urls.cjs +18 -0
- package/dist/chat-ui/lib/asset-urls.cjs.map +1 -0
- package/dist/chat-ui/lib/asset-urls.js +18 -0
- package/dist/chat-ui/lib/asset-urls.js.map +1 -0
- package/dist/chat-ui/mentions/mention-chip.cjs +208 -0
- package/dist/chat-ui/mentions/mention-chip.cjs.map +1 -0
- package/dist/chat-ui/mentions/mention-chip.js +208 -0
- package/dist/chat-ui/mentions/mention-chip.js.map +1 -0
- package/dist/chat-ui/mentions/mention-extension.cjs +184 -0
- package/dist/chat-ui/mentions/mention-extension.cjs.map +1 -0
- package/dist/chat-ui/mentions/mention-extension.d.ts +24 -2
- package/dist/chat-ui/mentions/mention-extension.js +184 -0
- package/dist/chat-ui/mentions/mention-extension.js.map +1 -0
- package/dist/chat-ui/mentions/suggestions/components/get-scope-name.cjs +35 -0
- package/dist/chat-ui/mentions/suggestions/components/get-scope-name.cjs.map +1 -0
- package/dist/chat-ui/mentions/suggestions/components/get-scope-name.js +35 -0
- package/dist/chat-ui/mentions/suggestions/components/get-scope-name.js.map +1 -0
- package/dist/chat-ui/mentions/suggestions/components/mention-icon.cjs +95 -0
- package/dist/chat-ui/mentions/suggestions/components/mention-icon.cjs.map +1 -0
- package/dist/chat-ui/mentions/suggestions/components/mention-icon.d.ts +5 -0
- package/dist/chat-ui/mentions/suggestions/components/mention-icon.js +95 -0
- package/dist/chat-ui/mentions/suggestions/components/mention-icon.js.map +1 -0
- package/dist/chat-ui/mentions/suggestions/components/mention-suggestion-list.cjs +116 -0
- package/dist/chat-ui/mentions/suggestions/components/mention-suggestion-list.cjs.map +1 -0
- package/dist/chat-ui/mentions/suggestions/components/mention-suggestion-list.js +116 -0
- package/dist/chat-ui/mentions/suggestions/components/mention-suggestion-list.js.map +1 -0
- package/dist/chat-ui/mentions/suggestions/components/mention-suggestion-popup.cjs +31 -0
- package/dist/chat-ui/mentions/suggestions/components/mention-suggestion-popup.cjs.map +1 -0
- package/dist/chat-ui/mentions/suggestions/components/mention-suggestion-popup.js +31 -0
- package/dist/chat-ui/mentions/suggestions/components/mention-suggestion-popup.js.map +1 -0
- package/dist/chat-ui/mentions/suggestions/components/menu-breadcrumbs.cjs +27 -0
- package/dist/chat-ui/mentions/suggestions/components/menu-breadcrumbs.cjs.map +1 -0
- package/dist/chat-ui/mentions/suggestions/components/menu-breadcrumbs.js +27 -0
- package/dist/chat-ui/mentions/suggestions/components/menu-breadcrumbs.js.map +1 -0
- package/dist/chat-ui/mentions/suggestions/components/menu-item.cjs +62 -0
- package/dist/chat-ui/mentions/suggestions/components/menu-item.cjs.map +1 -0
- package/dist/chat-ui/mentions/suggestions/components/menu-item.js +62 -0
- package/dist/chat-ui/mentions/suggestions/components/menu-item.js.map +1 -0
- package/dist/chat-ui/mentions/suggestions/components/menu-list.cjs +63 -0
- package/dist/chat-ui/mentions/suggestions/components/menu-list.cjs.map +1 -0
- package/dist/chat-ui/mentions/suggestions/components/menu-list.js +63 -0
- package/dist/chat-ui/mentions/suggestions/components/menu-list.js.map +1 -0
- package/dist/chat-ui/mentions/suggestions/components/menu-skeleton.cjs +11 -0
- package/dist/chat-ui/mentions/suggestions/components/menu-skeleton.cjs.map +1 -0
- package/dist/chat-ui/mentions/suggestions/components/menu-skeleton.js +11 -0
- package/dist/chat-ui/mentions/suggestions/components/menu-skeleton.js.map +1 -0
- package/dist/chat-ui/mentions/suggestions/components/menu-summary.cjs +33 -0
- package/dist/chat-ui/mentions/suggestions/components/menu-summary.cjs.map +1 -0
- package/dist/chat-ui/mentions/suggestions/components/menu-summary.js +33 -0
- package/dist/chat-ui/mentions/suggestions/components/menu-summary.js.map +1 -0
- package/dist/chat-ui/mentions/suggestions/components/use-keyboard-navigation.cjs +58 -0
- package/dist/chat-ui/mentions/suggestions/components/use-keyboard-navigation.cjs.map +1 -0
- package/dist/chat-ui/mentions/suggestions/components/use-keyboard-navigation.js +58 -0
- package/dist/chat-ui/mentions/suggestions/components/use-keyboard-navigation.js.map +1 -0
- package/dist/chat-ui/mentions/suggestions/components/use-menu-navigation.cjs +81 -0
- package/dist/chat-ui/mentions/suggestions/components/use-menu-navigation.cjs.map +1 -0
- package/dist/chat-ui/mentions/suggestions/components/use-menu-navigation.js +81 -0
- package/dist/chat-ui/mentions/suggestions/components/use-menu-navigation.js.map +1 -0
- package/dist/chat-ui/mentions/suggestions/components/utils.cjs +18 -0
- package/dist/chat-ui/mentions/suggestions/components/utils.cjs.map +1 -0
- package/dist/chat-ui/mentions/suggestions/components/utils.js +18 -0
- package/dist/chat-ui/mentions/suggestions/components/utils.js.map +1 -0
- package/dist/chat-ui/mentions/suggestions/data/api-client.cjs +123 -0
- package/dist/chat-ui/mentions/suggestions/data/api-client.cjs.map +1 -0
- package/dist/chat-ui/mentions/suggestions/data/api-client.d.ts +10 -0
- package/dist/chat-ui/mentions/suggestions/data/api-client.js +123 -0
- package/dist/chat-ui/mentions/suggestions/data/api-client.js.map +1 -0
- package/dist/chat-ui/mentions/suggestions/data/item-cache.cjs +37 -0
- package/dist/chat-ui/mentions/suggestions/data/item-cache.cjs.map +1 -0
- package/dist/chat-ui/mentions/suggestions/data/item-cache.js +37 -0
- package/dist/chat-ui/mentions/suggestions/data/item-cache.js.map +1 -0
- package/dist/chat-ui/mentions/suggestions/data/orchestrator.cjs +134 -0
- package/dist/chat-ui/mentions/suggestions/data/orchestrator.cjs.map +1 -0
- package/dist/chat-ui/mentions/suggestions/data/orchestrator.js +134 -0
- package/dist/chat-ui/mentions/suggestions/data/orchestrator.js.map +1 -0
- package/dist/chat-ui/mentions/suggestions/data/scope-registry.cjs +91 -0
- package/dist/chat-ui/mentions/suggestions/data/scope-registry.cjs.map +1 -0
- package/dist/chat-ui/mentions/suggestions/data/scope-registry.js +91 -0
- package/dist/chat-ui/mentions/suggestions/data/scope-registry.js.map +1 -0
- package/dist/chat-ui/mentions/suggestions/data/sources/asset-type-icons.cjs +137 -0
- package/dist/chat-ui/mentions/suggestions/data/sources/asset-type-icons.cjs.map +1 -0
- package/dist/chat-ui/mentions/suggestions/data/sources/asset-type-icons.js +137 -0
- package/dist/chat-ui/mentions/suggestions/data/sources/asset-type-icons.js.map +1 -0
- package/dist/chat-ui/mentions/suggestions/data/sources/index.cjs +375 -0
- package/dist/chat-ui/mentions/suggestions/data/sources/index.cjs.map +1 -0
- package/dist/chat-ui/mentions/suggestions/data/sources/index.d.ts +16 -1
- package/dist/chat-ui/mentions/suggestions/data/sources/index.js +375 -0
- package/dist/chat-ui/mentions/suggestions/data/sources/index.js.map +1 -0
- package/dist/chat-ui/mentions/suggestions/data/types.cjs +9 -0
- package/dist/chat-ui/mentions/suggestions/data/types.cjs.map +1 -0
- package/dist/chat-ui/mentions/suggestions/data/types.d.ts +14 -0
- package/dist/chat-ui/mentions/suggestions/data/types.js +9 -0
- package/dist/chat-ui/mentions/suggestions/data/types.js.map +1 -0
- package/dist/chat-ui/mentions/suggestions/data/use-mention-suggestions.cjs +173 -0
- package/dist/chat-ui/mentions/suggestions/data/use-mention-suggestions.cjs.map +1 -0
- package/dist/chat-ui/mentions/suggestions/data/use-mention-suggestions.d.ts +14 -4
- package/dist/chat-ui/mentions/suggestions/data/use-mention-suggestions.js +173 -0
- package/dist/chat-ui/mentions/suggestions/data/use-mention-suggestions.js.map +1 -0
- package/dist/chat-ui/mentions/suggestions/data/use-menu-items.cjs +45 -0
- package/dist/chat-ui/mentions/suggestions/data/use-menu-items.cjs.map +1 -0
- package/dist/chat-ui/mentions/suggestions/data/use-menu-items.js +45 -0
- package/dist/chat-ui/mentions/suggestions/data/use-menu-items.js.map +1 -0
- package/dist/chat-ui/mentions/suggestions/data/utils/filter-items.cjs +43 -0
- package/dist/chat-ui/mentions/suggestions/data/utils/filter-items.cjs.map +1 -0
- package/dist/chat-ui/mentions/suggestions/data/utils/filter-items.js +43 -0
- package/dist/chat-ui/mentions/suggestions/data/utils/filter-items.js.map +1 -0
- package/dist/chat-ui/mentions/suggestions/data/utils/match-query.cjs +14 -0
- package/dist/chat-ui/mentions/suggestions/data/utils/match-query.cjs.map +1 -0
- package/dist/chat-ui/mentions/suggestions/data/utils/match-query.js +14 -0
- package/dist/chat-ui/mentions/suggestions/data/utils/match-query.js.map +1 -0
- package/dist/chat-ui/mentions/suggestions/data/utils/score-match.cjs +48 -0
- package/dist/chat-ui/mentions/suggestions/data/utils/score-match.cjs.map +1 -0
- package/dist/chat-ui/mentions/suggestions/data/utils/score-match.js +48 -0
- package/dist/chat-ui/mentions/suggestions/data/utils/score-match.js.map +1 -0
- package/dist/chat-ui/mentions/suggestions/mention-suggestions.extension.cjs +71 -0
- package/dist/chat-ui/mentions/suggestions/mention-suggestions.extension.cjs.map +1 -0
- package/dist/chat-ui/mentions/suggestions/mention-suggestions.extension.js +71 -0
- package/dist/chat-ui/mentions/suggestions/mention-suggestions.extension.js.map +1 -0
- package/dist/chat-ui/mentions/suggestions/shims.d.ts +0 -4
- package/dist/chat-ui/messages/continue-pill.cjs +54 -0
- package/dist/chat-ui/messages/continue-pill.cjs.map +1 -0
- package/dist/chat-ui/messages/continue-pill.js +54 -0
- package/dist/chat-ui/messages/continue-pill.js.map +1 -0
- package/dist/chat-ui/messages/message-actions-config.cjs +12 -0
- package/dist/chat-ui/messages/message-actions-config.cjs.map +1 -0
- package/dist/chat-ui/messages/message-actions-config.js +12 -0
- package/dist/chat-ui/messages/message-actions-config.js.map +1 -0
- package/dist/chat-ui/messages/message-components.cjs +343 -0
- package/dist/chat-ui/messages/message-components.cjs.map +1 -0
- package/dist/chat-ui/messages/message-components.d.ts +13 -1
- package/dist/chat-ui/messages/message-components.js +343 -0
- package/dist/chat-ui/messages/message-components.js.map +1 -0
- package/dist/chat-ui/messages/running-indicator.cjs +49 -0
- package/dist/chat-ui/messages/running-indicator.cjs.map +1 -0
- package/dist/chat-ui/messages/running-indicator.js +49 -0
- package/dist/chat-ui/messages/running-indicator.js.map +1 -0
- package/dist/chat-ui/messages/runtime-message.cjs +65 -0
- package/dist/chat-ui/messages/runtime-message.cjs.map +1 -0
- package/dist/chat-ui/messages/runtime-message.d.ts +2 -3
- package/dist/chat-ui/messages/runtime-message.js +65 -0
- package/dist/chat-ui/messages/runtime-message.js.map +1 -0
- package/dist/chat-ui/messages/statewire-continue-run.cjs +154 -0
- package/dist/chat-ui/messages/statewire-continue-run.cjs.map +1 -0
- package/dist/chat-ui/messages/statewire-continue-run.d.ts +52 -7
- package/dist/chat-ui/messages/statewire-continue-run.js +154 -0
- package/dist/chat-ui/messages/statewire-continue-run.js.map +1 -0
- package/dist/chat-ui/messages/user-edit-composer.cjs +61 -0
- package/dist/chat-ui/messages/user-edit-composer.cjs.map +1 -0
- package/dist/chat-ui/messages/user-edit-composer.d.ts +5 -2
- package/dist/chat-ui/messages/user-edit-composer.js +61 -0
- package/dist/chat-ui/messages/user-edit-composer.js.map +1 -0
- package/dist/chat-ui/messages/voice-delegation-card.cjs +51 -0
- package/dist/chat-ui/messages/voice-delegation-card.cjs.map +1 -0
- package/dist/chat-ui/messages/voice-delegation-card.d.ts +26 -0
- package/dist/chat-ui/messages/voice-delegation-card.js +51 -0
- package/dist/chat-ui/messages/voice-delegation-card.js.map +1 -0
- package/dist/chat-ui/statewire.cjs +39 -0
- package/dist/chat-ui/statewire.cjs.map +1 -0
- package/dist/chat-ui/statewire.d.ts +19 -0
- package/dist/chat-ui/statewire.js +39 -0
- package/dist/chat-ui/statewire.js.map +1 -0
- package/dist/chat-ui/thread/chat-composer-dock.cjs +37 -0
- package/dist/chat-ui/thread/chat-composer-dock.cjs.map +1 -0
- package/dist/chat-ui/thread/chat-composer-dock.js +37 -0
- package/dist/chat-ui/thread/chat-composer-dock.js.map +1 -0
- package/dist/chat-ui/thread/chat-thread-shell.cjs +102 -0
- package/dist/chat-ui/thread/chat-thread-shell.cjs.map +1 -0
- package/dist/chat-ui/thread/chat-thread-shell.d.ts +7 -1
- package/dist/chat-ui/thread/chat-thread-shell.js +102 -0
- package/dist/chat-ui/thread/chat-thread-shell.js.map +1 -0
- package/dist/chat-ui/thread/composer-send-or-stop.cjs +75 -0
- package/dist/chat-ui/thread/composer-send-or-stop.cjs.map +1 -0
- package/dist/chat-ui/thread/composer-send-or-stop.d.ts +0 -6
- package/dist/chat-ui/thread/composer-send-or-stop.js +75 -0
- package/dist/chat-ui/thread/composer-send-or-stop.js.map +1 -0
- package/dist/chat-ui/thread/statewire-history-edge.cjs +134 -0
- package/dist/chat-ui/thread/statewire-history-edge.cjs.map +1 -0
- package/dist/chat-ui/thread/statewire-history-edge.d.ts +52 -0
- package/dist/chat-ui/thread/statewire-history-edge.js +134 -0
- package/dist/chat-ui/thread/statewire-history-edge.js.map +1 -0
- package/dist/{collab.cjs → collab/client.cjs} +6 -166
- package/dist/collab/client.cjs.map +1 -0
- package/dist/{collab.js → collab/client.js} +5 -164
- package/dist/collab/client.js.map +1 -0
- package/dist/collab/close-policy.cjs +14 -0
- package/dist/collab/close-policy.cjs.map +1 -0
- package/dist/collab/close-policy.js +14 -0
- package/dist/collab/close-policy.js.map +1 -0
- package/dist/collab/index.cjs +17 -0
- package/dist/collab/index.cjs.map +1 -0
- package/dist/collab/index.js +17 -0
- package/dist/collab/index.js.map +1 -0
- package/dist/collab/mint.cjs +59 -0
- package/dist/collab/mint.cjs.map +1 -0
- package/dist/collab/mint.js +59 -0
- package/dist/collab/mint.js.map +1 -0
- package/dist/collab/react.cjs +58 -0
- package/dist/collab/react.cjs.map +1 -0
- package/dist/collab/react.js +58 -0
- package/dist/collab/react.js.map +1 -0
- package/dist/collab/shape.cjs +45 -0
- package/dist/collab/shape.cjs.map +1 -0
- package/dist/collab/shape.js +45 -0
- package/dist/collab/shape.js.map +1 -0
- package/dist/composer/AttachmentContext.cjs +40 -0
- package/dist/composer/AttachmentContext.cjs.map +1 -0
- package/dist/composer/AttachmentContext.js +40 -0
- package/dist/composer/AttachmentContext.js.map +1 -0
- package/dist/composer/ComposerAttachmentPreview.cjs +39 -0
- package/dist/composer/ComposerAttachmentPreview.cjs.map +1 -0
- package/dist/composer/ComposerAttachmentPreview.js +39 -0
- package/dist/composer/ComposerAttachmentPreview.js.map +1 -0
- package/dist/composer/ComposerDropZone.cjs +61 -0
- package/dist/composer/ComposerDropZone.cjs.map +1 -0
- package/dist/composer/ComposerDropZone.d.ts +1 -1
- package/dist/composer/ComposerDropZone.js +61 -0
- package/dist/composer/ComposerDropZone.js.map +1 -0
- package/dist/composer/ComposerQuotePreview.cjs +42 -0
- package/dist/composer/ComposerQuotePreview.cjs.map +1 -0
- package/dist/composer/ComposerQuotePreview.js +42 -0
- package/dist/composer/ComposerQuotePreview.js.map +1 -0
- package/dist/composer/FileUploadButton.cjs +65 -0
- package/dist/composer/FileUploadButton.cjs.map +1 -0
- package/dist/composer/FileUploadButton.d.ts +1 -1
- package/dist/composer/FileUploadButton.js +65 -0
- package/dist/composer/FileUploadButton.js.map +1 -0
- package/dist/composer/QuoteContext.cjs +68 -0
- package/dist/composer/QuoteContext.cjs.map +1 -0
- package/dist/composer/QuoteContext.js +68 -0
- package/dist/composer/QuoteContext.js.map +1 -0
- package/dist/composer/build-composed-message.cjs +25 -0
- package/dist/composer/build-composed-message.cjs.map +1 -0
- package/dist/composer/build-composed-message.js +25 -0
- package/dist/composer/build-composed-message.js.map +1 -0
- package/dist/composer/clipboard.cjs +62 -0
- package/dist/composer/clipboard.cjs.map +1 -0
- package/dist/composer/clipboard.d.ts +27 -3
- package/dist/composer/clipboard.js +62 -0
- package/dist/composer/clipboard.js.map +1 -0
- package/dist/composer/useAppendToComposer.cjs +21 -0
- package/dist/composer/useAppendToComposer.cjs.map +1 -0
- package/dist/composer/useAppendToComposer.js +21 -0
- package/dist/composer/useAppendToComposer.js.map +1 -0
- package/dist/composer/useAttachFiles.cjs +40 -0
- package/dist/composer/useAttachFiles.cjs.map +1 -0
- package/dist/composer/useAttachFiles.d.ts +24 -0
- package/dist/composer/useAttachFiles.js +40 -0
- package/dist/composer/useAttachFiles.js.map +1 -0
- package/dist/composer/useComposerAttachment.cjs +25 -0
- package/dist/composer/useComposerAttachment.cjs.map +1 -0
- package/dist/composer/useComposerAttachment.js +25 -0
- package/dist/composer/useComposerAttachment.js.map +1 -0
- package/dist/composer/useFileUpload.cjs +123 -0
- package/dist/composer/useFileUpload.cjs.map +1 -0
- package/dist/composer/useFileUpload.js +123 -0
- package/dist/composer/useFileUpload.js.map +1 -0
- package/dist/composer/useSendMessage.cjs +22 -0
- package/dist/composer/useSendMessage.cjs.map +1 -0
- package/dist/composer/useSendMessage.js +22 -0
- package/dist/composer/useSendMessage.js.map +1 -0
- package/dist/diagnostics/athena-diagnostics.cjs +329 -0
- package/dist/diagnostics/athena-diagnostics.cjs.map +1 -0
- package/dist/diagnostics/athena-diagnostics.d.ts +1 -1
- package/dist/diagnostics/athena-diagnostics.js +329 -0
- package/dist/diagnostics/athena-diagnostics.js.map +1 -0
- package/dist/diagnostics/errors.cjs +89 -0
- package/dist/diagnostics/errors.cjs.map +1 -0
- package/dist/diagnostics/errors.d.ts +4 -0
- package/dist/diagnostics/errors.js +89 -0
- package/dist/diagnostics/errors.js.map +1 -0
- package/dist/diagnostics/useAthenaDiagnostics.cjs +16 -0
- package/dist/diagnostics/useAthenaDiagnostics.cjs.map +1 -0
- package/dist/diagnostics/useAthenaDiagnostics.js +16 -0
- package/dist/diagnostics/useAthenaDiagnostics.js.map +1 -0
- package/dist/index.cjs +283 -30852
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.ts +27 -10
- package/dist/index.js +155 -30711
- package/dist/index.js.map +1 -1
- package/dist/lib/athena-urls.cjs +194 -0
- package/dist/lib/athena-urls.cjs.map +1 -0
- package/dist/lib/athena-urls.d.ts +20 -5
- package/dist/lib/athena-urls.js +194 -0
- package/dist/lib/athena-urls.js.map +1 -0
- package/dist/lib/posthog/before-send.cjs +58 -0
- package/dist/lib/posthog/before-send.cjs.map +1 -0
- package/dist/lib/posthog/before-send.js +58 -0
- package/dist/lib/posthog/before-send.js.map +1 -0
- package/dist/lib/posthog/capture-gate.cjs +322 -0
- package/dist/lib/posthog/capture-gate.cjs.map +1 -0
- package/dist/lib/posthog/capture-gate.js +322 -0
- package/dist/lib/posthog/capture-gate.js.map +1 -0
- package/dist/lib/posthog/wrap-posthog-client.cjs +163 -0
- package/dist/lib/posthog/wrap-posthog-client.cjs.map +1 -0
- package/dist/lib/posthog/wrap-posthog-client.js +163 -0
- package/dist/lib/posthog/wrap-posthog-client.js.map +1 -0
- package/dist/lib/utils.cjs +12 -0
- package/dist/lib/utils.cjs.map +1 -0
- package/dist/lib/utils.js +9 -0
- package/dist/lib/utils.js.map +1 -0
- package/dist/node_modules/@assistant-ui/react-langchain/dist/converter.cjs +77 -0
- package/dist/node_modules/@assistant-ui/react-langchain/dist/converter.cjs.map +1 -0
- package/dist/node_modules/@assistant-ui/react-langchain/dist/converter.js +77 -0
- package/dist/node_modules/@assistant-ui/react-langchain/dist/converter.js.map +1 -0
- package/dist/node_modules/@assistant-ui/react-langgraph/dist/convertLangChainMessages.cjs +181 -0
- package/dist/node_modules/@assistant-ui/react-langgraph/dist/convertLangChainMessages.cjs.map +1 -0
- package/dist/node_modules/@assistant-ui/react-langgraph/dist/convertLangChainMessages.js +181 -0
- package/dist/node_modules/@assistant-ui/react-langgraph/dist/convertLangChainMessages.js.map +1 -0
- package/dist/packages/agent-runtime/src/asset-attachment.cjs +19 -0
- package/dist/packages/agent-runtime/src/asset-attachment.cjs.map +1 -0
- package/dist/packages/agent-runtime/src/asset-attachment.js +19 -0
- package/dist/packages/agent-runtime/src/asset-attachment.js.map +1 -0
- package/dist/packages/agent-runtime/src/auth-denial.cjs +28 -0
- package/dist/packages/agent-runtime/src/auth-denial.cjs.map +1 -0
- package/dist/packages/agent-runtime/src/auth-denial.js +28 -0
- package/dist/packages/agent-runtime/src/auth-denial.js.map +1 -0
- package/dist/packages/agent-runtime/src/client-tool-bridge.cjs +270 -0
- package/dist/packages/agent-runtime/src/client-tool-bridge.cjs.map +1 -0
- package/dist/packages/agent-runtime/src/client-tool-bridge.js +270 -0
- package/dist/packages/agent-runtime/src/client-tool-bridge.js.map +1 -0
- package/dist/packages/agent-runtime/src/client-tools.cjs +137 -0
- package/dist/packages/agent-runtime/src/client-tools.cjs.map +1 -0
- package/dist/packages/agent-runtime/src/client-tools.js +137 -0
- package/dist/packages/agent-runtime/src/client-tools.js.map +1 -0
- package/dist/packages/agent-runtime/src/conversation-index.cjs +80 -0
- package/dist/packages/agent-runtime/src/conversation-index.cjs.map +1 -0
- package/dist/packages/agent-runtime/src/conversation-index.js +80 -0
- package/dist/packages/agent-runtime/src/conversation-index.js.map +1 -0
- package/dist/packages/agent-runtime/src/conversation-list.cjs +86 -0
- package/dist/packages/agent-runtime/src/conversation-list.cjs.map +1 -0
- package/dist/packages/agent-runtime/src/conversation-list.js +86 -0
- package/dist/packages/agent-runtime/src/conversation-list.js.map +1 -0
- package/dist/packages/agent-runtime/src/deep-agent-transport-recipe.cjs +55 -0
- package/dist/packages/agent-runtime/src/deep-agent-transport-recipe.cjs.map +1 -0
- package/dist/packages/agent-runtime/src/deep-agent-transport-recipe.js +55 -0
- package/dist/packages/agent-runtime/src/deep-agent-transport-recipe.js.map +1 -0
- package/dist/packages/agent-runtime/src/edit-command.cjs +89 -0
- package/dist/packages/agent-runtime/src/edit-command.cjs.map +1 -0
- package/dist/packages/agent-runtime/src/edit-command.js +89 -0
- package/dist/packages/agent-runtime/src/edit-command.js.map +1 -0
- package/dist/packages/agent-runtime/src/errors.cjs +95 -0
- package/dist/packages/agent-runtime/src/errors.cjs.map +1 -0
- package/dist/packages/agent-runtime/src/errors.js +95 -0
- package/dist/packages/agent-runtime/src/errors.js.map +1 -0
- package/dist/packages/agent-runtime/src/generated/runconfig-contract.cjs +236 -0
- package/dist/packages/agent-runtime/src/generated/runconfig-contract.cjs.map +1 -0
- package/dist/packages/agent-runtime/src/generated/runconfig-contract.js +236 -0
- package/dist/packages/agent-runtime/src/generated/runconfig-contract.js.map +1 -0
- package/dist/packages/agent-runtime/src/interrupts.cjs +117 -0
- package/dist/packages/agent-runtime/src/interrupts.cjs.map +1 -0
- package/dist/packages/agent-runtime/src/interrupts.js +117 -0
- package/dist/packages/agent-runtime/src/interrupts.js.map +1 -0
- package/dist/packages/agent-runtime/src/message-author.cjs +31 -0
- package/dist/packages/agent-runtime/src/message-author.cjs.map +1 -0
- package/dist/packages/agent-runtime/src/message-author.js +31 -0
- package/dist/packages/agent-runtime/src/message-author.js.map +1 -0
- package/dist/packages/agent-runtime/src/message-window.cjs +85 -0
- package/dist/packages/agent-runtime/src/message-window.cjs.map +1 -0
- package/dist/packages/agent-runtime/src/message-window.js +85 -0
- package/dist/packages/agent-runtime/src/message-window.js.map +1 -0
- package/dist/packages/agent-runtime/src/messages.cjs +433 -0
- package/dist/packages/agent-runtime/src/messages.cjs.map +1 -0
- package/dist/packages/agent-runtime/src/messages.js +433 -0
- package/dist/packages/agent-runtime/src/messages.js.map +1 -0
- package/dist/packages/agent-runtime/src/model-context.cjs +13 -0
- package/dist/packages/agent-runtime/src/model-context.cjs.map +1 -0
- package/dist/packages/agent-runtime/src/model-context.js +13 -0
- package/dist/packages/agent-runtime/src/model-context.js.map +1 -0
- package/dist/packages/agent-runtime/src/optimistic-content.cjs +17 -0
- package/dist/packages/agent-runtime/src/optimistic-content.cjs.map +1 -0
- package/dist/packages/agent-runtime/src/optimistic-content.js +17 -0
- package/dist/packages/agent-runtime/src/optimistic-content.js.map +1 -0
- package/dist/packages/agent-runtime/src/protocol.cjs +33 -0
- package/dist/packages/agent-runtime/src/protocol.cjs.map +1 -0
- package/dist/packages/agent-runtime/src/protocol.js +33 -0
- package/dist/packages/agent-runtime/src/protocol.js.map +1 -0
- package/dist/packages/agent-runtime/src/queue.cjs +67 -0
- package/dist/packages/agent-runtime/src/queue.cjs.map +1 -0
- package/dist/packages/agent-runtime/src/queue.js +67 -0
- package/dist/packages/agent-runtime/src/queue.js.map +1 -0
- package/dist/packages/agent-runtime/src/quota-safe-local-storage-session.cjs +47 -0
- package/dist/packages/agent-runtime/src/quota-safe-local-storage-session.cjs.map +1 -0
- package/dist/packages/agent-runtime/src/quota-safe-local-storage-session.js +47 -0
- package/dist/packages/agent-runtime/src/quota-safe-local-storage-session.js.map +1 -0
- package/dist/packages/agent-runtime/src/runtime-messages.cjs +187 -0
- package/dist/packages/agent-runtime/src/runtime-messages.cjs.map +1 -0
- package/dist/packages/agent-runtime/src/runtime-messages.js +187 -0
- package/dist/packages/agent-runtime/src/runtime-messages.js.map +1 -0
- package/dist/packages/agent-runtime/src/send-recovery.cjs +128 -0
- package/dist/packages/agent-runtime/src/send-recovery.cjs.map +1 -0
- package/dist/packages/agent-runtime/src/send-recovery.js +128 -0
- package/dist/packages/agent-runtime/src/send-recovery.js.map +1 -0
- package/dist/packages/agent-runtime/src/statewire-attach-observer.cjs +249 -0
- package/dist/packages/agent-runtime/src/statewire-attach-observer.cjs.map +1 -0
- package/dist/packages/agent-runtime/src/statewire-attach-observer.js +249 -0
- package/dist/packages/agent-runtime/src/statewire-attach-observer.js.map +1 -0
- package/dist/packages/agent-runtime/src/statewire-state.cjs +16 -0
- package/dist/packages/agent-runtime/src/statewire-state.cjs.map +1 -0
- package/dist/packages/agent-runtime/src/statewire-state.js +16 -0
- package/dist/packages/agent-runtime/src/statewire-state.js.map +1 -0
- package/dist/packages/agent-runtime/src/statewire-suspended.cjs +41 -0
- package/dist/packages/agent-runtime/src/statewire-suspended.cjs.map +1 -0
- package/dist/packages/agent-runtime/src/statewire-suspended.js +41 -0
- package/dist/packages/agent-runtime/src/statewire-suspended.js.map +1 -0
- package/dist/packages/agent-runtime/src/statewire-transport.cjs +6 -0
- package/dist/packages/agent-runtime/src/statewire-transport.cjs.map +1 -0
- package/dist/packages/agent-runtime/src/statewire-transport.js +6 -0
- package/dist/packages/agent-runtime/src/statewire-transport.js.map +1 -0
- package/dist/packages/agent-runtime/src/streaming-markdown.cjs +214 -0
- package/dist/packages/agent-runtime/src/streaming-markdown.cjs.map +1 -0
- package/dist/packages/agent-runtime/src/streaming-markdown.js +214 -0
- package/dist/packages/agent-runtime/src/streaming-markdown.js.map +1 -0
- package/dist/packages/agent-runtime/src/thread-extras.cjs +38 -0
- package/dist/packages/agent-runtime/src/thread-extras.cjs.map +1 -0
- package/dist/packages/agent-runtime/src/thread-extras.js +38 -0
- package/dist/packages/agent-runtime/src/thread-extras.js.map +1 -0
- package/dist/packages/agent-runtime/src/thread-snapshot-cache.cjs +90 -0
- package/dist/packages/agent-runtime/src/thread-snapshot-cache.cjs.map +1 -0
- package/dist/packages/agent-runtime/src/thread-snapshot-cache.js +90 -0
- package/dist/packages/agent-runtime/src/thread-snapshot-cache.js.map +1 -0
- package/dist/packages/agent-runtime/src/thread-status.cjs +49 -0
- package/dist/packages/agent-runtime/src/thread-status.cjs.map +1 -0
- package/dist/packages/agent-runtime/src/thread-status.js +49 -0
- package/dist/packages/agent-runtime/src/thread-status.js.map +1 -0
- package/dist/packages/agent-runtime/src/tool-metadata.cjs +1802 -0
- package/dist/packages/agent-runtime/src/tool-metadata.cjs.map +1 -0
- package/dist/packages/agent-runtime/src/tool-metadata.js +1802 -0
- package/dist/packages/agent-runtime/src/tool-metadata.js.map +1 -0
- package/dist/packages/agent-runtime/src/tool-outputs.cjs +46 -0
- package/dist/packages/agent-runtime/src/tool-outputs.cjs.map +1 -0
- package/dist/packages/agent-runtime/src/tool-outputs.js +46 -0
- package/dist/packages/agent-runtime/src/tool-outputs.js.map +1 -0
- package/dist/packages/agent-runtime/src/tool-result.cjs +151 -0
- package/dist/packages/agent-runtime/src/tool-result.cjs.map +1 -0
- package/dist/packages/agent-runtime/src/tool-result.js +151 -0
- package/dist/packages/agent-runtime/src/tool-result.js.map +1 -0
- package/dist/packages/agent-runtime/src/use-conversation-list.cjs +139 -0
- package/dist/packages/agent-runtime/src/use-conversation-list.cjs.map +1 -0
- package/dist/packages/agent-runtime/src/use-conversation-list.js +139 -0
- package/dist/packages/agent-runtime/src/use-conversation-list.js.map +1 -0
- package/dist/packages/agent-runtime/src/use-deep-agent-edit-submit.cjs +28 -0
- package/dist/packages/agent-runtime/src/use-deep-agent-edit-submit.cjs.map +1 -0
- package/dist/packages/agent-runtime/src/use-deep-agent-edit-submit.js +28 -0
- package/dist/packages/agent-runtime/src/use-deep-agent-edit-submit.js.map +1 -0
- package/dist/packages/agent-runtime/src/use-deep-agent-runtime.cjs +138 -0
- package/dist/packages/agent-runtime/src/use-deep-agent-runtime.cjs.map +1 -0
- package/dist/packages/agent-runtime/src/use-deep-agent-runtime.js +138 -0
- package/dist/packages/agent-runtime/src/use-deep-agent-runtime.js.map +1 -0
- package/dist/packages/agent-runtime/src/use-deep-agent-thread.cjs +387 -0
- package/dist/packages/agent-runtime/src/use-deep-agent-thread.cjs.map +1 -0
- package/dist/packages/agent-runtime/src/use-deep-agent-thread.js +387 -0
- package/dist/packages/agent-runtime/src/use-deep-agent-thread.js.map +1 -0
- package/dist/packages/agent-runtime/src/use-deep-agent-window-sync.cjs +133 -0
- package/dist/packages/agent-runtime/src/use-deep-agent-window-sync.cjs.map +1 -0
- package/dist/packages/agent-runtime/src/use-deep-agent-window-sync.js +133 -0
- package/dist/packages/agent-runtime/src/use-deep-agent-window-sync.js.map +1 -0
- package/dist/packages/agent-runtime/src/voice-presentation.cjs +37 -0
- package/dist/packages/agent-runtime/src/voice-presentation.cjs.map +1 -0
- package/dist/packages/agent-runtime/src/voice-presentation.js +37 -0
- package/dist/packages/agent-runtime/src/voice-presentation.js.map +1 -0
- package/dist/packages/react/package.json.cjs +9 -0
- package/dist/packages/react/package.json.cjs.map +1 -0
- package/dist/packages/react/package.json.js +9 -0
- package/dist/packages/react/package.json.js.map +1 -0
- package/dist/{AthenaContext-B1QMhIP-.cjs → provider/AthenaContext.cjs} +5 -4
- package/dist/provider/AthenaContext.cjs.map +1 -0
- package/dist/{AthenaContext-MOslgOmE.js → provider/AthenaContext.js} +3 -3
- package/dist/provider/AthenaContext.js.map +1 -0
- package/dist/provider/AthenaProvider.cjs +403 -0
- package/dist/provider/AthenaProvider.cjs.map +1 -0
- package/dist/provider/AthenaProvider.d.ts +4 -2
- package/dist/provider/AthenaProvider.js +403 -0
- package/dist/provider/AthenaProvider.js.map +1 -0
- package/dist/provider/PostHogProvider.cjs +81 -0
- package/dist/provider/PostHogProvider.cjs.map +1 -0
- package/dist/provider/PostHogProvider.js +59 -0
- package/dist/provider/PostHogProvider.js.map +1 -0
- package/dist/provider/config.d.ts +17 -9
- package/dist/provider/statewire-lifecycle-context.cjs +10 -0
- package/dist/provider/statewire-lifecycle-context.cjs.map +1 -0
- package/dist/provider/statewire-lifecycle-context.js +10 -0
- package/dist/provider/statewire-lifecycle-context.js.map +1 -0
- package/dist/provider/statewire-window-context.cjs +10 -0
- package/dist/provider/statewire-window-context.cjs.map +1 -0
- package/dist/provider/statewire-window-context.d.ts +12 -0
- package/dist/provider/statewire-window-context.js +10 -0
- package/dist/provider/statewire-window-context.js.map +1 -0
- package/dist/runtime/auth.cjs +309 -0
- package/dist/runtime/auth.cjs.map +1 -0
- package/dist/runtime/auth.d.ts +19 -18
- package/dist/runtime/auth.js +309 -0
- package/dist/runtime/auth.js.map +1 -0
- package/dist/runtime/statewire-auth-headers.cjs +18 -0
- package/dist/runtime/statewire-auth-headers.cjs.map +1 -0
- package/dist/runtime/statewire-auth-headers.d.ts +38 -0
- package/dist/runtime/statewire-auth-headers.js +18 -0
- package/dist/runtime/statewire-auth-headers.js.map +1 -0
- package/dist/runtime/statewire-lifecycle.cjs +67 -0
- package/dist/runtime/statewire-lifecycle.cjs.map +1 -0
- package/dist/runtime/statewire-lifecycle.d.ts +25 -0
- package/dist/runtime/statewire-lifecycle.js +67 -0
- package/dist/runtime/statewire-lifecycle.js.map +1 -0
- package/dist/runtime/statewire-run-config.cjs +68 -0
- package/dist/runtime/statewire-run-config.cjs.map +1 -0
- package/dist/runtime/statewire-run-config.js +68 -0
- package/dist/runtime/statewire-run-config.js.map +1 -0
- package/dist/runtime/statewire-session-key.cjs +11 -0
- package/dist/runtime/statewire-session-key.cjs.map +1 -0
- package/dist/runtime/statewire-session-key.d.ts +13 -0
- package/dist/runtime/statewire-session-key.js +11 -0
- package/dist/runtime/statewire-session-key.js.map +1 -0
- package/dist/runtime/useAthenaStatewireRuntime.cjs +179 -0
- package/dist/runtime/useAthenaStatewireRuntime.cjs.map +1 -0
- package/dist/runtime/useAthenaStatewireRuntime.d.ts +36 -5
- package/dist/runtime/useAthenaStatewireRuntime.js +180 -0
- package/dist/runtime/useAthenaStatewireRuntime.js.map +1 -0
- package/dist/styles.css +1 -1
- package/dist/theme/index.cjs +182 -0
- package/dist/theme/index.cjs.map +1 -0
- package/dist/theme/index.js +182 -0
- package/dist/theme/index.js.map +1 -0
- package/dist/threads/ThreadList.cjs +55 -0
- package/dist/threads/ThreadList.cjs.map +1 -0
- package/dist/threads/ThreadList.js +55 -0
- package/dist/threads/ThreadList.js.map +1 -0
- package/dist/threads/api.cjs +208 -0
- package/dist/threads/api.cjs.map +1 -0
- package/dist/threads/api.js +208 -0
- package/dist/threads/api.js.map +1 -0
- package/dist/threads/conversation-list-fetcher.cjs +70 -0
- package/dist/threads/conversation-list-fetcher.cjs.map +1 -0
- package/dist/threads/conversation-list-fetcher.js +70 -0
- package/dist/threads/conversation-list-fetcher.js.map +1 -0
- package/dist/threads/mint-thread-id.cjs +7 -0
- package/dist/threads/mint-thread-id.cjs.map +1 -0
- package/dist/threads/mint-thread-id.d.ts +8 -0
- package/dist/threads/mint-thread-id.js +7 -0
- package/dist/threads/mint-thread-id.js.map +1 -0
- package/dist/threads/statewire-thread-list.cjs +231 -0
- package/dist/threads/statewire-thread-list.cjs.map +1 -0
- package/dist/threads/statewire-thread-list.d.ts +20 -4
- package/dist/threads/statewire-thread-list.js +231 -0
- package/dist/threads/statewire-thread-list.js.map +1 -0
- package/dist/threads/thread-id-context.cjs +22 -0
- package/dist/threads/thread-id-context.cjs.map +1 -0
- package/dist/threads/thread-id-context.d.ts +9 -0
- package/dist/threads/thread-id-context.js +22 -0
- package/dist/threads/thread-id-context.js.map +1 -0
- package/dist/threads/title.cjs +95 -0
- package/dist/threads/title.cjs.map +1 -0
- package/dist/threads/title.js +95 -0
- package/dist/threads/title.js.map +1 -0
- package/dist/threads/use-rest-conversation-history.cjs +79 -0
- package/dist/threads/use-rest-conversation-history.cjs.map +1 -0
- package/dist/threads/use-rest-conversation-history.js +79 -0
- package/dist/threads/use-rest-conversation-history.js.map +1 -0
- package/dist/threads/use-statewire-conversation-history.cjs +243 -0
- package/dist/threads/use-statewire-conversation-history.cjs.map +1 -0
- package/dist/threads/use-statewire-conversation-history.js +243 -0
- package/dist/threads/use-statewire-conversation-history.js.map +1 -0
- package/dist/threads/useAthenaThreadManager.cjs +24 -0
- package/dist/threads/useAthenaThreadManager.cjs.map +1 -0
- package/dist/threads/useAthenaThreadManager.js +24 -0
- package/dist/threads/useAthenaThreadManager.js.map +1 -0
- package/dist/toolkits/index.cjs +279 -0
- package/dist/toolkits/index.cjs.map +1 -0
- package/dist/toolkits/index.js +279 -0
- package/dist/toolkits/index.js.map +1 -0
- package/dist/tools/NestedPtcMessages.cjs +46 -0
- package/dist/tools/NestedPtcMessages.cjs.map +1 -0
- package/dist/tools/NestedPtcMessages.js +46 -0
- package/dist/tools/NestedPtcMessages.js.map +1 -0
- package/dist/tools/append-document-tool-ui.cjs +145 -0
- package/dist/tools/append-document-tool-ui.cjs.map +1 -0
- package/dist/tools/append-document-tool-ui.js +145 -0
- package/dist/tools/append-document-tool-ui.js.map +1 -0
- package/dist/tools/asset-utils.cjs +16 -0
- package/dist/tools/asset-utils.cjs.map +1 -0
- package/dist/tools/asset-utils.js +16 -0
- package/dist/tools/asset-utils.js.map +1 -0
- package/dist/tools/auto-open-tools.cjs +121 -0
- package/dist/tools/auto-open-tools.cjs.map +1 -0
- package/dist/tools/auto-open-tools.js +121 -0
- package/dist/tools/auto-open-tools.js.map +1 -0
- package/dist/tools/file-tool-uis.cjs +108 -0
- package/dist/tools/file-tool-uis.cjs.map +1 -0
- package/dist/tools/file-tool-uis.js +108 -0
- package/dist/tools/file-tool-uis.js.map +1 -0
- package/dist/tools/index.cjs +56 -0
- package/dist/tools/index.cjs.map +1 -0
- package/dist/tools/index.d.ts +15 -0
- package/dist/tools/index.js +56 -0
- package/dist/tools/index.js.map +1 -0
- package/dist/tools/misc-tool-uis.cjs +54 -0
- package/dist/tools/misc-tool-uis.cjs.map +1 -0
- package/dist/tools/misc-tool-uis.d.ts +2 -0
- package/dist/tools/misc-tool-uis.js +54 -0
- package/dist/tools/misc-tool-uis.js.map +1 -0
- package/dist/tools/primitives.cjs +166 -0
- package/dist/tools/primitives.cjs.map +1 -0
- package/dist/tools/primitives.d.ts +41 -0
- package/dist/tools/primitives.js +166 -0
- package/dist/tools/primitives.js.map +1 -0
- package/dist/tools/read-asset-tool-ui.cjs +284 -0
- package/dist/tools/read-asset-tool-ui.cjs.map +1 -0
- package/dist/tools/read-asset-tool-ui.js +284 -0
- package/dist/tools/read-asset-tool-ui.js.map +1 -0
- package/dist/tools/todo-plan-store.cjs +88 -0
- package/dist/tools/todo-plan-store.cjs.map +1 -0
- package/dist/tools/todo-plan-store.js +88 -0
- package/dist/tools/todo-plan-store.js.map +1 -0
- package/dist/tools/tool-fallback.cjs +667 -0
- package/dist/tools/tool-fallback.cjs.map +1 -0
- package/dist/tools/tool-fallback.d.ts +78 -6
- package/dist/tools/tool-fallback.js +667 -0
- package/dist/tools/tool-fallback.js.map +1 -0
- package/dist/tools/tool-icons.cjs +61 -0
- package/dist/tools/tool-icons.cjs.map +1 -0
- package/dist/tools/tool-icons.d.ts +10 -0
- package/dist/tools/tool-icons.js +61 -0
- package/dist/tools/tool-icons.js.map +1 -0
- package/dist/tools/tool-uis.cjs +3049 -0
- package/dist/tools/tool-uis.cjs.map +1 -0
- package/dist/tools/tool-uis.d.ts +1 -23
- package/dist/tools/tool-uis.js +3049 -0
- package/dist/tools/tool-uis.js.map +1 -0
- package/dist/tools/voice-update-tool-ui.cjs +89 -0
- package/dist/tools/voice-update-tool-ui.cjs.map +1 -0
- package/dist/tools/voice-update-tool-ui.d.ts +27 -0
- package/dist/tools/voice-update-tool-ui.js +89 -0
- package/dist/tools/voice-update-tool-ui.js.map +1 -0
- package/dist/tools/write-todos-tool-ui.cjs +270 -0
- package/dist/tools/write-todos-tool-ui.cjs.map +1 -0
- package/dist/tools/write-todos-tool-ui.js +270 -0
- package/dist/tools/write-todos-tool-ui.js.map +1 -0
- package/dist/ui/button.cjs +57 -0
- package/dist/ui/button.cjs.map +1 -0
- package/dist/ui/button.js +57 -0
- package/dist/ui/button.js.map +1 -0
- package/dist/ui/collapsible.cjs +17 -0
- package/dist/ui/collapsible.cjs.map +1 -0
- package/dist/ui/collapsible.js +17 -0
- package/dist/ui/collapsible.js.map +1 -0
- package/dist/ui/tooltip.cjs +48 -0
- package/dist/ui/tooltip.cjs.map +1 -0
- package/dist/ui/tooltip.js +48 -0
- package/dist/ui/tooltip.js.map +1 -0
- package/dist/version.cjs +6 -0
- package/dist/version.cjs.map +1 -0
- package/dist/version.js +6 -0
- package/dist/version.js.map +1 -0
- package/package.json +35 -19
- package/dist/AthenaAuthContext-B3AwLA5Z.cjs.map +0 -1
- package/dist/AthenaAuthContext-DQsdayH2.js.map +0 -1
- package/dist/AthenaContext-B1QMhIP-.cjs.map +0 -1
- package/dist/AthenaContext-MOslgOmE.js.map +0 -1
- package/dist/auth.cjs.map +0 -1
- package/dist/auth.js.map +0 -1
- package/dist/chat/ComposerEditorContext.d.ts +0 -36
- package/dist/chat/super-grouping/tool-status-labels.d.ts +0 -1
- package/dist/chat/tiptap-composer.d.ts +0 -7
- package/dist/chat-ui.cjs +0 -2667
- package/dist/chat-ui.cjs.map +0 -1
- package/dist/chat-ui.js +0 -2668
- package/dist/chat-ui.js.map +0 -1
- package/dist/collab.cjs.map +0 -1
- package/dist/collab.js.map +0 -1
- package/dist/mentions/composer-keybinds.d.ts +0 -5
- package/dist/mentions/mention-extension.d.ts +0 -6
- package/dist/mentions/mention-icons.d.ts +0 -4
- package/dist/mentions/mention-node-view.d.ts +0 -2
- package/dist/mentions/mention-suggestion-list.d.ts +0 -14
- package/dist/mentions/mention-suggestion-popup.d.ts +0 -15
- package/dist/mentions/mention-suggestions-extension.d.ts +0 -11
- package/dist/mentions/mention-types.d.ts +0 -21
- package/dist/mentions/mention-utils.d.ts +0 -23
- package/dist/mentions/use-mention-suggestions.d.ts +0 -29
- package/dist/use-rest-conversation-history-Bs5qn5G3.js +0 -37322
- package/dist/use-rest-conversation-history-Bs5qn5G3.js.map +0 -1
- package/dist/use-rest-conversation-history-Dm0rdQgT.cjs +0 -37358
- package/dist/use-rest-conversation-history-Dm0rdQgT.cjs.map +0 -1
|
@@ -0,0 +1,151 @@
|
|
|
1
|
+
function isRecord(value) {
|
|
2
|
+
return typeof value === "object" && value !== null && !Array.isArray(value);
|
|
3
|
+
}
|
|
4
|
+
function parseJsonRecord(value) {
|
|
5
|
+
try {
|
|
6
|
+
const parsed = JSON.parse(value);
|
|
7
|
+
return isRecord(parsed) ? parsed : null;
|
|
8
|
+
} catch {
|
|
9
|
+
return null;
|
|
10
|
+
}
|
|
11
|
+
}
|
|
12
|
+
function resultRecord(result) {
|
|
13
|
+
if (typeof result === "string") return parseJsonRecord(result);
|
|
14
|
+
return isRecord(result) ? result : null;
|
|
15
|
+
}
|
|
16
|
+
function stringField(record, keys) {
|
|
17
|
+
if (!record) return null;
|
|
18
|
+
for (const key of keys) {
|
|
19
|
+
const value = record[key];
|
|
20
|
+
if (typeof value === "string" && value.trim()) return value;
|
|
21
|
+
}
|
|
22
|
+
return null;
|
|
23
|
+
}
|
|
24
|
+
function resultMessage(result) {
|
|
25
|
+
return stringField(resultRecord(result), ["message"]);
|
|
26
|
+
}
|
|
27
|
+
const FAILURE_DETAIL_KEYS = ["error", "errorCode", "error_code"];
|
|
28
|
+
const INTERVENTION_DETAIL_KEYS = ["message", "reason", "errorCode", "error_code"];
|
|
29
|
+
const FAILURE_CODE_KEYS = ["errorCode", "error_code", "code"];
|
|
30
|
+
const FAILURE_MESSAGE_KEYS = ["error", "message", "reason"];
|
|
31
|
+
function batchReportFailure(trimmed) {
|
|
32
|
+
var _a;
|
|
33
|
+
const lines = trimmed.split("\n");
|
|
34
|
+
const header = ((_a = lines[0]) == null ? void 0 : _a.trim()) ?? "";
|
|
35
|
+
if (!/^[\w.-]*batch: \d+\/\d+ ok — STOPPED at step \d+/.test(header)) {
|
|
36
|
+
return null;
|
|
37
|
+
}
|
|
38
|
+
const stepError = lines.map((line) => line.trim()).find(
|
|
39
|
+
(line) => /^\d+\.\s/.test(line) && (line.includes(" ERROR — ") || line.endsWith(" ERROR"))
|
|
40
|
+
);
|
|
41
|
+
return stepError ? `${header}
|
|
42
|
+
${stepError}` : header;
|
|
43
|
+
}
|
|
44
|
+
const STRING_ERROR_PREFIX = /^(?:Error:|Tool execution failed\b|Failed to route tool call\b)\s*/;
|
|
45
|
+
function plainStringError(result) {
|
|
46
|
+
if (typeof result !== "string") return null;
|
|
47
|
+
const trimmed = result.trim();
|
|
48
|
+
if (!trimmed || parseJsonRecord(trimmed)) return null;
|
|
49
|
+
if (STRING_ERROR_PREFIX.test(trimmed)) {
|
|
50
|
+
return trimmed.replace(STRING_ERROR_PREFIX, "").trim() || trimmed;
|
|
51
|
+
}
|
|
52
|
+
return batchReportFailure(trimmed);
|
|
53
|
+
}
|
|
54
|
+
function pausedNotice(result) {
|
|
55
|
+
if (typeof result !== "string") return null;
|
|
56
|
+
const trimmed = result.trim();
|
|
57
|
+
return /^⏸️?\s*Interrupted —/.test(trimmed) ? trimmed : null;
|
|
58
|
+
}
|
|
59
|
+
function stringifyUnknown(value) {
|
|
60
|
+
if (value == null) return null;
|
|
61
|
+
if (typeof value === "string") return value;
|
|
62
|
+
if (value instanceof Error) return value.message;
|
|
63
|
+
try {
|
|
64
|
+
return JSON.stringify(value);
|
|
65
|
+
} catch {
|
|
66
|
+
return String(value);
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
function toolFailure({
|
|
70
|
+
status,
|
|
71
|
+
result,
|
|
72
|
+
isError,
|
|
73
|
+
passThroughPayload = false
|
|
74
|
+
}) {
|
|
75
|
+
if ((status == null ? void 0 : status.type) === "incomplete") {
|
|
76
|
+
const errorText = stringifyUnknown(status.error);
|
|
77
|
+
return {
|
|
78
|
+
message: errorText ?? (status.reason === "cancelled" ? "Cancelled" : `Tool stopped: ${status.reason}`)
|
|
79
|
+
};
|
|
80
|
+
}
|
|
81
|
+
const record = resultRecord(result);
|
|
82
|
+
const data = isRecord(record == null ? void 0 : record.data) ? record.data : null;
|
|
83
|
+
const humanIntervention = isRecord(data == null ? void 0 : data.humanIntervention) ? data.humanIntervention : null;
|
|
84
|
+
const failureDetail = stringField(record, FAILURE_DETAIL_KEYS) ?? stringField(humanIntervention, INTERVENTION_DETAIL_KEYS);
|
|
85
|
+
const flagged = (record == null ? void 0 : record.success) === false || (record == null ? void 0 : record.ok) === false;
|
|
86
|
+
const flaggedFailure = flagged && (!passThroughPayload || failureDetail !== null);
|
|
87
|
+
const errorField = stringField(record, ["error"]) !== null;
|
|
88
|
+
const stringError = plainStringError(result);
|
|
89
|
+
if (!isError && !flaggedFailure && !errorField && !stringError) return null;
|
|
90
|
+
const code = stringField(record, FAILURE_CODE_KEYS) ?? stringField(humanIntervention, FAILURE_CODE_KEYS) ?? void 0;
|
|
91
|
+
const message = stringField(record, FAILURE_MESSAGE_KEYS) ?? stringField(humanIntervention, FAILURE_MESSAGE_KEYS) ?? stringError ?? (typeof result === "string" && !parseJsonRecord(result) ? result : null) ?? "Tool execution failed";
|
|
92
|
+
return { message, code };
|
|
93
|
+
}
|
|
94
|
+
function classifyToolResult({
|
|
95
|
+
status,
|
|
96
|
+
result,
|
|
97
|
+
isError,
|
|
98
|
+
passThroughPayload
|
|
99
|
+
}) {
|
|
100
|
+
const notice = pausedNotice(result);
|
|
101
|
+
if (notice) return { state: "paused", notice };
|
|
102
|
+
const rejection = passThroughPayload ? null : readRejectedToolResult(result);
|
|
103
|
+
if (rejection) return { state: "rejected", rejection };
|
|
104
|
+
const failure = toolFailure({ status, result, isError, passThroughPayload });
|
|
105
|
+
if (failure) return { state: "error", failure };
|
|
106
|
+
if ((status == null ? void 0 : status.type) === "requires-action") return { state: "requires-action" };
|
|
107
|
+
if (result === void 0 && (status == null ? void 0 : status.type) !== "complete") {
|
|
108
|
+
return { state: "running" };
|
|
109
|
+
}
|
|
110
|
+
return { state: "complete" };
|
|
111
|
+
}
|
|
112
|
+
function isToolResultSuccess(result) {
|
|
113
|
+
return classifyToolResult({ status: { type: "complete" }, result }).state === "complete";
|
|
114
|
+
}
|
|
115
|
+
const USER_REJECTION_PATTERNS = [/rejected by (?:the )?user/i, /user rejected/i];
|
|
116
|
+
const USER_REJECTION_LEAD_CHARS = 100;
|
|
117
|
+
function opensWithUserRejection(result) {
|
|
118
|
+
const firstLine = result.trimStart().split("\n", 1)[0] ?? "";
|
|
119
|
+
return USER_REJECTION_PATTERNS.some((pattern) => {
|
|
120
|
+
const index = firstLine.search(pattern);
|
|
121
|
+
return index !== -1 && index < USER_REJECTION_LEAD_CHARS;
|
|
122
|
+
});
|
|
123
|
+
}
|
|
124
|
+
const NO_REASON = "no reason provided";
|
|
125
|
+
const TRAILING_GUIDANCE = /\s*Acknowledge in one short sentence\..*$/i;
|
|
126
|
+
function readRejectedToolResult(result) {
|
|
127
|
+
var _a, _b;
|
|
128
|
+
if (typeof result === "string") {
|
|
129
|
+
if (!opensWithUserRejection(result)) return null;
|
|
130
|
+
const reason = (_b = (_a = result.match(/Reason:\s*(.+)/i)) == null ? void 0 : _a[1]) == null ? void 0 : _b.replace(TRAILING_GUIDANCE, "").trim();
|
|
131
|
+
if (!reason || reason.toLowerCase() === NO_REASON) return { reason: null };
|
|
132
|
+
return { reason };
|
|
133
|
+
}
|
|
134
|
+
if (!isRecord(result)) return null;
|
|
135
|
+
if (result.status === "rejected" || result.action === "reject" || result.decision === "rejected") {
|
|
136
|
+
return { reason: stringField(result, ["reason"]) };
|
|
137
|
+
}
|
|
138
|
+
return null;
|
|
139
|
+
}
|
|
140
|
+
export {
|
|
141
|
+
classifyToolResult,
|
|
142
|
+
isRecord,
|
|
143
|
+
isToolResultSuccess,
|
|
144
|
+
parseJsonRecord,
|
|
145
|
+
readRejectedToolResult,
|
|
146
|
+
resultMessage,
|
|
147
|
+
resultRecord,
|
|
148
|
+
stringField,
|
|
149
|
+
toolFailure
|
|
150
|
+
};
|
|
151
|
+
//# sourceMappingURL=tool-result.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tool-result.js","sources":["../../../../../agent-runtime/src/tool-result.ts"],"sourcesContent":["/**\n * Tool-result classification shared by every tool card and activity timeline\n * (the React SDK fallback, Olympus, the Chrome extension, the Office add-in,\n * mobile). One rule set for \"did this call succeed?\", so a result that reads\n * as a failure on one surface cannot read as a success on another.\n *\n * The rules, in order:\n *\n * 1. An `incomplete` status is a failure; a `cancelled` reason reads as\n * \"Cancelled\".\n * 2. A string result opening with \"⏸️ Interrupted —\" is a **paused** call (the\n * runtime parked it), not a failure.\n * 2b. A result that records the user's refusal at the approval gate (see\n * {@link readRejectedToolResult}) is a **rejected** call — neither a success\n * nor a failure. It is read before the failure rules because the HITL\n * runtime answers a refused call with an error-status tool message whose\n * content is the refusal, which would otherwise read as a plain failure.\n * Never applied to a pass-through payload: page JavaScript relays whatever\n * the page returned, and a `{ status: \"rejected\" }` from a fetched API is\n * the page's business, not a human decision.\n * 3. A result record whose `success` or `ok` is `false` is a failure, with\n * the best message available (`error`, `message`, `reason`, or a\n * `data.humanIntervention` detail). Athena tools report failures this way\n * — the sheet tools answer `{ success: false, message: \"…\" }` — so a bare\n * flag must read as a failure. The one exception is a **pass-through\n * payload** (`passThroughPayload: true`): page JavaScript relays whatever\n * the page returned, and `{ success: false, message: \"Payment required\" }`\n * from a fetched API is the page's business, not the tool failing, so there\n * the flag counts only alongside an error detail (`error`, `errorCode`,\n * `error_code`, or a `humanIntervention` message / reason / code). The\n * Chrome extension opts its `chrome_javascript` tool in; everything else\n * takes the default.\n * 4. A result record with a non-empty `error` string is a failure regardless\n * of flags — every Athena tool contract uses that field only on failure.\n * 5. A plain-string result opening with an explicit error prefix (`Error:`,\n * `Tool execution failed`, `Failed to route tool call`) is a failure —\n * device-tunnel failures arrive in successful ToolMessages, so the prefix\n * is the authoritative signal there. A bare leading \"Error\" word is not\n * (an \"Error handling guide\" is content). A batch report that stopped at a\n * step reads its header and failing step.\n * 6. assistant-ui's own `isError` flag is a failure with the best message\n * available.\n * 7. `requires-action` and a result-less non-complete status read as such;\n * everything else is a success.\n */\n\n/** The status shape a tool-call message part carries (structurally typed so this module stays UI-library-free). */\nexport interface ToolCallStatusLike {\n type: 'running' | 'complete' | 'incomplete' | 'requires-action';\n reason?: string;\n error?: unknown;\n}\n\nexport interface ToolFailure {\n message: string;\n code?: string;\n}\n\nexport type ToolResultClassification =\n | { state: 'running' }\n | { state: 'complete' }\n | { state: 'requires-action' }\n | { state: 'paused'; notice: string }\n | { state: 'rejected'; rejection: RejectedToolResult }\n | { state: 'error'; failure: ToolFailure };\n\nexport type ToolResultState = ToolResultClassification['state'];\n\nexport function isRecord(value: unknown): value is Record<string, unknown> {\n return typeof value === 'object' && value !== null && !Array.isArray(value);\n}\n\n/** Parse a JSON string into a record, or `null` when it is not one. */\nexport function parseJsonRecord(value: string): Record<string, unknown> | null {\n try {\n const parsed: unknown = JSON.parse(value);\n return isRecord(parsed) ? parsed : null;\n } catch {\n return null;\n }\n}\n\n/** The result as a record: parsed when it arrived as a JSON string. */\nexport function resultRecord(result: unknown): Record<string, unknown> | null {\n if (typeof result === 'string') return parseJsonRecord(result);\n return isRecord(result) ? result : null;\n}\n\n/** The first non-blank string among `keys` on `record`, or `null`. */\nexport function stringField(\n record: Record<string, unknown> | null | undefined,\n keys: readonly string[],\n): string | null {\n if (!record) return null;\n for (const key of keys) {\n const value = record[key];\n if (typeof value === 'string' && value.trim()) return value;\n }\n return null;\n}\n\n/** The `message` a result carries, when it does (the row's completion summary). */\nexport function resultMessage(result: unknown): string | null {\n return stringField(resultRecord(result), ['message']);\n}\n\nconst FAILURE_DETAIL_KEYS = ['error', 'errorCode', 'error_code'] as const;\nconst INTERVENTION_DETAIL_KEYS = ['message', 'reason', 'errorCode', 'error_code'] as const;\nconst FAILURE_CODE_KEYS = ['errorCode', 'error_code', 'code'] as const;\nconst FAILURE_MESSAGE_KEYS = ['error', 'message', 'reason'] as const;\n\nfunction batchReportFailure(trimmed: string): string | null {\n const lines = trimmed.split('\\n');\n const header = lines[0]?.trim() ?? '';\n if (!/^[\\w.-]*batch: \\d+\\/\\d+ ok — STOPPED at step \\d+/.test(header)) {\n return null;\n }\n const stepError = lines\n .map((line) => line.trim())\n .find(\n (line) =>\n /^\\d+\\.\\s/.test(line) && (line.includes(' ERROR — ') || line.endsWith(' ERROR')),\n );\n return stepError ? `${header}\\n${stepError}` : header;\n}\n\nconst STRING_ERROR_PREFIX = /^(?:Error:|Tool execution failed\\b|Failed to route tool call\\b)\\s*/;\n\nfunction plainStringError(result: unknown): string | null {\n if (typeof result !== 'string') return null;\n const trimmed = result.trim();\n if (!trimmed || parseJsonRecord(trimmed)) return null;\n if (STRING_ERROR_PREFIX.test(trimmed)) {\n return trimmed.replace(STRING_ERROR_PREFIX, '').trim() || trimmed;\n }\n return batchReportFailure(trimmed);\n}\n\nfunction pausedNotice(result: unknown): string | null {\n if (typeof result !== 'string') return null;\n const trimmed = result.trim();\n return /^⏸️?\\s*Interrupted —/.test(trimmed) ? trimmed : null;\n}\n\nfunction stringifyUnknown(value: unknown): string | null {\n if (value == null) return null;\n if (typeof value === 'string') return value;\n if (value instanceof Error) return value.message;\n try {\n return JSON.stringify(value);\n } catch {\n return String(value);\n }\n}\n\n/** The failure a tool call reports, or `null` when it succeeded (rules 1, 3-6). */\nexport function toolFailure({\n status,\n result,\n isError,\n passThroughPayload = false,\n}: {\n status?: ToolCallStatusLike;\n result?: unknown;\n isError?: boolean;\n /** The result is an application payload relayed verbatim (rule 3): a flag needs an error detail to count. */\n passThroughPayload?: boolean;\n}): ToolFailure | null {\n if (status?.type === 'incomplete') {\n const errorText = stringifyUnknown(status.error);\n return {\n message:\n errorText ??\n (status.reason === 'cancelled' ? 'Cancelled' : `Tool stopped: ${status.reason}`),\n };\n }\n\n const record = resultRecord(result);\n const data = isRecord(record?.data) ? record.data : null;\n const humanIntervention = isRecord(data?.humanIntervention) ? data.humanIntervention : null;\n const failureDetail =\n stringField(record, FAILURE_DETAIL_KEYS) ??\n stringField(humanIntervention, INTERVENTION_DETAIL_KEYS);\n const flagged = record?.success === false || record?.ok === false;\n const flaggedFailure = flagged && (!passThroughPayload || failureDetail !== null);\n const errorField = stringField(record, ['error']) !== null;\n const stringError = plainStringError(result);\n\n if (!isError && !flaggedFailure && !errorField && !stringError) return null;\n\n const code =\n stringField(record, FAILURE_CODE_KEYS) ??\n stringField(humanIntervention, FAILURE_CODE_KEYS) ??\n undefined;\n const message =\n stringField(record, FAILURE_MESSAGE_KEYS) ??\n stringField(humanIntervention, FAILURE_MESSAGE_KEYS) ??\n stringError ??\n (typeof result === 'string' && !parseJsonRecord(result) ? result : null) ??\n 'Tool execution failed';\n\n return { message, code };\n}\n\n/** Classify a tool call for rendering (see the module docs for the rules). */\nexport function classifyToolResult({\n status,\n result,\n isError,\n passThroughPayload,\n}: {\n status?: ToolCallStatusLike;\n result?: unknown;\n isError?: boolean;\n /** The result is an application payload relayed verbatim (rule 3): a flag needs an error detail to count. */\n passThroughPayload?: boolean;\n}): ToolResultClassification {\n const notice = pausedNotice(result);\n if (notice) return { state: 'paused', notice };\n\n const rejection = passThroughPayload ? null : readRejectedToolResult(result);\n if (rejection) return { state: 'rejected', rejection };\n\n const failure = toolFailure({ status, result, isError, passThroughPayload });\n if (failure) return { state: 'error', failure };\n if (status?.type === 'requires-action') return { state: 'requires-action' };\n if (result === undefined && status?.type !== 'complete') {\n return { state: 'running' };\n }\n return { state: 'complete' };\n}\n\n/** True when a completed call reads as a success under the shared rules. */\nexport function isToolResultSuccess(result: unknown): boolean {\n return classifyToolResult({ status: { type: 'complete' }, result }).state === 'complete';\n}\n\n/**\n * A gated tool call the user rejected still \"completes\": both HITL runtimes\n * answer the rejected call with a `ToolMessage` whose text is the rejection\n * (\"Tool call rejected by user. Reason: …\"), and device tools may answer with\n * a structured decision (`{ status: 'rejected' }`, `{ action: 'reject' }`,\n * `{ decision: 'rejected' }`). Anything that labels a finished call has to\n * read that, or a rejected email send reports itself as sent. The read is\n * content-based, so it is scoped to where a rejection can appear: the opening\n * of a string result, never deep inside returned content, and never a\n * pass-through page payload (see {@link classifyToolResult}).\n */\nexport interface RejectedToolResult {\n /** The feedback the user typed, when they gave one. */\n reason: string | null;\n}\n\n/**\n * Phrasings the HITL runtimes use for a *human* rejection. Matching on these\n * rather than the word \"reject\" keeps deterministic failures out — argument\n * validation answers a call with \"Tool call rejected — ValidationError: …\",\n * which never involved the user and stays a plain failure.\n */\nconst USER_REJECTION_PATTERNS: readonly RegExp[] = [/rejected by (?:the )?user/i, /user rejected/i];\n\n/**\n * A rejection IS the tool message, so the phrasing opens it: \"The user rejected\n * this action. …\" (`hitl_bridge.py`), \"Tool call rejected by user. Reason: …\",\n * \"Tool 'x' execution rejected by user. …\", \"[INTERRUPT] Custom interrupt\n * '<uuid>' rejected by user. …\". Content a tool merely *returned* — a page read\n * or a document whose text happens to say a user rejected something — carries\n * the phrase deeper in, so only a match starting within this many characters\n * of the first line counts.\n */\nconst USER_REJECTION_LEAD_CHARS = 100;\n\n/** Whether `result` opens with a human-rejection phrasing (see {@link USER_REJECTION_LEAD_CHARS}). */\nfunction opensWithUserRejection(result: string): boolean {\n const firstLine = result.trimStart().split('\\n', 1)[0] ?? '';\n return USER_REJECTION_PATTERNS.some((pattern) => {\n const index = firstLine.search(pattern);\n return index !== -1 && index < USER_REJECTION_LEAD_CHARS;\n });\n}\n\n/** Reject-with-no-feedback placeholder the legacy approval editor sends. */\nconst NO_REASON = 'no reason provided';\n\n/**\n * Model-facing guidance the legacy HITL node appends on the same line after\n * the reason (\"… Reason: <reason> Acknowledge in one short sentence. Do not\n * retry…\"). It is instruction for the model, not the user's feedback.\n */\nconst TRAILING_GUIDANCE = /\\s*Acknowledge in one short sentence\\..*$/i;\n\n/**\n * Read a rejection out of a completed tool call's result, or `null` when the\n * call actually ran (or failed for a non-approval reason).\n */\nexport function readRejectedToolResult(result: unknown): RejectedToolResult | null {\n if (typeof result === 'string') {\n if (!opensWithUserRejection(result)) return null;\n const reason = result\n .match(/Reason:\\s*(.+)/i)?.[1]\n ?.replace(TRAILING_GUIDANCE, '')\n .trim();\n if (!reason || reason.toLowerCase() === NO_REASON) return { reason: null };\n return { reason };\n }\n if (!isRecord(result)) return null;\n if (result.status === 'rejected' || result.action === 'reject' || result.decision === 'rejected') {\n return { reason: stringField(result, ['reason']) };\n }\n return null;\n}\n\n/** True when a completed call's result records that the user rejected it. */\nexport function isRejectedToolResult(result: unknown): boolean {\n return readRejectedToolResult(result) !== null;\n}\n"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,139 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
|
|
3
|
+
const reactQuery = require("@tanstack/react-query");
|
|
4
|
+
const react = require("react");
|
|
5
|
+
const conversationList = require("./conversation-list.cjs");
|
|
6
|
+
const DEFAULT_PAGE_SIZE = 20;
|
|
7
|
+
const DEFAULT_STALE_TIME_MS = 3e4;
|
|
8
|
+
const DEFAULT_GC_TIME_MS = 10 * 60 * 1e3;
|
|
9
|
+
function useConversationList(options) {
|
|
10
|
+
var _a, _b, _c;
|
|
11
|
+
const {
|
|
12
|
+
filter,
|
|
13
|
+
pageSize = DEFAULT_PAGE_SIZE,
|
|
14
|
+
scopeKey = conversationList.CONVERSATION_LIST_DEFAULT_SCOPE_KEY,
|
|
15
|
+
enabled,
|
|
16
|
+
staleTime = DEFAULT_STALE_TIME_MS,
|
|
17
|
+
gcTime = DEFAULT_GC_TIME_MS,
|
|
18
|
+
refetchOnMount,
|
|
19
|
+
refetchOnWindowFocus,
|
|
20
|
+
refetchInterval = false,
|
|
21
|
+
retry
|
|
22
|
+
} = options;
|
|
23
|
+
const queryClient = reactQuery.useQueryClient();
|
|
24
|
+
const fetchPageRef = react.useRef(options.fetchPage);
|
|
25
|
+
fetchPageRef.current = options.fetchPage;
|
|
26
|
+
const normalizedFilter = conversationList.normalizeConversationListFilter(filter ?? {});
|
|
27
|
+
const filterKey = conversationList.conversationListFilterKey(normalizedFilter);
|
|
28
|
+
const firstPageKey = react.useMemo(
|
|
29
|
+
() => conversationList.conversationListQueryKeys.firstPage(scopeKey, filterKey, pageSize),
|
|
30
|
+
[scopeKey, filterKey, pageSize]
|
|
31
|
+
);
|
|
32
|
+
const historyKey = react.useMemo(
|
|
33
|
+
() => conversationList.conversationListQueryKeys.history(scopeKey, filterKey, pageSize),
|
|
34
|
+
[scopeKey, filterKey, pageSize]
|
|
35
|
+
);
|
|
36
|
+
const passthrough = {
|
|
37
|
+
...enabled !== void 0 ? { enabled } : {},
|
|
38
|
+
...refetchOnMount !== void 0 ? { refetchOnMount } : {},
|
|
39
|
+
...refetchOnWindowFocus !== void 0 ? { refetchOnWindowFocus } : {},
|
|
40
|
+
...retry !== void 0 ? { retry } : {}
|
|
41
|
+
};
|
|
42
|
+
const firstPage = reactQuery.useQuery({
|
|
43
|
+
queryKey: firstPageKey,
|
|
44
|
+
queryFn: ({ signal }) => fetchPageRef.current({ limit: pageSize, offset: 0, filter: normalizedFilter, signal }),
|
|
45
|
+
staleTime,
|
|
46
|
+
gcTime,
|
|
47
|
+
refetchInterval,
|
|
48
|
+
...passthrough
|
|
49
|
+
});
|
|
50
|
+
const history = reactQuery.useInfiniteQuery({
|
|
51
|
+
queryKey: historyKey,
|
|
52
|
+
initialPageParam: pageSize,
|
|
53
|
+
gcTime,
|
|
54
|
+
queryFn: ({ pageParam, signal }) => fetchPageRef.current({ limit: pageSize, offset: pageParam, filter: normalizedFilter, signal }),
|
|
55
|
+
getNextPageParam: (lastPage, _allPages, lastOffset) => lastPage.hasMore ? lastOffset + pageSize : void 0,
|
|
56
|
+
...passthrough,
|
|
57
|
+
// fetchNextPage/refetch still perform explicit fetches for disabled
|
|
58
|
+
// queries. Keeping this observer disabled prevents focus, invalidation,
|
|
59
|
+
// and polling from replaying every retained historical page. This must
|
|
60
|
+
// win over `passthrough.enabled`, so it is spread last.
|
|
61
|
+
enabled: false
|
|
62
|
+
});
|
|
63
|
+
const historyPages = (_a = history.data) == null ? void 0 : _a.pages;
|
|
64
|
+
const hasLoadedHistory = ((historyPages == null ? void 0 : historyPages.length) ?? 0) > 0;
|
|
65
|
+
const conversations = react.useMemo(
|
|
66
|
+
() => conversationList.mergeConversationPages([
|
|
67
|
+
...firstPage.data ? [firstPage.data] : [],
|
|
68
|
+
...historyPages ?? []
|
|
69
|
+
]),
|
|
70
|
+
[firstPage.data, historyPages]
|
|
71
|
+
);
|
|
72
|
+
const fetchNextHistoryPage = history.fetchNextPage;
|
|
73
|
+
const refetchHistoryFirstPage = history.refetch;
|
|
74
|
+
const fetchNextPage = react.useCallback(
|
|
75
|
+
() => hasLoadedHistory ? fetchNextHistoryPage() : refetchHistoryFirstPage(),
|
|
76
|
+
[hasLoadedHistory, fetchNextHistoryPage, refetchHistoryFirstPage]
|
|
77
|
+
);
|
|
78
|
+
const refresh = react.useCallback(() => firstPage.refetch(), [firstPage.refetch]);
|
|
79
|
+
const invalidate = react.useCallback(
|
|
80
|
+
() => conversationList.invalidateConversationListCaches(queryClient, { scopeKey }),
|
|
81
|
+
[queryClient, scopeKey]
|
|
82
|
+
);
|
|
83
|
+
const prependConversation = react.useCallback(
|
|
84
|
+
(item) => {
|
|
85
|
+
queryClient.setQueryData(
|
|
86
|
+
firstPageKey,
|
|
87
|
+
(page) => page ? conversationList.prependConversationToPage(page, item) : page
|
|
88
|
+
);
|
|
89
|
+
},
|
|
90
|
+
[queryClient, firstPageKey]
|
|
91
|
+
);
|
|
92
|
+
const removeConversation = react.useCallback(
|
|
93
|
+
(threadId) => {
|
|
94
|
+
queryClient.setQueryData(
|
|
95
|
+
firstPageKey,
|
|
96
|
+
(page) => page ? conversationList.removeConversationFromPage(page, threadId) : page
|
|
97
|
+
);
|
|
98
|
+
queryClient.setQueryData(
|
|
99
|
+
historyKey,
|
|
100
|
+
(data) => data ? { ...data, pages: data.pages.map((page) => conversationList.removeConversationFromPage(page, threadId)) } : data
|
|
101
|
+
);
|
|
102
|
+
},
|
|
103
|
+
[queryClient, firstPageKey, historyKey]
|
|
104
|
+
);
|
|
105
|
+
const patchConversation = react.useCallback(
|
|
106
|
+
(threadId, patch) => {
|
|
107
|
+
const match = (item) => item.threadId === threadId;
|
|
108
|
+
queryClient.setQueryData(
|
|
109
|
+
firstPageKey,
|
|
110
|
+
(page) => page ? conversationList.patchConversationsInPage(page, match, patch) : page
|
|
111
|
+
);
|
|
112
|
+
queryClient.setQueryData(
|
|
113
|
+
historyKey,
|
|
114
|
+
(data) => data ? {
|
|
115
|
+
...data,
|
|
116
|
+
pages: data.pages.map((page) => conversationList.patchConversationsInPage(page, match, patch))
|
|
117
|
+
} : data
|
|
118
|
+
);
|
|
119
|
+
},
|
|
120
|
+
[queryClient, firstPageKey, historyKey]
|
|
121
|
+
);
|
|
122
|
+
return {
|
|
123
|
+
conversations,
|
|
124
|
+
totalCount: ((_b = firstPage.data) == null ? void 0 : _b.totalCount) ?? null,
|
|
125
|
+
isLoading: firstPage.isLoading,
|
|
126
|
+
isFetching: firstPage.isFetching || history.isFetching,
|
|
127
|
+
hasResolvedFirstPage: firstPage.data !== void 0,
|
|
128
|
+
hasNextPage: hasLoadedHistory ? history.hasNextPage ?? false : ((_c = firstPage.data) == null ? void 0 : _c.hasMore) ?? false,
|
|
129
|
+
isFetchingNextPage: history.isFetchingNextPage || !hasLoadedHistory && history.isFetching,
|
|
130
|
+
fetchNextPage,
|
|
131
|
+
refresh,
|
|
132
|
+
invalidate,
|
|
133
|
+
prependConversation,
|
|
134
|
+
removeConversation,
|
|
135
|
+
patchConversation
|
|
136
|
+
};
|
|
137
|
+
}
|
|
138
|
+
exports.useConversationList = useConversationList;
|
|
139
|
+
//# sourceMappingURL=use-conversation-list.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"use-conversation-list.cjs","sources":["../../../../../agent-runtime/src/use-conversation-list.ts"],"sourcesContent":["import {\n type InfiniteData,\n useInfiniteQuery,\n useQuery,\n useQueryClient,\n} from '@tanstack/react-query';\nimport { useCallback, useMemo, useRef } from 'react';\nimport {\n CONVERSATION_LIST_DEFAULT_SCOPE_KEY,\n type ConversationListFetcher,\n type ConversationListFilter,\n type ConversationListPage,\n type ConversationSummary,\n conversationListFilterKey,\n conversationListQueryKeys,\n invalidateConversationListCaches,\n mergeConversationPages,\n normalizeConversationListFilter,\n patchConversationsInPage,\n prependConversationToPage,\n removeConversationFromPage,\n} from './conversation-list';\n\nconst DEFAULT_PAGE_SIZE = 20;\nconst DEFAULT_STALE_TIME_MS = 30_000;\nconst DEFAULT_GC_TIME_MS = 10 * 60 * 1000;\n\nexport interface UseConversationListOptions {\n /**\n * Transport adapter for one page (GraphQL `listConversations`, the REST\n * thread list, …). Captured in a ref — identity changes do not re-key the\n * cache, so pair a changing fetcher with a changing `scopeKey`.\n */\n fetchPage: ConversationListFetcher;\n filter?: ConversationListFilter;\n pageSize?: number;\n /**\n * Cache identity beyond the filter. MUST include everything that changes\n * whose list this is — principal/user id, backend base URL — so a\n * credential swap can never serve another identity's rows from the cache.\n */\n scopeKey?: string;\n enabled?: boolean;\n staleTime?: number;\n gcTime?: number;\n refetchOnMount?: boolean | 'always';\n refetchOnWindowFocus?: boolean;\n /**\n * Newest-page freshness is push-based by default (the conversation-index\n * statewire invalidates these caches), so no timer runs unless asked.\n */\n refetchInterval?: number | false;\n retry?: boolean | number | ((failureCount: number, error: Error) => boolean);\n}\n\nexport interface ConversationListController {\n /** Merged newest-first rows: live first page + retained history pages. */\n conversations: ConversationSummary[];\n /** Advisory total from the live first page, when the transport counts. */\n totalCount: number | null;\n isLoading: boolean;\n isFetching: boolean;\n /** True once the live first page has resolved at least once. */\n hasResolvedFirstPage: boolean;\n hasNextPage: boolean;\n isFetchingNextPage: boolean;\n fetchNextPage: () => Promise<unknown>;\n /** Refetch the live first page (history pages stay frozen). */\n refresh: () => Promise<unknown>;\n /** Invalidate every conversation-list cache in this scope (all filters). */\n invalidate: () => Promise<void>;\n /** Optimistically show a new conversation at the top of THIS filter view. */\n prependConversation: (item: ConversationSummary) => void;\n /** Optimistically drop a conversation from THIS filter view. */\n removeConversation: (threadId: string) => void;\n /** Optimistically patch a conversation's row in THIS filter view. */\n patchConversation: (threadId: string, patch: Partial<ConversationSummary>) => void;\n}\n\n/**\n * The shared headless conversation-list pager (chat-stack unification —\n * thread-list-contract-convergence).\n *\n * Implements, once, the two-tier TanStack Query pattern Olympus and mobile\n * each hand-rolled:\n *\n * - a LIVE first-page query — the only observer that refetches on\n * invalidation/focus, so push-driven freshness costs one page, and\n * - a permanently-disabled infinite \"history\" query whose pages are fetched\n * only by explicit `fetchNextPage()` calls and retained without replay\n * (invalidation/polling never refetches every loaded page).\n *\n * Rows merge newest-first with the live page winning duplicate threads.\n */\nexport function useConversationList(options: UseConversationListOptions): ConversationListController {\n const {\n filter,\n pageSize = DEFAULT_PAGE_SIZE,\n scopeKey = CONVERSATION_LIST_DEFAULT_SCOPE_KEY,\n enabled,\n staleTime = DEFAULT_STALE_TIME_MS,\n gcTime = DEFAULT_GC_TIME_MS,\n refetchOnMount,\n refetchOnWindowFocus,\n refetchInterval = false,\n retry,\n } = options;\n const queryClient = useQueryClient();\n\n const fetchPageRef = useRef(options.fetchPage);\n fetchPageRef.current = options.fetchPage;\n\n // The normalized filter is both the cache identity (via the key) and what\n // queryFn closures fetch, so a cache entry holds exactly what it claims —\n // fresh-but-equal filter objects from the caller never re-key or refetch.\n // (Plain per-render values: only the serialized key participates in\n // identity, so object freshness here is irrelevant.)\n const normalizedFilter = normalizeConversationListFilter(filter ?? {});\n const filterKey = conversationListFilterKey(normalizedFilter);\n\n const firstPageKey = useMemo(\n () => conversationListQueryKeys.firstPage(scopeKey, filterKey, pageSize),\n [scopeKey, filterKey, pageSize]\n );\n const historyKey = useMemo(\n () => conversationListQueryKeys.history(scopeKey, filterKey, pageSize),\n [scopeKey, filterKey, pageSize]\n );\n\n // React Query merges per-query options OVER the client's defaultOptions with\n // Object.assign, which copies explicitly-`undefined` keys — so passing\n // `refetchOnWindowFocus: undefined` CLOBBERS a consumer's\n // `refetchOnWindowFocus: false` default and silently re-enables focus\n // refetching. Options the caller did not set must therefore be omitted, not\n // forwarded as undefined, so they fall through to the consuming app's client.\n const passthrough = {\n ...(enabled !== undefined ? { enabled } : {}),\n ...(refetchOnMount !== undefined ? { refetchOnMount } : {}),\n ...(refetchOnWindowFocus !== undefined ? { refetchOnWindowFocus } : {}),\n ...(retry !== undefined ? { retry } : {}),\n };\n\n const firstPage = useQuery({\n queryKey: firstPageKey,\n queryFn: ({ signal }) =>\n fetchPageRef.current({ limit: pageSize, offset: 0, filter: normalizedFilter, signal }),\n staleTime,\n gcTime,\n refetchInterval,\n ...passthrough,\n });\n\n const history = useInfiniteQuery({\n queryKey: historyKey,\n initialPageParam: pageSize,\n gcTime,\n queryFn: ({ pageParam, signal }) =>\n fetchPageRef.current({ limit: pageSize, offset: pageParam, filter: normalizedFilter, signal }),\n getNextPageParam: (lastPage, _allPages, lastOffset) =>\n lastPage.hasMore ? lastOffset + pageSize : undefined,\n ...passthrough,\n // fetchNextPage/refetch still perform explicit fetches for disabled\n // queries. Keeping this observer disabled prevents focus, invalidation,\n // and polling from replaying every retained historical page. This must\n // win over `passthrough.enabled`, so it is spread last.\n enabled: false,\n });\n\n const historyPages = history.data?.pages;\n const hasLoadedHistory = (historyPages?.length ?? 0) > 0;\n\n const conversations = useMemo(\n () =>\n mergeConversationPages([\n ...(firstPage.data ? [firstPage.data] : []),\n ...(historyPages ?? []),\n ]),\n [firstPage.data, historyPages]\n );\n\n const fetchNextHistoryPage = history.fetchNextPage;\n const refetchHistoryFirstPage = history.refetch;\n const fetchNextPage = useCallback(\n () => (hasLoadedHistory ? fetchNextHistoryPage() : refetchHistoryFirstPage()),\n [hasLoadedHistory, fetchNextHistoryPage, refetchHistoryFirstPage]\n );\n\n const refresh = useCallback(() => firstPage.refetch(), [firstPage.refetch]);\n\n const invalidate = useCallback(\n () => invalidateConversationListCaches(queryClient, { scopeKey }),\n [queryClient, scopeKey]\n );\n\n const prependConversation = useCallback(\n (item: ConversationSummary) => {\n queryClient.setQueryData<ConversationListPage>(firstPageKey, (page) =>\n page ? prependConversationToPage(page, item) : page\n );\n },\n [queryClient, firstPageKey]\n );\n\n const removeConversation = useCallback(\n (threadId: string) => {\n queryClient.setQueryData<ConversationListPage>(firstPageKey, (page) =>\n page ? removeConversationFromPage(page, threadId) : page\n );\n queryClient.setQueryData<InfiniteData<ConversationListPage, number>>(historyKey, (data) =>\n data\n ? { ...data, pages: data.pages.map((page) => removeConversationFromPage(page, threadId)) }\n : data\n );\n },\n [queryClient, firstPageKey, historyKey]\n );\n\n const patchConversation = useCallback(\n (threadId: string, patch: Partial<ConversationSummary>) => {\n const match = (item: ConversationSummary) => item.threadId === threadId;\n queryClient.setQueryData<ConversationListPage>(firstPageKey, (page) =>\n page ? patchConversationsInPage(page, match, patch) : page\n );\n queryClient.setQueryData<InfiniteData<ConversationListPage, number>>(historyKey, (data) =>\n data\n ? {\n ...data,\n pages: data.pages.map((page) => patchConversationsInPage(page, match, patch)),\n }\n : data\n );\n },\n [queryClient, firstPageKey, historyKey]\n );\n\n return {\n conversations,\n totalCount: firstPage.data?.totalCount ?? null,\n isLoading: firstPage.isLoading,\n isFetching: firstPage.isFetching || history.isFetching,\n hasResolvedFirstPage: firstPage.data !== undefined,\n hasNextPage: hasLoadedHistory\n ? (history.hasNextPage ?? false)\n : (firstPage.data?.hasMore ?? false),\n isFetchingNextPage: history.isFetchingNextPage || (!hasLoadedHistory && history.isFetching),\n fetchNextPage,\n refresh,\n invalidate,\n prependConversation,\n removeConversation,\n patchConversation,\n };\n}\n"],"names":["CONVERSATION_LIST_DEFAULT_SCOPE_KEY","useQueryClient","useRef","normalizeConversationListFilter","conversationListFilterKey","useMemo","conversationListQueryKeys","useQuery","useInfiniteQuery","mergeConversationPages","useCallback","invalidateConversationListCaches","prependConversationToPage","removeConversationFromPage","patchConversationsInPage"],"mappings":";;;;;AAuBA,MAAM,oBAAoB;AAC1B,MAAM,wBAAwB;AAC9B,MAAM,qBAAqB,KAAK,KAAK;AAqE9B,SAAS,oBAAoB,SAAiE;;AACnG,QAAM;AAAA,IACJ;AAAA,IACA,WAAW;AAAA,IACX,WAAWA,iBAAAA;AAAAA,IACX;AAAA,IACA,YAAY;AAAA,IACZ,SAAS;AAAA,IACT;AAAA,IACA;AAAA,IACA,kBAAkB;AAAA,IAClB;AAAA,EAAA,IACE;AACJ,QAAM,cAAcC,WAAAA,eAAA;AAEpB,QAAM,eAAeC,MAAAA,OAAO,QAAQ,SAAS;AAC7C,eAAa,UAAU,QAAQ;AAO/B,QAAM,mBAAmBC,iBAAAA,gCAAgC,UAAU,EAAE;AACrE,QAAM,YAAYC,iBAAAA,0BAA0B,gBAAgB;AAE5D,QAAM,eAAeC,MAAAA;AAAAA,IACnB,MAAMC,iBAAAA,0BAA0B,UAAU,UAAU,WAAW,QAAQ;AAAA,IACvE,CAAC,UAAU,WAAW,QAAQ;AAAA,EAAA;AAEhC,QAAM,aAAaD,MAAAA;AAAAA,IACjB,MAAMC,iBAAAA,0BAA0B,QAAQ,UAAU,WAAW,QAAQ;AAAA,IACrE,CAAC,UAAU,WAAW,QAAQ;AAAA,EAAA;AAShC,QAAM,cAAc;AAAA,IAClB,GAAI,YAAY,SAAY,EAAE,QAAA,IAAY,CAAA;AAAA,IAC1C,GAAI,mBAAmB,SAAY,EAAE,eAAA,IAAmB,CAAA;AAAA,IACxD,GAAI,yBAAyB,SAAY,EAAE,qBAAA,IAAyB,CAAA;AAAA,IACpE,GAAI,UAAU,SAAY,EAAE,UAAU,CAAA;AAAA,EAAC;AAGzC,QAAM,YAAYC,WAAAA,SAAS;AAAA,IACzB,UAAU;AAAA,IACV,SAAS,CAAC,EAAE,OAAA,MACV,aAAa,QAAQ,EAAE,OAAO,UAAU,QAAQ,GAAG,QAAQ,kBAAkB,QAAQ;AAAA,IACvF;AAAA,IACA;AAAA,IACA;AAAA,IACA,GAAG;AAAA,EAAA,CACJ;AAED,QAAM,UAAUC,WAAAA,iBAAiB;AAAA,IAC/B,UAAU;AAAA,IACV,kBAAkB;AAAA,IAClB;AAAA,IACA,SAAS,CAAC,EAAE,WAAW,OAAA,MACrB,aAAa,QAAQ,EAAE,OAAO,UAAU,QAAQ,WAAW,QAAQ,kBAAkB,QAAQ;AAAA,IAC/F,kBAAkB,CAAC,UAAU,WAAW,eACtC,SAAS,UAAU,aAAa,WAAW;AAAA,IAC7C,GAAG;AAAA;AAAA;AAAA;AAAA;AAAA,IAKH,SAAS;AAAA,EAAA,CACV;AAED,QAAM,gBAAe,aAAQ,SAAR,mBAAc;AACnC,QAAM,qBAAoB,6CAAc,WAAU,KAAK;AAEvD,QAAM,gBAAgBH,MAAAA;AAAAA,IACpB,MACEI,wCAAuB;AAAA,MACrB,GAAI,UAAU,OAAO,CAAC,UAAU,IAAI,IAAI,CAAA;AAAA,MACxC,GAAI,gBAAgB,CAAA;AAAA,IAAC,CACtB;AAAA,IACH,CAAC,UAAU,MAAM,YAAY;AAAA,EAAA;AAG/B,QAAM,uBAAuB,QAAQ;AACrC,QAAM,0BAA0B,QAAQ;AACxC,QAAM,gBAAgBC,MAAAA;AAAAA,IACpB,MAAO,mBAAmB,qBAAA,IAAyB,wBAAA;AAAA,IACnD,CAAC,kBAAkB,sBAAsB,uBAAuB;AAAA,EAAA;AAGlE,QAAM,UAAUA,MAAAA,YAAY,MAAM,UAAU,WAAW,CAAC,UAAU,OAAO,CAAC;AAE1E,QAAM,aAAaA,MAAAA;AAAAA,IACjB,MAAMC,kDAAiC,aAAa,EAAE,UAAU;AAAA,IAChE,CAAC,aAAa,QAAQ;AAAA,EAAA;AAGxB,QAAM,sBAAsBD,MAAAA;AAAAA,IAC1B,CAAC,SAA8B;AAC7B,kBAAY;AAAA,QAAmC;AAAA,QAAc,CAAC,SAC5D,OAAOE,iBAAAA,0BAA0B,MAAM,IAAI,IAAI;AAAA,MAAA;AAAA,IAEnD;AAAA,IACA,CAAC,aAAa,YAAY;AAAA,EAAA;AAG5B,QAAM,qBAAqBF,MAAAA;AAAAA,IACzB,CAAC,aAAqB;AACpB,kBAAY;AAAA,QAAmC;AAAA,QAAc,CAAC,SAC5D,OAAOG,iBAAAA,2BAA2B,MAAM,QAAQ,IAAI;AAAA,MAAA;AAEtD,kBAAY;AAAA,QAAyD;AAAA,QAAY,CAAC,SAChF,OACI,EAAE,GAAG,MAAM,OAAO,KAAK,MAAM,IAAI,CAAC,SAASA,iBAAAA,2BAA2B,MAAM,QAAQ,CAAC,MACrF;AAAA,MAAA;AAAA,IAER;AAAA,IACA,CAAC,aAAa,cAAc,UAAU;AAAA,EAAA;AAGxC,QAAM,oBAAoBH,MAAAA;AAAAA,IACxB,CAAC,UAAkB,UAAwC;AACzD,YAAM,QAAQ,CAAC,SAA8B,KAAK,aAAa;AAC/D,kBAAY;AAAA,QAAmC;AAAA,QAAc,CAAC,SAC5D,OAAOI,iBAAAA,yBAAyB,MAAM,OAAO,KAAK,IAAI;AAAA,MAAA;AAExD,kBAAY;AAAA,QAAyD;AAAA,QAAY,CAAC,SAChF,OACI;AAAA,UACE,GAAG;AAAA,UACH,OAAO,KAAK,MAAM,IAAI,CAAC,SAASA,0CAAyB,MAAM,OAAO,KAAK,CAAC;AAAA,QAAA,IAE9E;AAAA,MAAA;AAAA,IAER;AAAA,IACA,CAAC,aAAa,cAAc,UAAU;AAAA,EAAA;AAGxC,SAAO;AAAA,IACL;AAAA,IACA,cAAY,eAAU,SAAV,mBAAgB,eAAc;AAAA,IAC1C,WAAW,UAAU;AAAA,IACrB,YAAY,UAAU,cAAc,QAAQ;AAAA,IAC5C,sBAAsB,UAAU,SAAS;AAAA,IACzC,aAAa,mBACR,QAAQ,eAAe,UACvB,eAAU,SAAV,mBAAgB,YAAW;AAAA,IAChC,oBAAoB,QAAQ,sBAAuB,CAAC,oBAAoB,QAAQ;AAAA,IAChF;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EAAA;AAEJ;;"}
|
|
@@ -0,0 +1,139 @@
|
|
|
1
|
+
import { useQueryClient, useQuery, useInfiniteQuery } from "@tanstack/react-query";
|
|
2
|
+
import { useRef, useMemo, useCallback } from "react";
|
|
3
|
+
import { normalizeConversationListFilter, conversationListFilterKey, conversationListQueryKeys, CONVERSATION_LIST_DEFAULT_SCOPE_KEY, mergeConversationPages, invalidateConversationListCaches, prependConversationToPage, removeConversationFromPage, patchConversationsInPage } from "./conversation-list.js";
|
|
4
|
+
const DEFAULT_PAGE_SIZE = 20;
|
|
5
|
+
const DEFAULT_STALE_TIME_MS = 3e4;
|
|
6
|
+
const DEFAULT_GC_TIME_MS = 10 * 60 * 1e3;
|
|
7
|
+
function useConversationList(options) {
|
|
8
|
+
var _a, _b, _c;
|
|
9
|
+
const {
|
|
10
|
+
filter,
|
|
11
|
+
pageSize = DEFAULT_PAGE_SIZE,
|
|
12
|
+
scopeKey = CONVERSATION_LIST_DEFAULT_SCOPE_KEY,
|
|
13
|
+
enabled,
|
|
14
|
+
staleTime = DEFAULT_STALE_TIME_MS,
|
|
15
|
+
gcTime = DEFAULT_GC_TIME_MS,
|
|
16
|
+
refetchOnMount,
|
|
17
|
+
refetchOnWindowFocus,
|
|
18
|
+
refetchInterval = false,
|
|
19
|
+
retry
|
|
20
|
+
} = options;
|
|
21
|
+
const queryClient = useQueryClient();
|
|
22
|
+
const fetchPageRef = useRef(options.fetchPage);
|
|
23
|
+
fetchPageRef.current = options.fetchPage;
|
|
24
|
+
const normalizedFilter = normalizeConversationListFilter(filter ?? {});
|
|
25
|
+
const filterKey = conversationListFilterKey(normalizedFilter);
|
|
26
|
+
const firstPageKey = useMemo(
|
|
27
|
+
() => conversationListQueryKeys.firstPage(scopeKey, filterKey, pageSize),
|
|
28
|
+
[scopeKey, filterKey, pageSize]
|
|
29
|
+
);
|
|
30
|
+
const historyKey = useMemo(
|
|
31
|
+
() => conversationListQueryKeys.history(scopeKey, filterKey, pageSize),
|
|
32
|
+
[scopeKey, filterKey, pageSize]
|
|
33
|
+
);
|
|
34
|
+
const passthrough = {
|
|
35
|
+
...enabled !== void 0 ? { enabled } : {},
|
|
36
|
+
...refetchOnMount !== void 0 ? { refetchOnMount } : {},
|
|
37
|
+
...refetchOnWindowFocus !== void 0 ? { refetchOnWindowFocus } : {},
|
|
38
|
+
...retry !== void 0 ? { retry } : {}
|
|
39
|
+
};
|
|
40
|
+
const firstPage = useQuery({
|
|
41
|
+
queryKey: firstPageKey,
|
|
42
|
+
queryFn: ({ signal }) => fetchPageRef.current({ limit: pageSize, offset: 0, filter: normalizedFilter, signal }),
|
|
43
|
+
staleTime,
|
|
44
|
+
gcTime,
|
|
45
|
+
refetchInterval,
|
|
46
|
+
...passthrough
|
|
47
|
+
});
|
|
48
|
+
const history = useInfiniteQuery({
|
|
49
|
+
queryKey: historyKey,
|
|
50
|
+
initialPageParam: pageSize,
|
|
51
|
+
gcTime,
|
|
52
|
+
queryFn: ({ pageParam, signal }) => fetchPageRef.current({ limit: pageSize, offset: pageParam, filter: normalizedFilter, signal }),
|
|
53
|
+
getNextPageParam: (lastPage, _allPages, lastOffset) => lastPage.hasMore ? lastOffset + pageSize : void 0,
|
|
54
|
+
...passthrough,
|
|
55
|
+
// fetchNextPage/refetch still perform explicit fetches for disabled
|
|
56
|
+
// queries. Keeping this observer disabled prevents focus, invalidation,
|
|
57
|
+
// and polling from replaying every retained historical page. This must
|
|
58
|
+
// win over `passthrough.enabled`, so it is spread last.
|
|
59
|
+
enabled: false
|
|
60
|
+
});
|
|
61
|
+
const historyPages = (_a = history.data) == null ? void 0 : _a.pages;
|
|
62
|
+
const hasLoadedHistory = ((historyPages == null ? void 0 : historyPages.length) ?? 0) > 0;
|
|
63
|
+
const conversations = useMemo(
|
|
64
|
+
() => mergeConversationPages([
|
|
65
|
+
...firstPage.data ? [firstPage.data] : [],
|
|
66
|
+
...historyPages ?? []
|
|
67
|
+
]),
|
|
68
|
+
[firstPage.data, historyPages]
|
|
69
|
+
);
|
|
70
|
+
const fetchNextHistoryPage = history.fetchNextPage;
|
|
71
|
+
const refetchHistoryFirstPage = history.refetch;
|
|
72
|
+
const fetchNextPage = useCallback(
|
|
73
|
+
() => hasLoadedHistory ? fetchNextHistoryPage() : refetchHistoryFirstPage(),
|
|
74
|
+
[hasLoadedHistory, fetchNextHistoryPage, refetchHistoryFirstPage]
|
|
75
|
+
);
|
|
76
|
+
const refresh = useCallback(() => firstPage.refetch(), [firstPage.refetch]);
|
|
77
|
+
const invalidate = useCallback(
|
|
78
|
+
() => invalidateConversationListCaches(queryClient, { scopeKey }),
|
|
79
|
+
[queryClient, scopeKey]
|
|
80
|
+
);
|
|
81
|
+
const prependConversation = useCallback(
|
|
82
|
+
(item) => {
|
|
83
|
+
queryClient.setQueryData(
|
|
84
|
+
firstPageKey,
|
|
85
|
+
(page) => page ? prependConversationToPage(page, item) : page
|
|
86
|
+
);
|
|
87
|
+
},
|
|
88
|
+
[queryClient, firstPageKey]
|
|
89
|
+
);
|
|
90
|
+
const removeConversation = useCallback(
|
|
91
|
+
(threadId) => {
|
|
92
|
+
queryClient.setQueryData(
|
|
93
|
+
firstPageKey,
|
|
94
|
+
(page) => page ? removeConversationFromPage(page, threadId) : page
|
|
95
|
+
);
|
|
96
|
+
queryClient.setQueryData(
|
|
97
|
+
historyKey,
|
|
98
|
+
(data) => data ? { ...data, pages: data.pages.map((page) => removeConversationFromPage(page, threadId)) } : data
|
|
99
|
+
);
|
|
100
|
+
},
|
|
101
|
+
[queryClient, firstPageKey, historyKey]
|
|
102
|
+
);
|
|
103
|
+
const patchConversation = useCallback(
|
|
104
|
+
(threadId, patch) => {
|
|
105
|
+
const match = (item) => item.threadId === threadId;
|
|
106
|
+
queryClient.setQueryData(
|
|
107
|
+
firstPageKey,
|
|
108
|
+
(page) => page ? patchConversationsInPage(page, match, patch) : page
|
|
109
|
+
);
|
|
110
|
+
queryClient.setQueryData(
|
|
111
|
+
historyKey,
|
|
112
|
+
(data) => data ? {
|
|
113
|
+
...data,
|
|
114
|
+
pages: data.pages.map((page) => patchConversationsInPage(page, match, patch))
|
|
115
|
+
} : data
|
|
116
|
+
);
|
|
117
|
+
},
|
|
118
|
+
[queryClient, firstPageKey, historyKey]
|
|
119
|
+
);
|
|
120
|
+
return {
|
|
121
|
+
conversations,
|
|
122
|
+
totalCount: ((_b = firstPage.data) == null ? void 0 : _b.totalCount) ?? null,
|
|
123
|
+
isLoading: firstPage.isLoading,
|
|
124
|
+
isFetching: firstPage.isFetching || history.isFetching,
|
|
125
|
+
hasResolvedFirstPage: firstPage.data !== void 0,
|
|
126
|
+
hasNextPage: hasLoadedHistory ? history.hasNextPage ?? false : ((_c = firstPage.data) == null ? void 0 : _c.hasMore) ?? false,
|
|
127
|
+
isFetchingNextPage: history.isFetchingNextPage || !hasLoadedHistory && history.isFetching,
|
|
128
|
+
fetchNextPage,
|
|
129
|
+
refresh,
|
|
130
|
+
invalidate,
|
|
131
|
+
prependConversation,
|
|
132
|
+
removeConversation,
|
|
133
|
+
patchConversation
|
|
134
|
+
};
|
|
135
|
+
}
|
|
136
|
+
export {
|
|
137
|
+
useConversationList
|
|
138
|
+
};
|
|
139
|
+
//# sourceMappingURL=use-conversation-list.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"use-conversation-list.js","sources":["../../../../../agent-runtime/src/use-conversation-list.ts"],"sourcesContent":["import {\n type InfiniteData,\n useInfiniteQuery,\n useQuery,\n useQueryClient,\n} from '@tanstack/react-query';\nimport { useCallback, useMemo, useRef } from 'react';\nimport {\n CONVERSATION_LIST_DEFAULT_SCOPE_KEY,\n type ConversationListFetcher,\n type ConversationListFilter,\n type ConversationListPage,\n type ConversationSummary,\n conversationListFilterKey,\n conversationListQueryKeys,\n invalidateConversationListCaches,\n mergeConversationPages,\n normalizeConversationListFilter,\n patchConversationsInPage,\n prependConversationToPage,\n removeConversationFromPage,\n} from './conversation-list';\n\nconst DEFAULT_PAGE_SIZE = 20;\nconst DEFAULT_STALE_TIME_MS = 30_000;\nconst DEFAULT_GC_TIME_MS = 10 * 60 * 1000;\n\nexport interface UseConversationListOptions {\n /**\n * Transport adapter for one page (GraphQL `listConversations`, the REST\n * thread list, …). Captured in a ref — identity changes do not re-key the\n * cache, so pair a changing fetcher with a changing `scopeKey`.\n */\n fetchPage: ConversationListFetcher;\n filter?: ConversationListFilter;\n pageSize?: number;\n /**\n * Cache identity beyond the filter. MUST include everything that changes\n * whose list this is — principal/user id, backend base URL — so a\n * credential swap can never serve another identity's rows from the cache.\n */\n scopeKey?: string;\n enabled?: boolean;\n staleTime?: number;\n gcTime?: number;\n refetchOnMount?: boolean | 'always';\n refetchOnWindowFocus?: boolean;\n /**\n * Newest-page freshness is push-based by default (the conversation-index\n * statewire invalidates these caches), so no timer runs unless asked.\n */\n refetchInterval?: number | false;\n retry?: boolean | number | ((failureCount: number, error: Error) => boolean);\n}\n\nexport interface ConversationListController {\n /** Merged newest-first rows: live first page + retained history pages. */\n conversations: ConversationSummary[];\n /** Advisory total from the live first page, when the transport counts. */\n totalCount: number | null;\n isLoading: boolean;\n isFetching: boolean;\n /** True once the live first page has resolved at least once. */\n hasResolvedFirstPage: boolean;\n hasNextPage: boolean;\n isFetchingNextPage: boolean;\n fetchNextPage: () => Promise<unknown>;\n /** Refetch the live first page (history pages stay frozen). */\n refresh: () => Promise<unknown>;\n /** Invalidate every conversation-list cache in this scope (all filters). */\n invalidate: () => Promise<void>;\n /** Optimistically show a new conversation at the top of THIS filter view. */\n prependConversation: (item: ConversationSummary) => void;\n /** Optimistically drop a conversation from THIS filter view. */\n removeConversation: (threadId: string) => void;\n /** Optimistically patch a conversation's row in THIS filter view. */\n patchConversation: (threadId: string, patch: Partial<ConversationSummary>) => void;\n}\n\n/**\n * The shared headless conversation-list pager (chat-stack unification —\n * thread-list-contract-convergence).\n *\n * Implements, once, the two-tier TanStack Query pattern Olympus and mobile\n * each hand-rolled:\n *\n * - a LIVE first-page query — the only observer that refetches on\n * invalidation/focus, so push-driven freshness costs one page, and\n * - a permanently-disabled infinite \"history\" query whose pages are fetched\n * only by explicit `fetchNextPage()` calls and retained without replay\n * (invalidation/polling never refetches every loaded page).\n *\n * Rows merge newest-first with the live page winning duplicate threads.\n */\nexport function useConversationList(options: UseConversationListOptions): ConversationListController {\n const {\n filter,\n pageSize = DEFAULT_PAGE_SIZE,\n scopeKey = CONVERSATION_LIST_DEFAULT_SCOPE_KEY,\n enabled,\n staleTime = DEFAULT_STALE_TIME_MS,\n gcTime = DEFAULT_GC_TIME_MS,\n refetchOnMount,\n refetchOnWindowFocus,\n refetchInterval = false,\n retry,\n } = options;\n const queryClient = useQueryClient();\n\n const fetchPageRef = useRef(options.fetchPage);\n fetchPageRef.current = options.fetchPage;\n\n // The normalized filter is both the cache identity (via the key) and what\n // queryFn closures fetch, so a cache entry holds exactly what it claims —\n // fresh-but-equal filter objects from the caller never re-key or refetch.\n // (Plain per-render values: only the serialized key participates in\n // identity, so object freshness here is irrelevant.)\n const normalizedFilter = normalizeConversationListFilter(filter ?? {});\n const filterKey = conversationListFilterKey(normalizedFilter);\n\n const firstPageKey = useMemo(\n () => conversationListQueryKeys.firstPage(scopeKey, filterKey, pageSize),\n [scopeKey, filterKey, pageSize]\n );\n const historyKey = useMemo(\n () => conversationListQueryKeys.history(scopeKey, filterKey, pageSize),\n [scopeKey, filterKey, pageSize]\n );\n\n // React Query merges per-query options OVER the client's defaultOptions with\n // Object.assign, which copies explicitly-`undefined` keys — so passing\n // `refetchOnWindowFocus: undefined` CLOBBERS a consumer's\n // `refetchOnWindowFocus: false` default and silently re-enables focus\n // refetching. Options the caller did not set must therefore be omitted, not\n // forwarded as undefined, so they fall through to the consuming app's client.\n const passthrough = {\n ...(enabled !== undefined ? { enabled } : {}),\n ...(refetchOnMount !== undefined ? { refetchOnMount } : {}),\n ...(refetchOnWindowFocus !== undefined ? { refetchOnWindowFocus } : {}),\n ...(retry !== undefined ? { retry } : {}),\n };\n\n const firstPage = useQuery({\n queryKey: firstPageKey,\n queryFn: ({ signal }) =>\n fetchPageRef.current({ limit: pageSize, offset: 0, filter: normalizedFilter, signal }),\n staleTime,\n gcTime,\n refetchInterval,\n ...passthrough,\n });\n\n const history = useInfiniteQuery({\n queryKey: historyKey,\n initialPageParam: pageSize,\n gcTime,\n queryFn: ({ pageParam, signal }) =>\n fetchPageRef.current({ limit: pageSize, offset: pageParam, filter: normalizedFilter, signal }),\n getNextPageParam: (lastPage, _allPages, lastOffset) =>\n lastPage.hasMore ? lastOffset + pageSize : undefined,\n ...passthrough,\n // fetchNextPage/refetch still perform explicit fetches for disabled\n // queries. Keeping this observer disabled prevents focus, invalidation,\n // and polling from replaying every retained historical page. This must\n // win over `passthrough.enabled`, so it is spread last.\n enabled: false,\n });\n\n const historyPages = history.data?.pages;\n const hasLoadedHistory = (historyPages?.length ?? 0) > 0;\n\n const conversations = useMemo(\n () =>\n mergeConversationPages([\n ...(firstPage.data ? [firstPage.data] : []),\n ...(historyPages ?? []),\n ]),\n [firstPage.data, historyPages]\n );\n\n const fetchNextHistoryPage = history.fetchNextPage;\n const refetchHistoryFirstPage = history.refetch;\n const fetchNextPage = useCallback(\n () => (hasLoadedHistory ? fetchNextHistoryPage() : refetchHistoryFirstPage()),\n [hasLoadedHistory, fetchNextHistoryPage, refetchHistoryFirstPage]\n );\n\n const refresh = useCallback(() => firstPage.refetch(), [firstPage.refetch]);\n\n const invalidate = useCallback(\n () => invalidateConversationListCaches(queryClient, { scopeKey }),\n [queryClient, scopeKey]\n );\n\n const prependConversation = useCallback(\n (item: ConversationSummary) => {\n queryClient.setQueryData<ConversationListPage>(firstPageKey, (page) =>\n page ? prependConversationToPage(page, item) : page\n );\n },\n [queryClient, firstPageKey]\n );\n\n const removeConversation = useCallback(\n (threadId: string) => {\n queryClient.setQueryData<ConversationListPage>(firstPageKey, (page) =>\n page ? removeConversationFromPage(page, threadId) : page\n );\n queryClient.setQueryData<InfiniteData<ConversationListPage, number>>(historyKey, (data) =>\n data\n ? { ...data, pages: data.pages.map((page) => removeConversationFromPage(page, threadId)) }\n : data\n );\n },\n [queryClient, firstPageKey, historyKey]\n );\n\n const patchConversation = useCallback(\n (threadId: string, patch: Partial<ConversationSummary>) => {\n const match = (item: ConversationSummary) => item.threadId === threadId;\n queryClient.setQueryData<ConversationListPage>(firstPageKey, (page) =>\n page ? patchConversationsInPage(page, match, patch) : page\n );\n queryClient.setQueryData<InfiniteData<ConversationListPage, number>>(historyKey, (data) =>\n data\n ? {\n ...data,\n pages: data.pages.map((page) => patchConversationsInPage(page, match, patch)),\n }\n : data\n );\n },\n [queryClient, firstPageKey, historyKey]\n );\n\n return {\n conversations,\n totalCount: firstPage.data?.totalCount ?? null,\n isLoading: firstPage.isLoading,\n isFetching: firstPage.isFetching || history.isFetching,\n hasResolvedFirstPage: firstPage.data !== undefined,\n hasNextPage: hasLoadedHistory\n ? (history.hasNextPage ?? false)\n : (firstPage.data?.hasMore ?? false),\n isFetchingNextPage: history.isFetchingNextPage || (!hasLoadedHistory && history.isFetching),\n fetchNextPage,\n refresh,\n invalidate,\n prependConversation,\n removeConversation,\n patchConversation,\n };\n}\n"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
|
|
3
|
+
const store = require("@assistant-ui/store");
|
|
4
|
+
const react = require("react");
|
|
5
|
+
const editCommand = require("./edit-command.cjs");
|
|
6
|
+
function useDeepAgentMessageEditSubmit() {
|
|
7
|
+
const aui = store.useAui();
|
|
8
|
+
return react.useCallback(async () => {
|
|
9
|
+
const composer = aui.message().composer();
|
|
10
|
+
const text = composer.getState().text.trim();
|
|
11
|
+
if (!text) return false;
|
|
12
|
+
const sourceId = aui.message().getState().id;
|
|
13
|
+
const readExtras = () => editCommand.readDeepAgentStatewireExtras(aui.thread().getState().extras);
|
|
14
|
+
const extras = readExtras();
|
|
15
|
+
if (extras) {
|
|
16
|
+
const command = await editCommand.resolveDeepAgentEditCommand({ readExtras, sourceId, text });
|
|
17
|
+
if (command) {
|
|
18
|
+
void extras.sendCommand(command);
|
|
19
|
+
composer.cancel();
|
|
20
|
+
return true;
|
|
21
|
+
}
|
|
22
|
+
}
|
|
23
|
+
composer.send();
|
|
24
|
+
return true;
|
|
25
|
+
}, [aui]);
|
|
26
|
+
}
|
|
27
|
+
exports.useDeepAgentMessageEditSubmit = useDeepAgentMessageEditSubmit;
|
|
28
|
+
//# sourceMappingURL=use-deep-agent-edit-submit.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"use-deep-agent-edit-submit.cjs","sources":["../../../../../agent-runtime/src/use-deep-agent-edit-submit.ts"],"sourcesContent":["import { useAui } from '@assistant-ui/store';\nimport { useCallback } from 'react';\nimport { readDeepAgentStatewireExtras, resolveDeepAgentEditCommand } from './edit-command';\n\n/**\n * The submit handler of a message's edit composer on a deep-agent thread: the\n * edited text leaves as a `run/edit` anchored on the host's own parent of the\n * message (see `edit-command.ts`) — on a windowed wire the lane's\n * `anchorBefore` at the window edge, and older pages loaded first for a\n * message below the loaded range — instead of the library's converted-message\n * anchor, which the host rejects `wrong-anchor` after a chunked assistant turn\n * and at the window edge.\n *\n * Read inside the message scope (`aui.message()`): the library's optimistic\n * fold shows the edited bubble and rewinds the visible history the moment the\n * command is dispatched, so the edit composer closes right away. Falls back\n * to the composer's own `send()` when the thread is not a statewire thread or\n * the host has not settled the message yet. Resolves `false` only for an\n * empty draft.\n */\nexport function useDeepAgentMessageEditSubmit(): () => Promise<boolean> {\n const aui = useAui();\n return useCallback(async () => {\n const composer = aui.message().composer();\n const text = composer.getState().text.trim();\n if (!text) return false;\n const sourceId = aui.message().getState().id;\n const readExtras = () => readDeepAgentStatewireExtras(aui.thread().getState().extras);\n const extras = readExtras();\n if (extras) {\n const command = await resolveDeepAgentEditCommand({ readExtras, sourceId, text });\n if (command) {\n void extras.sendCommand(command);\n composer.cancel();\n return true;\n }\n }\n composer.send();\n return true;\n }, [aui]);\n}\n"],"names":["useAui","useCallback","readDeepAgentStatewireExtras","resolveDeepAgentEditCommand"],"mappings":";;;;;AAoBO,SAAS,gCAAwD;AACtE,QAAM,MAAMA,MAAAA,OAAA;AACZ,SAAOC,MAAAA,YAAY,YAAY;AAC7B,UAAM,WAAW,IAAI,QAAA,EAAU,SAAA;AAC/B,UAAM,OAAO,SAAS,SAAA,EAAW,KAAK,KAAA;AACtC,QAAI,CAAC,KAAM,QAAO;AAClB,UAAM,WAAW,IAAI,QAAA,EAAU,WAAW;AAC1C,UAAM,aAAa,MAAMC,yCAA6B,IAAI,SAAS,SAAA,EAAW,MAAM;AACpF,UAAM,SAAS,WAAA;AACf,QAAI,QAAQ;AACV,YAAM,UAAU,MAAMC,YAAAA,4BAA4B,EAAE,YAAY,UAAU,MAAM;AAChF,UAAI,SAAS;AACX,aAAK,OAAO,YAAY,OAAO;AAC/B,iBAAS,OAAA;AACT,eAAO;AAAA,MACT;AAAA,IACF;AACA,aAAS,KAAA;AACT,WAAO;AAAA,EACT,GAAG,CAAC,GAAG,CAAC;AACV;;"}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
import { useAui } from "@assistant-ui/store";
|
|
2
|
+
import { useCallback } from "react";
|
|
3
|
+
import { resolveDeepAgentEditCommand, readDeepAgentStatewireExtras } from "./edit-command.js";
|
|
4
|
+
function useDeepAgentMessageEditSubmit() {
|
|
5
|
+
const aui = useAui();
|
|
6
|
+
return useCallback(async () => {
|
|
7
|
+
const composer = aui.message().composer();
|
|
8
|
+
const text = composer.getState().text.trim();
|
|
9
|
+
if (!text) return false;
|
|
10
|
+
const sourceId = aui.message().getState().id;
|
|
11
|
+
const readExtras = () => readDeepAgentStatewireExtras(aui.thread().getState().extras);
|
|
12
|
+
const extras = readExtras();
|
|
13
|
+
if (extras) {
|
|
14
|
+
const command = await resolveDeepAgentEditCommand({ readExtras, sourceId, text });
|
|
15
|
+
if (command) {
|
|
16
|
+
void extras.sendCommand(command);
|
|
17
|
+
composer.cancel();
|
|
18
|
+
return true;
|
|
19
|
+
}
|
|
20
|
+
}
|
|
21
|
+
composer.send();
|
|
22
|
+
return true;
|
|
23
|
+
}, [aui]);
|
|
24
|
+
}
|
|
25
|
+
export {
|
|
26
|
+
useDeepAgentMessageEditSubmit
|
|
27
|
+
};
|
|
28
|
+
//# sourceMappingURL=use-deep-agent-edit-submit.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"use-deep-agent-edit-submit.js","sources":["../../../../../agent-runtime/src/use-deep-agent-edit-submit.ts"],"sourcesContent":["import { useAui } from '@assistant-ui/store';\nimport { useCallback } from 'react';\nimport { readDeepAgentStatewireExtras, resolveDeepAgentEditCommand } from './edit-command';\n\n/**\n * The submit handler of a message's edit composer on a deep-agent thread: the\n * edited text leaves as a `run/edit` anchored on the host's own parent of the\n * message (see `edit-command.ts`) — on a windowed wire the lane's\n * `anchorBefore` at the window edge, and older pages loaded first for a\n * message below the loaded range — instead of the library's converted-message\n * anchor, which the host rejects `wrong-anchor` after a chunked assistant turn\n * and at the window edge.\n *\n * Read inside the message scope (`aui.message()`): the library's optimistic\n * fold shows the edited bubble and rewinds the visible history the moment the\n * command is dispatched, so the edit composer closes right away. Falls back\n * to the composer's own `send()` when the thread is not a statewire thread or\n * the host has not settled the message yet. Resolves `false` only for an\n * empty draft.\n */\nexport function useDeepAgentMessageEditSubmit(): () => Promise<boolean> {\n const aui = useAui();\n return useCallback(async () => {\n const composer = aui.message().composer();\n const text = composer.getState().text.trim();\n if (!text) return false;\n const sourceId = aui.message().getState().id;\n const readExtras = () => readDeepAgentStatewireExtras(aui.thread().getState().extras);\n const extras = readExtras();\n if (extras) {\n const command = await resolveDeepAgentEditCommand({ readExtras, sourceId, text });\n if (command) {\n void extras.sendCommand(command);\n composer.cancel();\n return true;\n }\n }\n composer.send();\n return true;\n }, [aui]);\n}\n"],"names":[],"mappings":";;;AAoBO,SAAS,gCAAwD;AACtE,QAAM,MAAM,OAAA;AACZ,SAAO,YAAY,YAAY;AAC7B,UAAM,WAAW,IAAI,QAAA,EAAU,SAAA;AAC/B,UAAM,OAAO,SAAS,SAAA,EAAW,KAAK,KAAA;AACtC,QAAI,CAAC,KAAM,QAAO;AAClB,UAAM,WAAW,IAAI,QAAA,EAAU,WAAW;AAC1C,UAAM,aAAa,MAAM,6BAA6B,IAAI,SAAS,SAAA,EAAW,MAAM;AACpF,UAAM,SAAS,WAAA;AACf,QAAI,QAAQ;AACV,YAAM,UAAU,MAAM,4BAA4B,EAAE,YAAY,UAAU,MAAM;AAChF,UAAI,SAAS;AACX,aAAK,OAAO,YAAY,OAAO;AAC/B,iBAAS,OAAA;AACT,eAAO;AAAA,MACT;AAAA,IACF;AACA,aAAS,KAAA;AACT,WAAO;AAAA,EACT,GAAG,CAAC,GAAG,CAAC;AACV;"}
|