@athenaintel/react 0.57.2 → 0.60.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +795 -12
- package/dist/agent-runtime/src/addressed-agents.cjs +16 -0
- package/dist/agent-runtime/src/addressed-agents.cjs.map +1 -0
- package/dist/agent-runtime/src/addressed-agents.d.ts +30 -0
- package/dist/agent-runtime/src/addressed-agents.js +16 -0
- package/dist/agent-runtime/src/addressed-agents.js.map +1 -0
- package/dist/agent-runtime/src/answer-label.cjs +4 -3
- package/dist/agent-runtime/src/answer-label.cjs.map +1 -1
- package/dist/agent-runtime/src/answer-label.d.ts +13 -6
- package/dist/agent-runtime/src/answer-label.js +4 -3
- package/dist/agent-runtime/src/answer-label.js.map +1 -1
- package/dist/agent-runtime/src/chat-outbox-attachments.cjs.map +1 -1
- package/dist/agent-runtime/src/chat-outbox-attachments.d.ts +1 -1
- package/dist/agent-runtime/src/chat-outbox-attachments.js.map +1 -1
- package/dist/agent-runtime/src/chat-outbox-entry.cjs +101 -0
- package/dist/agent-runtime/src/chat-outbox-entry.cjs.map +1 -0
- package/dist/agent-runtime/src/chat-outbox-entry.d.ts +99 -0
- package/dist/agent-runtime/src/chat-outbox-entry.js +101 -0
- package/dist/agent-runtime/src/chat-outbox-entry.js.map +1 -0
- package/dist/agent-runtime/src/chat-outbox-legacy.cjs +252 -0
- package/dist/agent-runtime/src/chat-outbox-legacy.cjs.map +1 -0
- package/dist/agent-runtime/src/chat-outbox-legacy.d.ts +96 -0
- package/dist/agent-runtime/src/chat-outbox-legacy.js +252 -0
- package/dist/agent-runtime/src/chat-outbox-legacy.js.map +1 -0
- package/dist/agent-runtime/src/chat-outbox-policy.cjs +30 -0
- package/dist/agent-runtime/src/chat-outbox-policy.cjs.map +1 -0
- package/dist/agent-runtime/src/chat-outbox-policy.d.ts +42 -0
- package/dist/agent-runtime/src/chat-outbox-policy.js +30 -0
- package/dist/agent-runtime/src/chat-outbox-policy.js.map +1 -0
- package/dist/agent-runtime/src/chat-outbox-storage.cjs +306 -0
- package/dist/agent-runtime/src/chat-outbox-storage.cjs.map +1 -0
- package/dist/agent-runtime/src/chat-outbox-storage.d.ts +194 -0
- package/dist/agent-runtime/src/chat-outbox-storage.js +306 -0
- package/dist/agent-runtime/src/chat-outbox-storage.js.map +1 -0
- package/dist/agent-runtime/src/chat-outbox-thread.cjs +21 -94
- package/dist/agent-runtime/src/chat-outbox-thread.cjs.map +1 -1
- package/dist/agent-runtime/src/chat-outbox-thread.d.ts +22 -18
- package/dist/agent-runtime/src/chat-outbox-thread.js +21 -94
- package/dist/agent-runtime/src/chat-outbox-thread.js.map +1 -1
- package/dist/agent-runtime/src/chat-outbox.cjs +492 -547
- package/dist/agent-runtime/src/chat-outbox.cjs.map +1 -1
- package/dist/agent-runtime/src/chat-outbox.d.ts +110 -142
- package/dist/agent-runtime/src/chat-outbox.js +492 -547
- package/dist/agent-runtime/src/chat-outbox.js.map +1 -1
- package/dist/agent-runtime/src/composer-markdown.cjs +0 -16
- package/dist/agent-runtime/src/composer-markdown.cjs.map +1 -1
- package/dist/agent-runtime/src/composer-markdown.d.ts +1 -1
- package/dist/agent-runtime/src/composer-markdown.js +1 -17
- package/dist/agent-runtime/src/composer-markdown.js.map +1 -1
- package/dist/agent-runtime/src/deep-agent-transport-recipe.cjs +3 -1
- package/dist/agent-runtime/src/deep-agent-transport-recipe.cjs.map +1 -1
- package/dist/agent-runtime/src/deep-agent-transport-recipe.d.ts +8 -1
- package/dist/agent-runtime/src/deep-agent-transport-recipe.js +3 -1
- package/dist/agent-runtime/src/deep-agent-transport-recipe.js.map +1 -1
- package/dist/agent-runtime/src/dictation-preferences.d.ts +356 -0
- package/dist/agent-runtime/src/dictation-record.d.ts +279 -0
- package/dist/agent-runtime/src/dictation-session.d.ts +106 -7
- package/dist/agent-runtime/src/dictation-snippets.d.ts +9 -0
- package/dist/agent-runtime/src/dictation-transfer.d.ts +142 -0
- package/dist/agent-runtime/src/edit-command.cjs.map +1 -1
- package/dist/agent-runtime/src/edit-command.d.ts +1 -1
- package/dist/agent-runtime/src/edit-command.js.map +1 -1
- package/dist/agent-runtime/src/errors.cjs +1 -0
- package/dist/agent-runtime/src/errors.cjs.map +1 -1
- package/dist/agent-runtime/src/errors.js +1 -0
- package/dist/agent-runtime/src/errors.js.map +1 -1
- package/dist/agent-runtime/src/generated/runconfig-contract.cjs +24 -0
- package/dist/agent-runtime/src/generated/runconfig-contract.cjs.map +1 -1
- package/dist/agent-runtime/src/generated/runconfig-contract.d.ts +3 -3
- package/dist/agent-runtime/src/generated/runconfig-contract.js +24 -0
- package/dist/agent-runtime/src/generated/runconfig-contract.js.map +1 -1
- package/dist/agent-runtime/src/index.d.ts +14 -8
- package/dist/agent-runtime/src/lane-follow.cjs +289 -0
- package/dist/agent-runtime/src/lane-follow.cjs.map +1 -0
- package/dist/agent-runtime/src/lane-follow.js +289 -0
- package/dist/agent-runtime/src/lane-follow.js.map +1 -0
- package/dist/agent-runtime/src/lane-images.cjs +387 -0
- package/dist/agent-runtime/src/lane-images.cjs.map +1 -0
- package/dist/agent-runtime/src/lane-images.js +387 -0
- package/dist/agent-runtime/src/lane-images.js.map +1 -0
- package/dist/agent-runtime/src/message-window.js +1 -1
- package/dist/agent-runtime/src/messages.cjs +19 -1
- package/dist/agent-runtime/src/messages.cjs.map +1 -1
- package/dist/agent-runtime/src/messages.d.ts +8 -0
- package/dist/agent-runtime/src/messages.js +21 -3
- package/dist/agent-runtime/src/messages.js.map +1 -1
- package/dist/agent-runtime/src/named-agents.cjs +301 -0
- package/dist/agent-runtime/src/named-agents.cjs.map +1 -0
- package/dist/agent-runtime/src/named-agents.d.ts +246 -0
- package/dist/agent-runtime/src/named-agents.js +301 -0
- package/dist/agent-runtime/src/named-agents.js.map +1 -0
- package/dist/agent-runtime/src/offline-status.cjs.map +1 -1
- package/dist/agent-runtime/src/offline-status.d.ts +93 -2
- package/dist/agent-runtime/src/offline-status.js.map +1 -1
- package/dist/agent-runtime/src/ptc-subcalls.cjs +41 -0
- package/dist/agent-runtime/src/ptc-subcalls.cjs.map +1 -0
- package/dist/agent-runtime/src/ptc-subcalls.js +41 -0
- package/dist/agent-runtime/src/ptc-subcalls.js.map +1 -0
- package/dist/agent-runtime/src/queue.cjs +2 -2
- package/dist/agent-runtime/src/queue.cjs.map +1 -1
- package/dist/agent-runtime/src/queue.d.ts +20 -25
- package/dist/agent-runtime/src/queue.js +2 -2
- package/dist/agent-runtime/src/queue.js.map +1 -1
- package/dist/agent-runtime/src/quota-safe-local-storage-session.cjs +314 -84
- package/dist/agent-runtime/src/quota-safe-local-storage-session.cjs.map +1 -1
- package/dist/agent-runtime/src/quota-safe-local-storage-session.d.ts +137 -40
- package/dist/agent-runtime/src/quota-safe-local-storage-session.js +318 -88
- package/dist/agent-runtime/src/quota-safe-local-storage-session.js.map +1 -1
- package/dist/agent-runtime/src/run-send.cjs +54 -0
- package/dist/agent-runtime/src/run-send.cjs.map +1 -0
- package/dist/agent-runtime/src/run-send.d.ts +51 -0
- package/dist/agent-runtime/src/run-send.js +54 -0
- package/dist/agent-runtime/src/run-send.js.map +1 -0
- package/dist/agent-runtime/src/running-tool-placeholder.cjs +6 -0
- package/dist/agent-runtime/src/running-tool-placeholder.cjs.map +1 -1
- package/dist/agent-runtime/src/running-tool-placeholder.js +6 -0
- package/dist/agent-runtime/src/running-tool-placeholder.js.map +1 -1
- package/dist/agent-runtime/src/runtime.d.ts +9 -5
- package/dist/agent-runtime/src/sealed-idb.cjs +64 -0
- package/dist/agent-runtime/src/sealed-idb.cjs.map +1 -1
- package/dist/agent-runtime/src/sealed-idb.d.ts +16 -0
- package/dist/agent-runtime/src/sealed-idb.js +64 -0
- package/dist/agent-runtime/src/sealed-idb.js.map +1 -1
- package/dist/agent-runtime/src/send-recovery.cjs +90 -118
- package/dist/agent-runtime/src/send-recovery.cjs.map +1 -1
- package/dist/agent-runtime/src/send-recovery.d.ts +25 -29
- package/dist/agent-runtime/src/send-recovery.js +90 -118
- package/dist/agent-runtime/src/send-recovery.js.map +1 -1
- package/dist/agent-runtime/src/statewire-diagnostics.d.ts +4 -1
- package/dist/agent-runtime/src/statewire-held-sends.cjs +191 -0
- package/dist/agent-runtime/src/statewire-held-sends.cjs.map +1 -0
- package/dist/agent-runtime/src/statewire-held-sends.d.ts +119 -0
- package/dist/agent-runtime/src/statewire-held-sends.js +191 -0
- package/dist/agent-runtime/src/statewire-held-sends.js.map +1 -0
- package/dist/agent-runtime/src/statewire-state.cjs +4 -0
- package/dist/agent-runtime/src/statewire-state.cjs.map +1 -1
- package/dist/agent-runtime/src/statewire-state.js +4 -0
- package/dist/agent-runtime/src/statewire-state.js.map +1 -1
- package/dist/agent-runtime/src/statewire-transport.cjs +8 -2
- package/dist/agent-runtime/src/statewire-transport.cjs.map +1 -1
- package/dist/agent-runtime/src/statewire-transport.d.ts +14 -5
- package/dist/agent-runtime/src/statewire-transport.js +8 -2
- package/dist/agent-runtime/src/statewire-transport.js.map +1 -1
- package/dist/agent-runtime/src/subagent-transcripts.cjs +1 -23
- package/dist/agent-runtime/src/subagent-transcripts.cjs.map +1 -1
- package/dist/agent-runtime/src/subagent-transcripts.js +3 -25
- package/dist/agent-runtime/src/subagent-transcripts.js.map +1 -1
- package/dist/agent-runtime/src/subagents.cjs +22 -29
- package/dist/agent-runtime/src/subagents.cjs.map +1 -1
- package/dist/agent-runtime/src/subagents.js +23 -30
- package/dist/agent-runtime/src/subagents.js.map +1 -1
- package/dist/agent-runtime/src/thread-extras.cjs +27 -19
- package/dist/agent-runtime/src/thread-extras.cjs.map +1 -1
- package/dist/agent-runtime/src/thread-extras.d.ts +19 -6
- package/dist/agent-runtime/src/thread-extras.js +27 -19
- package/dist/agent-runtime/src/thread-extras.js.map +1 -1
- package/dist/agent-runtime/src/thread-handoff-flow-machine.d.ts +8 -8
- package/dist/agent-runtime/src/tool-metadata.cjs +19 -0
- package/dist/agent-runtime/src/tool-metadata.cjs.map +1 -1
- package/dist/agent-runtime/src/tool-metadata.js +19 -0
- package/dist/agent-runtime/src/tool-metadata.js.map +1 -1
- package/dist/agent-runtime/src/tool-names.cjs +21 -0
- package/dist/agent-runtime/src/tool-names.cjs.map +1 -1
- package/dist/agent-runtime/src/tool-names.d.ts +8 -0
- package/dist/agent-runtime/src/tool-names.js +21 -0
- package/dist/agent-runtime/src/tool-names.js.map +1 -1
- package/dist/agent-runtime/src/typed-interrupt-kinds.cjs +247 -0
- package/dist/agent-runtime/src/typed-interrupt-kinds.cjs.map +1 -0
- package/dist/agent-runtime/src/typed-interrupt-kinds.d.ts +173 -0
- package/dist/agent-runtime/src/typed-interrupt-kinds.js +247 -0
- package/dist/agent-runtime/src/typed-interrupt-kinds.js.map +1 -0
- package/dist/agent-runtime/src/typed-interrupts.cjs +48 -0
- package/dist/agent-runtime/src/typed-interrupts.cjs.map +1 -0
- package/dist/agent-runtime/src/typed-interrupts.d.ts +75 -0
- package/dist/agent-runtime/src/typed-interrupts.js +48 -0
- package/dist/agent-runtime/src/typed-interrupts.js.map +1 -0
- package/dist/agent-runtime/src/types.d.ts +1 -1
- package/dist/agent-runtime/src/use-conversation-list.cjs +1 -0
- package/dist/agent-runtime/src/use-conversation-list.cjs.map +1 -1
- package/dist/agent-runtime/src/use-conversation-list.d.ts +7 -0
- package/dist/agent-runtime/src/use-conversation-list.js +1 -0
- package/dist/agent-runtime/src/use-conversation-list.js.map +1 -1
- package/dist/agent-runtime/src/use-deep-agent-chat-outbox.cjs +46 -29
- package/dist/agent-runtime/src/use-deep-agent-chat-outbox.cjs.map +1 -1
- package/dist/agent-runtime/src/use-deep-agent-chat-outbox.d.ts +14 -22
- package/dist/agent-runtime/src/use-deep-agent-chat-outbox.js +46 -29
- package/dist/agent-runtime/src/use-deep-agent-chat-outbox.js.map +1 -1
- package/dist/agent-runtime/src/use-deep-agent-runtime.cjs +78 -14
- package/dist/agent-runtime/src/use-deep-agent-runtime.cjs.map +1 -1
- package/dist/agent-runtime/src/use-deep-agent-runtime.d.ts +34 -7
- package/dist/agent-runtime/src/use-deep-agent-runtime.js +79 -15
- package/dist/agent-runtime/src/use-deep-agent-runtime.js.map +1 -1
- package/dist/agent-runtime/src/use-deep-agent-thread.cjs +16 -1
- package/dist/agent-runtime/src/use-deep-agent-thread.cjs.map +1 -1
- package/dist/agent-runtime/src/use-deep-agent-thread.d.ts +7 -2
- package/dist/agent-runtime/src/use-deep-agent-thread.js +16 -1
- package/dist/agent-runtime/src/use-deep-agent-thread.js.map +1 -1
- package/dist/agent-runtime/src/use-deep-agent-voice.cjs +30 -4
- package/dist/agent-runtime/src/use-deep-agent-voice.cjs.map +1 -1
- package/dist/agent-runtime/src/use-deep-agent-voice.d.ts +22 -4
- package/dist/agent-runtime/src/use-deep-agent-voice.js +30 -4
- package/dist/agent-runtime/src/use-deep-agent-voice.js.map +1 -1
- package/dist/agent-runtime/src/withdrawn-turns.d.ts +5 -4
- package/dist/agent-runtime/src/word-device-fit.d.ts +174 -0
- package/dist/agent-runtime/src/work-in.d.ts +127 -0
- package/dist/assets/AthenaAssetEmbed.cjs.map +1 -1
- package/dist/assets/AthenaAssetEmbed.d.ts +6 -1
- package/dist/assets/AthenaAssetEmbed.js.map +1 -1
- package/dist/assets/asset-panel-store.cjs +13 -5
- package/dist/assets/asset-panel-store.cjs.map +1 -1
- package/dist/assets/asset-panel-store.d.ts +33 -2
- package/dist/assets/asset-panel-store.js +13 -5
- package/dist/assets/asset-panel-store.js.map +1 -1
- package/dist/auth/AthenaCredentialSourceContext.cjs +11 -0
- package/dist/auth/AthenaCredentialSourceContext.cjs.map +1 -1
- package/dist/auth/AthenaCredentialSourceContext.d.ts +6 -0
- package/dist/auth/AthenaCredentialSourceContext.js +11 -0
- package/dist/auth/AthenaCredentialSourceContext.js.map +1 -1
- package/dist/auth/account-identity.cjs +13 -2
- package/dist/auth/account-identity.cjs.map +1 -1
- package/dist/auth/account-identity.d.ts +9 -0
- package/dist/auth/account-identity.js +13 -2
- package/dist/auth/account-identity.js.map +1 -1
- package/dist/auth/credential-source.cjs +20 -4
- package/dist/auth/credential-source.cjs.map +1 -1
- package/dist/auth/credential-source.d.ts +9 -0
- package/dist/auth/credential-source.js +20 -4
- package/dist/auth/credential-source.js.map +1 -1
- package/dist/catalog/chat-pickers.cjs +31 -0
- package/dist/catalog/chat-pickers.cjs.map +1 -1
- package/dist/catalog/chat-pickers.d.ts +17 -0
- package/dist/catalog/chat-pickers.js +33 -2
- package/dist/catalog/chat-pickers.js.map +1 -1
- package/dist/catalog/runtime-catalog.cjs +63 -3
- package/dist/catalog/runtime-catalog.cjs.map +1 -1
- package/dist/catalog/runtime-catalog.d.ts +63 -3
- package/dist/catalog/runtime-catalog.js +64 -4
- package/dist/catalog/runtime-catalog.js.map +1 -1
- package/dist/chat/AthenaChat.cjs +301 -98
- package/dist/chat/AthenaChat.cjs.map +1 -1
- package/dist/chat/AthenaChat.d.ts +80 -4
- package/dist/chat/AthenaChat.js +302 -99
- package/dist/chat/AthenaChat.js.map +1 -1
- package/dist/chat/StatewireApprovalCard.cjs +35 -5
- package/dist/chat/StatewireApprovalCard.cjs.map +1 -1
- package/dist/chat/StatewireApprovalCard.d.ts +55 -2
- package/dist/chat/StatewireApprovalCard.js +37 -7
- package/dist/chat/StatewireApprovalCard.js.map +1 -1
- package/dist/chat/StatewireQueuedMessages.cjs +17 -2
- package/dist/chat/StatewireQueuedMessages.cjs.map +1 -1
- package/dist/chat/StatewireQueuedMessages.d.ts +8 -45
- package/dist/chat/StatewireQueuedMessages.js +18 -3
- package/dist/chat/StatewireQueuedMessages.js.map +1 -1
- package/dist/chat/chat-agent-mentions.cjs +70 -0
- package/dist/chat/chat-agent-mentions.cjs.map +1 -0
- package/dist/chat/chat-agent-mentions.d.ts +13 -0
- package/dist/chat/chat-agent-mentions.js +70 -0
- package/dist/chat/chat-agent-mentions.js.map +1 -0
- package/dist/chat/composer-actions.cjs +12 -0
- package/dist/chat/composer-actions.cjs.map +1 -0
- package/dist/chat/composer-actions.d.ts +22 -0
- package/dist/chat/composer-actions.js +12 -0
- package/dist/chat/composer-actions.js.map +1 -0
- package/dist/chat/follow-up-suggestions.cjs +185 -0
- package/dist/chat/follow-up-suggestions.cjs.map +1 -0
- package/dist/chat/follow-up-suggestions.d.ts +64 -0
- package/dist/chat/follow-up-suggestions.js +185 -0
- package/dist/chat/follow-up-suggestions.js.map +1 -0
- package/dist/chat/super-grouping/ToolTimeline.cjs +4 -3
- package/dist/chat/super-grouping/ToolTimeline.cjs.map +1 -1
- package/dist/chat/super-grouping/ToolTimeline.d.ts +7 -3
- package/dist/chat/super-grouping/ToolTimeline.js +4 -3
- package/dist/chat/super-grouping/ToolTimeline.js.map +1 -1
- package/dist/chat/turn-changes.cjs +284 -0
- package/dist/chat/turn-changes.cjs.map +1 -0
- package/dist/chat/turn-changes.d.ts +130 -0
- package/dist/chat/turn-changes.js +284 -0
- package/dist/chat/turn-changes.js.map +1 -0
- package/dist/chat/typed-interrupts/StatewireTypedInterruptCard.cjs +31 -0
- package/dist/chat/typed-interrupts/StatewireTypedInterruptCard.cjs.map +1 -0
- package/dist/chat/typed-interrupts/StatewireTypedInterruptCard.d.ts +31 -0
- package/dist/chat/typed-interrupts/StatewireTypedInterruptCard.js +31 -0
- package/dist/chat/typed-interrupts/StatewireTypedInterruptCard.js.map +1 -0
- package/dist/chat/typed-interrupts/approval-cards.cjs +250 -0
- package/dist/chat/typed-interrupts/approval-cards.cjs.map +1 -0
- package/dist/chat/typed-interrupts/approval-cards.d.ts +22 -0
- package/dist/chat/typed-interrupts/approval-cards.js +250 -0
- package/dist/chat/typed-interrupts/approval-cards.js.map +1 -0
- package/dist/chat/typed-interrupts/form-cards.cjs +289 -0
- package/dist/chat/typed-interrupts/form-cards.cjs.map +1 -0
- package/dist/chat/typed-interrupts/form-cards.d.ts +6 -0
- package/dist/chat/typed-interrupts/form-cards.js +289 -0
- package/dist/chat/typed-interrupts/form-cards.js.map +1 -0
- package/dist/chat/typed-interrupts/interrupt-card-shell.cjs +182 -0
- package/dist/chat/typed-interrupts/interrupt-card-shell.cjs.map +1 -0
- package/dist/chat/typed-interrupts/interrupt-card-shell.d.ts +47 -0
- package/dist/chat/typed-interrupts/interrupt-card-shell.js +182 -0
- package/dist/chat/typed-interrupts/interrupt-card-shell.js.map +1 -0
- package/dist/chat/typed-interrupts/json-schema-form.cjs +388 -0
- package/dist/chat/typed-interrupts/json-schema-form.cjs.map +1 -0
- package/dist/chat/typed-interrupts/json-schema-form.d.ts +33 -0
- package/dist/chat/typed-interrupts/json-schema-form.js +388 -0
- package/dist/chat/typed-interrupts/json-schema-form.js.map +1 -0
- package/dist/chat/typed-interrupts/questionnaire-card.cjs +449 -0
- package/dist/chat/typed-interrupts/questionnaire-card.cjs.map +1 -0
- package/dist/chat/typed-interrupts/questionnaire-card.d.ts +20 -0
- package/dist/chat/typed-interrupts/questionnaire-card.js +449 -0
- package/dist/chat/typed-interrupts/questionnaire-card.js.map +1 -0
- package/dist/chat/typed-interrupts/request-file-card.cjs +159 -0
- package/dist/chat/typed-interrupts/request-file-card.cjs.map +1 -0
- package/dist/chat/typed-interrupts/request-file-card.d.ts +2 -0
- package/dist/chat/typed-interrupts/request-file-card.js +159 -0
- package/dist/chat/typed-interrupts/request-file-card.js.map +1 -0
- package/dist/chat/typed-interrupts/toolkit-selection-card.cjs +189 -0
- package/dist/chat/typed-interrupts/toolkit-selection-card.cjs.map +1 -0
- package/dist/chat/typed-interrupts/toolkit-selection-card.d.ts +23 -0
- package/dist/chat/typed-interrupts/toolkit-selection-card.js +189 -0
- package/dist/chat/typed-interrupts/toolkit-selection-card.js.map +1 -0
- package/dist/chat/typed-interrupts/typed-interrupt-body.cjs +26 -0
- package/dist/chat/typed-interrupts/typed-interrupt-body.cjs.map +1 -0
- package/dist/chat/typed-interrupts/typed-interrupt-body.d.ts +3 -0
- package/dist/chat/typed-interrupts/typed-interrupt-body.js +26 -0
- package/dist/chat/typed-interrupts/typed-interrupt-body.js.map +1 -0
- package/dist/chat/typed-interrupts/typed-interrupt-graphql.cjs +105 -0
- package/dist/chat/typed-interrupts/typed-interrupt-graphql.cjs.map +1 -0
- package/dist/chat/typed-interrupts/typed-interrupt-graphql.d.ts +29 -0
- package/dist/chat/typed-interrupts/typed-interrupt-graphql.js +105 -0
- package/dist/chat/typed-interrupts/typed-interrupt-graphql.js.map +1 -0
- package/dist/chat/typed-interrupts/typed-interrupt-notice.cjs +70 -0
- package/dist/chat/typed-interrupts/typed-interrupt-notice.cjs.map +1 -0
- package/dist/chat/typed-interrupts/typed-interrupt-notice.d.ts +45 -0
- package/dist/chat/typed-interrupts/typed-interrupt-notice.js +70 -0
- package/dist/chat/typed-interrupts/typed-interrupt-notice.js.map +1 -0
- package/dist/chat/typed-interrupts/typed-interrupt-panel.cjs +76 -0
- package/dist/chat/typed-interrupts/typed-interrupt-panel.cjs.map +1 -0
- package/dist/chat/typed-interrupts/typed-interrupt-panel.d.ts +11 -0
- package/dist/chat/typed-interrupts/typed-interrupt-panel.js +76 -0
- package/dist/chat/typed-interrupts/typed-interrupt-panel.js.map +1 -0
- package/dist/chat/typed-interrupts/typed-interrupt-types.d.ts +46 -0
- package/dist/chat/typed-interrupts/use-interrupt-draft.cjs +106 -0
- package/dist/chat/typed-interrupts/use-interrupt-draft.cjs.map +1 -0
- package/dist/chat/typed-interrupts/use-interrupt-draft.d.ts +29 -0
- package/dist/chat/typed-interrupts/use-interrupt-draft.js +106 -0
- package/dist/chat/typed-interrupts/use-interrupt-draft.js.map +1 -0
- package/dist/chat/typed-interrupts/use-statewire-typed-interrupt.cjs +231 -0
- package/dist/chat/typed-interrupts/use-statewire-typed-interrupt.cjs.map +1 -0
- package/dist/chat/typed-interrupts/use-statewire-typed-interrupt.d.ts +66 -0
- package/dist/chat/typed-interrupts/use-statewire-typed-interrupt.js +231 -0
- package/dist/chat/typed-interrupts/use-statewire-typed-interrupt.js.map +1 -0
- package/dist/chat-ui/composer/composer-named-agents.cjs +13 -0
- package/dist/chat-ui/composer/composer-named-agents.cjs.map +1 -0
- package/dist/chat-ui/composer/composer-named-agents.d.ts +20 -0
- package/dist/chat-ui/composer/composer-named-agents.js +13 -0
- package/dist/chat-ui/composer/composer-named-agents.js.map +1 -0
- package/dist/chat-ui/composer/slash-command-menu.cjs +143 -0
- package/dist/chat-ui/composer/slash-command-menu.cjs.map +1 -0
- package/dist/chat-ui/composer/slash-command-menu.d.ts +19 -0
- package/dist/chat-ui/composer/slash-command-menu.js +143 -0
- package/dist/chat-ui/composer/slash-command-menu.js.map +1 -0
- package/dist/chat-ui/composer/slash-commands-extension.cjs +51 -0
- package/dist/chat-ui/composer/slash-commands-extension.cjs.map +1 -0
- package/dist/chat-ui/composer/slash-commands-extension.d.ts +39 -0
- package/dist/chat-ui/composer/slash-commands-extension.js +51 -0
- package/dist/chat-ui/composer/slash-commands-extension.js.map +1 -0
- package/dist/chat-ui/composer/slash-commands.cjs +74 -0
- package/dist/chat-ui/composer/slash-commands.cjs.map +1 -0
- package/dist/chat-ui/composer/slash-commands.d.ts +82 -0
- package/dist/chat-ui/composer/slash-commands.js +74 -0
- package/dist/chat-ui/composer/slash-commands.js.map +1 -0
- package/dist/chat-ui/composer/tiptap-composer.cjs +135 -9
- package/dist/chat-ui/composer/tiptap-composer.cjs.map +1 -1
- package/dist/chat-ui/composer/tiptap-composer.d.ts +61 -2
- package/dist/chat-ui/composer/tiptap-composer.js +135 -9
- package/dist/chat-ui/composer/tiptap-composer.js.map +1 -1
- package/dist/chat-ui/index.cjs +5 -0
- package/dist/chat-ui/index.cjs.map +1 -1
- package/dist/chat-ui/index.d.ts +4 -2
- package/dist/chat-ui/index.js +5 -0
- package/dist/chat-ui/index.js.map +1 -1
- package/dist/chat-ui/mentions/mention-chip.cjs +10 -4
- package/dist/chat-ui/mentions/mention-chip.cjs.map +1 -1
- package/dist/chat-ui/mentions/mention-chip.js +11 -5
- package/dist/chat-ui/mentions/mention-chip.js.map +1 -1
- package/dist/chat-ui/mentions/mention-extension.cjs +8 -1
- package/dist/chat-ui/mentions/mention-extension.cjs.map +1 -1
- package/dist/chat-ui/mentions/mention-extension.js +8 -1
- package/dist/chat-ui/mentions/mention-extension.js.map +1 -1
- package/dist/chat-ui/mentions/suggestions/components/get-scope-name.cjs +1 -0
- package/dist/chat-ui/mentions/suggestions/components/get-scope-name.cjs.map +1 -1
- package/dist/chat-ui/mentions/suggestions/components/get-scope-name.js +1 -0
- package/dist/chat-ui/mentions/suggestions/components/get-scope-name.js.map +1 -1
- package/dist/chat-ui/mentions/suggestions/components/mention-icon.cjs +20 -2
- package/dist/chat-ui/mentions/suggestions/components/mention-icon.cjs.map +1 -1
- package/dist/chat-ui/mentions/suggestions/components/mention-icon.d.ts +10 -1
- package/dist/chat-ui/mentions/suggestions/components/mention-icon.js +22 -4
- package/dist/chat-ui/mentions/suggestions/components/mention-icon.js.map +1 -1
- package/dist/chat-ui/mentions/suggestions/components/menu-item.cjs +1 -1
- package/dist/chat-ui/mentions/suggestions/components/menu-item.cjs.map +1 -1
- package/dist/chat-ui/mentions/suggestions/components/menu-item.js +1 -1
- package/dist/chat-ui/mentions/suggestions/components/menu-item.js.map +1 -1
- package/dist/chat-ui/mentions/suggestions/data/api-client.cjs +45 -0
- package/dist/chat-ui/mentions/suggestions/data/api-client.cjs.map +1 -1
- package/dist/chat-ui/mentions/suggestions/data/api-client.d.ts +48 -0
- package/dist/chat-ui/mentions/suggestions/data/api-client.js +45 -0
- package/dist/chat-ui/mentions/suggestions/data/api-client.js.map +1 -1
- package/dist/chat-ui/mentions/suggestions/data/sources/asset-type-icon-names.generated.cjs +89 -0
- package/dist/chat-ui/mentions/suggestions/data/sources/asset-type-icon-names.generated.cjs.map +1 -0
- package/dist/chat-ui/mentions/suggestions/data/sources/asset-type-icon-names.generated.d.ts +8 -0
- package/dist/chat-ui/mentions/suggestions/data/sources/asset-type-icon-names.generated.js +89 -0
- package/dist/chat-ui/mentions/suggestions/data/sources/asset-type-icon-names.generated.js.map +1 -0
- package/dist/chat-ui/mentions/suggestions/data/sources/asset-type-icons.cjs +140 -116
- package/dist/chat-ui/mentions/suggestions/data/sources/asset-type-icons.cjs.map +1 -1
- package/dist/chat-ui/mentions/suggestions/data/sources/asset-type-icons.d.ts +46 -12
- package/dist/chat-ui/mentions/suggestions/data/sources/asset-type-icons.js +141 -117
- package/dist/chat-ui/mentions/suggestions/data/sources/asset-type-icons.js.map +1 -1
- package/dist/chat-ui/mentions/suggestions/data/sources/index.cjs +272 -25
- package/dist/chat-ui/mentions/suggestions/data/sources/index.cjs.map +1 -1
- package/dist/chat-ui/mentions/suggestions/data/sources/index.d.ts +88 -10
- package/dist/chat-ui/mentions/suggestions/data/sources/index.js +274 -27
- package/dist/chat-ui/mentions/suggestions/data/sources/index.js.map +1 -1
- package/dist/chat-ui/mentions/suggestions/data/types.cjs.map +1 -1
- package/dist/chat-ui/mentions/suggestions/data/types.d.ts +27 -1
- package/dist/chat-ui/mentions/suggestions/data/types.js.map +1 -1
- package/dist/chat-ui/mentions/suggestions/data/use-mention-suggestions.cjs +56 -5
- package/dist/chat-ui/mentions/suggestions/data/use-mention-suggestions.cjs.map +1 -1
- package/dist/chat-ui/mentions/suggestions/data/use-mention-suggestions.d.ts +26 -6
- package/dist/chat-ui/mentions/suggestions/data/use-mention-suggestions.js +57 -6
- package/dist/chat-ui/mentions/suggestions/data/use-mention-suggestions.js.map +1 -1
- package/dist/chat-ui/mentions/suggestions/mention-suggestions.extension.cjs +34 -17
- package/dist/chat-ui/mentions/suggestions/mention-suggestions.extension.cjs.map +1 -1
- package/dist/chat-ui/mentions/suggestions/mention-suggestions.extension.d.ts +19 -1
- package/dist/chat-ui/mentions/suggestions/mention-suggestions.extension.js +35 -18
- package/dist/chat-ui/mentions/suggestions/mention-suggestions.extension.js.map +1 -1
- package/dist/chat-ui/mentions/use-asset-icon-app-url.cjs +12 -0
- package/dist/chat-ui/mentions/use-asset-icon-app-url.cjs.map +1 -0
- package/dist/chat-ui/mentions/use-asset-icon-app-url.d.ts +8 -0
- package/dist/chat-ui/mentions/use-asset-icon-app-url.js +12 -0
- package/dist/chat-ui/mentions/use-asset-icon-app-url.js.map +1 -0
- package/dist/chat-ui/statewire.d.ts +1 -1
- package/dist/chat-ui/thread/statewire-history-edge.cjs +15 -0
- package/dist/chat-ui/thread/statewire-history-edge.cjs.map +1 -1
- package/dist/chat-ui/thread/statewire-history-edge.d.ts +4 -1
- package/dist/chat-ui/thread/statewire-history-edge.js +15 -0
- package/dist/chat-ui/thread/statewire-history-edge.js.map +1 -1
- package/dist/collab/client.cjs +41 -6
- package/dist/collab/client.cjs.map +1 -1
- package/dist/collab/client.d.ts +38 -7
- package/dist/collab/client.js +41 -6
- package/dist/collab/client.js.map +1 -1
- package/dist/composer/ComposerAttachedReferences.cjs +119 -0
- package/dist/composer/ComposerAttachedReferences.cjs.map +1 -0
- package/dist/composer/ComposerAttachedReferences.d.ts +26 -0
- package/dist/composer/ComposerAttachedReferences.js +119 -0
- package/dist/composer/ComposerAttachedReferences.js.map +1 -0
- package/dist/composer/ComposerNamedAgents.cjs +63 -0
- package/dist/composer/ComposerNamedAgents.cjs.map +1 -0
- package/dist/composer/ComposerNamedAgents.d.ts +16 -0
- package/dist/composer/ComposerNamedAgents.js +63 -0
- package/dist/composer/ComposerNamedAgents.js.map +1 -0
- package/dist/composer/attached-references.cjs +159 -0
- package/dist/composer/attached-references.cjs.map +1 -0
- package/dist/composer/attached-references.d.ts +86 -0
- package/dist/composer/attached-references.js +159 -0
- package/dist/composer/attached-references.js.map +1 -0
- package/dist/composer/build-composed-message.cjs +14 -7
- package/dist/composer/build-composed-message.cjs.map +1 -1
- package/dist/composer/build-composed-message.d.ts +6 -1
- package/dist/composer/build-composed-message.js +14 -7
- package/dist/composer/build-composed-message.js.map +1 -1
- package/dist/composer/composer-handoff.cjs +6 -2
- package/dist/composer/composer-handoff.cjs.map +1 -1
- package/dist/composer/composer-handoff.d.ts +7 -1
- package/dist/composer/composer-handoff.js +6 -2
- package/dist/composer/composer-handoff.js.map +1 -1
- package/dist/composer/folder-upload.cjs +149 -0
- package/dist/composer/folder-upload.cjs.map +1 -0
- package/dist/composer/folder-upload.d.ts +79 -0
- package/dist/composer/folder-upload.js +149 -0
- package/dist/composer/folder-upload.js.map +1 -0
- package/dist/composer/index.d.ts +1 -1
- package/dist/composer/staged-message-metadata.cjs +12 -0
- package/dist/composer/staged-message-metadata.cjs.map +1 -0
- package/dist/composer/staged-message-metadata.d.ts +15 -0
- package/dist/composer/staged-message-metadata.js +12 -0
- package/dist/composer/staged-message-metadata.js.map +1 -0
- package/dist/composer/useAttachToChat.cjs +35 -0
- package/dist/composer/useAttachToChat.cjs.map +1 -0
- package/dist/composer/useAttachToChat.d.ts +54 -0
- package/dist/composer/useAttachToChat.js +35 -0
- package/dist/composer/useAttachToChat.js.map +1 -0
- package/dist/composer/useAttachedReferencesComposerProps.cjs +19 -0
- package/dist/composer/useAttachedReferencesComposerProps.cjs.map +1 -0
- package/dist/composer/useAttachedReferencesComposerProps.d.ts +12 -0
- package/dist/composer/useAttachedReferencesComposerProps.js +19 -0
- package/dist/composer/useAttachedReferencesComposerProps.js.map +1 -0
- package/dist/composer/useFileUpload.cjs +95 -7
- package/dist/composer/useFileUpload.cjs.map +1 -1
- package/dist/composer/useFileUpload.d.ts +21 -2
- package/dist/composer/useFileUpload.js +95 -7
- package/dist/composer/useFileUpload.js.map +1 -1
- package/dist/data/athena-api-error.cjs +125 -0
- package/dist/data/athena-api-error.cjs.map +1 -0
- package/dist/data/athena-api-error.d.ts +96 -0
- package/dist/data/athena-api-error.js +125 -0
- package/dist/data/athena-api-error.js.map +1 -0
- package/dist/data/athena-data-client.cjs +106 -0
- package/dist/data/athena-data-client.cjs.map +1 -0
- package/dist/data/athena-data-client.d.ts +74 -0
- package/dist/data/athena-data-client.js +106 -0
- package/dist/data/athena-data-client.js.map +1 -0
- package/dist/data/athena-member.cjs +93 -0
- package/dist/data/athena-member.cjs.map +1 -0
- package/dist/data/athena-member.d.ts +125 -0
- package/dist/data/athena-member.js +93 -0
- package/dist/data/athena-member.js.map +1 -0
- package/dist/data/athena-request.cjs +460 -0
- package/dist/data/athena-request.cjs.map +1 -0
- package/dist/data/athena-request.d.ts +120 -0
- package/dist/data/athena-request.js +460 -0
- package/dist/data/athena-request.js.map +1 -0
- package/dist/data/use-athena-fetch.cjs +14 -0
- package/dist/data/use-athena-fetch.cjs.map +1 -0
- package/dist/data/use-athena-fetch.d.ts +19 -0
- package/dist/data/use-athena-fetch.js +14 -0
- package/dist/data/use-athena-fetch.js.map +1 -0
- package/dist/data/use-athena-graphql.cjs +66 -0
- package/dist/data/use-athena-graphql.cjs.map +1 -0
- package/dist/data/use-athena-graphql.d.ts +56 -0
- package/dist/data/use-athena-graphql.js +66 -0
- package/dist/data/use-athena-graphql.js.map +1 -0
- package/dist/data/use-athena-rest.cjs +33 -0
- package/dist/data/use-athena-rest.cjs.map +1 -0
- package/dist/data/use-athena-rest.d.ts +21 -0
- package/dist/data/use-athena-rest.js +33 -0
- package/dist/data/use-athena-rest.js.map +1 -0
- package/dist/data/use-semantic-query.cjs +44 -0
- package/dist/data/use-semantic-query.cjs.map +1 -0
- package/dist/data/use-semantic-query.d.ts +92 -0
- package/dist/data/use-semantic-query.js +44 -0
- package/dist/data/use-semantic-query.js.map +1 -0
- package/dist/diagnostics/athena-diagnostics.cjs.map +1 -1
- package/dist/diagnostics/athena-diagnostics.d.ts +5 -1
- package/dist/diagnostics/athena-diagnostics.js.map +1 -1
- package/dist/diagnostics/errors.cjs +7 -0
- package/dist/diagnostics/errors.cjs.map +1 -1
- package/dist/diagnostics/errors.d.ts +7 -0
- package/dist/diagnostics/errors.js +7 -0
- package/dist/diagnostics/errors.js.map +1 -1
- package/dist/index.cjs +155 -11
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.ts +72 -13
- package/dist/index.js +148 -4
- package/dist/index.js.map +1 -1
- package/dist/keryx-http/src/initial-sync.cjs +64 -16
- package/dist/keryx-http/src/initial-sync.cjs.map +1 -1
- package/dist/keryx-http/src/initial-sync.d.ts +31 -1
- package/dist/keryx-http/src/initial-sync.js +64 -16
- package/dist/keryx-http/src/initial-sync.js.map +1 -1
- package/dist/keryx-http/src/own-awareness.cjs +20 -0
- package/dist/keryx-http/src/own-awareness.cjs.map +1 -0
- package/dist/keryx-http/src/own-awareness.d.ts +50 -0
- package/dist/keryx-http/src/own-awareness.js +20 -0
- package/dist/keryx-http/src/own-awareness.js.map +1 -0
- package/dist/keryx-http/src/update-attributions.cjs +26 -1
- package/dist/keryx-http/src/update-attributions.cjs.map +1 -1
- package/dist/keryx-http/src/update-attributions.d.ts +10 -1
- package/dist/keryx-http/src/update-attributions.js +26 -1
- package/dist/keryx-http/src/update-attributions.js.map +1 -1
- package/dist/offline/chat-outbox.cjs +262 -26
- package/dist/offline/chat-outbox.cjs.map +1 -1
- package/dist/offline/chat-outbox.d.ts +90 -12
- package/dist/offline/chat-outbox.js +263 -27
- package/dist/offline/chat-outbox.js.map +1 -1
- package/dist/provider/AthenaProvider.cjs +60 -22
- package/dist/provider/AthenaProvider.cjs.map +1 -1
- package/dist/provider/AthenaProvider.d.ts +24 -8
- package/dist/provider/AthenaProvider.js +61 -23
- package/dist/provider/AthenaProvider.js.map +1 -1
- package/dist/react/package.json.cjs +1 -1
- package/dist/react/package.json.js +1 -1
- package/dist/references/src/anchors/parse.cjs +11 -1
- package/dist/references/src/anchors/parse.cjs.map +1 -1
- package/dist/references/src/anchors/parse.js +11 -1
- package/dist/references/src/anchors/parse.js.map +1 -1
- package/dist/references/src/anchors/schemas.d.ts +1 -0
- package/dist/references/src/anchors/serialize.cjs +1 -0
- package/dist/references/src/anchors/serialize.cjs.map +1 -1
- package/dist/references/src/anchors/serialize.js +1 -0
- package/dist/references/src/anchors/serialize.js.map +1 -1
- package/dist/references/src/anchors/types.cjs +5 -0
- package/dist/references/src/anchors/types.cjs.map +1 -1
- package/dist/references/src/anchors/types.d.ts +9 -0
- package/dist/references/src/anchors/types.js +5 -0
- package/dist/references/src/anchors/types.js.map +1 -1
- package/dist/references/src/attachable.cjs +149 -0
- package/dist/references/src/attachable.cjs.map +1 -0
- package/dist/references/src/attachable.d.ts +87 -0
- package/dist/references/src/attachable.js +149 -0
- package/dist/references/src/attachable.js.map +1 -0
- package/dist/references/src/schemas.d.ts +2 -0
- package/dist/runtime/StatewirePlanModeLaneSync.cjs +93 -0
- package/dist/runtime/StatewirePlanModeLaneSync.cjs.map +1 -0
- package/dist/runtime/StatewirePlanModeLaneSync.d.ts +34 -0
- package/dist/runtime/StatewirePlanModeLaneSync.js +93 -0
- package/dist/runtime/StatewirePlanModeLaneSync.js.map +1 -0
- package/dist/runtime/StatewireThreadConfigLaneSync.cjs +2 -0
- package/dist/runtime/StatewireThreadConfigLaneSync.cjs.map +1 -1
- package/dist/runtime/StatewireThreadConfigLaneSync.d.ts +4 -0
- package/dist/runtime/StatewireThreadConfigLaneSync.js +2 -0
- package/dist/runtime/StatewireThreadConfigLaneSync.js.map +1 -1
- package/dist/runtime/statewire-plan-mode.cjs +71 -0
- package/dist/runtime/statewire-plan-mode.cjs.map +1 -0
- package/dist/runtime/statewire-plan-mode.d.ts +88 -0
- package/dist/runtime/statewire-plan-mode.js +71 -0
- package/dist/runtime/statewire-plan-mode.js.map +1 -0
- package/dist/runtime/statewire-run-config.cjs +3 -1
- package/dist/runtime/statewire-run-config.cjs.map +1 -1
- package/dist/runtime/statewire-run-config.d.ts +7 -0
- package/dist/runtime/statewire-run-config.js +3 -1
- package/dist/runtime/statewire-run-config.js.map +1 -1
- package/dist/runtime/statewire-session-key.cjs +11 -5
- package/dist/runtime/statewire-session-key.cjs.map +1 -1
- package/dist/runtime/statewire-session-key.d.ts +22 -10
- package/dist/runtime/statewire-session-key.js +11 -5
- package/dist/runtime/statewire-session-key.js.map +1 -1
- package/dist/runtime/useAthenaStatewireRuntime.cjs +64 -9
- package/dist/runtime/useAthenaStatewireRuntime.cjs.map +1 -1
- package/dist/runtime/useAthenaStatewireRuntime.d.ts +26 -10
- package/dist/runtime/useAthenaStatewireRuntime.js +66 -11
- package/dist/runtime/useAthenaStatewireRuntime.js.map +1 -1
- package/dist/search/useAthenaAssets.cjs +394 -0
- package/dist/search/useAthenaAssets.cjs.map +1 -0
- package/dist/search/useAthenaAssets.d.ts +186 -0
- package/dist/search/useAthenaAssets.js +394 -0
- package/dist/search/useAthenaAssets.js.map +1 -0
- package/dist/sheet-range/index.cjs +4 -0
- package/dist/sheet-range/index.cjs.map +1 -1
- package/dist/sheet-range/index.d.ts +4 -2
- package/dist/sheet-range/index.js +4 -0
- package/dist/sheet-range/index.js.map +1 -1
- package/dist/sheet-range/query-range.cjs +102 -0
- package/dist/sheet-range/query-range.cjs.map +1 -0
- package/dist/sheet-range/query-range.d.ts +46 -0
- package/dist/sheet-range/query-range.js +102 -0
- package/dist/sheet-range/query-range.js.map +1 -0
- package/dist/styles.css +1 -1
- package/dist/subagents/index.cjs +49 -0
- package/dist/subagents/index.cjs.map +1 -0
- package/dist/subagents/index.d.ts +16 -0
- package/dist/subagents/index.js +49 -0
- package/dist/subagents/index.js.map +1 -0
- package/dist/subagents/lane-follow.cjs +19 -0
- package/dist/subagents/lane-follow.cjs.map +1 -0
- package/dist/subagents/lane-follow.d.ts +9 -0
- package/dist/subagents/lane-follow.js +19 -0
- package/dist/subagents/lane-follow.js.map +1 -0
- package/dist/subagents/lane-model.cjs +178 -0
- package/dist/subagents/lane-model.cjs.map +1 -0
- package/dist/subagents/lane-model.d.ts +140 -0
- package/dist/subagents/lane-model.js +178 -0
- package/dist/subagents/lane-model.js.map +1 -0
- package/dist/subagents/lane-parts.cjs +517 -0
- package/dist/subagents/lane-parts.cjs.map +1 -0
- package/dist/subagents/lane-parts.d.ts +130 -0
- package/dist/subagents/lane-parts.js +517 -0
- package/dist/subagents/lane-parts.js.map +1 -0
- package/dist/subagents/subagent-lane-group.cjs +215 -0
- package/dist/subagents/subagent-lane-group.cjs.map +1 -0
- package/dist/subagents/subagent-lane-group.d.ts +67 -0
- package/dist/subagents/subagent-lane-group.js +215 -0
- package/dist/subagents/subagent-lane-group.js.map +1 -0
- package/dist/subagents/subagent-transcript-drawer.cjs +431 -0
- package/dist/subagents/subagent-transcript-drawer.cjs.map +1 -0
- package/dist/subagents/subagent-transcript-drawer.d.ts +78 -0
- package/dist/subagents/subagent-transcript-drawer.js +431 -0
- package/dist/subagents/subagent-transcript-drawer.js.map +1 -0
- package/dist/subagents/task-subagent-group.cjs +115 -0
- package/dist/subagents/task-subagent-group.cjs.map +1 -0
- package/dist/subagents/task-subagent-group.d.ts +36 -0
- package/dist/subagents/task-subagent-group.js +115 -0
- package/dist/subagents/task-subagent-group.js.map +1 -0
- package/dist/subagents/use-omitted-images-in-view.cjs +68 -0
- package/dist/subagents/use-omitted-images-in-view.cjs.map +1 -0
- package/dist/subagents/use-omitted-images-in-view.d.ts +21 -0
- package/dist/subagents/use-omitted-images-in-view.js +68 -0
- package/dist/subagents/use-omitted-images-in-view.js.map +1 -0
- package/dist/threads/Inbox.cjs +2 -2
- package/dist/threads/Inbox.cjs.map +1 -1
- package/dist/threads/SessionList.cjs +6 -6
- package/dist/threads/SessionList.cjs.map +1 -1
- package/dist/threads/SessionsPage.cjs +13 -7
- package/dist/threads/SessionsPage.cjs.map +1 -1
- package/dist/threads/SessionsPage.d.ts +10 -1
- package/dist/threads/SessionsPage.js +9 -3
- package/dist/threads/SessionsPage.js.map +1 -1
- package/dist/threads/session-list-model.cjs.map +1 -1
- package/dist/threads/session-list-model.d.ts +2 -1
- package/dist/threads/session-list-model.js.map +1 -1
- package/dist/threads/session-row-parts.cjs +3 -3
- package/dist/threads/session-row-parts.cjs.map +1 -1
- package/dist/threads/sessions-page-model.cjs +13 -5
- package/dist/threads/sessions-page-model.cjs.map +1 -1
- package/dist/threads/sessions-page-model.d.ts +7 -0
- package/dist/threads/sessions-page-model.js +11 -3
- package/dist/threads/sessions-page-model.js.map +1 -1
- package/dist/threads/sessions-page-storage.cjs +8 -8
- package/dist/threads/sessions-page-storage.cjs.map +1 -1
- package/dist/threads/sessions-page-storage.d.ts +5 -1
- package/dist/threads/sessions-page-storage.js +8 -8
- package/dist/threads/sessions-page-storage.js.map +1 -1
- package/dist/threads/statewire-thread-list.cjs +14 -2
- package/dist/threads/statewire-thread-list.cjs.map +1 -1
- package/dist/threads/statewire-thread-list.d.ts +11 -2
- package/dist/threads/statewire-thread-list.js +14 -2
- package/dist/threads/statewire-thread-list.js.map +1 -1
- package/dist/threads/use-athena-sessions.cjs +1 -0
- package/dist/threads/use-athena-sessions.cjs.map +1 -1
- package/dist/threads/use-athena-sessions.d.ts +7 -0
- package/dist/threads/use-athena-sessions.js +1 -0
- package/dist/threads/use-athena-sessions.js.map +1 -1
- package/dist/threads/use-athena-thread-agent.cjs +31 -0
- package/dist/threads/use-athena-thread-agent.cjs.map +1 -0
- package/dist/threads/use-athena-thread-agent.d.ts +38 -0
- package/dist/threads/use-athena-thread-agent.js +31 -0
- package/dist/threads/use-athena-thread-agent.js.map +1 -0
- package/dist/threads/use-athena-thread-plan-mode.cjs +18 -0
- package/dist/threads/use-athena-thread-plan-mode.cjs.map +1 -0
- package/dist/threads/use-athena-thread-plan-mode.d.ts +18 -0
- package/dist/threads/use-athena-thread-plan-mode.js +18 -0
- package/dist/threads/use-athena-thread-plan-mode.js.map +1 -0
- package/dist/threads/use-rest-conversation-history.d.ts +1 -0
- package/dist/tools/agent-creations.cjs +97 -0
- package/dist/tools/agent-creations.cjs.map +1 -0
- package/dist/tools/agent-creations.d.ts +38 -0
- package/dist/tools/agent-creations.js +97 -0
- package/dist/tools/agent-creations.js.map +1 -0
- package/dist/tools/agent-highlights.cjs +100 -0
- package/dist/tools/agent-highlights.cjs.map +1 -0
- package/dist/tools/agent-highlights.d.ts +57 -0
- package/dist/tools/agent-highlights.js +100 -0
- package/dist/tools/agent-highlights.js.map +1 -0
- package/dist/tools/append-document-tool-ui.cjs +1 -0
- package/dist/tools/append-document-tool-ui.cjs.map +1 -1
- package/dist/tools/append-document-tool-ui.d.ts +7 -0
- package/dist/tools/append-document-tool-ui.js +2 -1
- package/dist/tools/append-document-tool-ui.js.map +1 -1
- package/dist/tools/auto-open-tools.cjs +144 -71
- package/dist/tools/auto-open-tools.cjs.map +1 -1
- package/dist/tools/auto-open-tools.d.ts +131 -1
- package/dist/tools/auto-open-tools.js +145 -72
- package/dist/tools/auto-open-tools.js.map +1 -1
- package/dist/tools/browser-tool-uis.cjs +594 -0
- package/dist/tools/browser-tool-uis.cjs.map +1 -0
- package/dist/tools/browser-tool-uis.d.ts +8 -0
- package/dist/tools/browser-tool-uis.js +594 -0
- package/dist/tools/browser-tool-uis.js.map +1 -0
- package/dist/tools/computer-asset-tool-uis.cjs +313 -0
- package/dist/tools/computer-asset-tool-uis.cjs.map +1 -0
- package/dist/tools/computer-asset-tool-uis.d.ts +5 -0
- package/dist/tools/computer-asset-tool-uis.js +313 -0
- package/dist/tools/computer-asset-tool-uis.js.map +1 -0
- package/dist/tools/document-edit-tool-uis.cjs +218 -0
- package/dist/tools/document-edit-tool-uis.cjs.map +1 -0
- package/dist/tools/document-edit-tool-uis.d.ts +40 -0
- package/dist/tools/document-edit-tool-uis.js +218 -0
- package/dist/tools/document-edit-tool-uis.js.map +1 -0
- package/dist/tools/drive-tool-uis.cjs +429 -0
- package/dist/tools/drive-tool-uis.cjs.map +1 -0
- package/dist/tools/drive-tool-uis.d.ts +121 -0
- package/dist/tools/drive-tool-uis.js +429 -0
- package/dist/tools/drive-tool-uis.js.map +1 -0
- package/dist/tools/email-calendar-tool-uis.cjs +789 -0
- package/dist/tools/email-calendar-tool-uis.cjs.map +1 -0
- package/dist/tools/email-calendar-tool-uis.d.ts +129 -0
- package/dist/tools/email-calendar-tool-uis.js +789 -0
- package/dist/tools/email-calendar-tool-uis.js.map +1 -0
- package/dist/tools/ontology-tool-uis.cjs +83 -0
- package/dist/tools/ontology-tool-uis.cjs.map +1 -0
- package/dist/tools/ontology-tool-uis.d.ts +9 -0
- package/dist/tools/ontology-tool-uis.js +83 -0
- package/dist/tools/ontology-tool-uis.js.map +1 -0
- package/dist/tools/orchestration-tool-uis.cjs +586 -0
- package/dist/tools/orchestration-tool-uis.cjs.map +1 -0
- package/dist/tools/orchestration-tool-uis.d.ts +141 -0
- package/dist/tools/orchestration-tool-uis.js +586 -0
- package/dist/tools/orchestration-tool-uis.js.map +1 -0
- package/dist/tools/presentation-edit-tool-uis.cjs +516 -0
- package/dist/tools/presentation-edit-tool-uis.cjs.map +1 -0
- package/dist/tools/presentation-edit-tool-uis.d.ts +73 -0
- package/dist/tools/presentation-edit-tool-uis.js +516 -0
- package/dist/tools/presentation-edit-tool-uis.js.map +1 -0
- package/dist/tools/project-tool-uis.cjs +213 -0
- package/dist/tools/project-tool-uis.cjs.map +1 -0
- package/dist/tools/project-tool-uis.d.ts +14 -0
- package/dist/tools/project-tool-uis.js +213 -0
- package/dist/tools/project-tool-uis.js.map +1 -0
- package/dist/tools/sandbox-tool-uis.cjs +491 -0
- package/dist/tools/sandbox-tool-uis.cjs.map +1 -0
- package/dist/tools/sandbox-tool-uis.d.ts +116 -0
- package/dist/tools/sandbox-tool-uis.js +491 -0
- package/dist/tools/sandbox-tool-uis.js.map +1 -0
- package/dist/tools/sheet-query-tool-ui.cjs +138 -0
- package/dist/tools/sheet-query-tool-ui.cjs.map +1 -0
- package/dist/tools/sheet-query-tool-ui.d.ts +15 -0
- package/dist/tools/sheet-query-tool-ui.js +138 -0
- package/dist/tools/sheet-query-tool-ui.js.map +1 -0
- package/dist/tools/studio-screenshot-tool-uis.cjs +262 -0
- package/dist/tools/studio-screenshot-tool-uis.cjs.map +1 -0
- package/dist/tools/studio-screenshot-tool-uis.d.ts +52 -0
- package/dist/tools/studio-screenshot-tool-uis.js +262 -0
- package/dist/tools/studio-screenshot-tool-uis.js.map +1 -0
- package/dist/tools/subagent-task-tool-ui.cjs +24 -475
- package/dist/tools/subagent-task-tool-ui.cjs.map +1 -1
- package/dist/tools/subagent-task-tool-ui.d.ts +19 -103
- package/dist/tools/subagent-task-tool-ui.js +28 -479
- package/dist/tools/subagent-task-tool-ui.js.map +1 -1
- package/dist/tools/tool-summary.cjs +36 -0
- package/dist/tools/tool-summary.cjs.map +1 -1
- package/dist/tools/tool-summary.js +36 -0
- package/dist/tools/tool-summary.js.map +1 -1
- package/dist/tools/tool-uis.cjs +181 -53
- package/dist/tools/tool-uis.cjs.map +1 -1
- package/dist/tools/tool-uis.d.ts +40 -0
- package/dist/tools/tool-uis.js +183 -55
- package/dist/tools/tool-uis.js.map +1 -1
- package/dist/typed-interrupts/index.cjs +15 -0
- package/dist/typed-interrupts/index.cjs.map +1 -0
- package/dist/typed-interrupts/index.d.ts +20 -0
- package/dist/typed-interrupts/index.js +15 -0
- package/dist/typed-interrupts/index.js.map +1 -0
- package/dist/version.cjs +4 -0
- package/dist/version.cjs.map +1 -1
- package/dist/version.d.ts +9 -0
- package/dist/version.js +4 -0
- package/dist/version.js.map +1 -1
- package/dist/workbench/live-desktop-api.cjs +2 -1
- package/dist/workbench/live-desktop-api.cjs.map +1 -1
- package/dist/workbench/live-desktop-api.js +2 -1
- package/dist/workbench/live-desktop-api.js.map +1 -1
- package/dist/workbench/session-workbench-panes.cjs +6 -6
- package/dist/workbench/session-workbench-panes.cjs.map +1 -1
- package/dist/workbench/session-workspace-api.cjs +7 -2
- package/dist/workbench/session-workspace-api.cjs.map +1 -1
- package/dist/workbench/session-workspace-api.d.ts +10 -0
- package/dist/workbench/session-workspace-api.js +7 -2
- package/dist/workbench/session-workspace-api.js.map +1 -1
- package/package.json +28 -6
- package/dist/agent-runtime/src/chat-outbox-store.cjs +0 -510
- package/dist/agent-runtime/src/chat-outbox-store.cjs.map +0 -1
- package/dist/agent-runtime/src/chat-outbox-store.d.ts +0 -210
- package/dist/agent-runtime/src/chat-outbox-store.js +0 -510
- package/dist/agent-runtime/src/chat-outbox-store.js.map +0 -1
|
@@ -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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"}
|