@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,306 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
|
|
3
|
+
const tap = require("@assistant-ui/tap");
|
|
4
|
+
const storage = require("statewire/storage");
|
|
5
|
+
const require$$0 = require("react");
|
|
6
|
+
const chatOutboxEntry = require("./chat-outbox-entry.cjs");
|
|
7
|
+
const sealedIdb = require("./sealed-idb.cjs");
|
|
8
|
+
const statewireTransport = require("./statewire-transport.cjs");
|
|
9
|
+
const CHAT_SESSION_DATABASE = "athena-chat-sessions";
|
|
10
|
+
const SEALED_SESSION_PREFIX = "athena-sealed:1:";
|
|
11
|
+
function createSealedSessionCodec(options) {
|
|
12
|
+
const aad = `athena-chat-session|1|${options.scope}`;
|
|
13
|
+
const { cipher } = options;
|
|
14
|
+
if (cipher) {
|
|
15
|
+
return {
|
|
16
|
+
async encode(plain) {
|
|
17
|
+
return SEALED_SESSION_PREFIX + await cipher.seal({ text: plain, aad, purpose: "write" });
|
|
18
|
+
},
|
|
19
|
+
async decode(stored) {
|
|
20
|
+
if (!stored.startsWith(SEALED_SESSION_PREFIX)) throw new Error("athena: chat session record is not sealed");
|
|
21
|
+
return cipher.open({ sealed: stored.slice(SEALED_SESSION_PREFIX.length), aad, purpose: "read" });
|
|
22
|
+
}
|
|
23
|
+
};
|
|
24
|
+
}
|
|
25
|
+
const { getKey } = options;
|
|
26
|
+
return {
|
|
27
|
+
async encode(plain) {
|
|
28
|
+
const key = await getKey("write");
|
|
29
|
+
if (!key) throw new Error("athena: no key to keep chat sessions on this device");
|
|
30
|
+
return SEALED_SESSION_PREFIX + sealedIdb.bytesToBase64(await sealedIdb.sealText({ key, text: plain, aad }));
|
|
31
|
+
},
|
|
32
|
+
async decode(stored) {
|
|
33
|
+
if (!stored.startsWith(SEALED_SESSION_PREFIX)) throw new Error("athena: chat session record is not sealed");
|
|
34
|
+
const key = await getKey("read");
|
|
35
|
+
if (!key) throw new Error("athena: no key to open chat sessions on this device");
|
|
36
|
+
return sealedIdb.openText({ key, sealed: sealedIdb.base64ToBytes(stored.slice(SEALED_SESSION_PREFIX.length)), aad });
|
|
37
|
+
}
|
|
38
|
+
};
|
|
39
|
+
}
|
|
40
|
+
async function chatSessionNamespace({
|
|
41
|
+
environment,
|
|
42
|
+
ownerId,
|
|
43
|
+
sha256 = sealedIdb.sha256Hex
|
|
44
|
+
}) {
|
|
45
|
+
return `athena-chat:${(await sha256(`${environment}|${ownerId}`)).slice(0, 32)}:`;
|
|
46
|
+
}
|
|
47
|
+
function chatSessionKey({
|
|
48
|
+
namespace,
|
|
49
|
+
principal,
|
|
50
|
+
threadId
|
|
51
|
+
}) {
|
|
52
|
+
return storage.sessionNamespace(namespace, principal) + threadId;
|
|
53
|
+
}
|
|
54
|
+
async function adoptUnscopedChatSessions({
|
|
55
|
+
backend,
|
|
56
|
+
namespace,
|
|
57
|
+
principal
|
|
58
|
+
}) {
|
|
59
|
+
var _a;
|
|
60
|
+
let moved = 0;
|
|
61
|
+
for (const key of await ((_a = backend.getAllKeys) == null ? void 0 : _a.call(backend)) ?? []) {
|
|
62
|
+
if (!key.startsWith(namespace)) continue;
|
|
63
|
+
const threadId = key.slice(namespace.length);
|
|
64
|
+
if (threadId === "" || threadId.includes(":")) continue;
|
|
65
|
+
const raw = await backend.getItem(key);
|
|
66
|
+
if (raw === null) continue;
|
|
67
|
+
const target = chatSessionKey({ namespace, principal, threadId });
|
|
68
|
+
if (await backend.getItem(target) !== null) continue;
|
|
69
|
+
await backend.setItem(target, raw);
|
|
70
|
+
await backend.removeItem(key);
|
|
71
|
+
moved += 1;
|
|
72
|
+
}
|
|
73
|
+
return moved;
|
|
74
|
+
}
|
|
75
|
+
const PAGE_MEMORY_FORMAT = 5;
|
|
76
|
+
const memoryRecords = /* @__PURE__ */ new Map();
|
|
77
|
+
const memoryListeners = /* @__PURE__ */ new Set();
|
|
78
|
+
function announceMemory(key) {
|
|
79
|
+
for (const listener of [...memoryListeners]) {
|
|
80
|
+
try {
|
|
81
|
+
listener(key);
|
|
82
|
+
} catch {
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
}
|
|
86
|
+
const memoryBackend = {
|
|
87
|
+
getItem: (key) => {
|
|
88
|
+
const record = memoryRecords.get(key);
|
|
89
|
+
return record === void 0 ? null : JSON.stringify({ statewireStorageVersion: PAGE_MEMORY_FORMAT, ...record });
|
|
90
|
+
},
|
|
91
|
+
setItem: () => {
|
|
92
|
+
throw new Error("athena: page-memory chat sessions are written by their sessions only");
|
|
93
|
+
},
|
|
94
|
+
removeItem: (key) => {
|
|
95
|
+
if (memoryRecords.delete(key)) announceMemory(key);
|
|
96
|
+
},
|
|
97
|
+
getAllKeys: () => [...memoryRecords.keys()],
|
|
98
|
+
subscribe: (listener) => {
|
|
99
|
+
memoryListeners.add(listener);
|
|
100
|
+
return () => {
|
|
101
|
+
memoryListeners.delete(listener);
|
|
102
|
+
};
|
|
103
|
+
}
|
|
104
|
+
};
|
|
105
|
+
function chatSessionMemoryBackend() {
|
|
106
|
+
return memoryBackend;
|
|
107
|
+
}
|
|
108
|
+
function chatSessionMemoryNamespace(scope) {
|
|
109
|
+
return `${scope}:`;
|
|
110
|
+
}
|
|
111
|
+
const PageMemorySession = tap.resource(function usePageMemorySession({
|
|
112
|
+
key
|
|
113
|
+
}) {
|
|
114
|
+
return require$$0.useMemo(
|
|
115
|
+
() => ({
|
|
116
|
+
durable: false,
|
|
117
|
+
load: () => memoryRecords.get(key) ?? null,
|
|
118
|
+
save: (record) => {
|
|
119
|
+
memoryRecords.set(key, record);
|
|
120
|
+
announceMemory(key);
|
|
121
|
+
}
|
|
122
|
+
}),
|
|
123
|
+
[key]
|
|
124
|
+
);
|
|
125
|
+
});
|
|
126
|
+
const CHAT_SESSION_MAX_AGE_MS = 7 * 24 * 60 * 60 * 1e3;
|
|
127
|
+
const CHAT_SESSION_MAX_ENTRIES = 50;
|
|
128
|
+
function ChatSessionStorage(options) {
|
|
129
|
+
if (options.kind === "memory") {
|
|
130
|
+
return PageMemorySession({
|
|
131
|
+
key: chatSessionKey({
|
|
132
|
+
namespace: chatSessionMemoryNamespace(options.scope),
|
|
133
|
+
principal: options.principal,
|
|
134
|
+
threadId: options.threadId
|
|
135
|
+
})
|
|
136
|
+
});
|
|
137
|
+
}
|
|
138
|
+
return storage.IndexedDbSession({
|
|
139
|
+
database: options.database ?? CHAT_SESSION_DATABASE,
|
|
140
|
+
namespace: options.namespace,
|
|
141
|
+
principal: options.principal,
|
|
142
|
+
key: options.threadId,
|
|
143
|
+
codec: options.codec,
|
|
144
|
+
protocol: statewireTransport.DEEP_AGENT_STATEWIRE_PROTOCOL,
|
|
145
|
+
retention: options.retention ?? { maxAgeMs: CHAT_SESSION_MAX_AGE_MS, maxEntries: CHAT_SESSION_MAX_ENTRIES },
|
|
146
|
+
...options.onError && { onError: options.onError },
|
|
147
|
+
...options.onEvict && { onEvict: options.onEvict }
|
|
148
|
+
});
|
|
149
|
+
}
|
|
150
|
+
function chatSessionBackend(database = CHAT_SESSION_DATABASE) {
|
|
151
|
+
return storage.indexedDbBackend(database);
|
|
152
|
+
}
|
|
153
|
+
function legacyEntry(message) {
|
|
154
|
+
return {
|
|
155
|
+
state: "held",
|
|
156
|
+
failed: message.failure !== void 0,
|
|
157
|
+
id: message.id,
|
|
158
|
+
threadId: message.threadId,
|
|
159
|
+
text: message.text,
|
|
160
|
+
queuedAt: message.queuedAt,
|
|
161
|
+
newChat: message.newChat,
|
|
162
|
+
durable: true,
|
|
163
|
+
...message.composerMarkdown !== void 0 && { composerMarkdown: message.composerMarkdown },
|
|
164
|
+
...message.composerHtml !== void 0 && { composerHtml: message.composerHtml },
|
|
165
|
+
...message.metadata !== void 0 && { metadata: message.metadata },
|
|
166
|
+
...message.files !== void 0 && { files: message.files },
|
|
167
|
+
...message.attachments !== void 0 && { attachments: message.attachments }
|
|
168
|
+
};
|
|
169
|
+
}
|
|
170
|
+
async function listChatOutboxes({
|
|
171
|
+
backend,
|
|
172
|
+
namespace,
|
|
173
|
+
principal,
|
|
174
|
+
codec,
|
|
175
|
+
legacy
|
|
176
|
+
}) {
|
|
177
|
+
var _a;
|
|
178
|
+
const keys = await ((_a = backend.getAllKeys) == null ? void 0 : _a.call(backend)) ?? [];
|
|
179
|
+
const scope = storage.sessionNamespace(namespace, principal);
|
|
180
|
+
const byThread = /* @__PURE__ */ new Map();
|
|
181
|
+
let unreadable = 0;
|
|
182
|
+
for (const key of keys) {
|
|
183
|
+
if (!key.startsWith(scope)) continue;
|
|
184
|
+
const threadId = key.slice(scope.length);
|
|
185
|
+
let outboxes;
|
|
186
|
+
try {
|
|
187
|
+
outboxes = await storage.readOutboxes(
|
|
188
|
+
{ ...backend, getAllKeys: () => [key] },
|
|
189
|
+
{ namespace, principal, protocol: statewireTransport.DEEP_AGENT_STATEWIRE_PROTOCOL, ...codec && { codec } }
|
|
190
|
+
);
|
|
191
|
+
} catch {
|
|
192
|
+
unreadable += 1;
|
|
193
|
+
continue;
|
|
194
|
+
}
|
|
195
|
+
for (const outbox of outboxes) {
|
|
196
|
+
const entries = outbox.entries.flatMap((entry) => {
|
|
197
|
+
const chat = chatOutboxEntry.chatOutboxEntryOf(entry, threadId);
|
|
198
|
+
if (!chat) return [];
|
|
199
|
+
const failed = chatOutboxEntry.readChatOutboxLocalMeta(entry.localMeta).error !== void 0;
|
|
200
|
+
return [{ ...chat, state: entry.state, failed }];
|
|
201
|
+
});
|
|
202
|
+
if (entries.length > 0) byThread.set(threadId, [...byThread.get(threadId) ?? [], ...entries]);
|
|
203
|
+
}
|
|
204
|
+
}
|
|
205
|
+
if (legacy) {
|
|
206
|
+
for (const message of await legacy.listAll().catch(() => [])) {
|
|
207
|
+
const list = byThread.get(message.threadId) ?? [];
|
|
208
|
+
if (list.some((entry) => entry.id === message.id)) continue;
|
|
209
|
+
byThread.set(message.threadId, [...list, legacyEntry(message)]);
|
|
210
|
+
}
|
|
211
|
+
}
|
|
212
|
+
const threads = [...byThread].map(([threadId, entries]) => ({ threadId, entries: [...entries].sort((a, b) => a.queuedAt - b.queuedAt) })).sort((a, b) => {
|
|
213
|
+
var _a2, _b;
|
|
214
|
+
return (((_a2 = a.entries[0]) == null ? void 0 : _a2.queuedAt) ?? 0) - (((_b = b.entries[0]) == null ? void 0 : _b.queuedAt) ?? 0);
|
|
215
|
+
});
|
|
216
|
+
return { threads, unreadable };
|
|
217
|
+
}
|
|
218
|
+
async function countChatOutboxMessages(source) {
|
|
219
|
+
const { legacy, ...rest } = source;
|
|
220
|
+
const listing = await listChatOutboxes(rest);
|
|
221
|
+
const legacyCount = legacy ? await legacy.count().catch(() => 0) : 0;
|
|
222
|
+
return listing.threads.reduce((sum, thread) => sum + thread.entries.length, 0) + listing.unreadable + legacyCount;
|
|
223
|
+
}
|
|
224
|
+
async function clearChatOutboxes({ backend, namespace, legacy }) {
|
|
225
|
+
var _a;
|
|
226
|
+
const keys = await ((_a = backend.getAllKeys) == null ? void 0 : _a.call(backend)) ?? [];
|
|
227
|
+
for (const key of keys) if (key.startsWith(namespace)) await backend.removeItem(key);
|
|
228
|
+
await (legacy == null ? void 0 : legacy.clear());
|
|
229
|
+
}
|
|
230
|
+
const EMPTY_LISTING = { threads: [], unreadable: 0 };
|
|
231
|
+
function createChatOutboxDirectory(source) {
|
|
232
|
+
const listeners = /* @__PURE__ */ new Set();
|
|
233
|
+
let snapshot = EMPTY_LISTING;
|
|
234
|
+
let stopRemote;
|
|
235
|
+
let reading = Promise.resolve();
|
|
236
|
+
const refresh = () => {
|
|
237
|
+
reading = reading.then(async () => {
|
|
238
|
+
var _a;
|
|
239
|
+
try {
|
|
240
|
+
snapshot = await listChatOutboxes(source);
|
|
241
|
+
} catch (error) {
|
|
242
|
+
(_a = source.onError) == null ? void 0 : _a.call(source, error);
|
|
243
|
+
return;
|
|
244
|
+
}
|
|
245
|
+
for (const listener of listeners) {
|
|
246
|
+
try {
|
|
247
|
+
listener();
|
|
248
|
+
} catch {
|
|
249
|
+
}
|
|
250
|
+
}
|
|
251
|
+
});
|
|
252
|
+
};
|
|
253
|
+
return {
|
|
254
|
+
getSnapshot: () => snapshot,
|
|
255
|
+
subscribe(listener) {
|
|
256
|
+
listeners.add(listener);
|
|
257
|
+
if (listeners.size === 1) {
|
|
258
|
+
const { codec } = source;
|
|
259
|
+
stopRemote = storage.subscribeOutboxes(
|
|
260
|
+
source.backend,
|
|
261
|
+
{
|
|
262
|
+
namespace: source.namespace,
|
|
263
|
+
principal: source.principal,
|
|
264
|
+
protocol: statewireTransport.DEEP_AGENT_STATEWIRE_PROTOCOL,
|
|
265
|
+
...codec && {
|
|
266
|
+
codec: {
|
|
267
|
+
encode: (plain) => codec.encode(plain),
|
|
268
|
+
decode: (stored) => codec.decode(stored).catch(() => "null")
|
|
269
|
+
}
|
|
270
|
+
}
|
|
271
|
+
},
|
|
272
|
+
() => refresh(),
|
|
273
|
+
(error) => {
|
|
274
|
+
var _a;
|
|
275
|
+
return (_a = source.onError) == null ? void 0 : _a.call(source, error);
|
|
276
|
+
}
|
|
277
|
+
);
|
|
278
|
+
}
|
|
279
|
+
return () => {
|
|
280
|
+
listeners.delete(listener);
|
|
281
|
+
if (listeners.size === 0) {
|
|
282
|
+
stopRemote == null ? void 0 : stopRemote();
|
|
283
|
+
stopRemote = void 0;
|
|
284
|
+
}
|
|
285
|
+
};
|
|
286
|
+
},
|
|
287
|
+
refresh
|
|
288
|
+
};
|
|
289
|
+
}
|
|
290
|
+
exports.CHAT_SESSION_DATABASE = CHAT_SESSION_DATABASE;
|
|
291
|
+
exports.CHAT_SESSION_MAX_AGE_MS = CHAT_SESSION_MAX_AGE_MS;
|
|
292
|
+
exports.CHAT_SESSION_MAX_ENTRIES = CHAT_SESSION_MAX_ENTRIES;
|
|
293
|
+
exports.ChatSessionStorage = ChatSessionStorage;
|
|
294
|
+
exports.SEALED_SESSION_PREFIX = SEALED_SESSION_PREFIX;
|
|
295
|
+
exports.adoptUnscopedChatSessions = adoptUnscopedChatSessions;
|
|
296
|
+
exports.chatSessionBackend = chatSessionBackend;
|
|
297
|
+
exports.chatSessionKey = chatSessionKey;
|
|
298
|
+
exports.chatSessionMemoryBackend = chatSessionMemoryBackend;
|
|
299
|
+
exports.chatSessionMemoryNamespace = chatSessionMemoryNamespace;
|
|
300
|
+
exports.chatSessionNamespace = chatSessionNamespace;
|
|
301
|
+
exports.clearChatOutboxes = clearChatOutboxes;
|
|
302
|
+
exports.countChatOutboxMessages = countChatOutboxMessages;
|
|
303
|
+
exports.createChatOutboxDirectory = createChatOutboxDirectory;
|
|
304
|
+
exports.createSealedSessionCodec = createSealedSessionCodec;
|
|
305
|
+
exports.listChatOutboxes = listChatOutboxes;
|
|
306
|
+
//# sourceMappingURL=chat-outbox-storage.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"chat-outbox-storage.cjs","sources":["../../../../agent-runtime/src/chat-outbox-storage.ts"],"sourcesContent":["import { type ResourceElement, resource } from \"@assistant-ui/tap\";\nimport type { StatewireClient } from \"statewire\";\nimport {\n IndexedDbSession,\n indexedDbBackend,\n type KeyValueSessionStorage,\n type ReadOutboxes,\n readOutboxes,\n sessionNamespace,\n subscribeOutboxes,\n} from \"statewire/storage\";\nimport { useMemo } from \"react\";\nimport { type ChatOutboxEntry, chatOutboxEntryOf, readChatOutboxLocalMeta } from \"./chat-outbox-entry\";\nimport type { LegacyChatOutboxMessage, LegacyChatOutboxReader } from \"./chat-outbox-legacy\";\nimport { base64ToBytes, bytesToBase64, openText, sealText, sha256Hex } from \"./sealed-idb\";\nimport { DEEP_AGENT_STATEWIRE_PROTOCOL } from \"./statewire-transport\";\n\n/**\n * Where a chat thread's statewire session lives on a surface that keeps messages typed while\n * Athena can't be reached (the chat outbox is the session's outbox, so its storage is the\n * session's):\n *\n * - **Sealed** ({@link ChatSessionStorage} `kind: \"sealed\"`): statewire's `IndexedDbSession`, one\n * record per thread under a per-person namespace, every record sealed with AES-GCM-256 under the\n * person's key ({@link createSealedSessionCodec}). Olympus and the desktop app.\n * - **Memory** (`kind: \"memory\"`): page memory, for a deployment that lets devices keep no copies:\n * what waits survives thread switches and remounts, not a reload, and its rows say so\n * (`durable: false`). {@link chatSessionMemoryBackend} lists those records too.\n *\n * Cross-thread lists (the tray's \"waiting elsewhere\", sign-out counts) read the same backend,\n * namespace and codec ({@link createChatOutboxDirectory}).\n */\n\n/** The IndexedDB database sealed chat sessions are kept in. */\nexport const CHAT_SESSION_DATABASE = \"athena-chat-sessions\";\n\n/** Prefix of a sealed record; anything else is refused rather than read as plaintext. */\nexport const SEALED_SESSION_PREFIX = \"athena-sealed:1:\";\n\n/** What a codec asks the key for: opening what is kept, or keeping something new. */\nexport type ChatSessionKeyPurpose = \"read\" | \"write\";\n\n/**\n * The person's AES-GCM key: `read` opens what is already kept (any key that exists), `write` keeps\n * something new (a key only while the deployment lets devices keep copies). `null`: none.\n */\nexport type ChatSessionKeyProvider = (purpose: ChatSessionKeyPurpose) => Promise<CryptoKey | null>;\n\n/**\n * Seals and opens record text without WebCrypto, for a runtime that has none (React Native's\n * Hermes): the host's own cipher (an XChaCha20-Poly1305 vault, say). `aad` must be bound as\n * additional data; `open` throws for the wrong key, the wrong `aad` or a damaged record.\n */\nexport interface SealedSessionCipher {\n seal(args: { text: string; aad: string; purpose: \"write\" }): Promise<string>;\n open(args: { sealed: string; aad: string; purpose: \"read\" }): Promise<string>;\n}\n\n/**\n * A `KeyValueSessionStorage` codec sealing each stored record (the `scope` bound as additional\n * data, so a record copied under another person's scope does not open): AES-GCM-256 with a fresh\n * IV through WebCrypto (`getKey`), or the host's {@link SealedSessionCipher} where WebCrypto is\n * missing (`cipher`). Encoding without a write key, or decoding a record that does not open,\n * throws: statewire then reports a storage error and leaves the stored record where it is. Create\n * one per person and keep it: the session resource is keyed by the codec's identity.\n */\nexport function createSealedSessionCodec(\n options:\n | { getKey: ChatSessionKeyProvider; scope: string; cipher?: never }\n | { cipher: SealedSessionCipher; scope: string; getKey?: never },\n): KeyValueSessionStorage.Codec {\n const aad = `athena-chat-session|1|${options.scope}`;\n const { cipher } = options;\n if (cipher) {\n return {\n async encode(plain) {\n return SEALED_SESSION_PREFIX + (await cipher.seal({ text: plain, aad, purpose: \"write\" }));\n },\n async decode(stored) {\n if (!stored.startsWith(SEALED_SESSION_PREFIX)) throw new Error(\"athena: chat session record is not sealed\");\n return cipher.open({ sealed: stored.slice(SEALED_SESSION_PREFIX.length), aad, purpose: \"read\" });\n },\n };\n }\n const { getKey } = options;\n return {\n async encode(plain) {\n const key = await getKey(\"write\");\n if (!key) throw new Error(\"athena: no key to keep chat sessions on this device\");\n return SEALED_SESSION_PREFIX + bytesToBase64(await sealText({ key, text: plain, aad }));\n },\n async decode(stored) {\n if (!stored.startsWith(SEALED_SESSION_PREFIX)) throw new Error(\"athena: chat session record is not sealed\");\n const key = await getKey(\"read\");\n if (!key) throw new Error(\"athena: no key to open chat sessions on this device\");\n return openText({ key, sealed: base64ToBytes(stored.slice(SEALED_SESSION_PREFIX.length)), aad });\n },\n };\n}\n\n/**\n * The namespace a person's chat sessions are kept under: their scope hashed, so the database names\n * no one. `environment` keeps deployments that share an origin apart.\n */\nexport async function chatSessionNamespace({\n environment,\n ownerId,\n sha256 = sha256Hex,\n}: {\n environment: string;\n ownerId: string;\n /** Hex SHA-256 of a string; pass the host's own where WebCrypto is missing (React Native). */\n sha256?: (value: string) => Promise<string>;\n}): Promise<string> {\n return `athena-chat:${(await sha256(`${environment}|${ownerId}`)).slice(0, 32)}:`;\n}\n\n/**\n * The key a thread's chat session is stored under: `<namespace><principal>:<threadId>`, the layout\n * statewire 0.25 keeps session records in.\n */\nexport function chatSessionKey({\n namespace,\n principal,\n threadId,\n}: {\n namespace: string;\n principal: string;\n threadId: string;\n}): string {\n return sessionNamespace(namespace, principal) + threadId;\n}\n\n/**\n * Moves the sealed chat sessions statewire 0.24 kept under `namespace + threadId` to\n * `principal`'s scoped keys ({@link chatSessionKey}). `namespace` is one person's\n * ({@link chatSessionNamespace} hashes their scope), so its unscoped records are theirs: call it\n * with the signed-in person's own namespace and principal only. Records move as stored (sealed;\n * the codec binds the person's scope, not the key). A key with a `:` after the namespace is a\n * scoped one (an encoded principal has none) and is never touched. An unscoped record whose\n * scoped key already holds one is left where it is (a 0.24 tab still open can write there), never\n * written over the newer record; a sign-out the person chose clears it with the rest of the\n * namespace. Returns how many records moved.\n */\nexport async function adoptUnscopedChatSessions({\n backend,\n namespace,\n principal,\n}: {\n backend: KeyValueSessionStorage.Backend;\n namespace: string;\n principal: string;\n}): Promise<number> {\n let moved = 0;\n for (const key of (await backend.getAllKeys?.()) ?? []) {\n if (!key.startsWith(namespace)) continue;\n const threadId = key.slice(namespace.length);\n if (threadId === \"\" || threadId.includes(\":\")) continue;\n const raw = await backend.getItem(key);\n if (raw === null) continue;\n const target = chatSessionKey({ namespace, principal, threadId });\n if ((await backend.getItem(target)) !== null) continue;\n await backend.setItem(target, raw);\n await backend.removeItem(key);\n moved += 1;\n }\n return moved;\n}\n\nexport type ChatSessionStorageOptions =\n | {\n kind: \"sealed\";\n threadId: string;\n /** {@link chatSessionNamespace}; one per person. */\n namespace: string;\n /** The signed-in account (`sessionPrincipal(userId)`): records live under its scoped keys. */\n principal: string;\n /** {@link createSealedSessionCodec}; one per person, kept for the life of the sign-in. */\n codec: KeyValueSessionStorage.Codec;\n database?: string;\n retention?: KeyValueSessionStorage.Options[\"retention\"];\n onError?: (error: unknown) => void;\n onEvict?: (event: KeyValueSessionStorage.EvictEvent) => void;\n }\n | {\n kind: \"memory\";\n threadId: string;\n /**\n * Names the person: another person's thread never shares a record. The records list under\n * {@link chatSessionMemoryNamespace} of it.\n */\n scope: string;\n /** The signed-in account (`sessionPrincipal(userId)`), as for sealed sessions. */\n principal: string;\n };\n\n/** The stored format page-memory records list in: statewire's session record, untagged. */\nconst PAGE_MEMORY_FORMAT = 5;\n\n// process-local by design: page memory is the store (\"memory\" sessions survive remounts, not reloads).\nconst memoryRecords = new Map<string, StatewireClient.SessionRecord>();\nconst memoryListeners = new Set<(key: string) => void>();\n\nfunction announceMemory(key: string): void {\n for (const listener of [...memoryListeners]) {\n try {\n listener(key);\n } catch {\n // A listener's fault never reaches the session.\n }\n }\n}\n\n/**\n * The page-memory records of `kind: \"memory\"` sessions as a key-value backend, so the cross-thread\n * listing reads them as it reads sealed ones (stored format, no codec). Only `removeItem` writes.\n */\nconst memoryBackend: KeyValueSessionStorage.Backend = {\n getItem: (key) => {\n const record = memoryRecords.get(key);\n // Format 5: the record without a principal tag, which the scoped key already names.\n return record === undefined ? null : JSON.stringify({ statewireStorageVersion: PAGE_MEMORY_FORMAT, ...record });\n },\n setItem: () => {\n throw new Error(\"athena: page-memory chat sessions are written by their sessions only\");\n },\n removeItem: (key) => {\n if (memoryRecords.delete(key)) announceMemory(key);\n },\n getAllKeys: () => [...memoryRecords.keys()],\n subscribe: (listener) => {\n memoryListeners.add(listener);\n return () => {\n memoryListeners.delete(listener);\n };\n },\n};\n\n/** The backend that lists every `kind: \"memory\"` chat session of this page (read and remove only). */\nexport function chatSessionMemoryBackend(): KeyValueSessionStorage.Backend {\n return memoryBackend;\n}\n\n/** The namespace `scope`'s page-memory chat sessions list under ({@link chatSessionMemoryBackend}). */\nexport function chatSessionMemoryNamespace(scope: string): string {\n return `${scope}:`;\n}\n\nconst PageMemorySession = resource(function usePageMemorySession({\n key,\n}: {\n key: string;\n}): StatewireClient.SessionStorage {\n return useMemo(\n () => ({\n durable: false,\n load: () => memoryRecords.get(key) ?? null,\n save: (record) => {\n memoryRecords.set(key, record);\n announceMemory(key);\n },\n }),\n [key],\n );\n});\n\n/** Records no tab has mounted go after this long, sends and all (statewire 0.27.1 retention). */\nexport const CHAT_SESSION_MAX_AGE_MS = 7 * 24 * 60 * 60 * 1000;\n/** Inactive records kept per person. */\nexport const CHAT_SESSION_MAX_ENTRIES = 50;\n\n/** The thread's session storage element (`storage.session`) for the surface's mode. */\nexport function ChatSessionStorage(\n options: ChatSessionStorageOptions,\n): ResourceElement<StatewireClient.SessionStorage> {\n if (options.kind === \"memory\") {\n return PageMemorySession({\n key: chatSessionKey({\n namespace: chatSessionMemoryNamespace(options.scope),\n principal: options.principal,\n threadId: options.threadId,\n }),\n });\n }\n return IndexedDbSession({\n database: options.database ?? CHAT_SESSION_DATABASE,\n namespace: options.namespace,\n principal: options.principal,\n key: options.threadId,\n codec: options.codec,\n protocol: DEEP_AGENT_STATEWIRE_PROTOCOL,\n retention: options.retention ?? { maxAgeMs: CHAT_SESSION_MAX_AGE_MS, maxEntries: CHAT_SESSION_MAX_ENTRIES },\n ...(options.onError && { onError: options.onError }),\n ...(options.onEvict && { onEvict: options.onEvict }),\n });\n}\n\n/** The key-value backend sealed chat sessions write through (`indexedDbBackend`). */\nexport function chatSessionBackend(database = CHAT_SESSION_DATABASE): KeyValueSessionStorage.Backend {\n return indexedDbBackend(database);\n}\n\n/** A waiting message as a listing reads it: the entry, and where it stands in its outbox. */\nexport interface ChatOutboxListedEntry extends ChatOutboxEntry {\n /** Held (waiting here), queued to go, or sent and not answered yet. Legacy records read as held. */\n state?: StatewireClient.OutboxEntry[\"state\"];\n /** It failed (a held entry carrying `localMeta.error`): Retry, Edit or Discard. */\n failed?: boolean;\n}\n\n/** One thread's waiting messages, as the device keeps them. */\nexport interface ChatOutboxDirectoryThread {\n threadId: string;\n /** Its messages still to be sent (held, queued or sending), in queue order. */\n entries: readonly ChatOutboxListedEntry[];\n}\n\nexport interface ChatOutboxListing {\n threads: readonly ChatOutboxDirectoryThread[];\n /** Records that would not open (another key, a damaged record): they may hold messages too. */\n unreadable: number;\n}\n\nexport interface ChatOutboxStorageSource {\n backend: KeyValueSessionStorage.Backend;\n namespace: string;\n /** Whose sessions: only records under its scoped keys ({@link chatSessionKey}) are listed. */\n principal: string;\n codec?: KeyValueSessionStorage.Codec;\n /** The previous store, read until each thread's records are migrated. */\n legacy?: LegacyChatOutboxReader;\n}\n\nfunction legacyEntry(message: LegacyChatOutboxMessage): ChatOutboxListedEntry {\n return {\n state: \"held\",\n failed: message.failure !== undefined,\n id: message.id,\n threadId: message.threadId,\n text: message.text,\n queuedAt: message.queuedAt,\n newChat: message.newChat,\n durable: true,\n ...(message.composerMarkdown !== undefined && { composerMarkdown: message.composerMarkdown }),\n ...(message.composerHtml !== undefined && { composerHtml: message.composerHtml }),\n ...(message.metadata !== undefined && { metadata: message.metadata }),\n ...(message.files !== undefined && { files: message.files }),\n ...(message.attachments !== undefined && { attachments: message.attachments }),\n };\n}\n\n/**\n * Every thread's waiting messages `principal` keeps under `namespace`, mounted or not\n * (`readOutboxes`, one record at a time so a record that does not open is counted, not fatal),\n * merged with the legacy store's records not migrated yet. Threads are ordered by their oldest\n * message.\n */\nexport async function listChatOutboxes({\n backend,\n namespace,\n principal,\n codec,\n legacy,\n}: ChatOutboxStorageSource): Promise<ChatOutboxListing> {\n const keys = (await backend.getAllKeys?.()) ?? [];\n const scope = sessionNamespace(namespace, principal);\n const byThread = new Map<string, ChatOutboxListedEntry[]>();\n let unreadable = 0;\n for (const key of keys) {\n if (!key.startsWith(scope)) continue;\n const threadId = key.slice(scope.length);\n let outboxes: readonly ReadOutboxes.Outbox[];\n try {\n outboxes = await readOutboxes(\n { ...backend, getAllKeys: () => [key] },\n { namespace, principal, protocol: DEEP_AGENT_STATEWIRE_PROTOCOL, ...(codec && { codec }) },\n );\n } catch {\n unreadable += 1;\n continue;\n }\n for (const outbox of outboxes) {\n const entries = outbox.entries.flatMap((entry) => {\n const chat = chatOutboxEntryOf(entry, threadId);\n if (!chat) return [];\n const failed = readChatOutboxLocalMeta(entry.localMeta).error !== undefined;\n return [{ ...chat, state: entry.state, failed }];\n });\n if (entries.length > 0) byThread.set(threadId, [...(byThread.get(threadId) ?? []), ...entries]);\n }\n }\n if (legacy) {\n for (const message of await legacy.listAll().catch(() => [])) {\n const list = byThread.get(message.threadId) ?? [];\n if (list.some((entry) => entry.id === message.id)) continue;\n byThread.set(message.threadId, [...list, legacyEntry(message)]);\n }\n }\n const threads = [...byThread]\n .map(([threadId, entries]) => ({ threadId, entries: [...entries].sort((a, b) => a.queuedAt - b.queuedAt) }))\n .sort((a, b) => (a.entries[0]?.queuedAt ?? 0) - (b.entries[0]?.queuedAt ?? 0));\n return { threads, unreadable };\n}\n\n/**\n * How many messages wait across every thread (a sign-out asks first while any do). Records that do\n * not open count as one each: they may hold someone's only copy. Legacy records count unopened.\n */\nexport async function countChatOutboxMessages(source: ChatOutboxStorageSource): Promise<number> {\n const { legacy, ...rest } = source;\n const listing = await listChatOutboxes(rest);\n const legacyCount = legacy ? await legacy.count().catch(() => 0) : 0;\n return listing.threads.reduce((sum, thread) => sum + thread.entries.length, 0) + listing.unreadable + legacyCount;\n}\n\n/**\n * Every chat session record under `namespace` (every principal's, and records 0.24 left unscoped),\n * and the legacy store's records, gone (a sign-out the person chose).\n */\nexport async function clearChatOutboxes({ backend, namespace, legacy }: ChatOutboxStorageSource): Promise<void> {\n const keys = (await backend.getAllKeys?.()) ?? [];\n for (const key of keys) if (key.startsWith(namespace)) await backend.removeItem(key);\n await legacy?.clear();\n}\n\n/** A live view of every thread's waiting messages, for the tray and the \"waiting to sync\" panels. */\nexport interface ChatOutboxDirectory {\n getSnapshot(): ChatOutboxListing;\n subscribe(listener: () => void): () => void;\n /** Read again now (after a migration, a sign-out). */\n refresh(): void;\n}\n\nconst EMPTY_LISTING: ChatOutboxListing = { threads: [], unreadable: 0 };\n\n/**\n * {@link listChatOutboxes}, re-read whenever a record under `namespace` is saved here or in another\n * tab (`backend.subscribe`), while anything listens. One per person.\n */\nexport function createChatOutboxDirectory(\n source: ChatOutboxStorageSource & { onError?: (error: unknown) => void },\n): ChatOutboxDirectory {\n const listeners = new Set<() => void>();\n let snapshot = EMPTY_LISTING;\n let stopRemote: (() => void) | undefined;\n let reading = Promise.resolve();\n const refresh = () => {\n reading = reading.then(async () => {\n try {\n snapshot = await listChatOutboxes(source);\n } catch (error) {\n source.onError?.(error);\n return;\n }\n for (const listener of listeners) {\n try {\n listener();\n } catch {\n // A listener's fault never reaches the directory.\n }\n }\n });\n };\n return {\n getSnapshot: () => snapshot,\n subscribe(listener) {\n listeners.add(listener);\n if (listeners.size === 1) {\n // subscribeOutboxes hears saves in this runtime and, through the backend, in others; its\n // own read only signals (a record that does not open reads as empty there).\n const { codec } = source;\n stopRemote = subscribeOutboxes(\n source.backend,\n {\n namespace: source.namespace,\n principal: source.principal,\n protocol: DEEP_AGENT_STATEWIRE_PROTOCOL,\n ...(codec && {\n codec: {\n encode: (plain: string) => codec.encode(plain),\n decode: (stored: string) => codec.decode(stored).catch(() => \"null\"),\n },\n }),\n },\n () => refresh(),\n (error) => source.onError?.(error),\n );\n }\n return () => {\n listeners.delete(listener);\n if (listeners.size === 0) {\n stopRemote?.();\n stopRemote = undefined;\n }\n };\n },\n refresh,\n };\n}\n"],"names":["bytesToBase64","sealText","openText","base64ToBytes","sha256Hex","sessionNamespace","resource","useMemo","IndexedDbSession","DEEP_AGENT_STATEWIRE_PROTOCOL","indexedDbBackend","readOutboxes","chatOutboxEntryOf","readChatOutboxLocalMeta","_a","subscribeOutboxes"],"mappings":"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"}
|
|
@@ -0,0 +1,194 @@
|
|
|
1
|
+
import { type ResourceElement } from "@assistant-ui/tap";
|
|
2
|
+
import type { StatewireClient } from "statewire";
|
|
3
|
+
import { type KeyValueSessionStorage } from "statewire/storage";
|
|
4
|
+
import { type ChatOutboxEntry } from "./chat-outbox-entry";
|
|
5
|
+
import type { LegacyChatOutboxReader } from "./chat-outbox-legacy";
|
|
6
|
+
/**
|
|
7
|
+
* Where a chat thread's statewire session lives on a surface that keeps messages typed while
|
|
8
|
+
* Athena can't be reached (the chat outbox is the session's outbox, so its storage is the
|
|
9
|
+
* session's):
|
|
10
|
+
*
|
|
11
|
+
* - **Sealed** ({@link ChatSessionStorage} `kind: "sealed"`): statewire's `IndexedDbSession`, one
|
|
12
|
+
* record per thread under a per-person namespace, every record sealed with AES-GCM-256 under the
|
|
13
|
+
* person's key ({@link createSealedSessionCodec}). Olympus and the desktop app.
|
|
14
|
+
* - **Memory** (`kind: "memory"`): page memory, for a deployment that lets devices keep no copies:
|
|
15
|
+
* what waits survives thread switches and remounts, not a reload, and its rows say so
|
|
16
|
+
* (`durable: false`). {@link chatSessionMemoryBackend} lists those records too.
|
|
17
|
+
*
|
|
18
|
+
* Cross-thread lists (the tray's "waiting elsewhere", sign-out counts) read the same backend,
|
|
19
|
+
* namespace and codec ({@link createChatOutboxDirectory}).
|
|
20
|
+
*/
|
|
21
|
+
/** The IndexedDB database sealed chat sessions are kept in. */
|
|
22
|
+
export declare const CHAT_SESSION_DATABASE = "athena-chat-sessions";
|
|
23
|
+
/** Prefix of a sealed record; anything else is refused rather than read as plaintext. */
|
|
24
|
+
export declare const SEALED_SESSION_PREFIX = "athena-sealed:1:";
|
|
25
|
+
/** What a codec asks the key for: opening what is kept, or keeping something new. */
|
|
26
|
+
export type ChatSessionKeyPurpose = "read" | "write";
|
|
27
|
+
/**
|
|
28
|
+
* The person's AES-GCM key: `read` opens what is already kept (any key that exists), `write` keeps
|
|
29
|
+
* something new (a key only while the deployment lets devices keep copies). `null`: none.
|
|
30
|
+
*/
|
|
31
|
+
export type ChatSessionKeyProvider = (purpose: ChatSessionKeyPurpose) => Promise<CryptoKey | null>;
|
|
32
|
+
/**
|
|
33
|
+
* Seals and opens record text without WebCrypto, for a runtime that has none (React Native's
|
|
34
|
+
* Hermes): the host's own cipher (an XChaCha20-Poly1305 vault, say). `aad` must be bound as
|
|
35
|
+
* additional data; `open` throws for the wrong key, the wrong `aad` or a damaged record.
|
|
36
|
+
*/
|
|
37
|
+
export interface SealedSessionCipher {
|
|
38
|
+
seal(args: {
|
|
39
|
+
text: string;
|
|
40
|
+
aad: string;
|
|
41
|
+
purpose: "write";
|
|
42
|
+
}): Promise<string>;
|
|
43
|
+
open(args: {
|
|
44
|
+
sealed: string;
|
|
45
|
+
aad: string;
|
|
46
|
+
purpose: "read";
|
|
47
|
+
}): Promise<string>;
|
|
48
|
+
}
|
|
49
|
+
/**
|
|
50
|
+
* A `KeyValueSessionStorage` codec sealing each stored record (the `scope` bound as additional
|
|
51
|
+
* data, so a record copied under another person's scope does not open): AES-GCM-256 with a fresh
|
|
52
|
+
* IV through WebCrypto (`getKey`), or the host's {@link SealedSessionCipher} where WebCrypto is
|
|
53
|
+
* missing (`cipher`). Encoding without a write key, or decoding a record that does not open,
|
|
54
|
+
* throws: statewire then reports a storage error and leaves the stored record where it is. Create
|
|
55
|
+
* one per person and keep it: the session resource is keyed by the codec's identity.
|
|
56
|
+
*/
|
|
57
|
+
export declare function createSealedSessionCodec(options: {
|
|
58
|
+
getKey: ChatSessionKeyProvider;
|
|
59
|
+
scope: string;
|
|
60
|
+
cipher?: never;
|
|
61
|
+
} | {
|
|
62
|
+
cipher: SealedSessionCipher;
|
|
63
|
+
scope: string;
|
|
64
|
+
getKey?: never;
|
|
65
|
+
}): KeyValueSessionStorage.Codec;
|
|
66
|
+
/**
|
|
67
|
+
* The namespace a person's chat sessions are kept under: their scope hashed, so the database names
|
|
68
|
+
* no one. `environment` keeps deployments that share an origin apart.
|
|
69
|
+
*/
|
|
70
|
+
export declare function chatSessionNamespace({ environment, ownerId, sha256, }: {
|
|
71
|
+
environment: string;
|
|
72
|
+
ownerId: string;
|
|
73
|
+
/** Hex SHA-256 of a string; pass the host's own where WebCrypto is missing (React Native). */
|
|
74
|
+
sha256?: (value: string) => Promise<string>;
|
|
75
|
+
}): Promise<string>;
|
|
76
|
+
/**
|
|
77
|
+
* The key a thread's chat session is stored under: `<namespace><principal>:<threadId>`, the layout
|
|
78
|
+
* statewire 0.25 keeps session records in.
|
|
79
|
+
*/
|
|
80
|
+
export declare function chatSessionKey({ namespace, principal, threadId, }: {
|
|
81
|
+
namespace: string;
|
|
82
|
+
principal: string;
|
|
83
|
+
threadId: string;
|
|
84
|
+
}): string;
|
|
85
|
+
/**
|
|
86
|
+
* Moves the sealed chat sessions statewire 0.24 kept under `namespace + threadId` to
|
|
87
|
+
* `principal`'s scoped keys ({@link chatSessionKey}). `namespace` is one person's
|
|
88
|
+
* ({@link chatSessionNamespace} hashes their scope), so its unscoped records are theirs: call it
|
|
89
|
+
* with the signed-in person's own namespace and principal only. Records move as stored (sealed;
|
|
90
|
+
* the codec binds the person's scope, not the key). A key with a `:` after the namespace is a
|
|
91
|
+
* scoped one (an encoded principal has none) and is never touched. An unscoped record whose
|
|
92
|
+
* scoped key already holds one is left where it is (a 0.24 tab still open can write there), never
|
|
93
|
+
* written over the newer record; a sign-out the person chose clears it with the rest of the
|
|
94
|
+
* namespace. Returns how many records moved.
|
|
95
|
+
*/
|
|
96
|
+
export declare function adoptUnscopedChatSessions({ backend, namespace, principal, }: {
|
|
97
|
+
backend: KeyValueSessionStorage.Backend;
|
|
98
|
+
namespace: string;
|
|
99
|
+
principal: string;
|
|
100
|
+
}): Promise<number>;
|
|
101
|
+
export type ChatSessionStorageOptions = {
|
|
102
|
+
kind: "sealed";
|
|
103
|
+
threadId: string;
|
|
104
|
+
/** {@link chatSessionNamespace}; one per person. */
|
|
105
|
+
namespace: string;
|
|
106
|
+
/** The signed-in account (`sessionPrincipal(userId)`): records live under its scoped keys. */
|
|
107
|
+
principal: string;
|
|
108
|
+
/** {@link createSealedSessionCodec}; one per person, kept for the life of the sign-in. */
|
|
109
|
+
codec: KeyValueSessionStorage.Codec;
|
|
110
|
+
database?: string;
|
|
111
|
+
retention?: KeyValueSessionStorage.Options["retention"];
|
|
112
|
+
onError?: (error: unknown) => void;
|
|
113
|
+
onEvict?: (event: KeyValueSessionStorage.EvictEvent) => void;
|
|
114
|
+
} | {
|
|
115
|
+
kind: "memory";
|
|
116
|
+
threadId: string;
|
|
117
|
+
/**
|
|
118
|
+
* Names the person: another person's thread never shares a record. The records list under
|
|
119
|
+
* {@link chatSessionMemoryNamespace} of it.
|
|
120
|
+
*/
|
|
121
|
+
scope: string;
|
|
122
|
+
/** The signed-in account (`sessionPrincipal(userId)`), as for sealed sessions. */
|
|
123
|
+
principal: string;
|
|
124
|
+
};
|
|
125
|
+
/** The backend that lists every `kind: "memory"` chat session of this page (read and remove only). */
|
|
126
|
+
export declare function chatSessionMemoryBackend(): KeyValueSessionStorage.Backend;
|
|
127
|
+
/** The namespace `scope`'s page-memory chat sessions list under ({@link chatSessionMemoryBackend}). */
|
|
128
|
+
export declare function chatSessionMemoryNamespace(scope: string): string;
|
|
129
|
+
/** Records no tab has mounted go after this long, sends and all (statewire 0.27.1 retention). */
|
|
130
|
+
export declare const CHAT_SESSION_MAX_AGE_MS: number;
|
|
131
|
+
/** Inactive records kept per person. */
|
|
132
|
+
export declare const CHAT_SESSION_MAX_ENTRIES = 50;
|
|
133
|
+
/** The thread's session storage element (`storage.session`) for the surface's mode. */
|
|
134
|
+
export declare function ChatSessionStorage(options: ChatSessionStorageOptions): ResourceElement<StatewireClient.SessionStorage>;
|
|
135
|
+
/** The key-value backend sealed chat sessions write through (`indexedDbBackend`). */
|
|
136
|
+
export declare function chatSessionBackend(database?: string): KeyValueSessionStorage.Backend;
|
|
137
|
+
/** A waiting message as a listing reads it: the entry, and where it stands in its outbox. */
|
|
138
|
+
export interface ChatOutboxListedEntry extends ChatOutboxEntry {
|
|
139
|
+
/** Held (waiting here), queued to go, or sent and not answered yet. Legacy records read as held. */
|
|
140
|
+
state?: StatewireClient.OutboxEntry["state"];
|
|
141
|
+
/** It failed (a held entry carrying `localMeta.error`): Retry, Edit or Discard. */
|
|
142
|
+
failed?: boolean;
|
|
143
|
+
}
|
|
144
|
+
/** One thread's waiting messages, as the device keeps them. */
|
|
145
|
+
export interface ChatOutboxDirectoryThread {
|
|
146
|
+
threadId: string;
|
|
147
|
+
/** Its messages still to be sent (held, queued or sending), in queue order. */
|
|
148
|
+
entries: readonly ChatOutboxListedEntry[];
|
|
149
|
+
}
|
|
150
|
+
export interface ChatOutboxListing {
|
|
151
|
+
threads: readonly ChatOutboxDirectoryThread[];
|
|
152
|
+
/** Records that would not open (another key, a damaged record): they may hold messages too. */
|
|
153
|
+
unreadable: number;
|
|
154
|
+
}
|
|
155
|
+
export interface ChatOutboxStorageSource {
|
|
156
|
+
backend: KeyValueSessionStorage.Backend;
|
|
157
|
+
namespace: string;
|
|
158
|
+
/** Whose sessions: only records under its scoped keys ({@link chatSessionKey}) are listed. */
|
|
159
|
+
principal: string;
|
|
160
|
+
codec?: KeyValueSessionStorage.Codec;
|
|
161
|
+
/** The previous store, read until each thread's records are migrated. */
|
|
162
|
+
legacy?: LegacyChatOutboxReader;
|
|
163
|
+
}
|
|
164
|
+
/**
|
|
165
|
+
* Every thread's waiting messages `principal` keeps under `namespace`, mounted or not
|
|
166
|
+
* (`readOutboxes`, one record at a time so a record that does not open is counted, not fatal),
|
|
167
|
+
* merged with the legacy store's records not migrated yet. Threads are ordered by their oldest
|
|
168
|
+
* message.
|
|
169
|
+
*/
|
|
170
|
+
export declare function listChatOutboxes({ backend, namespace, principal, codec, legacy, }: ChatOutboxStorageSource): Promise<ChatOutboxListing>;
|
|
171
|
+
/**
|
|
172
|
+
* How many messages wait across every thread (a sign-out asks first while any do). Records that do
|
|
173
|
+
* not open count as one each: they may hold someone's only copy. Legacy records count unopened.
|
|
174
|
+
*/
|
|
175
|
+
export declare function countChatOutboxMessages(source: ChatOutboxStorageSource): Promise<number>;
|
|
176
|
+
/**
|
|
177
|
+
* Every chat session record under `namespace` (every principal's, and records 0.24 left unscoped),
|
|
178
|
+
* and the legacy store's records, gone (a sign-out the person chose).
|
|
179
|
+
*/
|
|
180
|
+
export declare function clearChatOutboxes({ backend, namespace, legacy }: ChatOutboxStorageSource): Promise<void>;
|
|
181
|
+
/** A live view of every thread's waiting messages, for the tray and the "waiting to sync" panels. */
|
|
182
|
+
export interface ChatOutboxDirectory {
|
|
183
|
+
getSnapshot(): ChatOutboxListing;
|
|
184
|
+
subscribe(listener: () => void): () => void;
|
|
185
|
+
/** Read again now (after a migration, a sign-out). */
|
|
186
|
+
refresh(): void;
|
|
187
|
+
}
|
|
188
|
+
/**
|
|
189
|
+
* {@link listChatOutboxes}, re-read whenever a record under `namespace` is saved here or in another
|
|
190
|
+
* tab (`backend.subscribe`), while anything listens. One per person.
|
|
191
|
+
*/
|
|
192
|
+
export declare function createChatOutboxDirectory(source: ChatOutboxStorageSource & {
|
|
193
|
+
onError?: (error: unknown) => void;
|
|
194
|
+
}): ChatOutboxDirectory;
|