@athenaintel/react 0.57.2 → 0.59.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 +759 -9
- package/dist/agent-runtime/src/addressed-agents.cjs +16 -0
- package/dist/agent-runtime/src/addressed-agents.cjs.map +1 -0
- package/dist/agent-runtime/src/addressed-agents.d.ts +30 -0
- package/dist/agent-runtime/src/addressed-agents.js +16 -0
- package/dist/agent-runtime/src/addressed-agents.js.map +1 -0
- package/dist/agent-runtime/src/answer-label.cjs +4 -3
- package/dist/agent-runtime/src/answer-label.cjs.map +1 -1
- package/dist/agent-runtime/src/answer-label.d.ts +13 -6
- package/dist/agent-runtime/src/answer-label.js +4 -3
- package/dist/agent-runtime/src/answer-label.js.map +1 -1
- package/dist/agent-runtime/src/chat-outbox-attachments.cjs.map +1 -1
- package/dist/agent-runtime/src/chat-outbox-attachments.d.ts +1 -1
- package/dist/agent-runtime/src/chat-outbox-attachments.js.map +1 -1
- package/dist/agent-runtime/src/chat-outbox-entry.cjs +101 -0
- package/dist/agent-runtime/src/chat-outbox-entry.cjs.map +1 -0
- package/dist/agent-runtime/src/chat-outbox-entry.d.ts +99 -0
- package/dist/agent-runtime/src/chat-outbox-entry.js +101 -0
- package/dist/agent-runtime/src/chat-outbox-entry.js.map +1 -0
- package/dist/agent-runtime/src/chat-outbox-legacy.cjs +252 -0
- package/dist/agent-runtime/src/chat-outbox-legacy.cjs.map +1 -0
- package/dist/agent-runtime/src/chat-outbox-legacy.d.ts +96 -0
- package/dist/agent-runtime/src/chat-outbox-legacy.js +252 -0
- package/dist/agent-runtime/src/chat-outbox-legacy.js.map +1 -0
- package/dist/agent-runtime/src/chat-outbox-policy.cjs +30 -0
- package/dist/agent-runtime/src/chat-outbox-policy.cjs.map +1 -0
- package/dist/agent-runtime/src/chat-outbox-policy.d.ts +42 -0
- package/dist/agent-runtime/src/chat-outbox-policy.js +30 -0
- package/dist/agent-runtime/src/chat-outbox-policy.js.map +1 -0
- package/dist/agent-runtime/src/chat-outbox-storage.cjs +306 -0
- package/dist/agent-runtime/src/chat-outbox-storage.cjs.map +1 -0
- package/dist/agent-runtime/src/chat-outbox-storage.d.ts +194 -0
- package/dist/agent-runtime/src/chat-outbox-storage.js +306 -0
- package/dist/agent-runtime/src/chat-outbox-storage.js.map +1 -0
- package/dist/agent-runtime/src/chat-outbox-thread.cjs +21 -94
- package/dist/agent-runtime/src/chat-outbox-thread.cjs.map +1 -1
- package/dist/agent-runtime/src/chat-outbox-thread.d.ts +22 -18
- package/dist/agent-runtime/src/chat-outbox-thread.js +21 -94
- package/dist/agent-runtime/src/chat-outbox-thread.js.map +1 -1
- package/dist/agent-runtime/src/chat-outbox.cjs +492 -547
- package/dist/agent-runtime/src/chat-outbox.cjs.map +1 -1
- package/dist/agent-runtime/src/chat-outbox.d.ts +110 -142
- package/dist/agent-runtime/src/chat-outbox.js +492 -547
- package/dist/agent-runtime/src/chat-outbox.js.map +1 -1
- package/dist/agent-runtime/src/composer-markdown.cjs.map +1 -1
- package/dist/agent-runtime/src/composer-markdown.d.ts +1 -1
- package/dist/agent-runtime/src/composer-markdown.js.map +1 -1
- package/dist/agent-runtime/src/deep-agent-transport-recipe.cjs +3 -1
- package/dist/agent-runtime/src/deep-agent-transport-recipe.cjs.map +1 -1
- package/dist/agent-runtime/src/deep-agent-transport-recipe.d.ts +8 -1
- package/dist/agent-runtime/src/deep-agent-transport-recipe.js +3 -1
- package/dist/agent-runtime/src/deep-agent-transport-recipe.js.map +1 -1
- package/dist/agent-runtime/src/dictation-preferences.d.ts +356 -0
- package/dist/agent-runtime/src/dictation-record.d.ts +279 -0
- package/dist/agent-runtime/src/dictation-session.d.ts +106 -7
- package/dist/agent-runtime/src/dictation-snippets.d.ts +9 -0
- package/dist/agent-runtime/src/dictation-transfer.d.ts +142 -0
- package/dist/agent-runtime/src/edit-command.cjs.map +1 -1
- package/dist/agent-runtime/src/edit-command.d.ts +1 -1
- package/dist/agent-runtime/src/edit-command.js.map +1 -1
- package/dist/agent-runtime/src/errors.cjs +1 -0
- package/dist/agent-runtime/src/errors.cjs.map +1 -1
- package/dist/agent-runtime/src/errors.js +1 -0
- package/dist/agent-runtime/src/errors.js.map +1 -1
- package/dist/agent-runtime/src/generated/runconfig-contract.cjs +24 -0
- package/dist/agent-runtime/src/generated/runconfig-contract.cjs.map +1 -1
- package/dist/agent-runtime/src/generated/runconfig-contract.d.ts +3 -3
- package/dist/agent-runtime/src/generated/runconfig-contract.js +24 -0
- package/dist/agent-runtime/src/generated/runconfig-contract.js.map +1 -1
- package/dist/agent-runtime/src/index.d.ts +14 -8
- package/dist/agent-runtime/src/lane-follow.cjs +289 -0
- package/dist/agent-runtime/src/lane-follow.cjs.map +1 -0
- package/dist/agent-runtime/src/lane-follow.js +289 -0
- package/dist/agent-runtime/src/lane-follow.js.map +1 -0
- package/dist/agent-runtime/src/lane-images.cjs +387 -0
- package/dist/agent-runtime/src/lane-images.cjs.map +1 -0
- package/dist/agent-runtime/src/lane-images.js +387 -0
- package/dist/agent-runtime/src/lane-images.js.map +1 -0
- package/dist/agent-runtime/src/message-window.js +1 -1
- package/dist/agent-runtime/src/messages.cjs +19 -1
- package/dist/agent-runtime/src/messages.cjs.map +1 -1
- package/dist/agent-runtime/src/messages.d.ts +8 -0
- package/dist/agent-runtime/src/messages.js +21 -3
- package/dist/agent-runtime/src/messages.js.map +1 -1
- package/dist/agent-runtime/src/named-agents.cjs +301 -0
- package/dist/agent-runtime/src/named-agents.cjs.map +1 -0
- package/dist/agent-runtime/src/named-agents.d.ts +246 -0
- package/dist/agent-runtime/src/named-agents.js +301 -0
- package/dist/agent-runtime/src/named-agents.js.map +1 -0
- package/dist/agent-runtime/src/offline-status.cjs.map +1 -1
- package/dist/agent-runtime/src/offline-status.d.ts +66 -2
- package/dist/agent-runtime/src/offline-status.js.map +1 -1
- package/dist/agent-runtime/src/ptc-subcalls.cjs +41 -0
- package/dist/agent-runtime/src/ptc-subcalls.cjs.map +1 -0
- package/dist/agent-runtime/src/ptc-subcalls.js +41 -0
- package/dist/agent-runtime/src/ptc-subcalls.js.map +1 -0
- package/dist/agent-runtime/src/queue.cjs +2 -2
- package/dist/agent-runtime/src/queue.cjs.map +1 -1
- package/dist/agent-runtime/src/queue.d.ts +20 -25
- package/dist/agent-runtime/src/queue.js +2 -2
- package/dist/agent-runtime/src/queue.js.map +1 -1
- package/dist/agent-runtime/src/quota-safe-local-storage-session.cjs +314 -84
- package/dist/agent-runtime/src/quota-safe-local-storage-session.cjs.map +1 -1
- package/dist/agent-runtime/src/quota-safe-local-storage-session.d.ts +137 -40
- package/dist/agent-runtime/src/quota-safe-local-storage-session.js +318 -88
- package/dist/agent-runtime/src/quota-safe-local-storage-session.js.map +1 -1
- package/dist/agent-runtime/src/run-send.cjs +54 -0
- package/dist/agent-runtime/src/run-send.cjs.map +1 -0
- package/dist/agent-runtime/src/run-send.d.ts +51 -0
- package/dist/agent-runtime/src/run-send.js +54 -0
- package/dist/agent-runtime/src/run-send.js.map +1 -0
- package/dist/agent-runtime/src/running-tool-placeholder.cjs +6 -0
- package/dist/agent-runtime/src/running-tool-placeholder.cjs.map +1 -1
- package/dist/agent-runtime/src/running-tool-placeholder.js +6 -0
- package/dist/agent-runtime/src/running-tool-placeholder.js.map +1 -1
- package/dist/agent-runtime/src/runtime.d.ts +9 -5
- package/dist/agent-runtime/src/sealed-idb.cjs +64 -0
- package/dist/agent-runtime/src/sealed-idb.cjs.map +1 -1
- package/dist/agent-runtime/src/sealed-idb.d.ts +16 -0
- package/dist/agent-runtime/src/sealed-idb.js +64 -0
- package/dist/agent-runtime/src/sealed-idb.js.map +1 -1
- package/dist/agent-runtime/src/send-recovery.cjs +90 -118
- package/dist/agent-runtime/src/send-recovery.cjs.map +1 -1
- package/dist/agent-runtime/src/send-recovery.d.ts +25 -29
- package/dist/agent-runtime/src/send-recovery.js +90 -118
- package/dist/agent-runtime/src/send-recovery.js.map +1 -1
- package/dist/agent-runtime/src/statewire-diagnostics.d.ts +4 -1
- package/dist/agent-runtime/src/statewire-held-sends.cjs +191 -0
- package/dist/agent-runtime/src/statewire-held-sends.cjs.map +1 -0
- package/dist/agent-runtime/src/statewire-held-sends.d.ts +119 -0
- package/dist/agent-runtime/src/statewire-held-sends.js +191 -0
- package/dist/agent-runtime/src/statewire-held-sends.js.map +1 -0
- package/dist/agent-runtime/src/statewire-state.cjs +4 -0
- package/dist/agent-runtime/src/statewire-state.cjs.map +1 -1
- package/dist/agent-runtime/src/statewire-state.js +4 -0
- package/dist/agent-runtime/src/statewire-state.js.map +1 -1
- package/dist/agent-runtime/src/statewire-transport.cjs +8 -2
- package/dist/agent-runtime/src/statewire-transport.cjs.map +1 -1
- package/dist/agent-runtime/src/statewire-transport.d.ts +14 -5
- package/dist/agent-runtime/src/statewire-transport.js +8 -2
- package/dist/agent-runtime/src/statewire-transport.js.map +1 -1
- package/dist/agent-runtime/src/subagent-transcripts.cjs +1 -23
- package/dist/agent-runtime/src/subagent-transcripts.cjs.map +1 -1
- package/dist/agent-runtime/src/subagent-transcripts.js +3 -25
- package/dist/agent-runtime/src/subagent-transcripts.js.map +1 -1
- package/dist/agent-runtime/src/subagents.cjs +22 -29
- package/dist/agent-runtime/src/subagents.cjs.map +1 -1
- package/dist/agent-runtime/src/subagents.js +23 -30
- package/dist/agent-runtime/src/subagents.js.map +1 -1
- package/dist/agent-runtime/src/thread-extras.cjs +27 -19
- package/dist/agent-runtime/src/thread-extras.cjs.map +1 -1
- package/dist/agent-runtime/src/thread-extras.d.ts +19 -6
- package/dist/agent-runtime/src/thread-extras.js +27 -19
- package/dist/agent-runtime/src/thread-extras.js.map +1 -1
- package/dist/agent-runtime/src/thread-handoff-flow-machine.d.ts +8 -8
- package/dist/agent-runtime/src/tool-metadata.cjs +12 -0
- package/dist/agent-runtime/src/tool-metadata.cjs.map +1 -1
- package/dist/agent-runtime/src/tool-metadata.js +12 -0
- package/dist/agent-runtime/src/tool-metadata.js.map +1 -1
- package/dist/agent-runtime/src/tool-names.cjs +21 -0
- package/dist/agent-runtime/src/tool-names.cjs.map +1 -1
- package/dist/agent-runtime/src/tool-names.d.ts +8 -0
- package/dist/agent-runtime/src/tool-names.js +21 -0
- package/dist/agent-runtime/src/tool-names.js.map +1 -1
- package/dist/agent-runtime/src/typed-interrupt-kinds.cjs +247 -0
- package/dist/agent-runtime/src/typed-interrupt-kinds.cjs.map +1 -0
- package/dist/agent-runtime/src/typed-interrupt-kinds.d.ts +173 -0
- package/dist/agent-runtime/src/typed-interrupt-kinds.js +247 -0
- package/dist/agent-runtime/src/typed-interrupt-kinds.js.map +1 -0
- package/dist/agent-runtime/src/typed-interrupts.cjs +48 -0
- package/dist/agent-runtime/src/typed-interrupts.cjs.map +1 -0
- package/dist/agent-runtime/src/typed-interrupts.d.ts +75 -0
- package/dist/agent-runtime/src/typed-interrupts.js +48 -0
- package/dist/agent-runtime/src/typed-interrupts.js.map +1 -0
- package/dist/agent-runtime/src/types.d.ts +1 -1
- package/dist/agent-runtime/src/use-conversation-list.cjs +1 -0
- package/dist/agent-runtime/src/use-conversation-list.cjs.map +1 -1
- package/dist/agent-runtime/src/use-conversation-list.d.ts +7 -0
- package/dist/agent-runtime/src/use-conversation-list.js +1 -0
- package/dist/agent-runtime/src/use-conversation-list.js.map +1 -1
- package/dist/agent-runtime/src/use-deep-agent-chat-outbox.cjs +46 -29
- package/dist/agent-runtime/src/use-deep-agent-chat-outbox.cjs.map +1 -1
- package/dist/agent-runtime/src/use-deep-agent-chat-outbox.d.ts +14 -22
- package/dist/agent-runtime/src/use-deep-agent-chat-outbox.js +46 -29
- package/dist/agent-runtime/src/use-deep-agent-chat-outbox.js.map +1 -1
- package/dist/agent-runtime/src/use-deep-agent-runtime.cjs +78 -14
- package/dist/agent-runtime/src/use-deep-agent-runtime.cjs.map +1 -1
- package/dist/agent-runtime/src/use-deep-agent-runtime.d.ts +34 -7
- package/dist/agent-runtime/src/use-deep-agent-runtime.js +79 -15
- package/dist/agent-runtime/src/use-deep-agent-runtime.js.map +1 -1
- package/dist/agent-runtime/src/use-deep-agent-thread.cjs +16 -1
- package/dist/agent-runtime/src/use-deep-agent-thread.cjs.map +1 -1
- package/dist/agent-runtime/src/use-deep-agent-thread.d.ts +7 -2
- package/dist/agent-runtime/src/use-deep-agent-thread.js +16 -1
- package/dist/agent-runtime/src/use-deep-agent-thread.js.map +1 -1
- package/dist/agent-runtime/src/use-deep-agent-voice.cjs +30 -4
- package/dist/agent-runtime/src/use-deep-agent-voice.cjs.map +1 -1
- package/dist/agent-runtime/src/use-deep-agent-voice.d.ts +22 -4
- package/dist/agent-runtime/src/use-deep-agent-voice.js +30 -4
- package/dist/agent-runtime/src/use-deep-agent-voice.js.map +1 -1
- package/dist/agent-runtime/src/withdrawn-turns.d.ts +5 -4
- package/dist/agent-runtime/src/word-device-fit.d.ts +174 -0
- package/dist/agent-runtime/src/work-in.d.ts +127 -0
- package/dist/assets/AthenaAssetEmbed.cjs.map +1 -1
- package/dist/assets/AthenaAssetEmbed.d.ts +6 -1
- package/dist/assets/AthenaAssetEmbed.js.map +1 -1
- package/dist/assets/asset-panel-store.cjs +13 -5
- package/dist/assets/asset-panel-store.cjs.map +1 -1
- package/dist/assets/asset-panel-store.d.ts +33 -2
- package/dist/assets/asset-panel-store.js +13 -5
- package/dist/assets/asset-panel-store.js.map +1 -1
- package/dist/auth/AthenaCredentialSourceContext.cjs +11 -0
- package/dist/auth/AthenaCredentialSourceContext.cjs.map +1 -1
- package/dist/auth/AthenaCredentialSourceContext.d.ts +6 -0
- package/dist/auth/AthenaCredentialSourceContext.js +11 -0
- package/dist/auth/AthenaCredentialSourceContext.js.map +1 -1
- package/dist/auth/account-identity.cjs +13 -2
- package/dist/auth/account-identity.cjs.map +1 -1
- package/dist/auth/account-identity.d.ts +9 -0
- package/dist/auth/account-identity.js +13 -2
- package/dist/auth/account-identity.js.map +1 -1
- package/dist/auth/credential-source.cjs +20 -4
- package/dist/auth/credential-source.cjs.map +1 -1
- package/dist/auth/credential-source.d.ts +9 -0
- package/dist/auth/credential-source.js +20 -4
- package/dist/auth/credential-source.js.map +1 -1
- package/dist/catalog/chat-pickers.cjs +31 -0
- package/dist/catalog/chat-pickers.cjs.map +1 -1
- package/dist/catalog/chat-pickers.d.ts +17 -0
- package/dist/catalog/chat-pickers.js +33 -2
- package/dist/catalog/chat-pickers.js.map +1 -1
- package/dist/catalog/runtime-catalog.cjs +63 -3
- package/dist/catalog/runtime-catalog.cjs.map +1 -1
- package/dist/catalog/runtime-catalog.d.ts +63 -3
- package/dist/catalog/runtime-catalog.js +64 -4
- package/dist/catalog/runtime-catalog.js.map +1 -1
- package/dist/chat/AthenaChat.cjs +290 -97
- package/dist/chat/AthenaChat.cjs.map +1 -1
- package/dist/chat/AthenaChat.d.ts +80 -4
- package/dist/chat/AthenaChat.js +290 -97
- package/dist/chat/AthenaChat.js.map +1 -1
- package/dist/chat/StatewireApprovalCard.cjs +35 -5
- package/dist/chat/StatewireApprovalCard.cjs.map +1 -1
- package/dist/chat/StatewireApprovalCard.d.ts +55 -2
- package/dist/chat/StatewireApprovalCard.js +37 -7
- package/dist/chat/StatewireApprovalCard.js.map +1 -1
- package/dist/chat/StatewireQueuedMessages.cjs +17 -2
- package/dist/chat/StatewireQueuedMessages.cjs.map +1 -1
- package/dist/chat/StatewireQueuedMessages.d.ts +8 -45
- package/dist/chat/StatewireQueuedMessages.js +18 -3
- package/dist/chat/StatewireQueuedMessages.js.map +1 -1
- package/dist/chat/chat-agent-mentions.cjs +70 -0
- package/dist/chat/chat-agent-mentions.cjs.map +1 -0
- package/dist/chat/chat-agent-mentions.d.ts +13 -0
- package/dist/chat/chat-agent-mentions.js +70 -0
- package/dist/chat/chat-agent-mentions.js.map +1 -0
- package/dist/chat/composer-actions.cjs +12 -0
- package/dist/chat/composer-actions.cjs.map +1 -0
- package/dist/chat/composer-actions.d.ts +22 -0
- package/dist/chat/composer-actions.js +12 -0
- package/dist/chat/composer-actions.js.map +1 -0
- package/dist/chat/follow-up-suggestions.cjs +185 -0
- package/dist/chat/follow-up-suggestions.cjs.map +1 -0
- package/dist/chat/follow-up-suggestions.d.ts +64 -0
- package/dist/chat/follow-up-suggestions.js +185 -0
- package/dist/chat/follow-up-suggestions.js.map +1 -0
- package/dist/chat/super-grouping/ToolTimeline.cjs +4 -3
- package/dist/chat/super-grouping/ToolTimeline.cjs.map +1 -1
- package/dist/chat/super-grouping/ToolTimeline.d.ts +7 -3
- package/dist/chat/super-grouping/ToolTimeline.js +4 -3
- package/dist/chat/super-grouping/ToolTimeline.js.map +1 -1
- package/dist/chat/turn-changes.cjs +284 -0
- package/dist/chat/turn-changes.cjs.map +1 -0
- package/dist/chat/turn-changes.d.ts +130 -0
- package/dist/chat/turn-changes.js +284 -0
- package/dist/chat/turn-changes.js.map +1 -0
- package/dist/chat/typed-interrupts/StatewireTypedInterruptCard.cjs +31 -0
- package/dist/chat/typed-interrupts/StatewireTypedInterruptCard.cjs.map +1 -0
- package/dist/chat/typed-interrupts/StatewireTypedInterruptCard.d.ts +31 -0
- package/dist/chat/typed-interrupts/StatewireTypedInterruptCard.js +31 -0
- package/dist/chat/typed-interrupts/StatewireTypedInterruptCard.js.map +1 -0
- package/dist/chat/typed-interrupts/approval-cards.cjs +250 -0
- package/dist/chat/typed-interrupts/approval-cards.cjs.map +1 -0
- package/dist/chat/typed-interrupts/approval-cards.d.ts +22 -0
- package/dist/chat/typed-interrupts/approval-cards.js +250 -0
- package/dist/chat/typed-interrupts/approval-cards.js.map +1 -0
- package/dist/chat/typed-interrupts/form-cards.cjs +289 -0
- package/dist/chat/typed-interrupts/form-cards.cjs.map +1 -0
- package/dist/chat/typed-interrupts/form-cards.d.ts +6 -0
- package/dist/chat/typed-interrupts/form-cards.js +289 -0
- package/dist/chat/typed-interrupts/form-cards.js.map +1 -0
- package/dist/chat/typed-interrupts/interrupt-card-shell.cjs +182 -0
- package/dist/chat/typed-interrupts/interrupt-card-shell.cjs.map +1 -0
- package/dist/chat/typed-interrupts/interrupt-card-shell.d.ts +47 -0
- package/dist/chat/typed-interrupts/interrupt-card-shell.js +182 -0
- package/dist/chat/typed-interrupts/interrupt-card-shell.js.map +1 -0
- package/dist/chat/typed-interrupts/json-schema-form.cjs +388 -0
- package/dist/chat/typed-interrupts/json-schema-form.cjs.map +1 -0
- package/dist/chat/typed-interrupts/json-schema-form.d.ts +33 -0
- package/dist/chat/typed-interrupts/json-schema-form.js +388 -0
- package/dist/chat/typed-interrupts/json-schema-form.js.map +1 -0
- package/dist/chat/typed-interrupts/questionnaire-card.cjs +449 -0
- package/dist/chat/typed-interrupts/questionnaire-card.cjs.map +1 -0
- package/dist/chat/typed-interrupts/questionnaire-card.d.ts +20 -0
- package/dist/chat/typed-interrupts/questionnaire-card.js +449 -0
- package/dist/chat/typed-interrupts/questionnaire-card.js.map +1 -0
- package/dist/chat/typed-interrupts/request-file-card.cjs +159 -0
- package/dist/chat/typed-interrupts/request-file-card.cjs.map +1 -0
- package/dist/chat/typed-interrupts/request-file-card.d.ts +2 -0
- package/dist/chat/typed-interrupts/request-file-card.js +159 -0
- package/dist/chat/typed-interrupts/request-file-card.js.map +1 -0
- package/dist/chat/typed-interrupts/toolkit-selection-card.cjs +189 -0
- package/dist/chat/typed-interrupts/toolkit-selection-card.cjs.map +1 -0
- package/dist/chat/typed-interrupts/toolkit-selection-card.d.ts +23 -0
- package/dist/chat/typed-interrupts/toolkit-selection-card.js +189 -0
- package/dist/chat/typed-interrupts/toolkit-selection-card.js.map +1 -0
- package/dist/chat/typed-interrupts/typed-interrupt-body.cjs +26 -0
- package/dist/chat/typed-interrupts/typed-interrupt-body.cjs.map +1 -0
- package/dist/chat/typed-interrupts/typed-interrupt-body.d.ts +3 -0
- package/dist/chat/typed-interrupts/typed-interrupt-body.js +26 -0
- package/dist/chat/typed-interrupts/typed-interrupt-body.js.map +1 -0
- package/dist/chat/typed-interrupts/typed-interrupt-graphql.cjs +105 -0
- package/dist/chat/typed-interrupts/typed-interrupt-graphql.cjs.map +1 -0
- package/dist/chat/typed-interrupts/typed-interrupt-graphql.d.ts +29 -0
- package/dist/chat/typed-interrupts/typed-interrupt-graphql.js +105 -0
- package/dist/chat/typed-interrupts/typed-interrupt-graphql.js.map +1 -0
- package/dist/chat/typed-interrupts/typed-interrupt-notice.cjs +70 -0
- package/dist/chat/typed-interrupts/typed-interrupt-notice.cjs.map +1 -0
- package/dist/chat/typed-interrupts/typed-interrupt-notice.d.ts +45 -0
- package/dist/chat/typed-interrupts/typed-interrupt-notice.js +70 -0
- package/dist/chat/typed-interrupts/typed-interrupt-notice.js.map +1 -0
- package/dist/chat/typed-interrupts/typed-interrupt-panel.cjs +76 -0
- package/dist/chat/typed-interrupts/typed-interrupt-panel.cjs.map +1 -0
- package/dist/chat/typed-interrupts/typed-interrupt-panel.d.ts +11 -0
- package/dist/chat/typed-interrupts/typed-interrupt-panel.js +76 -0
- package/dist/chat/typed-interrupts/typed-interrupt-panel.js.map +1 -0
- package/dist/chat/typed-interrupts/typed-interrupt-types.d.ts +46 -0
- package/dist/chat/typed-interrupts/use-interrupt-draft.cjs +106 -0
- package/dist/chat/typed-interrupts/use-interrupt-draft.cjs.map +1 -0
- package/dist/chat/typed-interrupts/use-interrupt-draft.d.ts +29 -0
- package/dist/chat/typed-interrupts/use-interrupt-draft.js +106 -0
- package/dist/chat/typed-interrupts/use-interrupt-draft.js.map +1 -0
- package/dist/chat/typed-interrupts/use-statewire-typed-interrupt.cjs +231 -0
- package/dist/chat/typed-interrupts/use-statewire-typed-interrupt.cjs.map +1 -0
- package/dist/chat/typed-interrupts/use-statewire-typed-interrupt.d.ts +66 -0
- package/dist/chat/typed-interrupts/use-statewire-typed-interrupt.js +231 -0
- package/dist/chat/typed-interrupts/use-statewire-typed-interrupt.js.map +1 -0
- package/dist/chat-ui/composer/composer-named-agents.cjs +13 -0
- package/dist/chat-ui/composer/composer-named-agents.cjs.map +1 -0
- package/dist/chat-ui/composer/composer-named-agents.d.ts +20 -0
- package/dist/chat-ui/composer/composer-named-agents.js +13 -0
- package/dist/chat-ui/composer/composer-named-agents.js.map +1 -0
- package/dist/chat-ui/composer/slash-command-menu.cjs +143 -0
- package/dist/chat-ui/composer/slash-command-menu.cjs.map +1 -0
- package/dist/chat-ui/composer/slash-command-menu.d.ts +19 -0
- package/dist/chat-ui/composer/slash-command-menu.js +143 -0
- package/dist/chat-ui/composer/slash-command-menu.js.map +1 -0
- package/dist/chat-ui/composer/slash-commands-extension.cjs +51 -0
- package/dist/chat-ui/composer/slash-commands-extension.cjs.map +1 -0
- package/dist/chat-ui/composer/slash-commands-extension.d.ts +39 -0
- package/dist/chat-ui/composer/slash-commands-extension.js +51 -0
- package/dist/chat-ui/composer/slash-commands-extension.js.map +1 -0
- package/dist/chat-ui/composer/slash-commands.cjs +74 -0
- package/dist/chat-ui/composer/slash-commands.cjs.map +1 -0
- package/dist/chat-ui/composer/slash-commands.d.ts +82 -0
- package/dist/chat-ui/composer/slash-commands.js +74 -0
- package/dist/chat-ui/composer/slash-commands.js.map +1 -0
- package/dist/chat-ui/composer/tiptap-composer.cjs +135 -9
- package/dist/chat-ui/composer/tiptap-composer.cjs.map +1 -1
- package/dist/chat-ui/composer/tiptap-composer.d.ts +61 -2
- package/dist/chat-ui/composer/tiptap-composer.js +135 -9
- package/dist/chat-ui/composer/tiptap-composer.js.map +1 -1
- package/dist/chat-ui/index.cjs +3 -0
- package/dist/chat-ui/index.cjs.map +1 -1
- package/dist/chat-ui/index.d.ts +3 -2
- package/dist/chat-ui/index.js +3 -0
- package/dist/chat-ui/index.js.map +1 -1
- package/dist/chat-ui/mentions/mention-chip.cjs +1 -1
- package/dist/chat-ui/mentions/mention-chip.cjs.map +1 -1
- package/dist/chat-ui/mentions/mention-chip.js +2 -2
- package/dist/chat-ui/mentions/mention-chip.js.map +1 -1
- package/dist/chat-ui/mentions/mention-extension.cjs +8 -1
- package/dist/chat-ui/mentions/mention-extension.cjs.map +1 -1
- package/dist/chat-ui/mentions/mention-extension.js +8 -1
- package/dist/chat-ui/mentions/mention-extension.js.map +1 -1
- package/dist/chat-ui/mentions/suggestions/components/get-scope-name.cjs +1 -0
- package/dist/chat-ui/mentions/suggestions/components/get-scope-name.cjs.map +1 -1
- package/dist/chat-ui/mentions/suggestions/components/get-scope-name.js +1 -0
- package/dist/chat-ui/mentions/suggestions/components/get-scope-name.js.map +1 -1
- package/dist/chat-ui/mentions/suggestions/components/mention-icon.cjs +2 -0
- package/dist/chat-ui/mentions/suggestions/components/mention-icon.cjs.map +1 -1
- package/dist/chat-ui/mentions/suggestions/components/mention-icon.js +3 -1
- package/dist/chat-ui/mentions/suggestions/components/mention-icon.js.map +1 -1
- package/dist/chat-ui/mentions/suggestions/components/menu-item.cjs +1 -1
- package/dist/chat-ui/mentions/suggestions/components/menu-item.cjs.map +1 -1
- package/dist/chat-ui/mentions/suggestions/components/menu-item.js +1 -1
- package/dist/chat-ui/mentions/suggestions/components/menu-item.js.map +1 -1
- package/dist/chat-ui/mentions/suggestions/data/api-client.cjs +36 -0
- package/dist/chat-ui/mentions/suggestions/data/api-client.cjs.map +1 -1
- package/dist/chat-ui/mentions/suggestions/data/api-client.d.ts +42 -0
- package/dist/chat-ui/mentions/suggestions/data/api-client.js +36 -0
- package/dist/chat-ui/mentions/suggestions/data/api-client.js.map +1 -1
- package/dist/chat-ui/mentions/suggestions/data/sources/index.cjs +235 -19
- package/dist/chat-ui/mentions/suggestions/data/sources/index.cjs.map +1 -1
- package/dist/chat-ui/mentions/suggestions/data/sources/index.d.ts +88 -10
- package/dist/chat-ui/mentions/suggestions/data/sources/index.js +236 -20
- package/dist/chat-ui/mentions/suggestions/data/sources/index.js.map +1 -1
- package/dist/chat-ui/mentions/suggestions/data/types.cjs.map +1 -1
- package/dist/chat-ui/mentions/suggestions/data/types.d.ts +27 -1
- package/dist/chat-ui/mentions/suggestions/data/types.js.map +1 -1
- package/dist/chat-ui/mentions/suggestions/data/use-mention-suggestions.cjs +56 -5
- package/dist/chat-ui/mentions/suggestions/data/use-mention-suggestions.cjs.map +1 -1
- package/dist/chat-ui/mentions/suggestions/data/use-mention-suggestions.d.ts +26 -6
- package/dist/chat-ui/mentions/suggestions/data/use-mention-suggestions.js +57 -6
- package/dist/chat-ui/mentions/suggestions/data/use-mention-suggestions.js.map +1 -1
- package/dist/chat-ui/mentions/suggestions/mention-suggestions.extension.cjs +34 -17
- package/dist/chat-ui/mentions/suggestions/mention-suggestions.extension.cjs.map +1 -1
- package/dist/chat-ui/mentions/suggestions/mention-suggestions.extension.d.ts +19 -1
- package/dist/chat-ui/mentions/suggestions/mention-suggestions.extension.js +35 -18
- package/dist/chat-ui/mentions/suggestions/mention-suggestions.extension.js.map +1 -1
- package/dist/chat-ui/statewire.d.ts +1 -1
- package/dist/chat-ui/thread/statewire-history-edge.cjs +15 -0
- package/dist/chat-ui/thread/statewire-history-edge.cjs.map +1 -1
- package/dist/chat-ui/thread/statewire-history-edge.d.ts +4 -1
- package/dist/chat-ui/thread/statewire-history-edge.js +15 -0
- package/dist/chat-ui/thread/statewire-history-edge.js.map +1 -1
- package/dist/collab/client.cjs +17 -5
- package/dist/collab/client.cjs.map +1 -1
- package/dist/collab/client.d.ts +22 -7
- package/dist/collab/client.js +17 -5
- package/dist/collab/client.js.map +1 -1
- package/dist/composer/ComposerAttachedReferences.cjs +119 -0
- package/dist/composer/ComposerAttachedReferences.cjs.map +1 -0
- package/dist/composer/ComposerAttachedReferences.d.ts +26 -0
- package/dist/composer/ComposerAttachedReferences.js +119 -0
- package/dist/composer/ComposerAttachedReferences.js.map +1 -0
- package/dist/composer/ComposerNamedAgents.cjs +63 -0
- package/dist/composer/ComposerNamedAgents.cjs.map +1 -0
- package/dist/composer/ComposerNamedAgents.d.ts +16 -0
- package/dist/composer/ComposerNamedAgents.js +63 -0
- package/dist/composer/ComposerNamedAgents.js.map +1 -0
- package/dist/composer/attached-references.cjs +159 -0
- package/dist/composer/attached-references.cjs.map +1 -0
- package/dist/composer/attached-references.d.ts +86 -0
- package/dist/composer/attached-references.js +159 -0
- package/dist/composer/attached-references.js.map +1 -0
- package/dist/composer/build-composed-message.cjs +14 -7
- package/dist/composer/build-composed-message.cjs.map +1 -1
- package/dist/composer/build-composed-message.d.ts +6 -1
- package/dist/composer/build-composed-message.js +14 -7
- package/dist/composer/build-composed-message.js.map +1 -1
- package/dist/composer/composer-handoff.cjs +6 -2
- package/dist/composer/composer-handoff.cjs.map +1 -1
- package/dist/composer/composer-handoff.d.ts +7 -1
- package/dist/composer/composer-handoff.js +6 -2
- package/dist/composer/composer-handoff.js.map +1 -1
- package/dist/composer/folder-upload.cjs +149 -0
- package/dist/composer/folder-upload.cjs.map +1 -0
- package/dist/composer/folder-upload.d.ts +79 -0
- package/dist/composer/folder-upload.js +149 -0
- package/dist/composer/folder-upload.js.map +1 -0
- package/dist/composer/index.d.ts +1 -1
- package/dist/composer/useAttachToChat.cjs +35 -0
- package/dist/composer/useAttachToChat.cjs.map +1 -0
- package/dist/composer/useAttachToChat.d.ts +54 -0
- package/dist/composer/useAttachToChat.js +35 -0
- package/dist/composer/useAttachToChat.js.map +1 -0
- package/dist/composer/useAttachedReferencesComposerProps.cjs +19 -0
- package/dist/composer/useAttachedReferencesComposerProps.cjs.map +1 -0
- package/dist/composer/useAttachedReferencesComposerProps.d.ts +12 -0
- package/dist/composer/useAttachedReferencesComposerProps.js +19 -0
- package/dist/composer/useAttachedReferencesComposerProps.js.map +1 -0
- package/dist/composer/useFileUpload.cjs +95 -7
- package/dist/composer/useFileUpload.cjs.map +1 -1
- package/dist/composer/useFileUpload.d.ts +21 -2
- package/dist/composer/useFileUpload.js +95 -7
- package/dist/composer/useFileUpload.js.map +1 -1
- package/dist/data/athena-api-error.cjs +125 -0
- package/dist/data/athena-api-error.cjs.map +1 -0
- package/dist/data/athena-api-error.d.ts +96 -0
- package/dist/data/athena-api-error.js +125 -0
- package/dist/data/athena-api-error.js.map +1 -0
- package/dist/data/athena-data-client.cjs +106 -0
- package/dist/data/athena-data-client.cjs.map +1 -0
- package/dist/data/athena-data-client.d.ts +74 -0
- package/dist/data/athena-data-client.js +106 -0
- package/dist/data/athena-data-client.js.map +1 -0
- package/dist/data/athena-member.cjs +93 -0
- package/dist/data/athena-member.cjs.map +1 -0
- package/dist/data/athena-member.d.ts +125 -0
- package/dist/data/athena-member.js +93 -0
- package/dist/data/athena-member.js.map +1 -0
- package/dist/data/athena-request.cjs +458 -0
- package/dist/data/athena-request.cjs.map +1 -0
- package/dist/data/athena-request.d.ts +120 -0
- package/dist/data/athena-request.js +458 -0
- package/dist/data/athena-request.js.map +1 -0
- package/dist/data/use-athena-fetch.cjs +14 -0
- package/dist/data/use-athena-fetch.cjs.map +1 -0
- package/dist/data/use-athena-fetch.d.ts +19 -0
- package/dist/data/use-athena-fetch.js +14 -0
- package/dist/data/use-athena-fetch.js.map +1 -0
- package/dist/data/use-athena-graphql.cjs +66 -0
- package/dist/data/use-athena-graphql.cjs.map +1 -0
- package/dist/data/use-athena-graphql.d.ts +56 -0
- package/dist/data/use-athena-graphql.js +66 -0
- package/dist/data/use-athena-graphql.js.map +1 -0
- package/dist/data/use-athena-rest.cjs +33 -0
- package/dist/data/use-athena-rest.cjs.map +1 -0
- package/dist/data/use-athena-rest.d.ts +21 -0
- package/dist/data/use-athena-rest.js +33 -0
- package/dist/data/use-athena-rest.js.map +1 -0
- package/dist/data/use-semantic-query.cjs +44 -0
- package/dist/data/use-semantic-query.cjs.map +1 -0
- package/dist/data/use-semantic-query.d.ts +92 -0
- package/dist/data/use-semantic-query.js +44 -0
- package/dist/data/use-semantic-query.js.map +1 -0
- package/dist/diagnostics/athena-diagnostics.cjs.map +1 -1
- package/dist/diagnostics/athena-diagnostics.d.ts +5 -1
- package/dist/diagnostics/athena-diagnostics.js.map +1 -1
- package/dist/diagnostics/errors.cjs +7 -0
- package/dist/diagnostics/errors.cjs.map +1 -1
- package/dist/diagnostics/errors.d.ts +7 -0
- package/dist/diagnostics/errors.js +7 -0
- package/dist/diagnostics/errors.js.map +1 -1
- package/dist/index.cjs +155 -11
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.ts +72 -13
- package/dist/index.js +148 -4
- package/dist/index.js.map +1 -1
- package/dist/keryx-http/src/initial-sync.cjs +64 -16
- package/dist/keryx-http/src/initial-sync.cjs.map +1 -1
- package/dist/keryx-http/src/initial-sync.d.ts +31 -1
- package/dist/keryx-http/src/initial-sync.js +64 -16
- package/dist/keryx-http/src/initial-sync.js.map +1 -1
- package/dist/keryx-http/src/own-awareness.cjs +20 -0
- package/dist/keryx-http/src/own-awareness.cjs.map +1 -0
- package/dist/keryx-http/src/own-awareness.d.ts +50 -0
- package/dist/keryx-http/src/own-awareness.js +20 -0
- package/dist/keryx-http/src/own-awareness.js.map +1 -0
- package/dist/keryx-http/src/update-attributions.cjs +26 -1
- package/dist/keryx-http/src/update-attributions.cjs.map +1 -1
- package/dist/keryx-http/src/update-attributions.d.ts +10 -1
- package/dist/keryx-http/src/update-attributions.js +26 -1
- package/dist/keryx-http/src/update-attributions.js.map +1 -1
- package/dist/offline/chat-outbox.cjs +262 -26
- package/dist/offline/chat-outbox.cjs.map +1 -1
- package/dist/offline/chat-outbox.d.ts +90 -12
- package/dist/offline/chat-outbox.js +263 -27
- package/dist/offline/chat-outbox.js.map +1 -1
- package/dist/provider/AthenaProvider.cjs +56 -19
- package/dist/provider/AthenaProvider.cjs.map +1 -1
- package/dist/provider/AthenaProvider.d.ts +24 -8
- package/dist/provider/AthenaProvider.js +57 -20
- package/dist/provider/AthenaProvider.js.map +1 -1
- package/dist/react/package.json.cjs +1 -1
- package/dist/react/package.json.js +1 -1
- package/dist/references/src/anchors/types.cjs +5 -0
- package/dist/references/src/anchors/types.cjs.map +1 -1
- package/dist/references/src/anchors/types.js +5 -0
- package/dist/references/src/anchors/types.js.map +1 -1
- package/dist/references/src/attachable.cjs +149 -0
- package/dist/references/src/attachable.cjs.map +1 -0
- package/dist/references/src/attachable.d.ts +87 -0
- package/dist/references/src/attachable.js +149 -0
- package/dist/references/src/attachable.js.map +1 -0
- package/dist/runtime/StatewirePlanModeLaneSync.cjs +93 -0
- package/dist/runtime/StatewirePlanModeLaneSync.cjs.map +1 -0
- package/dist/runtime/StatewirePlanModeLaneSync.d.ts +34 -0
- package/dist/runtime/StatewirePlanModeLaneSync.js +93 -0
- package/dist/runtime/StatewirePlanModeLaneSync.js.map +1 -0
- package/dist/runtime/StatewireThreadConfigLaneSync.cjs +2 -0
- package/dist/runtime/StatewireThreadConfigLaneSync.cjs.map +1 -1
- package/dist/runtime/StatewireThreadConfigLaneSync.d.ts +4 -0
- package/dist/runtime/StatewireThreadConfigLaneSync.js +2 -0
- package/dist/runtime/StatewireThreadConfigLaneSync.js.map +1 -1
- package/dist/runtime/statewire-plan-mode.cjs +71 -0
- package/dist/runtime/statewire-plan-mode.cjs.map +1 -0
- package/dist/runtime/statewire-plan-mode.d.ts +88 -0
- package/dist/runtime/statewire-plan-mode.js +71 -0
- package/dist/runtime/statewire-plan-mode.js.map +1 -0
- package/dist/runtime/statewire-run-config.cjs +3 -1
- package/dist/runtime/statewire-run-config.cjs.map +1 -1
- package/dist/runtime/statewire-run-config.d.ts +7 -0
- package/dist/runtime/statewire-run-config.js +3 -1
- package/dist/runtime/statewire-run-config.js.map +1 -1
- package/dist/runtime/statewire-session-key.cjs +11 -5
- package/dist/runtime/statewire-session-key.cjs.map +1 -1
- package/dist/runtime/statewire-session-key.d.ts +22 -10
- package/dist/runtime/statewire-session-key.js +11 -5
- package/dist/runtime/statewire-session-key.js.map +1 -1
- package/dist/runtime/useAthenaStatewireRuntime.cjs +65 -8
- package/dist/runtime/useAthenaStatewireRuntime.cjs.map +1 -1
- package/dist/runtime/useAthenaStatewireRuntime.d.ts +26 -10
- package/dist/runtime/useAthenaStatewireRuntime.js +67 -10
- package/dist/runtime/useAthenaStatewireRuntime.js.map +1 -1
- package/dist/search/useAthenaAssets.cjs +394 -0
- package/dist/search/useAthenaAssets.cjs.map +1 -0
- package/dist/search/useAthenaAssets.d.ts +186 -0
- package/dist/search/useAthenaAssets.js +394 -0
- package/dist/search/useAthenaAssets.js.map +1 -0
- package/dist/sheet-range/index.cjs +4 -0
- package/dist/sheet-range/index.cjs.map +1 -1
- package/dist/sheet-range/index.d.ts +4 -2
- package/dist/sheet-range/index.js +4 -0
- package/dist/sheet-range/index.js.map +1 -1
- package/dist/sheet-range/query-range.cjs +102 -0
- package/dist/sheet-range/query-range.cjs.map +1 -0
- package/dist/sheet-range/query-range.d.ts +46 -0
- package/dist/sheet-range/query-range.js +102 -0
- package/dist/sheet-range/query-range.js.map +1 -0
- package/dist/styles.css +1 -1
- package/dist/subagents/index.cjs +49 -0
- package/dist/subagents/index.cjs.map +1 -0
- package/dist/subagents/index.d.ts +16 -0
- package/dist/subagents/index.js +49 -0
- package/dist/subagents/index.js.map +1 -0
- package/dist/subagents/lane-follow.cjs +19 -0
- package/dist/subagents/lane-follow.cjs.map +1 -0
- package/dist/subagents/lane-follow.d.ts +9 -0
- package/dist/subagents/lane-follow.js +19 -0
- package/dist/subagents/lane-follow.js.map +1 -0
- package/dist/subagents/lane-model.cjs +178 -0
- package/dist/subagents/lane-model.cjs.map +1 -0
- package/dist/subagents/lane-model.d.ts +140 -0
- package/dist/subagents/lane-model.js +178 -0
- package/dist/subagents/lane-model.js.map +1 -0
- package/dist/subagents/lane-parts.cjs +517 -0
- package/dist/subagents/lane-parts.cjs.map +1 -0
- package/dist/subagents/lane-parts.d.ts +130 -0
- package/dist/subagents/lane-parts.js +517 -0
- package/dist/subagents/lane-parts.js.map +1 -0
- package/dist/subagents/subagent-lane-group.cjs +215 -0
- package/dist/subagents/subagent-lane-group.cjs.map +1 -0
- package/dist/subagents/subagent-lane-group.d.ts +67 -0
- package/dist/subagents/subagent-lane-group.js +215 -0
- package/dist/subagents/subagent-lane-group.js.map +1 -0
- package/dist/subagents/subagent-transcript-drawer.cjs +431 -0
- package/dist/subagents/subagent-transcript-drawer.cjs.map +1 -0
- package/dist/subagents/subagent-transcript-drawer.d.ts +78 -0
- package/dist/subagents/subagent-transcript-drawer.js +431 -0
- package/dist/subagents/subagent-transcript-drawer.js.map +1 -0
- package/dist/subagents/task-subagent-group.cjs +115 -0
- package/dist/subagents/task-subagent-group.cjs.map +1 -0
- package/dist/subagents/task-subagent-group.d.ts +36 -0
- package/dist/subagents/task-subagent-group.js +115 -0
- package/dist/subagents/task-subagent-group.js.map +1 -0
- package/dist/subagents/use-omitted-images-in-view.cjs +68 -0
- package/dist/subagents/use-omitted-images-in-view.cjs.map +1 -0
- package/dist/subagents/use-omitted-images-in-view.d.ts +21 -0
- package/dist/subagents/use-omitted-images-in-view.js +68 -0
- package/dist/subagents/use-omitted-images-in-view.js.map +1 -0
- package/dist/threads/Inbox.cjs +2 -2
- package/dist/threads/Inbox.cjs.map +1 -1
- package/dist/threads/SessionList.cjs +6 -6
- package/dist/threads/SessionList.cjs.map +1 -1
- package/dist/threads/SessionsPage.cjs +13 -7
- package/dist/threads/SessionsPage.cjs.map +1 -1
- package/dist/threads/SessionsPage.d.ts +10 -1
- package/dist/threads/SessionsPage.js +9 -3
- package/dist/threads/SessionsPage.js.map +1 -1
- package/dist/threads/session-list-model.cjs.map +1 -1
- package/dist/threads/session-list-model.d.ts +2 -1
- package/dist/threads/session-list-model.js.map +1 -1
- package/dist/threads/session-row-parts.cjs +3 -3
- package/dist/threads/session-row-parts.cjs.map +1 -1
- package/dist/threads/sessions-page-model.cjs +13 -5
- package/dist/threads/sessions-page-model.cjs.map +1 -1
- package/dist/threads/sessions-page-model.d.ts +7 -0
- package/dist/threads/sessions-page-model.js +11 -3
- package/dist/threads/sessions-page-model.js.map +1 -1
- package/dist/threads/sessions-page-storage.cjs +8 -8
- package/dist/threads/sessions-page-storage.cjs.map +1 -1
- package/dist/threads/sessions-page-storage.d.ts +5 -1
- package/dist/threads/sessions-page-storage.js +8 -8
- package/dist/threads/sessions-page-storage.js.map +1 -1
- package/dist/threads/use-athena-sessions.cjs +1 -0
- package/dist/threads/use-athena-sessions.cjs.map +1 -1
- package/dist/threads/use-athena-sessions.d.ts +7 -0
- package/dist/threads/use-athena-sessions.js +1 -0
- package/dist/threads/use-athena-sessions.js.map +1 -1
- package/dist/threads/use-athena-thread-agent.cjs +31 -0
- package/dist/threads/use-athena-thread-agent.cjs.map +1 -0
- package/dist/threads/use-athena-thread-agent.d.ts +38 -0
- package/dist/threads/use-athena-thread-agent.js +31 -0
- package/dist/threads/use-athena-thread-agent.js.map +1 -0
- package/dist/threads/use-athena-thread-plan-mode.cjs +18 -0
- package/dist/threads/use-athena-thread-plan-mode.cjs.map +1 -0
- package/dist/threads/use-athena-thread-plan-mode.d.ts +18 -0
- package/dist/threads/use-athena-thread-plan-mode.js +18 -0
- package/dist/threads/use-athena-thread-plan-mode.js.map +1 -0
- package/dist/threads/use-rest-conversation-history.d.ts +1 -0
- package/dist/tools/agent-creations.cjs +97 -0
- package/dist/tools/agent-creations.cjs.map +1 -0
- package/dist/tools/agent-creations.d.ts +38 -0
- package/dist/tools/agent-creations.js +97 -0
- package/dist/tools/agent-creations.js.map +1 -0
- package/dist/tools/agent-highlights.cjs +100 -0
- package/dist/tools/agent-highlights.cjs.map +1 -0
- package/dist/tools/agent-highlights.d.ts +57 -0
- package/dist/tools/agent-highlights.js +100 -0
- package/dist/tools/agent-highlights.js.map +1 -0
- package/dist/tools/append-document-tool-ui.cjs +1 -0
- package/dist/tools/append-document-tool-ui.cjs.map +1 -1
- package/dist/tools/append-document-tool-ui.d.ts +7 -0
- package/dist/tools/append-document-tool-ui.js +2 -1
- package/dist/tools/append-document-tool-ui.js.map +1 -1
- package/dist/tools/auto-open-tools.cjs +144 -71
- package/dist/tools/auto-open-tools.cjs.map +1 -1
- package/dist/tools/auto-open-tools.d.ts +131 -1
- package/dist/tools/auto-open-tools.js +145 -72
- package/dist/tools/auto-open-tools.js.map +1 -1
- package/dist/tools/browser-tool-uis.cjs +594 -0
- package/dist/tools/browser-tool-uis.cjs.map +1 -0
- package/dist/tools/browser-tool-uis.d.ts +8 -0
- package/dist/tools/browser-tool-uis.js +594 -0
- package/dist/tools/browser-tool-uis.js.map +1 -0
- package/dist/tools/computer-asset-tool-uis.cjs +313 -0
- package/dist/tools/computer-asset-tool-uis.cjs.map +1 -0
- package/dist/tools/computer-asset-tool-uis.d.ts +5 -0
- package/dist/tools/computer-asset-tool-uis.js +313 -0
- package/dist/tools/computer-asset-tool-uis.js.map +1 -0
- package/dist/tools/document-edit-tool-uis.cjs +218 -0
- package/dist/tools/document-edit-tool-uis.cjs.map +1 -0
- package/dist/tools/document-edit-tool-uis.d.ts +40 -0
- package/dist/tools/document-edit-tool-uis.js +218 -0
- package/dist/tools/document-edit-tool-uis.js.map +1 -0
- package/dist/tools/drive-tool-uis.cjs +425 -0
- package/dist/tools/drive-tool-uis.cjs.map +1 -0
- package/dist/tools/drive-tool-uis.d.ts +120 -0
- package/dist/tools/drive-tool-uis.js +425 -0
- package/dist/tools/drive-tool-uis.js.map +1 -0
- package/dist/tools/email-calendar-tool-uis.cjs +789 -0
- package/dist/tools/email-calendar-tool-uis.cjs.map +1 -0
- package/dist/tools/email-calendar-tool-uis.d.ts +129 -0
- package/dist/tools/email-calendar-tool-uis.js +789 -0
- package/dist/tools/email-calendar-tool-uis.js.map +1 -0
- package/dist/tools/ontology-tool-uis.cjs +83 -0
- package/dist/tools/ontology-tool-uis.cjs.map +1 -0
- package/dist/tools/ontology-tool-uis.d.ts +9 -0
- package/dist/tools/ontology-tool-uis.js +83 -0
- package/dist/tools/ontology-tool-uis.js.map +1 -0
- package/dist/tools/orchestration-tool-uis.cjs +586 -0
- package/dist/tools/orchestration-tool-uis.cjs.map +1 -0
- package/dist/tools/orchestration-tool-uis.d.ts +141 -0
- package/dist/tools/orchestration-tool-uis.js +586 -0
- package/dist/tools/orchestration-tool-uis.js.map +1 -0
- package/dist/tools/presentation-edit-tool-uis.cjs +516 -0
- package/dist/tools/presentation-edit-tool-uis.cjs.map +1 -0
- package/dist/tools/presentation-edit-tool-uis.d.ts +73 -0
- package/dist/tools/presentation-edit-tool-uis.js +516 -0
- package/dist/tools/presentation-edit-tool-uis.js.map +1 -0
- package/dist/tools/project-tool-uis.cjs +213 -0
- package/dist/tools/project-tool-uis.cjs.map +1 -0
- package/dist/tools/project-tool-uis.d.ts +14 -0
- package/dist/tools/project-tool-uis.js +213 -0
- package/dist/tools/project-tool-uis.js.map +1 -0
- package/dist/tools/sandbox-tool-uis.cjs +491 -0
- package/dist/tools/sandbox-tool-uis.cjs.map +1 -0
- package/dist/tools/sandbox-tool-uis.d.ts +116 -0
- package/dist/tools/sandbox-tool-uis.js +491 -0
- package/dist/tools/sandbox-tool-uis.js.map +1 -0
- package/dist/tools/sheet-query-tool-ui.cjs +138 -0
- package/dist/tools/sheet-query-tool-ui.cjs.map +1 -0
- package/dist/tools/sheet-query-tool-ui.d.ts +15 -0
- package/dist/tools/sheet-query-tool-ui.js +138 -0
- package/dist/tools/sheet-query-tool-ui.js.map +1 -0
- package/dist/tools/studio-screenshot-tool-uis.cjs +262 -0
- package/dist/tools/studio-screenshot-tool-uis.cjs.map +1 -0
- package/dist/tools/studio-screenshot-tool-uis.d.ts +52 -0
- package/dist/tools/studio-screenshot-tool-uis.js +262 -0
- package/dist/tools/studio-screenshot-tool-uis.js.map +1 -0
- package/dist/tools/subagent-task-tool-ui.cjs +24 -475
- package/dist/tools/subagent-task-tool-ui.cjs.map +1 -1
- package/dist/tools/subagent-task-tool-ui.d.ts +19 -103
- package/dist/tools/subagent-task-tool-ui.js +28 -479
- package/dist/tools/subagent-task-tool-ui.js.map +1 -1
- package/dist/tools/tool-summary.cjs +36 -0
- package/dist/tools/tool-summary.cjs.map +1 -1
- package/dist/tools/tool-summary.js +36 -0
- package/dist/tools/tool-summary.js.map +1 -1
- package/dist/tools/tool-uis.cjs +181 -53
- package/dist/tools/tool-uis.cjs.map +1 -1
- package/dist/tools/tool-uis.d.ts +40 -0
- package/dist/tools/tool-uis.js +183 -55
- package/dist/tools/tool-uis.js.map +1 -1
- package/dist/typed-interrupts/index.cjs +15 -0
- package/dist/typed-interrupts/index.cjs.map +1 -0
- package/dist/typed-interrupts/index.d.ts +20 -0
- package/dist/typed-interrupts/index.js +15 -0
- package/dist/typed-interrupts/index.js.map +1 -0
- package/dist/workbench/session-workbench-panes.cjs +6 -6
- package/dist/workbench/session-workbench-panes.cjs.map +1 -1
- package/package.json +28 -6
- package/dist/agent-runtime/src/chat-outbox-store.cjs +0 -510
- package/dist/agent-runtime/src/chat-outbox-store.cjs.map +0 -1
- package/dist/agent-runtime/src/chat-outbox-store.d.ts +0 -210
- package/dist/agent-runtime/src/chat-outbox-store.js +0 -510
- package/dist/agent-runtime/src/chat-outbox-store.js.map +0 -1
|
@@ -0,0 +1,70 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __defProp = Object.defineProperty;
|
|
3
|
+
var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
|
|
4
|
+
var __publicField = (obj, key, value) => __defNormalProp(obj, typeof key !== "symbol" ? key + "" : key, value);
|
|
5
|
+
Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
|
|
6
|
+
const jsxRuntime = require("react/jsx-runtime");
|
|
7
|
+
const typedInterrupts = require("../../agent-runtime/src/typed-interrupts.cjs");
|
|
8
|
+
const typedInterruptKinds = require("../../agent-runtime/src/typed-interrupt-kinds.cjs");
|
|
9
|
+
const lucideReact = require("lucide-react");
|
|
10
|
+
const require$$0 = require("react");
|
|
11
|
+
const button = require("../../ui/button.cjs");
|
|
12
|
+
const interrupts = require("../../agent-runtime/src/interrupts.cjs");
|
|
13
|
+
function TypedInterruptNotice({
|
|
14
|
+
interrupt,
|
|
15
|
+
displayMessage,
|
|
16
|
+
variant,
|
|
17
|
+
readOnlyNotice = "Waiting for someone with edit access to respond.",
|
|
18
|
+
disabled = false,
|
|
19
|
+
resume,
|
|
20
|
+
cancel
|
|
21
|
+
}) {
|
|
22
|
+
const decline = () => {
|
|
23
|
+
if (interrupt.type === typedInterrupts.TypedInterruptType.HITL) {
|
|
24
|
+
resume == null ? void 0 : resume(typedInterruptKinds.typedApprovalResume({ action: "reject", reason: interrupts.HITL_REJECT_REASON }));
|
|
25
|
+
return;
|
|
26
|
+
}
|
|
27
|
+
cancel == null ? void 0 : cancel();
|
|
28
|
+
};
|
|
29
|
+
return /* @__PURE__ */ jsxRuntime.jsxs(
|
|
30
|
+
"div",
|
|
31
|
+
{
|
|
32
|
+
"data-testid": `typed-interrupt-${variant}`,
|
|
33
|
+
className: "w-full rounded-2xl border border-amber-300 bg-amber-50 px-4 py-3 text-amber-900",
|
|
34
|
+
children: [
|
|
35
|
+
/* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex items-start gap-3", children: [
|
|
36
|
+
/* @__PURE__ */ jsxRuntime.jsx(lucideReact.TriangleAlertIcon, { className: "mt-0.5 size-4 shrink-0" }),
|
|
37
|
+
/* @__PURE__ */ jsxRuntime.jsxs("div", { className: "min-w-0 flex-1", children: [
|
|
38
|
+
/* @__PURE__ */ jsxRuntime.jsx("p", { className: "font-semibold text-sm", children: variant === "read-only" ? "Input required" : "This request could not be displayed" }),
|
|
39
|
+
/* @__PURE__ */ jsxRuntime.jsx("p", { className: "pt-1 text-amber-800 text-sm leading-snug", children: displayMessage || interrupt.message })
|
|
40
|
+
] })
|
|
41
|
+
] }),
|
|
42
|
+
/* @__PURE__ */ jsxRuntime.jsx("div", { className: "flex flex-wrap items-center gap-2 pt-3", children: variant === "read-only" ? /* @__PURE__ */ jsxRuntime.jsx("p", { className: "text-amber-800 text-sm", children: readOnlyNotice }) : /* @__PURE__ */ jsxRuntime.jsxs(button.Button, { size: "sm", variant: "outline", disabled, onClick: decline, children: [
|
|
43
|
+
/* @__PURE__ */ jsxRuntime.jsx(lucideReact.XIcon, {}),
|
|
44
|
+
"Cancel request"
|
|
45
|
+
] }) })
|
|
46
|
+
]
|
|
47
|
+
}
|
|
48
|
+
);
|
|
49
|
+
}
|
|
50
|
+
class TypedInterruptErrorBoundary extends require$$0.Component {
|
|
51
|
+
constructor() {
|
|
52
|
+
super(...arguments);
|
|
53
|
+
__publicField(this, "state", { hasError: false, resetKey: this.props.resetKey });
|
|
54
|
+
}
|
|
55
|
+
static getDerivedStateFromError() {
|
|
56
|
+
return { hasError: true };
|
|
57
|
+
}
|
|
58
|
+
static getDerivedStateFromProps(props, state) {
|
|
59
|
+
return props.resetKey === state.resetKey ? null : { hasError: false, resetKey: props.resetKey };
|
|
60
|
+
}
|
|
61
|
+
componentDidCatch(error, info) {
|
|
62
|
+
console.error("[athena] a typed interrupt card failed to render", error, info.componentStack);
|
|
63
|
+
}
|
|
64
|
+
render() {
|
|
65
|
+
return this.state.hasError ? this.props.fallback : this.props.children;
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
exports.TypedInterruptErrorBoundary = TypedInterruptErrorBoundary;
|
|
69
|
+
exports.TypedInterruptNotice = TypedInterruptNotice;
|
|
70
|
+
//# sourceMappingURL=typed-interrupt-notice.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"typed-interrupt-notice.cjs","sources":["../../../src/chat/typed-interrupts/typed-interrupt-notice.tsx"],"sourcesContent":["import { HITL_REJECT_REASON } from '@athenaintel/agent-runtime';\nimport { type TypedInterruptPayload, TypedInterruptType } from '@athenaintel/agent-runtime/typed-interrupts';\nimport { typedApprovalResume } from '@athenaintel/agent-runtime/typed-interrupt-kinds';\nimport { TriangleAlertIcon, XIcon } from 'lucide-react';\nimport { Component, type ErrorInfo, type ReactNode } from 'react';\nimport { Button } from '../../ui/button';\nimport type { TypedInterruptAnswer } from './typed-interrupt-types';\n\nexport interface TypedInterruptNoticeProps {\n interrupt: TypedInterruptPayload;\n /** The park's message as the engine shows it (its timeout suffix gone once the timer stopped). */\n displayMessage: string;\n /**\n * `read-only`: a viewer without edit rights sees the park's message and who\n * answers it. `render-failed`: the card threw; the message and the one\n * honest answer, a cancel.\n */\n variant: 'read-only' | 'render-failed';\n readOnlyNotice?: ReactNode;\n disabled?: boolean;\n resume?: (value: TypedInterruptAnswer) => void;\n cancel?: () => void;\n}\n\n/**\n * What the typed slot shows when a card cannot (Olympus's\n * `TypedInterruptNotice`): never a generic answer, which a typed raiser's\n * resume model would refuse. The only answer every raiser reads as a clean\n * decline is a cancel (`FormCancelledError`), and for a tool-raised approval,\n * whose model takes only approve or reject, a reject.\n */\nexport function TypedInterruptNotice({\n interrupt,\n displayMessage,\n variant,\n readOnlyNotice = 'Waiting for someone with edit access to respond.',\n disabled = false,\n resume,\n cancel,\n}: TypedInterruptNoticeProps) {\n const decline = () => {\n if (interrupt.type === TypedInterruptType.HITL) {\n resume?.(typedApprovalResume({ action: 'reject', reason: HITL_REJECT_REASON }));\n return;\n }\n cancel?.();\n };\n return (\n <div\n data-testid={`typed-interrupt-${variant}`}\n className=\"w-full rounded-2xl border border-amber-300 bg-amber-50 px-4 py-3 text-amber-900\"\n >\n <div className=\"flex items-start gap-3\">\n <TriangleAlertIcon className=\"mt-0.5 size-4 shrink-0\" />\n <div className=\"min-w-0 flex-1\">\n <p className=\"font-semibold text-sm\">\n {variant === 'read-only' ? 'Input required' : 'This request could not be displayed'}\n </p>\n <p className=\"pt-1 text-amber-800 text-sm leading-snug\">{displayMessage || interrupt.message}</p>\n </div>\n </div>\n <div className=\"flex flex-wrap items-center gap-2 pt-3\">\n {variant === 'read-only' ? (\n <p className=\"text-amber-800 text-sm\">{readOnlyNotice}</p>\n ) : (\n <Button size=\"sm\" variant=\"outline\" disabled={disabled} onClick={decline}>\n <XIcon />\n Cancel request\n </Button>\n )}\n </div>\n </div>\n );\n}\n\ninterface TypedInterruptErrorBoundaryProps {\n /** A change here (a new park) clears a caught error so the next card renders. */\n resetKey: string | undefined;\n fallback: ReactNode;\n children: ReactNode;\n}\n\ninterface TypedInterruptErrorBoundaryState {\n hasError: boolean;\n resetKey: string | undefined;\n}\n\n/** A card that throws never takes the chat with it: the fallback stands in until the next park. */\nexport class TypedInterruptErrorBoundary extends Component<\n TypedInterruptErrorBoundaryProps,\n TypedInterruptErrorBoundaryState\n> {\n state: TypedInterruptErrorBoundaryState = { hasError: false, resetKey: this.props.resetKey };\n\n static getDerivedStateFromError(): Partial<TypedInterruptErrorBoundaryState> {\n return { hasError: true };\n }\n\n static getDerivedStateFromProps(\n props: TypedInterruptErrorBoundaryProps,\n state: TypedInterruptErrorBoundaryState,\n ): Partial<TypedInterruptErrorBoundaryState> | null {\n return props.resetKey === state.resetKey ? null : { hasError: false, resetKey: props.resetKey };\n }\n\n componentDidCatch(error: unknown, info: ErrorInfo): void {\n console.error('[athena] a typed interrupt card failed to render', error, info.componentStack);\n }\n\n render(): ReactNode {\n return this.state.hasError ? this.props.fallback : this.props.children;\n }\n}\n"],"names":["TypedInterruptType","typedApprovalResume","HITL_REJECT_REASON","jsxs","jsx","TriangleAlertIcon","Button","XIcon","Component"],"mappings":";;;;;;;;;;;;AA+BO,SAAS,qBAAqB;AAAA,EACnC;AAAA,EACA;AAAA,EACA;AAAA,EACA,iBAAiB;AAAA,EACjB,WAAW;AAAA,EACX;AAAA,EACA;AACF,GAA8B;AAC5B,QAAM,UAAU,MAAM;AACpB,QAAI,UAAU,SAASA,gBAAAA,mBAAmB,MAAM;AAC9C,uCAASC,oBAAAA,oBAAoB,EAAE,QAAQ,UAAU,QAAQC,WAAAA,mBAAA,CAAoB;AAC7E;AAAA,IACF;AACA;AAAA,EACF;AACA,SACEC,2BAAAA;AAAAA,IAAC;AAAA,IAAA;AAAA,MACC,eAAa,mBAAmB,OAAO;AAAA,MACvC,WAAU;AAAA,MAEV,UAAA;AAAA,QAAAA,2BAAAA,KAAC,OAAA,EAAI,WAAU,0BACb,UAAA;AAAA,UAAAC,2BAAAA,IAACC,YAAAA,mBAAA,EAAkB,WAAU,yBAAA,CAAyB;AAAA,UACtDF,2BAAAA,KAAC,OAAA,EAAI,WAAU,kBACb,UAAA;AAAA,YAAAC,+BAAC,OAAE,WAAU,yBACV,UAAA,YAAY,cAAc,mBAAmB,uCAChD;AAAA,2CACC,KAAA,EAAE,WAAU,4CAA4C,UAAA,kBAAkB,UAAU,QAAA,CAAQ;AAAA,UAAA,EAAA,CAC/F;AAAA,QAAA,GACF;AAAA,QACAA,2BAAAA,IAAC,SAAI,WAAU,0CACZ,sBAAY,cACXA,2BAAAA,IAAC,OAAE,WAAU,0BAA0B,0BAAe,IAEtDD,2BAAAA,KAACG,OAAAA,UAAO,MAAK,MAAK,SAAQ,WAAU,UAAoB,SAAS,SAC/D,UAAA;AAAA,UAAAF,2BAAAA,IAACG,YAAAA,OAAA,EAAM;AAAA,UAAE;AAAA,QAAA,EAAA,CAEX,EAAA,CAEJ;AAAA,MAAA;AAAA,IAAA;AAAA,EAAA;AAGN;AAeO,MAAM,oCAAoCC,WAAAA,UAG/C;AAAA,EAHK;AAAA;AAIL,iCAA0C,EAAE,UAAU,OAAO,UAAU,KAAK,MAAM,SAAA;AAAA;AAAA,EAElF,OAAO,2BAAsE;AAC3E,WAAO,EAAE,UAAU,KAAA;AAAA,EACrB;AAAA,EAEA,OAAO,yBACL,OACA,OACkD;AAClD,WAAO,MAAM,aAAa,MAAM,WAAW,OAAO,EAAE,UAAU,OAAO,UAAU,MAAM,SAAA;AAAA,EACvF;AAAA,EAEA,kBAAkB,OAAgB,MAAuB;AACvD,YAAQ,MAAM,oDAAoD,OAAO,KAAK,cAAc;AAAA,EAC9F;AAAA,EAEA,SAAoB;AAClB,WAAO,KAAK,MAAM,WAAW,KAAK,MAAM,WAAW,KAAK,MAAM;AAAA,EAChE;AACF;;;"}
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
import { type TypedInterruptPayload } from '../../agent-runtime/src/typed-interrupts';
|
|
2
|
+
import { Component, type ErrorInfo, type ReactNode } from 'react';
|
|
3
|
+
import type { TypedInterruptAnswer } from './typed-interrupt-types';
|
|
4
|
+
export interface TypedInterruptNoticeProps {
|
|
5
|
+
interrupt: TypedInterruptPayload;
|
|
6
|
+
/** The park's message as the engine shows it (its timeout suffix gone once the timer stopped). */
|
|
7
|
+
displayMessage: string;
|
|
8
|
+
/**
|
|
9
|
+
* `read-only`: a viewer without edit rights sees the park's message and who
|
|
10
|
+
* answers it. `render-failed`: the card threw; the message and the one
|
|
11
|
+
* honest answer, a cancel.
|
|
12
|
+
*/
|
|
13
|
+
variant: 'read-only' | 'render-failed';
|
|
14
|
+
readOnlyNotice?: ReactNode;
|
|
15
|
+
disabled?: boolean;
|
|
16
|
+
resume?: (value: TypedInterruptAnswer) => void;
|
|
17
|
+
cancel?: () => void;
|
|
18
|
+
}
|
|
19
|
+
/**
|
|
20
|
+
* What the typed slot shows when a card cannot (Olympus's
|
|
21
|
+
* `TypedInterruptNotice`): never a generic answer, which a typed raiser's
|
|
22
|
+
* resume model would refuse. The only answer every raiser reads as a clean
|
|
23
|
+
* decline is a cancel (`FormCancelledError`), and for a tool-raised approval,
|
|
24
|
+
* whose model takes only approve or reject, a reject.
|
|
25
|
+
*/
|
|
26
|
+
export declare function TypedInterruptNotice({ interrupt, displayMessage, variant, readOnlyNotice, disabled, resume, cancel, }: TypedInterruptNoticeProps): import("react").JSX.Element;
|
|
27
|
+
interface TypedInterruptErrorBoundaryProps {
|
|
28
|
+
/** A change here (a new park) clears a caught error so the next card renders. */
|
|
29
|
+
resetKey: string | undefined;
|
|
30
|
+
fallback: ReactNode;
|
|
31
|
+
children: ReactNode;
|
|
32
|
+
}
|
|
33
|
+
interface TypedInterruptErrorBoundaryState {
|
|
34
|
+
hasError: boolean;
|
|
35
|
+
resetKey: string | undefined;
|
|
36
|
+
}
|
|
37
|
+
/** A card that throws never takes the chat with it: the fallback stands in until the next park. */
|
|
38
|
+
export declare class TypedInterruptErrorBoundary extends Component<TypedInterruptErrorBoundaryProps, TypedInterruptErrorBoundaryState> {
|
|
39
|
+
state: TypedInterruptErrorBoundaryState;
|
|
40
|
+
static getDerivedStateFromError(): Partial<TypedInterruptErrorBoundaryState>;
|
|
41
|
+
static getDerivedStateFromProps(props: TypedInterruptErrorBoundaryProps, state: TypedInterruptErrorBoundaryState): Partial<TypedInterruptErrorBoundaryState> | null;
|
|
42
|
+
componentDidCatch(error: unknown, info: ErrorInfo): void;
|
|
43
|
+
render(): ReactNode;
|
|
44
|
+
}
|
|
45
|
+
export {};
|
|
@@ -0,0 +1,70 @@
|
|
|
1
|
+
var __defProp = Object.defineProperty;
|
|
2
|
+
var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
|
|
3
|
+
var __publicField = (obj, key, value) => __defNormalProp(obj, typeof key !== "symbol" ? key + "" : key, value);
|
|
4
|
+
import { jsxs, jsx } from "react/jsx-runtime";
|
|
5
|
+
import { TypedInterruptType } from "../../agent-runtime/src/typed-interrupts.js";
|
|
6
|
+
import { typedApprovalResume } from "../../agent-runtime/src/typed-interrupt-kinds.js";
|
|
7
|
+
import { TriangleAlertIcon, XIcon } from "lucide-react";
|
|
8
|
+
import { Component } from "react";
|
|
9
|
+
import { Button } from "../../ui/button.js";
|
|
10
|
+
import { HITL_REJECT_REASON } from "../../agent-runtime/src/interrupts.js";
|
|
11
|
+
function TypedInterruptNotice({
|
|
12
|
+
interrupt,
|
|
13
|
+
displayMessage,
|
|
14
|
+
variant,
|
|
15
|
+
readOnlyNotice = "Waiting for someone with edit access to respond.",
|
|
16
|
+
disabled = false,
|
|
17
|
+
resume,
|
|
18
|
+
cancel
|
|
19
|
+
}) {
|
|
20
|
+
const decline = () => {
|
|
21
|
+
if (interrupt.type === TypedInterruptType.HITL) {
|
|
22
|
+
resume == null ? void 0 : resume(typedApprovalResume({ action: "reject", reason: HITL_REJECT_REASON }));
|
|
23
|
+
return;
|
|
24
|
+
}
|
|
25
|
+
cancel == null ? void 0 : cancel();
|
|
26
|
+
};
|
|
27
|
+
return /* @__PURE__ */ jsxs(
|
|
28
|
+
"div",
|
|
29
|
+
{
|
|
30
|
+
"data-testid": `typed-interrupt-${variant}`,
|
|
31
|
+
className: "w-full rounded-2xl border border-amber-300 bg-amber-50 px-4 py-3 text-amber-900",
|
|
32
|
+
children: [
|
|
33
|
+
/* @__PURE__ */ jsxs("div", { className: "flex items-start gap-3", children: [
|
|
34
|
+
/* @__PURE__ */ jsx(TriangleAlertIcon, { className: "mt-0.5 size-4 shrink-0" }),
|
|
35
|
+
/* @__PURE__ */ jsxs("div", { className: "min-w-0 flex-1", children: [
|
|
36
|
+
/* @__PURE__ */ jsx("p", { className: "font-semibold text-sm", children: variant === "read-only" ? "Input required" : "This request could not be displayed" }),
|
|
37
|
+
/* @__PURE__ */ jsx("p", { className: "pt-1 text-amber-800 text-sm leading-snug", children: displayMessage || interrupt.message })
|
|
38
|
+
] })
|
|
39
|
+
] }),
|
|
40
|
+
/* @__PURE__ */ jsx("div", { className: "flex flex-wrap items-center gap-2 pt-3", children: variant === "read-only" ? /* @__PURE__ */ jsx("p", { className: "text-amber-800 text-sm", children: readOnlyNotice }) : /* @__PURE__ */ jsxs(Button, { size: "sm", variant: "outline", disabled, onClick: decline, children: [
|
|
41
|
+
/* @__PURE__ */ jsx(XIcon, {}),
|
|
42
|
+
"Cancel request"
|
|
43
|
+
] }) })
|
|
44
|
+
]
|
|
45
|
+
}
|
|
46
|
+
);
|
|
47
|
+
}
|
|
48
|
+
class TypedInterruptErrorBoundary extends Component {
|
|
49
|
+
constructor() {
|
|
50
|
+
super(...arguments);
|
|
51
|
+
__publicField(this, "state", { hasError: false, resetKey: this.props.resetKey });
|
|
52
|
+
}
|
|
53
|
+
static getDerivedStateFromError() {
|
|
54
|
+
return { hasError: true };
|
|
55
|
+
}
|
|
56
|
+
static getDerivedStateFromProps(props, state) {
|
|
57
|
+
return props.resetKey === state.resetKey ? null : { hasError: false, resetKey: props.resetKey };
|
|
58
|
+
}
|
|
59
|
+
componentDidCatch(error, info) {
|
|
60
|
+
console.error("[athena] a typed interrupt card failed to render", error, info.componentStack);
|
|
61
|
+
}
|
|
62
|
+
render() {
|
|
63
|
+
return this.state.hasError ? this.props.fallback : this.props.children;
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
export {
|
|
67
|
+
TypedInterruptErrorBoundary,
|
|
68
|
+
TypedInterruptNotice
|
|
69
|
+
};
|
|
70
|
+
//# sourceMappingURL=typed-interrupt-notice.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"typed-interrupt-notice.js","sources":["../../../src/chat/typed-interrupts/typed-interrupt-notice.tsx"],"sourcesContent":["import { HITL_REJECT_REASON } from '@athenaintel/agent-runtime';\nimport { type TypedInterruptPayload, TypedInterruptType } from '@athenaintel/agent-runtime/typed-interrupts';\nimport { typedApprovalResume } from '@athenaintel/agent-runtime/typed-interrupt-kinds';\nimport { TriangleAlertIcon, XIcon } from 'lucide-react';\nimport { Component, type ErrorInfo, type ReactNode } from 'react';\nimport { Button } from '../../ui/button';\nimport type { TypedInterruptAnswer } from './typed-interrupt-types';\n\nexport interface TypedInterruptNoticeProps {\n interrupt: TypedInterruptPayload;\n /** The park's message as the engine shows it (its timeout suffix gone once the timer stopped). */\n displayMessage: string;\n /**\n * `read-only`: a viewer without edit rights sees the park's message and who\n * answers it. `render-failed`: the card threw; the message and the one\n * honest answer, a cancel.\n */\n variant: 'read-only' | 'render-failed';\n readOnlyNotice?: ReactNode;\n disabled?: boolean;\n resume?: (value: TypedInterruptAnswer) => void;\n cancel?: () => void;\n}\n\n/**\n * What the typed slot shows when a card cannot (Olympus's\n * `TypedInterruptNotice`): never a generic answer, which a typed raiser's\n * resume model would refuse. The only answer every raiser reads as a clean\n * decline is a cancel (`FormCancelledError`), and for a tool-raised approval,\n * whose model takes only approve or reject, a reject.\n */\nexport function TypedInterruptNotice({\n interrupt,\n displayMessage,\n variant,\n readOnlyNotice = 'Waiting for someone with edit access to respond.',\n disabled = false,\n resume,\n cancel,\n}: TypedInterruptNoticeProps) {\n const decline = () => {\n if (interrupt.type === TypedInterruptType.HITL) {\n resume?.(typedApprovalResume({ action: 'reject', reason: HITL_REJECT_REASON }));\n return;\n }\n cancel?.();\n };\n return (\n <div\n data-testid={`typed-interrupt-${variant}`}\n className=\"w-full rounded-2xl border border-amber-300 bg-amber-50 px-4 py-3 text-amber-900\"\n >\n <div className=\"flex items-start gap-3\">\n <TriangleAlertIcon className=\"mt-0.5 size-4 shrink-0\" />\n <div className=\"min-w-0 flex-1\">\n <p className=\"font-semibold text-sm\">\n {variant === 'read-only' ? 'Input required' : 'This request could not be displayed'}\n </p>\n <p className=\"pt-1 text-amber-800 text-sm leading-snug\">{displayMessage || interrupt.message}</p>\n </div>\n </div>\n <div className=\"flex flex-wrap items-center gap-2 pt-3\">\n {variant === 'read-only' ? (\n <p className=\"text-amber-800 text-sm\">{readOnlyNotice}</p>\n ) : (\n <Button size=\"sm\" variant=\"outline\" disabled={disabled} onClick={decline}>\n <XIcon />\n Cancel request\n </Button>\n )}\n </div>\n </div>\n );\n}\n\ninterface TypedInterruptErrorBoundaryProps {\n /** A change here (a new park) clears a caught error so the next card renders. */\n resetKey: string | undefined;\n fallback: ReactNode;\n children: ReactNode;\n}\n\ninterface TypedInterruptErrorBoundaryState {\n hasError: boolean;\n resetKey: string | undefined;\n}\n\n/** A card that throws never takes the chat with it: the fallback stands in until the next park. */\nexport class TypedInterruptErrorBoundary extends Component<\n TypedInterruptErrorBoundaryProps,\n TypedInterruptErrorBoundaryState\n> {\n state: TypedInterruptErrorBoundaryState = { hasError: false, resetKey: this.props.resetKey };\n\n static getDerivedStateFromError(): Partial<TypedInterruptErrorBoundaryState> {\n return { hasError: true };\n }\n\n static getDerivedStateFromProps(\n props: TypedInterruptErrorBoundaryProps,\n state: TypedInterruptErrorBoundaryState,\n ): Partial<TypedInterruptErrorBoundaryState> | null {\n return props.resetKey === state.resetKey ? null : { hasError: false, resetKey: props.resetKey };\n }\n\n componentDidCatch(error: unknown, info: ErrorInfo): void {\n console.error('[athena] a typed interrupt card failed to render', error, info.componentStack);\n }\n\n render(): ReactNode {\n return this.state.hasError ? this.props.fallback : this.props.children;\n }\n}\n"],"names":[],"mappings":";;;;;;;;;;AA+BO,SAAS,qBAAqB;AAAA,EACnC;AAAA,EACA;AAAA,EACA;AAAA,EACA,iBAAiB;AAAA,EACjB,WAAW;AAAA,EACX;AAAA,EACA;AACF,GAA8B;AAC5B,QAAM,UAAU,MAAM;AACpB,QAAI,UAAU,SAAS,mBAAmB,MAAM;AAC9C,uCAAS,oBAAoB,EAAE,QAAQ,UAAU,QAAQ,mBAAA,CAAoB;AAC7E;AAAA,IACF;AACA;AAAA,EACF;AACA,SACE;AAAA,IAAC;AAAA,IAAA;AAAA,MACC,eAAa,mBAAmB,OAAO;AAAA,MACvC,WAAU;AAAA,MAEV,UAAA;AAAA,QAAA,qBAAC,OAAA,EAAI,WAAU,0BACb,UAAA;AAAA,UAAA,oBAAC,mBAAA,EAAkB,WAAU,yBAAA,CAAyB;AAAA,UACtD,qBAAC,OAAA,EAAI,WAAU,kBACb,UAAA;AAAA,YAAA,oBAAC,OAAE,WAAU,yBACV,UAAA,YAAY,cAAc,mBAAmB,uCAChD;AAAA,gCACC,KAAA,EAAE,WAAU,4CAA4C,UAAA,kBAAkB,UAAU,QAAA,CAAQ;AAAA,UAAA,EAAA,CAC/F;AAAA,QAAA,GACF;AAAA,QACA,oBAAC,SAAI,WAAU,0CACZ,sBAAY,cACX,oBAAC,OAAE,WAAU,0BAA0B,0BAAe,IAEtD,qBAAC,UAAO,MAAK,MAAK,SAAQ,WAAU,UAAoB,SAAS,SAC/D,UAAA;AAAA,UAAA,oBAAC,OAAA,EAAM;AAAA,UAAE;AAAA,QAAA,EAAA,CAEX,EAAA,CAEJ;AAAA,MAAA;AAAA,IAAA;AAAA,EAAA;AAGN;AAeO,MAAM,oCAAoC,UAG/C;AAAA,EAHK;AAAA;AAIL,iCAA0C,EAAE,UAAU,OAAO,UAAU,KAAK,MAAM,SAAA;AAAA;AAAA,EAElF,OAAO,2BAAsE;AAC3E,WAAO,EAAE,UAAU,KAAA;AAAA,EACrB;AAAA,EAEA,OAAO,yBACL,OACA,OACkD;AAClD,WAAO,MAAM,aAAa,MAAM,WAAW,OAAO,EAAE,UAAU,OAAO,UAAU,MAAM,SAAA;AAAA,EACvF;AAAA,EAEA,kBAAkB,OAAgB,MAAuB;AACvD,YAAQ,MAAM,oDAAoD,OAAO,KAAK,cAAc;AAAA,EAC9F;AAAA,EAEA,SAAoB;AAClB,WAAO,KAAK,MAAM,WAAW,KAAK,MAAM,WAAW,KAAK,MAAM;AAAA,EAChE;AACF;"}
|
|
@@ -0,0 +1,76 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
|
|
3
|
+
const jsxRuntime = require("react/jsx-runtime");
|
|
4
|
+
const require$$0 = require("react");
|
|
5
|
+
const typedInterruptBody = require("./typed-interrupt-body.cjs");
|
|
6
|
+
const typedInterruptNotice = require("./typed-interrupt-notice.cjs");
|
|
7
|
+
const useStatewireTypedInterrupt = require("./use-statewire-typed-interrupt.cjs");
|
|
8
|
+
const cnfast = require("cnfast");
|
|
9
|
+
const TypedInterruptPanel = ({
|
|
10
|
+
classNames,
|
|
11
|
+
readOnly = false,
|
|
12
|
+
readOnlyNotice,
|
|
13
|
+
isHandledElsewhere,
|
|
14
|
+
confirmDecision,
|
|
15
|
+
onResumeRejected,
|
|
16
|
+
pendingResumeGraceMs
|
|
17
|
+
}) => {
|
|
18
|
+
const engine = useStatewireTypedInterrupt.useStatewireTypedInterrupt({ confirmDecision, onResumeRejected, pendingResumeGraceMs });
|
|
19
|
+
const { interrupt, request, requestId } = engine;
|
|
20
|
+
const handledRef = require$$0.useRef({
|
|
21
|
+
requestId: void 0,
|
|
22
|
+
handled: false
|
|
23
|
+
});
|
|
24
|
+
let handledElsewhere = false;
|
|
25
|
+
if (request) {
|
|
26
|
+
handledElsewhere = (isHandledElsewhere == null ? void 0 : isHandledElsewhere({ request, hitl: null, actionRequests: [] })) ?? false;
|
|
27
|
+
handledRef.current = { requestId, handled: handledElsewhere };
|
|
28
|
+
} else if (requestId !== void 0 && handledRef.current.requestId === requestId) {
|
|
29
|
+
handledElsewhere = handledRef.current.handled;
|
|
30
|
+
}
|
|
31
|
+
if (!interrupt || engine.isHiddenByRunning || handledElsewhere) return null;
|
|
32
|
+
const notice = (variant) => /* @__PURE__ */ jsxRuntime.jsx(
|
|
33
|
+
typedInterruptNotice.TypedInterruptNotice,
|
|
34
|
+
{
|
|
35
|
+
interrupt,
|
|
36
|
+
displayMessage: engine.displayMessage,
|
|
37
|
+
variant,
|
|
38
|
+
readOnlyNotice,
|
|
39
|
+
disabled: engine.isLoading || engine.isConversationStreaming,
|
|
40
|
+
resume: engine.resume,
|
|
41
|
+
cancel: engine.cancel
|
|
42
|
+
}
|
|
43
|
+
);
|
|
44
|
+
return /* @__PURE__ */ jsxRuntime.jsxs(
|
|
45
|
+
"section",
|
|
46
|
+
{
|
|
47
|
+
"aria-label": "Input required",
|
|
48
|
+
"data-testid": "typed-interrupt-card",
|
|
49
|
+
"data-interrupt-source": interrupt.source,
|
|
50
|
+
className: cnfast.cn("aui-approval-card aui-typed-interrupt-card flex w-full flex-col gap-2", classNames == null ? void 0 : classNames.root),
|
|
51
|
+
children: [
|
|
52
|
+
readOnly ? notice("read-only") : /* @__PURE__ */ jsxRuntime.jsx(typedInterruptNotice.TypedInterruptErrorBoundary, { resetKey: requestId, fallback: notice("render-failed"), children: /* @__PURE__ */ jsxRuntime.jsx(
|
|
53
|
+
typedInterruptBody.TypedInterruptBody,
|
|
54
|
+
{
|
|
55
|
+
interrupt,
|
|
56
|
+
resume: engine.resume,
|
|
57
|
+
cancel: engine.cancel,
|
|
58
|
+
engine
|
|
59
|
+
},
|
|
60
|
+
requestId
|
|
61
|
+
) }),
|
|
62
|
+
engine.failure && !readOnly ? /* @__PURE__ */ jsxRuntime.jsx(
|
|
63
|
+
"p",
|
|
64
|
+
{
|
|
65
|
+
role: "alert",
|
|
66
|
+
"data-testid": "typed-interrupt-error",
|
|
67
|
+
className: "rounded-md border border-destructive/30 bg-destructive/5 px-3 py-2 text-destructive text-sm",
|
|
68
|
+
children: engine.failure
|
|
69
|
+
}
|
|
70
|
+
) : null
|
|
71
|
+
]
|
|
72
|
+
}
|
|
73
|
+
);
|
|
74
|
+
};
|
|
75
|
+
exports.TypedInterruptPanel = TypedInterruptPanel;
|
|
76
|
+
//# sourceMappingURL=typed-interrupt-panel.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"typed-interrupt-panel.cjs","sources":["../../../src/chat/typed-interrupts/typed-interrupt-panel.tsx"],"sourcesContent":["import { type FC, useRef } from 'react';\nimport { cn } from '../../lib/utils';\nimport type { StatewireTypedInterruptCardProps } from './StatewireTypedInterruptCard';\nimport { TypedInterruptBody } from './typed-interrupt-body';\nimport { TypedInterruptErrorBoundary, TypedInterruptNotice } from './typed-interrupt-notice';\nimport { useStatewireTypedInterrupt } from './use-statewire-typed-interrupt';\n\n/**\n * What `StatewireTypedInterruptCard` loads on the first typed park: the engine\n * (`useStatewireTypedInterrupt`), the card for the park's kind\n * (`typed-interrupt-body.tsx`), the viewer's notice and the render-failure\n * fallback, and the host's reason when it refuses an answer.\n *\n * Mount only inside a statewire aui scope.\n */\nexport const TypedInterruptPanel: FC<StatewireTypedInterruptCardProps> = ({\n classNames,\n readOnly = false,\n readOnlyNotice,\n isHandledElsewhere,\n confirmDecision,\n onResumeRejected,\n pendingResumeGraceMs,\n}) => {\n const engine = useStatewireTypedInterrupt({ confirmDecision, onResumeRejected, pendingResumeGraceMs });\n const { interrupt, request, requestId } = engine;\n\n // Whether another surface answers this park: asked while it is live, and\n // kept while its answer is held (the request folds away until the verdict).\n const handledRef = useRef<{ requestId: string | undefined; handled: boolean }>({\n requestId: undefined,\n handled: false,\n });\n let handledElsewhere = false;\n if (request) {\n handledElsewhere = isHandledElsewhere?.({ request, hitl: null, actionRequests: [] }) ?? false;\n handledRef.current = { requestId, handled: handledElsewhere };\n } else if (requestId !== undefined && handledRef.current.requestId === requestId) {\n handledElsewhere = handledRef.current.handled;\n }\n\n if (!interrupt || engine.isHiddenByRunning || handledElsewhere) return null;\n\n const notice = (variant: 'read-only' | 'render-failed') => (\n <TypedInterruptNotice\n interrupt={interrupt}\n displayMessage={engine.displayMessage}\n variant={variant}\n readOnlyNotice={readOnlyNotice}\n disabled={engine.isLoading || engine.isConversationStreaming}\n resume={engine.resume}\n cancel={engine.cancel}\n />\n );\n\n return (\n <section\n aria-label=\"Input required\"\n data-testid=\"typed-interrupt-card\"\n data-interrupt-source={interrupt.source}\n // The approval card's class: the waiting-on-you banner scrolls to it.\n className={cn('aui-approval-card aui-typed-interrupt-card flex w-full flex-col gap-2', classNames?.root)}\n >\n {readOnly ? (\n notice('read-only')\n ) : (\n <TypedInterruptErrorBoundary resetKey={requestId} fallback={notice('render-failed')}>\n {/* One card per park: the next one (two file requests parked together)\n never inherits what the person did in this one. */}\n <TypedInterruptBody\n key={requestId}\n interrupt={interrupt}\n resume={engine.resume}\n cancel={engine.cancel}\n engine={engine}\n />\n </TypedInterruptErrorBoundary>\n )}\n {engine.failure && !readOnly ? (\n <p\n role=\"alert\"\n data-testid=\"typed-interrupt-error\"\n className=\"rounded-md border border-destructive/30 bg-destructive/5 px-3 py-2 text-destructive text-sm\"\n >\n {engine.failure}\n </p>\n ) : null}\n </section>\n );\n};\n"],"names":["useStatewireTypedInterrupt","useRef","jsx","TypedInterruptNotice","jsxs","cn","TypedInterruptErrorBoundary","TypedInterruptBody"],"mappings":";;;;;;;;AAeO,MAAM,sBAA4D,CAAC;AAAA,EACxE;AAAA,EACA,WAAW;AAAA,EACX;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,MAAM;AACJ,QAAM,SAASA,2BAAAA,2BAA2B,EAAE,iBAAiB,kBAAkB,sBAAsB;AACrG,QAAM,EAAE,WAAW,SAAS,UAAA,IAAc;AAI1C,QAAM,aAAaC,WAAAA,OAA4D;AAAA,IAC7E,WAAW;AAAA,IACX,SAAS;AAAA,EAAA,CACV;AACD,MAAI,mBAAmB;AACvB,MAAI,SAAS;AACX,wBAAmB,yDAAqB,EAAE,SAAS,MAAM,MAAM,gBAAgB,GAAC,OAAQ;AACxF,eAAW,UAAU,EAAE,WAAW,SAAS,iBAAA;AAAA,EAC7C,WAAW,cAAc,UAAa,WAAW,QAAQ,cAAc,WAAW;AAChF,uBAAmB,WAAW,QAAQ;AAAA,EACxC;AAEA,MAAI,CAAC,aAAa,OAAO,qBAAqB,iBAAkB,QAAO;AAEvE,QAAM,SAAS,CAAC,YACdC,2BAAAA;AAAAA,IAACC,qBAAAA;AAAAA,IAAA;AAAA,MACC;AAAA,MACA,gBAAgB,OAAO;AAAA,MACvB;AAAA,MACA;AAAA,MACA,UAAU,OAAO,aAAa,OAAO;AAAA,MACrC,QAAQ,OAAO;AAAA,MACf,QAAQ,OAAO;AAAA,IAAA;AAAA,EAAA;AAInB,SACEC,2BAAAA;AAAAA,IAAC;AAAA,IAAA;AAAA,MACC,cAAW;AAAA,MACX,eAAY;AAAA,MACZ,yBAAuB,UAAU;AAAA,MAEjC,WAAWC,OAAAA,GAAG,yEAAyE,yCAAY,IAAI;AAAA,MAEtG,UAAA;AAAA,QAAA,WACC,OAAO,WAAW,IAElBH,2BAAAA,IAACI,qBAAAA,6BAAA,EAA4B,UAAU,WAAW,UAAU,OAAO,eAAe,GAGhF,UAAAJ,2BAAAA;AAAAA,UAACK,mBAAAA;AAAAA,UAAA;AAAA,YAEC;AAAA,YACA,QAAQ,OAAO;AAAA,YACf,QAAQ,OAAO;AAAA,YACf;AAAA,UAAA;AAAA,UAJK;AAAA,QAAA,GAMT;AAAA,QAED,OAAO,WAAW,CAAC,WAClBL,2BAAAA;AAAAA,UAAC;AAAA,UAAA;AAAA,YACC,MAAK;AAAA,YACL,eAAY;AAAA,YACZ,WAAU;AAAA,YAET,UAAA,OAAO;AAAA,UAAA;AAAA,QAAA,IAER;AAAA,MAAA;AAAA,IAAA;AAAA,EAAA;AAGV;;"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import { type FC } from 'react';
|
|
2
|
+
import type { StatewireTypedInterruptCardProps } from './StatewireTypedInterruptCard';
|
|
3
|
+
/**
|
|
4
|
+
* What `StatewireTypedInterruptCard` loads on the first typed park: the engine
|
|
5
|
+
* (`useStatewireTypedInterrupt`), the card for the park's kind
|
|
6
|
+
* (`typed-interrupt-body.tsx`), the viewer's notice and the render-failure
|
|
7
|
+
* fallback, and the host's reason when it refuses an answer.
|
|
8
|
+
*
|
|
9
|
+
* Mount only inside a statewire aui scope.
|
|
10
|
+
*/
|
|
11
|
+
export declare const TypedInterruptPanel: FC<StatewireTypedInterruptCardProps>;
|
|
@@ -0,0 +1,76 @@
|
|
|
1
|
+
import { jsxs, jsx } from "react/jsx-runtime";
|
|
2
|
+
import { useRef } from "react";
|
|
3
|
+
import { TypedInterruptBody } from "./typed-interrupt-body.js";
|
|
4
|
+
import { TypedInterruptErrorBoundary, TypedInterruptNotice } from "./typed-interrupt-notice.js";
|
|
5
|
+
import { useStatewireTypedInterrupt } from "./use-statewire-typed-interrupt.js";
|
|
6
|
+
import { cn } from "cnfast";
|
|
7
|
+
const TypedInterruptPanel = ({
|
|
8
|
+
classNames,
|
|
9
|
+
readOnly = false,
|
|
10
|
+
readOnlyNotice,
|
|
11
|
+
isHandledElsewhere,
|
|
12
|
+
confirmDecision,
|
|
13
|
+
onResumeRejected,
|
|
14
|
+
pendingResumeGraceMs
|
|
15
|
+
}) => {
|
|
16
|
+
const engine = useStatewireTypedInterrupt({ confirmDecision, onResumeRejected, pendingResumeGraceMs });
|
|
17
|
+
const { interrupt, request, requestId } = engine;
|
|
18
|
+
const handledRef = useRef({
|
|
19
|
+
requestId: void 0,
|
|
20
|
+
handled: false
|
|
21
|
+
});
|
|
22
|
+
let handledElsewhere = false;
|
|
23
|
+
if (request) {
|
|
24
|
+
handledElsewhere = (isHandledElsewhere == null ? void 0 : isHandledElsewhere({ request, hitl: null, actionRequests: [] })) ?? false;
|
|
25
|
+
handledRef.current = { requestId, handled: handledElsewhere };
|
|
26
|
+
} else if (requestId !== void 0 && handledRef.current.requestId === requestId) {
|
|
27
|
+
handledElsewhere = handledRef.current.handled;
|
|
28
|
+
}
|
|
29
|
+
if (!interrupt || engine.isHiddenByRunning || handledElsewhere) return null;
|
|
30
|
+
const notice = (variant) => /* @__PURE__ */ jsx(
|
|
31
|
+
TypedInterruptNotice,
|
|
32
|
+
{
|
|
33
|
+
interrupt,
|
|
34
|
+
displayMessage: engine.displayMessage,
|
|
35
|
+
variant,
|
|
36
|
+
readOnlyNotice,
|
|
37
|
+
disabled: engine.isLoading || engine.isConversationStreaming,
|
|
38
|
+
resume: engine.resume,
|
|
39
|
+
cancel: engine.cancel
|
|
40
|
+
}
|
|
41
|
+
);
|
|
42
|
+
return /* @__PURE__ */ jsxs(
|
|
43
|
+
"section",
|
|
44
|
+
{
|
|
45
|
+
"aria-label": "Input required",
|
|
46
|
+
"data-testid": "typed-interrupt-card",
|
|
47
|
+
"data-interrupt-source": interrupt.source,
|
|
48
|
+
className: cn("aui-approval-card aui-typed-interrupt-card flex w-full flex-col gap-2", classNames == null ? void 0 : classNames.root),
|
|
49
|
+
children: [
|
|
50
|
+
readOnly ? notice("read-only") : /* @__PURE__ */ jsx(TypedInterruptErrorBoundary, { resetKey: requestId, fallback: notice("render-failed"), children: /* @__PURE__ */ jsx(
|
|
51
|
+
TypedInterruptBody,
|
|
52
|
+
{
|
|
53
|
+
interrupt,
|
|
54
|
+
resume: engine.resume,
|
|
55
|
+
cancel: engine.cancel,
|
|
56
|
+
engine
|
|
57
|
+
},
|
|
58
|
+
requestId
|
|
59
|
+
) }),
|
|
60
|
+
engine.failure && !readOnly ? /* @__PURE__ */ jsx(
|
|
61
|
+
"p",
|
|
62
|
+
{
|
|
63
|
+
role: "alert",
|
|
64
|
+
"data-testid": "typed-interrupt-error",
|
|
65
|
+
className: "rounded-md border border-destructive/30 bg-destructive/5 px-3 py-2 text-destructive text-sm",
|
|
66
|
+
children: engine.failure
|
|
67
|
+
}
|
|
68
|
+
) : null
|
|
69
|
+
]
|
|
70
|
+
}
|
|
71
|
+
);
|
|
72
|
+
};
|
|
73
|
+
export {
|
|
74
|
+
TypedInterruptPanel
|
|
75
|
+
};
|
|
76
|
+
//# sourceMappingURL=typed-interrupt-panel.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"typed-interrupt-panel.js","sources":["../../../src/chat/typed-interrupts/typed-interrupt-panel.tsx"],"sourcesContent":["import { type FC, useRef } from 'react';\nimport { cn } from '../../lib/utils';\nimport type { StatewireTypedInterruptCardProps } from './StatewireTypedInterruptCard';\nimport { TypedInterruptBody } from './typed-interrupt-body';\nimport { TypedInterruptErrorBoundary, TypedInterruptNotice } from './typed-interrupt-notice';\nimport { useStatewireTypedInterrupt } from './use-statewire-typed-interrupt';\n\n/**\n * What `StatewireTypedInterruptCard` loads on the first typed park: the engine\n * (`useStatewireTypedInterrupt`), the card for the park's kind\n * (`typed-interrupt-body.tsx`), the viewer's notice and the render-failure\n * fallback, and the host's reason when it refuses an answer.\n *\n * Mount only inside a statewire aui scope.\n */\nexport const TypedInterruptPanel: FC<StatewireTypedInterruptCardProps> = ({\n classNames,\n readOnly = false,\n readOnlyNotice,\n isHandledElsewhere,\n confirmDecision,\n onResumeRejected,\n pendingResumeGraceMs,\n}) => {\n const engine = useStatewireTypedInterrupt({ confirmDecision, onResumeRejected, pendingResumeGraceMs });\n const { interrupt, request, requestId } = engine;\n\n // Whether another surface answers this park: asked while it is live, and\n // kept while its answer is held (the request folds away until the verdict).\n const handledRef = useRef<{ requestId: string | undefined; handled: boolean }>({\n requestId: undefined,\n handled: false,\n });\n let handledElsewhere = false;\n if (request) {\n handledElsewhere = isHandledElsewhere?.({ request, hitl: null, actionRequests: [] }) ?? false;\n handledRef.current = { requestId, handled: handledElsewhere };\n } else if (requestId !== undefined && handledRef.current.requestId === requestId) {\n handledElsewhere = handledRef.current.handled;\n }\n\n if (!interrupt || engine.isHiddenByRunning || handledElsewhere) return null;\n\n const notice = (variant: 'read-only' | 'render-failed') => (\n <TypedInterruptNotice\n interrupt={interrupt}\n displayMessage={engine.displayMessage}\n variant={variant}\n readOnlyNotice={readOnlyNotice}\n disabled={engine.isLoading || engine.isConversationStreaming}\n resume={engine.resume}\n cancel={engine.cancel}\n />\n );\n\n return (\n <section\n aria-label=\"Input required\"\n data-testid=\"typed-interrupt-card\"\n data-interrupt-source={interrupt.source}\n // The approval card's class: the waiting-on-you banner scrolls to it.\n className={cn('aui-approval-card aui-typed-interrupt-card flex w-full flex-col gap-2', classNames?.root)}\n >\n {readOnly ? (\n notice('read-only')\n ) : (\n <TypedInterruptErrorBoundary resetKey={requestId} fallback={notice('render-failed')}>\n {/* One card per park: the next one (two file requests parked together)\n never inherits what the person did in this one. */}\n <TypedInterruptBody\n key={requestId}\n interrupt={interrupt}\n resume={engine.resume}\n cancel={engine.cancel}\n engine={engine}\n />\n </TypedInterruptErrorBoundary>\n )}\n {engine.failure && !readOnly ? (\n <p\n role=\"alert\"\n data-testid=\"typed-interrupt-error\"\n className=\"rounded-md border border-destructive/30 bg-destructive/5 px-3 py-2 text-destructive text-sm\"\n >\n {engine.failure}\n </p>\n ) : null}\n </section>\n );\n};\n"],"names":[],"mappings":";;;;;;AAeO,MAAM,sBAA4D,CAAC;AAAA,EACxE;AAAA,EACA,WAAW;AAAA,EACX;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,MAAM;AACJ,QAAM,SAAS,2BAA2B,EAAE,iBAAiB,kBAAkB,sBAAsB;AACrG,QAAM,EAAE,WAAW,SAAS,UAAA,IAAc;AAI1C,QAAM,aAAa,OAA4D;AAAA,IAC7E,WAAW;AAAA,IACX,SAAS;AAAA,EAAA,CACV;AACD,MAAI,mBAAmB;AACvB,MAAI,SAAS;AACX,wBAAmB,yDAAqB,EAAE,SAAS,MAAM,MAAM,gBAAgB,GAAC,OAAQ;AACxF,eAAW,UAAU,EAAE,WAAW,SAAS,iBAAA;AAAA,EAC7C,WAAW,cAAc,UAAa,WAAW,QAAQ,cAAc,WAAW;AAChF,uBAAmB,WAAW,QAAQ;AAAA,EACxC;AAEA,MAAI,CAAC,aAAa,OAAO,qBAAqB,iBAAkB,QAAO;AAEvE,QAAM,SAAS,CAAC,YACd;AAAA,IAAC;AAAA,IAAA;AAAA,MACC;AAAA,MACA,gBAAgB,OAAO;AAAA,MACvB;AAAA,MACA;AAAA,MACA,UAAU,OAAO,aAAa,OAAO;AAAA,MACrC,QAAQ,OAAO;AAAA,MACf,QAAQ,OAAO;AAAA,IAAA;AAAA,EAAA;AAInB,SACE;AAAA,IAAC;AAAA,IAAA;AAAA,MACC,cAAW;AAAA,MACX,eAAY;AAAA,MACZ,yBAAuB,UAAU;AAAA,MAEjC,WAAW,GAAG,yEAAyE,yCAAY,IAAI;AAAA,MAEtG,UAAA;AAAA,QAAA,WACC,OAAO,WAAW,IAElB,oBAAC,6BAAA,EAA4B,UAAU,WAAW,UAAU,OAAO,eAAe,GAGhF,UAAA;AAAA,UAAC;AAAA,UAAA;AAAA,YAEC;AAAA,YACA,QAAQ,OAAO;AAAA,YACf,QAAQ,OAAO;AAAA,YACf;AAAA,UAAA;AAAA,UAJK;AAAA,QAAA,GAMT;AAAA,QAED,OAAO,WAAW,CAAC,WAClB;AAAA,UAAC;AAAA,UAAA;AAAA,YACC,MAAK;AAAA,YACL,eAAY;AAAA,YACZ,WAAU;AAAA,YAET,UAAA,OAAO;AAAA,UAAA;AAAA,QAAA,IAER;AAAA,MAAA;AAAA,IAAA;AAAA,EAAA;AAGV;"}
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
import type { TypedInterruptPayload } from '../../agent-runtime/src/typed-interrupts';
|
|
2
|
+
/**
|
|
3
|
+
* The engine state a typed card renders from (`useStatewireTypedInterrupt`'s
|
|
4
|
+
* read side). The same fields as Olympus's `TypedInterruptEngineSlice`, so a
|
|
5
|
+
* host with an engine of its own can hand these cards its slice.
|
|
6
|
+
*/
|
|
7
|
+
export interface TypedInterruptEngineSlice {
|
|
8
|
+
/** The pending request's id: unique per park, the key for anything per park. */
|
|
9
|
+
requestId: string | undefined;
|
|
10
|
+
/** An answer is in flight, or its passkey check is open. */
|
|
11
|
+
isLoading: boolean;
|
|
12
|
+
/** The thread is running: the agent moved on, or is processing the answer. */
|
|
13
|
+
isConversationStreaming: boolean;
|
|
14
|
+
/** The backend's timer answers this park at a deadline (display only: the timer is the backend's). */
|
|
15
|
+
hasTimeout: boolean;
|
|
16
|
+
timeoutSeconds: number | null;
|
|
17
|
+
timeoutRemaining: number | null;
|
|
18
|
+
isTimedOut: boolean;
|
|
19
|
+
isTimeoutCancelled: boolean;
|
|
20
|
+
/**
|
|
21
|
+
* Whether `cancelTimeout` can stop the timer (agora keeps it per
|
|
22
|
+
* conversation, which the host must name). `false` keeps the countdown and
|
|
23
|
+
* hides Stop timer; absent reads as `true`.
|
|
24
|
+
*/
|
|
25
|
+
canCancelTimeout?: boolean;
|
|
26
|
+
/** Stop the timer for good (kept server-side), giving the person all the time they need. */
|
|
27
|
+
cancelTimeout: () => void | Promise<void>;
|
|
28
|
+
/** The park's message, without its timeout suffix once the timer is stopped. */
|
|
29
|
+
displayMessage: string;
|
|
30
|
+
/** The conversation the park belongs to, when the host names it (drafts and the timer need it). */
|
|
31
|
+
currentThreadId: string | null;
|
|
32
|
+
}
|
|
33
|
+
/** The value a card answers with: its kind's resume shape (the engine stamps the park on it). */
|
|
34
|
+
export type TypedInterruptAnswer = Readonly<Record<string, unknown>>;
|
|
35
|
+
/**
|
|
36
|
+
* What every typed card receives: the parked payload, the two ways to answer
|
|
37
|
+
* it, and the engine slice it renders from. Cards are pure renderers over
|
|
38
|
+
* these; the engine owns the request, the lock and the passkey check.
|
|
39
|
+
*/
|
|
40
|
+
export interface TypedInterruptCardProps {
|
|
41
|
+
interrupt: TypedInterruptPayload;
|
|
42
|
+
resume: (value: TypedInterruptAnswer) => void;
|
|
43
|
+
/** `{ action: 'cancel' }`: the raiser ends the interrupted operation. */
|
|
44
|
+
cancel: () => void;
|
|
45
|
+
engine: TypedInterruptEngineSlice;
|
|
46
|
+
}
|
|
@@ -0,0 +1,106 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
|
|
3
|
+
const reactQuery = require("@tanstack/react-query");
|
|
4
|
+
const require$$0 = require("react");
|
|
5
|
+
const useAthenaRestQuery = require("../../lib/use-athena-rest-query.cjs");
|
|
6
|
+
const typedInterruptGraphql = require("./typed-interrupt-graphql.cjs");
|
|
7
|
+
const DRAFT_SAVE_DEBOUNCE_MS = 2e3;
|
|
8
|
+
function draftQueryKey(conversation, interruptId) {
|
|
9
|
+
return [
|
|
10
|
+
"athena-sdk",
|
|
11
|
+
"interrupt-draft",
|
|
12
|
+
(conversation == null ? void 0 : conversation.auth.backendUrl) ?? "",
|
|
13
|
+
(conversation == null ? void 0 : conversation.principal) ?? "",
|
|
14
|
+
(conversation == null ? void 0 : conversation.threadId) ?? "",
|
|
15
|
+
interruptId
|
|
16
|
+
];
|
|
17
|
+
}
|
|
18
|
+
function useInterruptDraft({
|
|
19
|
+
conversation,
|
|
20
|
+
interruptId
|
|
21
|
+
}) {
|
|
22
|
+
const queryClient = useAthenaRestQuery.useAthenaQueryClient();
|
|
23
|
+
const { data, isFetching } = reactQuery.useQuery(
|
|
24
|
+
{
|
|
25
|
+
queryKey: draftQueryKey(conversation, interruptId),
|
|
26
|
+
queryFn: ({ signal }) => conversation ? typedInterruptGraphql.readInterruptDraft(conversation, interruptId, signal) : null,
|
|
27
|
+
enabled: conversation !== null,
|
|
28
|
+
staleTime: 0,
|
|
29
|
+
refetchOnMount: "always",
|
|
30
|
+
retry: false,
|
|
31
|
+
refetchOnWindowFocus: false
|
|
32
|
+
},
|
|
33
|
+
queryClient
|
|
34
|
+
);
|
|
35
|
+
return { draft: conversation ? data : null, isLoading: conversation !== null && isFetching };
|
|
36
|
+
}
|
|
37
|
+
function useInterruptDraftSave({
|
|
38
|
+
conversation,
|
|
39
|
+
interruptId,
|
|
40
|
+
payload,
|
|
41
|
+
enabled
|
|
42
|
+
}) {
|
|
43
|
+
const queryClient = useAthenaRestQuery.useAthenaQueryClient();
|
|
44
|
+
const [status, setStatus] = require$$0.useState("idle");
|
|
45
|
+
const { mutate } = reactQuery.useMutation(
|
|
46
|
+
{
|
|
47
|
+
mutationKey: ["athena-sdk", "interrupt-draft-save"],
|
|
48
|
+
mutationFn: (variables) => typedInterruptGraphql.saveInterruptDraft(variables.conversation, variables.interruptId, variables.answers),
|
|
49
|
+
retry: false
|
|
50
|
+
},
|
|
51
|
+
queryClient
|
|
52
|
+
);
|
|
53
|
+
const latest = require$$0.useRef({ conversation, interruptId, payload });
|
|
54
|
+
latest.current = { conversation, interruptId, payload };
|
|
55
|
+
const timerRef = require$$0.useRef(null);
|
|
56
|
+
const save = require$$0.useCallback(() => {
|
|
57
|
+
timerRef.current = null;
|
|
58
|
+
const { conversation: target, interruptId: key, payload: answers } = latest.current;
|
|
59
|
+
if (!target) return;
|
|
60
|
+
mutate(
|
|
61
|
+
{ conversation: target, interruptId: key, answers },
|
|
62
|
+
{
|
|
63
|
+
onSuccess: () => {
|
|
64
|
+
setStatus("saved");
|
|
65
|
+
queryClient.setQueryData(draftQueryKey(target, key), answers);
|
|
66
|
+
},
|
|
67
|
+
onError: () => setStatus("error")
|
|
68
|
+
}
|
|
69
|
+
);
|
|
70
|
+
}, [mutate, queryClient]);
|
|
71
|
+
const flush = require$$0.useCallback(() => {
|
|
72
|
+
if (timerRef.current === null) return;
|
|
73
|
+
clearTimeout(timerRef.current);
|
|
74
|
+
save();
|
|
75
|
+
}, [save]);
|
|
76
|
+
require$$0.useEffect(() => {
|
|
77
|
+
setStatus("idle");
|
|
78
|
+
return () => {
|
|
79
|
+
if (timerRef.current !== null) clearTimeout(timerRef.current);
|
|
80
|
+
timerRef.current = null;
|
|
81
|
+
};
|
|
82
|
+
}, [interruptId]);
|
|
83
|
+
require$$0.useEffect(() => {
|
|
84
|
+
if (!enabled || !conversation) return;
|
|
85
|
+
setStatus("saving");
|
|
86
|
+
if (timerRef.current !== null) clearTimeout(timerRef.current);
|
|
87
|
+
timerRef.current = setTimeout(save, DRAFT_SAVE_DEBOUNCE_MS);
|
|
88
|
+
}, [enabled, conversation, payload, save]);
|
|
89
|
+
require$$0.useEffect(() => {
|
|
90
|
+
if (!enabled) return void 0;
|
|
91
|
+
const onBlur = () => flush();
|
|
92
|
+
const onVisibility = () => {
|
|
93
|
+
if (document.visibilityState === "hidden") flush();
|
|
94
|
+
};
|
|
95
|
+
window.addEventListener("blur", onBlur);
|
|
96
|
+
document.addEventListener("visibilitychange", onVisibility);
|
|
97
|
+
return () => {
|
|
98
|
+
window.removeEventListener("blur", onBlur);
|
|
99
|
+
document.removeEventListener("visibilitychange", onVisibility);
|
|
100
|
+
};
|
|
101
|
+
}, [enabled, flush]);
|
|
102
|
+
return { flush, status };
|
|
103
|
+
}
|
|
104
|
+
exports.useInterruptDraft = useInterruptDraft;
|
|
105
|
+
exports.useInterruptDraftSave = useInterruptDraftSave;
|
|
106
|
+
//# sourceMappingURL=use-interrupt-draft.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"use-interrupt-draft.cjs","sources":["../../../src/chat/typed-interrupts/use-interrupt-draft.ts"],"sourcesContent":["/**\n * A questionnaire's draft, kept on agora as Olympus keeps it: read once when\n * the card mounts, so answers typed on another surface (or before a reload)\n * come back, and saved two seconds after each change, at once when the window\n * loses focus or hides. agora's timer worker reads a draft's presence as \"the\n * person is answering\" and holds the timeout while it exists; its content is\n * never a resume value. Saves are best-effort: a failed one only shows on the\n * card's indicator.\n */\nimport { useMutation, useQuery } from '@tanstack/react-query';\nimport { useCallback, useEffect, useRef, useState } from 'react';\nimport { useAthenaQueryClient } from '../../lib/use-athena-rest-query';\nimport {\n readInterruptDraft,\n saveInterruptDraft,\n type TypedInterruptConversation,\n} from './typed-interrupt-graphql';\n\nconst DRAFT_SAVE_DEBOUNCE_MS = 2000;\n\nexport type DraftSaveStatus = 'idle' | 'saving' | 'saved' | 'error';\n\nfunction draftQueryKey(conversation: TypedInterruptConversation | null, interruptId: string) {\n return [\n 'athena-sdk',\n 'interrupt-draft',\n conversation?.auth.backendUrl ?? '',\n conversation?.principal ?? '',\n conversation?.threadId ?? '',\n interruptId,\n ] as const;\n}\n\n/**\n * The draft agora holds for `interruptId` (`null` without one), read again\n * each time a card mounts: another app may have saved answers since. Loading\n * while that read is in flight, so a card restores the latest draft, not a\n * cached one; a read the network holds (offline) does not keep it waiting.\n */\nexport function useInterruptDraft({\n conversation,\n interruptId,\n}: {\n conversation: TypedInterruptConversation | null;\n interruptId: string;\n}): { draft: unknown; isLoading: boolean } {\n const queryClient = useAthenaQueryClient();\n const { data, isFetching } = useQuery(\n {\n queryKey: draftQueryKey(conversation, interruptId),\n queryFn: ({ signal }) =>\n conversation ? readInterruptDraft(conversation, interruptId, signal) : null,\n enabled: conversation !== null,\n staleTime: 0,\n refetchOnMount: 'always',\n retry: false,\n refetchOnWindowFocus: false,\n },\n queryClient,\n );\n return { draft: conversation ? data : null, isLoading: conversation !== null && isFetching };\n}\n\n/**\n * Saves `payload` under `interruptId` two seconds after it last changed while\n * `enabled`; `flush` saves a pending change at once. A pending save never\n * lands under the next park's key, and none outlives the card.\n */\nexport function useInterruptDraftSave({\n conversation,\n interruptId,\n payload,\n enabled,\n}: {\n conversation: TypedInterruptConversation | null;\n interruptId: string;\n payload: unknown;\n enabled: boolean;\n}): { flush: () => void; status: DraftSaveStatus } {\n const queryClient = useAthenaQueryClient();\n const [status, setStatus] = useState<DraftSaveStatus>('idle');\n const { mutate } = useMutation(\n {\n mutationKey: ['athena-sdk', 'interrupt-draft-save'],\n mutationFn: (variables: { conversation: TypedInterruptConversation; interruptId: string; answers: unknown }) =>\n saveInterruptDraft(variables.conversation, variables.interruptId, variables.answers),\n retry: false,\n },\n queryClient,\n );\n const latest = useRef({ conversation, interruptId, payload });\n latest.current = { conversation, interruptId, payload };\n const timerRef = useRef<ReturnType<typeof setTimeout> | null>(null);\n\n const save = useCallback(() => {\n timerRef.current = null;\n const { conversation: target, interruptId: key, payload: answers } = latest.current;\n if (!target) return;\n mutate(\n { conversation: target, interruptId: key, answers },\n {\n onSuccess: () => {\n setStatus('saved');\n // A card mounted again for this park restores what was saved last.\n queryClient.setQueryData(draftQueryKey(target, key), answers);\n },\n onError: () => setStatus('error'),\n },\n );\n }, [mutate, queryClient]);\n\n const flush = useCallback(() => {\n if (timerRef.current === null) return;\n clearTimeout(timerRef.current);\n save();\n }, [save]);\n\n // Another park: what was pending belonged to the last one.\n useEffect(() => {\n setStatus('idle');\n return () => {\n if (timerRef.current !== null) clearTimeout(timerRef.current);\n timerRef.current = null;\n };\n }, [interruptId]);\n\n useEffect(() => {\n if (!enabled || !conversation) return;\n setStatus('saving');\n if (timerRef.current !== null) clearTimeout(timerRef.current);\n timerRef.current = setTimeout(save, DRAFT_SAVE_DEBOUNCE_MS);\n }, [enabled, conversation, payload, save]);\n\n useEffect(() => {\n if (!enabled) return undefined;\n const onBlur = () => flush();\n const onVisibility = () => {\n if (document.visibilityState === 'hidden') flush();\n };\n window.addEventListener('blur', onBlur);\n document.addEventListener('visibilitychange', onVisibility);\n return () => {\n window.removeEventListener('blur', onBlur);\n document.removeEventListener('visibilitychange', onVisibility);\n };\n }, [enabled, flush]);\n\n return { flush, status };\n}\n"],"names":["useAthenaQueryClient","useQuery","readInterruptDraft","useState","useMutation","saveInterruptDraft","useRef","useCallback","useEffect"],"mappings":";;;;;;AAkBA,MAAM,yBAAyB;AAI/B,SAAS,cAAc,cAAiD,aAAqB;AAC3F,SAAO;AAAA,IACL;AAAA,IACA;AAAA,KACA,6CAAc,KAAK,eAAc;AAAA,KACjC,6CAAc,cAAa;AAAA,KAC3B,6CAAc,aAAY;AAAA,IAC1B;AAAA,EAAA;AAEJ;AAQO,SAAS,kBAAkB;AAAA,EAChC;AAAA,EACA;AACF,GAG2C;AACzC,QAAM,cAAcA,mBAAAA,qBAAA;AACpB,QAAM,EAAE,MAAM,WAAA,IAAeC,WAAAA;AAAAA,IAC3B;AAAA,MACE,UAAU,cAAc,cAAc,WAAW;AAAA,MACjD,SAAS,CAAC,EAAE,OAAA,MACV,eAAeC,sBAAAA,mBAAmB,cAAc,aAAa,MAAM,IAAI;AAAA,MACzE,SAAS,iBAAiB;AAAA,MAC1B,WAAW;AAAA,MACX,gBAAgB;AAAA,MAChB,OAAO;AAAA,MACP,sBAAsB;AAAA,IAAA;AAAA,IAExB;AAAA,EAAA;AAEF,SAAO,EAAE,OAAO,eAAe,OAAO,MAAM,WAAW,iBAAiB,QAAQ,WAAA;AAClF;AAOO,SAAS,sBAAsB;AAAA,EACpC;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,GAKmD;AACjD,QAAM,cAAcF,mBAAAA,qBAAA;AACpB,QAAM,CAAC,QAAQ,SAAS,IAAIG,WAAAA,SAA0B,MAAM;AAC5D,QAAM,EAAE,WAAWC,WAAAA;AAAAA,IACjB;AAAA,MACE,aAAa,CAAC,cAAc,sBAAsB;AAAA,MAClD,YAAY,CAAC,cACXC,sBAAAA,mBAAmB,UAAU,cAAc,UAAU,aAAa,UAAU,OAAO;AAAA,MACrF,OAAO;AAAA,IAAA;AAAA,IAET;AAAA,EAAA;AAEF,QAAM,SAASC,WAAAA,OAAO,EAAE,cAAc,aAAa,SAAS;AAC5D,SAAO,UAAU,EAAE,cAAc,aAAa,QAAA;AAC9C,QAAM,WAAWA,WAAAA,OAA6C,IAAI;AAElE,QAAM,OAAOC,WAAAA,YAAY,MAAM;AAC7B,aAAS,UAAU;AACnB,UAAM,EAAE,cAAc,QAAQ,aAAa,KAAK,SAAS,YAAY,OAAO;AAC5E,QAAI,CAAC,OAAQ;AACb;AAAA,MACE,EAAE,cAAc,QAAQ,aAAa,KAAK,QAAA;AAAA,MAC1C;AAAA,QACE,WAAW,MAAM;AACf,oBAAU,OAAO;AAEjB,sBAAY,aAAa,cAAc,QAAQ,GAAG,GAAG,OAAO;AAAA,QAC9D;AAAA,QACA,SAAS,MAAM,UAAU,OAAO;AAAA,MAAA;AAAA,IAClC;AAAA,EAEJ,GAAG,CAAC,QAAQ,WAAW,CAAC;AAExB,QAAM,QAAQA,WAAAA,YAAY,MAAM;AAC9B,QAAI,SAAS,YAAY,KAAM;AAC/B,iBAAa,SAAS,OAAO;AAC7B,SAAA;AAAA,EACF,GAAG,CAAC,IAAI,CAAC;AAGTC,aAAAA,UAAU,MAAM;AACd,cAAU,MAAM;AAChB,WAAO,MAAM;AACX,UAAI,SAAS,YAAY,KAAM,cAAa,SAAS,OAAO;AAC5D,eAAS,UAAU;AAAA,IACrB;AAAA,EACF,GAAG,CAAC,WAAW,CAAC;AAEhBA,aAAAA,UAAU,MAAM;AACd,QAAI,CAAC,WAAW,CAAC,aAAc;AAC/B,cAAU,QAAQ;AAClB,QAAI,SAAS,YAAY,KAAM,cAAa,SAAS,OAAO;AAC5D,aAAS,UAAU,WAAW,MAAM,sBAAsB;AAAA,EAC5D,GAAG,CAAC,SAAS,cAAc,SAAS,IAAI,CAAC;AAEzCA,aAAAA,UAAU,MAAM;AACd,QAAI,CAAC,QAAS,QAAO;AACrB,UAAM,SAAS,MAAM,MAAA;AACrB,UAAM,eAAe,MAAM;AACzB,UAAI,SAAS,oBAAoB,SAAU,OAAA;AAAA,IAC7C;AACA,WAAO,iBAAiB,QAAQ,MAAM;AACtC,aAAS,iBAAiB,oBAAoB,YAAY;AAC1D,WAAO,MAAM;AACX,aAAO,oBAAoB,QAAQ,MAAM;AACzC,eAAS,oBAAoB,oBAAoB,YAAY;AAAA,IAC/D;AAAA,EACF,GAAG,CAAC,SAAS,KAAK,CAAC;AAEnB,SAAO,EAAE,OAAO,OAAA;AAClB;;;"}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
import { type TypedInterruptConversation } from './typed-interrupt-graphql';
|
|
2
|
+
export type DraftSaveStatus = 'idle' | 'saving' | 'saved' | 'error';
|
|
3
|
+
/**
|
|
4
|
+
* The draft agora holds for `interruptId` (`null` without one), read again
|
|
5
|
+
* each time a card mounts: another app may have saved answers since. Loading
|
|
6
|
+
* while that read is in flight, so a card restores the latest draft, not a
|
|
7
|
+
* cached one; a read the network holds (offline) does not keep it waiting.
|
|
8
|
+
*/
|
|
9
|
+
export declare function useInterruptDraft({ conversation, interruptId, }: {
|
|
10
|
+
conversation: TypedInterruptConversation | null;
|
|
11
|
+
interruptId: string;
|
|
12
|
+
}): {
|
|
13
|
+
draft: unknown;
|
|
14
|
+
isLoading: boolean;
|
|
15
|
+
};
|
|
16
|
+
/**
|
|
17
|
+
* Saves `payload` under `interruptId` two seconds after it last changed while
|
|
18
|
+
* `enabled`; `flush` saves a pending change at once. A pending save never
|
|
19
|
+
* lands under the next park's key, and none outlives the card.
|
|
20
|
+
*/
|
|
21
|
+
export declare function useInterruptDraftSave({ conversation, interruptId, payload, enabled, }: {
|
|
22
|
+
conversation: TypedInterruptConversation | null;
|
|
23
|
+
interruptId: string;
|
|
24
|
+
payload: unknown;
|
|
25
|
+
enabled: boolean;
|
|
26
|
+
}): {
|
|
27
|
+
flush: () => void;
|
|
28
|
+
status: DraftSaveStatus;
|
|
29
|
+
};
|