@athenaintel/react 0.57.2 → 0.59.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +759 -9
- package/dist/agent-runtime/src/addressed-agents.cjs +16 -0
- package/dist/agent-runtime/src/addressed-agents.cjs.map +1 -0
- package/dist/agent-runtime/src/addressed-agents.d.ts +30 -0
- package/dist/agent-runtime/src/addressed-agents.js +16 -0
- package/dist/agent-runtime/src/addressed-agents.js.map +1 -0
- package/dist/agent-runtime/src/answer-label.cjs +4 -3
- package/dist/agent-runtime/src/answer-label.cjs.map +1 -1
- package/dist/agent-runtime/src/answer-label.d.ts +13 -6
- package/dist/agent-runtime/src/answer-label.js +4 -3
- package/dist/agent-runtime/src/answer-label.js.map +1 -1
- package/dist/agent-runtime/src/chat-outbox-attachments.cjs.map +1 -1
- package/dist/agent-runtime/src/chat-outbox-attachments.d.ts +1 -1
- package/dist/agent-runtime/src/chat-outbox-attachments.js.map +1 -1
- package/dist/agent-runtime/src/chat-outbox-entry.cjs +101 -0
- package/dist/agent-runtime/src/chat-outbox-entry.cjs.map +1 -0
- package/dist/agent-runtime/src/chat-outbox-entry.d.ts +99 -0
- package/dist/agent-runtime/src/chat-outbox-entry.js +101 -0
- package/dist/agent-runtime/src/chat-outbox-entry.js.map +1 -0
- package/dist/agent-runtime/src/chat-outbox-legacy.cjs +252 -0
- package/dist/agent-runtime/src/chat-outbox-legacy.cjs.map +1 -0
- package/dist/agent-runtime/src/chat-outbox-legacy.d.ts +96 -0
- package/dist/agent-runtime/src/chat-outbox-legacy.js +252 -0
- package/dist/agent-runtime/src/chat-outbox-legacy.js.map +1 -0
- package/dist/agent-runtime/src/chat-outbox-policy.cjs +30 -0
- package/dist/agent-runtime/src/chat-outbox-policy.cjs.map +1 -0
- package/dist/agent-runtime/src/chat-outbox-policy.d.ts +42 -0
- package/dist/agent-runtime/src/chat-outbox-policy.js +30 -0
- package/dist/agent-runtime/src/chat-outbox-policy.js.map +1 -0
- package/dist/agent-runtime/src/chat-outbox-storage.cjs +306 -0
- package/dist/agent-runtime/src/chat-outbox-storage.cjs.map +1 -0
- package/dist/agent-runtime/src/chat-outbox-storage.d.ts +194 -0
- package/dist/agent-runtime/src/chat-outbox-storage.js +306 -0
- package/dist/agent-runtime/src/chat-outbox-storage.js.map +1 -0
- package/dist/agent-runtime/src/chat-outbox-thread.cjs +21 -94
- package/dist/agent-runtime/src/chat-outbox-thread.cjs.map +1 -1
- package/dist/agent-runtime/src/chat-outbox-thread.d.ts +22 -18
- package/dist/agent-runtime/src/chat-outbox-thread.js +21 -94
- package/dist/agent-runtime/src/chat-outbox-thread.js.map +1 -1
- package/dist/agent-runtime/src/chat-outbox.cjs +492 -547
- package/dist/agent-runtime/src/chat-outbox.cjs.map +1 -1
- package/dist/agent-runtime/src/chat-outbox.d.ts +110 -142
- package/dist/agent-runtime/src/chat-outbox.js +492 -547
- package/dist/agent-runtime/src/chat-outbox.js.map +1 -1
- package/dist/agent-runtime/src/composer-markdown.cjs.map +1 -1
- package/dist/agent-runtime/src/composer-markdown.d.ts +1 -1
- package/dist/agent-runtime/src/composer-markdown.js.map +1 -1
- package/dist/agent-runtime/src/deep-agent-transport-recipe.cjs +3 -1
- package/dist/agent-runtime/src/deep-agent-transport-recipe.cjs.map +1 -1
- package/dist/agent-runtime/src/deep-agent-transport-recipe.d.ts +8 -1
- package/dist/agent-runtime/src/deep-agent-transport-recipe.js +3 -1
- package/dist/agent-runtime/src/deep-agent-transport-recipe.js.map +1 -1
- package/dist/agent-runtime/src/dictation-preferences.d.ts +356 -0
- package/dist/agent-runtime/src/dictation-record.d.ts +279 -0
- package/dist/agent-runtime/src/dictation-session.d.ts +106 -7
- package/dist/agent-runtime/src/dictation-snippets.d.ts +9 -0
- package/dist/agent-runtime/src/dictation-transfer.d.ts +142 -0
- package/dist/agent-runtime/src/edit-command.cjs.map +1 -1
- package/dist/agent-runtime/src/edit-command.d.ts +1 -1
- package/dist/agent-runtime/src/edit-command.js.map +1 -1
- package/dist/agent-runtime/src/errors.cjs +1 -0
- package/dist/agent-runtime/src/errors.cjs.map +1 -1
- package/dist/agent-runtime/src/errors.js +1 -0
- package/dist/agent-runtime/src/errors.js.map +1 -1
- package/dist/agent-runtime/src/generated/runconfig-contract.cjs +24 -0
- package/dist/agent-runtime/src/generated/runconfig-contract.cjs.map +1 -1
- package/dist/agent-runtime/src/generated/runconfig-contract.d.ts +3 -3
- package/dist/agent-runtime/src/generated/runconfig-contract.js +24 -0
- package/dist/agent-runtime/src/generated/runconfig-contract.js.map +1 -1
- package/dist/agent-runtime/src/index.d.ts +14 -8
- package/dist/agent-runtime/src/lane-follow.cjs +289 -0
- package/dist/agent-runtime/src/lane-follow.cjs.map +1 -0
- package/dist/agent-runtime/src/lane-follow.js +289 -0
- package/dist/agent-runtime/src/lane-follow.js.map +1 -0
- package/dist/agent-runtime/src/lane-images.cjs +387 -0
- package/dist/agent-runtime/src/lane-images.cjs.map +1 -0
- package/dist/agent-runtime/src/lane-images.js +387 -0
- package/dist/agent-runtime/src/lane-images.js.map +1 -0
- package/dist/agent-runtime/src/message-window.js +1 -1
- package/dist/agent-runtime/src/messages.cjs +19 -1
- package/dist/agent-runtime/src/messages.cjs.map +1 -1
- package/dist/agent-runtime/src/messages.d.ts +8 -0
- package/dist/agent-runtime/src/messages.js +21 -3
- package/dist/agent-runtime/src/messages.js.map +1 -1
- package/dist/agent-runtime/src/named-agents.cjs +301 -0
- package/dist/agent-runtime/src/named-agents.cjs.map +1 -0
- package/dist/agent-runtime/src/named-agents.d.ts +246 -0
- package/dist/agent-runtime/src/named-agents.js +301 -0
- package/dist/agent-runtime/src/named-agents.js.map +1 -0
- package/dist/agent-runtime/src/offline-status.cjs.map +1 -1
- package/dist/agent-runtime/src/offline-status.d.ts +66 -2
- package/dist/agent-runtime/src/offline-status.js.map +1 -1
- package/dist/agent-runtime/src/ptc-subcalls.cjs +41 -0
- package/dist/agent-runtime/src/ptc-subcalls.cjs.map +1 -0
- package/dist/agent-runtime/src/ptc-subcalls.js +41 -0
- package/dist/agent-runtime/src/ptc-subcalls.js.map +1 -0
- package/dist/agent-runtime/src/queue.cjs +2 -2
- package/dist/agent-runtime/src/queue.cjs.map +1 -1
- package/dist/agent-runtime/src/queue.d.ts +20 -25
- package/dist/agent-runtime/src/queue.js +2 -2
- package/dist/agent-runtime/src/queue.js.map +1 -1
- package/dist/agent-runtime/src/quota-safe-local-storage-session.cjs +314 -84
- package/dist/agent-runtime/src/quota-safe-local-storage-session.cjs.map +1 -1
- package/dist/agent-runtime/src/quota-safe-local-storage-session.d.ts +137 -40
- package/dist/agent-runtime/src/quota-safe-local-storage-session.js +318 -88
- package/dist/agent-runtime/src/quota-safe-local-storage-session.js.map +1 -1
- package/dist/agent-runtime/src/run-send.cjs +54 -0
- package/dist/agent-runtime/src/run-send.cjs.map +1 -0
- package/dist/agent-runtime/src/run-send.d.ts +51 -0
- package/dist/agent-runtime/src/run-send.js +54 -0
- package/dist/agent-runtime/src/run-send.js.map +1 -0
- package/dist/agent-runtime/src/running-tool-placeholder.cjs +6 -0
- package/dist/agent-runtime/src/running-tool-placeholder.cjs.map +1 -1
- package/dist/agent-runtime/src/running-tool-placeholder.js +6 -0
- package/dist/agent-runtime/src/running-tool-placeholder.js.map +1 -1
- package/dist/agent-runtime/src/runtime.d.ts +9 -5
- package/dist/agent-runtime/src/sealed-idb.cjs +64 -0
- package/dist/agent-runtime/src/sealed-idb.cjs.map +1 -1
- package/dist/agent-runtime/src/sealed-idb.d.ts +16 -0
- package/dist/agent-runtime/src/sealed-idb.js +64 -0
- package/dist/agent-runtime/src/sealed-idb.js.map +1 -1
- package/dist/agent-runtime/src/send-recovery.cjs +90 -118
- package/dist/agent-runtime/src/send-recovery.cjs.map +1 -1
- package/dist/agent-runtime/src/send-recovery.d.ts +25 -29
- package/dist/agent-runtime/src/send-recovery.js +90 -118
- package/dist/agent-runtime/src/send-recovery.js.map +1 -1
- package/dist/agent-runtime/src/statewire-diagnostics.d.ts +4 -1
- package/dist/agent-runtime/src/statewire-held-sends.cjs +191 -0
- package/dist/agent-runtime/src/statewire-held-sends.cjs.map +1 -0
- package/dist/agent-runtime/src/statewire-held-sends.d.ts +119 -0
- package/dist/agent-runtime/src/statewire-held-sends.js +191 -0
- package/dist/agent-runtime/src/statewire-held-sends.js.map +1 -0
- package/dist/agent-runtime/src/statewire-state.cjs +4 -0
- package/dist/agent-runtime/src/statewire-state.cjs.map +1 -1
- package/dist/agent-runtime/src/statewire-state.js +4 -0
- package/dist/agent-runtime/src/statewire-state.js.map +1 -1
- package/dist/agent-runtime/src/statewire-transport.cjs +8 -2
- package/dist/agent-runtime/src/statewire-transport.cjs.map +1 -1
- package/dist/agent-runtime/src/statewire-transport.d.ts +14 -5
- package/dist/agent-runtime/src/statewire-transport.js +8 -2
- package/dist/agent-runtime/src/statewire-transport.js.map +1 -1
- package/dist/agent-runtime/src/subagent-transcripts.cjs +1 -23
- package/dist/agent-runtime/src/subagent-transcripts.cjs.map +1 -1
- package/dist/agent-runtime/src/subagent-transcripts.js +3 -25
- package/dist/agent-runtime/src/subagent-transcripts.js.map +1 -1
- package/dist/agent-runtime/src/subagents.cjs +22 -29
- package/dist/agent-runtime/src/subagents.cjs.map +1 -1
- package/dist/agent-runtime/src/subagents.js +23 -30
- package/dist/agent-runtime/src/subagents.js.map +1 -1
- package/dist/agent-runtime/src/thread-extras.cjs +27 -19
- package/dist/agent-runtime/src/thread-extras.cjs.map +1 -1
- package/dist/agent-runtime/src/thread-extras.d.ts +19 -6
- package/dist/agent-runtime/src/thread-extras.js +27 -19
- package/dist/agent-runtime/src/thread-extras.js.map +1 -1
- package/dist/agent-runtime/src/thread-handoff-flow-machine.d.ts +8 -8
- package/dist/agent-runtime/src/tool-metadata.cjs +12 -0
- package/dist/agent-runtime/src/tool-metadata.cjs.map +1 -1
- package/dist/agent-runtime/src/tool-metadata.js +12 -0
- package/dist/agent-runtime/src/tool-metadata.js.map +1 -1
- package/dist/agent-runtime/src/tool-names.cjs +21 -0
- package/dist/agent-runtime/src/tool-names.cjs.map +1 -1
- package/dist/agent-runtime/src/tool-names.d.ts +8 -0
- package/dist/agent-runtime/src/tool-names.js +21 -0
- package/dist/agent-runtime/src/tool-names.js.map +1 -1
- package/dist/agent-runtime/src/typed-interrupt-kinds.cjs +247 -0
- package/dist/agent-runtime/src/typed-interrupt-kinds.cjs.map +1 -0
- package/dist/agent-runtime/src/typed-interrupt-kinds.d.ts +173 -0
- package/dist/agent-runtime/src/typed-interrupt-kinds.js +247 -0
- package/dist/agent-runtime/src/typed-interrupt-kinds.js.map +1 -0
- package/dist/agent-runtime/src/typed-interrupts.cjs +48 -0
- package/dist/agent-runtime/src/typed-interrupts.cjs.map +1 -0
- package/dist/agent-runtime/src/typed-interrupts.d.ts +75 -0
- package/dist/agent-runtime/src/typed-interrupts.js +48 -0
- package/dist/agent-runtime/src/typed-interrupts.js.map +1 -0
- package/dist/agent-runtime/src/types.d.ts +1 -1
- package/dist/agent-runtime/src/use-conversation-list.cjs +1 -0
- package/dist/agent-runtime/src/use-conversation-list.cjs.map +1 -1
- package/dist/agent-runtime/src/use-conversation-list.d.ts +7 -0
- package/dist/agent-runtime/src/use-conversation-list.js +1 -0
- package/dist/agent-runtime/src/use-conversation-list.js.map +1 -1
- package/dist/agent-runtime/src/use-deep-agent-chat-outbox.cjs +46 -29
- package/dist/agent-runtime/src/use-deep-agent-chat-outbox.cjs.map +1 -1
- package/dist/agent-runtime/src/use-deep-agent-chat-outbox.d.ts +14 -22
- package/dist/agent-runtime/src/use-deep-agent-chat-outbox.js +46 -29
- package/dist/agent-runtime/src/use-deep-agent-chat-outbox.js.map +1 -1
- package/dist/agent-runtime/src/use-deep-agent-runtime.cjs +78 -14
- package/dist/agent-runtime/src/use-deep-agent-runtime.cjs.map +1 -1
- package/dist/agent-runtime/src/use-deep-agent-runtime.d.ts +34 -7
- package/dist/agent-runtime/src/use-deep-agent-runtime.js +79 -15
- package/dist/agent-runtime/src/use-deep-agent-runtime.js.map +1 -1
- package/dist/agent-runtime/src/use-deep-agent-thread.cjs +16 -1
- package/dist/agent-runtime/src/use-deep-agent-thread.cjs.map +1 -1
- package/dist/agent-runtime/src/use-deep-agent-thread.d.ts +7 -2
- package/dist/agent-runtime/src/use-deep-agent-thread.js +16 -1
- package/dist/agent-runtime/src/use-deep-agent-thread.js.map +1 -1
- package/dist/agent-runtime/src/use-deep-agent-voice.cjs +30 -4
- package/dist/agent-runtime/src/use-deep-agent-voice.cjs.map +1 -1
- package/dist/agent-runtime/src/use-deep-agent-voice.d.ts +22 -4
- package/dist/agent-runtime/src/use-deep-agent-voice.js +30 -4
- package/dist/agent-runtime/src/use-deep-agent-voice.js.map +1 -1
- package/dist/agent-runtime/src/withdrawn-turns.d.ts +5 -4
- package/dist/agent-runtime/src/word-device-fit.d.ts +174 -0
- package/dist/agent-runtime/src/work-in.d.ts +127 -0
- package/dist/assets/AthenaAssetEmbed.cjs.map +1 -1
- package/dist/assets/AthenaAssetEmbed.d.ts +6 -1
- package/dist/assets/AthenaAssetEmbed.js.map +1 -1
- package/dist/assets/asset-panel-store.cjs +13 -5
- package/dist/assets/asset-panel-store.cjs.map +1 -1
- package/dist/assets/asset-panel-store.d.ts +33 -2
- package/dist/assets/asset-panel-store.js +13 -5
- package/dist/assets/asset-panel-store.js.map +1 -1
- package/dist/auth/AthenaCredentialSourceContext.cjs +11 -0
- package/dist/auth/AthenaCredentialSourceContext.cjs.map +1 -1
- package/dist/auth/AthenaCredentialSourceContext.d.ts +6 -0
- package/dist/auth/AthenaCredentialSourceContext.js +11 -0
- package/dist/auth/AthenaCredentialSourceContext.js.map +1 -1
- package/dist/auth/account-identity.cjs +13 -2
- package/dist/auth/account-identity.cjs.map +1 -1
- package/dist/auth/account-identity.d.ts +9 -0
- package/dist/auth/account-identity.js +13 -2
- package/dist/auth/account-identity.js.map +1 -1
- package/dist/auth/credential-source.cjs +20 -4
- package/dist/auth/credential-source.cjs.map +1 -1
- package/dist/auth/credential-source.d.ts +9 -0
- package/dist/auth/credential-source.js +20 -4
- package/dist/auth/credential-source.js.map +1 -1
- package/dist/catalog/chat-pickers.cjs +31 -0
- package/dist/catalog/chat-pickers.cjs.map +1 -1
- package/dist/catalog/chat-pickers.d.ts +17 -0
- package/dist/catalog/chat-pickers.js +33 -2
- package/dist/catalog/chat-pickers.js.map +1 -1
- package/dist/catalog/runtime-catalog.cjs +63 -3
- package/dist/catalog/runtime-catalog.cjs.map +1 -1
- package/dist/catalog/runtime-catalog.d.ts +63 -3
- package/dist/catalog/runtime-catalog.js +64 -4
- package/dist/catalog/runtime-catalog.js.map +1 -1
- package/dist/chat/AthenaChat.cjs +290 -97
- package/dist/chat/AthenaChat.cjs.map +1 -1
- package/dist/chat/AthenaChat.d.ts +80 -4
- package/dist/chat/AthenaChat.js +290 -97
- package/dist/chat/AthenaChat.js.map +1 -1
- package/dist/chat/StatewireApprovalCard.cjs +35 -5
- package/dist/chat/StatewireApprovalCard.cjs.map +1 -1
- package/dist/chat/StatewireApprovalCard.d.ts +55 -2
- package/dist/chat/StatewireApprovalCard.js +37 -7
- package/dist/chat/StatewireApprovalCard.js.map +1 -1
- package/dist/chat/StatewireQueuedMessages.cjs +17 -2
- package/dist/chat/StatewireQueuedMessages.cjs.map +1 -1
- package/dist/chat/StatewireQueuedMessages.d.ts +8 -45
- package/dist/chat/StatewireQueuedMessages.js +18 -3
- package/dist/chat/StatewireQueuedMessages.js.map +1 -1
- package/dist/chat/chat-agent-mentions.cjs +70 -0
- package/dist/chat/chat-agent-mentions.cjs.map +1 -0
- package/dist/chat/chat-agent-mentions.d.ts +13 -0
- package/dist/chat/chat-agent-mentions.js +70 -0
- package/dist/chat/chat-agent-mentions.js.map +1 -0
- package/dist/chat/composer-actions.cjs +12 -0
- package/dist/chat/composer-actions.cjs.map +1 -0
- package/dist/chat/composer-actions.d.ts +22 -0
- package/dist/chat/composer-actions.js +12 -0
- package/dist/chat/composer-actions.js.map +1 -0
- package/dist/chat/follow-up-suggestions.cjs +185 -0
- package/dist/chat/follow-up-suggestions.cjs.map +1 -0
- package/dist/chat/follow-up-suggestions.d.ts +64 -0
- package/dist/chat/follow-up-suggestions.js +185 -0
- package/dist/chat/follow-up-suggestions.js.map +1 -0
- package/dist/chat/super-grouping/ToolTimeline.cjs +4 -3
- package/dist/chat/super-grouping/ToolTimeline.cjs.map +1 -1
- package/dist/chat/super-grouping/ToolTimeline.d.ts +7 -3
- package/dist/chat/super-grouping/ToolTimeline.js +4 -3
- package/dist/chat/super-grouping/ToolTimeline.js.map +1 -1
- package/dist/chat/turn-changes.cjs +284 -0
- package/dist/chat/turn-changes.cjs.map +1 -0
- package/dist/chat/turn-changes.d.ts +130 -0
- package/dist/chat/turn-changes.js +284 -0
- package/dist/chat/turn-changes.js.map +1 -0
- package/dist/chat/typed-interrupts/StatewireTypedInterruptCard.cjs +31 -0
- package/dist/chat/typed-interrupts/StatewireTypedInterruptCard.cjs.map +1 -0
- package/dist/chat/typed-interrupts/StatewireTypedInterruptCard.d.ts +31 -0
- package/dist/chat/typed-interrupts/StatewireTypedInterruptCard.js +31 -0
- package/dist/chat/typed-interrupts/StatewireTypedInterruptCard.js.map +1 -0
- package/dist/chat/typed-interrupts/approval-cards.cjs +250 -0
- package/dist/chat/typed-interrupts/approval-cards.cjs.map +1 -0
- package/dist/chat/typed-interrupts/approval-cards.d.ts +22 -0
- package/dist/chat/typed-interrupts/approval-cards.js +250 -0
- package/dist/chat/typed-interrupts/approval-cards.js.map +1 -0
- package/dist/chat/typed-interrupts/form-cards.cjs +289 -0
- package/dist/chat/typed-interrupts/form-cards.cjs.map +1 -0
- package/dist/chat/typed-interrupts/form-cards.d.ts +6 -0
- package/dist/chat/typed-interrupts/form-cards.js +289 -0
- package/dist/chat/typed-interrupts/form-cards.js.map +1 -0
- package/dist/chat/typed-interrupts/interrupt-card-shell.cjs +182 -0
- package/dist/chat/typed-interrupts/interrupt-card-shell.cjs.map +1 -0
- package/dist/chat/typed-interrupts/interrupt-card-shell.d.ts +47 -0
- package/dist/chat/typed-interrupts/interrupt-card-shell.js +182 -0
- package/dist/chat/typed-interrupts/interrupt-card-shell.js.map +1 -0
- package/dist/chat/typed-interrupts/json-schema-form.cjs +388 -0
- package/dist/chat/typed-interrupts/json-schema-form.cjs.map +1 -0
- package/dist/chat/typed-interrupts/json-schema-form.d.ts +33 -0
- package/dist/chat/typed-interrupts/json-schema-form.js +388 -0
- package/dist/chat/typed-interrupts/json-schema-form.js.map +1 -0
- package/dist/chat/typed-interrupts/questionnaire-card.cjs +449 -0
- package/dist/chat/typed-interrupts/questionnaire-card.cjs.map +1 -0
- package/dist/chat/typed-interrupts/questionnaire-card.d.ts +20 -0
- package/dist/chat/typed-interrupts/questionnaire-card.js +449 -0
- package/dist/chat/typed-interrupts/questionnaire-card.js.map +1 -0
- package/dist/chat/typed-interrupts/request-file-card.cjs +159 -0
- package/dist/chat/typed-interrupts/request-file-card.cjs.map +1 -0
- package/dist/chat/typed-interrupts/request-file-card.d.ts +2 -0
- package/dist/chat/typed-interrupts/request-file-card.js +159 -0
- package/dist/chat/typed-interrupts/request-file-card.js.map +1 -0
- package/dist/chat/typed-interrupts/toolkit-selection-card.cjs +189 -0
- package/dist/chat/typed-interrupts/toolkit-selection-card.cjs.map +1 -0
- package/dist/chat/typed-interrupts/toolkit-selection-card.d.ts +23 -0
- package/dist/chat/typed-interrupts/toolkit-selection-card.js +189 -0
- package/dist/chat/typed-interrupts/toolkit-selection-card.js.map +1 -0
- package/dist/chat/typed-interrupts/typed-interrupt-body.cjs +26 -0
- package/dist/chat/typed-interrupts/typed-interrupt-body.cjs.map +1 -0
- package/dist/chat/typed-interrupts/typed-interrupt-body.d.ts +3 -0
- package/dist/chat/typed-interrupts/typed-interrupt-body.js +26 -0
- package/dist/chat/typed-interrupts/typed-interrupt-body.js.map +1 -0
- package/dist/chat/typed-interrupts/typed-interrupt-graphql.cjs +105 -0
- package/dist/chat/typed-interrupts/typed-interrupt-graphql.cjs.map +1 -0
- package/dist/chat/typed-interrupts/typed-interrupt-graphql.d.ts +29 -0
- package/dist/chat/typed-interrupts/typed-interrupt-graphql.js +105 -0
- package/dist/chat/typed-interrupts/typed-interrupt-graphql.js.map +1 -0
- package/dist/chat/typed-interrupts/typed-interrupt-notice.cjs +70 -0
- package/dist/chat/typed-interrupts/typed-interrupt-notice.cjs.map +1 -0
- package/dist/chat/typed-interrupts/typed-interrupt-notice.d.ts +45 -0
- package/dist/chat/typed-interrupts/typed-interrupt-notice.js +70 -0
- package/dist/chat/typed-interrupts/typed-interrupt-notice.js.map +1 -0
- package/dist/chat/typed-interrupts/typed-interrupt-panel.cjs +76 -0
- package/dist/chat/typed-interrupts/typed-interrupt-panel.cjs.map +1 -0
- package/dist/chat/typed-interrupts/typed-interrupt-panel.d.ts +11 -0
- package/dist/chat/typed-interrupts/typed-interrupt-panel.js +76 -0
- package/dist/chat/typed-interrupts/typed-interrupt-panel.js.map +1 -0
- package/dist/chat/typed-interrupts/typed-interrupt-types.d.ts +46 -0
- package/dist/chat/typed-interrupts/use-interrupt-draft.cjs +106 -0
- package/dist/chat/typed-interrupts/use-interrupt-draft.cjs.map +1 -0
- package/dist/chat/typed-interrupts/use-interrupt-draft.d.ts +29 -0
- package/dist/chat/typed-interrupts/use-interrupt-draft.js +106 -0
- package/dist/chat/typed-interrupts/use-interrupt-draft.js.map +1 -0
- package/dist/chat/typed-interrupts/use-statewire-typed-interrupt.cjs +231 -0
- package/dist/chat/typed-interrupts/use-statewire-typed-interrupt.cjs.map +1 -0
- package/dist/chat/typed-interrupts/use-statewire-typed-interrupt.d.ts +66 -0
- package/dist/chat/typed-interrupts/use-statewire-typed-interrupt.js +231 -0
- package/dist/chat/typed-interrupts/use-statewire-typed-interrupt.js.map +1 -0
- package/dist/chat-ui/composer/composer-named-agents.cjs +13 -0
- package/dist/chat-ui/composer/composer-named-agents.cjs.map +1 -0
- package/dist/chat-ui/composer/composer-named-agents.d.ts +20 -0
- package/dist/chat-ui/composer/composer-named-agents.js +13 -0
- package/dist/chat-ui/composer/composer-named-agents.js.map +1 -0
- package/dist/chat-ui/composer/slash-command-menu.cjs +143 -0
- package/dist/chat-ui/composer/slash-command-menu.cjs.map +1 -0
- package/dist/chat-ui/composer/slash-command-menu.d.ts +19 -0
- package/dist/chat-ui/composer/slash-command-menu.js +143 -0
- package/dist/chat-ui/composer/slash-command-menu.js.map +1 -0
- package/dist/chat-ui/composer/slash-commands-extension.cjs +51 -0
- package/dist/chat-ui/composer/slash-commands-extension.cjs.map +1 -0
- package/dist/chat-ui/composer/slash-commands-extension.d.ts +39 -0
- package/dist/chat-ui/composer/slash-commands-extension.js +51 -0
- package/dist/chat-ui/composer/slash-commands-extension.js.map +1 -0
- package/dist/chat-ui/composer/slash-commands.cjs +74 -0
- package/dist/chat-ui/composer/slash-commands.cjs.map +1 -0
- package/dist/chat-ui/composer/slash-commands.d.ts +82 -0
- package/dist/chat-ui/composer/slash-commands.js +74 -0
- package/dist/chat-ui/composer/slash-commands.js.map +1 -0
- package/dist/chat-ui/composer/tiptap-composer.cjs +135 -9
- package/dist/chat-ui/composer/tiptap-composer.cjs.map +1 -1
- package/dist/chat-ui/composer/tiptap-composer.d.ts +61 -2
- package/dist/chat-ui/composer/tiptap-composer.js +135 -9
- package/dist/chat-ui/composer/tiptap-composer.js.map +1 -1
- package/dist/chat-ui/index.cjs +3 -0
- package/dist/chat-ui/index.cjs.map +1 -1
- package/dist/chat-ui/index.d.ts +3 -2
- package/dist/chat-ui/index.js +3 -0
- package/dist/chat-ui/index.js.map +1 -1
- package/dist/chat-ui/mentions/mention-chip.cjs +1 -1
- package/dist/chat-ui/mentions/mention-chip.cjs.map +1 -1
- package/dist/chat-ui/mentions/mention-chip.js +2 -2
- package/dist/chat-ui/mentions/mention-chip.js.map +1 -1
- package/dist/chat-ui/mentions/mention-extension.cjs +8 -1
- package/dist/chat-ui/mentions/mention-extension.cjs.map +1 -1
- package/dist/chat-ui/mentions/mention-extension.js +8 -1
- package/dist/chat-ui/mentions/mention-extension.js.map +1 -1
- package/dist/chat-ui/mentions/suggestions/components/get-scope-name.cjs +1 -0
- package/dist/chat-ui/mentions/suggestions/components/get-scope-name.cjs.map +1 -1
- package/dist/chat-ui/mentions/suggestions/components/get-scope-name.js +1 -0
- package/dist/chat-ui/mentions/suggestions/components/get-scope-name.js.map +1 -1
- package/dist/chat-ui/mentions/suggestions/components/mention-icon.cjs +2 -0
- package/dist/chat-ui/mentions/suggestions/components/mention-icon.cjs.map +1 -1
- package/dist/chat-ui/mentions/suggestions/components/mention-icon.js +3 -1
- package/dist/chat-ui/mentions/suggestions/components/mention-icon.js.map +1 -1
- package/dist/chat-ui/mentions/suggestions/components/menu-item.cjs +1 -1
- package/dist/chat-ui/mentions/suggestions/components/menu-item.cjs.map +1 -1
- package/dist/chat-ui/mentions/suggestions/components/menu-item.js +1 -1
- package/dist/chat-ui/mentions/suggestions/components/menu-item.js.map +1 -1
- package/dist/chat-ui/mentions/suggestions/data/api-client.cjs +36 -0
- package/dist/chat-ui/mentions/suggestions/data/api-client.cjs.map +1 -1
- package/dist/chat-ui/mentions/suggestions/data/api-client.d.ts +42 -0
- package/dist/chat-ui/mentions/suggestions/data/api-client.js +36 -0
- package/dist/chat-ui/mentions/suggestions/data/api-client.js.map +1 -1
- package/dist/chat-ui/mentions/suggestions/data/sources/index.cjs +235 -19
- package/dist/chat-ui/mentions/suggestions/data/sources/index.cjs.map +1 -1
- package/dist/chat-ui/mentions/suggestions/data/sources/index.d.ts +88 -10
- package/dist/chat-ui/mentions/suggestions/data/sources/index.js +236 -20
- package/dist/chat-ui/mentions/suggestions/data/sources/index.js.map +1 -1
- package/dist/chat-ui/mentions/suggestions/data/types.cjs.map +1 -1
- package/dist/chat-ui/mentions/suggestions/data/types.d.ts +27 -1
- package/dist/chat-ui/mentions/suggestions/data/types.js.map +1 -1
- package/dist/chat-ui/mentions/suggestions/data/use-mention-suggestions.cjs +56 -5
- package/dist/chat-ui/mentions/suggestions/data/use-mention-suggestions.cjs.map +1 -1
- package/dist/chat-ui/mentions/suggestions/data/use-mention-suggestions.d.ts +26 -6
- package/dist/chat-ui/mentions/suggestions/data/use-mention-suggestions.js +57 -6
- package/dist/chat-ui/mentions/suggestions/data/use-mention-suggestions.js.map +1 -1
- package/dist/chat-ui/mentions/suggestions/mention-suggestions.extension.cjs +34 -17
- package/dist/chat-ui/mentions/suggestions/mention-suggestions.extension.cjs.map +1 -1
- package/dist/chat-ui/mentions/suggestions/mention-suggestions.extension.d.ts +19 -1
- package/dist/chat-ui/mentions/suggestions/mention-suggestions.extension.js +35 -18
- package/dist/chat-ui/mentions/suggestions/mention-suggestions.extension.js.map +1 -1
- package/dist/chat-ui/statewire.d.ts +1 -1
- package/dist/chat-ui/thread/statewire-history-edge.cjs +15 -0
- package/dist/chat-ui/thread/statewire-history-edge.cjs.map +1 -1
- package/dist/chat-ui/thread/statewire-history-edge.d.ts +4 -1
- package/dist/chat-ui/thread/statewire-history-edge.js +15 -0
- package/dist/chat-ui/thread/statewire-history-edge.js.map +1 -1
- package/dist/collab/client.cjs +17 -5
- package/dist/collab/client.cjs.map +1 -1
- package/dist/collab/client.d.ts +22 -7
- package/dist/collab/client.js +17 -5
- package/dist/collab/client.js.map +1 -1
- package/dist/composer/ComposerAttachedReferences.cjs +119 -0
- package/dist/composer/ComposerAttachedReferences.cjs.map +1 -0
- package/dist/composer/ComposerAttachedReferences.d.ts +26 -0
- package/dist/composer/ComposerAttachedReferences.js +119 -0
- package/dist/composer/ComposerAttachedReferences.js.map +1 -0
- package/dist/composer/ComposerNamedAgents.cjs +63 -0
- package/dist/composer/ComposerNamedAgents.cjs.map +1 -0
- package/dist/composer/ComposerNamedAgents.d.ts +16 -0
- package/dist/composer/ComposerNamedAgents.js +63 -0
- package/dist/composer/ComposerNamedAgents.js.map +1 -0
- package/dist/composer/attached-references.cjs +159 -0
- package/dist/composer/attached-references.cjs.map +1 -0
- package/dist/composer/attached-references.d.ts +86 -0
- package/dist/composer/attached-references.js +159 -0
- package/dist/composer/attached-references.js.map +1 -0
- package/dist/composer/build-composed-message.cjs +14 -7
- package/dist/composer/build-composed-message.cjs.map +1 -1
- package/dist/composer/build-composed-message.d.ts +6 -1
- package/dist/composer/build-composed-message.js +14 -7
- package/dist/composer/build-composed-message.js.map +1 -1
- package/dist/composer/composer-handoff.cjs +6 -2
- package/dist/composer/composer-handoff.cjs.map +1 -1
- package/dist/composer/composer-handoff.d.ts +7 -1
- package/dist/composer/composer-handoff.js +6 -2
- package/dist/composer/composer-handoff.js.map +1 -1
- package/dist/composer/folder-upload.cjs +149 -0
- package/dist/composer/folder-upload.cjs.map +1 -0
- package/dist/composer/folder-upload.d.ts +79 -0
- package/dist/composer/folder-upload.js +149 -0
- package/dist/composer/folder-upload.js.map +1 -0
- package/dist/composer/index.d.ts +1 -1
- package/dist/composer/useAttachToChat.cjs +35 -0
- package/dist/composer/useAttachToChat.cjs.map +1 -0
- package/dist/composer/useAttachToChat.d.ts +54 -0
- package/dist/composer/useAttachToChat.js +35 -0
- package/dist/composer/useAttachToChat.js.map +1 -0
- package/dist/composer/useAttachedReferencesComposerProps.cjs +19 -0
- package/dist/composer/useAttachedReferencesComposerProps.cjs.map +1 -0
- package/dist/composer/useAttachedReferencesComposerProps.d.ts +12 -0
- package/dist/composer/useAttachedReferencesComposerProps.js +19 -0
- package/dist/composer/useAttachedReferencesComposerProps.js.map +1 -0
- package/dist/composer/useFileUpload.cjs +95 -7
- package/dist/composer/useFileUpload.cjs.map +1 -1
- package/dist/composer/useFileUpload.d.ts +21 -2
- package/dist/composer/useFileUpload.js +95 -7
- package/dist/composer/useFileUpload.js.map +1 -1
- package/dist/data/athena-api-error.cjs +125 -0
- package/dist/data/athena-api-error.cjs.map +1 -0
- package/dist/data/athena-api-error.d.ts +96 -0
- package/dist/data/athena-api-error.js +125 -0
- package/dist/data/athena-api-error.js.map +1 -0
- package/dist/data/athena-data-client.cjs +106 -0
- package/dist/data/athena-data-client.cjs.map +1 -0
- package/dist/data/athena-data-client.d.ts +74 -0
- package/dist/data/athena-data-client.js +106 -0
- package/dist/data/athena-data-client.js.map +1 -0
- package/dist/data/athena-member.cjs +93 -0
- package/dist/data/athena-member.cjs.map +1 -0
- package/dist/data/athena-member.d.ts +125 -0
- package/dist/data/athena-member.js +93 -0
- package/dist/data/athena-member.js.map +1 -0
- package/dist/data/athena-request.cjs +458 -0
- package/dist/data/athena-request.cjs.map +1 -0
- package/dist/data/athena-request.d.ts +120 -0
- package/dist/data/athena-request.js +458 -0
- package/dist/data/athena-request.js.map +1 -0
- package/dist/data/use-athena-fetch.cjs +14 -0
- package/dist/data/use-athena-fetch.cjs.map +1 -0
- package/dist/data/use-athena-fetch.d.ts +19 -0
- package/dist/data/use-athena-fetch.js +14 -0
- package/dist/data/use-athena-fetch.js.map +1 -0
- package/dist/data/use-athena-graphql.cjs +66 -0
- package/dist/data/use-athena-graphql.cjs.map +1 -0
- package/dist/data/use-athena-graphql.d.ts +56 -0
- package/dist/data/use-athena-graphql.js +66 -0
- package/dist/data/use-athena-graphql.js.map +1 -0
- package/dist/data/use-athena-rest.cjs +33 -0
- package/dist/data/use-athena-rest.cjs.map +1 -0
- package/dist/data/use-athena-rest.d.ts +21 -0
- package/dist/data/use-athena-rest.js +33 -0
- package/dist/data/use-athena-rest.js.map +1 -0
- package/dist/data/use-semantic-query.cjs +44 -0
- package/dist/data/use-semantic-query.cjs.map +1 -0
- package/dist/data/use-semantic-query.d.ts +92 -0
- package/dist/data/use-semantic-query.js +44 -0
- package/dist/data/use-semantic-query.js.map +1 -0
- package/dist/diagnostics/athena-diagnostics.cjs.map +1 -1
- package/dist/diagnostics/athena-diagnostics.d.ts +5 -1
- package/dist/diagnostics/athena-diagnostics.js.map +1 -1
- package/dist/diagnostics/errors.cjs +7 -0
- package/dist/diagnostics/errors.cjs.map +1 -1
- package/dist/diagnostics/errors.d.ts +7 -0
- package/dist/diagnostics/errors.js +7 -0
- package/dist/diagnostics/errors.js.map +1 -1
- package/dist/index.cjs +155 -11
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.ts +72 -13
- package/dist/index.js +148 -4
- package/dist/index.js.map +1 -1
- package/dist/keryx-http/src/initial-sync.cjs +64 -16
- package/dist/keryx-http/src/initial-sync.cjs.map +1 -1
- package/dist/keryx-http/src/initial-sync.d.ts +31 -1
- package/dist/keryx-http/src/initial-sync.js +64 -16
- package/dist/keryx-http/src/initial-sync.js.map +1 -1
- package/dist/keryx-http/src/own-awareness.cjs +20 -0
- package/dist/keryx-http/src/own-awareness.cjs.map +1 -0
- package/dist/keryx-http/src/own-awareness.d.ts +50 -0
- package/dist/keryx-http/src/own-awareness.js +20 -0
- package/dist/keryx-http/src/own-awareness.js.map +1 -0
- package/dist/keryx-http/src/update-attributions.cjs +26 -1
- package/dist/keryx-http/src/update-attributions.cjs.map +1 -1
- package/dist/keryx-http/src/update-attributions.d.ts +10 -1
- package/dist/keryx-http/src/update-attributions.js +26 -1
- package/dist/keryx-http/src/update-attributions.js.map +1 -1
- package/dist/offline/chat-outbox.cjs +262 -26
- package/dist/offline/chat-outbox.cjs.map +1 -1
- package/dist/offline/chat-outbox.d.ts +90 -12
- package/dist/offline/chat-outbox.js +263 -27
- package/dist/offline/chat-outbox.js.map +1 -1
- package/dist/provider/AthenaProvider.cjs +56 -19
- package/dist/provider/AthenaProvider.cjs.map +1 -1
- package/dist/provider/AthenaProvider.d.ts +24 -8
- package/dist/provider/AthenaProvider.js +57 -20
- package/dist/provider/AthenaProvider.js.map +1 -1
- package/dist/react/package.json.cjs +1 -1
- package/dist/react/package.json.js +1 -1
- package/dist/references/src/anchors/types.cjs +5 -0
- package/dist/references/src/anchors/types.cjs.map +1 -1
- package/dist/references/src/anchors/types.js +5 -0
- package/dist/references/src/anchors/types.js.map +1 -1
- package/dist/references/src/attachable.cjs +149 -0
- package/dist/references/src/attachable.cjs.map +1 -0
- package/dist/references/src/attachable.d.ts +87 -0
- package/dist/references/src/attachable.js +149 -0
- package/dist/references/src/attachable.js.map +1 -0
- package/dist/runtime/StatewirePlanModeLaneSync.cjs +93 -0
- package/dist/runtime/StatewirePlanModeLaneSync.cjs.map +1 -0
- package/dist/runtime/StatewirePlanModeLaneSync.d.ts +34 -0
- package/dist/runtime/StatewirePlanModeLaneSync.js +93 -0
- package/dist/runtime/StatewirePlanModeLaneSync.js.map +1 -0
- package/dist/runtime/StatewireThreadConfigLaneSync.cjs +2 -0
- package/dist/runtime/StatewireThreadConfigLaneSync.cjs.map +1 -1
- package/dist/runtime/StatewireThreadConfigLaneSync.d.ts +4 -0
- package/dist/runtime/StatewireThreadConfigLaneSync.js +2 -0
- package/dist/runtime/StatewireThreadConfigLaneSync.js.map +1 -1
- package/dist/runtime/statewire-plan-mode.cjs +71 -0
- package/dist/runtime/statewire-plan-mode.cjs.map +1 -0
- package/dist/runtime/statewire-plan-mode.d.ts +88 -0
- package/dist/runtime/statewire-plan-mode.js +71 -0
- package/dist/runtime/statewire-plan-mode.js.map +1 -0
- package/dist/runtime/statewire-run-config.cjs +3 -1
- package/dist/runtime/statewire-run-config.cjs.map +1 -1
- package/dist/runtime/statewire-run-config.d.ts +7 -0
- package/dist/runtime/statewire-run-config.js +3 -1
- package/dist/runtime/statewire-run-config.js.map +1 -1
- package/dist/runtime/statewire-session-key.cjs +11 -5
- package/dist/runtime/statewire-session-key.cjs.map +1 -1
- package/dist/runtime/statewire-session-key.d.ts +22 -10
- package/dist/runtime/statewire-session-key.js +11 -5
- package/dist/runtime/statewire-session-key.js.map +1 -1
- package/dist/runtime/useAthenaStatewireRuntime.cjs +65 -8
- package/dist/runtime/useAthenaStatewireRuntime.cjs.map +1 -1
- package/dist/runtime/useAthenaStatewireRuntime.d.ts +26 -10
- package/dist/runtime/useAthenaStatewireRuntime.js +67 -10
- package/dist/runtime/useAthenaStatewireRuntime.js.map +1 -1
- package/dist/search/useAthenaAssets.cjs +394 -0
- package/dist/search/useAthenaAssets.cjs.map +1 -0
- package/dist/search/useAthenaAssets.d.ts +186 -0
- package/dist/search/useAthenaAssets.js +394 -0
- package/dist/search/useAthenaAssets.js.map +1 -0
- package/dist/sheet-range/index.cjs +4 -0
- package/dist/sheet-range/index.cjs.map +1 -1
- package/dist/sheet-range/index.d.ts +4 -2
- package/dist/sheet-range/index.js +4 -0
- package/dist/sheet-range/index.js.map +1 -1
- package/dist/sheet-range/query-range.cjs +102 -0
- package/dist/sheet-range/query-range.cjs.map +1 -0
- package/dist/sheet-range/query-range.d.ts +46 -0
- package/dist/sheet-range/query-range.js +102 -0
- package/dist/sheet-range/query-range.js.map +1 -0
- package/dist/styles.css +1 -1
- package/dist/subagents/index.cjs +49 -0
- package/dist/subagents/index.cjs.map +1 -0
- package/dist/subagents/index.d.ts +16 -0
- package/dist/subagents/index.js +49 -0
- package/dist/subagents/index.js.map +1 -0
- package/dist/subagents/lane-follow.cjs +19 -0
- package/dist/subagents/lane-follow.cjs.map +1 -0
- package/dist/subagents/lane-follow.d.ts +9 -0
- package/dist/subagents/lane-follow.js +19 -0
- package/dist/subagents/lane-follow.js.map +1 -0
- package/dist/subagents/lane-model.cjs +178 -0
- package/dist/subagents/lane-model.cjs.map +1 -0
- package/dist/subagents/lane-model.d.ts +140 -0
- package/dist/subagents/lane-model.js +178 -0
- package/dist/subagents/lane-model.js.map +1 -0
- package/dist/subagents/lane-parts.cjs +517 -0
- package/dist/subagents/lane-parts.cjs.map +1 -0
- package/dist/subagents/lane-parts.d.ts +130 -0
- package/dist/subagents/lane-parts.js +517 -0
- package/dist/subagents/lane-parts.js.map +1 -0
- package/dist/subagents/subagent-lane-group.cjs +215 -0
- package/dist/subagents/subagent-lane-group.cjs.map +1 -0
- package/dist/subagents/subagent-lane-group.d.ts +67 -0
- package/dist/subagents/subagent-lane-group.js +215 -0
- package/dist/subagents/subagent-lane-group.js.map +1 -0
- package/dist/subagents/subagent-transcript-drawer.cjs +431 -0
- package/dist/subagents/subagent-transcript-drawer.cjs.map +1 -0
- package/dist/subagents/subagent-transcript-drawer.d.ts +78 -0
- package/dist/subagents/subagent-transcript-drawer.js +431 -0
- package/dist/subagents/subagent-transcript-drawer.js.map +1 -0
- package/dist/subagents/task-subagent-group.cjs +115 -0
- package/dist/subagents/task-subagent-group.cjs.map +1 -0
- package/dist/subagents/task-subagent-group.d.ts +36 -0
- package/dist/subagents/task-subagent-group.js +115 -0
- package/dist/subagents/task-subagent-group.js.map +1 -0
- package/dist/subagents/use-omitted-images-in-view.cjs +68 -0
- package/dist/subagents/use-omitted-images-in-view.cjs.map +1 -0
- package/dist/subagents/use-omitted-images-in-view.d.ts +21 -0
- package/dist/subagents/use-omitted-images-in-view.js +68 -0
- package/dist/subagents/use-omitted-images-in-view.js.map +1 -0
- package/dist/threads/Inbox.cjs +2 -2
- package/dist/threads/Inbox.cjs.map +1 -1
- package/dist/threads/SessionList.cjs +6 -6
- package/dist/threads/SessionList.cjs.map +1 -1
- package/dist/threads/SessionsPage.cjs +13 -7
- package/dist/threads/SessionsPage.cjs.map +1 -1
- package/dist/threads/SessionsPage.d.ts +10 -1
- package/dist/threads/SessionsPage.js +9 -3
- package/dist/threads/SessionsPage.js.map +1 -1
- package/dist/threads/session-list-model.cjs.map +1 -1
- package/dist/threads/session-list-model.d.ts +2 -1
- package/dist/threads/session-list-model.js.map +1 -1
- package/dist/threads/session-row-parts.cjs +3 -3
- package/dist/threads/session-row-parts.cjs.map +1 -1
- package/dist/threads/sessions-page-model.cjs +13 -5
- package/dist/threads/sessions-page-model.cjs.map +1 -1
- package/dist/threads/sessions-page-model.d.ts +7 -0
- package/dist/threads/sessions-page-model.js +11 -3
- package/dist/threads/sessions-page-model.js.map +1 -1
- package/dist/threads/sessions-page-storage.cjs +8 -8
- package/dist/threads/sessions-page-storage.cjs.map +1 -1
- package/dist/threads/sessions-page-storage.d.ts +5 -1
- package/dist/threads/sessions-page-storage.js +8 -8
- package/dist/threads/sessions-page-storage.js.map +1 -1
- package/dist/threads/use-athena-sessions.cjs +1 -0
- package/dist/threads/use-athena-sessions.cjs.map +1 -1
- package/dist/threads/use-athena-sessions.d.ts +7 -0
- package/dist/threads/use-athena-sessions.js +1 -0
- package/dist/threads/use-athena-sessions.js.map +1 -1
- package/dist/threads/use-athena-thread-agent.cjs +31 -0
- package/dist/threads/use-athena-thread-agent.cjs.map +1 -0
- package/dist/threads/use-athena-thread-agent.d.ts +38 -0
- package/dist/threads/use-athena-thread-agent.js +31 -0
- package/dist/threads/use-athena-thread-agent.js.map +1 -0
- package/dist/threads/use-athena-thread-plan-mode.cjs +18 -0
- package/dist/threads/use-athena-thread-plan-mode.cjs.map +1 -0
- package/dist/threads/use-athena-thread-plan-mode.d.ts +18 -0
- package/dist/threads/use-athena-thread-plan-mode.js +18 -0
- package/dist/threads/use-athena-thread-plan-mode.js.map +1 -0
- package/dist/threads/use-rest-conversation-history.d.ts +1 -0
- package/dist/tools/agent-creations.cjs +97 -0
- package/dist/tools/agent-creations.cjs.map +1 -0
- package/dist/tools/agent-creations.d.ts +38 -0
- package/dist/tools/agent-creations.js +97 -0
- package/dist/tools/agent-creations.js.map +1 -0
- package/dist/tools/agent-highlights.cjs +100 -0
- package/dist/tools/agent-highlights.cjs.map +1 -0
- package/dist/tools/agent-highlights.d.ts +57 -0
- package/dist/tools/agent-highlights.js +100 -0
- package/dist/tools/agent-highlights.js.map +1 -0
- package/dist/tools/append-document-tool-ui.cjs +1 -0
- package/dist/tools/append-document-tool-ui.cjs.map +1 -1
- package/dist/tools/append-document-tool-ui.d.ts +7 -0
- package/dist/tools/append-document-tool-ui.js +2 -1
- package/dist/tools/append-document-tool-ui.js.map +1 -1
- package/dist/tools/auto-open-tools.cjs +144 -71
- package/dist/tools/auto-open-tools.cjs.map +1 -1
- package/dist/tools/auto-open-tools.d.ts +131 -1
- package/dist/tools/auto-open-tools.js +145 -72
- package/dist/tools/auto-open-tools.js.map +1 -1
- package/dist/tools/browser-tool-uis.cjs +594 -0
- package/dist/tools/browser-tool-uis.cjs.map +1 -0
- package/dist/tools/browser-tool-uis.d.ts +8 -0
- package/dist/tools/browser-tool-uis.js +594 -0
- package/dist/tools/browser-tool-uis.js.map +1 -0
- package/dist/tools/computer-asset-tool-uis.cjs +313 -0
- package/dist/tools/computer-asset-tool-uis.cjs.map +1 -0
- package/dist/tools/computer-asset-tool-uis.d.ts +5 -0
- package/dist/tools/computer-asset-tool-uis.js +313 -0
- package/dist/tools/computer-asset-tool-uis.js.map +1 -0
- package/dist/tools/document-edit-tool-uis.cjs +218 -0
- package/dist/tools/document-edit-tool-uis.cjs.map +1 -0
- package/dist/tools/document-edit-tool-uis.d.ts +40 -0
- package/dist/tools/document-edit-tool-uis.js +218 -0
- package/dist/tools/document-edit-tool-uis.js.map +1 -0
- package/dist/tools/drive-tool-uis.cjs +425 -0
- package/dist/tools/drive-tool-uis.cjs.map +1 -0
- package/dist/tools/drive-tool-uis.d.ts +120 -0
- package/dist/tools/drive-tool-uis.js +425 -0
- package/dist/tools/drive-tool-uis.js.map +1 -0
- package/dist/tools/email-calendar-tool-uis.cjs +789 -0
- package/dist/tools/email-calendar-tool-uis.cjs.map +1 -0
- package/dist/tools/email-calendar-tool-uis.d.ts +129 -0
- package/dist/tools/email-calendar-tool-uis.js +789 -0
- package/dist/tools/email-calendar-tool-uis.js.map +1 -0
- package/dist/tools/ontology-tool-uis.cjs +83 -0
- package/dist/tools/ontology-tool-uis.cjs.map +1 -0
- package/dist/tools/ontology-tool-uis.d.ts +9 -0
- package/dist/tools/ontology-tool-uis.js +83 -0
- package/dist/tools/ontology-tool-uis.js.map +1 -0
- package/dist/tools/orchestration-tool-uis.cjs +586 -0
- package/dist/tools/orchestration-tool-uis.cjs.map +1 -0
- package/dist/tools/orchestration-tool-uis.d.ts +141 -0
- package/dist/tools/orchestration-tool-uis.js +586 -0
- package/dist/tools/orchestration-tool-uis.js.map +1 -0
- package/dist/tools/presentation-edit-tool-uis.cjs +516 -0
- package/dist/tools/presentation-edit-tool-uis.cjs.map +1 -0
- package/dist/tools/presentation-edit-tool-uis.d.ts +73 -0
- package/dist/tools/presentation-edit-tool-uis.js +516 -0
- package/dist/tools/presentation-edit-tool-uis.js.map +1 -0
- package/dist/tools/project-tool-uis.cjs +213 -0
- package/dist/tools/project-tool-uis.cjs.map +1 -0
- package/dist/tools/project-tool-uis.d.ts +14 -0
- package/dist/tools/project-tool-uis.js +213 -0
- package/dist/tools/project-tool-uis.js.map +1 -0
- package/dist/tools/sandbox-tool-uis.cjs +491 -0
- package/dist/tools/sandbox-tool-uis.cjs.map +1 -0
- package/dist/tools/sandbox-tool-uis.d.ts +116 -0
- package/dist/tools/sandbox-tool-uis.js +491 -0
- package/dist/tools/sandbox-tool-uis.js.map +1 -0
- package/dist/tools/sheet-query-tool-ui.cjs +138 -0
- package/dist/tools/sheet-query-tool-ui.cjs.map +1 -0
- package/dist/tools/sheet-query-tool-ui.d.ts +15 -0
- package/dist/tools/sheet-query-tool-ui.js +138 -0
- package/dist/tools/sheet-query-tool-ui.js.map +1 -0
- package/dist/tools/studio-screenshot-tool-uis.cjs +262 -0
- package/dist/tools/studio-screenshot-tool-uis.cjs.map +1 -0
- package/dist/tools/studio-screenshot-tool-uis.d.ts +52 -0
- package/dist/tools/studio-screenshot-tool-uis.js +262 -0
- package/dist/tools/studio-screenshot-tool-uis.js.map +1 -0
- package/dist/tools/subagent-task-tool-ui.cjs +24 -475
- package/dist/tools/subagent-task-tool-ui.cjs.map +1 -1
- package/dist/tools/subagent-task-tool-ui.d.ts +19 -103
- package/dist/tools/subagent-task-tool-ui.js +28 -479
- package/dist/tools/subagent-task-tool-ui.js.map +1 -1
- package/dist/tools/tool-summary.cjs +36 -0
- package/dist/tools/tool-summary.cjs.map +1 -1
- package/dist/tools/tool-summary.js +36 -0
- package/dist/tools/tool-summary.js.map +1 -1
- package/dist/tools/tool-uis.cjs +181 -53
- package/dist/tools/tool-uis.cjs.map +1 -1
- package/dist/tools/tool-uis.d.ts +40 -0
- package/dist/tools/tool-uis.js +183 -55
- package/dist/tools/tool-uis.js.map +1 -1
- package/dist/typed-interrupts/index.cjs +15 -0
- package/dist/typed-interrupts/index.cjs.map +1 -0
- package/dist/typed-interrupts/index.d.ts +20 -0
- package/dist/typed-interrupts/index.js +15 -0
- package/dist/typed-interrupts/index.js.map +1 -0
- package/dist/workbench/session-workbench-panes.cjs +6 -6
- package/dist/workbench/session-workbench-panes.cjs.map +1 -1
- package/package.json +28 -6
- package/dist/agent-runtime/src/chat-outbox-store.cjs +0 -510
- package/dist/agent-runtime/src/chat-outbox-store.cjs.map +0 -1
- package/dist/agent-runtime/src/chat-outbox-store.d.ts +0 -210
- package/dist/agent-runtime/src/chat-outbox-store.js +0 -510
- package/dist/agent-runtime/src/chat-outbox-store.js.map +0 -1
|
@@ -80,7 +80,7 @@ function ToolTimeline({
|
|
|
80
80
|
CollapsibleTrigger,
|
|
81
81
|
{
|
|
82
82
|
"aria-controls": panelId,
|
|
83
|
-
className: "group/trigger flex min-w-
|
|
83
|
+
className: "group/trigger flex min-w-[min(6rem,50%)] flex-1 items-center gap-1.5 rounded-md py-1 text-left text-[13px] text-muted-foreground transition-colors hover:text-foreground focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring",
|
|
84
84
|
children: [
|
|
85
85
|
/* @__PURE__ */ jsx(
|
|
86
86
|
ChevronRight,
|
|
@@ -109,8 +109,9 @@ function ToolTimeline({
|
|
|
109
109
|
"div",
|
|
110
110
|
{
|
|
111
111
|
"data-slot": "tool-timeline-meta",
|
|
112
|
-
|
|
113
|
-
|
|
112
|
+
title: typeof meta === "string" ? meta : void 0,
|
|
113
|
+
className: "flex min-w-0 max-w-[50%] items-center overflow-hidden whitespace-nowrap text-xs text-muted-foreground tabular-nums [&>*]:min-w-0 [&>*]:truncate",
|
|
114
|
+
children: typeof meta === "string" || typeof meta === "number" ? /* @__PURE__ */ jsx("span", { children: meta }) : meta
|
|
114
115
|
}
|
|
115
116
|
) : null,
|
|
116
117
|
actions ? /* @__PURE__ */ jsx("div", { className: "flex shrink-0 items-center gap-1", children: actions }) : null
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ToolTimeline.js","sources":["../../../src/chat/super-grouping/ToolTimeline.tsx"],"sourcesContent":["'use client';\n\n/*!\n * Adapted from assistant-ui's ToolTimeline element:\n * https://github.com/assistant-ui/assistant-ui/blob/main/packages/ui/src/components/react/assistant-ui/elements/tool-timeline.tsx\n * MIT License — Copyright (c) 2025 AgentbaseAI Inc.\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to deal\n * in the Software without restriction, including without limitation the rights\n * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n * copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n * The above copyright notice and this permission notice shall be included in all\n * copies or substantial portions of the Software.\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n * SOFTWARE.\n */\nimport { AlertCircle, Check, ChevronRight, Circle, LoaderCircle, Pause, X } from 'lucide-react';\nimport { type ReactElement, type ReactNode, useId, useState } from 'react';\nimport { sourceFaviconUrl } from '../../chat-ui/rich-text/citation-anchors';\nimport { cn } from '../../lib/utils';\nimport { StepText } from '../../tools/step-text';\nimport { Collapsible, CollapsibleContent, CollapsibleTrigger } from '../../ui/collapsible';\nimport type { ActivityPhase } from './activity-timeline';\nimport { type TimelineStep, visibleTimelineSteps } from './timeline-step';\n\nfunction StepIcon({ state }: { state: TimelineStep['state'] }) {\n const Icon =\n state === 'running'\n ? LoaderCircle\n : state === 'complete'\n ? Check\n : state === 'error'\n ? AlertCircle\n : state === 'rejected'\n ? X\n : state === 'paused'\n ? Pause\n : Circle;\n return (\n <Icon\n aria-hidden=\"true\"\n className={cn(\n 'size-3.5 shrink-0',\n state === 'running' && 'motion-safe:animate-spin',\n state === 'error'\n ? 'text-destructive'\n : state === 'waiting' || state === 'paused'\n ? 'text-amber-600 dark:text-amber-400'\n : 'text-muted-foreground',\n )}\n />\n );\n}\n\nfunction SourceFavicon({ url }: { url: string }) {\n const [failed, setFailed] = useState(false);\n const src = sourceFaviconUrl(url);\n if (!src || failed) return null;\n return (\n <img\n src={src}\n alt=\"\"\n width={14}\n height={14}\n className=\"size-3.5 shrink-0 rounded-[3px] ring-2 ring-background [&:not(:first-child)]:-ml-1\"\n loading=\"lazy\"\n referrerPolicy=\"no-referrer\"\n draggable={false}\n onError={() => setFailed(true)}\n />\n );\n}\n\n/** The sites a step's result came from, as overlapping favicons; one that fails to load is left out. */\nfunction StepSourceFavicons({ urls }: { urls: readonly string[] }) {\n return (\n <span data-slot=\"tool-timeline-sources\" className=\"flex shrink-0 items-center\">\n {urls.map((url) => (\n <SourceFavicon key={url} url={url} />\n ))}\n </span>\n );\n}\n\n/**\n * The upstream disclosure/verb/chip layout, with real per-call states and live\n * tool UIs. `meta` (a host's elapsed counter) sits on the header row itself,\n * right of the status and before `actions`, so a live card carries one status\n * line rather than a second row repeating what the header already says.\n *\n * A step can be drawn by the host instead (`renderStepRow`): its node fills\n * the step's `<li>`. While `keepMounted` holds, such a row stays mounted even\n * when \"Show N earlier steps\" folds it away (hidden), so what it renders keeps\n * running, and the fold button names it in `aria-controls`, so a deep link's\n * reveal can open the fold to it.\n */\nexport function ToolTimeline({\n steps,\n open,\n onOpenChange,\n label,\n labelTitle,\n phase,\n maxVisibleSteps,\n keepMounted,\n actions,\n meta,\n renderStepIcon,\n renderStepRow,\n showSourceFavicons = false,\n children,\n}: {\n steps: readonly TimelineStep[];\n open: boolean;\n onOpenChange: (open: boolean) => void;\n label: ReactNode;\n /** Tooltip for the header line (the full form of a clipped label). */\n labelTitle?: string;\n phase: ActivityPhase;\n maxVisibleSteps: number;\n keepMounted: boolean;\n actions?: ReactNode;\n meta?: ReactNode;\n /** The host's icon for a step's tool (its toolkit icon), after the status icon. */\n renderStepIcon?: (step: TimelineStep) => ReactNode;\n /** The host's own row for a step, in place of its status line; `null` keeps the status line. */\n renderStepRow?: (step: TimelineStep) => ReactElement | null;\n /** Show the favicons of the sites a finished step's result lists. */\n showSourceFavicons?: boolean;\n children?: ReactNode;\n}) {\n const panelId = useId();\n const [showAll, setShowAll] = useState(false);\n const recentSteps = visibleTimelineSteps({ steps, limit: maxVisibleSteps });\n const hiddenCount = steps.length - recentSteps.length;\n const recent = new Set(recentSteps);\n const hostRows = new Map<TimelineStep, ReactElement>();\n if (renderStepRow) {\n for (const step of steps) {\n const row = renderStepRow(step);\n if (row) hostRows.set(step, row);\n }\n }\n const hostRowId = (position: number) => `${panelId}-step-${position}`;\n // The host rows the fold hides while they are mounted: the ones it shows\n // again, or keeps mounted hidden.\n const foldedHostRowIds = steps.flatMap((step, position) =>\n hostRows.has(step) && !recent.has(step) && (showAll || keepMounted) ? [hostRowId(position)] : [],\n );\n return (\n <Collapsible data-slot=\"tool-timeline\" open={open} onOpenChange={onOpenChange} className=\"w-full min-w-0\">\n <div className=\"flex min-w-0 items-center gap-2\">\n <CollapsibleTrigger\n aria-controls={panelId}\n className=\"group/trigger flex min-w-0 flex-1 items-center gap-1.5 rounded-md py-1 text-left text-[13px] text-muted-foreground transition-colors hover:text-foreground focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring\"\n >\n <ChevronRight\n aria-hidden=\"true\"\n className=\"size-3.5 shrink-0 opacity-60 transition-transform duration-200 group-data-[state=open]/trigger:rotate-90 motion-reduce:transition-none\"\n />\n {phase === 'error' || phase === 'waiting' ? <StepIcon state={phase} /> : null}\n <span\n title={labelTitle}\n className={cn(\n 'min-w-0 break-words leading-5',\n phase === 'running' && 'motion-safe:animate-pulse',\n phase === 'error' && 'text-destructive',\n )}\n >\n {label}\n </span>\n </CollapsibleTrigger>\n {meta ? (\n <div\n data-slot=\"tool-timeline-meta\"\n className=\"flex shrink-0 items-center text-xs text-muted-foreground tabular-nums\"\n >\n {meta}\n </div>\n ) : null}\n {actions ? <div className=\"flex shrink-0 items-center gap-1\">{actions}</div> : null}\n </div>\n <CollapsibleContent\n id={panelId}\n forceMount={keepMounted ? true : undefined}\n hidden={!open}\n className=\"min-w-0\"\n >\n <ol aria-label=\"Work status updates\" className=\"flex list-none flex-col gap-2.5 py-2.5 pl-5\">\n {hiddenCount > 0 ? (\n <li>\n <button\n type=\"button\"\n onClick={() => setShowAll((previous) => !previous)}\n {...(foldedHostRowIds.length > 0\n ? { 'aria-controls': foldedHostRowIds.join(' '), 'aria-expanded': showAll }\n : {})}\n className=\"rounded text-xs text-muted-foreground hover:text-foreground focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring\"\n >\n {showAll\n ? 'Show recent steps'\n : `Show ${hiddenCount} earlier ${hiddenCount === 1 ? 'step' : 'steps'}`}\n </button>\n </li>\n ) : null}\n {steps.map((step, position) => {\n const folded = !showAll && !recent.has(step);\n const hostRow = hostRows.get(step);\n if (hostRow) {\n if (folded && !keepMounted) return null;\n // No display utility: `hidden` alone hides a folded row.\n return (\n <li\n key={step.id}\n id={hostRowId(position)}\n data-step-id={step.id}\n data-step-state={step.state}\n hidden={folded}\n className=\"min-w-0\"\n >\n {hostRow}\n </li>\n );\n }\n if (folded) return null;\n return (\n <li\n key={step.id}\n data-step-id={step.id}\n data-step-state={step.state}\n className=\"flex min-w-0 items-center gap-2 text-[13px] text-muted-foreground\"\n >\n <StepIcon state={step.state} />\n {renderStepIcon?.(step)}\n <span\n title={step.detail}\n className={cn(\n 'min-w-0 break-words leading-5',\n step.state === 'error' && 'text-destructive',\n step.state === 'running' && 'text-foreground',\n )}\n >\n <StepText text={step.verb} code={step.code} />\n </span>\n {showSourceFavicons && step.sourceUrls ? <StepSourceFavicons urls={step.sourceUrls} /> : null}\n {step.chip ? (\n <span\n title={step.chip}\n className=\"max-w-[45%] truncate rounded-md bg-foreground/[0.06] px-1.5 py-0.5 font-mono text-[11px] text-foreground/70\"\n >\n {step.chip}\n </span>\n ) : null}\n <span className=\"sr-only\">{step.state}</span>\n </li>\n );\n })}\n </ol>\n {children}\n </CollapsibleContent>\n </Collapsible>\n );\n}\n"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"ToolTimeline.js","sources":["../../../src/chat/super-grouping/ToolTimeline.tsx"],"sourcesContent":["'use client';\n\n/*!\n * Adapted from assistant-ui's ToolTimeline element:\n * https://github.com/assistant-ui/assistant-ui/blob/main/packages/ui/src/components/react/assistant-ui/elements/tool-timeline.tsx\n * MIT License — Copyright (c) 2025 AgentbaseAI Inc.\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to deal\n * in the Software without restriction, including without limitation the rights\n * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n * copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n * The above copyright notice and this permission notice shall be included in all\n * copies or substantial portions of the Software.\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n * SOFTWARE.\n */\nimport { AlertCircle, Check, ChevronRight, Circle, LoaderCircle, Pause, X } from 'lucide-react';\nimport { type ReactElement, type ReactNode, useId, useState } from 'react';\nimport { sourceFaviconUrl } from '../../chat-ui/rich-text/citation-anchors';\nimport { cn } from '../../lib/utils';\nimport { StepText } from '../../tools/step-text';\nimport { Collapsible, CollapsibleContent, CollapsibleTrigger } from '../../ui/collapsible';\nimport type { ActivityPhase } from './activity-timeline';\nimport { type TimelineStep, visibleTimelineSteps } from './timeline-step';\n\nfunction StepIcon({ state }: { state: TimelineStep['state'] }) {\n const Icon =\n state === 'running'\n ? LoaderCircle\n : state === 'complete'\n ? Check\n : state === 'error'\n ? AlertCircle\n : state === 'rejected'\n ? X\n : state === 'paused'\n ? Pause\n : Circle;\n return (\n <Icon\n aria-hidden=\"true\"\n className={cn(\n 'size-3.5 shrink-0',\n state === 'running' && 'motion-safe:animate-spin',\n state === 'error'\n ? 'text-destructive'\n : state === 'waiting' || state === 'paused'\n ? 'text-amber-600 dark:text-amber-400'\n : 'text-muted-foreground',\n )}\n />\n );\n}\n\nfunction SourceFavicon({ url }: { url: string }) {\n const [failed, setFailed] = useState(false);\n const src = sourceFaviconUrl(url);\n if (!src || failed) return null;\n return (\n <img\n src={src}\n alt=\"\"\n width={14}\n height={14}\n className=\"size-3.5 shrink-0 rounded-[3px] ring-2 ring-background [&:not(:first-child)]:-ml-1\"\n loading=\"lazy\"\n referrerPolicy=\"no-referrer\"\n draggable={false}\n onError={() => setFailed(true)}\n />\n );\n}\n\n/** The sites a step's result came from, as overlapping favicons; one that fails to load is left out. */\nfunction StepSourceFavicons({ urls }: { urls: readonly string[] }) {\n return (\n <span data-slot=\"tool-timeline-sources\" className=\"flex shrink-0 items-center\">\n {urls.map((url) => (\n <SourceFavicon key={url} url={url} />\n ))}\n </span>\n );\n}\n\n/**\n * The upstream disclosure/verb/chip layout, with real per-call states and live\n * tool UIs. `meta` (a host's elapsed counter, or a step's detail such as a\n * search query) sits on the header row itself, right of the status and before\n * `actions`, so a live card carries one status line rather than a second row\n * repeating what the header already says. In a narrow host it gives way first:\n * it takes at most half the row and ends in an ellipsis (a string `meta` keeps\n * its full text as the tooltip), while the label keeps at least 6rem (half the\n * row when that is narrower).\n *\n * A step can be drawn by the host instead (`renderStepRow`): its node fills\n * the step's `<li>`. While `keepMounted` holds, such a row stays mounted even\n * when \"Show N earlier steps\" folds it away (hidden), so what it renders keeps\n * running, and the fold button names it in `aria-controls`, so a deep link's\n * reveal can open the fold to it.\n */\nexport function ToolTimeline({\n steps,\n open,\n onOpenChange,\n label,\n labelTitle,\n phase,\n maxVisibleSteps,\n keepMounted,\n actions,\n meta,\n renderStepIcon,\n renderStepRow,\n showSourceFavicons = false,\n children,\n}: {\n steps: readonly TimelineStep[];\n open: boolean;\n onOpenChange: (open: boolean) => void;\n label: ReactNode;\n /** Tooltip for the header line (the full form of a clipped label). */\n labelTitle?: string;\n phase: ActivityPhase;\n maxVisibleSteps: number;\n keepMounted: boolean;\n actions?: ReactNode;\n meta?: ReactNode;\n /** The host's icon for a step's tool (its toolkit icon), after the status icon. */\n renderStepIcon?: (step: TimelineStep) => ReactNode;\n /** The host's own row for a step, in place of its status line; `null` keeps the status line. */\n renderStepRow?: (step: TimelineStep) => ReactElement | null;\n /** Show the favicons of the sites a finished step's result lists. */\n showSourceFavicons?: boolean;\n children?: ReactNode;\n}) {\n const panelId = useId();\n const [showAll, setShowAll] = useState(false);\n const recentSteps = visibleTimelineSteps({ steps, limit: maxVisibleSteps });\n const hiddenCount = steps.length - recentSteps.length;\n const recent = new Set(recentSteps);\n const hostRows = new Map<TimelineStep, ReactElement>();\n if (renderStepRow) {\n for (const step of steps) {\n const row = renderStepRow(step);\n if (row) hostRows.set(step, row);\n }\n }\n const hostRowId = (position: number) => `${panelId}-step-${position}`;\n // The host rows the fold hides while they are mounted: the ones it shows\n // again, or keeps mounted hidden.\n const foldedHostRowIds = steps.flatMap((step, position) =>\n hostRows.has(step) && !recent.has(step) && (showAll || keepMounted) ? [hostRowId(position)] : [],\n );\n return (\n <Collapsible data-slot=\"tool-timeline\" open={open} onOpenChange={onOpenChange} className=\"w-full min-w-0\">\n <div className=\"flex min-w-0 items-center gap-2\">\n <CollapsibleTrigger\n aria-controls={panelId}\n className=\"group/trigger flex min-w-[min(6rem,50%)] flex-1 items-center gap-1.5 rounded-md py-1 text-left text-[13px] text-muted-foreground transition-colors hover:text-foreground focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring\"\n >\n <ChevronRight\n aria-hidden=\"true\"\n className=\"size-3.5 shrink-0 opacity-60 transition-transform duration-200 group-data-[state=open]/trigger:rotate-90 motion-reduce:transition-none\"\n />\n {phase === 'error' || phase === 'waiting' ? <StepIcon state={phase} /> : null}\n <span\n title={labelTitle}\n className={cn(\n 'min-w-0 break-words leading-5',\n phase === 'running' && 'motion-safe:animate-pulse',\n phase === 'error' && 'text-destructive',\n )}\n >\n {label}\n </span>\n </CollapsibleTrigger>\n {meta ? (\n <div\n data-slot=\"tool-timeline-meta\"\n title={typeof meta === 'string' ? meta : undefined}\n className=\"flex min-w-0 max-w-[50%] items-center overflow-hidden whitespace-nowrap text-xs text-muted-foreground tabular-nums [&>*]:min-w-0 [&>*]:truncate\"\n >\n {typeof meta === 'string' || typeof meta === 'number' ? <span>{meta}</span> : meta}\n </div>\n ) : null}\n {actions ? <div className=\"flex shrink-0 items-center gap-1\">{actions}</div> : null}\n </div>\n <CollapsibleContent\n id={panelId}\n forceMount={keepMounted ? true : undefined}\n hidden={!open}\n className=\"min-w-0\"\n >\n <ol aria-label=\"Work status updates\" className=\"flex list-none flex-col gap-2.5 py-2.5 pl-5\">\n {hiddenCount > 0 ? (\n <li>\n <button\n type=\"button\"\n onClick={() => setShowAll((previous) => !previous)}\n {...(foldedHostRowIds.length > 0\n ? { 'aria-controls': foldedHostRowIds.join(' '), 'aria-expanded': showAll }\n : {})}\n className=\"rounded text-xs text-muted-foreground hover:text-foreground focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring\"\n >\n {showAll\n ? 'Show recent steps'\n : `Show ${hiddenCount} earlier ${hiddenCount === 1 ? 'step' : 'steps'}`}\n </button>\n </li>\n ) : null}\n {steps.map((step, position) => {\n const folded = !showAll && !recent.has(step);\n const hostRow = hostRows.get(step);\n if (hostRow) {\n if (folded && !keepMounted) return null;\n // No display utility: `hidden` alone hides a folded row.\n return (\n <li\n key={step.id}\n id={hostRowId(position)}\n data-step-id={step.id}\n data-step-state={step.state}\n hidden={folded}\n className=\"min-w-0\"\n >\n {hostRow}\n </li>\n );\n }\n if (folded) return null;\n return (\n <li\n key={step.id}\n data-step-id={step.id}\n data-step-state={step.state}\n className=\"flex min-w-0 items-center gap-2 text-[13px] text-muted-foreground\"\n >\n <StepIcon state={step.state} />\n {renderStepIcon?.(step)}\n <span\n title={step.detail}\n className={cn(\n 'min-w-0 break-words leading-5',\n step.state === 'error' && 'text-destructive',\n step.state === 'running' && 'text-foreground',\n )}\n >\n <StepText text={step.verb} code={step.code} />\n </span>\n {showSourceFavicons && step.sourceUrls ? <StepSourceFavicons urls={step.sourceUrls} /> : null}\n {step.chip ? (\n <span\n title={step.chip}\n className=\"max-w-[45%] truncate rounded-md bg-foreground/[0.06] px-1.5 py-0.5 font-mono text-[11px] text-foreground/70\"\n >\n {step.chip}\n </span>\n ) : null}\n <span className=\"sr-only\">{step.state}</span>\n </li>\n );\n })}\n </ol>\n {children}\n </CollapsibleContent>\n </Collapsible>\n );\n}\n"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,284 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
|
|
3
|
+
const jsxRuntime = require("react/jsx-runtime");
|
|
4
|
+
const react = require("@assistant-ui/react");
|
|
5
|
+
const reactQuery = require("@tanstack/react-query");
|
|
6
|
+
const lucideReact = require("lucide-react");
|
|
7
|
+
const require$$0 = require("react");
|
|
8
|
+
const utils = require("../lib/utils.cjs");
|
|
9
|
+
const threadIdContext = require("../threads/thread-id-context.cjs");
|
|
10
|
+
const button = require("../ui/button.cjs");
|
|
11
|
+
const useAthenaRunLive = require("./use-athena-run-live.cjs");
|
|
12
|
+
const runtimeMessages = require("../agent-runtime/src/runtime-messages.cjs");
|
|
13
|
+
const cnfast = require("cnfast");
|
|
14
|
+
const AthenaTurnChangesScope = {
|
|
15
|
+
/** Every change in the chat (the default). */
|
|
16
|
+
Chat: "chat",
|
|
17
|
+
/** This turn's changes alone. */
|
|
18
|
+
Turn: "turn"
|
|
19
|
+
};
|
|
20
|
+
const AthenaTurnChangesContext = require$$0.createContext(null);
|
|
21
|
+
const TURN_CHANGES_FILES_SHOWN = 3;
|
|
22
|
+
const RUN_ID_MAX = 200;
|
|
23
|
+
const RUN_ID_KEY = "athena_run_id";
|
|
24
|
+
const RUN_IDS_SEPARATOR = "\n";
|
|
25
|
+
function runIdOf(metadata) {
|
|
26
|
+
if (!utils.isRecord(metadata)) return null;
|
|
27
|
+
const runId = metadata[RUN_ID_KEY];
|
|
28
|
+
return typeof runId === "string" && runId.length > 0 && runId.length <= RUN_ID_MAX ? runId : null;
|
|
29
|
+
}
|
|
30
|
+
function readMessageRunIds(message) {
|
|
31
|
+
var _a;
|
|
32
|
+
const runIds = [];
|
|
33
|
+
for (const source of react.getExternalStoreMessages(message)) {
|
|
34
|
+
if (!utils.isRecord(source) || source.type !== "ai") continue;
|
|
35
|
+
const kwargs = source.additional_kwargs;
|
|
36
|
+
const runId = runIdOf(utils.isRecord(kwargs) ? kwargs.metadata : void 0);
|
|
37
|
+
if (runId && !runIds.includes(runId)) runIds.push(runId);
|
|
38
|
+
}
|
|
39
|
+
if (runIds.length > 0) return runIds;
|
|
40
|
+
const joined = runIdOf((_a = message.metadata) == null ? void 0 : _a.custom);
|
|
41
|
+
return joined ? [joined] : [];
|
|
42
|
+
}
|
|
43
|
+
function isLatestAnswer(messages, messageId) {
|
|
44
|
+
for (let index = messages.length - 1; index >= 0; index -= 1) {
|
|
45
|
+
const message = messages[index];
|
|
46
|
+
if (!message) continue;
|
|
47
|
+
if (message.role === "assistant" && isSoleEnding(message)) continue;
|
|
48
|
+
return message.id === messageId && message.role === "assistant";
|
|
49
|
+
}
|
|
50
|
+
return false;
|
|
51
|
+
}
|
|
52
|
+
function isSoleEnding(message) {
|
|
53
|
+
const kind = runtimeMessages.readSoleRuntimeMessageKind(message);
|
|
54
|
+
return kind !== void 0 && kind !== "handoff";
|
|
55
|
+
}
|
|
56
|
+
const readsByMessage = /* @__PURE__ */ new WeakMap();
|
|
57
|
+
function readMessage(message) {
|
|
58
|
+
const cached = readsByMessage.get(message);
|
|
59
|
+
if (cached) return cached;
|
|
60
|
+
const read = { runIds: readMessageRunIds(message), ending: isSoleEnding(message) };
|
|
61
|
+
readsByMessage.set(message, read);
|
|
62
|
+
return read;
|
|
63
|
+
}
|
|
64
|
+
const turnsByMessages = /* @__PURE__ */ new WeakMap();
|
|
65
|
+
function turnRunIdsByMessage(messages) {
|
|
66
|
+
const cached = turnsByMessages.get(messages);
|
|
67
|
+
if (cached) return cached;
|
|
68
|
+
const turns = /* @__PURE__ */ new Map();
|
|
69
|
+
let runIds = [];
|
|
70
|
+
let last = null;
|
|
71
|
+
const close = () => {
|
|
72
|
+
if (last !== null && runIds.length > 0) turns.set(last, runIds.join(RUN_IDS_SEPARATOR));
|
|
73
|
+
runIds = [];
|
|
74
|
+
last = null;
|
|
75
|
+
};
|
|
76
|
+
for (const message of messages) {
|
|
77
|
+
if (message.role !== "assistant") {
|
|
78
|
+
close();
|
|
79
|
+
continue;
|
|
80
|
+
}
|
|
81
|
+
const read = readMessage(message);
|
|
82
|
+
for (const runId of read.runIds) {
|
|
83
|
+
if (!runIds.includes(runId)) runIds.push(runId);
|
|
84
|
+
}
|
|
85
|
+
if (!read.ending) last = message.id;
|
|
86
|
+
}
|
|
87
|
+
close();
|
|
88
|
+
turnsByMessages.set(messages, turns);
|
|
89
|
+
return turns;
|
|
90
|
+
}
|
|
91
|
+
function editedFilesLabel({ count }) {
|
|
92
|
+
return count === 1 ? "Edited 1 file" : `Edited ${count.toLocaleString("en-US")} files`;
|
|
93
|
+
}
|
|
94
|
+
function moreFilesLabel({ count }) {
|
|
95
|
+
return count === 1 ? "Show 1 more file" : `Show ${count.toLocaleString("en-US")} more files`;
|
|
96
|
+
}
|
|
97
|
+
function splitPath(path) {
|
|
98
|
+
const slash = path.lastIndexOf("/");
|
|
99
|
+
return slash < 0 ? { folder: "", name: path } : { folder: path.slice(0, slash + 1), name: path.slice(slash + 1) };
|
|
100
|
+
}
|
|
101
|
+
const LineCounts = ({
|
|
102
|
+
additions,
|
|
103
|
+
deletions,
|
|
104
|
+
always = false
|
|
105
|
+
}) => {
|
|
106
|
+
if (additions === null || deletions === null) {
|
|
107
|
+
return /* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-muted-foreground", children: "binary" });
|
|
108
|
+
}
|
|
109
|
+
const showAdded = always || additions > 0;
|
|
110
|
+
const showRemoved = always || deletions > 0;
|
|
111
|
+
return /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
|
|
112
|
+
showAdded ? /* @__PURE__ */ jsxRuntime.jsxs("span", { className: "text-emerald-600 dark:text-emerald-400", children: [
|
|
113
|
+
"+",
|
|
114
|
+
additions.toLocaleString("en-US")
|
|
115
|
+
] }) : null,
|
|
116
|
+
showAdded && showRemoved ? " " : null,
|
|
117
|
+
showRemoved ? /* @__PURE__ */ jsxRuntime.jsxs("span", { className: "text-red-600 dark:text-red-400", children: [
|
|
118
|
+
"−",
|
|
119
|
+
deletions.toLocaleString("en-US")
|
|
120
|
+
] }) : null
|
|
121
|
+
] });
|
|
122
|
+
};
|
|
123
|
+
const AthenaTurnChangesSlot = ({ className }) => {
|
|
124
|
+
const config = require$$0.useContext(AthenaTurnChangesContext);
|
|
125
|
+
const threadId = require$$0.useContext(threadIdContext.AthenaStatewireThreadIdContext);
|
|
126
|
+
if (!(config == null ? void 0 : config.enabled) || !threadId) return null;
|
|
127
|
+
return /* @__PURE__ */ jsxRuntime.jsx(TurnChangesForMessage, { config, threadId, className });
|
|
128
|
+
};
|
|
129
|
+
const TurnChangesForMessage = ({ config, threadId, className }) => {
|
|
130
|
+
const messageId = react.useAuiState((s) => s.message.id);
|
|
131
|
+
const runIdsKey = react.useAuiState(
|
|
132
|
+
(s) => turnRunIdsByMessage(s.thread.messages).get(s.message.id) ?? null
|
|
133
|
+
);
|
|
134
|
+
const isLast = react.useAuiState((s) => s.message.isLast);
|
|
135
|
+
const latest = react.useAuiState((s) => isLatestAnswer(s.thread.messages, s.message.id));
|
|
136
|
+
const settled = react.useAuiState(
|
|
137
|
+
(s) => {
|
|
138
|
+
var _a, _b;
|
|
139
|
+
return ((_a = s.message.status) == null ? void 0 : _a.type) === "complete" || ((_b = s.message.status) == null ? void 0 : _b.type) === "incomplete";
|
|
140
|
+
}
|
|
141
|
+
);
|
|
142
|
+
const runLive = useAthenaRunLive.useAthenaRunLive();
|
|
143
|
+
const finished = !isLast || settled && !runLive;
|
|
144
|
+
const turn = require$$0.useMemo(
|
|
145
|
+
() => runIdsKey ? { messageId, runIds: runIdsKey.split(RUN_IDS_SEPARATOR) } : latest ? { messageId, runIds: [] } : null,
|
|
146
|
+
[messageId, runIdsKey, latest]
|
|
147
|
+
);
|
|
148
|
+
const read = config.read;
|
|
149
|
+
const changes = reactQuery.useQuery({
|
|
150
|
+
queryKey: ["athena-sdk", "turn-changes", threadId, messageId, runIdsKey ?? ""],
|
|
151
|
+
queryFn: ({ signal }) => turn ? read({ threadId, turn, signal }) : Promise.resolve(null),
|
|
152
|
+
enabled: finished && turn !== null,
|
|
153
|
+
// Read from the host (the desktop app's own folder, through its main process), never from
|
|
154
|
+
// Athena: it goes whether or not Athena can be reached.
|
|
155
|
+
networkMode: "always",
|
|
156
|
+
// A turn's changes are read once; Undo reads them again.
|
|
157
|
+
staleTime: Number.POSITIVE_INFINITY,
|
|
158
|
+
retry: false
|
|
159
|
+
});
|
|
160
|
+
const summary = changes.data ?? null;
|
|
161
|
+
if (!turn || !finished || !summary || !Array.isArray(summary.files)) return null;
|
|
162
|
+
const count = summary.files.length + Math.max(0, summary.more ?? 0);
|
|
163
|
+
if (count === 0) return null;
|
|
164
|
+
return /* @__PURE__ */ jsxRuntime.jsx(
|
|
165
|
+
TurnChangesCard,
|
|
166
|
+
{
|
|
167
|
+
config,
|
|
168
|
+
threadId,
|
|
169
|
+
turn,
|
|
170
|
+
summary,
|
|
171
|
+
count,
|
|
172
|
+
className
|
|
173
|
+
}
|
|
174
|
+
);
|
|
175
|
+
};
|
|
176
|
+
const TurnChangesCard = ({ config, threadId, turn, summary, count, className }) => {
|
|
177
|
+
const queryClient = reactQuery.useQueryClient();
|
|
178
|
+
const [expanded, setExpanded] = require$$0.useState(false);
|
|
179
|
+
const undo = reactQuery.useMutation({
|
|
180
|
+
mutationFn: async () => {
|
|
181
|
+
await config.onUndo({ threadId, turn, changes: summary });
|
|
182
|
+
},
|
|
183
|
+
networkMode: "always",
|
|
184
|
+
onSettled: () => queryClient.invalidateQueries({
|
|
185
|
+
queryKey: ["athena-sdk", "turn-changes", threadId, turn.messageId]
|
|
186
|
+
})
|
|
187
|
+
});
|
|
188
|
+
const hidden = Math.max(0, summary.files.length - TURN_CHANGES_FILES_SHOWN);
|
|
189
|
+
const listed = expanded ? summary.files : summary.files.slice(0, TURN_CHANGES_FILES_SHOWN);
|
|
190
|
+
const unlisted = Math.max(0, summary.more ?? 0);
|
|
191
|
+
return /* @__PURE__ */ jsxRuntime.jsxs(
|
|
192
|
+
"section",
|
|
193
|
+
{
|
|
194
|
+
"aria-label": "What this turn changed",
|
|
195
|
+
"data-slot": "turn-changes",
|
|
196
|
+
className: cnfast.cn(
|
|
197
|
+
"aui-turn-changes mt-3 overflow-hidden rounded-xl border border-border/60 bg-background text-[13px] shadow-sm",
|
|
198
|
+
className
|
|
199
|
+
),
|
|
200
|
+
children: [
|
|
201
|
+
/* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex min-w-0 flex-wrap items-center gap-x-2 gap-y-1 px-3 py-2", children: [
|
|
202
|
+
/* @__PURE__ */ jsxRuntime.jsx("span", { "data-slot": "turn-changes-title", className: "font-medium text-foreground", children: editedFilesLabel({ count }) }),
|
|
203
|
+
/* @__PURE__ */ jsxRuntime.jsx("span", { "data-slot": "turn-changes-total", className: "font-mono text-[12px] tabular-nums", children: /* @__PURE__ */ jsxRuntime.jsx(LineCounts, { additions: summary.additions, deletions: summary.deletions, always: true }) }),
|
|
204
|
+
/* @__PURE__ */ jsxRuntime.jsxs("span", { className: "ml-auto flex shrink-0 items-center gap-1", children: [
|
|
205
|
+
/* @__PURE__ */ jsxRuntime.jsxs(
|
|
206
|
+
button.Button,
|
|
207
|
+
{
|
|
208
|
+
type: "button",
|
|
209
|
+
variant: "ghost",
|
|
210
|
+
size: "xs",
|
|
211
|
+
"data-slot": "turn-changes-undo",
|
|
212
|
+
className: "text-muted-foreground",
|
|
213
|
+
disabled: undo.isPending,
|
|
214
|
+
onClick: () => undo.mutate(),
|
|
215
|
+
children: [
|
|
216
|
+
/* @__PURE__ */ jsxRuntime.jsx(lucideReact.Undo2Icon, { "aria-hidden": "true" }),
|
|
217
|
+
"Undo"
|
|
218
|
+
]
|
|
219
|
+
}
|
|
220
|
+
),
|
|
221
|
+
/* @__PURE__ */ jsxRuntime.jsx(
|
|
222
|
+
button.Button,
|
|
223
|
+
{
|
|
224
|
+
type: "button",
|
|
225
|
+
variant: "outline",
|
|
226
|
+
size: "xs",
|
|
227
|
+
"data-slot": "turn-changes-view",
|
|
228
|
+
onClick: () => config.onView({
|
|
229
|
+
threadId,
|
|
230
|
+
turn,
|
|
231
|
+
changes: summary,
|
|
232
|
+
scope: config.reviewScope ?? AthenaTurnChangesScope.Chat
|
|
233
|
+
}),
|
|
234
|
+
children: "View changes"
|
|
235
|
+
}
|
|
236
|
+
)
|
|
237
|
+
] })
|
|
238
|
+
] }),
|
|
239
|
+
/* @__PURE__ */ jsxRuntime.jsxs("ul", { className: "border-t border-border/60 py-1", children: [
|
|
240
|
+
listed.map((file) => {
|
|
241
|
+
const { folder, name } = splitPath(file.path);
|
|
242
|
+
return /* @__PURE__ */ jsxRuntime.jsxs(
|
|
243
|
+
"li",
|
|
244
|
+
{
|
|
245
|
+
"data-slot": "turn-changes-file",
|
|
246
|
+
className: "flex min-w-0 items-center gap-3 px-3 py-0.5 font-mono text-[12px]",
|
|
247
|
+
children: [
|
|
248
|
+
/* @__PURE__ */ jsxRuntime.jsxs("span", { className: "min-w-0 truncate", title: file.path, children: [
|
|
249
|
+
/* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-muted-foreground", children: folder }),
|
|
250
|
+
/* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-foreground", children: name })
|
|
251
|
+
] }),
|
|
252
|
+
/* @__PURE__ */ jsxRuntime.jsx("span", { className: "ml-auto shrink-0 tabular-nums", children: /* @__PURE__ */ jsxRuntime.jsx(LineCounts, { additions: file.additions, deletions: file.deletions }) })
|
|
253
|
+
]
|
|
254
|
+
},
|
|
255
|
+
file.path
|
|
256
|
+
);
|
|
257
|
+
}),
|
|
258
|
+
unlisted > 0 && (expanded || hidden === 0) ? /* @__PURE__ */ jsxRuntime.jsx("li", { "data-slot": "turn-changes-unlisted", className: "px-3 py-0.5 text-[12px] text-muted-foreground", children: unlisted === 1 ? "And 1 more file" : `And ${unlisted.toLocaleString("en-US")} more files` }) : null
|
|
259
|
+
] }),
|
|
260
|
+
hidden > 0 ? /* @__PURE__ */ jsxRuntime.jsx(
|
|
261
|
+
"button",
|
|
262
|
+
{
|
|
263
|
+
type: "button",
|
|
264
|
+
"data-slot": "turn-changes-more",
|
|
265
|
+
"aria-expanded": expanded,
|
|
266
|
+
onClick: () => setExpanded((open) => !open),
|
|
267
|
+
className: "w-full border-t border-border/60 px-3 py-1.5 text-left text-[12px] text-muted-foreground outline-none transition-colors hover:bg-muted/40 hover:text-foreground focus-visible:bg-muted/40",
|
|
268
|
+
children: expanded ? "Show fewer files" : moreFilesLabel({ count: hidden + unlisted })
|
|
269
|
+
}
|
|
270
|
+
) : null
|
|
271
|
+
]
|
|
272
|
+
}
|
|
273
|
+
);
|
|
274
|
+
};
|
|
275
|
+
exports.AthenaTurnChangesContext = AthenaTurnChangesContext;
|
|
276
|
+
exports.AthenaTurnChangesScope = AthenaTurnChangesScope;
|
|
277
|
+
exports.AthenaTurnChangesSlot = AthenaTurnChangesSlot;
|
|
278
|
+
exports.TURN_CHANGES_FILES_SHOWN = TURN_CHANGES_FILES_SHOWN;
|
|
279
|
+
exports.editedFilesLabel = editedFilesLabel;
|
|
280
|
+
exports.isLatestAnswer = isLatestAnswer;
|
|
281
|
+
exports.moreFilesLabel = moreFilesLabel;
|
|
282
|
+
exports.readMessageRunIds = readMessageRunIds;
|
|
283
|
+
exports.turnRunIdsByMessage = turnRunIdsByMessage;
|
|
284
|
+
//# sourceMappingURL=turn-changes.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"turn-changes.cjs","sources":["../../src/chat/turn-changes.tsx"],"sourcesContent":["import {\n getExternalStoreMessages,\n type ThreadMessage,\n useAuiState,\n} from '@assistant-ui/react';\nimport { readSoleRuntimeMessageKind } from '@athenaintel/agent-runtime';\nimport { useMutation, useQuery, useQueryClient } from '@tanstack/react-query';\nimport { Undo2Icon } from 'lucide-react';\nimport { createContext, type FC, useContext, useMemo, useState } from 'react';\nimport { cn, isRecord } from '../lib/utils';\nimport { AthenaStatewireThreadIdContext } from '../threads/thread-id-context';\nimport { Button } from '../ui/button';\nimport { useAthenaRunLive } from './use-athena-run-live';\n\n/**\n * What a coding turn changed, at the end of the turn in the transcript: Codex's \"Edited 5 files\n * +164 −6 · Undo · View changes\" card. The SDK owns the card and where it goes; the host owns the\n * changes (it reads them, for a turn it can find, through `read`) and what Undo and View changes do.\n * Off unless the host turns it on (`AthenaChatTurnChanges.enabled`): with it off nothing renders\n * and nothing is read.\n */\n\n/** One file a turn changed, as the card lists it. */\nexport interface AthenaTurnChangedFile {\n /** The file's path, relative to the folder the chat works in. */\n path: string;\n /** Lines added and removed; `null` for a binary file. */\n additions: number | null;\n deletions: number | null;\n}\n\n/** What one turn changed, as the host read it. */\nexport interface AthenaTurnChangesSummary {\n /** The files, in the order the card lists them: three show, the rest behind \"Show N more files\". */\n files: readonly AthenaTurnChangedFile[];\n /** Changed files past `files` that the host did not list; counted in \"Edited N files\". */\n more?: number;\n /** Lines added and removed in every file. */\n additions: number;\n deletions: number;\n /**\n * Opaque to the SDK: the host's own handle on these changes (what its review and its undo act\n * on), handed back to `onView` and `onUndo` as it was read.\n */\n ref?: string;\n}\n\n/** A finished assistant turn the host is asked about. */\nexport interface AthenaChatTurn {\n /** The turn's assistant message (its last one): the same id on every read of the thread. */\n messageId: string;\n /**\n * The runs that answered the turn, oldest first: what each of its assistant messages names\n * (`metadata.custom.athena_run_id`, which Athena stamps on every assistant message). A turn\n * resumed after an approval has more than one. Empty for the thread's latest turn while its run\n * ids have not reached the page (Athena stamps them after the reply streams): the host reads its\n * latest turn from its own record, and the card reads again by run once they arrive.\n */\n runIds: readonly string[];\n}\n\n/** Where View changes opens the host's review. */\nexport const AthenaTurnChangesScope = {\n /** Every change in the chat (the default). */\n Chat: 'chat',\n /** This turn's changes alone. */\n Turn: 'turn',\n} as const;\nexport type AthenaTurnChangesScope =\n (typeof AthenaTurnChangesScope)[keyof typeof AthenaTurnChangesScope];\n\n/**\n * `AthenaChat`'s `turnChanges`: the host's half of the turn changes card. The SDK asks `read` for a\n * finished turn's changes once (cached per turn, and only while `enabled`), draws the card when the\n * turn changed something, and calls `onView` and `onUndo` on the person's press.\n */\nexport interface AthenaChatTurnChanges {\n /** Shows the card. Off unless `true`: absent or off, nothing renders and `read` is never called. */\n enabled?: boolean;\n /**\n * What View changes opens: every change in the chat (`chat`, the default) or this turn's alone\n * (`turn`), handed to `onView` as `scope`.\n */\n reviewScope?: AthenaTurnChangesScope;\n /**\n * What `turn` changed, read once the turn has finished: `null` (or no files) for a turn that\n * changed nothing or one the host can't place, which shows nothing. Each turn is read once and\n * kept (TanStack Query, per thread and turn); Undo reads it again. A rejection shows nothing.\n */\n read(params: {\n threadId: string;\n turn: AthenaChatTurn;\n signal: AbortSignal;\n }): Promise<AthenaTurnChangesSummary | null>;\n /** View changes: the host's review of the changes, of the chat or of this turn (`scope`). */\n onView(params: {\n threadId: string;\n turn: AthenaChatTurn;\n changes: AthenaTurnChangesSummary;\n scope: AthenaTurnChangesScope;\n }): void;\n /**\n * Undo: put the folder back as the turn found it. The host decides how (and whether to ask\n * first); the card waits for what it returns, then reads the turn again.\n */\n onUndo(params: {\n threadId: string;\n turn: AthenaChatTurn;\n changes: AthenaTurnChangesSummary;\n }): void | Promise<unknown>;\n}\n\n/** The host's `turnChanges`, which `AthenaChat` provides to every assistant turn it draws. */\nexport const AthenaTurnChangesContext = createContext<AthenaChatTurnChanges | null>(null);\n\n/** How many files the card lists before \"Show N more files\". */\nexport const TURN_CHANGES_FILES_SHOWN = 3;\n\n/** The longest run id the card reads from a message; longer ones are not Athena's. */\nconst RUN_ID_MAX = 200;\nconst RUN_ID_KEY = 'athena_run_id';\nconst RUN_IDS_SEPARATOR = '\\n';\n\nfunction runIdOf(metadata: unknown): string | null {\n if (!isRecord(metadata)) return null;\n const runId = metadata[RUN_ID_KEY];\n return typeof runId === 'string' && runId.length > 0 && runId.length <= RUN_ID_MAX\n ? runId\n : null;\n}\n\n/**\n * The runs an assistant message came from, oldest first: each of its source messages' own\n * (`additional_kwargs.metadata.athena_run_id`), else the joined message's (`metadata.custom`).\n */\nexport function readMessageRunIds(message: ThreadMessage): string[] {\n const runIds: string[] = [];\n for (const source of getExternalStoreMessages<unknown>(message)) {\n if (!isRecord(source) || source.type !== 'ai') continue;\n const kwargs = source.additional_kwargs;\n const runId = runIdOf(isRecord(kwargs) ? kwargs.metadata : undefined);\n if (runId && !runIds.includes(runId)) runIds.push(runId);\n }\n if (runIds.length > 0) return runIds;\n const joined = runIdOf(message.metadata?.custom);\n return joined ? [joined] : [];\n}\n\n/**\n * Whether the message `messageId` is the thread's latest answer: an assistant message, not a run's\n * ending card, with only ending cards after it.\n */\nexport function isLatestAnswer(messages: readonly ThreadMessage[], messageId: string): boolean {\n for (let index = messages.length - 1; index >= 0; index -= 1) {\n const message = messages[index];\n if (!message) continue;\n if (message.role === 'assistant' && isSoleEnding(message)) continue;\n return message.id === messageId && message.role === 'assistant';\n }\n return false;\n}\n\n/** A run's ending drawn as its own message (a stop's card): it carries no turn of its own. */\nfunction isSoleEnding(message: ThreadMessage): boolean {\n const kind = readSoleRuntimeMessageKind(message);\n return kind !== undefined && kind !== 'handoff';\n}\n\n/**\n * What one assistant message says of its turn, read once per message object: a settled message\n * keeps its object across a streamed token, so a new `thread.messages` array reads only the\n * message being generated again.\n */\nconst readsByMessage = new WeakMap<ThreadMessage, { runIds: readonly string[]; ending: boolean }>();\n\nfunction readMessage(message: ThreadMessage): { runIds: readonly string[]; ending: boolean } {\n const cached = readsByMessage.get(message);\n if (cached) return cached;\n const read = { runIds: readMessageRunIds(message), ending: isSoleEnding(message) };\n readsByMessage.set(message, read);\n return read;\n}\n\nconst turnsByMessages = new WeakMap<readonly ThreadMessage[], ReadonlyMap<string, string>>();\n\n/**\n * For each assistant message that ends a turn, its turn's runs (oldest first, one per line): a\n * turn is the assistant messages between two of the person's, and its last one that is not a run's\n * ending card carries the card. Computed once per `thread.messages` array, so every row reads a\n * string from the same map.\n */\nexport function turnRunIdsByMessage(\n messages: readonly ThreadMessage[],\n): ReadonlyMap<string, string> {\n const cached = turnsByMessages.get(messages);\n if (cached) return cached;\n const turns = new Map<string, string>();\n let runIds: string[] = [];\n let last: string | null = null;\n const close = () => {\n if (last !== null && runIds.length > 0) turns.set(last, runIds.join(RUN_IDS_SEPARATOR));\n runIds = [];\n last = null;\n };\n for (const message of messages) {\n if (message.role !== 'assistant') {\n close();\n continue;\n }\n const read = readMessage(message);\n for (const runId of read.runIds) {\n if (!runIds.includes(runId)) runIds.push(runId);\n }\n if (!read.ending) last = message.id;\n }\n close();\n turnsByMessages.set(messages, turns);\n return turns;\n}\n\n/** \"Edited 1 file\", \"Edited 5 files\". */\nexport function editedFilesLabel({ count }: { count: number }): string {\n return count === 1 ? 'Edited 1 file' : `Edited ${count.toLocaleString('en-US')} files`;\n}\n\n/** \"Show 1 more file\", \"Show 4 more files\". */\nexport function moreFilesLabel({ count }: { count: number }): string {\n return count === 1 ? 'Show 1 more file' : `Show ${count.toLocaleString('en-US')} more files`;\n}\n\n/** A path's folder (with its slash) and its name, which the card draws apart. */\nfunction splitPath(path: string): { folder: string; name: string } {\n const slash = path.lastIndexOf('/');\n return slash < 0\n ? { folder: '', name: path }\n : { folder: path.slice(0, slash + 1), name: path.slice(slash + 1) };\n}\n\n/** A count of lines added and removed: \"+12 −3\", nothing for a zero, \"binary\" for a binary file. */\nconst LineCounts: FC<{ additions: number | null; deletions: number | null; always?: boolean }> = ({\n additions,\n deletions,\n always = false,\n}) => {\n if (additions === null || deletions === null) {\n return <span className=\"text-muted-foreground\">binary</span>;\n }\n const showAdded = always || additions > 0;\n const showRemoved = always || deletions > 0;\n return (\n <>\n {showAdded ? (\n <span className=\"text-emerald-600 dark:text-emerald-400\">\n +{additions.toLocaleString('en-US')}\n </span>\n ) : null}\n {showAdded && showRemoved ? ' ' : null}\n {showRemoved ? (\n <span className=\"text-red-600 dark:text-red-400\">−{deletions.toLocaleString('en-US')}</span>\n ) : null}\n </>\n );\n};\n\n/**\n * The turn changes card for the assistant message in scope, at the end of its turn, while the host\n * turned it on (`AthenaChatTurnChanges.enabled`). Renders nothing for a turn still running, one no\n * run of Athena's names, one the host can't place and one that changed nothing.\n */\nexport const AthenaTurnChangesSlot: FC<{ className?: string }> = ({ className }) => {\n const config = useContext(AthenaTurnChangesContext);\n const threadId = useContext(AthenaStatewireThreadIdContext);\n if (!config?.enabled || !threadId) return null;\n return <TurnChangesForMessage config={config} threadId={threadId} className={className} />;\n};\n\nconst TurnChangesForMessage: FC<{\n config: AthenaChatTurnChanges;\n threadId: string;\n className?: string;\n}> = ({ config, threadId, className }) => {\n const messageId = useAuiState((s) => s.message.id);\n // A primitive per row, from one map per messages array (`turnRunIdsByMessage`).\n const runIdsKey = useAuiState(\n (s) => turnRunIdsByMessage(s.thread.messages).get(s.message.id) ?? null,\n );\n const isLast = useAuiState((s) => s.message.isLast);\n // The thread's latest answer that is not a run's ending card (one may follow it: a stop's, a\n // failure's): its turn may be read before its run ids arrive (they reach the page after the\n // reply streams), by the host's own record.\n const latest = useAuiState((s) => isLatestAnswer(s.thread.messages, s.message.id));\n const settled = useAuiState(\n (s) => s.message.status?.type === 'complete' || s.message.status?.type === 'incomplete',\n );\n const runLive = useAthenaRunLive();\n // A turn the person wrote after is over; the last one is once its run is.\n const finished = !isLast || (settled && !runLive);\n const turn = useMemo<AthenaChatTurn | null>(\n () =>\n runIdsKey\n ? { messageId, runIds: runIdsKey.split(RUN_IDS_SEPARATOR) }\n : latest\n ? { messageId, runIds: [] }\n : null,\n [messageId, runIdsKey, latest],\n );\n const read = config.read;\n const changes = useQuery({\n queryKey: ['athena-sdk', 'turn-changes', threadId, messageId, runIdsKey ?? ''],\n queryFn: ({ signal }) =>\n turn ? read({ threadId, turn, signal }) : Promise.resolve(null),\n enabled: finished && turn !== null,\n // Read from the host (the desktop app's own folder, through its main process), never from\n // Athena: it goes whether or not Athena can be reached.\n networkMode: 'always',\n // A turn's changes are read once; Undo reads them again.\n staleTime: Number.POSITIVE_INFINITY,\n retry: false,\n });\n const summary = changes.data ?? null;\n if (!turn || !finished || !summary || !Array.isArray(summary.files)) return null;\n const count = summary.files.length + Math.max(0, summary.more ?? 0);\n if (count === 0) return null;\n return (\n <TurnChangesCard\n config={config}\n threadId={threadId}\n turn={turn}\n summary={summary}\n count={count}\n className={className}\n />\n );\n};\n\nconst TurnChangesCard: FC<{\n config: AthenaChatTurnChanges;\n threadId: string;\n turn: AthenaChatTurn;\n summary: AthenaTurnChangesSummary;\n count: number;\n className?: string;\n}> = ({ config, threadId, turn, summary, count, className }) => {\n const queryClient = useQueryClient();\n const [expanded, setExpanded] = useState(false);\n const undo = useMutation({\n mutationFn: async () => {\n await config.onUndo({ threadId, turn, changes: summary });\n },\n networkMode: 'always',\n onSettled: () =>\n queryClient.invalidateQueries({\n queryKey: ['athena-sdk', 'turn-changes', threadId, turn.messageId],\n }),\n });\n const hidden = Math.max(0, summary.files.length - TURN_CHANGES_FILES_SHOWN);\n const listed = expanded ? summary.files : summary.files.slice(0, TURN_CHANGES_FILES_SHOWN);\n const unlisted = Math.max(0, summary.more ?? 0);\n return (\n <section\n aria-label=\"What this turn changed\"\n data-slot=\"turn-changes\"\n className={cn(\n 'aui-turn-changes mt-3 overflow-hidden rounded-xl border border-border/60 bg-background text-[13px] shadow-sm',\n className,\n )}\n >\n <div className=\"flex min-w-0 flex-wrap items-center gap-x-2 gap-y-1 px-3 py-2\">\n <span data-slot=\"turn-changes-title\" className=\"font-medium text-foreground\">\n {editedFilesLabel({ count })}\n </span>\n <span data-slot=\"turn-changes-total\" className=\"font-mono text-[12px] tabular-nums\">\n <LineCounts additions={summary.additions} deletions={summary.deletions} always />\n </span>\n <span className=\"ml-auto flex shrink-0 items-center gap-1\">\n <Button\n type=\"button\"\n variant=\"ghost\"\n size=\"xs\"\n data-slot=\"turn-changes-undo\"\n className=\"text-muted-foreground\"\n disabled={undo.isPending}\n onClick={() => undo.mutate()}\n >\n <Undo2Icon aria-hidden=\"true\" />\n Undo\n </Button>\n <Button\n type=\"button\"\n variant=\"outline\"\n size=\"xs\"\n data-slot=\"turn-changes-view\"\n onClick={() =>\n config.onView({\n threadId,\n turn,\n changes: summary,\n scope: config.reviewScope ?? AthenaTurnChangesScope.Chat,\n })\n }\n >\n View changes\n </Button>\n </span>\n </div>\n <ul className=\"border-t border-border/60 py-1\">\n {listed.map((file) => {\n const { folder, name } = splitPath(file.path);\n return (\n <li\n key={file.path}\n data-slot=\"turn-changes-file\"\n className=\"flex min-w-0 items-center gap-3 px-3 py-0.5 font-mono text-[12px]\"\n >\n <span className=\"min-w-0 truncate\" title={file.path}>\n <span className=\"text-muted-foreground\">{folder}</span>\n <span className=\"text-foreground\">{name}</span>\n </span>\n <span className=\"ml-auto shrink-0 tabular-nums\">\n <LineCounts additions={file.additions} deletions={file.deletions} />\n </span>\n </li>\n );\n })}\n {unlisted > 0 && (expanded || hidden === 0) ? (\n <li data-slot=\"turn-changes-unlisted\" className=\"px-3 py-0.5 text-[12px] text-muted-foreground\">\n {unlisted === 1\n ? 'And 1 more file'\n : `And ${unlisted.toLocaleString('en-US')} more files`}\n </li>\n ) : null}\n </ul>\n {hidden > 0 ? (\n <button\n type=\"button\"\n data-slot=\"turn-changes-more\"\n aria-expanded={expanded}\n onClick={() => setExpanded((open) => !open)}\n className=\"w-full border-t border-border/60 px-3 py-1.5 text-left text-[12px] text-muted-foreground outline-none transition-colors hover:bg-muted/40 hover:text-foreground focus-visible:bg-muted/40\"\n >\n {expanded ? 'Show fewer files' : moreFilesLabel({ count: hidden + unlisted })}\n </button>\n ) : null}\n </section>\n );\n};\n"],"names":["createContext","isRecord","getExternalStoreMessages","readSoleRuntimeMessageKind","jsx","jsxs","Fragment","useContext","AthenaStatewireThreadIdContext","useAuiState","useAthenaRunLive","useMemo","useQuery","useQueryClient","useState","useMutation","cn","Button","Undo2Icon"],"mappings":"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"}
|
|
@@ -0,0 +1,130 @@
|
|
|
1
|
+
import { type ThreadMessage } from '@assistant-ui/react';
|
|
2
|
+
import { type FC } from 'react';
|
|
3
|
+
/**
|
|
4
|
+
* What a coding turn changed, at the end of the turn in the transcript: Codex's "Edited 5 files
|
|
5
|
+
* +164 −6 · Undo · View changes" card. The SDK owns the card and where it goes; the host owns the
|
|
6
|
+
* changes (it reads them, for a turn it can find, through `read`) and what Undo and View changes do.
|
|
7
|
+
* Off unless the host turns it on (`AthenaChatTurnChanges.enabled`): with it off nothing renders
|
|
8
|
+
* and nothing is read.
|
|
9
|
+
*/
|
|
10
|
+
/** One file a turn changed, as the card lists it. */
|
|
11
|
+
export interface AthenaTurnChangedFile {
|
|
12
|
+
/** The file's path, relative to the folder the chat works in. */
|
|
13
|
+
path: string;
|
|
14
|
+
/** Lines added and removed; `null` for a binary file. */
|
|
15
|
+
additions: number | null;
|
|
16
|
+
deletions: number | null;
|
|
17
|
+
}
|
|
18
|
+
/** What one turn changed, as the host read it. */
|
|
19
|
+
export interface AthenaTurnChangesSummary {
|
|
20
|
+
/** The files, in the order the card lists them: three show, the rest behind "Show N more files". */
|
|
21
|
+
files: readonly AthenaTurnChangedFile[];
|
|
22
|
+
/** Changed files past `files` that the host did not list; counted in "Edited N files". */
|
|
23
|
+
more?: number;
|
|
24
|
+
/** Lines added and removed in every file. */
|
|
25
|
+
additions: number;
|
|
26
|
+
deletions: number;
|
|
27
|
+
/**
|
|
28
|
+
* Opaque to the SDK: the host's own handle on these changes (what its review and its undo act
|
|
29
|
+
* on), handed back to `onView` and `onUndo` as it was read.
|
|
30
|
+
*/
|
|
31
|
+
ref?: string;
|
|
32
|
+
}
|
|
33
|
+
/** A finished assistant turn the host is asked about. */
|
|
34
|
+
export interface AthenaChatTurn {
|
|
35
|
+
/** The turn's assistant message (its last one): the same id on every read of the thread. */
|
|
36
|
+
messageId: string;
|
|
37
|
+
/**
|
|
38
|
+
* The runs that answered the turn, oldest first: what each of its assistant messages names
|
|
39
|
+
* (`metadata.custom.athena_run_id`, which Athena stamps on every assistant message). A turn
|
|
40
|
+
* resumed after an approval has more than one. Empty for the thread's latest turn while its run
|
|
41
|
+
* ids have not reached the page (Athena stamps them after the reply streams): the host reads its
|
|
42
|
+
* latest turn from its own record, and the card reads again by run once they arrive.
|
|
43
|
+
*/
|
|
44
|
+
runIds: readonly string[];
|
|
45
|
+
}
|
|
46
|
+
/** Where View changes opens the host's review. */
|
|
47
|
+
export declare const AthenaTurnChangesScope: {
|
|
48
|
+
/** Every change in the chat (the default). */
|
|
49
|
+
readonly Chat: 'chat';
|
|
50
|
+
/** This turn's changes alone. */
|
|
51
|
+
readonly Turn: 'turn';
|
|
52
|
+
};
|
|
53
|
+
export type AthenaTurnChangesScope = (typeof AthenaTurnChangesScope)[keyof typeof AthenaTurnChangesScope];
|
|
54
|
+
/**
|
|
55
|
+
* `AthenaChat`'s `turnChanges`: the host's half of the turn changes card. The SDK asks `read` for a
|
|
56
|
+
* finished turn's changes once (cached per turn, and only while `enabled`), draws the card when the
|
|
57
|
+
* turn changed something, and calls `onView` and `onUndo` on the person's press.
|
|
58
|
+
*/
|
|
59
|
+
export interface AthenaChatTurnChanges {
|
|
60
|
+
/** Shows the card. Off unless `true`: absent or off, nothing renders and `read` is never called. */
|
|
61
|
+
enabled?: boolean;
|
|
62
|
+
/**
|
|
63
|
+
* What View changes opens: every change in the chat (`chat`, the default) or this turn's alone
|
|
64
|
+
* (`turn`), handed to `onView` as `scope`.
|
|
65
|
+
*/
|
|
66
|
+
reviewScope?: AthenaTurnChangesScope;
|
|
67
|
+
/**
|
|
68
|
+
* What `turn` changed, read once the turn has finished: `null` (or no files) for a turn that
|
|
69
|
+
* changed nothing or one the host can't place, which shows nothing. Each turn is read once and
|
|
70
|
+
* kept (TanStack Query, per thread and turn); Undo reads it again. A rejection shows nothing.
|
|
71
|
+
*/
|
|
72
|
+
read(params: {
|
|
73
|
+
threadId: string;
|
|
74
|
+
turn: AthenaChatTurn;
|
|
75
|
+
signal: AbortSignal;
|
|
76
|
+
}): Promise<AthenaTurnChangesSummary | null>;
|
|
77
|
+
/** View changes: the host's review of the changes, of the chat or of this turn (`scope`). */
|
|
78
|
+
onView(params: {
|
|
79
|
+
threadId: string;
|
|
80
|
+
turn: AthenaChatTurn;
|
|
81
|
+
changes: AthenaTurnChangesSummary;
|
|
82
|
+
scope: AthenaTurnChangesScope;
|
|
83
|
+
}): void;
|
|
84
|
+
/**
|
|
85
|
+
* Undo: put the folder back as the turn found it. The host decides how (and whether to ask
|
|
86
|
+
* first); the card waits for what it returns, then reads the turn again.
|
|
87
|
+
*/
|
|
88
|
+
onUndo(params: {
|
|
89
|
+
threadId: string;
|
|
90
|
+
turn: AthenaChatTurn;
|
|
91
|
+
changes: AthenaTurnChangesSummary;
|
|
92
|
+
}): void | Promise<unknown>;
|
|
93
|
+
}
|
|
94
|
+
/** The host's `turnChanges`, which `AthenaChat` provides to every assistant turn it draws. */
|
|
95
|
+
export declare const AthenaTurnChangesContext: import("react").Context<AthenaChatTurnChanges | null>;
|
|
96
|
+
/** How many files the card lists before "Show N more files". */
|
|
97
|
+
export declare const TURN_CHANGES_FILES_SHOWN = 3;
|
|
98
|
+
/**
|
|
99
|
+
* The runs an assistant message came from, oldest first: each of its source messages' own
|
|
100
|
+
* (`additional_kwargs.metadata.athena_run_id`), else the joined message's (`metadata.custom`).
|
|
101
|
+
*/
|
|
102
|
+
export declare function readMessageRunIds(message: ThreadMessage): string[];
|
|
103
|
+
/**
|
|
104
|
+
* Whether the message `messageId` is the thread's latest answer: an assistant message, not a run's
|
|
105
|
+
* ending card, with only ending cards after it.
|
|
106
|
+
*/
|
|
107
|
+
export declare function isLatestAnswer(messages: readonly ThreadMessage[], messageId: string): boolean;
|
|
108
|
+
/**
|
|
109
|
+
* For each assistant message that ends a turn, its turn's runs (oldest first, one per line): a
|
|
110
|
+
* turn is the assistant messages between two of the person's, and its last one that is not a run's
|
|
111
|
+
* ending card carries the card. Computed once per `thread.messages` array, so every row reads a
|
|
112
|
+
* string from the same map.
|
|
113
|
+
*/
|
|
114
|
+
export declare function turnRunIdsByMessage(messages: readonly ThreadMessage[]): ReadonlyMap<string, string>;
|
|
115
|
+
/** "Edited 1 file", "Edited 5 files". */
|
|
116
|
+
export declare function editedFilesLabel({ count }: {
|
|
117
|
+
count: number;
|
|
118
|
+
}): string;
|
|
119
|
+
/** "Show 1 more file", "Show 4 more files". */
|
|
120
|
+
export declare function moreFilesLabel({ count }: {
|
|
121
|
+
count: number;
|
|
122
|
+
}): string;
|
|
123
|
+
/**
|
|
124
|
+
* The turn changes card for the assistant message in scope, at the end of its turn, while the host
|
|
125
|
+
* turned it on (`AthenaChatTurnChanges.enabled`). Renders nothing for a turn still running, one no
|
|
126
|
+
* run of Athena's names, one the host can't place and one that changed nothing.
|
|
127
|
+
*/
|
|
128
|
+
export declare const AthenaTurnChangesSlot: FC<{
|
|
129
|
+
className?: string;
|
|
130
|
+
}>;
|