@athenaintel/react 0.19.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 +97 -11
- 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.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.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 +3 -4
- 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-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.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.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 +4 -1
- 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 +3 -3
- 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.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.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.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.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.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 +4 -3
- 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/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.js +65 -0
- package/dist/chat-ui/messages/runtime-message.js.map +1 -0
- package/dist/{statewire-continue-run-nE9VCKUh.cjs → chat-ui/messages/statewire-continue-run.cjs} +39 -16
- package/dist/chat-ui/messages/statewire-continue-run.cjs.map +1 -0
- package/dist/chat-ui/messages/statewire-continue-run.d.ts +5 -1
- package/dist/{statewire-continue-run-D34gS7_1.js → chat-ui/messages/statewire-continue-run.js} +29 -7
- 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.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.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.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.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.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.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 +274 -27882
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.ts +6 -4
- package/dist/index.js +161 -27759
- 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.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 +8 -7
- 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.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.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.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.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.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.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.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 +1 -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/{misc-tool-uis-gAiQw0Yl.js → tools/misc-tool-uis.js} +17 -7
- 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.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.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.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.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 +18 -20
- 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/SuperGroupingCard-BsWbHyV_.js +0 -795
- package/dist/SuperGroupingCard-BsWbHyV_.js.map +0 -1
- package/dist/SuperGroupingCard-CRRFUgjN.cjs +0 -794
- package/dist/SuperGroupingCard-CRRFUgjN.cjs.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/tiptap-composer.d.ts +0 -7
- package/dist/chat-ui-statewire.cjs +0 -25
- package/dist/chat-ui-statewire.cjs.map +0 -1
- package/dist/chat-ui-statewire.js +0 -25
- package/dist/chat-ui-statewire.js.map +0 -1
- package/dist/chat-ui.cjs +0 -2484
- package/dist/chat-ui.cjs.map +0 -1
- package/dist/chat-ui.js +0 -2486
- 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/misc-tool-uis-B2e0Okkn.cjs +0 -43
- package/dist/misc-tool-uis-B2e0Okkn.cjs.map +0 -1
- package/dist/misc-tool-uis-gAiQw0Yl.js.map +0 -1
- package/dist/statewire-continue-run-D34gS7_1.js.map +0 -1
- package/dist/statewire-continue-run-nE9VCKUh.cjs.map +0 -1
- package/dist/statewire-history-edge-C8uyTEjX.cjs +0 -1711
- package/dist/statewire-history-edge-C8uyTEjX.cjs.map +0 -1
- package/dist/statewire-history-edge-CPohUKMt.js +0 -1712
- package/dist/statewire-history-edge-CPohUKMt.js.map +0 -1
- package/dist/super-grouping.cjs +0 -22
- package/dist/super-grouping.cjs.map +0 -1
- package/dist/super-grouping.js +0 -22
- package/dist/super-grouping.js.map +0 -1
- package/dist/tool-fallback-DkQ3DLkn.js +0 -4281
- package/dist/tool-fallback-DkQ3DLkn.js.map +0 -1
- package/dist/tool-fallback-kfhpJQZa.cjs +0 -4297
- package/dist/tool-fallback-kfhpJQZa.cjs.map +0 -1
- package/dist/tools.cjs +0 -41
- package/dist/tools.cjs.map +0 -1
- package/dist/tools.js +0 -41
- package/dist/tools.js.map +0 -1
- package/dist/trash-2-B5OaNAL7.cjs +0 -5096
- package/dist/trash-2-B5OaNAL7.cjs.map +0 -1
- package/dist/trash-2-CCwSURL-.js +0 -5081
- package/dist/trash-2-CCwSURL-.js.map +0 -1
- package/dist/use-rest-conversation-history-Cm8qMRxp.cjs +0 -32397
- package/dist/use-rest-conversation-history-Cm8qMRxp.cjs.map +0 -1
- package/dist/use-rest-conversation-history-veDZS-oL.js +0 -32361
- package/dist/use-rest-conversation-history-veDZS-oL.js.map +0 -1
- package/dist/wrench-BEf72cyP.cjs +0 -417
- package/dist/wrench-BEf72cyP.cjs.map +0 -1
- package/dist/wrench-CbrOlVYm.js +0 -418
- package/dist/wrench-CbrOlVYm.js.map +0 -1
- package/dist/x-Dfd2NzK0.cjs +0 -42
- package/dist/x-Dfd2NzK0.cjs.map +0 -1
- package/dist/x-_DntAa_a.js +0 -43
- package/dist/x-_DntAa_a.js.map +0 -1
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
|
|
3
|
+
const runconfigContract = require("./generated/runconfig-contract.cjs");
|
|
4
|
+
const isContractVersion = (value) => typeof value === "number" && Number.isInteger(value) && value >= 1;
|
|
5
|
+
function readDeepAgentProtocol(state) {
|
|
6
|
+
if (typeof state !== "object" || state === null) return null;
|
|
7
|
+
const lane = state[runconfigContract.DEEP_AGENT_PROTOCOL_STATE_KEY];
|
|
8
|
+
if (typeof lane !== "object" || lane === null) return null;
|
|
9
|
+
const { version, minClientVersion } = lane;
|
|
10
|
+
if (!isContractVersion(version) || !isContractVersion(minClientVersion)) return null;
|
|
11
|
+
return { version, minClientVersion };
|
|
12
|
+
}
|
|
13
|
+
function projectDeepAgentProtocol(state) {
|
|
14
|
+
const lane = readDeepAgentProtocol(state);
|
|
15
|
+
if (lane === null) return null;
|
|
16
|
+
return {
|
|
17
|
+
protocolVersion: lane.version,
|
|
18
|
+
minClientVersion: lane.minClientVersion,
|
|
19
|
+
clientVersion: runconfigContract.DEEP_AGENT_PROTOCOL_VERSION,
|
|
20
|
+
serverRequiresUpgrade: lane.minClientVersion > runconfigContract.DEEP_AGENT_PROTOCOL_VERSION
|
|
21
|
+
};
|
|
22
|
+
}
|
|
23
|
+
function withDeclaredProtocolVersion(headers) {
|
|
24
|
+
if (runconfigContract.DEEP_AGENT_PROTOCOL_VERSION_HEADER in headers) return headers;
|
|
25
|
+
return {
|
|
26
|
+
...headers,
|
|
27
|
+
[runconfigContract.DEEP_AGENT_PROTOCOL_VERSION_HEADER]: String(runconfigContract.DEEP_AGENT_PROTOCOL_VERSION)
|
|
28
|
+
};
|
|
29
|
+
}
|
|
30
|
+
exports.projectDeepAgentProtocol = projectDeepAgentProtocol;
|
|
31
|
+
exports.readDeepAgentProtocol = readDeepAgentProtocol;
|
|
32
|
+
exports.withDeclaredProtocolVersion = withDeclaredProtocolVersion;
|
|
33
|
+
//# sourceMappingURL=protocol.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"protocol.cjs","sources":["../../../../../agent-runtime/src/protocol.ts"],"sourcesContent":["import { statewireRejectionPayload } from './errors';\nimport {\n DEEP_AGENT_PROTOCOL_STATE_KEY,\n DEEP_AGENT_PROTOCOL_VERSION,\n DEEP_AGENT_PROTOCOL_VERSION_HEADER,\n} from './generated/runconfig-contract';\n\n/**\n * Wire-contract version negotiation between the deep-agent statewire host and\n * this client build (the client half of agora's\n * `agora/graphs/athena_deep_agent/protocol_version.py`; upstream ask\n * assistant-ui/statewire #31506 would make this a library concern).\n *\n * - Declaration: {@link withDeclaredProtocolVersion} stamps the version this\n * build speaks (`DEEP_AGENT_PROTOCOL_VERSION`, generated from the Python\n * source of truth) onto the attach headers — they ride the first WS frame's\n * mandatory `headers` field / the SSE request headers, so no statewire\n * change is needed.\n * - Advertisement: the host publishes `{version, minClientVersion}` under the\n * `protocol` state key in every attach snapshot;\n * {@link readDeepAgentProtocol} / {@link projectDeepAgentProtocol} read it.\n *\n * Skew-tolerant on both sides: an old server advertises nothing (project\n * `null`, gate nothing), and a malformed lane reads as absent — the\n * negotiation must never brick a client that could otherwise talk.\n */\nexport interface DeepAgentWireProtocol {\n /** The wire-contract version the server speaks. */\n version: number;\n /** The oldest declared client version the server accepts commands from. */\n minClientVersion: number;\n}\n\n/** The negotiation result a host surface renders (\"update required\"). */\nexport interface DeepAgentProtocolStatus {\n /** Server-advertised current contract version. */\n protocolVersion: number;\n /** Server-advertised minimum accepted client version. */\n minClientVersion: number;\n /** The contract version THIS client build declares. */\n clientVersion: number;\n /**\n * True when the server's minimum exceeds this build's version: the server\n * will answer commands with the structured `client_version_unsupported`\n * rejection (426, `detail.required`/`detail.advertised`), so the host\n * should surface an update affordance instead of letting sends fail.\n */\n serverRequiresUpgrade: boolean;\n}\n\nconst isContractVersion = (value: unknown): value is number =>\n typeof value === 'number' && Number.isInteger(value) && value >= 1;\n\n/**\n * The server-advertised version lane off a raw statewire state, or `null`\n * while it is unreadable — pre-attach, a pre-negotiation server's snapshot\n * (no lane), or a malformed lane (tolerated as absent, never thrown on).\n */\nexport function readDeepAgentProtocol(state: unknown): DeepAgentWireProtocol | null {\n if (typeof state !== 'object' || state === null) return null;\n const lane = (state as Record<string, unknown>)[DEEP_AGENT_PROTOCOL_STATE_KEY];\n if (typeof lane !== 'object' || lane === null) return null;\n const { version, minClientVersion } = lane as Record<string, unknown>;\n if (!isContractVersion(version) || !isContractVersion(minClientVersion)) return null;\n return { version, minClientVersion };\n}\n\n/**\n * Project the negotiation status for a host surface, or `null` while the\n * server has not advertised (see {@link readDeepAgentProtocol}). Pure and\n * selector-safe, mirroring `readSessionPersisted`.\n */\nexport function projectDeepAgentProtocol(state: unknown): DeepAgentProtocolStatus | null {\n const lane = readDeepAgentProtocol(state);\n if (lane === null) return null;\n return {\n protocolVersion: lane.version,\n minClientVersion: lane.minClientVersion,\n clientVersion: DEEP_AGENT_PROTOCOL_VERSION,\n serverRequiresUpgrade: lane.minClientVersion > DEEP_AGENT_PROTOCOL_VERSION,\n };\n}\n\n/**\n * Attach headers with this build's contract version declared. Applied by\n * `useDeepAgentThread` to every resolved header set, so all surfaces declare\n * without per-host wiring; an explicit entry (tests, forced overrides) wins.\n */\nexport function withDeclaredProtocolVersion(\n headers: Record<string, string>\n): Record<string, string> {\n if (DEEP_AGENT_PROTOCOL_VERSION_HEADER in headers) return headers;\n return {\n ...headers,\n [DEEP_AGENT_PROTOCOL_VERSION_HEADER]: String(DEEP_AGENT_PROTOCOL_VERSION),\n };\n}\n\n/**\n * Whether a rejected command was refused by the server's wire-contract\n * version gate — the structured 426 `client_version_unsupported` envelope\n * (raised for a declared-below-minimum build, or for an undeclared one once\n * the server's fail-closed ratchet is on).\n *\n * This is the reactive counterpart of {@link projectDeepAgentProtocol}: the\n * advertised state lane warns proactively, but a ratchet that lands\n * mid-session (or a snapshot the surface never projected) still answers the\n * next command with this rejection — hosts route it to their \"update\n * required\" affordance instead of a generic send failure.\n */\nexport function isClientVersionUnsupportedRejection(error: unknown): boolean {\n const payload = statewireRejectionPayload(error);\n if (payload?.status !== 426) return false;\n const detail = payload.detail as { code?: unknown } | undefined;\n return detail?.code === 'client_version_unsupported';\n}\n"],"names":["DEEP_AGENT_PROTOCOL_STATE_KEY","DEEP_AGENT_PROTOCOL_VERSION","DEEP_AGENT_PROTOCOL_VERSION_HEADER"],"mappings":";;;AAkDA,MAAM,oBAAoB,CAAC,UACzB,OAAO,UAAU,YAAY,OAAO,UAAU,KAAK,KAAK,SAAS;AAO5D,SAAS,sBAAsB,OAA8C;AAClF,MAAI,OAAO,UAAU,YAAY,UAAU,KAAM,QAAO;AACxD,QAAM,OAAQ,MAAkCA,+CAA6B;AAC7E,MAAI,OAAO,SAAS,YAAY,SAAS,KAAM,QAAO;AACtD,QAAM,EAAE,SAAS,iBAAA,IAAqB;AACtC,MAAI,CAAC,kBAAkB,OAAO,KAAK,CAAC,kBAAkB,gBAAgB,EAAG,QAAO;AAChF,SAAO,EAAE,SAAS,iBAAA;AACpB;AAOO,SAAS,yBAAyB,OAAgD;AACvF,QAAM,OAAO,sBAAsB,KAAK;AACxC,MAAI,SAAS,KAAM,QAAO;AAC1B,SAAO;AAAA,IACL,iBAAiB,KAAK;AAAA,IACtB,kBAAkB,KAAK;AAAA,IACvB,eAAeC,kBAAAA;AAAAA,IACf,uBAAuB,KAAK,mBAAmBA,kBAAAA;AAAAA,EAAA;AAEnD;AAOO,SAAS,4BACd,SACwB;AACxB,MAAIC,kBAAAA,sCAAsC,QAAS,QAAO;AAC1D,SAAO;AAAA,IACL,GAAG;AAAA,IACH,CAACA,kBAAAA,kCAAkC,GAAG,OAAOD,kBAAAA,2BAA2B;AAAA,EAAA;AAE5E;;;;"}
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
import { DEEP_AGENT_PROTOCOL_VERSION, DEEP_AGENT_PROTOCOL_STATE_KEY, DEEP_AGENT_PROTOCOL_VERSION_HEADER } from "./generated/runconfig-contract.js";
|
|
2
|
+
const isContractVersion = (value) => typeof value === "number" && Number.isInteger(value) && value >= 1;
|
|
3
|
+
function readDeepAgentProtocol(state) {
|
|
4
|
+
if (typeof state !== "object" || state === null) return null;
|
|
5
|
+
const lane = state[DEEP_AGENT_PROTOCOL_STATE_KEY];
|
|
6
|
+
if (typeof lane !== "object" || lane === null) return null;
|
|
7
|
+
const { version, minClientVersion } = lane;
|
|
8
|
+
if (!isContractVersion(version) || !isContractVersion(minClientVersion)) return null;
|
|
9
|
+
return { version, minClientVersion };
|
|
10
|
+
}
|
|
11
|
+
function projectDeepAgentProtocol(state) {
|
|
12
|
+
const lane = readDeepAgentProtocol(state);
|
|
13
|
+
if (lane === null) return null;
|
|
14
|
+
return {
|
|
15
|
+
protocolVersion: lane.version,
|
|
16
|
+
minClientVersion: lane.minClientVersion,
|
|
17
|
+
clientVersion: DEEP_AGENT_PROTOCOL_VERSION,
|
|
18
|
+
serverRequiresUpgrade: lane.minClientVersion > DEEP_AGENT_PROTOCOL_VERSION
|
|
19
|
+
};
|
|
20
|
+
}
|
|
21
|
+
function withDeclaredProtocolVersion(headers) {
|
|
22
|
+
if (DEEP_AGENT_PROTOCOL_VERSION_HEADER in headers) return headers;
|
|
23
|
+
return {
|
|
24
|
+
...headers,
|
|
25
|
+
[DEEP_AGENT_PROTOCOL_VERSION_HEADER]: String(DEEP_AGENT_PROTOCOL_VERSION)
|
|
26
|
+
};
|
|
27
|
+
}
|
|
28
|
+
export {
|
|
29
|
+
projectDeepAgentProtocol,
|
|
30
|
+
readDeepAgentProtocol,
|
|
31
|
+
withDeclaredProtocolVersion
|
|
32
|
+
};
|
|
33
|
+
//# sourceMappingURL=protocol.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"protocol.js","sources":["../../../../../agent-runtime/src/protocol.ts"],"sourcesContent":["import { statewireRejectionPayload } from './errors';\nimport {\n DEEP_AGENT_PROTOCOL_STATE_KEY,\n DEEP_AGENT_PROTOCOL_VERSION,\n DEEP_AGENT_PROTOCOL_VERSION_HEADER,\n} from './generated/runconfig-contract';\n\n/**\n * Wire-contract version negotiation between the deep-agent statewire host and\n * this client build (the client half of agora's\n * `agora/graphs/athena_deep_agent/protocol_version.py`; upstream ask\n * assistant-ui/statewire #31506 would make this a library concern).\n *\n * - Declaration: {@link withDeclaredProtocolVersion} stamps the version this\n * build speaks (`DEEP_AGENT_PROTOCOL_VERSION`, generated from the Python\n * source of truth) onto the attach headers — they ride the first WS frame's\n * mandatory `headers` field / the SSE request headers, so no statewire\n * change is needed.\n * - Advertisement: the host publishes `{version, minClientVersion}` under the\n * `protocol` state key in every attach snapshot;\n * {@link readDeepAgentProtocol} / {@link projectDeepAgentProtocol} read it.\n *\n * Skew-tolerant on both sides: an old server advertises nothing (project\n * `null`, gate nothing), and a malformed lane reads as absent — the\n * negotiation must never brick a client that could otherwise talk.\n */\nexport interface DeepAgentWireProtocol {\n /** The wire-contract version the server speaks. */\n version: number;\n /** The oldest declared client version the server accepts commands from. */\n minClientVersion: number;\n}\n\n/** The negotiation result a host surface renders (\"update required\"). */\nexport interface DeepAgentProtocolStatus {\n /** Server-advertised current contract version. */\n protocolVersion: number;\n /** Server-advertised minimum accepted client version. */\n minClientVersion: number;\n /** The contract version THIS client build declares. */\n clientVersion: number;\n /**\n * True when the server's minimum exceeds this build's version: the server\n * will answer commands with the structured `client_version_unsupported`\n * rejection (426, `detail.required`/`detail.advertised`), so the host\n * should surface an update affordance instead of letting sends fail.\n */\n serverRequiresUpgrade: boolean;\n}\n\nconst isContractVersion = (value: unknown): value is number =>\n typeof value === 'number' && Number.isInteger(value) && value >= 1;\n\n/**\n * The server-advertised version lane off a raw statewire state, or `null`\n * while it is unreadable — pre-attach, a pre-negotiation server's snapshot\n * (no lane), or a malformed lane (tolerated as absent, never thrown on).\n */\nexport function readDeepAgentProtocol(state: unknown): DeepAgentWireProtocol | null {\n if (typeof state !== 'object' || state === null) return null;\n const lane = (state as Record<string, unknown>)[DEEP_AGENT_PROTOCOL_STATE_KEY];\n if (typeof lane !== 'object' || lane === null) return null;\n const { version, minClientVersion } = lane as Record<string, unknown>;\n if (!isContractVersion(version) || !isContractVersion(minClientVersion)) return null;\n return { version, minClientVersion };\n}\n\n/**\n * Project the negotiation status for a host surface, or `null` while the\n * server has not advertised (see {@link readDeepAgentProtocol}). Pure and\n * selector-safe, mirroring `readSessionPersisted`.\n */\nexport function projectDeepAgentProtocol(state: unknown): DeepAgentProtocolStatus | null {\n const lane = readDeepAgentProtocol(state);\n if (lane === null) return null;\n return {\n protocolVersion: lane.version,\n minClientVersion: lane.minClientVersion,\n clientVersion: DEEP_AGENT_PROTOCOL_VERSION,\n serverRequiresUpgrade: lane.minClientVersion > DEEP_AGENT_PROTOCOL_VERSION,\n };\n}\n\n/**\n * Attach headers with this build's contract version declared. Applied by\n * `useDeepAgentThread` to every resolved header set, so all surfaces declare\n * without per-host wiring; an explicit entry (tests, forced overrides) wins.\n */\nexport function withDeclaredProtocolVersion(\n headers: Record<string, string>\n): Record<string, string> {\n if (DEEP_AGENT_PROTOCOL_VERSION_HEADER in headers) return headers;\n return {\n ...headers,\n [DEEP_AGENT_PROTOCOL_VERSION_HEADER]: String(DEEP_AGENT_PROTOCOL_VERSION),\n };\n}\n\n/**\n * Whether a rejected command was refused by the server's wire-contract\n * version gate — the structured 426 `client_version_unsupported` envelope\n * (raised for a declared-below-minimum build, or for an undeclared one once\n * the server's fail-closed ratchet is on).\n *\n * This is the reactive counterpart of {@link projectDeepAgentProtocol}: the\n * advertised state lane warns proactively, but a ratchet that lands\n * mid-session (or a snapshot the surface never projected) still answers the\n * next command with this rejection — hosts route it to their \"update\n * required\" affordance instead of a generic send failure.\n */\nexport function isClientVersionUnsupportedRejection(error: unknown): boolean {\n const payload = statewireRejectionPayload(error);\n if (payload?.status !== 426) return false;\n const detail = payload.detail as { code?: unknown } | undefined;\n return detail?.code === 'client_version_unsupported';\n}\n"],"names":[],"mappings":";AAkDA,MAAM,oBAAoB,CAAC,UACzB,OAAO,UAAU,YAAY,OAAO,UAAU,KAAK,KAAK,SAAS;AAO5D,SAAS,sBAAsB,OAA8C;AAClF,MAAI,OAAO,UAAU,YAAY,UAAU,KAAM,QAAO;AACxD,QAAM,OAAQ,MAAkC,6BAA6B;AAC7E,MAAI,OAAO,SAAS,YAAY,SAAS,KAAM,QAAO;AACtD,QAAM,EAAE,SAAS,iBAAA,IAAqB;AACtC,MAAI,CAAC,kBAAkB,OAAO,KAAK,CAAC,kBAAkB,gBAAgB,EAAG,QAAO;AAChF,SAAO,EAAE,SAAS,iBAAA;AACpB;AAOO,SAAS,yBAAyB,OAAgD;AACvF,QAAM,OAAO,sBAAsB,KAAK;AACxC,MAAI,SAAS,KAAM,QAAO;AAC1B,SAAO;AAAA,IACL,iBAAiB,KAAK;AAAA,IACtB,kBAAkB,KAAK;AAAA,IACvB,eAAe;AAAA,IACf,uBAAuB,KAAK,mBAAmB;AAAA,EAAA;AAEnD;AAOO,SAAS,4BACd,SACwB;AACxB,MAAI,sCAAsC,QAAS,QAAO;AAC1D,SAAO;AAAA,IACL,GAAG;AAAA,IACH,CAAC,kCAAkC,GAAG,OAAO,2BAA2B;AAAA,EAAA;AAE5E;"}
|
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
|
|
3
|
+
const messages = require("./messages.cjs");
|
|
4
|
+
function queueEntryText(parts) {
|
|
5
|
+
return parts.flatMap(
|
|
6
|
+
(part) => part.type === "text" && typeof part.text === "string" ? [part.text] : []
|
|
7
|
+
).join("\n\n");
|
|
8
|
+
}
|
|
9
|
+
function isQueueEntryUnsettled(entry) {
|
|
10
|
+
return entry.meta === void 0;
|
|
11
|
+
}
|
|
12
|
+
function readPrioritizedQueueIds(raw) {
|
|
13
|
+
return Array.isArray(raw) ? raw.filter((id) => typeof id === "string") : [];
|
|
14
|
+
}
|
|
15
|
+
function queueLaneFlags(status) {
|
|
16
|
+
return {
|
|
17
|
+
isRunning: status === "running",
|
|
18
|
+
isContinuable: status === "stopped" || status === "error"
|
|
19
|
+
};
|
|
20
|
+
}
|
|
21
|
+
function buildStatewireQueueRows(options) {
|
|
22
|
+
const { queue, steerQueue, isContinuable } = options;
|
|
23
|
+
return [
|
|
24
|
+
...isContinuable ? steerQueue.map((item) => ({ item, lane: "steer" })) : [],
|
|
25
|
+
...queue.map((item) => ({ item, lane: "queue" }))
|
|
26
|
+
];
|
|
27
|
+
}
|
|
28
|
+
function showQueueRowSendNow(options) {
|
|
29
|
+
const { lane, index, isRunning, isContinuable } = options;
|
|
30
|
+
return lane === "queue" && (isContinuable || isRunning && index === 0);
|
|
31
|
+
}
|
|
32
|
+
function buildQueueEditCommand(options) {
|
|
33
|
+
const { item, lane, runId, text } = options;
|
|
34
|
+
if (!text.trim() || text === queueEntryText(item.parts) || runId === null) {
|
|
35
|
+
return null;
|
|
36
|
+
}
|
|
37
|
+
const message = {
|
|
38
|
+
id: item.id,
|
|
39
|
+
role: "user",
|
|
40
|
+
parts: [{ type: "text", text }, ...item.parts.filter((part) => part.type !== "text")],
|
|
41
|
+
...item.metadata === void 0 ? {} : { metadata: item.metadata }
|
|
42
|
+
};
|
|
43
|
+
return lane === "steer" ? { type: "run/steer", runId, message } : { type: "run/enqueue", runId, message };
|
|
44
|
+
}
|
|
45
|
+
const QUEUE_AUTO_CONTINUE_DELAY_MS = 2e3;
|
|
46
|
+
function userStopBlocksQueueAutoContinue(options) {
|
|
47
|
+
return options.marker === messages.ATHENA_RUN_MARKER_CANCELLED && !messages.isServerUpdateStopSource(options.source);
|
|
48
|
+
}
|
|
49
|
+
function describeQueueSendFailure(failure) {
|
|
50
|
+
const message = "message" in failure && failure.message !== void 0 ? `: ${failure.message}` : "";
|
|
51
|
+
return `${failure.fate} (${failure.cause})${message}`;
|
|
52
|
+
}
|
|
53
|
+
function isFailedSendEntryRace(error) {
|
|
54
|
+
return error instanceof Error && error.message.startsWith("statewire: unknown failed");
|
|
55
|
+
}
|
|
56
|
+
exports.QUEUE_AUTO_CONTINUE_DELAY_MS = QUEUE_AUTO_CONTINUE_DELAY_MS;
|
|
57
|
+
exports.buildQueueEditCommand = buildQueueEditCommand;
|
|
58
|
+
exports.buildStatewireQueueRows = buildStatewireQueueRows;
|
|
59
|
+
exports.describeQueueSendFailure = describeQueueSendFailure;
|
|
60
|
+
exports.isFailedSendEntryRace = isFailedSendEntryRace;
|
|
61
|
+
exports.isQueueEntryUnsettled = isQueueEntryUnsettled;
|
|
62
|
+
exports.queueEntryText = queueEntryText;
|
|
63
|
+
exports.queueLaneFlags = queueLaneFlags;
|
|
64
|
+
exports.readPrioritizedQueueIds = readPrioritizedQueueIds;
|
|
65
|
+
exports.showQueueRowSendNow = showQueueRowSendNow;
|
|
66
|
+
exports.userStopBlocksQueueAutoContinue = userStopBlocksQueueAutoContinue;
|
|
67
|
+
//# sourceMappingURL=queue.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"queue.cjs","sources":["../../../../../agent-runtime/src/queue.ts"],"sourcesContent":["/**\n * Derivations for the server-owned statewire queue and steer lanes, shared by\n * every queued-messages tray (Olympus, the React SDK, the Chrome extension).\n *\n * The queue is SERVER-owned: statewire surfaces it on the runs projection.\n * \"Send now\" moves an item into the steer lane (`run/steer` — the host stops\n * the run and dispatches it once the run settles; on a stopped/errored thread\n * the same move dispatches immediately as a stop-/error-continue run) and\n * remove issues `run/dequeue`. While the thread rests stopped/errored,\n * stranded steer-lane entries list ahead of the queue — they dispatch first,\n * as one batch, so they carry Remove but no per-row Send now.\n *\n * Pure helpers only: the host component reads `useStatewireRuns()` and\n * `useDeepAgentThreadStatus()` itself (both mockable per surface) and passes\n * the values in.\n */\n\nimport type { StatewireThread } from '@assistant-ui/react-statewire';\nimport { ATHENA_RUN_MARKER_CANCELLED, isServerUpdateStopSource } from './messages';\nimport type { DeepAgentThreadStatus } from './thread-status';\n\n/** The text content of a queued entry (non-text parts render as fallbacks). */\nexport function queueEntryText(\n parts: readonly { type: string; text?: string }[],\n): string {\n return parts\n .flatMap((part) =>\n part.type === 'text' && typeof part.text === 'string' ? [part.text] : [],\n )\n .join('\\n\\n');\n}\n\n/**\n * Whether a lane entry is still awaiting its send's settle: the host stamps\n * `meta` on every entry it admits (`_op_meta` — submitter and contextSync\n * snapshot), so a meta-less entry is this client's own optimistic fold. The\n * send is still in flight and can still be refused (billing gate, auth,\n * reconnect), which the tray must not render as an accepted queue position.\n */\nexport function isQueueEntryUnsettled(entry: StatewireThread.RunsQueueEntry): boolean {\n return entry.meta === undefined;\n}\n\n/**\n * The ids of queued entries the user prioritized (⚡ — `run/prioritize`), as\n * the host records them in its durable `prioritizedQueueIds` state. A\n * prioritized entry heads the queue lane and the live run ends at its next\n * model-call boundary to deliver it, so trays render these rows lit and offer\n * \"Remove priority\" instead of \"Prioritize\". Tolerates the key being absent\n * (a thread that never prioritized, a pre-feature host) and ignores anything\n * that is not a string id.\n */\nexport function readPrioritizedQueueIds(raw: unknown): readonly string[] {\n return Array.isArray(raw)\n ? raw.filter((id): id is string => typeof id === 'string')\n : [];\n}\n\nexport interface QueueLaneFlags {\n isRunning: boolean;\n /** A stopped/errored thread can continue with its queued work. */\n isContinuable: boolean;\n}\n\n/** The thread-status split every queue tray keys its affordances on. */\nexport function queueLaneFlags(status: DeepAgentThreadStatus): QueueLaneFlags {\n return {\n isRunning: status === 'running',\n isContinuable: status === 'stopped' || status === 'error',\n };\n}\n\nexport interface StatewireQueueRow {\n item: StatewireThread.RunsQueueEntry;\n lane: 'queue' | 'steer';\n}\n\n/**\n * The rows a queue tray renders, in dispatch order: stranded steer-lane\n * entries first (only while the thread rests continuable — during a run they\n * already render in the message list), then the queue lane.\n */\nexport function buildStatewireQueueRows(options: {\n queue: readonly StatewireThread.RunsQueueEntry[];\n steerQueue: readonly StatewireThread.RunsQueueEntry[];\n isContinuable: boolean;\n}): StatewireQueueRow[] {\n const { queue, steerQueue, isContinuable } = options;\n return [\n ...(isContinuable\n ? steerQueue.map((item) => ({ item, lane: 'steer' as const }))\n : []),\n ...queue.map((item) => ({ item, lane: 'queue' as const })),\n ];\n}\n\n/**\n * Whether a row offers \"Send now\": queue-lane rows only (steer entries already\n * dispatch first), every row while the thread rests continuable, and only the\n * head row while a run is live (later rows would jump the queue order).\n */\nexport function showQueueRowSendNow(options: {\n lane: 'queue' | 'steer';\n index: number;\n isRunning: boolean;\n isContinuable: boolean;\n}): boolean {\n const { lane, index, isRunning, isContinuable } = options;\n return lane === 'queue' && (isContinuable || (isRunning && index === 0));\n}\n\nexport type QueueEditCommand =\n | { type: 'run/steer'; runId: string; message: StatewireThread.UserMessage }\n | { type: 'run/enqueue'; runId: string; message: StatewireThread.UserMessage };\n\n/**\n * Re-send a queued entry under its own id on its own lane with edited text:\n * the host replaces the queued message's content in place, leaving its queue\n * position and lane untouched (a same-id send never dispatches). The built-in\n * queue client has no update command, so this goes straight to the runs\n * protocol. Returns `null` when there is nothing to send — blank or unchanged\n * text, or no live run entry to address.\n */\nexport function buildQueueEditCommand(options: {\n item: StatewireThread.RunsQueueEntry;\n lane: 'queue' | 'steer';\n runId: string | null;\n text: string;\n}): QueueEditCommand | null {\n const { item, lane, runId, text } = options;\n if (!text.trim() || text === queueEntryText(item.parts) || runId === null) {\n return null;\n }\n const message: StatewireThread.UserMessage = {\n id: item.id,\n role: 'user',\n parts: [{ type: 'text', text }, ...item.parts.filter((part) => part.type !== 'text')],\n ...(item.metadata === undefined ? {} : { metadata: item.metadata }),\n };\n return lane === 'steer'\n ? { type: 'run/steer', runId, message }\n : { type: 'run/enqueue', runId, message };\n}\n\n/**\n * Grace between observing a stranded settle and auto-promoting the queue\n * head — long enough for the host's own settle bookkeeping (or a status flap\n * during reconnect) to resolve first, short enough to read as \"it just\n * continued\" rather than \"it hung\".\n */\nexport const QUEUE_AUTO_CONTINUE_DELAY_MS = 2_000;\n\n/** Whether the last cancellation marker records a user or client stop. */\nexport function userStopBlocksQueueAutoContinue(options: {\n marker: string | undefined;\n source: string | undefined;\n}): boolean {\n return (\n options.marker === ATHENA_RUN_MARKER_CANCELLED && !isServerUpdateStopSource(options.source)\n );\n}\n\n/** `fate (cause)[: message]` — the detail a failed-send row carries. */\nexport function describeQueueSendFailure(\n failure: StatewireThread.RunsFailedEntry['sendFailure'],\n): string {\n const message =\n 'message' in failure && failure.message !== undefined ? `: ${failure.message}` : '';\n return `${failure.fate} (${failure.cause})${message}`;\n}\n\n/**\n * Whether a `retryFailed` / `discardFailed` throw is the covered drop race:\n * statewire drops a failed entry on its own as soon as a canonical update\n * shows the message landed, and acting on a just-dropped entry throws. Both\n * the session record (\"unknown failed command\") and the adapter's projection\n * (\"unknown failed entry\") use this prefix. Nothing is lost in that race — the\n * message already made it and the row is about to disappear — so a tray\n * swallows it (keeping telemetry) instead of crashing the click handler.\n */\nexport function isFailedSendEntryRace(error: unknown): boolean {\n return error instanceof Error && error.message.startsWith('statewire: unknown failed');\n}\n"],"names":["ATHENA_RUN_MARKER_CANCELLED","isServerUpdateStopSource"],"mappings":";;;AAsBO,SAAS,eACd,OACQ;AACR,SAAO,MACJ;AAAA,IAAQ,CAAC,SACR,KAAK,SAAS,UAAU,OAAO,KAAK,SAAS,WAAW,CAAC,KAAK,IAAI,IAAI,CAAA;AAAA,EAAC,EAExE,KAAK,MAAM;AAChB;AASO,SAAS,sBAAsB,OAAgD;AACpF,SAAO,MAAM,SAAS;AACxB;AAWO,SAAS,wBAAwB,KAAiC;AACvE,SAAO,MAAM,QAAQ,GAAG,IACpB,IAAI,OAAO,CAAC,OAAqB,OAAO,OAAO,QAAQ,IACvD,CAAA;AACN;AASO,SAAS,eAAe,QAA+C;AAC5E,SAAO;AAAA,IACL,WAAW,WAAW;AAAA,IACtB,eAAe,WAAW,aAAa,WAAW;AAAA,EAAA;AAEtD;AAYO,SAAS,wBAAwB,SAIhB;AACtB,QAAM,EAAE,OAAO,YAAY,cAAA,IAAkB;AAC7C,SAAO;AAAA,IACL,GAAI,gBACA,WAAW,IAAI,CAAC,UAAU,EAAE,MAAM,MAAM,UAAmB,IAC3D,CAAA;AAAA,IACJ,GAAG,MAAM,IAAI,CAAC,UAAU,EAAE,MAAM,MAAM,UAAmB;AAAA,EAAA;AAE7D;AAOO,SAAS,oBAAoB,SAKxB;AACV,QAAM,EAAE,MAAM,OAAO,WAAW,kBAAkB;AAClD,SAAO,SAAS,YAAY,iBAAkB,aAAa,UAAU;AACvE;AAcO,SAAS,sBAAsB,SAKV;AAC1B,QAAM,EAAE,MAAM,MAAM,OAAO,SAAS;AACpC,MAAI,CAAC,KAAK,KAAA,KAAU,SAAS,eAAe,KAAK,KAAK,KAAK,UAAU,MAAM;AACzE,WAAO;AAAA,EACT;AACA,QAAM,UAAuC;AAAA,IAC3C,IAAI,KAAK;AAAA,IACT,MAAM;AAAA,IACN,OAAO,CAAC,EAAE,MAAM,QAAQ,QAAQ,GAAG,KAAK,MAAM,OAAO,CAAC,SAAS,KAAK,SAAS,MAAM,CAAC;AAAA,IACpF,GAAI,KAAK,aAAa,SAAY,CAAA,IAAK,EAAE,UAAU,KAAK,SAAA;AAAA,EAAS;AAEnE,SAAO,SAAS,UACZ,EAAE,MAAM,aAAa,OAAO,QAAA,IAC5B,EAAE,MAAM,eAAe,OAAO,QAAA;AACpC;AAQO,MAAM,+BAA+B;AAGrC,SAAS,gCAAgC,SAGpC;AACV,SACE,QAAQ,WAAWA,SAAAA,+BAA+B,CAACC,SAAAA,yBAAyB,QAAQ,MAAM;AAE9F;AAGO,SAAS,yBACd,SACQ;AACR,QAAM,UACJ,aAAa,WAAW,QAAQ,YAAY,SAAY,KAAK,QAAQ,OAAO,KAAK;AACnF,SAAO,GAAG,QAAQ,IAAI,KAAK,QAAQ,KAAK,IAAI,OAAO;AACrD;AAWO,SAAS,sBAAsB,OAAyB;AAC7D,SAAO,iBAAiB,SAAS,MAAM,QAAQ,WAAW,2BAA2B;AACvF;;;;;;;;;;;;"}
|
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
import { ATHENA_RUN_MARKER_CANCELLED, isServerUpdateStopSource } from "./messages.js";
|
|
2
|
+
function queueEntryText(parts) {
|
|
3
|
+
return parts.flatMap(
|
|
4
|
+
(part) => part.type === "text" && typeof part.text === "string" ? [part.text] : []
|
|
5
|
+
).join("\n\n");
|
|
6
|
+
}
|
|
7
|
+
function isQueueEntryUnsettled(entry) {
|
|
8
|
+
return entry.meta === void 0;
|
|
9
|
+
}
|
|
10
|
+
function readPrioritizedQueueIds(raw) {
|
|
11
|
+
return Array.isArray(raw) ? raw.filter((id) => typeof id === "string") : [];
|
|
12
|
+
}
|
|
13
|
+
function queueLaneFlags(status) {
|
|
14
|
+
return {
|
|
15
|
+
isRunning: status === "running",
|
|
16
|
+
isContinuable: status === "stopped" || status === "error"
|
|
17
|
+
};
|
|
18
|
+
}
|
|
19
|
+
function buildStatewireQueueRows(options) {
|
|
20
|
+
const { queue, steerQueue, isContinuable } = options;
|
|
21
|
+
return [
|
|
22
|
+
...isContinuable ? steerQueue.map((item) => ({ item, lane: "steer" })) : [],
|
|
23
|
+
...queue.map((item) => ({ item, lane: "queue" }))
|
|
24
|
+
];
|
|
25
|
+
}
|
|
26
|
+
function showQueueRowSendNow(options) {
|
|
27
|
+
const { lane, index, isRunning, isContinuable } = options;
|
|
28
|
+
return lane === "queue" && (isContinuable || isRunning && index === 0);
|
|
29
|
+
}
|
|
30
|
+
function buildQueueEditCommand(options) {
|
|
31
|
+
const { item, lane, runId, text } = options;
|
|
32
|
+
if (!text.trim() || text === queueEntryText(item.parts) || runId === null) {
|
|
33
|
+
return null;
|
|
34
|
+
}
|
|
35
|
+
const message = {
|
|
36
|
+
id: item.id,
|
|
37
|
+
role: "user",
|
|
38
|
+
parts: [{ type: "text", text }, ...item.parts.filter((part) => part.type !== "text")],
|
|
39
|
+
...item.metadata === void 0 ? {} : { metadata: item.metadata }
|
|
40
|
+
};
|
|
41
|
+
return lane === "steer" ? { type: "run/steer", runId, message } : { type: "run/enqueue", runId, message };
|
|
42
|
+
}
|
|
43
|
+
const QUEUE_AUTO_CONTINUE_DELAY_MS = 2e3;
|
|
44
|
+
function userStopBlocksQueueAutoContinue(options) {
|
|
45
|
+
return options.marker === ATHENA_RUN_MARKER_CANCELLED && !isServerUpdateStopSource(options.source);
|
|
46
|
+
}
|
|
47
|
+
function describeQueueSendFailure(failure) {
|
|
48
|
+
const message = "message" in failure && failure.message !== void 0 ? `: ${failure.message}` : "";
|
|
49
|
+
return `${failure.fate} (${failure.cause})${message}`;
|
|
50
|
+
}
|
|
51
|
+
function isFailedSendEntryRace(error) {
|
|
52
|
+
return error instanceof Error && error.message.startsWith("statewire: unknown failed");
|
|
53
|
+
}
|
|
54
|
+
export {
|
|
55
|
+
QUEUE_AUTO_CONTINUE_DELAY_MS,
|
|
56
|
+
buildQueueEditCommand,
|
|
57
|
+
buildStatewireQueueRows,
|
|
58
|
+
describeQueueSendFailure,
|
|
59
|
+
isFailedSendEntryRace,
|
|
60
|
+
isQueueEntryUnsettled,
|
|
61
|
+
queueEntryText,
|
|
62
|
+
queueLaneFlags,
|
|
63
|
+
readPrioritizedQueueIds,
|
|
64
|
+
showQueueRowSendNow,
|
|
65
|
+
userStopBlocksQueueAutoContinue
|
|
66
|
+
};
|
|
67
|
+
//# sourceMappingURL=queue.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"queue.js","sources":["../../../../../agent-runtime/src/queue.ts"],"sourcesContent":["/**\n * Derivations for the server-owned statewire queue and steer lanes, shared by\n * every queued-messages tray (Olympus, the React SDK, the Chrome extension).\n *\n * The queue is SERVER-owned: statewire surfaces it on the runs projection.\n * \"Send now\" moves an item into the steer lane (`run/steer` — the host stops\n * the run and dispatches it once the run settles; on a stopped/errored thread\n * the same move dispatches immediately as a stop-/error-continue run) and\n * remove issues `run/dequeue`. While the thread rests stopped/errored,\n * stranded steer-lane entries list ahead of the queue — they dispatch first,\n * as one batch, so they carry Remove but no per-row Send now.\n *\n * Pure helpers only: the host component reads `useStatewireRuns()` and\n * `useDeepAgentThreadStatus()` itself (both mockable per surface) and passes\n * the values in.\n */\n\nimport type { StatewireThread } from '@assistant-ui/react-statewire';\nimport { ATHENA_RUN_MARKER_CANCELLED, isServerUpdateStopSource } from './messages';\nimport type { DeepAgentThreadStatus } from './thread-status';\n\n/** The text content of a queued entry (non-text parts render as fallbacks). */\nexport function queueEntryText(\n parts: readonly { type: string; text?: string }[],\n): string {\n return parts\n .flatMap((part) =>\n part.type === 'text' && typeof part.text === 'string' ? [part.text] : [],\n )\n .join('\\n\\n');\n}\n\n/**\n * Whether a lane entry is still awaiting its send's settle: the host stamps\n * `meta` on every entry it admits (`_op_meta` — submitter and contextSync\n * snapshot), so a meta-less entry is this client's own optimistic fold. The\n * send is still in flight and can still be refused (billing gate, auth,\n * reconnect), which the tray must not render as an accepted queue position.\n */\nexport function isQueueEntryUnsettled(entry: StatewireThread.RunsQueueEntry): boolean {\n return entry.meta === undefined;\n}\n\n/**\n * The ids of queued entries the user prioritized (⚡ — `run/prioritize`), as\n * the host records them in its durable `prioritizedQueueIds` state. A\n * prioritized entry heads the queue lane and the live run ends at its next\n * model-call boundary to deliver it, so trays render these rows lit and offer\n * \"Remove priority\" instead of \"Prioritize\". Tolerates the key being absent\n * (a thread that never prioritized, a pre-feature host) and ignores anything\n * that is not a string id.\n */\nexport function readPrioritizedQueueIds(raw: unknown): readonly string[] {\n return Array.isArray(raw)\n ? raw.filter((id): id is string => typeof id === 'string')\n : [];\n}\n\nexport interface QueueLaneFlags {\n isRunning: boolean;\n /** A stopped/errored thread can continue with its queued work. */\n isContinuable: boolean;\n}\n\n/** The thread-status split every queue tray keys its affordances on. */\nexport function queueLaneFlags(status: DeepAgentThreadStatus): QueueLaneFlags {\n return {\n isRunning: status === 'running',\n isContinuable: status === 'stopped' || status === 'error',\n };\n}\n\nexport interface StatewireQueueRow {\n item: StatewireThread.RunsQueueEntry;\n lane: 'queue' | 'steer';\n}\n\n/**\n * The rows a queue tray renders, in dispatch order: stranded steer-lane\n * entries first (only while the thread rests continuable — during a run they\n * already render in the message list), then the queue lane.\n */\nexport function buildStatewireQueueRows(options: {\n queue: readonly StatewireThread.RunsQueueEntry[];\n steerQueue: readonly StatewireThread.RunsQueueEntry[];\n isContinuable: boolean;\n}): StatewireQueueRow[] {\n const { queue, steerQueue, isContinuable } = options;\n return [\n ...(isContinuable\n ? steerQueue.map((item) => ({ item, lane: 'steer' as const }))\n : []),\n ...queue.map((item) => ({ item, lane: 'queue' as const })),\n ];\n}\n\n/**\n * Whether a row offers \"Send now\": queue-lane rows only (steer entries already\n * dispatch first), every row while the thread rests continuable, and only the\n * head row while a run is live (later rows would jump the queue order).\n */\nexport function showQueueRowSendNow(options: {\n lane: 'queue' | 'steer';\n index: number;\n isRunning: boolean;\n isContinuable: boolean;\n}): boolean {\n const { lane, index, isRunning, isContinuable } = options;\n return lane === 'queue' && (isContinuable || (isRunning && index === 0));\n}\n\nexport type QueueEditCommand =\n | { type: 'run/steer'; runId: string; message: StatewireThread.UserMessage }\n | { type: 'run/enqueue'; runId: string; message: StatewireThread.UserMessage };\n\n/**\n * Re-send a queued entry under its own id on its own lane with edited text:\n * the host replaces the queued message's content in place, leaving its queue\n * position and lane untouched (a same-id send never dispatches). The built-in\n * queue client has no update command, so this goes straight to the runs\n * protocol. Returns `null` when there is nothing to send — blank or unchanged\n * text, or no live run entry to address.\n */\nexport function buildQueueEditCommand(options: {\n item: StatewireThread.RunsQueueEntry;\n lane: 'queue' | 'steer';\n runId: string | null;\n text: string;\n}): QueueEditCommand | null {\n const { item, lane, runId, text } = options;\n if (!text.trim() || text === queueEntryText(item.parts) || runId === null) {\n return null;\n }\n const message: StatewireThread.UserMessage = {\n id: item.id,\n role: 'user',\n parts: [{ type: 'text', text }, ...item.parts.filter((part) => part.type !== 'text')],\n ...(item.metadata === undefined ? {} : { metadata: item.metadata }),\n };\n return lane === 'steer'\n ? { type: 'run/steer', runId, message }\n : { type: 'run/enqueue', runId, message };\n}\n\n/**\n * Grace between observing a stranded settle and auto-promoting the queue\n * head — long enough for the host's own settle bookkeeping (or a status flap\n * during reconnect) to resolve first, short enough to read as \"it just\n * continued\" rather than \"it hung\".\n */\nexport const QUEUE_AUTO_CONTINUE_DELAY_MS = 2_000;\n\n/** Whether the last cancellation marker records a user or client stop. */\nexport function userStopBlocksQueueAutoContinue(options: {\n marker: string | undefined;\n source: string | undefined;\n}): boolean {\n return (\n options.marker === ATHENA_RUN_MARKER_CANCELLED && !isServerUpdateStopSource(options.source)\n );\n}\n\n/** `fate (cause)[: message]` — the detail a failed-send row carries. */\nexport function describeQueueSendFailure(\n failure: StatewireThread.RunsFailedEntry['sendFailure'],\n): string {\n const message =\n 'message' in failure && failure.message !== undefined ? `: ${failure.message}` : '';\n return `${failure.fate} (${failure.cause})${message}`;\n}\n\n/**\n * Whether a `retryFailed` / `discardFailed` throw is the covered drop race:\n * statewire drops a failed entry on its own as soon as a canonical update\n * shows the message landed, and acting on a just-dropped entry throws. Both\n * the session record (\"unknown failed command\") and the adapter's projection\n * (\"unknown failed entry\") use this prefix. Nothing is lost in that race — the\n * message already made it and the row is about to disappear — so a tray\n * swallows it (keeping telemetry) instead of crashing the click handler.\n */\nexport function isFailedSendEntryRace(error: unknown): boolean {\n return error instanceof Error && error.message.startsWith('statewire: unknown failed');\n}\n"],"names":[],"mappings":";AAsBO,SAAS,eACd,OACQ;AACR,SAAO,MACJ;AAAA,IAAQ,CAAC,SACR,KAAK,SAAS,UAAU,OAAO,KAAK,SAAS,WAAW,CAAC,KAAK,IAAI,IAAI,CAAA;AAAA,EAAC,EAExE,KAAK,MAAM;AAChB;AASO,SAAS,sBAAsB,OAAgD;AACpF,SAAO,MAAM,SAAS;AACxB;AAWO,SAAS,wBAAwB,KAAiC;AACvE,SAAO,MAAM,QAAQ,GAAG,IACpB,IAAI,OAAO,CAAC,OAAqB,OAAO,OAAO,QAAQ,IACvD,CAAA;AACN;AASO,SAAS,eAAe,QAA+C;AAC5E,SAAO;AAAA,IACL,WAAW,WAAW;AAAA,IACtB,eAAe,WAAW,aAAa,WAAW;AAAA,EAAA;AAEtD;AAYO,SAAS,wBAAwB,SAIhB;AACtB,QAAM,EAAE,OAAO,YAAY,cAAA,IAAkB;AAC7C,SAAO;AAAA,IACL,GAAI,gBACA,WAAW,IAAI,CAAC,UAAU,EAAE,MAAM,MAAM,UAAmB,IAC3D,CAAA;AAAA,IACJ,GAAG,MAAM,IAAI,CAAC,UAAU,EAAE,MAAM,MAAM,UAAmB;AAAA,EAAA;AAE7D;AAOO,SAAS,oBAAoB,SAKxB;AACV,QAAM,EAAE,MAAM,OAAO,WAAW,kBAAkB;AAClD,SAAO,SAAS,YAAY,iBAAkB,aAAa,UAAU;AACvE;AAcO,SAAS,sBAAsB,SAKV;AAC1B,QAAM,EAAE,MAAM,MAAM,OAAO,SAAS;AACpC,MAAI,CAAC,KAAK,KAAA,KAAU,SAAS,eAAe,KAAK,KAAK,KAAK,UAAU,MAAM;AACzE,WAAO;AAAA,EACT;AACA,QAAM,UAAuC;AAAA,IAC3C,IAAI,KAAK;AAAA,IACT,MAAM;AAAA,IACN,OAAO,CAAC,EAAE,MAAM,QAAQ,QAAQ,GAAG,KAAK,MAAM,OAAO,CAAC,SAAS,KAAK,SAAS,MAAM,CAAC;AAAA,IACpF,GAAI,KAAK,aAAa,SAAY,CAAA,IAAK,EAAE,UAAU,KAAK,SAAA;AAAA,EAAS;AAEnE,SAAO,SAAS,UACZ,EAAE,MAAM,aAAa,OAAO,QAAA,IAC5B,EAAE,MAAM,eAAe,OAAO,QAAA;AACpC;AAQO,MAAM,+BAA+B;AAGrC,SAAS,gCAAgC,SAGpC;AACV,SACE,QAAQ,WAAW,+BAA+B,CAAC,yBAAyB,QAAQ,MAAM;AAE9F;AAGO,SAAS,yBACd,SACQ;AACR,QAAM,UACJ,aAAa,WAAW,QAAQ,YAAY,SAAY,KAAK,QAAQ,OAAO,KAAK;AACnF,SAAO,GAAG,QAAQ,IAAI,KAAK,QAAQ,KAAK,IAAI,OAAO;AACrD;AAWO,SAAS,sBAAsB,OAAyB;AAC7D,SAAO,iBAAiB,SAAS,MAAM,QAAQ,WAAW,2BAA2B;AACvF;"}
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
|
|
3
|
+
const localStorage = require("@assistant-ui/react-statewire/local-storage");
|
|
4
|
+
const SESSION_PREFIX = "aui:statewire-session:";
|
|
5
|
+
const LEGACY_PROTOCOL = { name: "athena", version: "2026-09-07" };
|
|
6
|
+
const browserGlobals = globalThis;
|
|
7
|
+
function readPersistedFailedSendStamps(sessionKey) {
|
|
8
|
+
const storage = browserGlobals.localStorage;
|
|
9
|
+
if (!storage) return null;
|
|
10
|
+
let record;
|
|
11
|
+
try {
|
|
12
|
+
const raw = storage.getItem(SESSION_PREFIX + sessionKey);
|
|
13
|
+
record = raw === null ? null : JSON.parse(raw);
|
|
14
|
+
} catch {
|
|
15
|
+
return null;
|
|
16
|
+
}
|
|
17
|
+
return readFailedSendStampsFromRecord(record);
|
|
18
|
+
}
|
|
19
|
+
function readFailedSendStampsFromRecord(record) {
|
|
20
|
+
var _a, _b, _c;
|
|
21
|
+
if (!record || typeof record !== "object") return null;
|
|
22
|
+
const stamps = /* @__PURE__ */ new Map();
|
|
23
|
+
if (!Array.isArray(record.failed)) return stamps;
|
|
24
|
+
for (const entry of record.failed) {
|
|
25
|
+
const failed = entry;
|
|
26
|
+
const messageId = (_c = (_b = (_a = failed == null ? void 0 : failed.params) == null ? void 0 : _a[0]) == null ? void 0 : _b.message) == null ? void 0 : _c.id;
|
|
27
|
+
if (typeof messageId === "string" && typeof (failed == null ? void 0 : failed.ts) === "number") {
|
|
28
|
+
stamps.set(messageId, failed.ts);
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
return stamps;
|
|
32
|
+
}
|
|
33
|
+
const QuotaSafeLocalStorageSession = ({
|
|
34
|
+
threadId,
|
|
35
|
+
key,
|
|
36
|
+
ttl = 7 * 24 * 60 * 60 * 1e3,
|
|
37
|
+
max = 50
|
|
38
|
+
}) => localStorage.LocalStorageSession({
|
|
39
|
+
threadId,
|
|
40
|
+
...key === void 0 ? {} : { key },
|
|
41
|
+
legacyProtocol: LEGACY_PROTOCOL,
|
|
42
|
+
retention: { maxAgeMs: ttl, maxEntries: max }
|
|
43
|
+
});
|
|
44
|
+
exports.QuotaSafeLocalStorageSession = QuotaSafeLocalStorageSession;
|
|
45
|
+
exports.readFailedSendStampsFromRecord = readFailedSendStampsFromRecord;
|
|
46
|
+
exports.readPersistedFailedSendStamps = readPersistedFailedSendStamps;
|
|
47
|
+
//# sourceMappingURL=quota-safe-local-storage-session.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"quota-safe-local-storage-session.cjs","sources":["../../../../../agent-runtime/src/quota-safe-local-storage-session.ts"],"sourcesContent":["import { LocalStorageSession } from \"@assistant-ui/react-statewire/local-storage\";\n\nconst SESSION_PREFIX = \"aui:statewire-session:\";\nconst LEGACY_PROTOCOL = { name: \"athena\", version: \"2026-09-07\" };\nconst browserGlobals = globalThis as {\n localStorage?: { getItem(key: string): string | null };\n};\n\nexport function readPersistedFailedSendStamps(\n sessionKey: string,\n): ReadonlyMap<string, number> | null {\n const storage = browserGlobals.localStorage;\n if (!storage) return null;\n let record: { failed?: unknown } | null;\n try {\n const raw = storage.getItem(SESSION_PREFIX + sessionKey);\n record =\n raw === null ? null : (JSON.parse(raw) as { failed?: unknown } | null);\n } catch {\n return null;\n }\n return readFailedSendStampsFromRecord(record);\n}\n\n/**\n * Send stamps (message id → epoch ms of the original send) off an already\n * loaded session record's failed lane — the storage-agnostic half of\n * {@link readPersistedFailedSendStamps}, for hosts whose session store is not\n * localStorage (the React Native AsyncStorage-backed store reads its record\n * synchronously through `SessionStorage.load()`).\n *\n * Returns `null` for no record (every failed entry then counts as fresh) and\n * an empty map for a record without failures.\n */\nexport function readFailedSendStampsFromRecord(\n record: { failed?: unknown } | null | undefined,\n): ReadonlyMap<string, number> | null {\n if (!record || typeof record !== \"object\") return null;\n const stamps = new Map<string, number>();\n if (!Array.isArray(record.failed)) return stamps;\n for (const entry of record.failed) {\n const failed = entry as {\n ts?: unknown;\n params?: readonly { message?: { id?: unknown } }[];\n } | null;\n const messageId = failed?.params?.[0]?.message?.id;\n if (typeof messageId === \"string\" && typeof failed?.ts === \"number\") {\n stamps.set(messageId, failed.ts);\n }\n }\n return stamps;\n}\n\n/** Athena's browser session keys and retention policy. */\nexport const QuotaSafeLocalStorageSession = ({\n threadId,\n key,\n ttl = 7 * 24 * 60 * 60 * 1000,\n max = 50,\n}: QuotaSafeLocalStorageSession.Options) =>\n LocalStorageSession({\n threadId,\n ...(key === undefined ? {} : { key }),\n legacyProtocol: LEGACY_PROTOCOL,\n retention: { maxAgeMs: ttl, maxEntries: max },\n });\n\nexport namespace QuotaSafeLocalStorageSession {\n export type Options = {\n threadId: string;\n key?: (threadId: string) => string;\n ttl?: number;\n max?: number;\n };\n}\n"],"names":["LocalStorageSession"],"mappings":";;;AAEA,MAAM,iBAAiB;AACvB,MAAM,kBAAkB,EAAE,MAAM,UAAU,SAAS,aAAA;AACnD,MAAM,iBAAiB;AAIhB,SAAS,8BACd,YACoC;AACpC,QAAM,UAAU,eAAe;AAC/B,MAAI,CAAC,QAAS,QAAO;AACrB,MAAI;AACJ,MAAI;AACF,UAAM,MAAM,QAAQ,QAAQ,iBAAiB,UAAU;AACvD,aACE,QAAQ,OAAO,OAAQ,KAAK,MAAM,GAAG;AAAA,EACzC,QAAQ;AACN,WAAO;AAAA,EACT;AACA,SAAO,+BAA+B,MAAM;AAC9C;AAYO,SAAS,+BACd,QACoC;;AACpC,MAAI,CAAC,UAAU,OAAO,WAAW,SAAU,QAAO;AAClD,QAAM,6BAAa,IAAA;AACnB,MAAI,CAAC,MAAM,QAAQ,OAAO,MAAM,EAAG,QAAO;AAC1C,aAAW,SAAS,OAAO,QAAQ;AACjC,UAAM,SAAS;AAIf,UAAM,aAAY,kDAAQ,WAAR,mBAAiB,OAAjB,mBAAqB,YAArB,mBAA8B;AAChD,QAAI,OAAO,cAAc,YAAY,QAAO,iCAAQ,QAAO,UAAU;AACnE,aAAO,IAAI,WAAW,OAAO,EAAE;AAAA,IACjC;AAAA,EACF;AACA,SAAO;AACT;AAGO,MAAM,+BAA+B,CAAC;AAAA,EAC3C;AAAA,EACA;AAAA,EACA,MAAM,IAAI,KAAK,KAAK,KAAK;AAAA,EACzB,MAAM;AACR,MACEA,iCAAoB;AAAA,EAClB;AAAA,EACA,GAAI,QAAQ,SAAY,CAAA,IAAK,EAAE,IAAA;AAAA,EAC/B,gBAAgB;AAAA,EAChB,WAAW,EAAE,UAAU,KAAK,YAAY,IAAA;AAC1C,CAAC;;;;"}
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
import { LocalStorageSession } from "@assistant-ui/react-statewire/local-storage";
|
|
2
|
+
const SESSION_PREFIX = "aui:statewire-session:";
|
|
3
|
+
const LEGACY_PROTOCOL = { name: "athena", version: "2026-09-07" };
|
|
4
|
+
const browserGlobals = globalThis;
|
|
5
|
+
function readPersistedFailedSendStamps(sessionKey) {
|
|
6
|
+
const storage = browserGlobals.localStorage;
|
|
7
|
+
if (!storage) return null;
|
|
8
|
+
let record;
|
|
9
|
+
try {
|
|
10
|
+
const raw = storage.getItem(SESSION_PREFIX + sessionKey);
|
|
11
|
+
record = raw === null ? null : JSON.parse(raw);
|
|
12
|
+
} catch {
|
|
13
|
+
return null;
|
|
14
|
+
}
|
|
15
|
+
return readFailedSendStampsFromRecord(record);
|
|
16
|
+
}
|
|
17
|
+
function readFailedSendStampsFromRecord(record) {
|
|
18
|
+
var _a, _b, _c;
|
|
19
|
+
if (!record || typeof record !== "object") return null;
|
|
20
|
+
const stamps = /* @__PURE__ */ new Map();
|
|
21
|
+
if (!Array.isArray(record.failed)) return stamps;
|
|
22
|
+
for (const entry of record.failed) {
|
|
23
|
+
const failed = entry;
|
|
24
|
+
const messageId = (_c = (_b = (_a = failed == null ? void 0 : failed.params) == null ? void 0 : _a[0]) == null ? void 0 : _b.message) == null ? void 0 : _c.id;
|
|
25
|
+
if (typeof messageId === "string" && typeof (failed == null ? void 0 : failed.ts) === "number") {
|
|
26
|
+
stamps.set(messageId, failed.ts);
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
return stamps;
|
|
30
|
+
}
|
|
31
|
+
const QuotaSafeLocalStorageSession = ({
|
|
32
|
+
threadId,
|
|
33
|
+
key,
|
|
34
|
+
ttl = 7 * 24 * 60 * 60 * 1e3,
|
|
35
|
+
max = 50
|
|
36
|
+
}) => LocalStorageSession({
|
|
37
|
+
threadId,
|
|
38
|
+
...key === void 0 ? {} : { key },
|
|
39
|
+
legacyProtocol: LEGACY_PROTOCOL,
|
|
40
|
+
retention: { maxAgeMs: ttl, maxEntries: max }
|
|
41
|
+
});
|
|
42
|
+
export {
|
|
43
|
+
QuotaSafeLocalStorageSession,
|
|
44
|
+
readFailedSendStampsFromRecord,
|
|
45
|
+
readPersistedFailedSendStamps
|
|
46
|
+
};
|
|
47
|
+
//# sourceMappingURL=quota-safe-local-storage-session.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"quota-safe-local-storage-session.js","sources":["../../../../../agent-runtime/src/quota-safe-local-storage-session.ts"],"sourcesContent":["import { LocalStorageSession } from \"@assistant-ui/react-statewire/local-storage\";\n\nconst SESSION_PREFIX = \"aui:statewire-session:\";\nconst LEGACY_PROTOCOL = { name: \"athena\", version: \"2026-09-07\" };\nconst browserGlobals = globalThis as {\n localStorage?: { getItem(key: string): string | null };\n};\n\nexport function readPersistedFailedSendStamps(\n sessionKey: string,\n): ReadonlyMap<string, number> | null {\n const storage = browserGlobals.localStorage;\n if (!storage) return null;\n let record: { failed?: unknown } | null;\n try {\n const raw = storage.getItem(SESSION_PREFIX + sessionKey);\n record =\n raw === null ? null : (JSON.parse(raw) as { failed?: unknown } | null);\n } catch {\n return null;\n }\n return readFailedSendStampsFromRecord(record);\n}\n\n/**\n * Send stamps (message id → epoch ms of the original send) off an already\n * loaded session record's failed lane — the storage-agnostic half of\n * {@link readPersistedFailedSendStamps}, for hosts whose session store is not\n * localStorage (the React Native AsyncStorage-backed store reads its record\n * synchronously through `SessionStorage.load()`).\n *\n * Returns `null` for no record (every failed entry then counts as fresh) and\n * an empty map for a record without failures.\n */\nexport function readFailedSendStampsFromRecord(\n record: { failed?: unknown } | null | undefined,\n): ReadonlyMap<string, number> | null {\n if (!record || typeof record !== \"object\") return null;\n const stamps = new Map<string, number>();\n if (!Array.isArray(record.failed)) return stamps;\n for (const entry of record.failed) {\n const failed = entry as {\n ts?: unknown;\n params?: readonly { message?: { id?: unknown } }[];\n } | null;\n const messageId = failed?.params?.[0]?.message?.id;\n if (typeof messageId === \"string\" && typeof failed?.ts === \"number\") {\n stamps.set(messageId, failed.ts);\n }\n }\n return stamps;\n}\n\n/** Athena's browser session keys and retention policy. */\nexport const QuotaSafeLocalStorageSession = ({\n threadId,\n key,\n ttl = 7 * 24 * 60 * 60 * 1000,\n max = 50,\n}: QuotaSafeLocalStorageSession.Options) =>\n LocalStorageSession({\n threadId,\n ...(key === undefined ? {} : { key }),\n legacyProtocol: LEGACY_PROTOCOL,\n retention: { maxAgeMs: ttl, maxEntries: max },\n });\n\nexport namespace QuotaSafeLocalStorageSession {\n export type Options = {\n threadId: string;\n key?: (threadId: string) => string;\n ttl?: number;\n max?: number;\n };\n}\n"],"names":[],"mappings":";AAEA,MAAM,iBAAiB;AACvB,MAAM,kBAAkB,EAAE,MAAM,UAAU,SAAS,aAAA;AACnD,MAAM,iBAAiB;AAIhB,SAAS,8BACd,YACoC;AACpC,QAAM,UAAU,eAAe;AAC/B,MAAI,CAAC,QAAS,QAAO;AACrB,MAAI;AACJ,MAAI;AACF,UAAM,MAAM,QAAQ,QAAQ,iBAAiB,UAAU;AACvD,aACE,QAAQ,OAAO,OAAQ,KAAK,MAAM,GAAG;AAAA,EACzC,QAAQ;AACN,WAAO;AAAA,EACT;AACA,SAAO,+BAA+B,MAAM;AAC9C;AAYO,SAAS,+BACd,QACoC;;AACpC,MAAI,CAAC,UAAU,OAAO,WAAW,SAAU,QAAO;AAClD,QAAM,6BAAa,IAAA;AACnB,MAAI,CAAC,MAAM,QAAQ,OAAO,MAAM,EAAG,QAAO;AAC1C,aAAW,SAAS,OAAO,QAAQ;AACjC,UAAM,SAAS;AAIf,UAAM,aAAY,kDAAQ,WAAR,mBAAiB,OAAjB,mBAAqB,YAArB,mBAA8B;AAChD,QAAI,OAAO,cAAc,YAAY,QAAO,iCAAQ,QAAO,UAAU;AACnE,aAAO,IAAI,WAAW,OAAO,EAAE;AAAA,IACjC;AAAA,EACF;AACA,SAAO;AACT;AAGO,MAAM,+BAA+B,CAAC;AAAA,EAC3C;AAAA,EACA;AAAA,EACA,MAAM,IAAI,KAAK,KAAK,KAAK;AAAA,EACzB,MAAM;AACR,MACE,oBAAoB;AAAA,EAClB;AAAA,EACA,GAAI,QAAQ,SAAY,CAAA,IAAK,EAAE,IAAA;AAAA,EAC/B,gBAAgB;AAAA,EAChB,WAAW,EAAE,UAAU,KAAK,YAAY,IAAA;AAC1C,CAAC;"}
|
|
@@ -0,0 +1,187 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
|
|
3
|
+
const core = require("@assistant-ui/core");
|
|
4
|
+
const messages = require("./messages.cjs");
|
|
5
|
+
const MAX_STEPS_HINT = "Raise “Max steps” in the agent settings for longer runs.";
|
|
6
|
+
function describeTerminationReason(kind, reason) {
|
|
7
|
+
switch (kind) {
|
|
8
|
+
case "paused":
|
|
9
|
+
return {
|
|
10
|
+
title: "Paused by a server update",
|
|
11
|
+
detail: "Progress up to this point is saved — send a message to continue."
|
|
12
|
+
};
|
|
13
|
+
case "stopped":
|
|
14
|
+
switch (reason) {
|
|
15
|
+
case "voice_steer":
|
|
16
|
+
return {
|
|
17
|
+
title: "Redirected by a spoken follow-up",
|
|
18
|
+
detail: "The voice conversation changed the request; the work continues with the new instructions."
|
|
19
|
+
};
|
|
20
|
+
case "transport_cancel":
|
|
21
|
+
return {
|
|
22
|
+
title: "Run cancelled",
|
|
23
|
+
detail: "Cancelled by a page reload, navigation, or closed view — not an explicit Stop. Send a follow-up to continue."
|
|
24
|
+
};
|
|
25
|
+
case "fence_lost":
|
|
26
|
+
return {
|
|
27
|
+
title: "Run superseded",
|
|
28
|
+
detail: "Another activation took over this thread."
|
|
29
|
+
};
|
|
30
|
+
case "instance_closed":
|
|
31
|
+
return {
|
|
32
|
+
title: "Run stopped",
|
|
33
|
+
detail: "The client that started it went away."
|
|
34
|
+
};
|
|
35
|
+
default:
|
|
36
|
+
return { title: "Conversation stopped", detail: void 0 };
|
|
37
|
+
}
|
|
38
|
+
case "failed":
|
|
39
|
+
switch (reason) {
|
|
40
|
+
case "recursion_limit":
|
|
41
|
+
return {
|
|
42
|
+
title: "Step limit reached",
|
|
43
|
+
detail: `The run was stopped before finishing; the work so far is saved. ${MAX_STEPS_HINT}`
|
|
44
|
+
};
|
|
45
|
+
case "abandoned":
|
|
46
|
+
return {
|
|
47
|
+
title: "Run stopped unexpectedly",
|
|
48
|
+
detail: "The server handling it went away mid-run (a crash, restart, or deploy). The work so far is saved."
|
|
49
|
+
};
|
|
50
|
+
default:
|
|
51
|
+
return { title: "Run failed", detail: void 0 };
|
|
52
|
+
}
|
|
53
|
+
case "handoff":
|
|
54
|
+
switch (reason) {
|
|
55
|
+
case "duplicate_call_guard":
|
|
56
|
+
return {
|
|
57
|
+
title: "Run ended by the runtime",
|
|
58
|
+
detail: "The same tool calls were repeating with identical arguments and no new progress, so the agent was asked to wrap up."
|
|
59
|
+
};
|
|
60
|
+
case "step_budget":
|
|
61
|
+
return {
|
|
62
|
+
title: "Run ended by the runtime",
|
|
63
|
+
detail: `The step budget ran out, so the agent was asked to wrap up. ${MAX_STEPS_HINT}`
|
|
64
|
+
};
|
|
65
|
+
default:
|
|
66
|
+
return {
|
|
67
|
+
title: "Run ended by the runtime",
|
|
68
|
+
detail: "The agent was asked to wrap up."
|
|
69
|
+
};
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
const SEVERITY = {
|
|
74
|
+
stopped: "info",
|
|
75
|
+
paused: "info",
|
|
76
|
+
failed: "error",
|
|
77
|
+
handoff: "warning"
|
|
78
|
+
};
|
|
79
|
+
function metadataOf(kwargs) {
|
|
80
|
+
const metadata = kwargs == null ? void 0 : kwargs.metadata;
|
|
81
|
+
return typeof metadata === "object" && metadata !== null ? metadata : void 0;
|
|
82
|
+
}
|
|
83
|
+
function readTerminationReason(kwargs) {
|
|
84
|
+
var _a;
|
|
85
|
+
const top = kwargs == null ? void 0 : kwargs[messages.ATHENA_TERMINATION_REASON_KEY];
|
|
86
|
+
if (typeof top === "string") return top;
|
|
87
|
+
const mirrored = (_a = metadataOf(kwargs)) == null ? void 0 : _a[messages.ATHENA_TERMINATION_REASON_KEY];
|
|
88
|
+
return typeof mirrored === "string" ? mirrored : void 0;
|
|
89
|
+
}
|
|
90
|
+
function readHandoff(kwargs) {
|
|
91
|
+
var _a;
|
|
92
|
+
return (kwargs == null ? void 0 : kwargs[messages.ATHENA_HANDOFF_KEY]) === true || ((_a = metadataOf(kwargs)) == null ? void 0 : _a[messages.ATHENA_HANDOFF_KEY]) === true;
|
|
93
|
+
}
|
|
94
|
+
function textOf(content) {
|
|
95
|
+
if (typeof content === "string") return content;
|
|
96
|
+
if (!Array.isArray(content)) return void 0;
|
|
97
|
+
const texts = content.map(
|
|
98
|
+
(block) => typeof block === "string" ? block : block && typeof block === "object" && block.type === "text" ? block.text : void 0
|
|
99
|
+
).filter((text) => typeof text === "string" && text.length > 0);
|
|
100
|
+
return texts.length > 0 ? texts.join("\n") : void 0;
|
|
101
|
+
}
|
|
102
|
+
function fromMarker(marker, source, reason) {
|
|
103
|
+
if (marker === messages.ATHENA_RUN_MARKER_CANCELLED) {
|
|
104
|
+
const kind = messages.isServerUpdateStopSource(source) ? "paused" : "stopped";
|
|
105
|
+
return {
|
|
106
|
+
kind,
|
|
107
|
+
reason: reason ?? (source === "unattributed" ? "unattributed_stop" : source),
|
|
108
|
+
silent: source === messages.ATHENA_STOP_SOURCE_SEND_NOW
|
|
109
|
+
};
|
|
110
|
+
}
|
|
111
|
+
if (marker === messages.ATHENA_RUN_MARKER_FAILED) {
|
|
112
|
+
return { kind: "failed", reason: reason ?? "error", silent: false };
|
|
113
|
+
}
|
|
114
|
+
return void 0;
|
|
115
|
+
}
|
|
116
|
+
function build(partial, text, isSoleSourceMessage) {
|
|
117
|
+
const description = describeTerminationReason(partial.kind, partial.reason);
|
|
118
|
+
return {
|
|
119
|
+
kind: partial.kind,
|
|
120
|
+
reason: partial.reason,
|
|
121
|
+
severity: SEVERITY[partial.kind],
|
|
122
|
+
title: description.title,
|
|
123
|
+
detail: description.detail,
|
|
124
|
+
text,
|
|
125
|
+
silent: partial.silent,
|
|
126
|
+
isSoleSourceMessage
|
|
127
|
+
};
|
|
128
|
+
}
|
|
129
|
+
function readRuntimeMessageFromSourceMessages(message) {
|
|
130
|
+
var _a;
|
|
131
|
+
const sources = core.getExternalStoreMessages(message);
|
|
132
|
+
for (const source of sources) {
|
|
133
|
+
if ((source == null ? void 0 : source.type) !== "ai") continue;
|
|
134
|
+
const kwargs = source.additional_kwargs;
|
|
135
|
+
const marker = kwargs == null ? void 0 : kwargs[messages.ATHENA_RUN_MARKER_KEY];
|
|
136
|
+
const reason = readTerminationReason(kwargs);
|
|
137
|
+
const text = textOf(source.content);
|
|
138
|
+
if (typeof marker === "string") {
|
|
139
|
+
const markerSource = kwargs == null ? void 0 : kwargs[messages.ATHENA_RUN_MARKER_SOURCE_KEY];
|
|
140
|
+
const partial = fromMarker(
|
|
141
|
+
marker,
|
|
142
|
+
typeof markerSource === "string" ? markerSource : void 0,
|
|
143
|
+
reason
|
|
144
|
+
);
|
|
145
|
+
if (partial) return build(partial, text, sources.length === 1);
|
|
146
|
+
}
|
|
147
|
+
if (readHandoff(kwargs)) {
|
|
148
|
+
return build({ kind: "handoff", reason, silent: false }, text, sources.length === 1);
|
|
149
|
+
}
|
|
150
|
+
}
|
|
151
|
+
const custom = (_a = message.metadata) == null ? void 0 : _a.custom;
|
|
152
|
+
if (!custom) return void 0;
|
|
153
|
+
const parts = message.content;
|
|
154
|
+
const sole = Array.isArray(parts) ? parts.length <= 1 : true;
|
|
155
|
+
const joinedMarker = custom[messages.ATHENA_RUN_MARKER_KEY];
|
|
156
|
+
const joinedReason = readTerminationReason({ metadata: custom });
|
|
157
|
+
if (typeof joinedMarker === "string") {
|
|
158
|
+
const joinedSource = custom[messages.ATHENA_RUN_MARKER_SOURCE_KEY];
|
|
159
|
+
const partial = fromMarker(
|
|
160
|
+
joinedMarker,
|
|
161
|
+
typeof joinedSource === "string" ? joinedSource : void 0,
|
|
162
|
+
joinedReason
|
|
163
|
+
);
|
|
164
|
+
if (partial) return build(partial, void 0, sole);
|
|
165
|
+
}
|
|
166
|
+
if (custom[messages.ATHENA_HANDOFF_KEY] === true) {
|
|
167
|
+
return build({ kind: "handoff", reason: joinedReason, silent: false }, void 0, sole);
|
|
168
|
+
}
|
|
169
|
+
return void 0;
|
|
170
|
+
}
|
|
171
|
+
function runtimeMessageMarkerText(message) {
|
|
172
|
+
var _a;
|
|
173
|
+
if (message.kind !== "failed" || message.detail) return void 0;
|
|
174
|
+
const text = (_a = message.text) == null ? void 0 : _a.replace(/^(?:⏹️|⏸️|⚠️|\s)+/u, "").trim();
|
|
175
|
+
if (!text || text === message.title) return void 0;
|
|
176
|
+
return text;
|
|
177
|
+
}
|
|
178
|
+
function readSoleRuntimeMessageKind(message) {
|
|
179
|
+
const found = readRuntimeMessageFromSourceMessages(message);
|
|
180
|
+
return (found == null ? void 0 : found.isSoleSourceMessage) ? found.kind : void 0;
|
|
181
|
+
}
|
|
182
|
+
exports.describeTerminationReason = describeTerminationReason;
|
|
183
|
+
exports.readRuntimeMessageFromSourceMessages = readRuntimeMessageFromSourceMessages;
|
|
184
|
+
exports.readSoleRuntimeMessageKind = readSoleRuntimeMessageKind;
|
|
185
|
+
exports.readTerminationReason = readTerminationReason;
|
|
186
|
+
exports.runtimeMessageMarkerText = runtimeMessageMarkerText;
|
|
187
|
+
//# sourceMappingURL=runtime-messages.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"runtime-messages.cjs","sources":["../../../../../agent-runtime/src/runtime-messages.ts"],"sourcesContent":["/**\n * Typed runtime messages — the one description of \"the runtime ended this run\"\n * that every chat surface renders from.\n *\n * The deep-agent backend records how a run ended in two shapes that ride\n * ordinary `ai` messages (a new LangChain message type would crash the shipped\n * converter, whose convertible set is closed):\n *\n * - a **run-lifecycle marker** (`athena_run_marker`: `cancelled` / `failed`,\n * plus `athena_run_marker_source`) — see {@link readRunMarkerFromSourceMessages};\n * - a **handoff message** (`athena_handoff: true`) — the closing summary the\n * runtime asked the model to write when a guard or the step budget ended the\n * run, instead of fabricating an internal sentence.\n *\n * Both now carry the canonical `athena_termination_reason`\n * (`agora/graphs/athena_deep_agent/termination.py`). This module reads all of\n * that into one {@link AthenaRuntimeMessage} so Olympus, mobile, the Chrome\n * extension, and the Office add-in agree on kind, severity, copy, and the\n * sole-vs-grouped distinction — the last of which is load-bearing: a marker\n * appended after the assistant's own work is chunked into that message, and\n * replacing the whole row would hide completed prose and tool cards.\n */\n\nimport { getExternalStoreMessages } from '@assistant-ui/core';\nimport type { LangChainMessage } from '@assistant-ui/react-langgraph';\nimport {\n ATHENA_HANDOFF_KEY,\n ATHENA_RUN_MARKER_CANCELLED,\n ATHENA_RUN_MARKER_FAILED,\n ATHENA_RUN_MARKER_KEY,\n ATHENA_RUN_MARKER_SOURCE_KEY,\n ATHENA_STOP_SOURCE_SEND_NOW,\n ATHENA_TERMINATION_REASON_KEY,\n isServerUpdateStopSource,\n} from './messages';\n\n/** The backend's canonical reason vocabulary (`KNOWN_TERMINATION_REASONS`). */\nexport const TERMINATION_REASONS = [\n 'completed',\n 'user_stop',\n 'send_now',\n 'voice_steer',\n 'transport_cancel',\n 'pod_drain',\n 'fence_lost',\n 'instance_closed',\n 'unattributed_stop',\n 'recursion_limit',\n 'step_budget',\n 'duplicate_call_guard',\n 'synthetic_stop',\n 'ended_after_tools',\n 'error',\n 'model_refusal',\n 'abandoned',\n] as const;\n\nexport type AthenaTerminationReason = (typeof TERMINATION_REASONS)[number];\n\n/**\n * How a runtime ending renders:\n * - `stopped` — a cancellation the user (or a client action) asked for;\n * - `paused` — a pod-drain pause; the run resumes from its checkpoint;\n * - `failed` — the graph raised, hit the recursion limit, or was abandoned;\n * - `handoff` — the runtime ended the run and the model wrote a closing\n * summary (the message text), which renders as prose under a banner.\n */\nexport type AthenaRuntimeMessageKind = 'stopped' | 'paused' | 'failed' | 'handoff';\n\nexport type AthenaRuntimeMessageSeverity = 'info' | 'warning' | 'error';\n\nexport interface TerminationDescription {\n /** Short label for the banner / status row. */\n title: string;\n /** One sentence of reason-specific explanation, when it adds information. */\n detail: string | undefined;\n}\n\nexport interface AthenaRuntimeMessage {\n kind: AthenaRuntimeMessageKind;\n /** Canonical reason (may be a value newer than this client knows). */\n reason: string | undefined;\n severity: AthenaRuntimeMessageSeverity;\n title: string;\n detail: string | undefined;\n /** The message's own text: a marker's backend copy, or the handoff summary. */\n text: string | undefined;\n /**\n * A `send_now` promotion cancels the live run as plumbing, not as a\n * user-visible stop: keep it in the data, paint nothing.\n */\n silent: boolean;\n /**\n * True when the runtime message is the ONLY source message behind this\n * thread message (it owns the whole row). False when the chunk also holds\n * the assistant's own work, which must keep rendering.\n */\n isSoleSourceMessage: boolean;\n}\n\nconst MAX_STEPS_HINT = 'Raise “Max steps” in the agent settings for longer runs.';\n\n/**\n * Copy for a runtime ending. Reasons this client does not know fall back to\n * the kind's generic title, so a newer backend never renders as an empty row.\n */\nexport function describeTerminationReason(\n kind: AthenaRuntimeMessageKind,\n reason: string | undefined\n): TerminationDescription {\n switch (kind) {\n case 'paused':\n return {\n title: 'Paused by a server update',\n detail: 'Progress up to this point is saved — send a message to continue.',\n };\n case 'stopped':\n switch (reason) {\n case 'voice_steer':\n return {\n title: 'Redirected by a spoken follow-up',\n detail:\n 'The voice conversation changed the request; the work continues with the new instructions.',\n };\n case 'transport_cancel':\n return {\n title: 'Run cancelled',\n detail:\n 'Cancelled by a page reload, navigation, or closed view — not an explicit Stop. Send a follow-up to continue.',\n };\n case 'fence_lost':\n return {\n title: 'Run superseded',\n detail: 'Another activation took over this thread.',\n };\n case 'instance_closed':\n return {\n title: 'Run stopped',\n detail: 'The client that started it went away.',\n };\n default:\n return { title: 'Conversation stopped', detail: undefined };\n }\n case 'failed':\n switch (reason) {\n case 'recursion_limit':\n return {\n title: 'Step limit reached',\n detail: `The run was stopped before finishing; the work so far is saved. ${MAX_STEPS_HINT}`,\n };\n case 'abandoned':\n return {\n title: 'Run stopped unexpectedly',\n detail:\n 'The server handling it went away mid-run (a crash, restart, or deploy). The work so far is saved.',\n };\n default:\n return { title: 'Run failed', detail: undefined };\n }\n case 'handoff':\n switch (reason) {\n case 'duplicate_call_guard':\n return {\n title: 'Run ended by the runtime',\n detail:\n 'The same tool calls were repeating with identical arguments and no new progress, so the agent was asked to wrap up.',\n };\n case 'step_budget':\n return {\n title: 'Run ended by the runtime',\n detail: `The step budget ran out, so the agent was asked to wrap up. ${MAX_STEPS_HINT}`,\n };\n default:\n return {\n title: 'Run ended by the runtime',\n detail: 'The agent was asked to wrap up.',\n };\n }\n }\n}\n\nconst SEVERITY: Record<AthenaRuntimeMessageKind, AthenaRuntimeMessageSeverity> = {\n stopped: 'info',\n paused: 'info',\n failed: 'error',\n handoff: 'warning',\n};\n\ntype Kwargs = Record<string, unknown> | undefined;\n\nfunction metadataOf(kwargs: Kwargs): Record<string, unknown> | undefined {\n const metadata = kwargs?.metadata;\n return typeof metadata === 'object' && metadata !== null\n ? (metadata as Record<string, unknown>)\n : undefined;\n}\n\n/** The termination reason stamped on `additional_kwargs` (top-level or mirror). */\nexport function readTerminationReason(kwargs: Kwargs): string | undefined {\n const top = kwargs?.[ATHENA_TERMINATION_REASON_KEY];\n if (typeof top === 'string') return top;\n const mirrored = metadataOf(kwargs)?.[ATHENA_TERMINATION_REASON_KEY];\n return typeof mirrored === 'string' ? mirrored : undefined;\n}\n\nfunction readHandoff(kwargs: Kwargs): boolean {\n return kwargs?.[ATHENA_HANDOFF_KEY] === true || metadataOf(kwargs)?.[ATHENA_HANDOFF_KEY] === true;\n}\n\nfunction textOf(content: unknown): string | undefined {\n if (typeof content === 'string') return content;\n if (!Array.isArray(content)) return undefined;\n const texts = content\n .map((block) =>\n typeof block === 'string'\n ? block\n : block && typeof block === 'object' && (block as { type?: unknown }).type === 'text'\n ? (block as { text?: unknown }).text\n : undefined\n )\n .filter((text): text is string => typeof text === 'string' && text.length > 0);\n return texts.length > 0 ? texts.join('\\n') : undefined;\n}\n\nfunction fromMarker(\n marker: string,\n source: string | undefined,\n reason: string | undefined\n): Pick<AthenaRuntimeMessage, 'kind' | 'reason' | 'silent'> | undefined {\n if (marker === ATHENA_RUN_MARKER_CANCELLED) {\n const kind: AthenaRuntimeMessageKind = isServerUpdateStopSource(source) ? 'paused' : 'stopped';\n return {\n kind,\n reason: reason ?? (source === 'unattributed' ? 'unattributed_stop' : source),\n silent: source === ATHENA_STOP_SOURCE_SEND_NOW,\n };\n }\n if (marker === ATHENA_RUN_MARKER_FAILED) {\n return { kind: 'failed', reason: reason ?? 'error', silent: false };\n }\n return undefined;\n}\n\nfunction build(\n partial: Pick<AthenaRuntimeMessage, 'kind' | 'reason' | 'silent'>,\n text: string | undefined,\n isSoleSourceMessage: boolean\n): AthenaRuntimeMessage {\n const description = describeTerminationReason(partial.kind, partial.reason);\n return {\n kind: partial.kind,\n reason: partial.reason,\n severity: SEVERITY[partial.kind],\n title: description.title,\n detail: description.detail,\n text,\n silent: partial.silent,\n isSoleSourceMessage,\n };\n}\n\n/**\n * Read the runtime ending behind a thread message, from its bound source\n * messages first (a marker or handoff chunked after the assistant's own turn\n * is never the first source, so the joined `metadata.custom` would miss it —\n * see {@link readRunMarkerFromSourceMessages}), then from joined metadata for\n * surfaces without bound sources.\n */\nexport function readRuntimeMessageFromSourceMessages(\n message: Parameters<typeof getExternalStoreMessages>[0] & {\n metadata?: { custom?: Record<string, unknown> | undefined } | undefined;\n content?: unknown;\n }\n): AthenaRuntimeMessage | undefined {\n const sources = getExternalStoreMessages<LangChainMessage>(message);\n for (const source of sources) {\n if (source?.type !== 'ai') continue;\n const kwargs = source.additional_kwargs as Kwargs;\n const marker = kwargs?.[ATHENA_RUN_MARKER_KEY];\n const reason = readTerminationReason(kwargs);\n const text = textOf(source.content);\n if (typeof marker === 'string') {\n const markerSource = kwargs?.[ATHENA_RUN_MARKER_SOURCE_KEY];\n const partial = fromMarker(\n marker,\n typeof markerSource === 'string' ? markerSource : undefined,\n reason\n );\n if (partial) return build(partial, text, sources.length === 1);\n }\n if (readHandoff(kwargs)) {\n return build({ kind: 'handoff', reason, silent: false }, text, sources.length === 1);\n }\n }\n const custom = message.metadata?.custom;\n if (!custom) return undefined;\n const parts = message.content;\n const sole = Array.isArray(parts) ? parts.length <= 1 : true;\n const joinedMarker = custom[ATHENA_RUN_MARKER_KEY];\n const joinedReason = readTerminationReason({ metadata: custom });\n if (typeof joinedMarker === 'string') {\n const joinedSource = custom[ATHENA_RUN_MARKER_SOURCE_KEY];\n const partial = fromMarker(\n joinedMarker,\n typeof joinedSource === 'string' ? joinedSource : undefined,\n joinedReason\n );\n if (partial) return build(partial, undefined, sole);\n }\n if (custom[ATHENA_HANDOFF_KEY] === true) {\n return build({ kind: 'handoff', reason: joinedReason, silent: false }, undefined, sole);\n }\n return undefined;\n}\n\n/**\n * The backend marker copy worth showing under a runtime card, or `undefined`.\n *\n * A failure marker's text carries the specific error (\"The run failed:\n * provider returned 502\"), so it is shown when no reason-specific detail\n * exists. Stop/pause copy only restates the title, and a handoff's text is the\n * message body itself, so neither is repeated. Marker copy leads with an emoji\n * for raw-transcript readers; the card's icon plays that role, so it is\n * stripped. Shared by every presenter so mobile and DOM cannot drift.\n */\nexport function runtimeMessageMarkerText(message: AthenaRuntimeMessage): string | undefined {\n if (message.kind !== 'failed' || message.detail) return undefined;\n const text = message.text?.replace(/^(?:⏹️|⏸️|⚠️|\\s)+/u, '').trim();\n if (!text || text === message.title) return undefined;\n return text;\n}\n\n/**\n * The runtime message's kind when it owns the whole row, else `undefined`.\n *\n * Returns a primitive so it is safe as a `useAuiState` selector (the reader\n * above builds a fresh object per call; an object snapshot would loop the\n * render under `Object.is` comparison).\n */\nexport function readSoleRuntimeMessageKind(\n message: Parameters<typeof readRuntimeMessageFromSourceMessages>[0]\n): AthenaRuntimeMessageKind | undefined {\n const found = readRuntimeMessageFromSourceMessages(message);\n return found?.isSoleSourceMessage ? found.kind : undefined;\n}\n"],"names":["ATHENA_TERMINATION_REASON_KEY","ATHENA_HANDOFF_KEY","ATHENA_RUN_MARKER_CANCELLED","isServerUpdateStopSource","ATHENA_STOP_SOURCE_SEND_NOW","ATHENA_RUN_MARKER_FAILED","getExternalStoreMessages","ATHENA_RUN_MARKER_KEY","ATHENA_RUN_MARKER_SOURCE_KEY"],"mappings":";;;;AAoGA,MAAM,iBAAiB;AAMhB,SAAS,0BACd,MACA,QACwB;AACxB,UAAQ,MAAA;AAAA,IACN,KAAK;AACH,aAAO;AAAA,QACL,OAAO;AAAA,QACP,QAAQ;AAAA,MAAA;AAAA,IAEZ,KAAK;AACH,cAAQ,QAAA;AAAA,QACN,KAAK;AACH,iBAAO;AAAA,YACL,OAAO;AAAA,YACP,QACE;AAAA,UAAA;AAAA,QAEN,KAAK;AACH,iBAAO;AAAA,YACL,OAAO;AAAA,YACP,QACE;AAAA,UAAA;AAAA,QAEN,KAAK;AACH,iBAAO;AAAA,YACL,OAAO;AAAA,YACP,QAAQ;AAAA,UAAA;AAAA,QAEZ,KAAK;AACH,iBAAO;AAAA,YACL,OAAO;AAAA,YACP,QAAQ;AAAA,UAAA;AAAA,QAEZ;AACE,iBAAO,EAAE,OAAO,wBAAwB,QAAQ,OAAA;AAAA,MAAU;AAAA,IAEhE,KAAK;AACH,cAAQ,QAAA;AAAA,QACN,KAAK;AACH,iBAAO;AAAA,YACL,OAAO;AAAA,YACP,QAAQ,mEAAmE,cAAc;AAAA,UAAA;AAAA,QAE7F,KAAK;AACH,iBAAO;AAAA,YACL,OAAO;AAAA,YACP,QACE;AAAA,UAAA;AAAA,QAEN;AACE,iBAAO,EAAE,OAAO,cAAc,QAAQ,OAAA;AAAA,MAAU;AAAA,IAEtD,KAAK;AACH,cAAQ,QAAA;AAAA,QACN,KAAK;AACH,iBAAO;AAAA,YACL,OAAO;AAAA,YACP,QACE;AAAA,UAAA;AAAA,QAEN,KAAK;AACH,iBAAO;AAAA,YACL,OAAO;AAAA,YACP,QAAQ,+DAA+D,cAAc;AAAA,UAAA;AAAA,QAEzF;AACE,iBAAO;AAAA,YACL,OAAO;AAAA,YACP,QAAQ;AAAA,UAAA;AAAA,MACV;AAAA,EACJ;AAEN;AAEA,MAAM,WAA2E;AAAA,EAC/E,SAAS;AAAA,EACT,QAAQ;AAAA,EACR,QAAQ;AAAA,EACR,SAAS;AACX;AAIA,SAAS,WAAW,QAAqD;AACvE,QAAM,WAAW,iCAAQ;AACzB,SAAO,OAAO,aAAa,YAAY,aAAa,OAC/C,WACD;AACN;AAGO,SAAS,sBAAsB,QAAoC;;AACxE,QAAM,MAAM,iCAASA;AACrB,MAAI,OAAO,QAAQ,SAAU,QAAO;AACpC,QAAM,YAAW,gBAAW,MAAM,MAAjB,mBAAqBA,SAAAA;AACtC,SAAO,OAAO,aAAa,WAAW,WAAW;AACnD;AAEA,SAAS,YAAY,QAAyB;;AAC5C,UAAO,iCAASC,SAAAA,yBAAwB,UAAQ,gBAAW,MAAM,MAAjB,mBAAqBA,SAAAA,yBAAwB;AAC/F;AAEA,SAAS,OAAO,SAAsC;AACpD,MAAI,OAAO,YAAY,SAAU,QAAO;AACxC,MAAI,CAAC,MAAM,QAAQ,OAAO,EAAG,QAAO;AACpC,QAAM,QAAQ,QACX;AAAA,IAAI,CAAC,UACJ,OAAO,UAAU,WACb,QACA,SAAS,OAAO,UAAU,YAAa,MAA6B,SAAS,SAC1E,MAA6B,OAC9B;AAAA,EAAA,EAEP,OAAO,CAAC,SAAyB,OAAO,SAAS,YAAY,KAAK,SAAS,CAAC;AAC/E,SAAO,MAAM,SAAS,IAAI,MAAM,KAAK,IAAI,IAAI;AAC/C;AAEA,SAAS,WACP,QACA,QACA,QACsE;AACtE,MAAI,WAAWC,SAAAA,6BAA6B;AAC1C,UAAM,OAAiCC,SAAAA,yBAAyB,MAAM,IAAI,WAAW;AACrF,WAAO;AAAA,MACL;AAAA,MACA,QAAQ,WAAW,WAAW,iBAAiB,sBAAsB;AAAA,MACrE,QAAQ,WAAWC,SAAAA;AAAAA,IAAA;AAAA,EAEvB;AACA,MAAI,WAAWC,SAAAA,0BAA0B;AACvC,WAAO,EAAE,MAAM,UAAU,QAAQ,UAAU,SAAS,QAAQ,MAAA;AAAA,EAC9D;AACA,SAAO;AACT;AAEA,SAAS,MACP,SACA,MACA,qBACsB;AACtB,QAAM,cAAc,0BAA0B,QAAQ,MAAM,QAAQ,MAAM;AAC1E,SAAO;AAAA,IACL,MAAM,QAAQ;AAAA,IACd,QAAQ,QAAQ;AAAA,IAChB,UAAU,SAAS,QAAQ,IAAI;AAAA,IAC/B,OAAO,YAAY;AAAA,IACnB,QAAQ,YAAY;AAAA,IACpB;AAAA,IACA,QAAQ,QAAQ;AAAA,IAChB;AAAA,EAAA;AAEJ;AASO,SAAS,qCACd,SAIkC;;AAClC,QAAM,UAAUC,KAAAA,yBAA2C,OAAO;AAClE,aAAW,UAAU,SAAS;AAC5B,SAAI,iCAAQ,UAAS,KAAM;AAC3B,UAAM,SAAS,OAAO;AACtB,UAAM,SAAS,iCAASC;AACxB,UAAM,SAAS,sBAAsB,MAAM;AAC3C,UAAM,OAAO,OAAO,OAAO,OAAO;AAClC,QAAI,OAAO,WAAW,UAAU;AAC9B,YAAM,eAAe,iCAASC;AAC9B,YAAM,UAAU;AAAA,QACd;AAAA,QACA,OAAO,iBAAiB,WAAW,eAAe;AAAA,QAClD;AAAA,MAAA;AAEF,UAAI,QAAS,QAAO,MAAM,SAAS,MAAM,QAAQ,WAAW,CAAC;AAAA,IAC/D;AACA,QAAI,YAAY,MAAM,GAAG;AACvB,aAAO,MAAM,EAAE,MAAM,WAAW,QAAQ,QAAQ,MAAA,GAAS,MAAM,QAAQ,WAAW,CAAC;AAAA,IACrF;AAAA,EACF;AACA,QAAM,UAAS,aAAQ,aAAR,mBAAkB;AACjC,MAAI,CAAC,OAAQ,QAAO;AACpB,QAAM,QAAQ,QAAQ;AACtB,QAAM,OAAO,MAAM,QAAQ,KAAK,IAAI,MAAM,UAAU,IAAI;AACxD,QAAM,eAAe,OAAOD,8BAAqB;AACjD,QAAM,eAAe,sBAAsB,EAAE,UAAU,QAAQ;AAC/D,MAAI,OAAO,iBAAiB,UAAU;AACpC,UAAM,eAAe,OAAOC,qCAA4B;AACxD,UAAM,UAAU;AAAA,MACd;AAAA,MACA,OAAO,iBAAiB,WAAW,eAAe;AAAA,MAClD;AAAA,IAAA;AAEF,QAAI,QAAS,QAAO,MAAM,SAAS,QAAW,IAAI;AAAA,EACpD;AACA,MAAI,OAAOP,2BAAkB,MAAM,MAAM;AACvC,WAAO,MAAM,EAAE,MAAM,WAAW,QAAQ,cAAc,QAAQ,MAAA,GAAS,QAAW,IAAI;AAAA,EACxF;AACA,SAAO;AACT;AAYO,SAAS,yBAAyB,SAAmD;;AAC1F,MAAI,QAAQ,SAAS,YAAY,QAAQ,OAAQ,QAAO;AACxD,QAAM,QAAO,aAAQ,SAAR,mBAAc,QAAQ,sBAAsB,IAAI;AAC7D,MAAI,CAAC,QAAQ,SAAS,QAAQ,MAAO,QAAO;AAC5C,SAAO;AACT;AASO,SAAS,2BACd,SACsC;AACtC,QAAM,QAAQ,qCAAqC,OAAO;AAC1D,UAAO,+BAAO,uBAAsB,MAAM,OAAO;AACnD;;;;;;"}
|