@athenaintel/react 0.57.2 → 0.60.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 +795 -12
- 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 +0 -16
- 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 +1 -17
- 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 +93 -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 +19 -0
- package/dist/agent-runtime/src/tool-metadata.cjs.map +1 -1
- package/dist/agent-runtime/src/tool-metadata.js +19 -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 +301 -98
- package/dist/chat/AthenaChat.cjs.map +1 -1
- package/dist/chat/AthenaChat.d.ts +80 -4
- package/dist/chat/AthenaChat.js +302 -99
- 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 +5 -0
- package/dist/chat-ui/index.cjs.map +1 -1
- package/dist/chat-ui/index.d.ts +4 -2
- package/dist/chat-ui/index.js +5 -0
- package/dist/chat-ui/index.js.map +1 -1
- package/dist/chat-ui/mentions/mention-chip.cjs +10 -4
- package/dist/chat-ui/mentions/mention-chip.cjs.map +1 -1
- package/dist/chat-ui/mentions/mention-chip.js +11 -5
- 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 +20 -2
- package/dist/chat-ui/mentions/suggestions/components/mention-icon.cjs.map +1 -1
- package/dist/chat-ui/mentions/suggestions/components/mention-icon.d.ts +10 -1
- package/dist/chat-ui/mentions/suggestions/components/mention-icon.js +22 -4
- 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 +45 -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 +48 -0
- package/dist/chat-ui/mentions/suggestions/data/api-client.js +45 -0
- package/dist/chat-ui/mentions/suggestions/data/api-client.js.map +1 -1
- package/dist/chat-ui/mentions/suggestions/data/sources/asset-type-icon-names.generated.cjs +89 -0
- package/dist/chat-ui/mentions/suggestions/data/sources/asset-type-icon-names.generated.cjs.map +1 -0
- package/dist/chat-ui/mentions/suggestions/data/sources/asset-type-icon-names.generated.d.ts +8 -0
- package/dist/chat-ui/mentions/suggestions/data/sources/asset-type-icon-names.generated.js +89 -0
- package/dist/chat-ui/mentions/suggestions/data/sources/asset-type-icon-names.generated.js.map +1 -0
- package/dist/chat-ui/mentions/suggestions/data/sources/asset-type-icons.cjs +140 -116
- package/dist/chat-ui/mentions/suggestions/data/sources/asset-type-icons.cjs.map +1 -1
- package/dist/chat-ui/mentions/suggestions/data/sources/asset-type-icons.d.ts +46 -12
- package/dist/chat-ui/mentions/suggestions/data/sources/asset-type-icons.js +141 -117
- package/dist/chat-ui/mentions/suggestions/data/sources/asset-type-icons.js.map +1 -1
- package/dist/chat-ui/mentions/suggestions/data/sources/index.cjs +272 -25
- 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 +274 -27
- 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/mentions/use-asset-icon-app-url.cjs +12 -0
- package/dist/chat-ui/mentions/use-asset-icon-app-url.cjs.map +1 -0
- package/dist/chat-ui/mentions/use-asset-icon-app-url.d.ts +8 -0
- package/dist/chat-ui/mentions/use-asset-icon-app-url.js +12 -0
- package/dist/chat-ui/mentions/use-asset-icon-app-url.js.map +1 -0
- 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 +41 -6
- package/dist/collab/client.cjs.map +1 -1
- package/dist/collab/client.d.ts +38 -7
- package/dist/collab/client.js +41 -6
- 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/staged-message-metadata.cjs +12 -0
- package/dist/composer/staged-message-metadata.cjs.map +1 -0
- package/dist/composer/staged-message-metadata.d.ts +15 -0
- package/dist/composer/staged-message-metadata.js +12 -0
- package/dist/composer/staged-message-metadata.js.map +1 -0
- 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 +460 -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 +460 -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 +60 -22
- package/dist/provider/AthenaProvider.cjs.map +1 -1
- package/dist/provider/AthenaProvider.d.ts +24 -8
- package/dist/provider/AthenaProvider.js +61 -23
- 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/parse.cjs +11 -1
- package/dist/references/src/anchors/parse.cjs.map +1 -1
- package/dist/references/src/anchors/parse.js +11 -1
- package/dist/references/src/anchors/parse.js.map +1 -1
- package/dist/references/src/anchors/schemas.d.ts +1 -0
- package/dist/references/src/anchors/serialize.cjs +1 -0
- package/dist/references/src/anchors/serialize.cjs.map +1 -1
- package/dist/references/src/anchors/serialize.js +1 -0
- package/dist/references/src/anchors/serialize.js.map +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.d.ts +9 -0
- 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/references/src/schemas.d.ts +2 -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 +64 -9
- package/dist/runtime/useAthenaStatewireRuntime.cjs.map +1 -1
- package/dist/runtime/useAthenaStatewireRuntime.d.ts +26 -10
- package/dist/runtime/useAthenaStatewireRuntime.js +66 -11
- 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/statewire-thread-list.cjs +14 -2
- package/dist/threads/statewire-thread-list.cjs.map +1 -1
- package/dist/threads/statewire-thread-list.d.ts +11 -2
- package/dist/threads/statewire-thread-list.js +14 -2
- package/dist/threads/statewire-thread-list.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 +429 -0
- package/dist/tools/drive-tool-uis.cjs.map +1 -0
- package/dist/tools/drive-tool-uis.d.ts +121 -0
- package/dist/tools/drive-tool-uis.js +429 -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/version.cjs +4 -0
- package/dist/version.cjs.map +1 -1
- package/dist/version.d.ts +9 -0
- package/dist/version.js +4 -0
- package/dist/version.js.map +1 -1
- package/dist/workbench/live-desktop-api.cjs +2 -1
- package/dist/workbench/live-desktop-api.cjs.map +1 -1
- package/dist/workbench/live-desktop-api.js +2 -1
- package/dist/workbench/live-desktop-api.js.map +1 -1
- package/dist/workbench/session-workbench-panes.cjs +6 -6
- package/dist/workbench/session-workbench-panes.cjs.map +1 -1
- package/dist/workbench/session-workspace-api.cjs +7 -2
- package/dist/workbench/session-workspace-api.cjs.map +1 -1
- package/dist/workbench/session-workspace-api.d.ts +10 -0
- package/dist/workbench/session-workspace-api.js +7 -2
- package/dist/workbench/session-workspace-api.js.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
|
@@ -1,510 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
|
|
3
|
-
const sealedIdb = require("./sealed-idb.cjs");
|
|
4
|
-
const CHAT_OUTBOX_DATABASE = "athena-chat-outbox:v1";
|
|
5
|
-
const CHAT_OUTBOX_FORMAT = 1;
|
|
6
|
-
const DATABASE_VERSION = 1;
|
|
7
|
-
const ENTRIES_STORE = "entries";
|
|
8
|
-
const BY_OWNER = "byOwner";
|
|
9
|
-
const BY_OWNER_THREAD = "byOwnerThread";
|
|
10
|
-
function upgradeOutboxDatabase(db) {
|
|
11
|
-
if (!db.objectStoreNames.contains(ENTRIES_STORE)) {
|
|
12
|
-
const store = db.createObjectStore(ENTRIES_STORE, { keyPath: "key" });
|
|
13
|
-
store.createIndex(BY_OWNER, "owner", { unique: false });
|
|
14
|
-
store.createIndex(BY_OWNER_THREAD, ["owner", "thread"], { unique: false });
|
|
15
|
-
}
|
|
16
|
-
}
|
|
17
|
-
function isRecord(value) {
|
|
18
|
-
return typeof value === "object" && value !== null;
|
|
19
|
-
}
|
|
20
|
-
function isOwnFormat(record) {
|
|
21
|
-
if (!isRecord(record)) return true;
|
|
22
|
-
const format = record.format;
|
|
23
|
-
return typeof format !== "number" || format <= CHAT_OUTBOX_FORMAT;
|
|
24
|
-
}
|
|
25
|
-
function readChatOutboxClaim(value) {
|
|
26
|
-
if (!isRecord(value) || typeof value.by !== "string" || typeof value.at !== "number") return void 0;
|
|
27
|
-
return { by: value.by, at: value.at };
|
|
28
|
-
}
|
|
29
|
-
const FAILURE_REASONS = /* @__PURE__ */ new Set([
|
|
30
|
-
"refused",
|
|
31
|
-
"error",
|
|
32
|
-
"prepare",
|
|
33
|
-
"attachment"
|
|
34
|
-
]);
|
|
35
|
-
function readChatOutboxFailure(value) {
|
|
36
|
-
if (!isRecord(value) || typeof value.at !== "number") return void 0;
|
|
37
|
-
const reason = typeof value.reason === "string" && FAILURE_REASONS.has(value.reason) ? value.reason : "error";
|
|
38
|
-
return { reason, at: value.at };
|
|
39
|
-
}
|
|
40
|
-
const readClaim = readChatOutboxClaim;
|
|
41
|
-
function readFiles(value) {
|
|
42
|
-
if (!Array.isArray(value)) return void 0;
|
|
43
|
-
const files = [];
|
|
44
|
-
for (const file of value) {
|
|
45
|
-
if (!isRecord(file) || typeof file.url !== "string" || typeof file.mediaType !== "string") continue;
|
|
46
|
-
files.push({
|
|
47
|
-
url: file.url,
|
|
48
|
-
mediaType: file.mediaType,
|
|
49
|
-
...typeof file.filename === "string" && { filename: file.filename }
|
|
50
|
-
});
|
|
51
|
-
}
|
|
52
|
-
return files.length > 0 ? files : void 0;
|
|
53
|
-
}
|
|
54
|
-
function readAttachments(value) {
|
|
55
|
-
if (!Array.isArray(value)) return void 0;
|
|
56
|
-
const attachments = [];
|
|
57
|
-
for (const attachment of value) {
|
|
58
|
-
if (!isRecord(attachment) || typeof attachment.assetId !== "string" || attachment.assetId.length === 0) {
|
|
59
|
-
continue;
|
|
60
|
-
}
|
|
61
|
-
attachments.push({
|
|
62
|
-
assetId: attachment.assetId,
|
|
63
|
-
title: typeof attachment.title === "string" ? attachment.title : "",
|
|
64
|
-
...typeof attachment.mediaType === "string" && { mediaType: attachment.mediaType }
|
|
65
|
-
});
|
|
66
|
-
}
|
|
67
|
-
return attachments.length > 0 ? attachments : void 0;
|
|
68
|
-
}
|
|
69
|
-
function parseChatOutboxEntry(value) {
|
|
70
|
-
if (!isRecord(value)) return null;
|
|
71
|
-
const { id, threadId, text, queuedAt } = value;
|
|
72
|
-
if (typeof id !== "string" || typeof threadId !== "string" || typeof text !== "string") return null;
|
|
73
|
-
if (typeof queuedAt !== "number" || !Number.isFinite(queuedAt)) return null;
|
|
74
|
-
const files = readFiles(value.files);
|
|
75
|
-
const attachments = readAttachments(value.attachments);
|
|
76
|
-
return {
|
|
77
|
-
id,
|
|
78
|
-
threadId,
|
|
79
|
-
text,
|
|
80
|
-
queuedAt,
|
|
81
|
-
newChat: value.newChat === true,
|
|
82
|
-
...typeof value.composerMarkdown === "string" && { composerMarkdown: value.composerMarkdown },
|
|
83
|
-
...typeof value.composerHtml === "string" && { composerHtml: value.composerHtml },
|
|
84
|
-
...isRecord(value.metadata) && { metadata: value.metadata },
|
|
85
|
-
...isRecord(value.sendContext) && !Array.isArray(value.sendContext) && { sendContext: value.sendContext },
|
|
86
|
-
...files && { files },
|
|
87
|
-
...attachments && { attachments }
|
|
88
|
-
};
|
|
89
|
-
}
|
|
90
|
-
function byQueuedAt(a, b) {
|
|
91
|
-
return a.entry.queuedAt - b.entry.queuedAt;
|
|
92
|
-
}
|
|
93
|
-
function createChangeBus(channelName) {
|
|
94
|
-
const listeners = /* @__PURE__ */ new Set();
|
|
95
|
-
const ChannelCtor = globalThis.BroadcastChannel;
|
|
96
|
-
let channel = null;
|
|
97
|
-
const emit = () => {
|
|
98
|
-
for (const listener of listeners) {
|
|
99
|
-
try {
|
|
100
|
-
listener();
|
|
101
|
-
} catch {
|
|
102
|
-
}
|
|
103
|
-
}
|
|
104
|
-
};
|
|
105
|
-
return {
|
|
106
|
-
notify() {
|
|
107
|
-
emit();
|
|
108
|
-
try {
|
|
109
|
-
channel == null ? void 0 : channel.postMessage("changed");
|
|
110
|
-
} catch {
|
|
111
|
-
}
|
|
112
|
-
},
|
|
113
|
-
subscribe(listener) {
|
|
114
|
-
listeners.add(listener);
|
|
115
|
-
if (!channel && ChannelCtor) {
|
|
116
|
-
try {
|
|
117
|
-
channel = new ChannelCtor(channelName);
|
|
118
|
-
channel.onmessage = emit;
|
|
119
|
-
} catch {
|
|
120
|
-
channel = null;
|
|
121
|
-
}
|
|
122
|
-
}
|
|
123
|
-
return () => {
|
|
124
|
-
listeners.delete(listener);
|
|
125
|
-
if (listeners.size === 0 && channel) {
|
|
126
|
-
channel.close();
|
|
127
|
-
channel = null;
|
|
128
|
-
}
|
|
129
|
-
};
|
|
130
|
-
}
|
|
131
|
-
};
|
|
132
|
-
}
|
|
133
|
-
function createIndexedDbChatOutboxStore(options) {
|
|
134
|
-
return withChatOutboxMemoryFallback(createSealedIndexedDbChatOutboxStore(options));
|
|
135
|
-
}
|
|
136
|
-
function createSealedIndexedDbChatOutboxStore({
|
|
137
|
-
ownerId,
|
|
138
|
-
getKey,
|
|
139
|
-
factory = sealedIdb.idbGlobals.indexedDB,
|
|
140
|
-
databaseName = CHAT_OUTBOX_DATABASE
|
|
141
|
-
}) {
|
|
142
|
-
const database = sealedIdb.lazySealedDatabase({
|
|
143
|
-
factory,
|
|
144
|
-
name: databaseName,
|
|
145
|
-
version: DATABASE_VERSION,
|
|
146
|
-
upgrade: upgradeOutboxDatabase
|
|
147
|
-
});
|
|
148
|
-
const bus = createChangeBus(`${databaseName}:changes`);
|
|
149
|
-
const keyOf = async (purpose) => {
|
|
150
|
-
try {
|
|
151
|
-
return await getKey(ownerId, purpose);
|
|
152
|
-
} catch {
|
|
153
|
-
return null;
|
|
154
|
-
}
|
|
155
|
-
};
|
|
156
|
-
const ownerHash = () => sealedIdb.sha256Hex(ownerId);
|
|
157
|
-
const threadHash = (threadId) => sealedIdb.sha256Hex(`${ownerId}|${threadId}`);
|
|
158
|
-
const recordKey = (threadId, id) => sealedIdb.sha256Hex(`${ownerId}|${threadId}|${id}`);
|
|
159
|
-
const aadOf = (owner, thread, key) => `athena-chat-outbox|${CHAT_OUTBOX_FORMAT}|${owner}|${thread}|${key}`;
|
|
160
|
-
let queue = Promise.resolve();
|
|
161
|
-
const enqueue = (task) => {
|
|
162
|
-
const run = queue.then(task, task);
|
|
163
|
-
queue = run.catch(() => void 0);
|
|
164
|
-
return run;
|
|
165
|
-
};
|
|
166
|
-
const openRecords = async (records) => {
|
|
167
|
-
if (records.length === 0) return [];
|
|
168
|
-
const cryptoKey = await keyOf("read");
|
|
169
|
-
if (!cryptoKey) return [];
|
|
170
|
-
const opened = [];
|
|
171
|
-
for (const record of records) {
|
|
172
|
-
if (!record || record.format > CHAT_OUTBOX_FORMAT) continue;
|
|
173
|
-
try {
|
|
174
|
-
const value = await sealedIdb.openJson({
|
|
175
|
-
key: cryptoKey,
|
|
176
|
-
sealed: record.sealed,
|
|
177
|
-
aad: aadOf(record.owner, record.thread, record.key)
|
|
178
|
-
});
|
|
179
|
-
const entry = parseChatOutboxEntry(value);
|
|
180
|
-
if (!entry) continue;
|
|
181
|
-
const claim = readClaim(record.claim);
|
|
182
|
-
const failure = readChatOutboxFailure(record.failure);
|
|
183
|
-
opened.push({ entry, ...claim && { claim }, ...failure && { failure } });
|
|
184
|
-
} catch {
|
|
185
|
-
}
|
|
186
|
-
}
|
|
187
|
-
return opened.sort(byQueuedAt);
|
|
188
|
-
};
|
|
189
|
-
return {
|
|
190
|
-
async list(threadId) {
|
|
191
|
-
try {
|
|
192
|
-
const db = await database();
|
|
193
|
-
if (!db) return [];
|
|
194
|
-
const owner = await ownerHash();
|
|
195
|
-
const thread = await threadHash(threadId);
|
|
196
|
-
const records = await sealedIdb.requestToPromise(
|
|
197
|
-
db.transaction(ENTRIES_STORE, "readonly").objectStore(ENTRIES_STORE).index(BY_OWNER_THREAD).getAll([owner, thread])
|
|
198
|
-
);
|
|
199
|
-
return await openRecords(records);
|
|
200
|
-
} catch {
|
|
201
|
-
return [];
|
|
202
|
-
}
|
|
203
|
-
},
|
|
204
|
-
async listAll() {
|
|
205
|
-
try {
|
|
206
|
-
const db = await database();
|
|
207
|
-
if (!db) return [];
|
|
208
|
-
const owner = await ownerHash();
|
|
209
|
-
const records = await sealedIdb.requestToPromise(
|
|
210
|
-
db.transaction(ENTRIES_STORE, "readonly").objectStore(ENTRIES_STORE).index(BY_OWNER).getAll(owner)
|
|
211
|
-
);
|
|
212
|
-
return await openRecords(records);
|
|
213
|
-
} catch {
|
|
214
|
-
return [];
|
|
215
|
-
}
|
|
216
|
-
},
|
|
217
|
-
async count() {
|
|
218
|
-
const db = await database();
|
|
219
|
-
if (!db) return 0;
|
|
220
|
-
const owner = await ownerHash();
|
|
221
|
-
const keys = await sealedIdb.requestToPromise(
|
|
222
|
-
db.transaction(ENTRIES_STORE, "readonly").objectStore(ENTRIES_STORE).index(BY_OWNER).getAllKeys(owner)
|
|
223
|
-
);
|
|
224
|
-
return keys.length;
|
|
225
|
-
},
|
|
226
|
-
put(entry) {
|
|
227
|
-
return enqueue(async () => {
|
|
228
|
-
try {
|
|
229
|
-
const db = await database();
|
|
230
|
-
if (!db) return false;
|
|
231
|
-
const cryptoKey = await keyOf("write");
|
|
232
|
-
if (!cryptoKey) return false;
|
|
233
|
-
const owner = await ownerHash();
|
|
234
|
-
const thread = await threadHash(entry.threadId);
|
|
235
|
-
const key = await recordKey(entry.threadId, entry.id);
|
|
236
|
-
const sealed = await sealedIdb.sealJson({ key: cryptoKey, value: entry, aad: aadOf(owner, thread, key) });
|
|
237
|
-
const tx = db.transaction(ENTRIES_STORE, "readwrite");
|
|
238
|
-
const store = tx.objectStore(ENTRIES_STORE);
|
|
239
|
-
const existing = await sealedIdb.requestToPromise(store.get(key));
|
|
240
|
-
let kept = true;
|
|
241
|
-
if (isOwnFormat(existing)) {
|
|
242
|
-
store.put({
|
|
243
|
-
key,
|
|
244
|
-
owner,
|
|
245
|
-
thread,
|
|
246
|
-
at: entry.queuedAt,
|
|
247
|
-
format: CHAT_OUTBOX_FORMAT,
|
|
248
|
-
sealed
|
|
249
|
-
});
|
|
250
|
-
} else {
|
|
251
|
-
kept = false;
|
|
252
|
-
}
|
|
253
|
-
await sealedIdb.transactionDone(tx);
|
|
254
|
-
bus.notify();
|
|
255
|
-
return kept;
|
|
256
|
-
} catch {
|
|
257
|
-
return false;
|
|
258
|
-
}
|
|
259
|
-
});
|
|
260
|
-
},
|
|
261
|
-
remove(threadId, id) {
|
|
262
|
-
return enqueue(async () => {
|
|
263
|
-
const db = await database();
|
|
264
|
-
if (!db) return;
|
|
265
|
-
const key = await recordKey(threadId, id);
|
|
266
|
-
const tx = db.transaction(ENTRIES_STORE, "readwrite");
|
|
267
|
-
const store = tx.objectStore(ENTRIES_STORE);
|
|
268
|
-
if (isOwnFormat(await sealedIdb.requestToPromise(store.get(key)))) store.delete(key);
|
|
269
|
-
await sealedIdb.transactionDone(tx);
|
|
270
|
-
bus.notify();
|
|
271
|
-
});
|
|
272
|
-
},
|
|
273
|
-
claim({ threadId, id, claimant, now, leaseMs }) {
|
|
274
|
-
return enqueue(async () => {
|
|
275
|
-
const db = await database();
|
|
276
|
-
if (!db) return "claimed";
|
|
277
|
-
const key = await recordKey(threadId, id);
|
|
278
|
-
const tx = db.transaction(ENTRIES_STORE, "readwrite");
|
|
279
|
-
const store = tx.objectStore(ENTRIES_STORE);
|
|
280
|
-
const existing = await sealedIdb.requestToPromise(store.get(key));
|
|
281
|
-
let result;
|
|
282
|
-
if (!existing) {
|
|
283
|
-
result = "gone";
|
|
284
|
-
} else {
|
|
285
|
-
const claim = readClaim(existing.claim);
|
|
286
|
-
if (claim && claim.by !== claimant && now - claim.at < leaseMs) {
|
|
287
|
-
result = "taken";
|
|
288
|
-
} else {
|
|
289
|
-
store.put({ ...existing, claim: { by: claimant, at: now } });
|
|
290
|
-
result = "claimed";
|
|
291
|
-
}
|
|
292
|
-
}
|
|
293
|
-
await sealedIdb.transactionDone(tx);
|
|
294
|
-
if (result === "claimed") bus.notify();
|
|
295
|
-
return result;
|
|
296
|
-
});
|
|
297
|
-
},
|
|
298
|
-
release({ threadId, id, claimant }) {
|
|
299
|
-
return enqueue(async () => {
|
|
300
|
-
var _a;
|
|
301
|
-
const db = await database();
|
|
302
|
-
if (!db) return;
|
|
303
|
-
const key = await recordKey(threadId, id);
|
|
304
|
-
const tx = db.transaction(ENTRIES_STORE, "readwrite");
|
|
305
|
-
const store = tx.objectStore(ENTRIES_STORE);
|
|
306
|
-
const existing = await sealedIdb.requestToPromise(store.get(key));
|
|
307
|
-
if (existing && ((_a = readClaim(existing.claim)) == null ? void 0 : _a.by) === claimant) {
|
|
308
|
-
const { claim: _claim, ...rest } = existing;
|
|
309
|
-
store.put(rest);
|
|
310
|
-
}
|
|
311
|
-
await sealedIdb.transactionDone(tx);
|
|
312
|
-
bus.notify();
|
|
313
|
-
});
|
|
314
|
-
},
|
|
315
|
-
markFailed({ threadId, id, claimant, failure }) {
|
|
316
|
-
return enqueue(async () => {
|
|
317
|
-
var _a;
|
|
318
|
-
const db = await database();
|
|
319
|
-
if (!db) return;
|
|
320
|
-
const key = await recordKey(threadId, id);
|
|
321
|
-
const tx = db.transaction(ENTRIES_STORE, "readwrite");
|
|
322
|
-
const store = tx.objectStore(ENTRIES_STORE);
|
|
323
|
-
const existing = await sealedIdb.requestToPromise(store.get(key));
|
|
324
|
-
if (existing && isOwnFormat(existing)) {
|
|
325
|
-
const { claim, ...rest } = existing;
|
|
326
|
-
const keepClaim = claim !== void 0 && ((_a = readClaim(claim)) == null ? void 0 : _a.by) !== claimant;
|
|
327
|
-
store.put({
|
|
328
|
-
...rest,
|
|
329
|
-
...keepClaim && { claim },
|
|
330
|
-
failure: { reason: failure.reason, at: failure.at }
|
|
331
|
-
});
|
|
332
|
-
}
|
|
333
|
-
await sealedIdb.transactionDone(tx);
|
|
334
|
-
bus.notify();
|
|
335
|
-
});
|
|
336
|
-
},
|
|
337
|
-
clearFailure({ threadId, id }) {
|
|
338
|
-
return enqueue(async () => {
|
|
339
|
-
const db = await database();
|
|
340
|
-
if (!db) return;
|
|
341
|
-
const key = await recordKey(threadId, id);
|
|
342
|
-
const tx = db.transaction(ENTRIES_STORE, "readwrite");
|
|
343
|
-
const store = tx.objectStore(ENTRIES_STORE);
|
|
344
|
-
const existing = await sealedIdb.requestToPromise(store.get(key));
|
|
345
|
-
if ((existing == null ? void 0 : existing.failure) !== void 0 && isOwnFormat(existing)) {
|
|
346
|
-
const { failure: _failure, ...rest } = existing;
|
|
347
|
-
store.put(rest);
|
|
348
|
-
}
|
|
349
|
-
await sealedIdb.transactionDone(tx);
|
|
350
|
-
bus.notify();
|
|
351
|
-
});
|
|
352
|
-
},
|
|
353
|
-
clear() {
|
|
354
|
-
return enqueue(async () => {
|
|
355
|
-
const db = await database();
|
|
356
|
-
if (!db) return;
|
|
357
|
-
const owner = await ownerHash();
|
|
358
|
-
const tx = db.transaction(ENTRIES_STORE, "readwrite");
|
|
359
|
-
const store = tx.objectStore(ENTRIES_STORE);
|
|
360
|
-
const keys = await sealedIdb.requestToPromise(store.index(BY_OWNER).getAllKeys(owner));
|
|
361
|
-
for (const key of keys) store.delete(key);
|
|
362
|
-
await sealedIdb.transactionDone(tx);
|
|
363
|
-
bus.notify();
|
|
364
|
-
});
|
|
365
|
-
},
|
|
366
|
-
subscribe: (listener) => bus.subscribe(listener)
|
|
367
|
-
};
|
|
368
|
-
}
|
|
369
|
-
function createRecordMap() {
|
|
370
|
-
const records = /* @__PURE__ */ new Map();
|
|
371
|
-
const keyOf = (threadId, id) => `${threadId}\0${id}`;
|
|
372
|
-
return {
|
|
373
|
-
records,
|
|
374
|
-
keyOf,
|
|
375
|
-
has: (threadId, id) => records.has(keyOf(threadId, id)),
|
|
376
|
-
sorted: (filter) => [...records.values()].filter(filter).map((record) => ({ ...record })).sort(byQueuedAt),
|
|
377
|
-
claim({ threadId, id, claimant, now, leaseMs }) {
|
|
378
|
-
const key = keyOf(threadId, id);
|
|
379
|
-
const record = records.get(key);
|
|
380
|
-
if (!record) return "gone";
|
|
381
|
-
if (record.claim && record.claim.by !== claimant && now - record.claim.at < leaseMs) return "taken";
|
|
382
|
-
records.set(key, { ...record, claim: { by: claimant, at: now } });
|
|
383
|
-
return "claimed";
|
|
384
|
-
},
|
|
385
|
-
release({ threadId, id, claimant }) {
|
|
386
|
-
var _a;
|
|
387
|
-
const key = keyOf(threadId, id);
|
|
388
|
-
const record = records.get(key);
|
|
389
|
-
if (((_a = record == null ? void 0 : record.claim) == null ? void 0 : _a.by) !== claimant) return;
|
|
390
|
-
const { claim: _claim, ...rest } = record;
|
|
391
|
-
records.set(key, rest);
|
|
392
|
-
},
|
|
393
|
-
markFailed({ threadId, id, claimant, failure }) {
|
|
394
|
-
const key = keyOf(threadId, id);
|
|
395
|
-
const record = records.get(key);
|
|
396
|
-
if (!record) return;
|
|
397
|
-
const { claim, ...rest } = record;
|
|
398
|
-
records.set(key, { ...rest, ...claim && claim.by !== claimant && { claim }, failure: { ...failure } });
|
|
399
|
-
},
|
|
400
|
-
clearFailure({ threadId, id }) {
|
|
401
|
-
const key = keyOf(threadId, id);
|
|
402
|
-
const record = records.get(key);
|
|
403
|
-
if (!(record == null ? void 0 : record.failure)) return;
|
|
404
|
-
const { failure: _failure, ...rest } = record;
|
|
405
|
-
records.set(key, rest);
|
|
406
|
-
}
|
|
407
|
-
};
|
|
408
|
-
}
|
|
409
|
-
function createListenerSet() {
|
|
410
|
-
const listeners = /* @__PURE__ */ new Set();
|
|
411
|
-
return {
|
|
412
|
-
notify() {
|
|
413
|
-
for (const listener of listeners) {
|
|
414
|
-
try {
|
|
415
|
-
listener();
|
|
416
|
-
} catch {
|
|
417
|
-
}
|
|
418
|
-
}
|
|
419
|
-
},
|
|
420
|
-
subscribe(listener) {
|
|
421
|
-
listeners.add(listener);
|
|
422
|
-
return () => {
|
|
423
|
-
listeners.delete(listener);
|
|
424
|
-
};
|
|
425
|
-
}
|
|
426
|
-
};
|
|
427
|
-
}
|
|
428
|
-
function withChatOutboxMemoryFallback(inner) {
|
|
429
|
-
const memory = createRecordMap();
|
|
430
|
-
const local = createListenerSet();
|
|
431
|
-
const remembered = (filter) => memory.sorted(filter).map((record) => ({ ...record, memoryOnly: true }));
|
|
432
|
-
const merged = (kept, extra) => {
|
|
433
|
-
const ids = new Set(kept.map((record) => record.entry.id));
|
|
434
|
-
return [...kept, ...extra.filter((record) => !ids.has(record.entry.id))].sort(byQueuedAt);
|
|
435
|
-
};
|
|
436
|
-
return {
|
|
437
|
-
async list(threadId) {
|
|
438
|
-
const kept = await inner.list(threadId).catch(() => []);
|
|
439
|
-
return merged(kept, remembered((record) => record.entry.threadId === threadId));
|
|
440
|
-
},
|
|
441
|
-
async listAll() {
|
|
442
|
-
const kept = await inner.listAll().catch(() => []);
|
|
443
|
-
return merged(kept, remembered(() => true));
|
|
444
|
-
},
|
|
445
|
-
async count() {
|
|
446
|
-
return await inner.count() + memory.records.size;
|
|
447
|
-
},
|
|
448
|
-
async put(entry) {
|
|
449
|
-
let kept = false;
|
|
450
|
-
try {
|
|
451
|
-
kept = await inner.put(entry);
|
|
452
|
-
} catch {
|
|
453
|
-
kept = false;
|
|
454
|
-
}
|
|
455
|
-
if (kept) return true;
|
|
456
|
-
memory.records.set(memory.keyOf(entry.threadId, entry.id), { entry });
|
|
457
|
-
local.notify();
|
|
458
|
-
return false;
|
|
459
|
-
},
|
|
460
|
-
async remove(threadId, id) {
|
|
461
|
-
if (memory.records.delete(memory.keyOf(threadId, id))) {
|
|
462
|
-
local.notify();
|
|
463
|
-
return;
|
|
464
|
-
}
|
|
465
|
-
await inner.remove(threadId, id);
|
|
466
|
-
},
|
|
467
|
-
async claim(input) {
|
|
468
|
-
if (!memory.has(input.threadId, input.id)) return inner.claim(input);
|
|
469
|
-
const result = memory.claim(input);
|
|
470
|
-
local.notify();
|
|
471
|
-
return result;
|
|
472
|
-
},
|
|
473
|
-
async release(input) {
|
|
474
|
-
if (!memory.has(input.threadId, input.id)) return inner.release(input);
|
|
475
|
-
memory.release(input);
|
|
476
|
-
local.notify();
|
|
477
|
-
},
|
|
478
|
-
async markFailed(input) {
|
|
479
|
-
if (!memory.has(input.threadId, input.id)) return inner.markFailed(input);
|
|
480
|
-
memory.markFailed(input);
|
|
481
|
-
local.notify();
|
|
482
|
-
},
|
|
483
|
-
async clearFailure(input) {
|
|
484
|
-
if (!memory.has(input.threadId, input.id)) return inner.clearFailure(input);
|
|
485
|
-
memory.clearFailure(input);
|
|
486
|
-
local.notify();
|
|
487
|
-
},
|
|
488
|
-
async clear() {
|
|
489
|
-
memory.records.clear();
|
|
490
|
-
local.notify();
|
|
491
|
-
await inner.clear();
|
|
492
|
-
},
|
|
493
|
-
subscribe(listener) {
|
|
494
|
-
const stopLocal = local.subscribe(listener);
|
|
495
|
-
const stopInner = inner.subscribe(listener);
|
|
496
|
-
return () => {
|
|
497
|
-
stopLocal();
|
|
498
|
-
stopInner();
|
|
499
|
-
};
|
|
500
|
-
}
|
|
501
|
-
};
|
|
502
|
-
}
|
|
503
|
-
exports.CHAT_OUTBOX_DATABASE = CHAT_OUTBOX_DATABASE;
|
|
504
|
-
exports.CHAT_OUTBOX_FORMAT = CHAT_OUTBOX_FORMAT;
|
|
505
|
-
exports.createIndexedDbChatOutboxStore = createIndexedDbChatOutboxStore;
|
|
506
|
-
exports.parseChatOutboxEntry = parseChatOutboxEntry;
|
|
507
|
-
exports.readChatOutboxClaim = readChatOutboxClaim;
|
|
508
|
-
exports.readChatOutboxFailure = readChatOutboxFailure;
|
|
509
|
-
exports.withChatOutboxMemoryFallback = withChatOutboxMemoryFallback;
|
|
510
|
-
//# sourceMappingURL=chat-outbox-store.cjs.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"chat-outbox-store.cjs","sources":["../../../../agent-runtime/src/chat-outbox-store.ts"],"sourcesContent":["import {\n type IdbDatabase,\n idbGlobals,\n lazySealedDatabase,\n openJson,\n requestToPromise,\n sealJson,\n sha256Hex,\n transactionDone,\n} from \"./sealed-idb\";\n\n/**\n * Where chat messages typed while Athena can't be reached wait until they are sent\n * (`chat-outbox.ts`): one store per person on this device, sealed with a key of theirs.\n *\n * This store can hold the only copy of what someone wrote, so it never deletes as a side effect:\n * a record goes when its message was handed to the conversation and the conversation's own journal\n * took it (`remove`), when the person cancels or discards it, or when the person chooses to sign\n * out (`clear`). A record that does not open (a key that is gone, a newer build's format) is left\n * where it is.\n */\n\n/** An already-uploaded file a waiting message refers to (never a file picked while offline). */\nexport interface ChatOutboxFile {\n /** A server-backed URL (an asset's image route); never a `blob:` or `data:` URL. */\n url: string;\n mediaType: string;\n filename?: string;\n}\n\n/**\n * A file already in Athena that a waiting message carries: an upload that finished before Athena\n * went out of reach (a file picked while it can't be reached is never attached: it can't upload).\n * Its reference rides the message's text, as a sent message's does; this copy names it so the\n * outbox can ask Athena, right before the message goes, that the file is still there and still the\n * person's to open (`ChatOutboxOptions.checkAttachments`).\n */\nexport interface ChatOutboxAttachment {\n assetId: string;\n /** Its name, as the composer showed it. */\n title: string;\n mediaType?: string;\n}\n\nexport interface ChatOutboxEntry {\n /**\n * The message id, minted when the message was typed. The message is sent under it, so a send\n * whose answer was lost can never post twice: statewire replays the same statement, and the\n * thread's host refuses an id it already holds (`duplicate-id`) or re-places one still queued.\n */\n id: string;\n threadId: string;\n /** The text exactly as it will be sent (what the model reads). */\n text: string;\n /** The composer draft the text was serialized from, for giving it back exactly as typed. */\n composerMarkdown?: string;\n /**\n * The draft as a composer whose draft is HTML holds it (the phone's: its mention chips\n * included), given back exactly on Cancel or Edit.\n */\n composerHtml?: string;\n /** The message metadata frozen when it was typed (its composer markdown, …). */\n metadata?: Record<string, unknown>;\n /**\n * The per-send settings the host puts back right before the message goes, kept with it so a\n * reload or another window hands it over with them (Olympus: the agents the message names).\n * Opaque to the outbox, except that a host's send gate may hand messages whose settings differ\n * over separately (`ChatOutboxSendGate`). An older build reads the message without them.\n */\n sendContext?: Record<string, unknown>;\n /** Already-uploaded files that ride along. */\n files?: ChatOutboxFile[];\n /**\n * The files already in Athena the message carries (uploads that finished before Athena went out\n * of reach), asked about right before it goes: a refused one keeps it as \"Couldn't send\".\n */\n attachments?: ChatOutboxAttachment[];\n /** When it was typed (epoch ms): a message that waited more than a day asks before it goes. */\n queuedAt: number;\n /** Typed into a chat that had never started: reopening that chat finds it again. */\n newChat: boolean;\n}\n\n/** Which window is handing a message to its conversation right now, and since when. */\nexport interface ChatOutboxClaim {\n by: string;\n at: number;\n}\n\n/** Why a hand-off failed. */\nexport type ChatOutboxFailureReason =\n /** The conversation refused it: stopped, or parked on an authorization denial. */\n | \"refused\"\n /** The send failed before the conversation's journal took it. */\n | \"error\"\n /** It could not be claimed for sending (the store failed). */\n | \"prepare\"\n /** Athena refused one of its attachments: gone, or no longer the person's to open. */\n | \"attachment\";\n\n/**\n * A failed hand-off, kept with the message: every window (and the next mount) shows it as\n * \"Couldn't send\", and nothing sends it again until the person says Retry.\n */\nexport interface ChatOutboxFailure {\n reason: ChatOutboxFailureReason;\n at: number;\n}\n\nexport interface ChatOutboxRecord {\n entry: ChatOutboxEntry;\n claim?: ChatOutboxClaim;\n failure?: ChatOutboxFailure;\n /**\n * Kept only in this store's memory, because this device could not keep it: it waits as long as\n * the page or the app stays open.\n */\n memoryOnly?: true;\n}\n\nexport type ChatOutboxClaimResult = \"claimed\" | \"taken\" | \"gone\";\n\n/**\n * A person's waiting messages. A store keeps every message put into it until it is removed: on\n * the device when it can (`put` resolves `true`), otherwise in its own memory for as long as the\n * store lives (`false`, listed with `memoryOnly`), so a host keeps one store per person and a\n * thread switch never loses a message (`withChatOutboxMemoryFallback`).\n */\nexport interface ChatOutboxStore {\n /** The thread's waiting messages, oldest first. Resolves `[]` when nothing can be read. */\n list(threadId: string): Promise<ChatOutboxRecord[]>;\n /** Every waiting message of this person, oldest first (sign-out, reopening a new chat). */\n listAll(): Promise<ChatOutboxRecord[]>;\n /**\n * How many messages wait, counted without opening them, so a record this build cannot read\n * still counts (a sign-out asks rather than deleting unread work); the ones kept only in memory\n * count too. Rejects when the device's records cannot be counted at all.\n */\n count(): Promise<number>;\n /** Keep a waiting message. Resolves `false` when it could not be kept on this device. */\n put(entry: ChatOutboxEntry): Promise<boolean>;\n remove(threadId: string, id: string): Promise<void>;\n /**\n * Claim a message for handing it to its conversation, atomically across windows: `taken` while\n * another claimant's claim is younger than `leaseMs`, `gone` when the record no longer exists\n * (cancelled, discarded, or handed by another window).\n */\n claim(input: {\n threadId: string;\n id: string;\n claimant: string;\n now: number;\n leaseMs: number;\n }): Promise<ChatOutboxClaimResult>;\n /** Drop `claimant`'s claim (its hand-off never reached the conversation). */\n release(input: { threadId: string; id: string; claimant: string }): Promise<void>;\n /** Keep the hand-off's failure with the message, dropping `claimant`'s claim. */\n markFailed(input: { threadId: string; id: string; claimant: string; failure: ChatOutboxFailure }): Promise<void>;\n /** The person said Retry: the message may be sent again. */\n clearFailure(input: { threadId: string; id: string }): Promise<void>;\n /** Every waiting message of this person, gone (a sign-out the person chose). */\n clear(): Promise<void>;\n /** Called after any change, this window's or another's. */\n subscribe(listener: () => void): () => void;\n}\n\nexport const CHAT_OUTBOX_DATABASE = \"athena-chat-outbox:v1\";\n/** The sealed record's format; an older build leaves a newer one alone. */\nexport const CHAT_OUTBOX_FORMAT = 1;\n\nconst DATABASE_VERSION = 1;\nconst ENTRIES_STORE = \"entries\";\nconst BY_OWNER = \"byOwner\";\nconst BY_OWNER_THREAD = \"byOwnerThread\";\n\ninterface StoredRecord {\n key: string;\n owner: string;\n thread: string;\n at: number;\n format: number;\n sealed: Uint8Array;\n claim?: ChatOutboxClaim;\n failure?: ChatOutboxFailure;\n}\n\nfunction upgradeOutboxDatabase(db: IdbDatabase): void {\n if (!db.objectStoreNames.contains(ENTRIES_STORE)) {\n const store = db.createObjectStore(ENTRIES_STORE, { keyPath: \"key\" });\n store.createIndex(BY_OWNER, \"owner\", { unique: false });\n store.createIndex(BY_OWNER_THREAD, [\"owner\", \"thread\"], { unique: false });\n }\n}\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n return typeof value === \"object\" && value !== null;\n}\n\n/** A record this build may replace or delete: none, or one in a format it writes itself. */\nfunction isOwnFormat(record: unknown): boolean {\n if (!isRecord(record)) return true;\n const format = record.format;\n return typeof format !== \"number\" || format <= CHAT_OUTBOX_FORMAT;\n}\n\nexport function readChatOutboxClaim(value: unknown): ChatOutboxClaim | undefined {\n if (!isRecord(value) || typeof value.by !== \"string\" || typeof value.at !== \"number\") return undefined;\n return { by: value.by, at: value.at };\n}\n\nconst FAILURE_REASONS: ReadonlySet<string> = new Set<ChatOutboxFailureReason>([\n \"refused\",\n \"error\",\n \"prepare\",\n \"attachment\",\n]);\n\n/** A failure read back from storage; an unknown reason reads as a send error (still failed). */\nexport function readChatOutboxFailure(value: unknown): ChatOutboxFailure | undefined {\n if (!isRecord(value) || typeof value.at !== \"number\") return undefined;\n const reason = typeof value.reason === \"string\" && FAILURE_REASONS.has(value.reason) ? value.reason : \"error\";\n return { reason: reason as ChatOutboxFailureReason, at: value.at };\n}\n\nconst readClaim = readChatOutboxClaim;\n\nfunction readFiles(value: unknown): ChatOutboxFile[] | undefined {\n if (!Array.isArray(value)) return undefined;\n const files: ChatOutboxFile[] = [];\n for (const file of value) {\n if (!isRecord(file) || typeof file.url !== \"string\" || typeof file.mediaType !== \"string\") continue;\n files.push({\n url: file.url,\n mediaType: file.mediaType,\n ...(typeof file.filename === \"string\" && { filename: file.filename }),\n });\n }\n return files.length > 0 ? files : undefined;\n}\n\nfunction readAttachments(value: unknown): ChatOutboxAttachment[] | undefined {\n if (!Array.isArray(value)) return undefined;\n const attachments: ChatOutboxAttachment[] = [];\n for (const attachment of value) {\n if (!isRecord(attachment) || typeof attachment.assetId !== \"string\" || attachment.assetId.length === 0) {\n continue;\n }\n attachments.push({\n assetId: attachment.assetId,\n title: typeof attachment.title === \"string\" ? attachment.title : \"\",\n ...(typeof attachment.mediaType === \"string\" && { mediaType: attachment.mediaType }),\n });\n }\n return attachments.length > 0 ? attachments : undefined;\n}\n\n/** A sealed entry read back, or `null` when it is not one. */\nexport function parseChatOutboxEntry(value: unknown): ChatOutboxEntry | null {\n if (!isRecord(value)) return null;\n const { id, threadId, text, queuedAt } = value;\n if (typeof id !== \"string\" || typeof threadId !== \"string\" || typeof text !== \"string\") return null;\n if (typeof queuedAt !== \"number\" || !Number.isFinite(queuedAt)) return null;\n const files = readFiles(value.files);\n const attachments = readAttachments(value.attachments);\n return {\n id,\n threadId,\n text,\n queuedAt,\n newChat: value.newChat === true,\n ...(typeof value.composerMarkdown === \"string\" && { composerMarkdown: value.composerMarkdown }),\n ...(typeof value.composerHtml === \"string\" && { composerHtml: value.composerHtml }),\n ...(isRecord(value.metadata) && { metadata: value.metadata }),\n ...(isRecord(value.sendContext) && !Array.isArray(value.sendContext) && { sendContext: value.sendContext }),\n ...(files && { files }),\n ...(attachments && { attachments }),\n };\n}\n\nfunction byQueuedAt(a: ChatOutboxRecord, b: ChatOutboxRecord): number {\n return a.entry.queuedAt - b.entry.queuedAt;\n}\n\n/** A tiny change bus: this window's listeners, plus other windows' through a BroadcastChannel. */\nfunction createChangeBus(channelName: string): {\n notify: () => void;\n subscribe: (listener: () => void) => () => void;\n} {\n const listeners = new Set<() => void>();\n type Channel = {\n postMessage(message: unknown): void;\n onmessage: ((event: unknown) => void) | null;\n close(): void;\n };\n const ChannelCtor = (globalThis as { BroadcastChannel?: new (name: string) => Channel }).BroadcastChannel;\n let channel: Channel | null = null;\n const emit = () => {\n for (const listener of listeners) {\n try {\n listener();\n } catch {\n // A listener's fault never reaches the store.\n }\n }\n };\n return {\n notify() {\n emit();\n try {\n channel?.postMessage(\"changed\");\n } catch {\n // Another window learns of the change on its next read.\n }\n },\n subscribe(listener) {\n listeners.add(listener);\n if (!channel && ChannelCtor) {\n try {\n channel = new ChannelCtor(channelName);\n channel.onmessage = emit;\n } catch {\n channel = null;\n }\n }\n return () => {\n listeners.delete(listener);\n if (listeners.size === 0 && channel) {\n channel.close();\n channel = null;\n }\n };\n },\n };\n}\n\n/** What a store asks the host's key for: opening kept messages, or keeping a new one. */\nexport type ChatOutboxKeyPurpose = \"read\" | \"write\";\n\nexport interface IndexedDbChatOutboxStoreOptions {\n /** The person this store belongs to (with the environment, the key's scope). */\n ownerId: string;\n /**\n * The person's AES-GCM key, or `null` when there is none for `purpose`: `read` opens what is\n * already kept (a key that exists, whatever the deployment's policy now says, so kept messages\n * always show and drain); `write` keeps a new message (a key only while the deployment lets\n * devices keep copies). Without a key to write with, `put` resolves `false` and the message\n * waits in this store's memory.\n */\n getKey: (ownerId: string, purpose: ChatOutboxKeyPurpose) => Promise<CryptoKey | null>;\n /** An `IDBFactory` (the browser's `indexedDB` by default; a fake one in tests). */\n factory?: object;\n databaseName?: string;\n}\n\n/**\n * The browser's outbox store (Olympus, the desktop app): IndexedDB records sealed with AES-GCM-256\n * under the person's key, the owner and the thread hashed for the index and bound to each record\n * as additional data, so the database names no one and a record moved to another owner or thread\n * fails to open. A message it cannot keep on the device waits in its memory\n * ({@link withChatOutboxMemoryFallback}).\n */\nexport function createIndexedDbChatOutboxStore(options: IndexedDbChatOutboxStoreOptions): ChatOutboxStore {\n return withChatOutboxMemoryFallback(createSealedIndexedDbChatOutboxStore(options));\n}\n\nfunction createSealedIndexedDbChatOutboxStore({\n ownerId,\n getKey,\n factory = idbGlobals.indexedDB,\n databaseName = CHAT_OUTBOX_DATABASE,\n}: IndexedDbChatOutboxStoreOptions): ChatOutboxStore {\n const database = lazySealedDatabase({\n factory,\n name: databaseName,\n version: DATABASE_VERSION,\n upgrade: upgradeOutboxDatabase,\n });\n const bus = createChangeBus(`${databaseName}:changes`);\n const keyOf = async (purpose: ChatOutboxKeyPurpose): Promise<CryptoKey | null> => {\n try {\n return await getKey(ownerId, purpose);\n } catch {\n return null;\n }\n };\n const ownerHash = () => sha256Hex(ownerId);\n const threadHash = (threadId: string) => sha256Hex(`${ownerId}|${threadId}`);\n const recordKey = (threadId: string, id: string) => sha256Hex(`${ownerId}|${threadId}|${id}`);\n const aadOf = (owner: string, thread: string, key: string) =>\n `athena-chat-outbox|${CHAT_OUTBOX_FORMAT}|${owner}|${thread}|${key}`;\n\n // Writes are serialized so a claim never races a put or a clear in this window; IndexedDB's own\n // transactions order them against other windows.\n let queue: Promise<unknown> = Promise.resolve();\n const enqueue = <T>(task: () => Promise<T>): Promise<T> => {\n const run = queue.then(task, task);\n queue = run.catch(() => undefined);\n return run;\n };\n\n const openRecords = async (records: StoredRecord[]): Promise<ChatOutboxRecord[]> => {\n if (records.length === 0) return [];\n const cryptoKey = await keyOf(\"read\");\n if (!cryptoKey) return [];\n const opened: ChatOutboxRecord[] = [];\n for (const record of records) {\n if (!record || record.format > CHAT_OUTBOX_FORMAT) continue;\n try {\n const value = await openJson({\n key: cryptoKey,\n sealed: record.sealed,\n aad: aadOf(record.owner, record.thread, record.key),\n });\n const entry = parseChatOutboxEntry(value);\n if (!entry) continue;\n const claim = readClaim(record.claim);\n const failure = readChatOutboxFailure(record.failure);\n opened.push({ entry, ...(claim && { claim }), ...(failure && { failure }) });\n } catch {\n // Not readable with this key: left as it is (it may be the only copy of someone's work).\n }\n }\n return opened.sort(byQueuedAt);\n };\n\n return {\n async list(threadId) {\n try {\n const db = await database();\n if (!db) return [];\n const owner = await ownerHash();\n const thread = await threadHash(threadId);\n const records = (await requestToPromise(\n db.transaction(ENTRIES_STORE, \"readonly\").objectStore(ENTRIES_STORE).index(BY_OWNER_THREAD).getAll([owner, thread]),\n )) as StoredRecord[];\n return await openRecords(records);\n } catch {\n return [];\n }\n },\n async listAll() {\n try {\n const db = await database();\n if (!db) return [];\n const owner = await ownerHash();\n const records = (await requestToPromise(\n db.transaction(ENTRIES_STORE, \"readonly\").objectStore(ENTRIES_STORE).index(BY_OWNER).getAll(owner),\n )) as StoredRecord[];\n return await openRecords(records);\n } catch {\n return [];\n }\n },\n async count() {\n const db = await database();\n if (!db) return 0;\n const owner = await ownerHash();\n const keys = await requestToPromise(\n db.transaction(ENTRIES_STORE, \"readonly\").objectStore(ENTRIES_STORE).index(BY_OWNER).getAllKeys(owner),\n );\n return keys.length;\n },\n put(entry) {\n return enqueue(async () => {\n try {\n const db = await database();\n if (!db) return false;\n const cryptoKey = await keyOf(\"write\");\n if (!cryptoKey) return false;\n const owner = await ownerHash();\n const thread = await threadHash(entry.threadId);\n const key = await recordKey(entry.threadId, entry.id);\n const sealed = await sealJson({ key: cryptoKey, value: entry, aad: aadOf(owner, thread, key) });\n const tx = db.transaction(ENTRIES_STORE, \"readwrite\");\n const store = tx.objectStore(ENTRIES_STORE);\n const existing = await requestToPromise(store.get(key));\n let kept = true;\n // A newer build's record of the same message stays as that build wrote it.\n if (isOwnFormat(existing)) {\n store.put({\n key,\n owner,\n thread,\n at: entry.queuedAt,\n format: CHAT_OUTBOX_FORMAT,\n sealed,\n } satisfies StoredRecord);\n } else {\n kept = false;\n }\n await transactionDone(tx);\n bus.notify();\n return kept;\n } catch {\n return false;\n }\n });\n },\n remove(threadId, id) {\n return enqueue(async () => {\n const db = await database();\n if (!db) return;\n const key = await recordKey(threadId, id);\n const tx = db.transaction(ENTRIES_STORE, \"readwrite\");\n const store = tx.objectStore(ENTRIES_STORE);\n if (isOwnFormat(await requestToPromise(store.get(key)))) store.delete(key);\n await transactionDone(tx);\n bus.notify();\n });\n },\n claim({ threadId, id, claimant, now, leaseMs }) {\n return enqueue(async () => {\n const db = await database();\n // No database: nothing else can hand this message, so the one window holding it may.\n if (!db) return \"claimed\" as const;\n const key = await recordKey(threadId, id);\n const tx = db.transaction(ENTRIES_STORE, \"readwrite\");\n const store = tx.objectStore(ENTRIES_STORE);\n const existing = (await requestToPromise(store.get(key))) as StoredRecord | undefined;\n let result: ChatOutboxClaimResult;\n if (!existing) {\n result = \"gone\";\n } else {\n const claim = readClaim(existing.claim);\n if (claim && claim.by !== claimant && now - claim.at < leaseMs) {\n result = \"taken\";\n } else {\n store.put({ ...existing, claim: { by: claimant, at: now } } satisfies StoredRecord);\n result = \"claimed\";\n }\n }\n await transactionDone(tx);\n if (result === \"claimed\") bus.notify();\n return result;\n });\n },\n release({ threadId, id, claimant }) {\n return enqueue(async () => {\n const db = await database();\n if (!db) return;\n const key = await recordKey(threadId, id);\n const tx = db.transaction(ENTRIES_STORE, \"readwrite\");\n const store = tx.objectStore(ENTRIES_STORE);\n const existing = (await requestToPromise(store.get(key))) as StoredRecord | undefined;\n if (existing && readClaim(existing.claim)?.by === claimant) {\n const { claim: _claim, ...rest } = existing;\n store.put(rest satisfies StoredRecord);\n }\n await transactionDone(tx);\n bus.notify();\n });\n },\n markFailed({ threadId, id, claimant, failure }) {\n return enqueue(async () => {\n const db = await database();\n if (!db) return;\n const key = await recordKey(threadId, id);\n const tx = db.transaction(ENTRIES_STORE, \"readwrite\");\n const store = tx.objectStore(ENTRIES_STORE);\n const existing = (await requestToPromise(store.get(key))) as StoredRecord | undefined;\n if (existing && isOwnFormat(existing)) {\n const { claim, ...rest } = existing;\n const keepClaim = claim !== undefined && readClaim(claim)?.by !== claimant;\n store.put({\n ...rest,\n ...(keepClaim && { claim }),\n failure: { reason: failure.reason, at: failure.at },\n } satisfies StoredRecord);\n }\n await transactionDone(tx);\n bus.notify();\n });\n },\n clearFailure({ threadId, id }) {\n return enqueue(async () => {\n const db = await database();\n if (!db) return;\n const key = await recordKey(threadId, id);\n const tx = db.transaction(ENTRIES_STORE, \"readwrite\");\n const store = tx.objectStore(ENTRIES_STORE);\n const existing = (await requestToPromise(store.get(key))) as StoredRecord | undefined;\n if (existing?.failure !== undefined && isOwnFormat(existing)) {\n const { failure: _failure, ...rest } = existing;\n store.put(rest satisfies StoredRecord);\n }\n await transactionDone(tx);\n bus.notify();\n });\n },\n clear() {\n return enqueue(async () => {\n const db = await database();\n if (!db) return;\n const owner = await ownerHash();\n const tx = db.transaction(ENTRIES_STORE, \"readwrite\");\n const store = tx.objectStore(ENTRIES_STORE);\n const keys = await requestToPromise(store.index(BY_OWNER).getAllKeys(owner));\n for (const key of keys) store.delete(key);\n await transactionDone(tx);\n bus.notify();\n });\n },\n subscribe: (listener) => bus.subscribe(listener),\n };\n}\n\n/** Records kept in a process's memory, with the claim and failure rules every store shares. */\nfunction createRecordMap() {\n const records = new Map<string, ChatOutboxRecord>();\n const keyOf = (threadId: string, id: string) => `${threadId}\\u0000${id}`;\n return {\n records,\n keyOf,\n has: (threadId: string, id: string) => records.has(keyOf(threadId, id)),\n sorted: (filter: (record: ChatOutboxRecord) => boolean) =>\n [...records.values()].filter(filter).map((record) => ({ ...record })).sort(byQueuedAt),\n claim({ threadId, id, claimant, now, leaseMs }: Parameters<ChatOutboxStore[\"claim\"]>[0]): ChatOutboxClaimResult {\n const key = keyOf(threadId, id);\n const record = records.get(key);\n if (!record) return \"gone\";\n if (record.claim && record.claim.by !== claimant && now - record.claim.at < leaseMs) return \"taken\";\n records.set(key, { ...record, claim: { by: claimant, at: now } });\n return \"claimed\";\n },\n release({ threadId, id, claimant }: Parameters<ChatOutboxStore[\"release\"]>[0]): void {\n const key = keyOf(threadId, id);\n const record = records.get(key);\n if (record?.claim?.by !== claimant) return;\n const { claim: _claim, ...rest } = record;\n records.set(key, rest);\n },\n markFailed({ threadId, id, claimant, failure }: Parameters<ChatOutboxStore[\"markFailed\"]>[0]): void {\n const key = keyOf(threadId, id);\n const record = records.get(key);\n if (!record) return;\n const { claim, ...rest } = record;\n records.set(key, { ...rest, ...(claim && claim.by !== claimant && { claim }), failure: { ...failure } });\n },\n clearFailure({ threadId, id }: Parameters<ChatOutboxStore[\"clearFailure\"]>[0]): void {\n const key = keyOf(threadId, id);\n const record = records.get(key);\n if (!record?.failure) return;\n const { failure: _failure, ...rest } = record;\n records.set(key, rest);\n },\n };\n}\n\nfunction createListenerSet() {\n const listeners = new Set<() => void>();\n return {\n notify() {\n for (const listener of listeners) {\n try {\n listener();\n } catch {\n // A listener's fault never reaches the store.\n }\n }\n },\n subscribe(listener: () => void): () => void {\n listeners.add(listener);\n return () => {\n listeners.delete(listener);\n };\n },\n };\n}\n\n/**\n * The store contract's memory half, around a store that keeps messages on the device: a message\n * `inner` could not keep (no key, no storage, a failed write) waits in this wrapper's memory,\n * listed with `memoryOnly` and counted, for as long as the wrapper lives. A host keeps one store\n * per person, so switching conversations never loses such a message, and a sign-out still asks\n * about it.\n */\nexport function withChatOutboxMemoryFallback(inner: ChatOutboxStore): ChatOutboxStore {\n const memory = createRecordMap();\n const local = createListenerSet();\n const remembered = (filter: (record: ChatOutboxRecord) => boolean): ChatOutboxRecord[] =>\n memory.sorted(filter).map((record) => ({ ...record, memoryOnly: true as const }));\n const merged = (kept: ChatOutboxRecord[], extra: ChatOutboxRecord[]): ChatOutboxRecord[] => {\n const ids = new Set(kept.map((record) => record.entry.id));\n return [...kept, ...extra.filter((record) => !ids.has(record.entry.id))].sort(byQueuedAt);\n };\n return {\n async list(threadId) {\n const kept = await inner.list(threadId).catch(() => []);\n return merged(kept, remembered((record) => record.entry.threadId === threadId));\n },\n async listAll() {\n const kept = await inner.listAll().catch(() => []);\n return merged(kept, remembered(() => true));\n },\n async count() {\n return (await inner.count()) + memory.records.size;\n },\n async put(entry) {\n let kept = false;\n try {\n kept = await inner.put(entry);\n } catch {\n kept = false;\n }\n if (kept) return true;\n memory.records.set(memory.keyOf(entry.threadId, entry.id), { entry });\n local.notify();\n return false;\n },\n async remove(threadId, id) {\n if (memory.records.delete(memory.keyOf(threadId, id))) {\n local.notify();\n return;\n }\n await inner.remove(threadId, id);\n },\n async claim(input) {\n if (!memory.has(input.threadId, input.id)) return inner.claim(input);\n const result = memory.claim(input);\n local.notify();\n return result;\n },\n async release(input) {\n if (!memory.has(input.threadId, input.id)) return inner.release(input);\n memory.release(input);\n local.notify();\n },\n async markFailed(input) {\n if (!memory.has(input.threadId, input.id)) return inner.markFailed(input);\n memory.markFailed(input);\n local.notify();\n },\n async clearFailure(input) {\n if (!memory.has(input.threadId, input.id)) return inner.clearFailure(input);\n memory.clearFailure(input);\n local.notify();\n },\n async clear() {\n memory.records.clear();\n local.notify();\n await inner.clear();\n },\n subscribe(listener) {\n const stopLocal = local.subscribe(listener);\n const stopInner = inner.subscribe(listener);\n return () => {\n stopLocal();\n stopInner();\n };\n },\n };\n}\n\n/**\n * An outbox store in this process's memory: for tests, and for a host that keeps nothing on the\n * device (the messages then wait only as long as the page or app stays open). `durable: false`\n * makes every `put` report that nothing was kept on the device, and lists its messages as\n * `memoryOnly`.\n */\nexport function createMemoryChatOutboxStore({ durable = true }: { durable?: boolean } = {}): ChatOutboxStore & {\n /** The records as stored (tests). */\n records(): ChatOutboxRecord[];\n} {\n const memory = createRecordMap();\n const listeners = createListenerSet();\n const listed = (filter: (record: ChatOutboxRecord) => boolean): ChatOutboxRecord[] =>\n memory.sorted(filter).map((record) => (durable ? record : { ...record, memoryOnly: true as const }));\n return {\n records: () => listed(() => true),\n async list(threadId) {\n return listed((record) => record.entry.threadId === threadId);\n },\n async listAll() {\n return listed(() => true);\n },\n async count() {\n return memory.records.size;\n },\n async put(entry) {\n const key = memory.keyOf(entry.threadId, entry.id);\n const existing = memory.records.get(key);\n memory.records.set(key, { ...existing, entry });\n listeners.notify();\n return durable;\n },\n async remove(threadId, id) {\n memory.records.delete(memory.keyOf(threadId, id));\n listeners.notify();\n },\n async claim(input) {\n const result = memory.claim(input);\n if (result === \"claimed\") listeners.notify();\n return result;\n },\n async release(input) {\n memory.release(input);\n listeners.notify();\n },\n async markFailed(input) {\n memory.markFailed(input);\n listeners.notify();\n },\n async clearFailure(input) {\n memory.clearFailure(input);\n listeners.notify();\n },\n async clear() {\n memory.records.clear();\n listeners.notify();\n },\n subscribe: (listener) => listeners.subscribe(listener),\n };\n}\n"],"names":["idbGlobals","lazySealedDatabase","sha256Hex","openJson","requestToPromise","sealJson","transactionDone"],"mappings":"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"}
|