@athenaintel/react 0.57.1 → 0.59.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +778 -9
- package/dist/agent-runtime/src/addressed-agents.cjs +16 -0
- package/dist/agent-runtime/src/addressed-agents.cjs.map +1 -0
- package/dist/agent-runtime/src/addressed-agents.d.ts +30 -0
- package/dist/agent-runtime/src/addressed-agents.js +16 -0
- package/dist/agent-runtime/src/addressed-agents.js.map +1 -0
- package/dist/agent-runtime/src/answer-label.cjs +4 -3
- package/dist/agent-runtime/src/answer-label.cjs.map +1 -1
- package/dist/agent-runtime/src/answer-label.d.ts +13 -6
- package/dist/agent-runtime/src/answer-label.js +4 -3
- package/dist/agent-runtime/src/answer-label.js.map +1 -1
- package/dist/agent-runtime/src/chat-outbox-attachments.cjs.map +1 -1
- package/dist/agent-runtime/src/chat-outbox-attachments.d.ts +1 -1
- package/dist/agent-runtime/src/chat-outbox-attachments.js.map +1 -1
- package/dist/agent-runtime/src/chat-outbox-entry.cjs +101 -0
- package/dist/agent-runtime/src/chat-outbox-entry.cjs.map +1 -0
- package/dist/agent-runtime/src/chat-outbox-entry.d.ts +99 -0
- package/dist/agent-runtime/src/chat-outbox-entry.js +101 -0
- package/dist/agent-runtime/src/chat-outbox-entry.js.map +1 -0
- package/dist/agent-runtime/src/chat-outbox-legacy.cjs +252 -0
- package/dist/agent-runtime/src/chat-outbox-legacy.cjs.map +1 -0
- package/dist/agent-runtime/src/chat-outbox-legacy.d.ts +96 -0
- package/dist/agent-runtime/src/chat-outbox-legacy.js +252 -0
- package/dist/agent-runtime/src/chat-outbox-legacy.js.map +1 -0
- package/dist/agent-runtime/src/chat-outbox-policy.cjs +30 -0
- package/dist/agent-runtime/src/chat-outbox-policy.cjs.map +1 -0
- package/dist/agent-runtime/src/chat-outbox-policy.d.ts +42 -0
- package/dist/agent-runtime/src/chat-outbox-policy.js +30 -0
- package/dist/agent-runtime/src/chat-outbox-policy.js.map +1 -0
- package/dist/agent-runtime/src/chat-outbox-storage.cjs +306 -0
- package/dist/agent-runtime/src/chat-outbox-storage.cjs.map +1 -0
- package/dist/agent-runtime/src/chat-outbox-storage.d.ts +194 -0
- package/dist/agent-runtime/src/chat-outbox-storage.js +306 -0
- package/dist/agent-runtime/src/chat-outbox-storage.js.map +1 -0
- package/dist/agent-runtime/src/chat-outbox-thread.cjs +21 -94
- package/dist/agent-runtime/src/chat-outbox-thread.cjs.map +1 -1
- package/dist/agent-runtime/src/chat-outbox-thread.d.ts +22 -18
- package/dist/agent-runtime/src/chat-outbox-thread.js +21 -94
- package/dist/agent-runtime/src/chat-outbox-thread.js.map +1 -1
- package/dist/agent-runtime/src/chat-outbox.cjs +492 -547
- package/dist/agent-runtime/src/chat-outbox.cjs.map +1 -1
- package/dist/agent-runtime/src/chat-outbox.d.ts +110 -142
- package/dist/agent-runtime/src/chat-outbox.js +492 -547
- package/dist/agent-runtime/src/chat-outbox.js.map +1 -1
- package/dist/agent-runtime/src/composer-markdown.cjs.map +1 -1
- package/dist/agent-runtime/src/composer-markdown.d.ts +1 -1
- package/dist/agent-runtime/src/composer-markdown.js.map +1 -1
- package/dist/agent-runtime/src/deep-agent-transport-recipe.cjs +3 -1
- package/dist/agent-runtime/src/deep-agent-transport-recipe.cjs.map +1 -1
- package/dist/agent-runtime/src/deep-agent-transport-recipe.d.ts +8 -1
- package/dist/agent-runtime/src/deep-agent-transport-recipe.js +3 -1
- package/dist/agent-runtime/src/deep-agent-transport-recipe.js.map +1 -1
- package/dist/agent-runtime/src/dictation-preferences.d.ts +356 -0
- package/dist/agent-runtime/src/dictation-record.d.ts +279 -0
- package/dist/agent-runtime/src/dictation-session.d.ts +106 -7
- package/dist/agent-runtime/src/dictation-snippets.d.ts +9 -0
- package/dist/agent-runtime/src/dictation-transfer.d.ts +142 -0
- package/dist/agent-runtime/src/edit-command.cjs.map +1 -1
- package/dist/agent-runtime/src/edit-command.d.ts +1 -1
- package/dist/agent-runtime/src/edit-command.js.map +1 -1
- package/dist/agent-runtime/src/errors.cjs +1 -0
- package/dist/agent-runtime/src/errors.cjs.map +1 -1
- package/dist/agent-runtime/src/errors.js +1 -0
- package/dist/agent-runtime/src/errors.js.map +1 -1
- package/dist/agent-runtime/src/generated/runconfig-contract.cjs +24 -0
- package/dist/agent-runtime/src/generated/runconfig-contract.cjs.map +1 -1
- package/dist/agent-runtime/src/generated/runconfig-contract.d.ts +3 -3
- package/dist/agent-runtime/src/generated/runconfig-contract.js +24 -0
- package/dist/agent-runtime/src/generated/runconfig-contract.js.map +1 -1
- package/dist/agent-runtime/src/index.d.ts +14 -8
- package/dist/agent-runtime/src/lane-follow.cjs +289 -0
- package/dist/agent-runtime/src/lane-follow.cjs.map +1 -0
- package/dist/agent-runtime/src/lane-follow.js +289 -0
- package/dist/agent-runtime/src/lane-follow.js.map +1 -0
- package/dist/agent-runtime/src/lane-images.cjs +387 -0
- package/dist/agent-runtime/src/lane-images.cjs.map +1 -0
- package/dist/agent-runtime/src/lane-images.js +387 -0
- package/dist/agent-runtime/src/lane-images.js.map +1 -0
- package/dist/agent-runtime/src/message-window.js +1 -1
- package/dist/agent-runtime/src/messages.cjs +19 -1
- package/dist/agent-runtime/src/messages.cjs.map +1 -1
- package/dist/agent-runtime/src/messages.d.ts +8 -0
- package/dist/agent-runtime/src/messages.js +21 -3
- package/dist/agent-runtime/src/messages.js.map +1 -1
- package/dist/agent-runtime/src/named-agents.cjs +301 -0
- package/dist/agent-runtime/src/named-agents.cjs.map +1 -0
- package/dist/agent-runtime/src/named-agents.d.ts +246 -0
- package/dist/agent-runtime/src/named-agents.js +301 -0
- package/dist/agent-runtime/src/named-agents.js.map +1 -0
- package/dist/agent-runtime/src/offline-status.cjs.map +1 -1
- package/dist/agent-runtime/src/offline-status.d.ts +66 -2
- package/dist/agent-runtime/src/offline-status.js.map +1 -1
- package/dist/agent-runtime/src/ptc-subcalls.cjs +41 -0
- package/dist/agent-runtime/src/ptc-subcalls.cjs.map +1 -0
- package/dist/agent-runtime/src/ptc-subcalls.js +41 -0
- package/dist/agent-runtime/src/ptc-subcalls.js.map +1 -0
- package/dist/agent-runtime/src/queue.cjs +2 -2
- package/dist/agent-runtime/src/queue.cjs.map +1 -1
- package/dist/agent-runtime/src/queue.d.ts +20 -25
- package/dist/agent-runtime/src/queue.js +2 -2
- package/dist/agent-runtime/src/queue.js.map +1 -1
- package/dist/agent-runtime/src/quota-safe-local-storage-session.cjs +314 -84
- package/dist/agent-runtime/src/quota-safe-local-storage-session.cjs.map +1 -1
- package/dist/agent-runtime/src/quota-safe-local-storage-session.d.ts +137 -40
- package/dist/agent-runtime/src/quota-safe-local-storage-session.js +318 -88
- package/dist/agent-runtime/src/quota-safe-local-storage-session.js.map +1 -1
- package/dist/agent-runtime/src/run-send.cjs +54 -0
- package/dist/agent-runtime/src/run-send.cjs.map +1 -0
- package/dist/agent-runtime/src/run-send.d.ts +51 -0
- package/dist/agent-runtime/src/run-send.js +54 -0
- package/dist/agent-runtime/src/run-send.js.map +1 -0
- package/dist/agent-runtime/src/running-tool-placeholder.cjs +6 -0
- package/dist/agent-runtime/src/running-tool-placeholder.cjs.map +1 -1
- package/dist/agent-runtime/src/running-tool-placeholder.js +6 -0
- package/dist/agent-runtime/src/running-tool-placeholder.js.map +1 -1
- package/dist/agent-runtime/src/runtime.d.ts +9 -5
- package/dist/agent-runtime/src/sealed-idb.cjs +64 -0
- package/dist/agent-runtime/src/sealed-idb.cjs.map +1 -1
- package/dist/agent-runtime/src/sealed-idb.d.ts +16 -0
- package/dist/agent-runtime/src/sealed-idb.js +64 -0
- package/dist/agent-runtime/src/sealed-idb.js.map +1 -1
- package/dist/agent-runtime/src/send-recovery.cjs +90 -118
- package/dist/agent-runtime/src/send-recovery.cjs.map +1 -1
- package/dist/agent-runtime/src/send-recovery.d.ts +25 -29
- package/dist/agent-runtime/src/send-recovery.js +90 -118
- package/dist/agent-runtime/src/send-recovery.js.map +1 -1
- package/dist/agent-runtime/src/statewire-diagnostics.d.ts +4 -1
- package/dist/agent-runtime/src/statewire-held-sends.cjs +191 -0
- package/dist/agent-runtime/src/statewire-held-sends.cjs.map +1 -0
- package/dist/agent-runtime/src/statewire-held-sends.d.ts +119 -0
- package/dist/agent-runtime/src/statewire-held-sends.js +191 -0
- package/dist/agent-runtime/src/statewire-held-sends.js.map +1 -0
- package/dist/agent-runtime/src/statewire-state.cjs +4 -0
- package/dist/agent-runtime/src/statewire-state.cjs.map +1 -1
- package/dist/agent-runtime/src/statewire-state.js +4 -0
- package/dist/agent-runtime/src/statewire-state.js.map +1 -1
- package/dist/agent-runtime/src/statewire-transport.cjs +8 -2
- package/dist/agent-runtime/src/statewire-transport.cjs.map +1 -1
- package/dist/agent-runtime/src/statewire-transport.d.ts +14 -5
- package/dist/agent-runtime/src/statewire-transport.js +8 -2
- package/dist/agent-runtime/src/statewire-transport.js.map +1 -1
- package/dist/agent-runtime/src/subagent-transcripts.cjs +1 -23
- package/dist/agent-runtime/src/subagent-transcripts.cjs.map +1 -1
- package/dist/agent-runtime/src/subagent-transcripts.js +3 -25
- package/dist/agent-runtime/src/subagent-transcripts.js.map +1 -1
- package/dist/agent-runtime/src/subagents.cjs +22 -29
- package/dist/agent-runtime/src/subagents.cjs.map +1 -1
- package/dist/agent-runtime/src/subagents.js +23 -30
- package/dist/agent-runtime/src/subagents.js.map +1 -1
- package/dist/agent-runtime/src/thread-extras.cjs +27 -19
- package/dist/agent-runtime/src/thread-extras.cjs.map +1 -1
- package/dist/agent-runtime/src/thread-extras.d.ts +19 -6
- package/dist/agent-runtime/src/thread-extras.js +27 -19
- package/dist/agent-runtime/src/thread-extras.js.map +1 -1
- package/dist/agent-runtime/src/thread-handoff-flow-machine.d.ts +8 -8
- package/dist/agent-runtime/src/tool-metadata.cjs +12 -0
- package/dist/agent-runtime/src/tool-metadata.cjs.map +1 -1
- package/dist/agent-runtime/src/tool-metadata.js +12 -0
- package/dist/agent-runtime/src/tool-metadata.js.map +1 -1
- package/dist/agent-runtime/src/tool-names.cjs +21 -0
- package/dist/agent-runtime/src/tool-names.cjs.map +1 -1
- package/dist/agent-runtime/src/tool-names.d.ts +8 -0
- package/dist/agent-runtime/src/tool-names.js +21 -0
- package/dist/agent-runtime/src/tool-names.js.map +1 -1
- package/dist/agent-runtime/src/typed-interrupt-kinds.cjs +247 -0
- package/dist/agent-runtime/src/typed-interrupt-kinds.cjs.map +1 -0
- package/dist/agent-runtime/src/typed-interrupt-kinds.d.ts +173 -0
- package/dist/agent-runtime/src/typed-interrupt-kinds.js +247 -0
- package/dist/agent-runtime/src/typed-interrupt-kinds.js.map +1 -0
- package/dist/agent-runtime/src/typed-interrupts.cjs +48 -0
- package/dist/agent-runtime/src/typed-interrupts.cjs.map +1 -0
- package/dist/agent-runtime/src/typed-interrupts.d.ts +75 -0
- package/dist/agent-runtime/src/typed-interrupts.js +48 -0
- package/dist/agent-runtime/src/typed-interrupts.js.map +1 -0
- package/dist/agent-runtime/src/types.d.ts +1 -1
- package/dist/agent-runtime/src/use-conversation-list.cjs +1 -0
- package/dist/agent-runtime/src/use-conversation-list.cjs.map +1 -1
- package/dist/agent-runtime/src/use-conversation-list.d.ts +7 -0
- package/dist/agent-runtime/src/use-conversation-list.js +1 -0
- package/dist/agent-runtime/src/use-conversation-list.js.map +1 -1
- package/dist/agent-runtime/src/use-deep-agent-chat-outbox.cjs +46 -29
- package/dist/agent-runtime/src/use-deep-agent-chat-outbox.cjs.map +1 -1
- package/dist/agent-runtime/src/use-deep-agent-chat-outbox.d.ts +14 -22
- package/dist/agent-runtime/src/use-deep-agent-chat-outbox.js +46 -29
- package/dist/agent-runtime/src/use-deep-agent-chat-outbox.js.map +1 -1
- package/dist/agent-runtime/src/use-deep-agent-runtime.cjs +78 -14
- package/dist/agent-runtime/src/use-deep-agent-runtime.cjs.map +1 -1
- package/dist/agent-runtime/src/use-deep-agent-runtime.d.ts +34 -7
- package/dist/agent-runtime/src/use-deep-agent-runtime.js +79 -15
- package/dist/agent-runtime/src/use-deep-agent-runtime.js.map +1 -1
- package/dist/agent-runtime/src/use-deep-agent-thread.cjs +16 -1
- package/dist/agent-runtime/src/use-deep-agent-thread.cjs.map +1 -1
- package/dist/agent-runtime/src/use-deep-agent-thread.d.ts +7 -2
- package/dist/agent-runtime/src/use-deep-agent-thread.js +16 -1
- package/dist/agent-runtime/src/use-deep-agent-thread.js.map +1 -1
- package/dist/agent-runtime/src/use-deep-agent-voice.cjs +30 -4
- package/dist/agent-runtime/src/use-deep-agent-voice.cjs.map +1 -1
- package/dist/agent-runtime/src/use-deep-agent-voice.d.ts +22 -4
- package/dist/agent-runtime/src/use-deep-agent-voice.js +30 -4
- package/dist/agent-runtime/src/use-deep-agent-voice.js.map +1 -1
- package/dist/agent-runtime/src/withdrawn-turns.d.ts +5 -4
- package/dist/agent-runtime/src/word-device-fit.d.ts +174 -0
- package/dist/agent-runtime/src/work-in.d.ts +127 -0
- package/dist/assets/AthenaAssetEmbed.cjs.map +1 -1
- package/dist/assets/AthenaAssetEmbed.d.ts +6 -1
- package/dist/assets/AthenaAssetEmbed.js.map +1 -1
- package/dist/assets/asset-panel-store.cjs +13 -5
- package/dist/assets/asset-panel-store.cjs.map +1 -1
- package/dist/assets/asset-panel-store.d.ts +33 -2
- package/dist/assets/asset-panel-store.js +13 -5
- package/dist/assets/asset-panel-store.js.map +1 -1
- package/dist/auth/AthenaCredentialSourceContext.cjs +11 -0
- package/dist/auth/AthenaCredentialSourceContext.cjs.map +1 -1
- package/dist/auth/AthenaCredentialSourceContext.d.ts +6 -0
- package/dist/auth/AthenaCredentialSourceContext.js +11 -0
- package/dist/auth/AthenaCredentialSourceContext.js.map +1 -1
- package/dist/auth/account-identity.cjs +13 -2
- package/dist/auth/account-identity.cjs.map +1 -1
- package/dist/auth/account-identity.d.ts +9 -0
- package/dist/auth/account-identity.js +13 -2
- package/dist/auth/account-identity.js.map +1 -1
- package/dist/auth/credential-source.cjs +20 -4
- package/dist/auth/credential-source.cjs.map +1 -1
- package/dist/auth/credential-source.d.ts +9 -0
- package/dist/auth/credential-source.js +20 -4
- package/dist/auth/credential-source.js.map +1 -1
- package/dist/catalog/chat-pickers.cjs +31 -0
- package/dist/catalog/chat-pickers.cjs.map +1 -1
- package/dist/catalog/chat-pickers.d.ts +17 -0
- package/dist/catalog/chat-pickers.js +33 -2
- package/dist/catalog/chat-pickers.js.map +1 -1
- package/dist/catalog/runtime-catalog.cjs +63 -3
- package/dist/catalog/runtime-catalog.cjs.map +1 -1
- package/dist/catalog/runtime-catalog.d.ts +63 -3
- package/dist/catalog/runtime-catalog.js +64 -4
- package/dist/catalog/runtime-catalog.js.map +1 -1
- package/dist/chat/AthenaChat.cjs +337 -99
- package/dist/chat/AthenaChat.cjs.map +1 -1
- package/dist/chat/AthenaChat.d.ts +80 -4
- package/dist/chat/AthenaChat.js +337 -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 +3 -0
- package/dist/chat-ui/index.cjs.map +1 -1
- package/dist/chat-ui/index.d.ts +3 -2
- package/dist/chat-ui/index.js +3 -0
- package/dist/chat-ui/index.js.map +1 -1
- package/dist/chat-ui/mentions/mention-chip.cjs +1 -1
- package/dist/chat-ui/mentions/mention-chip.cjs.map +1 -1
- package/dist/chat-ui/mentions/mention-chip.js +2 -2
- package/dist/chat-ui/mentions/mention-chip.js.map +1 -1
- package/dist/chat-ui/mentions/mention-extension.cjs +8 -1
- package/dist/chat-ui/mentions/mention-extension.cjs.map +1 -1
- package/dist/chat-ui/mentions/mention-extension.js +8 -1
- package/dist/chat-ui/mentions/mention-extension.js.map +1 -1
- package/dist/chat-ui/mentions/suggestions/components/get-scope-name.cjs +1 -0
- package/dist/chat-ui/mentions/suggestions/components/get-scope-name.cjs.map +1 -1
- package/dist/chat-ui/mentions/suggestions/components/get-scope-name.js +1 -0
- package/dist/chat-ui/mentions/suggestions/components/get-scope-name.js.map +1 -1
- package/dist/chat-ui/mentions/suggestions/components/mention-icon.cjs +2 -0
- package/dist/chat-ui/mentions/suggestions/components/mention-icon.cjs.map +1 -1
- package/dist/chat-ui/mentions/suggestions/components/mention-icon.js +3 -1
- package/dist/chat-ui/mentions/suggestions/components/mention-icon.js.map +1 -1
- package/dist/chat-ui/mentions/suggestions/components/menu-item.cjs +1 -1
- package/dist/chat-ui/mentions/suggestions/components/menu-item.cjs.map +1 -1
- package/dist/chat-ui/mentions/suggestions/components/menu-item.js +1 -1
- package/dist/chat-ui/mentions/suggestions/components/menu-item.js.map +1 -1
- package/dist/chat-ui/mentions/suggestions/data/api-client.cjs +36 -0
- package/dist/chat-ui/mentions/suggestions/data/api-client.cjs.map +1 -1
- package/dist/chat-ui/mentions/suggestions/data/api-client.d.ts +42 -0
- package/dist/chat-ui/mentions/suggestions/data/api-client.js +36 -0
- package/dist/chat-ui/mentions/suggestions/data/api-client.js.map +1 -1
- package/dist/chat-ui/mentions/suggestions/data/sources/index.cjs +235 -19
- package/dist/chat-ui/mentions/suggestions/data/sources/index.cjs.map +1 -1
- package/dist/chat-ui/mentions/suggestions/data/sources/index.d.ts +88 -10
- package/dist/chat-ui/mentions/suggestions/data/sources/index.js +236 -20
- package/dist/chat-ui/mentions/suggestions/data/sources/index.js.map +1 -1
- package/dist/chat-ui/mentions/suggestions/data/types.cjs.map +1 -1
- package/dist/chat-ui/mentions/suggestions/data/types.d.ts +27 -1
- package/dist/chat-ui/mentions/suggestions/data/types.js.map +1 -1
- package/dist/chat-ui/mentions/suggestions/data/use-mention-suggestions.cjs +56 -5
- package/dist/chat-ui/mentions/suggestions/data/use-mention-suggestions.cjs.map +1 -1
- package/dist/chat-ui/mentions/suggestions/data/use-mention-suggestions.d.ts +26 -6
- package/dist/chat-ui/mentions/suggestions/data/use-mention-suggestions.js +57 -6
- package/dist/chat-ui/mentions/suggestions/data/use-mention-suggestions.js.map +1 -1
- package/dist/chat-ui/mentions/suggestions/mention-suggestions.extension.cjs +34 -17
- package/dist/chat-ui/mentions/suggestions/mention-suggestions.extension.cjs.map +1 -1
- package/dist/chat-ui/mentions/suggestions/mention-suggestions.extension.d.ts +19 -1
- package/dist/chat-ui/mentions/suggestions/mention-suggestions.extension.js +35 -18
- package/dist/chat-ui/mentions/suggestions/mention-suggestions.extension.js.map +1 -1
- package/dist/chat-ui/statewire.d.ts +1 -1
- package/dist/chat-ui/thread/statewire-history-edge.cjs +15 -0
- package/dist/chat-ui/thread/statewire-history-edge.cjs.map +1 -1
- package/dist/chat-ui/thread/statewire-history-edge.d.ts +4 -1
- package/dist/chat-ui/thread/statewire-history-edge.js +15 -0
- package/dist/chat-ui/thread/statewire-history-edge.js.map +1 -1
- package/dist/collab/client.cjs +17 -5
- package/dist/collab/client.cjs.map +1 -1
- package/dist/collab/client.d.ts +22 -7
- package/dist/collab/client.js +17 -5
- package/dist/collab/client.js.map +1 -1
- package/dist/composer/ComposerAttachedReferences.cjs +119 -0
- package/dist/composer/ComposerAttachedReferences.cjs.map +1 -0
- package/dist/composer/ComposerAttachedReferences.d.ts +26 -0
- package/dist/composer/ComposerAttachedReferences.js +119 -0
- package/dist/composer/ComposerAttachedReferences.js.map +1 -0
- package/dist/composer/ComposerNamedAgents.cjs +63 -0
- package/dist/composer/ComposerNamedAgents.cjs.map +1 -0
- package/dist/composer/ComposerNamedAgents.d.ts +16 -0
- package/dist/composer/ComposerNamedAgents.js +63 -0
- package/dist/composer/ComposerNamedAgents.js.map +1 -0
- package/dist/composer/attached-references.cjs +159 -0
- package/dist/composer/attached-references.cjs.map +1 -0
- package/dist/composer/attached-references.d.ts +86 -0
- package/dist/composer/attached-references.js +159 -0
- package/dist/composer/attached-references.js.map +1 -0
- package/dist/composer/build-composed-message.cjs +14 -7
- package/dist/composer/build-composed-message.cjs.map +1 -1
- package/dist/composer/build-composed-message.d.ts +6 -1
- package/dist/composer/build-composed-message.js +14 -7
- package/dist/composer/build-composed-message.js.map +1 -1
- package/dist/composer/composer-handoff.cjs +6 -2
- package/dist/composer/composer-handoff.cjs.map +1 -1
- package/dist/composer/composer-handoff.d.ts +7 -1
- package/dist/composer/composer-handoff.js +6 -2
- package/dist/composer/composer-handoff.js.map +1 -1
- package/dist/composer/folder-upload.cjs +149 -0
- package/dist/composer/folder-upload.cjs.map +1 -0
- package/dist/composer/folder-upload.d.ts +79 -0
- package/dist/composer/folder-upload.js +149 -0
- package/dist/composer/folder-upload.js.map +1 -0
- package/dist/composer/index.d.ts +1 -1
- package/dist/composer/useAttachToChat.cjs +35 -0
- package/dist/composer/useAttachToChat.cjs.map +1 -0
- package/dist/composer/useAttachToChat.d.ts +54 -0
- package/dist/composer/useAttachToChat.js +35 -0
- package/dist/composer/useAttachToChat.js.map +1 -0
- package/dist/composer/useAttachedReferencesComposerProps.cjs +19 -0
- package/dist/composer/useAttachedReferencesComposerProps.cjs.map +1 -0
- package/dist/composer/useAttachedReferencesComposerProps.d.ts +12 -0
- package/dist/composer/useAttachedReferencesComposerProps.js +19 -0
- package/dist/composer/useAttachedReferencesComposerProps.js.map +1 -0
- package/dist/composer/useFileUpload.cjs +95 -7
- package/dist/composer/useFileUpload.cjs.map +1 -1
- package/dist/composer/useFileUpload.d.ts +21 -2
- package/dist/composer/useFileUpload.js +95 -7
- package/dist/composer/useFileUpload.js.map +1 -1
- package/dist/data/athena-api-error.cjs +125 -0
- package/dist/data/athena-api-error.cjs.map +1 -0
- package/dist/data/athena-api-error.d.ts +96 -0
- package/dist/data/athena-api-error.js +125 -0
- package/dist/data/athena-api-error.js.map +1 -0
- package/dist/data/athena-data-client.cjs +106 -0
- package/dist/data/athena-data-client.cjs.map +1 -0
- package/dist/data/athena-data-client.d.ts +74 -0
- package/dist/data/athena-data-client.js +106 -0
- package/dist/data/athena-data-client.js.map +1 -0
- package/dist/data/athena-member.cjs +93 -0
- package/dist/data/athena-member.cjs.map +1 -0
- package/dist/data/athena-member.d.ts +125 -0
- package/dist/data/athena-member.js +93 -0
- package/dist/data/athena-member.js.map +1 -0
- package/dist/data/athena-request.cjs +458 -0
- package/dist/data/athena-request.cjs.map +1 -0
- package/dist/data/athena-request.d.ts +120 -0
- package/dist/data/athena-request.js +458 -0
- package/dist/data/athena-request.js.map +1 -0
- package/dist/data/use-athena-fetch.cjs +14 -0
- package/dist/data/use-athena-fetch.cjs.map +1 -0
- package/dist/data/use-athena-fetch.d.ts +19 -0
- package/dist/data/use-athena-fetch.js +14 -0
- package/dist/data/use-athena-fetch.js.map +1 -0
- package/dist/data/use-athena-graphql.cjs +66 -0
- package/dist/data/use-athena-graphql.cjs.map +1 -0
- package/dist/data/use-athena-graphql.d.ts +56 -0
- package/dist/data/use-athena-graphql.js +66 -0
- package/dist/data/use-athena-graphql.js.map +1 -0
- package/dist/data/use-athena-rest.cjs +33 -0
- package/dist/data/use-athena-rest.cjs.map +1 -0
- package/dist/data/use-athena-rest.d.ts +21 -0
- package/dist/data/use-athena-rest.js +33 -0
- package/dist/data/use-athena-rest.js.map +1 -0
- package/dist/data/use-semantic-query.cjs +44 -0
- package/dist/data/use-semantic-query.cjs.map +1 -0
- package/dist/data/use-semantic-query.d.ts +92 -0
- package/dist/data/use-semantic-query.js +44 -0
- package/dist/data/use-semantic-query.js.map +1 -0
- package/dist/diagnostics/athena-diagnostics.cjs.map +1 -1
- package/dist/diagnostics/athena-diagnostics.d.ts +5 -1
- package/dist/diagnostics/athena-diagnostics.js.map +1 -1
- package/dist/diagnostics/errors.cjs +7 -0
- package/dist/diagnostics/errors.cjs.map +1 -1
- package/dist/diagnostics/errors.d.ts +7 -0
- package/dist/diagnostics/errors.js +7 -0
- package/dist/diagnostics/errors.js.map +1 -1
- package/dist/index.cjs +155 -11
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.ts +72 -13
- package/dist/index.js +148 -4
- package/dist/index.js.map +1 -1
- package/dist/keryx-http/src/initial-sync.cjs +64 -16
- package/dist/keryx-http/src/initial-sync.cjs.map +1 -1
- package/dist/keryx-http/src/initial-sync.d.ts +31 -1
- package/dist/keryx-http/src/initial-sync.js +64 -16
- package/dist/keryx-http/src/initial-sync.js.map +1 -1
- package/dist/keryx-http/src/own-awareness.cjs +20 -0
- package/dist/keryx-http/src/own-awareness.cjs.map +1 -0
- package/dist/keryx-http/src/own-awareness.d.ts +50 -0
- package/dist/keryx-http/src/own-awareness.js +20 -0
- package/dist/keryx-http/src/own-awareness.js.map +1 -0
- package/dist/keryx-http/src/update-attributions.cjs +26 -1
- package/dist/keryx-http/src/update-attributions.cjs.map +1 -1
- package/dist/keryx-http/src/update-attributions.d.ts +10 -1
- package/dist/keryx-http/src/update-attributions.js +26 -1
- package/dist/keryx-http/src/update-attributions.js.map +1 -1
- package/dist/offline/chat-outbox.cjs +262 -26
- package/dist/offline/chat-outbox.cjs.map +1 -1
- package/dist/offline/chat-outbox.d.ts +90 -12
- package/dist/offline/chat-outbox.js +263 -27
- package/dist/offline/chat-outbox.js.map +1 -1
- package/dist/provider/AthenaProvider.cjs +63 -19
- package/dist/provider/AthenaProvider.cjs.map +1 -1
- package/dist/provider/AthenaProvider.d.ts +24 -8
- package/dist/provider/AthenaProvider.js +66 -22
- package/dist/provider/AthenaProvider.js.map +1 -1
- package/dist/react/package.json.cjs +1 -1
- package/dist/react/package.json.js +1 -1
- package/dist/references/src/anchors/types.cjs +5 -0
- package/dist/references/src/anchors/types.cjs.map +1 -1
- package/dist/references/src/anchors/types.js +5 -0
- package/dist/references/src/anchors/types.js.map +1 -1
- package/dist/references/src/attachable.cjs +149 -0
- package/dist/references/src/attachable.cjs.map +1 -0
- package/dist/references/src/attachable.d.ts +87 -0
- package/dist/references/src/attachable.js +149 -0
- package/dist/references/src/attachable.js.map +1 -0
- package/dist/runtime/StatewirePlanModeLaneSync.cjs +93 -0
- package/dist/runtime/StatewirePlanModeLaneSync.cjs.map +1 -0
- package/dist/runtime/StatewirePlanModeLaneSync.d.ts +34 -0
- package/dist/runtime/StatewirePlanModeLaneSync.js +93 -0
- package/dist/runtime/StatewirePlanModeLaneSync.js.map +1 -0
- package/dist/runtime/StatewireThreadConfigLaneSync.cjs +2 -0
- package/dist/runtime/StatewireThreadConfigLaneSync.cjs.map +1 -1
- package/dist/runtime/StatewireThreadConfigLaneSync.d.ts +4 -0
- package/dist/runtime/StatewireThreadConfigLaneSync.js +2 -0
- package/dist/runtime/StatewireThreadConfigLaneSync.js.map +1 -1
- package/dist/runtime/statewire-plan-mode.cjs +71 -0
- package/dist/runtime/statewire-plan-mode.cjs.map +1 -0
- package/dist/runtime/statewire-plan-mode.d.ts +88 -0
- package/dist/runtime/statewire-plan-mode.js +71 -0
- package/dist/runtime/statewire-plan-mode.js.map +1 -0
- package/dist/runtime/statewire-run-config.cjs +18 -1
- package/dist/runtime/statewire-run-config.cjs.map +1 -1
- package/dist/runtime/statewire-run-config.d.ts +20 -0
- package/dist/runtime/statewire-run-config.js +18 -1
- package/dist/runtime/statewire-run-config.js.map +1 -1
- package/dist/runtime/statewire-session-key.cjs +11 -5
- package/dist/runtime/statewire-session-key.cjs.map +1 -1
- package/dist/runtime/statewire-session-key.d.ts +22 -10
- package/dist/runtime/statewire-session-key.js +11 -5
- package/dist/runtime/statewire-session-key.js.map +1 -1
- package/dist/runtime/useAthenaStatewireRuntime.cjs +65 -8
- package/dist/runtime/useAthenaStatewireRuntime.cjs.map +1 -1
- package/dist/runtime/useAthenaStatewireRuntime.d.ts +26 -10
- package/dist/runtime/useAthenaStatewireRuntime.js +67 -10
- package/dist/runtime/useAthenaStatewireRuntime.js.map +1 -1
- package/dist/search/useAthenaAssets.cjs +394 -0
- package/dist/search/useAthenaAssets.cjs.map +1 -0
- package/dist/search/useAthenaAssets.d.ts +186 -0
- package/dist/search/useAthenaAssets.js +394 -0
- package/dist/search/useAthenaAssets.js.map +1 -0
- package/dist/sheet-range/index.cjs +4 -0
- package/dist/sheet-range/index.cjs.map +1 -1
- package/dist/sheet-range/index.d.ts +4 -2
- package/dist/sheet-range/index.js +4 -0
- package/dist/sheet-range/index.js.map +1 -1
- package/dist/sheet-range/query-range.cjs +102 -0
- package/dist/sheet-range/query-range.cjs.map +1 -0
- package/dist/sheet-range/query-range.d.ts +46 -0
- package/dist/sheet-range/query-range.js +102 -0
- package/dist/sheet-range/query-range.js.map +1 -0
- package/dist/styles.css +1 -1
- package/dist/subagents/index.cjs +49 -0
- package/dist/subagents/index.cjs.map +1 -0
- package/dist/subagents/index.d.ts +16 -0
- package/dist/subagents/index.js +49 -0
- package/dist/subagents/index.js.map +1 -0
- package/dist/subagents/lane-follow.cjs +19 -0
- package/dist/subagents/lane-follow.cjs.map +1 -0
- package/dist/subagents/lane-follow.d.ts +9 -0
- package/dist/subagents/lane-follow.js +19 -0
- package/dist/subagents/lane-follow.js.map +1 -0
- package/dist/subagents/lane-model.cjs +178 -0
- package/dist/subagents/lane-model.cjs.map +1 -0
- package/dist/subagents/lane-model.d.ts +140 -0
- package/dist/subagents/lane-model.js +178 -0
- package/dist/subagents/lane-model.js.map +1 -0
- package/dist/subagents/lane-parts.cjs +517 -0
- package/dist/subagents/lane-parts.cjs.map +1 -0
- package/dist/subagents/lane-parts.d.ts +130 -0
- package/dist/subagents/lane-parts.js +517 -0
- package/dist/subagents/lane-parts.js.map +1 -0
- package/dist/subagents/subagent-lane-group.cjs +215 -0
- package/dist/subagents/subagent-lane-group.cjs.map +1 -0
- package/dist/subagents/subagent-lane-group.d.ts +67 -0
- package/dist/subagents/subagent-lane-group.js +215 -0
- package/dist/subagents/subagent-lane-group.js.map +1 -0
- package/dist/subagents/subagent-transcript-drawer.cjs +431 -0
- package/dist/subagents/subagent-transcript-drawer.cjs.map +1 -0
- package/dist/subagents/subagent-transcript-drawer.d.ts +78 -0
- package/dist/subagents/subagent-transcript-drawer.js +431 -0
- package/dist/subagents/subagent-transcript-drawer.js.map +1 -0
- package/dist/subagents/task-subagent-group.cjs +115 -0
- package/dist/subagents/task-subagent-group.cjs.map +1 -0
- package/dist/subagents/task-subagent-group.d.ts +36 -0
- package/dist/subagents/task-subagent-group.js +115 -0
- package/dist/subagents/task-subagent-group.js.map +1 -0
- package/dist/subagents/use-omitted-images-in-view.cjs +68 -0
- package/dist/subagents/use-omitted-images-in-view.cjs.map +1 -0
- package/dist/subagents/use-omitted-images-in-view.d.ts +21 -0
- package/dist/subagents/use-omitted-images-in-view.js +68 -0
- package/dist/subagents/use-omitted-images-in-view.js.map +1 -0
- package/dist/threads/Inbox.cjs +2 -2
- package/dist/threads/Inbox.cjs.map +1 -1
- package/dist/threads/SessionList.cjs +27 -24
- package/dist/threads/SessionList.cjs.map +1 -1
- package/dist/threads/SessionList.js +22 -19
- package/dist/threads/SessionList.js.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/live-session-rows.cjs +207 -0
- package/dist/threads/live-session-rows.cjs.map +1 -0
- package/dist/threads/live-session-rows.d.ts +175 -0
- package/dist/threads/live-session-rows.js +207 -0
- package/dist/threads/live-session-rows.js.map +1 -0
- 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 +173 -20
- package/dist/threads/statewire-thread-list.cjs.map +1 -1
- package/dist/threads/statewire-thread-list.d.ts +44 -1
- package/dist/threads/statewire-thread-list.js +174 -21
- 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 +425 -0
- package/dist/tools/drive-tool-uis.cjs.map +1 -0
- package/dist/tools/drive-tool-uis.d.ts +120 -0
- package/dist/tools/drive-tool-uis.js +425 -0
- package/dist/tools/drive-tool-uis.js.map +1 -0
- package/dist/tools/email-calendar-tool-uis.cjs +789 -0
- package/dist/tools/email-calendar-tool-uis.cjs.map +1 -0
- package/dist/tools/email-calendar-tool-uis.d.ts +129 -0
- package/dist/tools/email-calendar-tool-uis.js +789 -0
- package/dist/tools/email-calendar-tool-uis.js.map +1 -0
- package/dist/tools/ontology-tool-uis.cjs +83 -0
- package/dist/tools/ontology-tool-uis.cjs.map +1 -0
- package/dist/tools/ontology-tool-uis.d.ts +9 -0
- package/dist/tools/ontology-tool-uis.js +83 -0
- package/dist/tools/ontology-tool-uis.js.map +1 -0
- package/dist/tools/orchestration-tool-uis.cjs +586 -0
- package/dist/tools/orchestration-tool-uis.cjs.map +1 -0
- package/dist/tools/orchestration-tool-uis.d.ts +141 -0
- package/dist/tools/orchestration-tool-uis.js +586 -0
- package/dist/tools/orchestration-tool-uis.js.map +1 -0
- package/dist/tools/presentation-edit-tool-uis.cjs +516 -0
- package/dist/tools/presentation-edit-tool-uis.cjs.map +1 -0
- package/dist/tools/presentation-edit-tool-uis.d.ts +73 -0
- package/dist/tools/presentation-edit-tool-uis.js +516 -0
- package/dist/tools/presentation-edit-tool-uis.js.map +1 -0
- package/dist/tools/project-tool-uis.cjs +213 -0
- package/dist/tools/project-tool-uis.cjs.map +1 -0
- package/dist/tools/project-tool-uis.d.ts +14 -0
- package/dist/tools/project-tool-uis.js +213 -0
- package/dist/tools/project-tool-uis.js.map +1 -0
- package/dist/tools/sandbox-tool-uis.cjs +491 -0
- package/dist/tools/sandbox-tool-uis.cjs.map +1 -0
- package/dist/tools/sandbox-tool-uis.d.ts +116 -0
- package/dist/tools/sandbox-tool-uis.js +491 -0
- package/dist/tools/sandbox-tool-uis.js.map +1 -0
- package/dist/tools/sheet-query-tool-ui.cjs +138 -0
- package/dist/tools/sheet-query-tool-ui.cjs.map +1 -0
- package/dist/tools/sheet-query-tool-ui.d.ts +15 -0
- package/dist/tools/sheet-query-tool-ui.js +138 -0
- package/dist/tools/sheet-query-tool-ui.js.map +1 -0
- package/dist/tools/studio-screenshot-tool-uis.cjs +262 -0
- package/dist/tools/studio-screenshot-tool-uis.cjs.map +1 -0
- package/dist/tools/studio-screenshot-tool-uis.d.ts +52 -0
- package/dist/tools/studio-screenshot-tool-uis.js +262 -0
- package/dist/tools/studio-screenshot-tool-uis.js.map +1 -0
- package/dist/tools/subagent-task-tool-ui.cjs +24 -475
- package/dist/tools/subagent-task-tool-ui.cjs.map +1 -1
- package/dist/tools/subagent-task-tool-ui.d.ts +19 -103
- package/dist/tools/subagent-task-tool-ui.js +28 -479
- package/dist/tools/subagent-task-tool-ui.js.map +1 -1
- package/dist/tools/tool-summary.cjs +36 -0
- package/dist/tools/tool-summary.cjs.map +1 -1
- package/dist/tools/tool-summary.js +36 -0
- package/dist/tools/tool-summary.js.map +1 -1
- package/dist/tools/tool-uis.cjs +181 -53
- package/dist/tools/tool-uis.cjs.map +1 -1
- package/dist/tools/tool-uis.d.ts +40 -0
- package/dist/tools/tool-uis.js +183 -55
- package/dist/tools/tool-uis.js.map +1 -1
- package/dist/typed-interrupts/index.cjs +15 -0
- package/dist/typed-interrupts/index.cjs.map +1 -0
- package/dist/typed-interrupts/index.d.ts +20 -0
- package/dist/typed-interrupts/index.js +15 -0
- package/dist/typed-interrupts/index.js.map +1 -0
- package/dist/workbench/session-workbench-panes.cjs +6 -6
- package/dist/workbench/session-workbench-panes.cjs.map +1 -1
- package/package.json +28 -6
- package/dist/agent-runtime/src/chat-outbox-store.cjs +0 -510
- package/dist/agent-runtime/src/chat-outbox-store.cjs.map +0 -1
- package/dist/agent-runtime/src/chat-outbox-store.d.ts +0 -210
- package/dist/agent-runtime/src/chat-outbox-store.js +0 -510
- package/dist/agent-runtime/src/chat-outbox-store.js.map +0 -1
|
@@ -0,0 +1,516 @@
|
|
|
1
|
+
import { jsx, jsxs } from "react/jsx-runtime";
|
|
2
|
+
import { memo, useState } from "react";
|
|
3
|
+
import { CameraIcon, ExternalLinkIcon, PresentationIcon } from "lucide-react";
|
|
4
|
+
import { useAssetPanelStore } from "../assets/asset-panel-store.js";
|
|
5
|
+
import { rendersAsGenericCard, waitingTitle, readBlockedToolError, blockedToolErrorLabels } from "./document-edit-tool-uis.js";
|
|
6
|
+
import { ToolCard } from "./primitives.js";
|
|
7
|
+
import { ScreenshotQueryScope, useScreenshotUrl } from "./studio-screenshot-tool-uis.js";
|
|
8
|
+
import { ToolFallback } from "./tool-fallback.js";
|
|
9
|
+
import { stringField, classifyToolResult, isRecord } from "../agent-runtime/src/tool-result.js";
|
|
10
|
+
function recordOf(value) {
|
|
11
|
+
return isRecord(value) ? value : {};
|
|
12
|
+
}
|
|
13
|
+
function positiveInteger(value) {
|
|
14
|
+
return typeof value === "number" && Number.isInteger(value) && value > 0 ? value : null;
|
|
15
|
+
}
|
|
16
|
+
const OPEN_BUTTON_CLASS = "flex items-center gap-1.5 rounded-md border border-border/60 px-3 py-1.5 text-xs font-medium text-muted-foreground transition-colors hover:bg-muted/50 hover:text-foreground";
|
|
17
|
+
function parseJsonIfString(raw) {
|
|
18
|
+
if (typeof raw !== "string") return raw;
|
|
19
|
+
try {
|
|
20
|
+
return JSON.parse(raw);
|
|
21
|
+
} catch {
|
|
22
|
+
return raw;
|
|
23
|
+
}
|
|
24
|
+
}
|
|
25
|
+
function safeParseResult(raw) {
|
|
26
|
+
if (typeof raw === "string") return parseJsonIfString(raw);
|
|
27
|
+
if (isRecord(raw) && "result" in raw) return parseJsonIfString(raw.result);
|
|
28
|
+
return raw;
|
|
29
|
+
}
|
|
30
|
+
function readSlideEditResult(result) {
|
|
31
|
+
const record = safeParseResult(result);
|
|
32
|
+
if (!isRecord(record) || typeof record.success !== "boolean") return null;
|
|
33
|
+
return {
|
|
34
|
+
success: record.success,
|
|
35
|
+
error: stringField(record, ["error"]),
|
|
36
|
+
message: stringField(record, ["message"]),
|
|
37
|
+
slideNumber: positiveInteger(record.slide_number),
|
|
38
|
+
action: stringField(record, ["action"])
|
|
39
|
+
};
|
|
40
|
+
}
|
|
41
|
+
function readSlideEditOutcome({
|
|
42
|
+
toolName,
|
|
43
|
+
action,
|
|
44
|
+
status,
|
|
45
|
+
result,
|
|
46
|
+
isError
|
|
47
|
+
}) {
|
|
48
|
+
const classification = classifyToolResult({ status, result, isError });
|
|
49
|
+
if (classification.state === "running") return { kind: "running" };
|
|
50
|
+
if (classification.state === "requires-action") return { kind: "waiting" };
|
|
51
|
+
const blocked = readBlockedToolError(result);
|
|
52
|
+
if (blocked) return { kind: "failed", ...blockedToolErrorLabels({ toolName, blocked }) };
|
|
53
|
+
const edit = readSlideEditResult(result);
|
|
54
|
+
if (edit && !edit.success) {
|
|
55
|
+
return { kind: "failed", title: `Failed to ${action}`, detail: edit.error };
|
|
56
|
+
}
|
|
57
|
+
if (classification.state === "error") {
|
|
58
|
+
return { kind: "failed", title: `Failed to ${action}`, detail: classification.failure.message };
|
|
59
|
+
}
|
|
60
|
+
if (!edit) return { kind: "failed", title: `Couldn't confirm ${action}`, detail: null };
|
|
61
|
+
return { kind: "done", result: edit };
|
|
62
|
+
}
|
|
63
|
+
function slideEditStatus(outcome) {
|
|
64
|
+
switch (outcome.kind) {
|
|
65
|
+
case "running":
|
|
66
|
+
return "running";
|
|
67
|
+
case "waiting":
|
|
68
|
+
return "requires-action";
|
|
69
|
+
case "failed":
|
|
70
|
+
return "incomplete";
|
|
71
|
+
case "done":
|
|
72
|
+
return "complete";
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
function makeSlideEditToolUI(spec) {
|
|
76
|
+
const Impl = (props) => {
|
|
77
|
+
var _a;
|
|
78
|
+
const { toolName, args, result, status, isError } = props;
|
|
79
|
+
const openAsset = useAssetPanelStore((s) => s.openAsset);
|
|
80
|
+
if (rendersAsGenericCard(props)) return /* @__PURE__ */ jsx(ToolFallback, { ...props, icon: spec.icon });
|
|
81
|
+
const typedArgs = recordOf(args);
|
|
82
|
+
const assetId = stringField(typedArgs, ["asset_id", "deck_id"]);
|
|
83
|
+
const outcome = readSlideEditOutcome({
|
|
84
|
+
toolName,
|
|
85
|
+
action: spec.action,
|
|
86
|
+
status,
|
|
87
|
+
result,
|
|
88
|
+
isError
|
|
89
|
+
});
|
|
90
|
+
const slideToOpen = outcome.kind === "done" && assetId && spec.opensSlide(outcome.result) ? outcome.result.slideNumber : null;
|
|
91
|
+
const title = outcome.kind === "running" ? spec.loading(typedArgs) : outcome.kind === "waiting" ? waitingTitle(toolName) : outcome.kind === "failed" ? outcome.title : outcome.result.message ?? `Finished: ${spec.action}`;
|
|
92
|
+
const details = outcome.kind === "failed" ? null : ((_a = spec.details) == null ? void 0 : _a.call(spec, typedArgs)) ?? null;
|
|
93
|
+
return /* @__PURE__ */ jsxs(
|
|
94
|
+
ToolCard,
|
|
95
|
+
{
|
|
96
|
+
icon: spec.icon,
|
|
97
|
+
status: slideEditStatus(outcome),
|
|
98
|
+
title,
|
|
99
|
+
toolName,
|
|
100
|
+
error: outcome.kind === "failed" ? outcome.detail : null,
|
|
101
|
+
args: typedArgs,
|
|
102
|
+
result,
|
|
103
|
+
children: [
|
|
104
|
+
details,
|
|
105
|
+
assetId && slideToOpen ? /* @__PURE__ */ jsx("div", { className: "border-t border-border/40 px-4 py-2", children: /* @__PURE__ */ jsxs(
|
|
106
|
+
"button",
|
|
107
|
+
{
|
|
108
|
+
type: "button",
|
|
109
|
+
onClick: () => openAsset(assetId, { type: "presentation", slideNumber: slideToOpen }),
|
|
110
|
+
className: OPEN_BUTTON_CLASS,
|
|
111
|
+
children: [
|
|
112
|
+
/* @__PURE__ */ jsx(ExternalLinkIcon, { className: "size-3" }),
|
|
113
|
+
"Open slide ",
|
|
114
|
+
slideToOpen
|
|
115
|
+
]
|
|
116
|
+
}
|
|
117
|
+
) }) : null
|
|
118
|
+
]
|
|
119
|
+
}
|
|
120
|
+
);
|
|
121
|
+
};
|
|
122
|
+
const SlideEdit = memo(Impl);
|
|
123
|
+
SlideEdit.displayName = spec.displayName;
|
|
124
|
+
return SlideEdit;
|
|
125
|
+
}
|
|
126
|
+
function flattenText(text, max) {
|
|
127
|
+
const flattened = text.replace(/\s+/g, " ").trim();
|
|
128
|
+
return flattened.length > max ? `${flattened.slice(0, max)}…` : flattened;
|
|
129
|
+
}
|
|
130
|
+
function shapeTextEdits(args) {
|
|
131
|
+
const shapes = parseJsonIfString(args.shapes);
|
|
132
|
+
if (!Array.isArray(shapes)) return [];
|
|
133
|
+
return shapes.flatMap((shape) => {
|
|
134
|
+
if (!isRecord(shape)) return [];
|
|
135
|
+
return [{ shapeId: stringField(shape, ["shape_id"]) ?? "", text: typeof shape.text === "string" ? shape.text : "" }];
|
|
136
|
+
});
|
|
137
|
+
}
|
|
138
|
+
function ShapeEdits({ args }) {
|
|
139
|
+
const edits = shapeTextEdits(args);
|
|
140
|
+
if (edits.length === 0) return null;
|
|
141
|
+
return /* @__PURE__ */ jsx("div", { className: "flex flex-col gap-1 border-t border-border/40 px-4 py-2.5", children: edits.map((edit, index) => /* @__PURE__ */ jsxs(
|
|
142
|
+
"div",
|
|
143
|
+
{
|
|
144
|
+
className: "flex items-baseline gap-2 rounded bg-muted p-2 text-[11px]",
|
|
145
|
+
children: [
|
|
146
|
+
/* @__PURE__ */ jsx("span", { className: "shrink-0 font-mono text-muted-foreground", children: edit.shapeId }),
|
|
147
|
+
/* @__PURE__ */ jsx("span", { className: "min-w-0 text-foreground", children: flattenText(edit.text, 80) })
|
|
148
|
+
]
|
|
149
|
+
},
|
|
150
|
+
edit.shapeId || index
|
|
151
|
+
)) });
|
|
152
|
+
}
|
|
153
|
+
const NOTES_PREVIEW_CHARS = 600;
|
|
154
|
+
function SlideNotes({ args }) {
|
|
155
|
+
const notes = typeof args.notes === "string" ? args.notes : "";
|
|
156
|
+
if (!notes) return null;
|
|
157
|
+
return /* @__PURE__ */ jsx("div", { className: "border-t border-border/40 px-4 py-2.5", children: /* @__PURE__ */ jsx("div", { className: "whitespace-pre-wrap rounded bg-muted p-2 text-[11px] text-foreground", children: notes.length > NOTES_PREVIEW_CHARS ? `${notes.slice(0, NOTES_PREVIEW_CHARS)}…` : notes }) });
|
|
158
|
+
}
|
|
159
|
+
const UpdateSlideShapesToolUI = makeSlideEditToolUI({
|
|
160
|
+
displayName: "UpdateSlideShapesToolUI",
|
|
161
|
+
icon: PresentationIcon,
|
|
162
|
+
action: "update slide text",
|
|
163
|
+
loading: (args) => {
|
|
164
|
+
const count = shapeTextEdits(args).length;
|
|
165
|
+
return count > 0 ? `Updating ${count} shape${count === 1 ? "" : "s"} on the slide...` : "Updating slide text...";
|
|
166
|
+
},
|
|
167
|
+
opensSlide: () => true,
|
|
168
|
+
details: (args) => /* @__PURE__ */ jsx(ShapeEdits, { args })
|
|
169
|
+
});
|
|
170
|
+
const SetSlideNotesToolUI = makeSlideEditToolUI({
|
|
171
|
+
displayName: "SetSlideNotesToolUI",
|
|
172
|
+
icon: PresentationIcon,
|
|
173
|
+
action: "update speaker notes",
|
|
174
|
+
loading: (args) => {
|
|
175
|
+
const slideNumber = positiveInteger(args.slide_number);
|
|
176
|
+
return slideNumber ? `Updating speaker notes on slide ${slideNumber}...` : "Updating speaker notes...";
|
|
177
|
+
},
|
|
178
|
+
opensSlide: () => true,
|
|
179
|
+
details: (args) => /* @__PURE__ */ jsx(SlideNotes, { args })
|
|
180
|
+
});
|
|
181
|
+
const ManageSlidesToolUI = makeSlideEditToolUI({
|
|
182
|
+
displayName: "ManageSlidesToolUI",
|
|
183
|
+
icon: PresentationIcon,
|
|
184
|
+
action: "update slides",
|
|
185
|
+
loading: (args) => {
|
|
186
|
+
const slideNumber = positiveInteger(args.slide_number);
|
|
187
|
+
const slideSuffix = slideNumber ? ` ${slideNumber}` : "";
|
|
188
|
+
switch (args.action) {
|
|
189
|
+
case "add":
|
|
190
|
+
return "Adding a slide...";
|
|
191
|
+
case "duplicate":
|
|
192
|
+
return `Duplicating slide${slideSuffix}...`;
|
|
193
|
+
case "delete":
|
|
194
|
+
return `Deleting slide${slideSuffix}...`;
|
|
195
|
+
case "move":
|
|
196
|
+
return `Moving slide${slideSuffix}...`;
|
|
197
|
+
case "reorder":
|
|
198
|
+
return "Reordering slides...";
|
|
199
|
+
case "set_layout":
|
|
200
|
+
return "Changing slide layout...";
|
|
201
|
+
default:
|
|
202
|
+
return "Updating slides...";
|
|
203
|
+
}
|
|
204
|
+
},
|
|
205
|
+
opensSlide: (result) => result.action !== "delete"
|
|
206
|
+
});
|
|
207
|
+
function parseResultString(result) {
|
|
208
|
+
try {
|
|
209
|
+
const parsed = JSON.parse(result);
|
|
210
|
+
return typeof parsed === "string" ? [] : [parsed];
|
|
211
|
+
} catch {
|
|
212
|
+
}
|
|
213
|
+
return result.split("\n").flatMap((line) => {
|
|
214
|
+
const trimmed = line.trim();
|
|
215
|
+
if (!trimmed) return [];
|
|
216
|
+
try {
|
|
217
|
+
const parsed = JSON.parse(trimmed);
|
|
218
|
+
return typeof parsed === "string" ? [] : [parsed];
|
|
219
|
+
} catch {
|
|
220
|
+
return [];
|
|
221
|
+
}
|
|
222
|
+
});
|
|
223
|
+
}
|
|
224
|
+
function imageSourceOf(value) {
|
|
225
|
+
return isRecord(value) && value.type === "image" && isRecord(value.source) ? value.source : null;
|
|
226
|
+
}
|
|
227
|
+
function extractPresignedUrl(result) {
|
|
228
|
+
if (!result) return void 0;
|
|
229
|
+
if (typeof result === "string") return extractPresignedUrl(parseResultString(result));
|
|
230
|
+
if (Array.isArray(result)) {
|
|
231
|
+
for (const item of result) {
|
|
232
|
+
const url = extractPresignedUrl(item);
|
|
233
|
+
if (url) return url;
|
|
234
|
+
}
|
|
235
|
+
return void 0;
|
|
236
|
+
}
|
|
237
|
+
const source = imageSourceOf(result);
|
|
238
|
+
if (source && typeof source.presigned_url === "string") return source.presigned_url;
|
|
239
|
+
return isRecord(result) && typeof result.presigned_url === "string" ? result.presigned_url : void 0;
|
|
240
|
+
}
|
|
241
|
+
function extractScreenshotS3Key(result) {
|
|
242
|
+
if (!result) return void 0;
|
|
243
|
+
if (typeof result === "string") return extractScreenshotS3Key(parseResultString(result));
|
|
244
|
+
if (Array.isArray(result)) {
|
|
245
|
+
for (const item of result) {
|
|
246
|
+
const key = extractScreenshotS3Key(item);
|
|
247
|
+
if (key) return key;
|
|
248
|
+
}
|
|
249
|
+
return void 0;
|
|
250
|
+
}
|
|
251
|
+
const source = imageSourceOf(result);
|
|
252
|
+
return (source == null ? void 0 : source.type) === "s3_key" && typeof source.data === "string" ? source.data : void 0;
|
|
253
|
+
}
|
|
254
|
+
function isTextBlock(value) {
|
|
255
|
+
return isRecord(value) && value.type === "text" && typeof value.text === "string";
|
|
256
|
+
}
|
|
257
|
+
function findStructuredFailure(...sources) {
|
|
258
|
+
const stack = sources.map((source) => safeParseResult(source));
|
|
259
|
+
let found = false;
|
|
260
|
+
let detail;
|
|
261
|
+
while (stack.length > 0) {
|
|
262
|
+
const item = stack.pop();
|
|
263
|
+
if (!item) continue;
|
|
264
|
+
if (Array.isArray(item)) {
|
|
265
|
+
stack.push(...item);
|
|
266
|
+
continue;
|
|
267
|
+
}
|
|
268
|
+
if (isTextBlock(item)) {
|
|
269
|
+
const inner = parseJsonIfString(item.text);
|
|
270
|
+
if (inner !== item.text) stack.push(inner);
|
|
271
|
+
continue;
|
|
272
|
+
}
|
|
273
|
+
if (!isRecord(item)) continue;
|
|
274
|
+
const explicitError = typeof item.error === "string" && item.error.length > 0 ? item.error : void 0;
|
|
275
|
+
if (item.success === false || explicitError) {
|
|
276
|
+
found = true;
|
|
277
|
+
detail ?? (detail = explicitError ?? (typeof item.message === "string" && item.message.length > 0 ? item.message : void 0));
|
|
278
|
+
}
|
|
279
|
+
for (const value of Object.values(item)) {
|
|
280
|
+
if (value && typeof value === "object") stack.push(value);
|
|
281
|
+
}
|
|
282
|
+
}
|
|
283
|
+
return { found, detail };
|
|
284
|
+
}
|
|
285
|
+
function extractErrorText(result) {
|
|
286
|
+
const parsed = safeParseResult(result);
|
|
287
|
+
if (typeof parsed === "string" && parsed.trim()) return parsed.trim();
|
|
288
|
+
if (Array.isArray(parsed)) {
|
|
289
|
+
for (const item of parsed) {
|
|
290
|
+
if (isTextBlock(item) && item.text.trim()) return item.text.trim();
|
|
291
|
+
}
|
|
292
|
+
}
|
|
293
|
+
return void 0;
|
|
294
|
+
}
|
|
295
|
+
function resolveSlideScreenshotOutcome({
|
|
296
|
+
result,
|
|
297
|
+
artifact,
|
|
298
|
+
statusType,
|
|
299
|
+
isError
|
|
300
|
+
}) {
|
|
301
|
+
const parsedResult = safeParseResult(result);
|
|
302
|
+
const presignedUrl = extractPresignedUrl(parsedResult) ?? extractPresignedUrl(artifact);
|
|
303
|
+
const s3Key = extractScreenshotS3Key(parsedResult) ?? extractScreenshotS3Key(artifact);
|
|
304
|
+
const failure = findStructuredFailure(result, artifact);
|
|
305
|
+
if (isError) return { kind: "failed", detail: failure.detail ?? extractErrorText(result) };
|
|
306
|
+
if (failure.found) return { kind: "failed", detail: failure.detail };
|
|
307
|
+
if (presignedUrl || s3Key) return { kind: "captured", presignedUrl, s3Key };
|
|
308
|
+
if (statusType === "complete") return { kind: "preview-unavailable" };
|
|
309
|
+
return { kind: "pending" };
|
|
310
|
+
}
|
|
311
|
+
function withoutPerSlideFailures(value) {
|
|
312
|
+
const parsed = safeParseResult(value);
|
|
313
|
+
if (Array.isArray(parsed)) return parsed.map(withoutPerSlideFailures);
|
|
314
|
+
if (!isRecord(parsed)) return parsed;
|
|
315
|
+
return Object.fromEntries(
|
|
316
|
+
Object.entries(parsed).filter(([key]) => key !== "failed_slides").map(([key, inner]) => [
|
|
317
|
+
key,
|
|
318
|
+
inner && typeof inner === "object" ? withoutPerSlideFailures(inner) : inner
|
|
319
|
+
])
|
|
320
|
+
);
|
|
321
|
+
}
|
|
322
|
+
function toSlideNumbers(value) {
|
|
323
|
+
if (!Array.isArray(value)) return [];
|
|
324
|
+
return value.filter((n) => typeof n === "number" && Number.isInteger(n) && n > 0);
|
|
325
|
+
}
|
|
326
|
+
function toPositiveNumber(value) {
|
|
327
|
+
return typeof value === "number" && Number.isFinite(value) && value > 0 ? value : void 0;
|
|
328
|
+
}
|
|
329
|
+
function toFailures(value) {
|
|
330
|
+
if (!Array.isArray(value)) return [];
|
|
331
|
+
return value.flatMap(
|
|
332
|
+
(item) => isRecord(item) && typeof item.slide_number === "number" && typeof item.error === "string" ? [{ slideNumber: item.slide_number, error: item.error }] : []
|
|
333
|
+
);
|
|
334
|
+
}
|
|
335
|
+
function toFidelityNotes(value) {
|
|
336
|
+
if (!isRecord(value)) return [];
|
|
337
|
+
return Object.entries(value).flatMap(([key, notes]) => {
|
|
338
|
+
const slideNumber = Number(key);
|
|
339
|
+
if (!Number.isInteger(slideNumber) || slideNumber <= 0 || !Array.isArray(notes)) return [];
|
|
340
|
+
const strings = notes.filter(
|
|
341
|
+
(note) => typeof note === "string" && note.length > 0
|
|
342
|
+
);
|
|
343
|
+
return strings.length > 0 ? [{ slideNumber, notes: strings }] : [];
|
|
344
|
+
}).sort((a, b) => a.slideNumber - b.slideNumber);
|
|
345
|
+
}
|
|
346
|
+
function findContactSheetRecord(artifact) {
|
|
347
|
+
const parsed = safeParseResult(artifact);
|
|
348
|
+
const candidates = Array.isArray(parsed) ? parsed : [parsed];
|
|
349
|
+
return candidates.find(
|
|
350
|
+
(item) => isRecord(item) && ("captured_slide_numbers" in item || "failed_slides" in item)
|
|
351
|
+
);
|
|
352
|
+
}
|
|
353
|
+
function resolveSlideContactSheetDetails({
|
|
354
|
+
artifact,
|
|
355
|
+
requestedSlideNumbers
|
|
356
|
+
}) {
|
|
357
|
+
const record = findContactSheetRecord(artifact);
|
|
358
|
+
const failedSlides = toFailures(record == null ? void 0 : record.failed_slides);
|
|
359
|
+
const captured = toSlideNumbers(record == null ? void 0 : record.captured_slide_numbers);
|
|
360
|
+
const failedSet = new Set(failedSlides.map((failure) => failure.slideNumber));
|
|
361
|
+
const capturedSlideNumbers = captured.length > 0 ? captured : [...new Set(toSlideNumbers(safeParseResult(requestedSlideNumbers)))].filter((n) => !failedSet.has(n)).sort((a, b) => a - b);
|
|
362
|
+
return {
|
|
363
|
+
capturedSlideNumbers,
|
|
364
|
+
failedSlides,
|
|
365
|
+
fidelityNotes: toFidelityNotes(record == null ? void 0 : record.fidelity_notes_by_slide),
|
|
366
|
+
width: toPositiveNumber(record == null ? void 0 : record.width),
|
|
367
|
+
height: toPositiveNumber(record == null ? void 0 : record.height)
|
|
368
|
+
};
|
|
369
|
+
}
|
|
370
|
+
function formatSlideList(slideNumbers) {
|
|
371
|
+
if (slideNumbers.length === 0) return "slides";
|
|
372
|
+
const sorted = [...new Set(slideNumbers)].sort((a, b) => a - b);
|
|
373
|
+
const parts = [];
|
|
374
|
+
let start = sorted[0] ?? 0;
|
|
375
|
+
let prev = start;
|
|
376
|
+
for (const n of [...sorted.slice(1), Number.NaN]) {
|
|
377
|
+
if (n === prev + 1) {
|
|
378
|
+
prev = n;
|
|
379
|
+
continue;
|
|
380
|
+
}
|
|
381
|
+
parts.push(
|
|
382
|
+
prev - start >= 2 ? `${start}–${prev}` : start === prev ? `${start}` : `${start}, ${prev}`
|
|
383
|
+
);
|
|
384
|
+
start = n;
|
|
385
|
+
prev = n;
|
|
386
|
+
}
|
|
387
|
+
return `${sorted.length === 1 ? "slide" : "slides"} ${parts.join(", ")}`;
|
|
388
|
+
}
|
|
389
|
+
function ContactSheetImage({
|
|
390
|
+
initialPresignedUrl,
|
|
391
|
+
s3Key,
|
|
392
|
+
alt,
|
|
393
|
+
aspectRatio
|
|
394
|
+
}) {
|
|
395
|
+
const presignedUrl = useScreenshotUrl({ s3Key: s3Key ?? null, fallbackUrl: initialPresignedUrl ?? null });
|
|
396
|
+
const [failedUrl, setFailedUrl] = useState(null);
|
|
397
|
+
const unavailable = !presignedUrl || failedUrl === presignedUrl;
|
|
398
|
+
return /* @__PURE__ */ jsx(
|
|
399
|
+
"div",
|
|
400
|
+
{
|
|
401
|
+
className: "flex w-full items-center justify-center overflow-hidden rounded-lg border border-border/50 bg-muted/20",
|
|
402
|
+
style: aspectRatio ? { aspectRatio } : void 0,
|
|
403
|
+
children: unavailable ? /* @__PURE__ */ jsx("p", { className: "px-4 py-6 text-center text-[12px] text-muted-foreground", children: "Screenshot preview is no longer available." }) : (
|
|
404
|
+
// biome-ignore lint/a11y/noNoninteractiveElementInteractions: a failed load, not an interaction; the placeholder replaces the image
|
|
405
|
+
/* @__PURE__ */ jsx(
|
|
406
|
+
"img",
|
|
407
|
+
{
|
|
408
|
+
src: presignedUrl ?? void 0,
|
|
409
|
+
alt,
|
|
410
|
+
loading: "lazy",
|
|
411
|
+
className: "h-full w-full object-contain",
|
|
412
|
+
onError: () => setFailedUrl(presignedUrl)
|
|
413
|
+
}
|
|
414
|
+
)
|
|
415
|
+
)
|
|
416
|
+
}
|
|
417
|
+
);
|
|
418
|
+
}
|
|
419
|
+
const CaptureSlideScreenshotsToolUIImpl = (props) => {
|
|
420
|
+
const { toolName, args, result, artifact, status, isError } = props;
|
|
421
|
+
const openAsset = useAssetPanelStore((s) => s.openAsset);
|
|
422
|
+
if (rendersAsGenericCard(props)) return /* @__PURE__ */ jsx(ToolFallback, { ...props, icon: CameraIcon });
|
|
423
|
+
const typedArgs = recordOf(args);
|
|
424
|
+
const assetId = stringField(typedArgs, ["asset_id", "assetId"]);
|
|
425
|
+
const statusType = status == null ? void 0 : status.type;
|
|
426
|
+
const outcome = resolveSlideScreenshotOutcome({
|
|
427
|
+
result: withoutPerSlideFailures(result),
|
|
428
|
+
artifact: withoutPerSlideFailures(artifact),
|
|
429
|
+
statusType,
|
|
430
|
+
isError
|
|
431
|
+
});
|
|
432
|
+
const details = resolveSlideContactSheetDetails({
|
|
433
|
+
artifact,
|
|
434
|
+
requestedSlideNumbers: typedArgs.slide_numbers
|
|
435
|
+
});
|
|
436
|
+
const classification = classifyToolResult({ status, result, isError });
|
|
437
|
+
const failureDetail = outcome.kind === "failed" ? outcome.detail ?? "The slides could not be captured." : outcome.kind === "pending" && classification.state === "error" ? classification.failure.message : null;
|
|
438
|
+
const slideList = formatSlideList(details.capturedSlideNumbers);
|
|
439
|
+
const hasSheet = outcome.kind === "captured";
|
|
440
|
+
const hasFailed = failureDetail !== null;
|
|
441
|
+
const previewUnavailable = outcome.kind === "preview-unavailable";
|
|
442
|
+
const isWaiting = statusType === "requires-action" && !hasFailed;
|
|
443
|
+
const firstSlide = details.capturedSlideNumbers[0];
|
|
444
|
+
const openSlide = (slideNumber) => {
|
|
445
|
+
if (assetId) openAsset(assetId, { type: "presentation", slideNumber });
|
|
446
|
+
};
|
|
447
|
+
const cardStatus = hasFailed ? "incomplete" : isWaiting ? "requires-action" : hasSheet || previewUnavailable ? "complete" : "running";
|
|
448
|
+
const title = hasFailed ? `Failed to capture ${slideList}` : isWaiting ? waitingTitle(toolName) : hasSheet || previewUnavailable ? `Captured ${slideList}` : `Capturing ${slideList}...`;
|
|
449
|
+
return /* @__PURE__ */ jsxs(
|
|
450
|
+
ToolCard,
|
|
451
|
+
{
|
|
452
|
+
icon: CameraIcon,
|
|
453
|
+
status: cardStatus,
|
|
454
|
+
title,
|
|
455
|
+
toolName,
|
|
456
|
+
error: failureDetail,
|
|
457
|
+
args: typedArgs,
|
|
458
|
+
result,
|
|
459
|
+
children: [
|
|
460
|
+
hasSheet || previewUnavailable ? /* @__PURE__ */ jsxs("div", { className: "flex flex-col gap-2 border-t border-border/40 p-3", children: [
|
|
461
|
+
hasSheet ? /* @__PURE__ */ jsx(
|
|
462
|
+
ContactSheetImage,
|
|
463
|
+
{
|
|
464
|
+
initialPresignedUrl: outcome.presignedUrl,
|
|
465
|
+
s3Key: outcome.s3Key,
|
|
466
|
+
alt: `Contact sheet of ${slideList}`,
|
|
467
|
+
aspectRatio: details.width && details.height ? details.width / details.height : void 0
|
|
468
|
+
}
|
|
469
|
+
) : /* @__PURE__ */ jsx("p", { className: "text-[12px] text-muted-foreground", children: "The slides were captured, but the preview is not available in this view." }),
|
|
470
|
+
assetId && details.capturedSlideNumbers.length > 0 ? /* @__PURE__ */ jsx("div", { className: "flex flex-wrap gap-1.5", children: details.capturedSlideNumbers.map((slideNumber) => /* @__PURE__ */ jsxs(
|
|
471
|
+
"button",
|
|
472
|
+
{
|
|
473
|
+
type: "button",
|
|
474
|
+
title: `Open slide ${slideNumber}`,
|
|
475
|
+
onClick: () => openSlide(slideNumber),
|
|
476
|
+
className: "rounded border border-border/60 px-2 py-0.5 text-[11px] text-muted-foreground transition-colors hover:bg-muted/50 hover:text-foreground",
|
|
477
|
+
children: [
|
|
478
|
+
"Slide ",
|
|
479
|
+
slideNumber
|
|
480
|
+
]
|
|
481
|
+
},
|
|
482
|
+
slideNumber
|
|
483
|
+
)) }) : null,
|
|
484
|
+
details.failedSlides.length > 0 ? /* @__PURE__ */ jsx("ul", { className: "flex flex-col gap-0.5 text-[11px] text-amber-600", children: details.failedSlides.map((failure) => /* @__PURE__ */ jsx("li", { children: failure.error }, failure.slideNumber)) }) : null,
|
|
485
|
+
hasSheet && details.fidelityNotes.length > 0 ? /* @__PURE__ */ jsx("ul", { className: "flex flex-col gap-0.5 text-[11px] text-muted-foreground", children: details.fidelityNotes.map(({ slideNumber, notes }) => /* @__PURE__ */ jsxs("li", { children: [
|
|
486
|
+
"Slide ",
|
|
487
|
+
slideNumber,
|
|
488
|
+
" may differ from the exported .pptx: ",
|
|
489
|
+
notes.join(" ")
|
|
490
|
+
] }, slideNumber)) }) : null
|
|
491
|
+
] }) : null,
|
|
492
|
+
assetId && (hasSheet || previewUnavailable) ? /* @__PURE__ */ jsx("div", { className: "border-t border-border/40 px-4 py-2", children: /* @__PURE__ */ jsxs("button", { type: "button", onClick: () => openSlide(firstSlide ?? 1), className: OPEN_BUTTON_CLASS, children: [
|
|
493
|
+
/* @__PURE__ */ jsx(ExternalLinkIcon, { className: "size-3" }),
|
|
494
|
+
"Open presentation"
|
|
495
|
+
] }) }) : null
|
|
496
|
+
]
|
|
497
|
+
}
|
|
498
|
+
);
|
|
499
|
+
};
|
|
500
|
+
const CaptureSlideScreenshotsToolUIScoped = (props) => /* @__PURE__ */ jsx(ScreenshotQueryScope, { children: /* @__PURE__ */ jsx(CaptureSlideScreenshotsToolUIImpl, { ...props }) });
|
|
501
|
+
const CaptureSlideScreenshotsToolUI = memo(
|
|
502
|
+
CaptureSlideScreenshotsToolUIScoped
|
|
503
|
+
);
|
|
504
|
+
CaptureSlideScreenshotsToolUI.displayName = "CaptureSlideScreenshotsToolUI";
|
|
505
|
+
export {
|
|
506
|
+
CaptureSlideScreenshotsToolUI,
|
|
507
|
+
ManageSlidesToolUI,
|
|
508
|
+
SetSlideNotesToolUI,
|
|
509
|
+
UpdateSlideShapesToolUI,
|
|
510
|
+
formatSlideList,
|
|
511
|
+
readSlideEditResult,
|
|
512
|
+
resolveSlideContactSheetDetails,
|
|
513
|
+
resolveSlideScreenshotOutcome,
|
|
514
|
+
withoutPerSlideFailures
|
|
515
|
+
};
|
|
516
|
+
//# sourceMappingURL=presentation-edit-tool-uis.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"presentation-edit-tool-uis.js","sources":["../../src/tools/presentation-edit-tool-uis.tsx"],"sourcesContent":["\"use client\";\n\n/**\n * Cards for the presentation quick edits (`update_slide_shapes`,\n * `set_slide_notes`, `manage_slides`: the Commands API, no sandbox) and the\n * contact sheet of several slides (`capture_slide_screenshots`), in Olympus's\n * wording.\n *\n * Olympus opens the deck at the edited slide as an edit lands and highlights\n * the changed shapes through PPTX Studio's focus bridge; here the deck opens\n * only when the person asks, through the asset panel (\"Open slide N\"), and\n * nothing is highlighted. A contact sheet shows the presigned URL its result\n * carries: an expired one (agora signs it for two hours) shows Olympus's\n * placeholder, as minting a fresh one is a fetch this card does not make.\n */\nimport { memo, useState, type ElementType, type ReactNode } from \"react\";\nimport type {\n ToolCallMessagePartComponent,\n ToolCallMessagePartProps,\n} from \"@assistant-ui/react\";\nimport { CameraIcon, ExternalLinkIcon, PresentationIcon } from \"lucide-react\";\nimport { classifyToolResult, isRecord, stringField } from \"@athenaintel/agent-runtime\";\nimport { useAssetPanelStore } from \"../assets/asset-panel-store\";\nimport {\n blockedToolErrorLabels,\n readBlockedToolError,\n rendersAsGenericCard,\n waitingTitle,\n} from \"./document-edit-tool-uis\";\nimport { ToolCard, type ToolStatus } from \"./primitives\";\nimport { ScreenshotQueryScope, useScreenshotUrl } from \"./studio-screenshot-tool-uis\";\nimport { ToolFallback } from \"./tool-fallback\";\n\n// ─── Shared reading ──────────────────────────────────────────────────\n\nfunction recordOf(value: unknown): Record<string, unknown> {\n return isRecord(value) ? value : {};\n}\n\nfunction positiveInteger(value: unknown): number | null {\n return typeof value === \"number\" && Number.isInteger(value) && value > 0 ? value : null;\n}\n\nconst OPEN_BUTTON_CLASS =\n \"flex items-center gap-1.5 rounded-md border border-border/60 px-3 py-1.5 text-xs font-medium text-muted-foreground transition-colors hover:bg-muted/50 hover:text-foreground\";\n\nfunction parseJsonIfString(raw: unknown): unknown {\n if (typeof raw !== \"string\") return raw;\n try {\n return JSON.parse(raw);\n } catch {\n return raw;\n }\n}\n\n/** A tool payload with JSON text parsed and a `{ result }` wrapper unwrapped. */\nfunction safeParseResult(raw: unknown): unknown {\n if (typeof raw === \"string\") return parseJsonIfString(raw);\n if (isRecord(raw) && \"result\" in raw) return parseJsonIfString(raw.result);\n return raw;\n}\n\n// ─── Quick edits ─────────────────────────────────────────────────────\n\n/** The `EditResult` every quick edit answers with; `null` when the payload is not one. */\nexport interface SlideEditResult {\n success: boolean;\n error: string | null;\n message: string | null;\n slideNumber: number | null;\n action: string | null;\n}\n\nexport function readSlideEditResult(result: unknown): SlideEditResult | null {\n const record = safeParseResult(result);\n if (!isRecord(record) || typeof record.success !== \"boolean\") return null;\n return {\n success: record.success,\n error: stringField(record, [\"error\"]),\n message: stringField(record, [\"message\"]),\n slideNumber: positiveInteger(record.slide_number),\n action: stringField(record, [\"action\"]),\n };\n}\n\ntype SlideEditOutcome =\n | { kind: \"running\" }\n | { kind: \"waiting\" }\n | { kind: \"done\"; result: SlideEditResult }\n | { kind: \"failed\"; title: string; detail: string | null };\n\n/**\n * What a quick edit amounts to. A refused edit reads \"Failed to …\" with\n * agora's reason; a call that settled without an edit result reads \"Couldn't\n * confirm …\", never a success, since it may have done nothing.\n */\nfunction readSlideEditOutcome({\n toolName,\n action,\n status,\n result,\n isError,\n}: Pick<ToolCallMessagePartProps, \"toolName\" | \"status\" | \"result\" | \"isError\"> & {\n action: string;\n}): SlideEditOutcome {\n const classification = classifyToolResult({ status, result, isError });\n if (classification.state === \"running\") return { kind: \"running\" };\n if (classification.state === \"requires-action\") return { kind: \"waiting\" };\n const blocked = readBlockedToolError(result);\n if (blocked) return { kind: \"failed\", ...blockedToolErrorLabels({ toolName, blocked }) };\n const edit = readSlideEditResult(result);\n if (edit && !edit.success) {\n return { kind: \"failed\", title: `Failed to ${action}`, detail: edit.error };\n }\n if (classification.state === \"error\") {\n return { kind: \"failed\", title: `Failed to ${action}`, detail: classification.failure.message };\n }\n if (!edit) return { kind: \"failed\", title: `Couldn't confirm ${action}`, detail: null };\n return { kind: \"done\", result: edit };\n}\n\nfunction slideEditStatus(outcome: SlideEditOutcome): ToolStatus {\n switch (outcome.kind) {\n case \"running\":\n return \"running\";\n case \"waiting\":\n return \"requires-action\";\n case \"failed\":\n return \"incomplete\";\n case \"done\":\n return \"complete\";\n }\n}\n\ninterface SlideEditSpec {\n displayName: string;\n icon: ElementType;\n /** What the edit does, as Olympus's completion copy reads it (\"update slide text\"). */\n action: string;\n loading: (args: Record<string, unknown>) => string;\n /** Whether a landed edit leaves a slide to open (a deleted slide has none). */\n opensSlide: (result: SlideEditResult) => boolean;\n /** What the edit wrote, shown once it did not fail. */\n details?: (args: Record<string, unknown>) => ReactNode;\n}\n\nfunction makeSlideEditToolUI(spec: SlideEditSpec): ToolCallMessagePartComponent {\n const Impl: ToolCallMessagePartComponent = (props) => {\n const { toolName, args, result, status, isError } = props;\n const openAsset = useAssetPanelStore((s) => s.openAsset);\n if (rendersAsGenericCard(props)) return <ToolFallback {...props} icon={spec.icon} />;\n\n const typedArgs = recordOf(args);\n const assetId = stringField(typedArgs, [\"asset_id\", \"deck_id\"]);\n const outcome = readSlideEditOutcome({\n toolName,\n action: spec.action,\n status,\n result,\n isError,\n });\n const slideToOpen =\n outcome.kind === \"done\" && assetId && spec.opensSlide(outcome.result)\n ? outcome.result.slideNumber\n : null;\n\n const title =\n outcome.kind === \"running\"\n ? spec.loading(typedArgs)\n : outcome.kind === \"waiting\"\n ? waitingTitle(toolName)\n : outcome.kind === \"failed\"\n ? outcome.title\n : (outcome.result.message ?? `Finished: ${spec.action}`);\n const details = outcome.kind === \"failed\" ? null : (spec.details?.(typedArgs) ?? null);\n\n return (\n <ToolCard\n icon={spec.icon}\n status={slideEditStatus(outcome)}\n title={title}\n toolName={toolName}\n error={outcome.kind === \"failed\" ? outcome.detail : null}\n args={typedArgs}\n result={result}\n >\n {details}\n {assetId && slideToOpen ? (\n <div className=\"border-t border-border/40 px-4 py-2\">\n <button\n type=\"button\"\n onClick={() => openAsset(assetId, { type: \"presentation\", slideNumber: slideToOpen })}\n className={OPEN_BUTTON_CLASS}\n >\n <ExternalLinkIcon className=\"size-3\" />\n Open slide {slideToOpen}\n </button>\n </div>\n ) : null}\n </ToolCard>\n );\n };\n const SlideEdit = memo(Impl) as unknown as ToolCallMessagePartComponent;\n SlideEdit.displayName = spec.displayName;\n return SlideEdit;\n}\n\nfunction flattenText(text: string, max: number): string {\n const flattened = text.replace(/\\s+/g, \" \").trim();\n return flattened.length > max ? `${flattened.slice(0, max)}…` : flattened;\n}\n\ninterface ShapeTextEdit {\n shapeId: string;\n text: string;\n}\n\n/** The `shapes` argument (a list, or the JSON text some runtimes send). */\nfunction shapeTextEdits(args: Record<string, unknown>): ShapeTextEdit[] {\n const shapes = parseJsonIfString(args.shapes);\n if (!Array.isArray(shapes)) return [];\n return shapes.flatMap((shape) => {\n if (!isRecord(shape)) return [];\n return [{ shapeId: stringField(shape, [\"shape_id\"]) ?? \"\", text: typeof shape.text === \"string\" ? shape.text : \"\" }];\n });\n}\n\nfunction ShapeEdits({ args }: { args: Record<string, unknown> }) {\n const edits = shapeTextEdits(args);\n if (edits.length === 0) return null;\n return (\n <div className=\"flex flex-col gap-1 border-t border-border/40 px-4 py-2.5\">\n {edits.map((edit, index) => (\n <div\n key={edit.shapeId || index}\n className=\"flex items-baseline gap-2 rounded bg-muted p-2 text-[11px]\"\n >\n <span className=\"shrink-0 font-mono text-muted-foreground\">{edit.shapeId}</span>\n <span className=\"min-w-0 text-foreground\">{flattenText(edit.text, 80)}</span>\n </div>\n ))}\n </div>\n );\n}\n\nconst NOTES_PREVIEW_CHARS = 600;\n\nfunction SlideNotes({ args }: { args: Record<string, unknown> }) {\n const notes = typeof args.notes === \"string\" ? args.notes : \"\";\n if (!notes) return null;\n return (\n <div className=\"border-t border-border/40 px-4 py-2.5\">\n <div className=\"whitespace-pre-wrap rounded bg-muted p-2 text-[11px] text-foreground\">\n {notes.length > NOTES_PREVIEW_CHARS ? `${notes.slice(0, NOTES_PREVIEW_CHARS)}…` : notes}\n </div>\n </div>\n );\n}\n\n/** `update_slide_shapes`: the new text of several shapes on one slide. */\nexport const UpdateSlideShapesToolUI = makeSlideEditToolUI({\n displayName: \"UpdateSlideShapesToolUI\",\n icon: PresentationIcon,\n action: \"update slide text\",\n loading: (args) => {\n const count = shapeTextEdits(args).length;\n return count > 0\n ? `Updating ${count} shape${count === 1 ? \"\" : \"s\"} on the slide...`\n : \"Updating slide text...\";\n },\n opensSlide: () => true,\n details: (args) => <ShapeEdits args={args} />,\n});\n\n/** `set_slide_notes`: a slide's speaker notes replaced. */\nexport const SetSlideNotesToolUI = makeSlideEditToolUI({\n displayName: \"SetSlideNotesToolUI\",\n icon: PresentationIcon,\n action: \"update speaker notes\",\n loading: (args) => {\n const slideNumber = positiveInteger(args.slide_number);\n return slideNumber\n ? `Updating speaker notes on slide ${slideNumber}...`\n : \"Updating speaker notes...\";\n },\n opensSlide: () => true,\n details: (args) => <SlideNotes args={args} />,\n});\n\n/** `manage_slides`: a slide added, duplicated, deleted, moved or re-laid-out, or the deck reordered. */\nexport const ManageSlidesToolUI = makeSlideEditToolUI({\n displayName: \"ManageSlidesToolUI\",\n icon: PresentationIcon,\n action: \"update slides\",\n loading: (args) => {\n const slideNumber = positiveInteger(args.slide_number);\n const slideSuffix = slideNumber ? ` ${slideNumber}` : \"\";\n switch (args.action) {\n case \"add\":\n return \"Adding a slide...\";\n case \"duplicate\":\n return `Duplicating slide${slideSuffix}...`;\n case \"delete\":\n return `Deleting slide${slideSuffix}...`;\n case \"move\":\n return `Moving slide${slideSuffix}...`;\n case \"reorder\":\n return \"Reordering slides...\";\n case \"set_layout\":\n return \"Changing slide layout...\";\n default:\n return \"Updating slides...\";\n }\n },\n opensSlide: (result) => result.action !== \"delete\",\n});\n\n// ─── Contact sheet ───────────────────────────────────────────────────\n\n/**\n * A result string as content items: one JSON value, or the newline-delimited\n * blocks a multi-block content list serializes to (`{…}\\n{…}`).\n */\nfunction parseResultString(result: string): unknown[] {\n try {\n const parsed: unknown = JSON.parse(result);\n return typeof parsed === \"string\" ? [] : [parsed];\n } catch {\n // Newline-delimited blocks below.\n }\n return result.split(\"\\n\").flatMap((line) => {\n const trimmed = line.trim();\n if (!trimmed) return [];\n try {\n const parsed: unknown = JSON.parse(trimmed);\n return typeof parsed === \"string\" ? [] : [parsed];\n } catch {\n return [];\n }\n });\n}\n\nfunction imageSourceOf(value: unknown): Record<string, unknown> | null {\n return isRecord(value) && value.type === \"image\" && isRecord(value.source) ? value.source : null;\n}\n\n/** The presigned URL a screenshot result carries (on its image block, or as `presigned_url`). */\nfunction extractPresignedUrl(result: unknown): string | undefined {\n if (!result) return undefined;\n if (typeof result === \"string\") return extractPresignedUrl(parseResultString(result));\n if (Array.isArray(result)) {\n for (const item of result) {\n const url = extractPresignedUrl(item);\n if (url) return url;\n }\n return undefined;\n }\n const source = imageSourceOf(result);\n if (source && typeof source.presigned_url === \"string\") return source.presigned_url;\n return isRecord(result) && typeof result.presigned_url === \"string\"\n ? result.presigned_url\n : undefined;\n}\n\n/** The durable S3 key on an `s3_key` image block: it never expires, unlike the URL. */\nfunction extractScreenshotS3Key(result: unknown): string | undefined {\n if (!result) return undefined;\n if (typeof result === \"string\") return extractScreenshotS3Key(parseResultString(result));\n if (Array.isArray(result)) {\n for (const item of result) {\n const key = extractScreenshotS3Key(item);\n if (key) return key;\n }\n return undefined;\n }\n const source = imageSourceOf(result);\n return source?.type === \"s3_key\" && typeof source.data === \"string\" ? source.data : undefined;\n}\n\nfunction isTextBlock(value: unknown): value is { type: \"text\"; text: string } {\n return isRecord(value) && value.type === \"text\" && typeof value.text === \"string\";\n}\n\n/** The backend's structured failure (`success: false` and/or `error`) anywhere in the payloads, text blocks included. */\nfunction findStructuredFailure(...sources: unknown[]): { found: boolean; detail?: string } {\n const stack: unknown[] = sources.map((source) => safeParseResult(source));\n let found = false;\n let detail: string | undefined;\n while (stack.length > 0) {\n const item = stack.pop();\n if (!item) continue;\n if (Array.isArray(item)) {\n stack.push(...item);\n continue;\n }\n if (isTextBlock(item)) {\n const inner = parseJsonIfString(item.text);\n if (inner !== item.text) stack.push(inner);\n continue;\n }\n if (!isRecord(item)) continue;\n const explicitError = typeof item.error === \"string\" && item.error.length > 0 ? item.error : undefined;\n if (item.success === false || explicitError) {\n found = true;\n detail ??=\n explicitError ??\n (typeof item.message === \"string\" && item.message.length > 0 ? item.message : undefined);\n }\n for (const value of Object.values(item)) {\n if (value && typeof value === \"object\") stack.push(value);\n }\n }\n return { found, detail };\n}\n\n/** The first readable text of an errored result (a string, or its text blocks). */\nfunction extractErrorText(result: unknown): string | undefined {\n const parsed = safeParseResult(result);\n if (typeof parsed === \"string\" && parsed.trim()) return parsed.trim();\n if (Array.isArray(parsed)) {\n for (const item of parsed) {\n if (isTextBlock(item) && item.text.trim()) return item.text.trim();\n }\n }\n return undefined;\n}\n\n/**\n * What a settled screenshot call shows. `preview-unavailable` is a capture\n * that reported no failure yet carries no image to draw, so the card does not\n * blame the deck.\n */\nexport type SlideScreenshotOutcome =\n | { kind: \"pending\" }\n | { kind: \"captured\"; presignedUrl?: string; s3Key?: string }\n | { kind: \"preview-unavailable\" }\n | { kind: \"failed\"; detail?: string };\n\nexport function resolveSlideScreenshotOutcome({\n result,\n artifact,\n statusType,\n isError,\n}: {\n result: unknown;\n artifact: unknown;\n statusType: string | undefined;\n isError: boolean | undefined;\n}): SlideScreenshotOutcome {\n const parsedResult = safeParseResult(result);\n const presignedUrl = extractPresignedUrl(parsedResult) ?? extractPresignedUrl(artifact);\n const s3Key = extractScreenshotS3Key(parsedResult) ?? extractScreenshotS3Key(artifact);\n const failure = findStructuredFailure(result, artifact);\n if (isError) return { kind: \"failed\", detail: failure.detail ?? extractErrorText(result) };\n if (failure.found) return { kind: \"failed\", detail: failure.detail };\n if (presignedUrl || s3Key) return { kind: \"captured\", presignedUrl, s3Key };\n if (statusType === \"complete\") return { kind: \"preview-unavailable\" };\n return { kind: \"pending\" };\n}\n\n/**\n * The payload without its per-slide `failed_slides`, so the batch is judged\n * by its own `success` / `error` and one missing slide does not fail the sheet.\n */\nexport function withoutPerSlideFailures(value: unknown): unknown {\n const parsed = safeParseResult(value);\n if (Array.isArray(parsed)) return parsed.map(withoutPerSlideFailures);\n if (!isRecord(parsed)) return parsed;\n return Object.fromEntries(\n Object.entries(parsed)\n .filter(([key]) => key !== \"failed_slides\")\n .map(([key, inner]) => [\n key,\n inner && typeof inner === \"object\" ? withoutPerSlideFailures(inner) : inner,\n ]),\n );\n}\n\nexport interface SlideContactSheetFailure {\n slideNumber: number;\n error: string;\n}\n\nexport interface SlideFidelityNotes {\n slideNumber: number;\n notes: string[];\n}\n\n/** The structured fields of agora's `SlideContactSheetResult` artifact. */\nexport interface SlideContactSheetDetails {\n capturedSlideNumbers: number[];\n failedSlides: SlideContactSheetFailure[];\n fidelityNotes: SlideFidelityNotes[];\n width?: number;\n height?: number;\n}\n\nfunction toSlideNumbers(value: unknown): number[] {\n if (!Array.isArray(value)) return [];\n return value.filter((n): n is number => typeof n === \"number\" && Number.isInteger(n) && n > 0);\n}\n\nfunction toPositiveNumber(value: unknown): number | undefined {\n return typeof value === \"number\" && Number.isFinite(value) && value > 0 ? value : undefined;\n}\n\nfunction toFailures(value: unknown): SlideContactSheetFailure[] {\n if (!Array.isArray(value)) return [];\n return value.flatMap((item) =>\n isRecord(item) && typeof item.slide_number === \"number\" && typeof item.error === \"string\"\n ? [{ slideNumber: item.slide_number, error: item.error }]\n : [],\n );\n}\n\nfunction toFidelityNotes(value: unknown): SlideFidelityNotes[] {\n if (!isRecord(value)) return [];\n return Object.entries(value)\n .flatMap(([key, notes]) => {\n const slideNumber = Number(key);\n if (!Number.isInteger(slideNumber) || slideNumber <= 0 || !Array.isArray(notes)) return [];\n const strings = notes.filter(\n (note): note is string => typeof note === \"string\" && note.length > 0,\n );\n return strings.length > 0 ? [{ slideNumber, notes: strings }] : [];\n })\n .sort((a, b) => a.slideNumber - b.slideNumber);\n}\n\nfunction findContactSheetRecord(artifact: unknown): Record<string, unknown> | undefined {\n const parsed = safeParseResult(artifact);\n const candidates: unknown[] = Array.isArray(parsed) ? parsed : [parsed];\n return candidates.find(\n (item): item is Record<string, unknown> =>\n isRecord(item) && (\"captured_slide_numbers\" in item || \"failed_slides\" in item),\n );\n}\n\n/**\n * Which slides landed on the sheet and which failed, from the artifact; the\n * requested `slide_numbers` (deduplicated, ascending) when the artifact is\n * missing, as on older persisted rows.\n */\nexport function resolveSlideContactSheetDetails({\n artifact,\n requestedSlideNumbers,\n}: {\n artifact: unknown;\n requestedSlideNumbers: unknown;\n}): SlideContactSheetDetails {\n const record = findContactSheetRecord(artifact);\n const failedSlides = toFailures(record?.failed_slides);\n const captured = toSlideNumbers(record?.captured_slide_numbers);\n const failedSet = new Set(failedSlides.map((failure) => failure.slideNumber));\n const capturedSlideNumbers =\n captured.length > 0\n ? captured\n : [...new Set(toSlideNumbers(safeParseResult(requestedSlideNumbers)))]\n .filter((n) => !failedSet.has(n))\n .sort((a, b) => a - b);\n return {\n capturedSlideNumbers,\n failedSlides,\n fidelityNotes: toFidelityNotes(record?.fidelity_notes_by_slide),\n width: toPositiveNumber(record?.width),\n height: toPositiveNumber(record?.height),\n };\n}\n\n/** [5, 13, 19, 20] → \"slides 5, 13, 19, 20\"; a run of three or more collapses to \"1–4\". */\nexport function formatSlideList(slideNumbers: number[]): string {\n if (slideNumbers.length === 0) return \"slides\";\n const sorted = [...new Set(slideNumbers)].sort((a, b) => a - b);\n const parts: string[] = [];\n let start = sorted[0] ?? 0;\n let prev = start;\n for (const n of [...sorted.slice(1), Number.NaN]) {\n if (n === prev + 1) {\n prev = n;\n continue;\n }\n parts.push(\n prev - start >= 2 ? `${start}–${prev}` : start === prev ? `${start}` : `${start}, ${prev}`,\n );\n start = n;\n prev = n;\n }\n return `${sorted.length === 1 ? \"slide\" : \"slides\"} ${parts.join(\", \")}`;\n}\n\n/**\n * The sheet image, its box reserved from the sheet's size, shown from a URL\n * agora signs afresh for its storage key (the result's own URL lives two\n * hours); Olympus's placeholder once no URL can show it.\n */\nfunction ContactSheetImage({\n initialPresignedUrl,\n s3Key,\n alt,\n aspectRatio,\n}: {\n initialPresignedUrl: string | undefined;\n s3Key: string | undefined;\n alt: string;\n aspectRatio: number | undefined;\n}) {\n const presignedUrl = useScreenshotUrl({ s3Key: s3Key ?? null, fallbackUrl: initialPresignedUrl ?? null });\n const [failedUrl, setFailedUrl] = useState<string | null>(null);\n const unavailable = !presignedUrl || failedUrl === presignedUrl;\n return (\n <div\n className=\"flex w-full items-center justify-center overflow-hidden rounded-lg border border-border/50 bg-muted/20\"\n style={aspectRatio ? { aspectRatio } : undefined}\n >\n {unavailable ? (\n <p className=\"px-4 py-6 text-center text-[12px] text-muted-foreground\">\n Screenshot preview is no longer available.\n </p>\n ) : (\n // biome-ignore lint/a11y/noNoninteractiveElementInteractions: a failed load, not an interaction; the placeholder replaces the image\n <img\n src={presignedUrl ?? undefined}\n alt={alt}\n loading=\"lazy\"\n className=\"h-full w-full object-contain\"\n onError={() => setFailedUrl(presignedUrl)}\n />\n )}\n </div>\n );\n}\n\nconst CaptureSlideScreenshotsToolUIImpl: ToolCallMessagePartComponent = (props) => {\n const { toolName, args, result, artifact, status, isError } = props;\n const openAsset = useAssetPanelStore((s) => s.openAsset);\n if (rendersAsGenericCard(props)) return <ToolFallback {...props} icon={CameraIcon} />;\n\n const typedArgs = recordOf(args);\n const assetId = stringField(typedArgs, [\"asset_id\", \"assetId\"]);\n const statusType = status?.type;\n const outcome = resolveSlideScreenshotOutcome({\n result: withoutPerSlideFailures(result),\n artifact: withoutPerSlideFailures(artifact),\n statusType,\n isError,\n });\n const details = resolveSlideContactSheetDetails({\n artifact,\n requestedSlideNumbers: typedArgs.slide_numbers,\n });\n const classification = classifyToolResult({ status, result, isError });\n // A call that stopped with an error carries no payload to read a failure from.\n const failureDetail =\n outcome.kind === \"failed\"\n ? (outcome.detail ?? \"The slides could not be captured.\")\n : outcome.kind === \"pending\" && classification.state === \"error\"\n ? classification.failure.message\n : null;\n const slideList = formatSlideList(details.capturedSlideNumbers);\n const hasSheet = outcome.kind === \"captured\";\n const hasFailed = failureDetail !== null;\n const previewUnavailable = outcome.kind === \"preview-unavailable\";\n const isWaiting = statusType === \"requires-action\" && !hasFailed;\n const firstSlide = details.capturedSlideNumbers[0];\n const openSlide = (slideNumber: number) => {\n if (assetId) openAsset(assetId, { type: \"presentation\", slideNumber });\n };\n\n const cardStatus: ToolStatus = hasFailed\n ? \"incomplete\"\n : isWaiting\n ? \"requires-action\"\n : hasSheet || previewUnavailable\n ? \"complete\"\n : \"running\";\n const title = hasFailed\n ? `Failed to capture ${slideList}`\n : isWaiting\n ? waitingTitle(toolName)\n : hasSheet || previewUnavailable\n ? `Captured ${slideList}`\n : `Capturing ${slideList}...`;\n\n return (\n <ToolCard\n icon={CameraIcon}\n status={cardStatus}\n title={title}\n toolName={toolName}\n error={failureDetail}\n args={typedArgs}\n result={result}\n >\n {hasSheet || previewUnavailable ? (\n <div className=\"flex flex-col gap-2 border-t border-border/40 p-3\">\n {hasSheet ? (\n <ContactSheetImage\n initialPresignedUrl={outcome.presignedUrl}\n s3Key={outcome.s3Key}\n alt={`Contact sheet of ${slideList}`}\n aspectRatio={\n details.width && details.height ? details.width / details.height : undefined\n }\n />\n ) : (\n <p className=\"text-[12px] text-muted-foreground\">\n The slides were captured, but the preview is not available in this view.\n </p>\n )}\n {assetId && details.capturedSlideNumbers.length > 0 ? (\n <div className=\"flex flex-wrap gap-1.5\">\n {details.capturedSlideNumbers.map((slideNumber) => (\n <button\n key={slideNumber}\n type=\"button\"\n title={`Open slide ${slideNumber}`}\n onClick={() => openSlide(slideNumber)}\n className=\"rounded border border-border/60 px-2 py-0.5 text-[11px] text-muted-foreground transition-colors hover:bg-muted/50 hover:text-foreground\"\n >\n Slide {slideNumber}\n </button>\n ))}\n </div>\n ) : null}\n {details.failedSlides.length > 0 ? (\n <ul className=\"flex flex-col gap-0.5 text-[11px] text-amber-600\">\n {details.failedSlides.map((failure) => (\n <li key={failure.slideNumber}>{failure.error}</li>\n ))}\n </ul>\n ) : null}\n {hasSheet && details.fidelityNotes.length > 0 ? (\n <ul className=\"flex flex-col gap-0.5 text-[11px] text-muted-foreground\">\n {details.fidelityNotes.map(({ slideNumber, notes }) => (\n <li key={slideNumber}>\n Slide {slideNumber} may differ from the exported .pptx: {notes.join(\" \")}\n </li>\n ))}\n </ul>\n ) : null}\n </div>\n ) : null}\n {assetId && (hasSheet || previewUnavailable) ? (\n <div className=\"border-t border-border/40 px-4 py-2\">\n <button type=\"button\" onClick={() => openSlide(firstSlide ?? 1)} className={OPEN_BUTTON_CLASS}>\n <ExternalLinkIcon className=\"size-3\" />\n Open presentation\n </button>\n </div>\n ) : null}\n </ToolCard>\n );\n};\n\nconst CaptureSlideScreenshotsToolUIScoped: ToolCallMessagePartComponent = (props) => (\n <ScreenshotQueryScope>\n <CaptureSlideScreenshotsToolUIImpl {...props} />\n </ScreenshotQueryScope>\n);\n\n/** `capture_slide_screenshots`: the contact sheet, a chip per captured slide, and the slides that failed. */\nexport const CaptureSlideScreenshotsToolUI = memo(\n CaptureSlideScreenshotsToolUIScoped,\n) as unknown as ToolCallMessagePartComponent;\nCaptureSlideScreenshotsToolUI.displayName = \"CaptureSlideScreenshotsToolUI\";\n"],"names":[],"mappings":"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"}
|