@athenaintel/react 0.57.2 → 0.60.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +795 -12
- package/dist/agent-runtime/src/addressed-agents.cjs +16 -0
- package/dist/agent-runtime/src/addressed-agents.cjs.map +1 -0
- package/dist/agent-runtime/src/addressed-agents.d.ts +30 -0
- package/dist/agent-runtime/src/addressed-agents.js +16 -0
- package/dist/agent-runtime/src/addressed-agents.js.map +1 -0
- package/dist/agent-runtime/src/answer-label.cjs +4 -3
- package/dist/agent-runtime/src/answer-label.cjs.map +1 -1
- package/dist/agent-runtime/src/answer-label.d.ts +13 -6
- package/dist/agent-runtime/src/answer-label.js +4 -3
- package/dist/agent-runtime/src/answer-label.js.map +1 -1
- package/dist/agent-runtime/src/chat-outbox-attachments.cjs.map +1 -1
- package/dist/agent-runtime/src/chat-outbox-attachments.d.ts +1 -1
- package/dist/agent-runtime/src/chat-outbox-attachments.js.map +1 -1
- package/dist/agent-runtime/src/chat-outbox-entry.cjs +101 -0
- package/dist/agent-runtime/src/chat-outbox-entry.cjs.map +1 -0
- package/dist/agent-runtime/src/chat-outbox-entry.d.ts +99 -0
- package/dist/agent-runtime/src/chat-outbox-entry.js +101 -0
- package/dist/agent-runtime/src/chat-outbox-entry.js.map +1 -0
- package/dist/agent-runtime/src/chat-outbox-legacy.cjs +252 -0
- package/dist/agent-runtime/src/chat-outbox-legacy.cjs.map +1 -0
- package/dist/agent-runtime/src/chat-outbox-legacy.d.ts +96 -0
- package/dist/agent-runtime/src/chat-outbox-legacy.js +252 -0
- package/dist/agent-runtime/src/chat-outbox-legacy.js.map +1 -0
- package/dist/agent-runtime/src/chat-outbox-policy.cjs +30 -0
- package/dist/agent-runtime/src/chat-outbox-policy.cjs.map +1 -0
- package/dist/agent-runtime/src/chat-outbox-policy.d.ts +42 -0
- package/dist/agent-runtime/src/chat-outbox-policy.js +30 -0
- package/dist/agent-runtime/src/chat-outbox-policy.js.map +1 -0
- package/dist/agent-runtime/src/chat-outbox-storage.cjs +306 -0
- package/dist/agent-runtime/src/chat-outbox-storage.cjs.map +1 -0
- package/dist/agent-runtime/src/chat-outbox-storage.d.ts +194 -0
- package/dist/agent-runtime/src/chat-outbox-storage.js +306 -0
- package/dist/agent-runtime/src/chat-outbox-storage.js.map +1 -0
- package/dist/agent-runtime/src/chat-outbox-thread.cjs +21 -94
- package/dist/agent-runtime/src/chat-outbox-thread.cjs.map +1 -1
- package/dist/agent-runtime/src/chat-outbox-thread.d.ts +22 -18
- package/dist/agent-runtime/src/chat-outbox-thread.js +21 -94
- package/dist/agent-runtime/src/chat-outbox-thread.js.map +1 -1
- package/dist/agent-runtime/src/chat-outbox.cjs +492 -547
- package/dist/agent-runtime/src/chat-outbox.cjs.map +1 -1
- package/dist/agent-runtime/src/chat-outbox.d.ts +110 -142
- package/dist/agent-runtime/src/chat-outbox.js +492 -547
- package/dist/agent-runtime/src/chat-outbox.js.map +1 -1
- package/dist/agent-runtime/src/composer-markdown.cjs +0 -16
- package/dist/agent-runtime/src/composer-markdown.cjs.map +1 -1
- package/dist/agent-runtime/src/composer-markdown.d.ts +1 -1
- package/dist/agent-runtime/src/composer-markdown.js +1 -17
- package/dist/agent-runtime/src/composer-markdown.js.map +1 -1
- package/dist/agent-runtime/src/deep-agent-transport-recipe.cjs +3 -1
- package/dist/agent-runtime/src/deep-agent-transport-recipe.cjs.map +1 -1
- package/dist/agent-runtime/src/deep-agent-transport-recipe.d.ts +8 -1
- package/dist/agent-runtime/src/deep-agent-transport-recipe.js +3 -1
- package/dist/agent-runtime/src/deep-agent-transport-recipe.js.map +1 -1
- package/dist/agent-runtime/src/dictation-preferences.d.ts +356 -0
- package/dist/agent-runtime/src/dictation-record.d.ts +279 -0
- package/dist/agent-runtime/src/dictation-session.d.ts +106 -7
- package/dist/agent-runtime/src/dictation-snippets.d.ts +9 -0
- package/dist/agent-runtime/src/dictation-transfer.d.ts +142 -0
- package/dist/agent-runtime/src/edit-command.cjs.map +1 -1
- package/dist/agent-runtime/src/edit-command.d.ts +1 -1
- package/dist/agent-runtime/src/edit-command.js.map +1 -1
- package/dist/agent-runtime/src/errors.cjs +1 -0
- package/dist/agent-runtime/src/errors.cjs.map +1 -1
- package/dist/agent-runtime/src/errors.js +1 -0
- package/dist/agent-runtime/src/errors.js.map +1 -1
- package/dist/agent-runtime/src/generated/runconfig-contract.cjs +24 -0
- package/dist/agent-runtime/src/generated/runconfig-contract.cjs.map +1 -1
- package/dist/agent-runtime/src/generated/runconfig-contract.d.ts +3 -3
- package/dist/agent-runtime/src/generated/runconfig-contract.js +24 -0
- package/dist/agent-runtime/src/generated/runconfig-contract.js.map +1 -1
- package/dist/agent-runtime/src/index.d.ts +14 -8
- package/dist/agent-runtime/src/lane-follow.cjs +289 -0
- package/dist/agent-runtime/src/lane-follow.cjs.map +1 -0
- package/dist/agent-runtime/src/lane-follow.js +289 -0
- package/dist/agent-runtime/src/lane-follow.js.map +1 -0
- package/dist/agent-runtime/src/lane-images.cjs +387 -0
- package/dist/agent-runtime/src/lane-images.cjs.map +1 -0
- package/dist/agent-runtime/src/lane-images.js +387 -0
- package/dist/agent-runtime/src/lane-images.js.map +1 -0
- package/dist/agent-runtime/src/message-window.js +1 -1
- package/dist/agent-runtime/src/messages.cjs +19 -1
- package/dist/agent-runtime/src/messages.cjs.map +1 -1
- package/dist/agent-runtime/src/messages.d.ts +8 -0
- package/dist/agent-runtime/src/messages.js +21 -3
- package/dist/agent-runtime/src/messages.js.map +1 -1
- package/dist/agent-runtime/src/named-agents.cjs +301 -0
- package/dist/agent-runtime/src/named-agents.cjs.map +1 -0
- package/dist/agent-runtime/src/named-agents.d.ts +246 -0
- package/dist/agent-runtime/src/named-agents.js +301 -0
- package/dist/agent-runtime/src/named-agents.js.map +1 -0
- package/dist/agent-runtime/src/offline-status.cjs.map +1 -1
- package/dist/agent-runtime/src/offline-status.d.ts +93 -2
- package/dist/agent-runtime/src/offline-status.js.map +1 -1
- package/dist/agent-runtime/src/ptc-subcalls.cjs +41 -0
- package/dist/agent-runtime/src/ptc-subcalls.cjs.map +1 -0
- package/dist/agent-runtime/src/ptc-subcalls.js +41 -0
- package/dist/agent-runtime/src/ptc-subcalls.js.map +1 -0
- package/dist/agent-runtime/src/queue.cjs +2 -2
- package/dist/agent-runtime/src/queue.cjs.map +1 -1
- package/dist/agent-runtime/src/queue.d.ts +20 -25
- package/dist/agent-runtime/src/queue.js +2 -2
- package/dist/agent-runtime/src/queue.js.map +1 -1
- package/dist/agent-runtime/src/quota-safe-local-storage-session.cjs +314 -84
- package/dist/agent-runtime/src/quota-safe-local-storage-session.cjs.map +1 -1
- package/dist/agent-runtime/src/quota-safe-local-storage-session.d.ts +137 -40
- package/dist/agent-runtime/src/quota-safe-local-storage-session.js +318 -88
- package/dist/agent-runtime/src/quota-safe-local-storage-session.js.map +1 -1
- package/dist/agent-runtime/src/run-send.cjs +54 -0
- package/dist/agent-runtime/src/run-send.cjs.map +1 -0
- package/dist/agent-runtime/src/run-send.d.ts +51 -0
- package/dist/agent-runtime/src/run-send.js +54 -0
- package/dist/agent-runtime/src/run-send.js.map +1 -0
- package/dist/agent-runtime/src/running-tool-placeholder.cjs +6 -0
- package/dist/agent-runtime/src/running-tool-placeholder.cjs.map +1 -1
- package/dist/agent-runtime/src/running-tool-placeholder.js +6 -0
- package/dist/agent-runtime/src/running-tool-placeholder.js.map +1 -1
- package/dist/agent-runtime/src/runtime.d.ts +9 -5
- package/dist/agent-runtime/src/sealed-idb.cjs +64 -0
- package/dist/agent-runtime/src/sealed-idb.cjs.map +1 -1
- package/dist/agent-runtime/src/sealed-idb.d.ts +16 -0
- package/dist/agent-runtime/src/sealed-idb.js +64 -0
- package/dist/agent-runtime/src/sealed-idb.js.map +1 -1
- package/dist/agent-runtime/src/send-recovery.cjs +90 -118
- package/dist/agent-runtime/src/send-recovery.cjs.map +1 -1
- package/dist/agent-runtime/src/send-recovery.d.ts +25 -29
- package/dist/agent-runtime/src/send-recovery.js +90 -118
- package/dist/agent-runtime/src/send-recovery.js.map +1 -1
- package/dist/agent-runtime/src/statewire-diagnostics.d.ts +4 -1
- package/dist/agent-runtime/src/statewire-held-sends.cjs +191 -0
- package/dist/agent-runtime/src/statewire-held-sends.cjs.map +1 -0
- package/dist/agent-runtime/src/statewire-held-sends.d.ts +119 -0
- package/dist/agent-runtime/src/statewire-held-sends.js +191 -0
- package/dist/agent-runtime/src/statewire-held-sends.js.map +1 -0
- package/dist/agent-runtime/src/statewire-state.cjs +4 -0
- package/dist/agent-runtime/src/statewire-state.cjs.map +1 -1
- package/dist/agent-runtime/src/statewire-state.js +4 -0
- package/dist/agent-runtime/src/statewire-state.js.map +1 -1
- package/dist/agent-runtime/src/statewire-transport.cjs +8 -2
- package/dist/agent-runtime/src/statewire-transport.cjs.map +1 -1
- package/dist/agent-runtime/src/statewire-transport.d.ts +14 -5
- package/dist/agent-runtime/src/statewire-transport.js +8 -2
- package/dist/agent-runtime/src/statewire-transport.js.map +1 -1
- package/dist/agent-runtime/src/subagent-transcripts.cjs +1 -23
- package/dist/agent-runtime/src/subagent-transcripts.cjs.map +1 -1
- package/dist/agent-runtime/src/subagent-transcripts.js +3 -25
- package/dist/agent-runtime/src/subagent-transcripts.js.map +1 -1
- package/dist/agent-runtime/src/subagents.cjs +22 -29
- package/dist/agent-runtime/src/subagents.cjs.map +1 -1
- package/dist/agent-runtime/src/subagents.js +23 -30
- package/dist/agent-runtime/src/subagents.js.map +1 -1
- package/dist/agent-runtime/src/thread-extras.cjs +27 -19
- package/dist/agent-runtime/src/thread-extras.cjs.map +1 -1
- package/dist/agent-runtime/src/thread-extras.d.ts +19 -6
- package/dist/agent-runtime/src/thread-extras.js +27 -19
- package/dist/agent-runtime/src/thread-extras.js.map +1 -1
- package/dist/agent-runtime/src/thread-handoff-flow-machine.d.ts +8 -8
- package/dist/agent-runtime/src/tool-metadata.cjs +19 -0
- package/dist/agent-runtime/src/tool-metadata.cjs.map +1 -1
- package/dist/agent-runtime/src/tool-metadata.js +19 -0
- package/dist/agent-runtime/src/tool-metadata.js.map +1 -1
- package/dist/agent-runtime/src/tool-names.cjs +21 -0
- package/dist/agent-runtime/src/tool-names.cjs.map +1 -1
- package/dist/agent-runtime/src/tool-names.d.ts +8 -0
- package/dist/agent-runtime/src/tool-names.js +21 -0
- package/dist/agent-runtime/src/tool-names.js.map +1 -1
- package/dist/agent-runtime/src/typed-interrupt-kinds.cjs +247 -0
- package/dist/agent-runtime/src/typed-interrupt-kinds.cjs.map +1 -0
- package/dist/agent-runtime/src/typed-interrupt-kinds.d.ts +173 -0
- package/dist/agent-runtime/src/typed-interrupt-kinds.js +247 -0
- package/dist/agent-runtime/src/typed-interrupt-kinds.js.map +1 -0
- package/dist/agent-runtime/src/typed-interrupts.cjs +48 -0
- package/dist/agent-runtime/src/typed-interrupts.cjs.map +1 -0
- package/dist/agent-runtime/src/typed-interrupts.d.ts +75 -0
- package/dist/agent-runtime/src/typed-interrupts.js +48 -0
- package/dist/agent-runtime/src/typed-interrupts.js.map +1 -0
- package/dist/agent-runtime/src/types.d.ts +1 -1
- package/dist/agent-runtime/src/use-conversation-list.cjs +1 -0
- package/dist/agent-runtime/src/use-conversation-list.cjs.map +1 -1
- package/dist/agent-runtime/src/use-conversation-list.d.ts +7 -0
- package/dist/agent-runtime/src/use-conversation-list.js +1 -0
- package/dist/agent-runtime/src/use-conversation-list.js.map +1 -1
- package/dist/agent-runtime/src/use-deep-agent-chat-outbox.cjs +46 -29
- package/dist/agent-runtime/src/use-deep-agent-chat-outbox.cjs.map +1 -1
- package/dist/agent-runtime/src/use-deep-agent-chat-outbox.d.ts +14 -22
- package/dist/agent-runtime/src/use-deep-agent-chat-outbox.js +46 -29
- package/dist/agent-runtime/src/use-deep-agent-chat-outbox.js.map +1 -1
- package/dist/agent-runtime/src/use-deep-agent-runtime.cjs +78 -14
- package/dist/agent-runtime/src/use-deep-agent-runtime.cjs.map +1 -1
- package/dist/agent-runtime/src/use-deep-agent-runtime.d.ts +34 -7
- package/dist/agent-runtime/src/use-deep-agent-runtime.js +79 -15
- package/dist/agent-runtime/src/use-deep-agent-runtime.js.map +1 -1
- package/dist/agent-runtime/src/use-deep-agent-thread.cjs +16 -1
- package/dist/agent-runtime/src/use-deep-agent-thread.cjs.map +1 -1
- package/dist/agent-runtime/src/use-deep-agent-thread.d.ts +7 -2
- package/dist/agent-runtime/src/use-deep-agent-thread.js +16 -1
- package/dist/agent-runtime/src/use-deep-agent-thread.js.map +1 -1
- package/dist/agent-runtime/src/use-deep-agent-voice.cjs +30 -4
- package/dist/agent-runtime/src/use-deep-agent-voice.cjs.map +1 -1
- package/dist/agent-runtime/src/use-deep-agent-voice.d.ts +22 -4
- package/dist/agent-runtime/src/use-deep-agent-voice.js +30 -4
- package/dist/agent-runtime/src/use-deep-agent-voice.js.map +1 -1
- package/dist/agent-runtime/src/withdrawn-turns.d.ts +5 -4
- package/dist/agent-runtime/src/word-device-fit.d.ts +174 -0
- package/dist/agent-runtime/src/work-in.d.ts +127 -0
- package/dist/assets/AthenaAssetEmbed.cjs.map +1 -1
- package/dist/assets/AthenaAssetEmbed.d.ts +6 -1
- package/dist/assets/AthenaAssetEmbed.js.map +1 -1
- package/dist/assets/asset-panel-store.cjs +13 -5
- package/dist/assets/asset-panel-store.cjs.map +1 -1
- package/dist/assets/asset-panel-store.d.ts +33 -2
- package/dist/assets/asset-panel-store.js +13 -5
- package/dist/assets/asset-panel-store.js.map +1 -1
- package/dist/auth/AthenaCredentialSourceContext.cjs +11 -0
- package/dist/auth/AthenaCredentialSourceContext.cjs.map +1 -1
- package/dist/auth/AthenaCredentialSourceContext.d.ts +6 -0
- package/dist/auth/AthenaCredentialSourceContext.js +11 -0
- package/dist/auth/AthenaCredentialSourceContext.js.map +1 -1
- package/dist/auth/account-identity.cjs +13 -2
- package/dist/auth/account-identity.cjs.map +1 -1
- package/dist/auth/account-identity.d.ts +9 -0
- package/dist/auth/account-identity.js +13 -2
- package/dist/auth/account-identity.js.map +1 -1
- package/dist/auth/credential-source.cjs +20 -4
- package/dist/auth/credential-source.cjs.map +1 -1
- package/dist/auth/credential-source.d.ts +9 -0
- package/dist/auth/credential-source.js +20 -4
- package/dist/auth/credential-source.js.map +1 -1
- package/dist/catalog/chat-pickers.cjs +31 -0
- package/dist/catalog/chat-pickers.cjs.map +1 -1
- package/dist/catalog/chat-pickers.d.ts +17 -0
- package/dist/catalog/chat-pickers.js +33 -2
- package/dist/catalog/chat-pickers.js.map +1 -1
- package/dist/catalog/runtime-catalog.cjs +63 -3
- package/dist/catalog/runtime-catalog.cjs.map +1 -1
- package/dist/catalog/runtime-catalog.d.ts +63 -3
- package/dist/catalog/runtime-catalog.js +64 -4
- package/dist/catalog/runtime-catalog.js.map +1 -1
- package/dist/chat/AthenaChat.cjs +301 -98
- package/dist/chat/AthenaChat.cjs.map +1 -1
- package/dist/chat/AthenaChat.d.ts +80 -4
- package/dist/chat/AthenaChat.js +302 -99
- package/dist/chat/AthenaChat.js.map +1 -1
- package/dist/chat/StatewireApprovalCard.cjs +35 -5
- package/dist/chat/StatewireApprovalCard.cjs.map +1 -1
- package/dist/chat/StatewireApprovalCard.d.ts +55 -2
- package/dist/chat/StatewireApprovalCard.js +37 -7
- package/dist/chat/StatewireApprovalCard.js.map +1 -1
- package/dist/chat/StatewireQueuedMessages.cjs +17 -2
- package/dist/chat/StatewireQueuedMessages.cjs.map +1 -1
- package/dist/chat/StatewireQueuedMessages.d.ts +8 -45
- package/dist/chat/StatewireQueuedMessages.js +18 -3
- package/dist/chat/StatewireQueuedMessages.js.map +1 -1
- package/dist/chat/chat-agent-mentions.cjs +70 -0
- package/dist/chat/chat-agent-mentions.cjs.map +1 -0
- package/dist/chat/chat-agent-mentions.d.ts +13 -0
- package/dist/chat/chat-agent-mentions.js +70 -0
- package/dist/chat/chat-agent-mentions.js.map +1 -0
- package/dist/chat/composer-actions.cjs +12 -0
- package/dist/chat/composer-actions.cjs.map +1 -0
- package/dist/chat/composer-actions.d.ts +22 -0
- package/dist/chat/composer-actions.js +12 -0
- package/dist/chat/composer-actions.js.map +1 -0
- package/dist/chat/follow-up-suggestions.cjs +185 -0
- package/dist/chat/follow-up-suggestions.cjs.map +1 -0
- package/dist/chat/follow-up-suggestions.d.ts +64 -0
- package/dist/chat/follow-up-suggestions.js +185 -0
- package/dist/chat/follow-up-suggestions.js.map +1 -0
- package/dist/chat/super-grouping/ToolTimeline.cjs +4 -3
- package/dist/chat/super-grouping/ToolTimeline.cjs.map +1 -1
- package/dist/chat/super-grouping/ToolTimeline.d.ts +7 -3
- package/dist/chat/super-grouping/ToolTimeline.js +4 -3
- package/dist/chat/super-grouping/ToolTimeline.js.map +1 -1
- package/dist/chat/turn-changes.cjs +284 -0
- package/dist/chat/turn-changes.cjs.map +1 -0
- package/dist/chat/turn-changes.d.ts +130 -0
- package/dist/chat/turn-changes.js +284 -0
- package/dist/chat/turn-changes.js.map +1 -0
- package/dist/chat/typed-interrupts/StatewireTypedInterruptCard.cjs +31 -0
- package/dist/chat/typed-interrupts/StatewireTypedInterruptCard.cjs.map +1 -0
- package/dist/chat/typed-interrupts/StatewireTypedInterruptCard.d.ts +31 -0
- package/dist/chat/typed-interrupts/StatewireTypedInterruptCard.js +31 -0
- package/dist/chat/typed-interrupts/StatewireTypedInterruptCard.js.map +1 -0
- package/dist/chat/typed-interrupts/approval-cards.cjs +250 -0
- package/dist/chat/typed-interrupts/approval-cards.cjs.map +1 -0
- package/dist/chat/typed-interrupts/approval-cards.d.ts +22 -0
- package/dist/chat/typed-interrupts/approval-cards.js +250 -0
- package/dist/chat/typed-interrupts/approval-cards.js.map +1 -0
- package/dist/chat/typed-interrupts/form-cards.cjs +289 -0
- package/dist/chat/typed-interrupts/form-cards.cjs.map +1 -0
- package/dist/chat/typed-interrupts/form-cards.d.ts +6 -0
- package/dist/chat/typed-interrupts/form-cards.js +289 -0
- package/dist/chat/typed-interrupts/form-cards.js.map +1 -0
- package/dist/chat/typed-interrupts/interrupt-card-shell.cjs +182 -0
- package/dist/chat/typed-interrupts/interrupt-card-shell.cjs.map +1 -0
- package/dist/chat/typed-interrupts/interrupt-card-shell.d.ts +47 -0
- package/dist/chat/typed-interrupts/interrupt-card-shell.js +182 -0
- package/dist/chat/typed-interrupts/interrupt-card-shell.js.map +1 -0
- package/dist/chat/typed-interrupts/json-schema-form.cjs +388 -0
- package/dist/chat/typed-interrupts/json-schema-form.cjs.map +1 -0
- package/dist/chat/typed-interrupts/json-schema-form.d.ts +33 -0
- package/dist/chat/typed-interrupts/json-schema-form.js +388 -0
- package/dist/chat/typed-interrupts/json-schema-form.js.map +1 -0
- package/dist/chat/typed-interrupts/questionnaire-card.cjs +449 -0
- package/dist/chat/typed-interrupts/questionnaire-card.cjs.map +1 -0
- package/dist/chat/typed-interrupts/questionnaire-card.d.ts +20 -0
- package/dist/chat/typed-interrupts/questionnaire-card.js +449 -0
- package/dist/chat/typed-interrupts/questionnaire-card.js.map +1 -0
- package/dist/chat/typed-interrupts/request-file-card.cjs +159 -0
- package/dist/chat/typed-interrupts/request-file-card.cjs.map +1 -0
- package/dist/chat/typed-interrupts/request-file-card.d.ts +2 -0
- package/dist/chat/typed-interrupts/request-file-card.js +159 -0
- package/dist/chat/typed-interrupts/request-file-card.js.map +1 -0
- package/dist/chat/typed-interrupts/toolkit-selection-card.cjs +189 -0
- package/dist/chat/typed-interrupts/toolkit-selection-card.cjs.map +1 -0
- package/dist/chat/typed-interrupts/toolkit-selection-card.d.ts +23 -0
- package/dist/chat/typed-interrupts/toolkit-selection-card.js +189 -0
- package/dist/chat/typed-interrupts/toolkit-selection-card.js.map +1 -0
- package/dist/chat/typed-interrupts/typed-interrupt-body.cjs +26 -0
- package/dist/chat/typed-interrupts/typed-interrupt-body.cjs.map +1 -0
- package/dist/chat/typed-interrupts/typed-interrupt-body.d.ts +3 -0
- package/dist/chat/typed-interrupts/typed-interrupt-body.js +26 -0
- package/dist/chat/typed-interrupts/typed-interrupt-body.js.map +1 -0
- package/dist/chat/typed-interrupts/typed-interrupt-graphql.cjs +105 -0
- package/dist/chat/typed-interrupts/typed-interrupt-graphql.cjs.map +1 -0
- package/dist/chat/typed-interrupts/typed-interrupt-graphql.d.ts +29 -0
- package/dist/chat/typed-interrupts/typed-interrupt-graphql.js +105 -0
- package/dist/chat/typed-interrupts/typed-interrupt-graphql.js.map +1 -0
- package/dist/chat/typed-interrupts/typed-interrupt-notice.cjs +70 -0
- package/dist/chat/typed-interrupts/typed-interrupt-notice.cjs.map +1 -0
- package/dist/chat/typed-interrupts/typed-interrupt-notice.d.ts +45 -0
- package/dist/chat/typed-interrupts/typed-interrupt-notice.js +70 -0
- package/dist/chat/typed-interrupts/typed-interrupt-notice.js.map +1 -0
- package/dist/chat/typed-interrupts/typed-interrupt-panel.cjs +76 -0
- package/dist/chat/typed-interrupts/typed-interrupt-panel.cjs.map +1 -0
- package/dist/chat/typed-interrupts/typed-interrupt-panel.d.ts +11 -0
- package/dist/chat/typed-interrupts/typed-interrupt-panel.js +76 -0
- package/dist/chat/typed-interrupts/typed-interrupt-panel.js.map +1 -0
- package/dist/chat/typed-interrupts/typed-interrupt-types.d.ts +46 -0
- package/dist/chat/typed-interrupts/use-interrupt-draft.cjs +106 -0
- package/dist/chat/typed-interrupts/use-interrupt-draft.cjs.map +1 -0
- package/dist/chat/typed-interrupts/use-interrupt-draft.d.ts +29 -0
- package/dist/chat/typed-interrupts/use-interrupt-draft.js +106 -0
- package/dist/chat/typed-interrupts/use-interrupt-draft.js.map +1 -0
- package/dist/chat/typed-interrupts/use-statewire-typed-interrupt.cjs +231 -0
- package/dist/chat/typed-interrupts/use-statewire-typed-interrupt.cjs.map +1 -0
- package/dist/chat/typed-interrupts/use-statewire-typed-interrupt.d.ts +66 -0
- package/dist/chat/typed-interrupts/use-statewire-typed-interrupt.js +231 -0
- package/dist/chat/typed-interrupts/use-statewire-typed-interrupt.js.map +1 -0
- package/dist/chat-ui/composer/composer-named-agents.cjs +13 -0
- package/dist/chat-ui/composer/composer-named-agents.cjs.map +1 -0
- package/dist/chat-ui/composer/composer-named-agents.d.ts +20 -0
- package/dist/chat-ui/composer/composer-named-agents.js +13 -0
- package/dist/chat-ui/composer/composer-named-agents.js.map +1 -0
- package/dist/chat-ui/composer/slash-command-menu.cjs +143 -0
- package/dist/chat-ui/composer/slash-command-menu.cjs.map +1 -0
- package/dist/chat-ui/composer/slash-command-menu.d.ts +19 -0
- package/dist/chat-ui/composer/slash-command-menu.js +143 -0
- package/dist/chat-ui/composer/slash-command-menu.js.map +1 -0
- package/dist/chat-ui/composer/slash-commands-extension.cjs +51 -0
- package/dist/chat-ui/composer/slash-commands-extension.cjs.map +1 -0
- package/dist/chat-ui/composer/slash-commands-extension.d.ts +39 -0
- package/dist/chat-ui/composer/slash-commands-extension.js +51 -0
- package/dist/chat-ui/composer/slash-commands-extension.js.map +1 -0
- package/dist/chat-ui/composer/slash-commands.cjs +74 -0
- package/dist/chat-ui/composer/slash-commands.cjs.map +1 -0
- package/dist/chat-ui/composer/slash-commands.d.ts +82 -0
- package/dist/chat-ui/composer/slash-commands.js +74 -0
- package/dist/chat-ui/composer/slash-commands.js.map +1 -0
- package/dist/chat-ui/composer/tiptap-composer.cjs +135 -9
- package/dist/chat-ui/composer/tiptap-composer.cjs.map +1 -1
- package/dist/chat-ui/composer/tiptap-composer.d.ts +61 -2
- package/dist/chat-ui/composer/tiptap-composer.js +135 -9
- package/dist/chat-ui/composer/tiptap-composer.js.map +1 -1
- package/dist/chat-ui/index.cjs +5 -0
- package/dist/chat-ui/index.cjs.map +1 -1
- package/dist/chat-ui/index.d.ts +4 -2
- package/dist/chat-ui/index.js +5 -0
- package/dist/chat-ui/index.js.map +1 -1
- package/dist/chat-ui/mentions/mention-chip.cjs +10 -4
- package/dist/chat-ui/mentions/mention-chip.cjs.map +1 -1
- package/dist/chat-ui/mentions/mention-chip.js +11 -5
- package/dist/chat-ui/mentions/mention-chip.js.map +1 -1
- package/dist/chat-ui/mentions/mention-extension.cjs +8 -1
- package/dist/chat-ui/mentions/mention-extension.cjs.map +1 -1
- package/dist/chat-ui/mentions/mention-extension.js +8 -1
- package/dist/chat-ui/mentions/mention-extension.js.map +1 -1
- package/dist/chat-ui/mentions/suggestions/components/get-scope-name.cjs +1 -0
- package/dist/chat-ui/mentions/suggestions/components/get-scope-name.cjs.map +1 -1
- package/dist/chat-ui/mentions/suggestions/components/get-scope-name.js +1 -0
- package/dist/chat-ui/mentions/suggestions/components/get-scope-name.js.map +1 -1
- package/dist/chat-ui/mentions/suggestions/components/mention-icon.cjs +20 -2
- package/dist/chat-ui/mentions/suggestions/components/mention-icon.cjs.map +1 -1
- package/dist/chat-ui/mentions/suggestions/components/mention-icon.d.ts +10 -1
- package/dist/chat-ui/mentions/suggestions/components/mention-icon.js +22 -4
- package/dist/chat-ui/mentions/suggestions/components/mention-icon.js.map +1 -1
- package/dist/chat-ui/mentions/suggestions/components/menu-item.cjs +1 -1
- package/dist/chat-ui/mentions/suggestions/components/menu-item.cjs.map +1 -1
- package/dist/chat-ui/mentions/suggestions/components/menu-item.js +1 -1
- package/dist/chat-ui/mentions/suggestions/components/menu-item.js.map +1 -1
- package/dist/chat-ui/mentions/suggestions/data/api-client.cjs +45 -0
- package/dist/chat-ui/mentions/suggestions/data/api-client.cjs.map +1 -1
- package/dist/chat-ui/mentions/suggestions/data/api-client.d.ts +48 -0
- package/dist/chat-ui/mentions/suggestions/data/api-client.js +45 -0
- package/dist/chat-ui/mentions/suggestions/data/api-client.js.map +1 -1
- package/dist/chat-ui/mentions/suggestions/data/sources/asset-type-icon-names.generated.cjs +89 -0
- package/dist/chat-ui/mentions/suggestions/data/sources/asset-type-icon-names.generated.cjs.map +1 -0
- package/dist/chat-ui/mentions/suggestions/data/sources/asset-type-icon-names.generated.d.ts +8 -0
- package/dist/chat-ui/mentions/suggestions/data/sources/asset-type-icon-names.generated.js +89 -0
- package/dist/chat-ui/mentions/suggestions/data/sources/asset-type-icon-names.generated.js.map +1 -0
- package/dist/chat-ui/mentions/suggestions/data/sources/asset-type-icons.cjs +140 -116
- package/dist/chat-ui/mentions/suggestions/data/sources/asset-type-icons.cjs.map +1 -1
- package/dist/chat-ui/mentions/suggestions/data/sources/asset-type-icons.d.ts +46 -12
- package/dist/chat-ui/mentions/suggestions/data/sources/asset-type-icons.js +141 -117
- package/dist/chat-ui/mentions/suggestions/data/sources/asset-type-icons.js.map +1 -1
- package/dist/chat-ui/mentions/suggestions/data/sources/index.cjs +272 -25
- package/dist/chat-ui/mentions/suggestions/data/sources/index.cjs.map +1 -1
- package/dist/chat-ui/mentions/suggestions/data/sources/index.d.ts +88 -10
- package/dist/chat-ui/mentions/suggestions/data/sources/index.js +274 -27
- package/dist/chat-ui/mentions/suggestions/data/sources/index.js.map +1 -1
- package/dist/chat-ui/mentions/suggestions/data/types.cjs.map +1 -1
- package/dist/chat-ui/mentions/suggestions/data/types.d.ts +27 -1
- package/dist/chat-ui/mentions/suggestions/data/types.js.map +1 -1
- package/dist/chat-ui/mentions/suggestions/data/use-mention-suggestions.cjs +56 -5
- package/dist/chat-ui/mentions/suggestions/data/use-mention-suggestions.cjs.map +1 -1
- package/dist/chat-ui/mentions/suggestions/data/use-mention-suggestions.d.ts +26 -6
- package/dist/chat-ui/mentions/suggestions/data/use-mention-suggestions.js +57 -6
- package/dist/chat-ui/mentions/suggestions/data/use-mention-suggestions.js.map +1 -1
- package/dist/chat-ui/mentions/suggestions/mention-suggestions.extension.cjs +34 -17
- package/dist/chat-ui/mentions/suggestions/mention-suggestions.extension.cjs.map +1 -1
- package/dist/chat-ui/mentions/suggestions/mention-suggestions.extension.d.ts +19 -1
- package/dist/chat-ui/mentions/suggestions/mention-suggestions.extension.js +35 -18
- package/dist/chat-ui/mentions/suggestions/mention-suggestions.extension.js.map +1 -1
- package/dist/chat-ui/mentions/use-asset-icon-app-url.cjs +12 -0
- package/dist/chat-ui/mentions/use-asset-icon-app-url.cjs.map +1 -0
- package/dist/chat-ui/mentions/use-asset-icon-app-url.d.ts +8 -0
- package/dist/chat-ui/mentions/use-asset-icon-app-url.js +12 -0
- package/dist/chat-ui/mentions/use-asset-icon-app-url.js.map +1 -0
- package/dist/chat-ui/statewire.d.ts +1 -1
- package/dist/chat-ui/thread/statewire-history-edge.cjs +15 -0
- package/dist/chat-ui/thread/statewire-history-edge.cjs.map +1 -1
- package/dist/chat-ui/thread/statewire-history-edge.d.ts +4 -1
- package/dist/chat-ui/thread/statewire-history-edge.js +15 -0
- package/dist/chat-ui/thread/statewire-history-edge.js.map +1 -1
- package/dist/collab/client.cjs +41 -6
- package/dist/collab/client.cjs.map +1 -1
- package/dist/collab/client.d.ts +38 -7
- package/dist/collab/client.js +41 -6
- package/dist/collab/client.js.map +1 -1
- package/dist/composer/ComposerAttachedReferences.cjs +119 -0
- package/dist/composer/ComposerAttachedReferences.cjs.map +1 -0
- package/dist/composer/ComposerAttachedReferences.d.ts +26 -0
- package/dist/composer/ComposerAttachedReferences.js +119 -0
- package/dist/composer/ComposerAttachedReferences.js.map +1 -0
- package/dist/composer/ComposerNamedAgents.cjs +63 -0
- package/dist/composer/ComposerNamedAgents.cjs.map +1 -0
- package/dist/composer/ComposerNamedAgents.d.ts +16 -0
- package/dist/composer/ComposerNamedAgents.js +63 -0
- package/dist/composer/ComposerNamedAgents.js.map +1 -0
- package/dist/composer/attached-references.cjs +159 -0
- package/dist/composer/attached-references.cjs.map +1 -0
- package/dist/composer/attached-references.d.ts +86 -0
- package/dist/composer/attached-references.js +159 -0
- package/dist/composer/attached-references.js.map +1 -0
- package/dist/composer/build-composed-message.cjs +14 -7
- package/dist/composer/build-composed-message.cjs.map +1 -1
- package/dist/composer/build-composed-message.d.ts +6 -1
- package/dist/composer/build-composed-message.js +14 -7
- package/dist/composer/build-composed-message.js.map +1 -1
- package/dist/composer/composer-handoff.cjs +6 -2
- package/dist/composer/composer-handoff.cjs.map +1 -1
- package/dist/composer/composer-handoff.d.ts +7 -1
- package/dist/composer/composer-handoff.js +6 -2
- package/dist/composer/composer-handoff.js.map +1 -1
- package/dist/composer/folder-upload.cjs +149 -0
- package/dist/composer/folder-upload.cjs.map +1 -0
- package/dist/composer/folder-upload.d.ts +79 -0
- package/dist/composer/folder-upload.js +149 -0
- package/dist/composer/folder-upload.js.map +1 -0
- package/dist/composer/index.d.ts +1 -1
- package/dist/composer/staged-message-metadata.cjs +12 -0
- package/dist/composer/staged-message-metadata.cjs.map +1 -0
- package/dist/composer/staged-message-metadata.d.ts +15 -0
- package/dist/composer/staged-message-metadata.js +12 -0
- package/dist/composer/staged-message-metadata.js.map +1 -0
- package/dist/composer/useAttachToChat.cjs +35 -0
- package/dist/composer/useAttachToChat.cjs.map +1 -0
- package/dist/composer/useAttachToChat.d.ts +54 -0
- package/dist/composer/useAttachToChat.js +35 -0
- package/dist/composer/useAttachToChat.js.map +1 -0
- package/dist/composer/useAttachedReferencesComposerProps.cjs +19 -0
- package/dist/composer/useAttachedReferencesComposerProps.cjs.map +1 -0
- package/dist/composer/useAttachedReferencesComposerProps.d.ts +12 -0
- package/dist/composer/useAttachedReferencesComposerProps.js +19 -0
- package/dist/composer/useAttachedReferencesComposerProps.js.map +1 -0
- package/dist/composer/useFileUpload.cjs +95 -7
- package/dist/composer/useFileUpload.cjs.map +1 -1
- package/dist/composer/useFileUpload.d.ts +21 -2
- package/dist/composer/useFileUpload.js +95 -7
- package/dist/composer/useFileUpload.js.map +1 -1
- package/dist/data/athena-api-error.cjs +125 -0
- package/dist/data/athena-api-error.cjs.map +1 -0
- package/dist/data/athena-api-error.d.ts +96 -0
- package/dist/data/athena-api-error.js +125 -0
- package/dist/data/athena-api-error.js.map +1 -0
- package/dist/data/athena-data-client.cjs +106 -0
- package/dist/data/athena-data-client.cjs.map +1 -0
- package/dist/data/athena-data-client.d.ts +74 -0
- package/dist/data/athena-data-client.js +106 -0
- package/dist/data/athena-data-client.js.map +1 -0
- package/dist/data/athena-member.cjs +93 -0
- package/dist/data/athena-member.cjs.map +1 -0
- package/dist/data/athena-member.d.ts +125 -0
- package/dist/data/athena-member.js +93 -0
- package/dist/data/athena-member.js.map +1 -0
- package/dist/data/athena-request.cjs +460 -0
- package/dist/data/athena-request.cjs.map +1 -0
- package/dist/data/athena-request.d.ts +120 -0
- package/dist/data/athena-request.js +460 -0
- package/dist/data/athena-request.js.map +1 -0
- package/dist/data/use-athena-fetch.cjs +14 -0
- package/dist/data/use-athena-fetch.cjs.map +1 -0
- package/dist/data/use-athena-fetch.d.ts +19 -0
- package/dist/data/use-athena-fetch.js +14 -0
- package/dist/data/use-athena-fetch.js.map +1 -0
- package/dist/data/use-athena-graphql.cjs +66 -0
- package/dist/data/use-athena-graphql.cjs.map +1 -0
- package/dist/data/use-athena-graphql.d.ts +56 -0
- package/dist/data/use-athena-graphql.js +66 -0
- package/dist/data/use-athena-graphql.js.map +1 -0
- package/dist/data/use-athena-rest.cjs +33 -0
- package/dist/data/use-athena-rest.cjs.map +1 -0
- package/dist/data/use-athena-rest.d.ts +21 -0
- package/dist/data/use-athena-rest.js +33 -0
- package/dist/data/use-athena-rest.js.map +1 -0
- package/dist/data/use-semantic-query.cjs +44 -0
- package/dist/data/use-semantic-query.cjs.map +1 -0
- package/dist/data/use-semantic-query.d.ts +92 -0
- package/dist/data/use-semantic-query.js +44 -0
- package/dist/data/use-semantic-query.js.map +1 -0
- package/dist/diagnostics/athena-diagnostics.cjs.map +1 -1
- package/dist/diagnostics/athena-diagnostics.d.ts +5 -1
- package/dist/diagnostics/athena-diagnostics.js.map +1 -1
- package/dist/diagnostics/errors.cjs +7 -0
- package/dist/diagnostics/errors.cjs.map +1 -1
- package/dist/diagnostics/errors.d.ts +7 -0
- package/dist/diagnostics/errors.js +7 -0
- package/dist/diagnostics/errors.js.map +1 -1
- package/dist/index.cjs +155 -11
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.ts +72 -13
- package/dist/index.js +148 -4
- package/dist/index.js.map +1 -1
- package/dist/keryx-http/src/initial-sync.cjs +64 -16
- package/dist/keryx-http/src/initial-sync.cjs.map +1 -1
- package/dist/keryx-http/src/initial-sync.d.ts +31 -1
- package/dist/keryx-http/src/initial-sync.js +64 -16
- package/dist/keryx-http/src/initial-sync.js.map +1 -1
- package/dist/keryx-http/src/own-awareness.cjs +20 -0
- package/dist/keryx-http/src/own-awareness.cjs.map +1 -0
- package/dist/keryx-http/src/own-awareness.d.ts +50 -0
- package/dist/keryx-http/src/own-awareness.js +20 -0
- package/dist/keryx-http/src/own-awareness.js.map +1 -0
- package/dist/keryx-http/src/update-attributions.cjs +26 -1
- package/dist/keryx-http/src/update-attributions.cjs.map +1 -1
- package/dist/keryx-http/src/update-attributions.d.ts +10 -1
- package/dist/keryx-http/src/update-attributions.js +26 -1
- package/dist/keryx-http/src/update-attributions.js.map +1 -1
- package/dist/offline/chat-outbox.cjs +262 -26
- package/dist/offline/chat-outbox.cjs.map +1 -1
- package/dist/offline/chat-outbox.d.ts +90 -12
- package/dist/offline/chat-outbox.js +263 -27
- package/dist/offline/chat-outbox.js.map +1 -1
- package/dist/provider/AthenaProvider.cjs +60 -22
- package/dist/provider/AthenaProvider.cjs.map +1 -1
- package/dist/provider/AthenaProvider.d.ts +24 -8
- package/dist/provider/AthenaProvider.js +61 -23
- package/dist/provider/AthenaProvider.js.map +1 -1
- package/dist/react/package.json.cjs +1 -1
- package/dist/react/package.json.js +1 -1
- package/dist/references/src/anchors/parse.cjs +11 -1
- package/dist/references/src/anchors/parse.cjs.map +1 -1
- package/dist/references/src/anchors/parse.js +11 -1
- package/dist/references/src/anchors/parse.js.map +1 -1
- package/dist/references/src/anchors/schemas.d.ts +1 -0
- package/dist/references/src/anchors/serialize.cjs +1 -0
- package/dist/references/src/anchors/serialize.cjs.map +1 -1
- package/dist/references/src/anchors/serialize.js +1 -0
- package/dist/references/src/anchors/serialize.js.map +1 -1
- package/dist/references/src/anchors/types.cjs +5 -0
- package/dist/references/src/anchors/types.cjs.map +1 -1
- package/dist/references/src/anchors/types.d.ts +9 -0
- package/dist/references/src/anchors/types.js +5 -0
- package/dist/references/src/anchors/types.js.map +1 -1
- package/dist/references/src/attachable.cjs +149 -0
- package/dist/references/src/attachable.cjs.map +1 -0
- package/dist/references/src/attachable.d.ts +87 -0
- package/dist/references/src/attachable.js +149 -0
- package/dist/references/src/attachable.js.map +1 -0
- package/dist/references/src/schemas.d.ts +2 -0
- package/dist/runtime/StatewirePlanModeLaneSync.cjs +93 -0
- package/dist/runtime/StatewirePlanModeLaneSync.cjs.map +1 -0
- package/dist/runtime/StatewirePlanModeLaneSync.d.ts +34 -0
- package/dist/runtime/StatewirePlanModeLaneSync.js +93 -0
- package/dist/runtime/StatewirePlanModeLaneSync.js.map +1 -0
- package/dist/runtime/StatewireThreadConfigLaneSync.cjs +2 -0
- package/dist/runtime/StatewireThreadConfigLaneSync.cjs.map +1 -1
- package/dist/runtime/StatewireThreadConfigLaneSync.d.ts +4 -0
- package/dist/runtime/StatewireThreadConfigLaneSync.js +2 -0
- package/dist/runtime/StatewireThreadConfigLaneSync.js.map +1 -1
- package/dist/runtime/statewire-plan-mode.cjs +71 -0
- package/dist/runtime/statewire-plan-mode.cjs.map +1 -0
- package/dist/runtime/statewire-plan-mode.d.ts +88 -0
- package/dist/runtime/statewire-plan-mode.js +71 -0
- package/dist/runtime/statewire-plan-mode.js.map +1 -0
- package/dist/runtime/statewire-run-config.cjs +3 -1
- package/dist/runtime/statewire-run-config.cjs.map +1 -1
- package/dist/runtime/statewire-run-config.d.ts +7 -0
- package/dist/runtime/statewire-run-config.js +3 -1
- package/dist/runtime/statewire-run-config.js.map +1 -1
- package/dist/runtime/statewire-session-key.cjs +11 -5
- package/dist/runtime/statewire-session-key.cjs.map +1 -1
- package/dist/runtime/statewire-session-key.d.ts +22 -10
- package/dist/runtime/statewire-session-key.js +11 -5
- package/dist/runtime/statewire-session-key.js.map +1 -1
- package/dist/runtime/useAthenaStatewireRuntime.cjs +64 -9
- package/dist/runtime/useAthenaStatewireRuntime.cjs.map +1 -1
- package/dist/runtime/useAthenaStatewireRuntime.d.ts +26 -10
- package/dist/runtime/useAthenaStatewireRuntime.js +66 -11
- package/dist/runtime/useAthenaStatewireRuntime.js.map +1 -1
- package/dist/search/useAthenaAssets.cjs +394 -0
- package/dist/search/useAthenaAssets.cjs.map +1 -0
- package/dist/search/useAthenaAssets.d.ts +186 -0
- package/dist/search/useAthenaAssets.js +394 -0
- package/dist/search/useAthenaAssets.js.map +1 -0
- package/dist/sheet-range/index.cjs +4 -0
- package/dist/sheet-range/index.cjs.map +1 -1
- package/dist/sheet-range/index.d.ts +4 -2
- package/dist/sheet-range/index.js +4 -0
- package/dist/sheet-range/index.js.map +1 -1
- package/dist/sheet-range/query-range.cjs +102 -0
- package/dist/sheet-range/query-range.cjs.map +1 -0
- package/dist/sheet-range/query-range.d.ts +46 -0
- package/dist/sheet-range/query-range.js +102 -0
- package/dist/sheet-range/query-range.js.map +1 -0
- package/dist/styles.css +1 -1
- package/dist/subagents/index.cjs +49 -0
- package/dist/subagents/index.cjs.map +1 -0
- package/dist/subagents/index.d.ts +16 -0
- package/dist/subagents/index.js +49 -0
- package/dist/subagents/index.js.map +1 -0
- package/dist/subagents/lane-follow.cjs +19 -0
- package/dist/subagents/lane-follow.cjs.map +1 -0
- package/dist/subagents/lane-follow.d.ts +9 -0
- package/dist/subagents/lane-follow.js +19 -0
- package/dist/subagents/lane-follow.js.map +1 -0
- package/dist/subagents/lane-model.cjs +178 -0
- package/dist/subagents/lane-model.cjs.map +1 -0
- package/dist/subagents/lane-model.d.ts +140 -0
- package/dist/subagents/lane-model.js +178 -0
- package/dist/subagents/lane-model.js.map +1 -0
- package/dist/subagents/lane-parts.cjs +517 -0
- package/dist/subagents/lane-parts.cjs.map +1 -0
- package/dist/subagents/lane-parts.d.ts +130 -0
- package/dist/subagents/lane-parts.js +517 -0
- package/dist/subagents/lane-parts.js.map +1 -0
- package/dist/subagents/subagent-lane-group.cjs +215 -0
- package/dist/subagents/subagent-lane-group.cjs.map +1 -0
- package/dist/subagents/subagent-lane-group.d.ts +67 -0
- package/dist/subagents/subagent-lane-group.js +215 -0
- package/dist/subagents/subagent-lane-group.js.map +1 -0
- package/dist/subagents/subagent-transcript-drawer.cjs +431 -0
- package/dist/subagents/subagent-transcript-drawer.cjs.map +1 -0
- package/dist/subagents/subagent-transcript-drawer.d.ts +78 -0
- package/dist/subagents/subagent-transcript-drawer.js +431 -0
- package/dist/subagents/subagent-transcript-drawer.js.map +1 -0
- package/dist/subagents/task-subagent-group.cjs +115 -0
- package/dist/subagents/task-subagent-group.cjs.map +1 -0
- package/dist/subagents/task-subagent-group.d.ts +36 -0
- package/dist/subagents/task-subagent-group.js +115 -0
- package/dist/subagents/task-subagent-group.js.map +1 -0
- package/dist/subagents/use-omitted-images-in-view.cjs +68 -0
- package/dist/subagents/use-omitted-images-in-view.cjs.map +1 -0
- package/dist/subagents/use-omitted-images-in-view.d.ts +21 -0
- package/dist/subagents/use-omitted-images-in-view.js +68 -0
- package/dist/subagents/use-omitted-images-in-view.js.map +1 -0
- package/dist/threads/Inbox.cjs +2 -2
- package/dist/threads/Inbox.cjs.map +1 -1
- package/dist/threads/SessionList.cjs +6 -6
- package/dist/threads/SessionList.cjs.map +1 -1
- package/dist/threads/SessionsPage.cjs +13 -7
- package/dist/threads/SessionsPage.cjs.map +1 -1
- package/dist/threads/SessionsPage.d.ts +10 -1
- package/dist/threads/SessionsPage.js +9 -3
- package/dist/threads/SessionsPage.js.map +1 -1
- package/dist/threads/session-list-model.cjs.map +1 -1
- package/dist/threads/session-list-model.d.ts +2 -1
- package/dist/threads/session-list-model.js.map +1 -1
- package/dist/threads/session-row-parts.cjs +3 -3
- package/dist/threads/session-row-parts.cjs.map +1 -1
- package/dist/threads/sessions-page-model.cjs +13 -5
- package/dist/threads/sessions-page-model.cjs.map +1 -1
- package/dist/threads/sessions-page-model.d.ts +7 -0
- package/dist/threads/sessions-page-model.js +11 -3
- package/dist/threads/sessions-page-model.js.map +1 -1
- package/dist/threads/sessions-page-storage.cjs +8 -8
- package/dist/threads/sessions-page-storage.cjs.map +1 -1
- package/dist/threads/sessions-page-storage.d.ts +5 -1
- package/dist/threads/sessions-page-storage.js +8 -8
- package/dist/threads/sessions-page-storage.js.map +1 -1
- package/dist/threads/statewire-thread-list.cjs +14 -2
- package/dist/threads/statewire-thread-list.cjs.map +1 -1
- package/dist/threads/statewire-thread-list.d.ts +11 -2
- package/dist/threads/statewire-thread-list.js +14 -2
- package/dist/threads/statewire-thread-list.js.map +1 -1
- package/dist/threads/use-athena-sessions.cjs +1 -0
- package/dist/threads/use-athena-sessions.cjs.map +1 -1
- package/dist/threads/use-athena-sessions.d.ts +7 -0
- package/dist/threads/use-athena-sessions.js +1 -0
- package/dist/threads/use-athena-sessions.js.map +1 -1
- package/dist/threads/use-athena-thread-agent.cjs +31 -0
- package/dist/threads/use-athena-thread-agent.cjs.map +1 -0
- package/dist/threads/use-athena-thread-agent.d.ts +38 -0
- package/dist/threads/use-athena-thread-agent.js +31 -0
- package/dist/threads/use-athena-thread-agent.js.map +1 -0
- package/dist/threads/use-athena-thread-plan-mode.cjs +18 -0
- package/dist/threads/use-athena-thread-plan-mode.cjs.map +1 -0
- package/dist/threads/use-athena-thread-plan-mode.d.ts +18 -0
- package/dist/threads/use-athena-thread-plan-mode.js +18 -0
- package/dist/threads/use-athena-thread-plan-mode.js.map +1 -0
- package/dist/threads/use-rest-conversation-history.d.ts +1 -0
- package/dist/tools/agent-creations.cjs +97 -0
- package/dist/tools/agent-creations.cjs.map +1 -0
- package/dist/tools/agent-creations.d.ts +38 -0
- package/dist/tools/agent-creations.js +97 -0
- package/dist/tools/agent-creations.js.map +1 -0
- package/dist/tools/agent-highlights.cjs +100 -0
- package/dist/tools/agent-highlights.cjs.map +1 -0
- package/dist/tools/agent-highlights.d.ts +57 -0
- package/dist/tools/agent-highlights.js +100 -0
- package/dist/tools/agent-highlights.js.map +1 -0
- package/dist/tools/append-document-tool-ui.cjs +1 -0
- package/dist/tools/append-document-tool-ui.cjs.map +1 -1
- package/dist/tools/append-document-tool-ui.d.ts +7 -0
- package/dist/tools/append-document-tool-ui.js +2 -1
- package/dist/tools/append-document-tool-ui.js.map +1 -1
- package/dist/tools/auto-open-tools.cjs +144 -71
- package/dist/tools/auto-open-tools.cjs.map +1 -1
- package/dist/tools/auto-open-tools.d.ts +131 -1
- package/dist/tools/auto-open-tools.js +145 -72
- package/dist/tools/auto-open-tools.js.map +1 -1
- package/dist/tools/browser-tool-uis.cjs +594 -0
- package/dist/tools/browser-tool-uis.cjs.map +1 -0
- package/dist/tools/browser-tool-uis.d.ts +8 -0
- package/dist/tools/browser-tool-uis.js +594 -0
- package/dist/tools/browser-tool-uis.js.map +1 -0
- package/dist/tools/computer-asset-tool-uis.cjs +313 -0
- package/dist/tools/computer-asset-tool-uis.cjs.map +1 -0
- package/dist/tools/computer-asset-tool-uis.d.ts +5 -0
- package/dist/tools/computer-asset-tool-uis.js +313 -0
- package/dist/tools/computer-asset-tool-uis.js.map +1 -0
- package/dist/tools/document-edit-tool-uis.cjs +218 -0
- package/dist/tools/document-edit-tool-uis.cjs.map +1 -0
- package/dist/tools/document-edit-tool-uis.d.ts +40 -0
- package/dist/tools/document-edit-tool-uis.js +218 -0
- package/dist/tools/document-edit-tool-uis.js.map +1 -0
- package/dist/tools/drive-tool-uis.cjs +429 -0
- package/dist/tools/drive-tool-uis.cjs.map +1 -0
- package/dist/tools/drive-tool-uis.d.ts +121 -0
- package/dist/tools/drive-tool-uis.js +429 -0
- package/dist/tools/drive-tool-uis.js.map +1 -0
- package/dist/tools/email-calendar-tool-uis.cjs +789 -0
- package/dist/tools/email-calendar-tool-uis.cjs.map +1 -0
- package/dist/tools/email-calendar-tool-uis.d.ts +129 -0
- package/dist/tools/email-calendar-tool-uis.js +789 -0
- package/dist/tools/email-calendar-tool-uis.js.map +1 -0
- package/dist/tools/ontology-tool-uis.cjs +83 -0
- package/dist/tools/ontology-tool-uis.cjs.map +1 -0
- package/dist/tools/ontology-tool-uis.d.ts +9 -0
- package/dist/tools/ontology-tool-uis.js +83 -0
- package/dist/tools/ontology-tool-uis.js.map +1 -0
- package/dist/tools/orchestration-tool-uis.cjs +586 -0
- package/dist/tools/orchestration-tool-uis.cjs.map +1 -0
- package/dist/tools/orchestration-tool-uis.d.ts +141 -0
- package/dist/tools/orchestration-tool-uis.js +586 -0
- package/dist/tools/orchestration-tool-uis.js.map +1 -0
- package/dist/tools/presentation-edit-tool-uis.cjs +516 -0
- package/dist/tools/presentation-edit-tool-uis.cjs.map +1 -0
- package/dist/tools/presentation-edit-tool-uis.d.ts +73 -0
- package/dist/tools/presentation-edit-tool-uis.js +516 -0
- package/dist/tools/presentation-edit-tool-uis.js.map +1 -0
- package/dist/tools/project-tool-uis.cjs +213 -0
- package/dist/tools/project-tool-uis.cjs.map +1 -0
- package/dist/tools/project-tool-uis.d.ts +14 -0
- package/dist/tools/project-tool-uis.js +213 -0
- package/dist/tools/project-tool-uis.js.map +1 -0
- package/dist/tools/sandbox-tool-uis.cjs +491 -0
- package/dist/tools/sandbox-tool-uis.cjs.map +1 -0
- package/dist/tools/sandbox-tool-uis.d.ts +116 -0
- package/dist/tools/sandbox-tool-uis.js +491 -0
- package/dist/tools/sandbox-tool-uis.js.map +1 -0
- package/dist/tools/sheet-query-tool-ui.cjs +138 -0
- package/dist/tools/sheet-query-tool-ui.cjs.map +1 -0
- package/dist/tools/sheet-query-tool-ui.d.ts +15 -0
- package/dist/tools/sheet-query-tool-ui.js +138 -0
- package/dist/tools/sheet-query-tool-ui.js.map +1 -0
- package/dist/tools/studio-screenshot-tool-uis.cjs +262 -0
- package/dist/tools/studio-screenshot-tool-uis.cjs.map +1 -0
- package/dist/tools/studio-screenshot-tool-uis.d.ts +52 -0
- package/dist/tools/studio-screenshot-tool-uis.js +262 -0
- package/dist/tools/studio-screenshot-tool-uis.js.map +1 -0
- package/dist/tools/subagent-task-tool-ui.cjs +24 -475
- package/dist/tools/subagent-task-tool-ui.cjs.map +1 -1
- package/dist/tools/subagent-task-tool-ui.d.ts +19 -103
- package/dist/tools/subagent-task-tool-ui.js +28 -479
- package/dist/tools/subagent-task-tool-ui.js.map +1 -1
- package/dist/tools/tool-summary.cjs +36 -0
- package/dist/tools/tool-summary.cjs.map +1 -1
- package/dist/tools/tool-summary.js +36 -0
- package/dist/tools/tool-summary.js.map +1 -1
- package/dist/tools/tool-uis.cjs +181 -53
- package/dist/tools/tool-uis.cjs.map +1 -1
- package/dist/tools/tool-uis.d.ts +40 -0
- package/dist/tools/tool-uis.js +183 -55
- package/dist/tools/tool-uis.js.map +1 -1
- package/dist/typed-interrupts/index.cjs +15 -0
- package/dist/typed-interrupts/index.cjs.map +1 -0
- package/dist/typed-interrupts/index.d.ts +20 -0
- package/dist/typed-interrupts/index.js +15 -0
- package/dist/typed-interrupts/index.js.map +1 -0
- package/dist/version.cjs +4 -0
- package/dist/version.cjs.map +1 -1
- package/dist/version.d.ts +9 -0
- package/dist/version.js +4 -0
- package/dist/version.js.map +1 -1
- package/dist/workbench/live-desktop-api.cjs +2 -1
- package/dist/workbench/live-desktop-api.cjs.map +1 -1
- package/dist/workbench/live-desktop-api.js +2 -1
- package/dist/workbench/live-desktop-api.js.map +1 -1
- package/dist/workbench/session-workbench-panes.cjs +6 -6
- package/dist/workbench/session-workbench-panes.cjs.map +1 -1
- package/dist/workbench/session-workspace-api.cjs +7 -2
- package/dist/workbench/session-workspace-api.cjs.map +1 -1
- package/dist/workbench/session-workspace-api.d.ts +10 -0
- package/dist/workbench/session-workspace-api.js +7 -2
- package/dist/workbench/session-workspace-api.js.map +1 -1
- package/package.json +28 -6
- package/dist/agent-runtime/src/chat-outbox-store.cjs +0 -510
- package/dist/agent-runtime/src/chat-outbox-store.cjs.map +0 -1
- package/dist/agent-runtime/src/chat-outbox-store.d.ts +0 -210
- package/dist/agent-runtime/src/chat-outbox-store.js +0 -510
- package/dist/agent-runtime/src/chat-outbox-store.js.map +0 -1
package/README.md
CHANGED
|
@@ -30,6 +30,15 @@ with `scripts/computer-starter-lockfiles.ts --react <version>`; their
|
|
|
30
30
|
release-age gate. The qualification steps and gate removal condition are
|
|
31
31
|
in the [coordinated release runbook](../../docs/runbooks/coordinated-client-releases.md#public-native-context-publication-gate).
|
|
32
32
|
|
|
33
|
+
SDK 0.59.0 moves to statewire 0.27 and Athena's 2026-11-04 command contract:
|
|
34
|
+
every message is one `run/send`, on wire 2026-11-01. Athena's hosts serve it
|
|
35
|
+
from the release that added `run/send` (agora on Python statewire 0.23.1,
|
|
36
|
+
Athena's managed cloud since November 8, 2026), and an older host cannot serve
|
|
37
|
+
a 0.59.0 chat: a customer deployment upgrades its own Athena before moving its
|
|
38
|
+
apps to 0.59.0 (see [What's new in 0.59.0](#whats-new-in-0590)). 0.58.0, which
|
|
39
|
+
first offered wire 2026-11-01, was tagged but never published; 0.59.0 carries
|
|
40
|
+
it.
|
|
41
|
+
|
|
33
42
|
The SDK pins its assistant-ui runtime (`@assistant-ui/tap`, `store`, `core`,
|
|
34
43
|
`react`, `react-statewire`, `statewire`) at exact versions, and those packages
|
|
35
44
|
carry React contexts and module singletons: an app must resolve exactly **one**
|
|
@@ -212,10 +221,162 @@ never changes these props after the first send writes nothing. The
|
|
|
212
221
|
For a collab agent whose author restricts it to its own models, see
|
|
213
222
|
[Offering an agent's own models](#offering-an-agents-own-models).
|
|
214
223
|
|
|
224
|
+
**A session's own agent.** `agent` seeds a new session's agent on its first
|
|
225
|
+
send; after that the session's server config names its agent for good
|
|
226
|
+
(`collab_agent_id` is a key the config owns), whatever `agent` says. Read it
|
|
227
|
+
with `useAthenaThreadAgent()` (inside `<AthenaProvider>`): `{ agentId,
|
|
228
|
+
configured, ready }`, `agentId` the collab agent's asset id or `null` for the
|
|
229
|
+
person's own Athena assistant; wait for `ready`, as with the model.
|
|
230
|
+
|
|
231
|
+
**Grouping models by family.** Each `AthenaModelOption` of
|
|
232
|
+
`useAthenaModelCatalog()` also carries its place in its family, as agora's
|
|
233
|
+
model registry names it: `variantMode` (`STANDARD`, `THINKING`, `PRO`),
|
|
234
|
+
`variantEffort` (`NONE`, `LOW`, `MEDIUM`, `HIGH`, `XHIGH`, `MAX`) and
|
|
235
|
+
`variantServiceTier` (`STANDARD`, `FAST`), `null` where it names none. A picker
|
|
236
|
+
can show one row per family (`familyId`) and an effort control instead of one
|
|
237
|
+
row per model and effort.
|
|
238
|
+
|
|
239
|
+
**Agents with who made them.** `useAthenaAgentDirectory()` lists the agents
|
|
240
|
+
`useAthenaAgentCatalog()` lists, each with `createdBy` (agora's user id of the
|
|
241
|
+
person who made it) and `updatedAt`, so a picker can put the person's own
|
|
242
|
+
agents first. It is a query of its own (`AthenaAgentDirectory`); the catalog
|
|
243
|
+
is unchanged.
|
|
244
|
+
|
|
215
245
|
If `config.appUrl` is omitted, the provider resolves it from the parent bridge or from the matching Athena environment defaults. Known Athena staging and production `apiUrl` and `backendUrl` values automatically fall back to the corresponding frontend origin.
|
|
216
246
|
|
|
217
247
|
Use `trustedParentOrigins` when the SDK runs inside an iframe on a private-cloud or custom parent domain and you want to explicitly allow postMessage auth/config from that parent. Only the window that frames the app is heard. By default `athenaintel.com` hosts, localhost and your own origin are trusted, except the hosts that serve customer-written code (`*.app.athenaintel.com`, `*.code-sandpack.athenaintel.com` and friends; see "What's new in 0.28.0").
|
|
218
248
|
|
|
249
|
+
### Plan mode
|
|
250
|
+
|
|
251
|
+
Plan mode is the agent's to-do plan: for multi-step work it writes the steps
|
|
252
|
+
down (`write_todos`) and checks them off as it goes, which `AthenaChat` shows
|
|
253
|
+
above the composer (`AthenaPlanStrip`). A thread plans unless its config
|
|
254
|
+
excludes the `write_todos` tool or its `TodoListMiddleware`, which is what
|
|
255
|
+
Athena on the web's Plan Mode switch does. Pass `planMode` to turn it off or
|
|
256
|
+
back on:
|
|
257
|
+
|
|
258
|
+
```tsx
|
|
259
|
+
import { AthenaChat, AthenaProvider, ChatPlanModeToggle } from '@athenaintel/react';
|
|
260
|
+
|
|
261
|
+
function Chat() {
|
|
262
|
+
const [planMode, setPlanMode] = useState(true);
|
|
263
|
+
return (
|
|
264
|
+
<AthenaProvider config={config} planMode={planMode}>
|
|
265
|
+
<AthenaChat
|
|
266
|
+
composer={{ toolbarStart: <ChatPlanModeToggle value={planMode} onChange={setPlanMode} /> }}
|
|
267
|
+
/>
|
|
268
|
+
</AthenaProvider>
|
|
269
|
+
);
|
|
270
|
+
}
|
|
271
|
+
```
|
|
272
|
+
|
|
273
|
+
- `planMode={false}` adds `write_todos` to the send's `excluded_tools` and
|
|
274
|
+
`TodoListMiddleware` to its `excluded_middleware`, after anything your
|
|
275
|
+
`extraRunConfig` excludes; `true` takes them out; omitting it sends neither.
|
|
276
|
+
- As with `model`, changing it while a session is open applies to the next
|
|
277
|
+
turn: on a session with server config the SDK writes one `config/patch` of
|
|
278
|
+
the lists that change, computed from the session's own lists, so what
|
|
279
|
+
another client excluded stays excluded. The value a session is opened with
|
|
280
|
+
is never written. `useAthenaThreadPlanMode()` reads a session's own plan
|
|
281
|
+
mode (`{ planMode, configured, ready }`, as `useAthenaThreadModel` reads its
|
|
282
|
+
model); a refused write is a `statewire.config` diagnostics event with
|
|
283
|
+
`plan_mode` and its `config_keys`.
|
|
284
|
+
- A collab agent whose author turned off its built-in tools never plans: a
|
|
285
|
+
run can only narrow what an agent may use.
|
|
286
|
+
- `ChatPlanModeToggle` is the composer chip (a switch reading "Plan"),
|
|
287
|
+
controlled like the pickers.
|
|
288
|
+
|
|
289
|
+
### Folding attach and `@` into a menu of your own
|
|
290
|
+
|
|
291
|
+
A host that offers attaching and the `@` menu from a control of its own (a +
|
|
292
|
+
menu, as Athena Desktop's composer has) turns the composer's own buttons off
|
|
293
|
+
and runs them from a slot:
|
|
294
|
+
|
|
295
|
+
```tsx
|
|
296
|
+
import { AthenaChat, useAthenaComposerActions } from '@athenaintel/react';
|
|
297
|
+
|
|
298
|
+
function AddMenu() {
|
|
299
|
+
const composer = useAthenaComposerActions();
|
|
300
|
+
return (
|
|
301
|
+
<MyMenu>
|
|
302
|
+
<MyItem disabled={composer?.needsConnectionReason != null} onSelect={() => composer?.openFilePicker()}>
|
|
303
|
+
Files…
|
|
304
|
+
</MyItem>
|
|
305
|
+
<MyItem onSelect={() => composer?.openMentionMenu()}>An asset or person</MyItem>
|
|
306
|
+
</MyMenu>
|
|
307
|
+
);
|
|
308
|
+
}
|
|
309
|
+
|
|
310
|
+
<AthenaChat composer={{ attachButton: false, mentionButton: false, toolbarStart: <AddMenu /> }} />;
|
|
311
|
+
```
|
|
312
|
+
|
|
313
|
+
- `attachButton: false` leaves the paperclip out; pasting and dropping files
|
|
314
|
+
still attach them. `openFilePicker()` opens the same picker the paperclip
|
|
315
|
+
does, and does nothing while `needsConnectionReason` is set.
|
|
316
|
+
- `mentionButton: false` leaves the `@` button out; typing `@` still opens the
|
|
317
|
+
menu, and so does `openMentionMenu()`.
|
|
318
|
+
- `useAthenaComposerActions()` is `null` outside a composer slot. Both default
|
|
319
|
+
to `true`: a host that sets neither sees no change.
|
|
320
|
+
|
|
321
|
+
### Composer slash commands
|
|
322
|
+
|
|
323
|
+
`AthenaChat`'s `composer.slashCommands` (and `TiptapComposer`'s
|
|
324
|
+
`slashCommands`) give the composer a `/` menu of your own commands. Typing `/`
|
|
325
|
+
at the start of the draft or after a space lists them, narrowed by what
|
|
326
|
+
follows (a command's label, `name` or `aliases`). Arrows move through the
|
|
327
|
+
list, and Enter, Tab or a click runs the selected command. Escape closes it.
|
|
328
|
+
Enter sends nothing while the menu lists a command. A command that declares
|
|
329
|
+
`args` (what it takes, as the menu shows it) gets the text typed after its
|
|
330
|
+
name; any other command drops out of the menu once more words follow its name,
|
|
331
|
+
so a message that starts with a command's word is sent as typed:
|
|
332
|
+
|
|
333
|
+
```tsx
|
|
334
|
+
import { ListChecksIcon, MessageSquarePlusIcon } from 'lucide-react';
|
|
335
|
+
import type { ComposerSlashCommand } from '@athenaintel/react';
|
|
336
|
+
|
|
337
|
+
const commands: ComposerSlashCommand[] = [
|
|
338
|
+
{
|
|
339
|
+
name: 'new',
|
|
340
|
+
label: 'New chat',
|
|
341
|
+
description: 'Start a new conversation',
|
|
342
|
+
aliases: ['clear'],
|
|
343
|
+
icon: MessageSquarePlusIcon,
|
|
344
|
+
group: 'Chat',
|
|
345
|
+
run: () => startNewChat(),
|
|
346
|
+
},
|
|
347
|
+
{
|
|
348
|
+
name: planMode ? 'plan-off' : 'plan-on',
|
|
349
|
+
label: planMode ? 'Turn plan mode off' : 'Turn plan mode on',
|
|
350
|
+
description: 'The to-do plan for multi-step work',
|
|
351
|
+
aliases: ['plan', planMode ? 'plan off' : 'plan on'],
|
|
352
|
+
icon: ListChecksIcon,
|
|
353
|
+
group: 'Chat',
|
|
354
|
+
run: () => setPlanMode(!planMode),
|
|
355
|
+
},
|
|
356
|
+
{
|
|
357
|
+
name: 'open',
|
|
358
|
+
label: 'Open a document',
|
|
359
|
+
description: 'Open the document a link names',
|
|
360
|
+
// `/open https://…` gives `args` "https://…".
|
|
361
|
+
args: 'a link',
|
|
362
|
+
run: ({ args }) => openDocument(args),
|
|
363
|
+
},
|
|
364
|
+
];
|
|
365
|
+
|
|
366
|
+
<AthenaChat composer={{ slashCommands: commands }} />;
|
|
367
|
+
```
|
|
368
|
+
|
|
369
|
+
- The typed `/name args` leaves the draft before `run` is called;
|
|
370
|
+
`insertText` puts text in its place, as typed.
|
|
371
|
+
- A command with a `disabledReason` lists greyed with the reason and does not
|
|
372
|
+
run (a command that needs a connection, while there is none).
|
|
373
|
+
- The list is read on every keystroke, so a command's label or
|
|
374
|
+
`disabledReason` can change while the menu is open. Without commands, `/` is
|
|
375
|
+
plain text.
|
|
376
|
+
- A `run` that throws or rejects is reported as a `composer.slash_command`
|
|
377
|
+
diagnostics event (`slash_command_failed`); what the person should see is the
|
|
378
|
+
command's to say.
|
|
379
|
+
|
|
219
380
|
## Transport (statewire only, as of 0.18.0)
|
|
220
381
|
|
|
221
382
|
The SDK speaks one chat transport: **statewire**. The provider attaches to the
|
|
@@ -258,7 +419,7 @@ What the statewire transport wires up in `AthenaChat`:
|
|
|
258
419
|
|
|
259
420
|
- **Approvals (HITL):** when the backend parks a run on an approval-gated
|
|
260
421
|
tool call, an approval card renders above the composer with Approve/Reject
|
|
261
|
-
(or
|
|
422
|
+
(or Decline for a park it has no card for) and resumes the run through the statewire
|
|
262
423
|
`run/input` command. Hosts that build their own thread UI should mount the
|
|
263
424
|
exported `StatewireApprovalCard` themselves — without it an approval-gated
|
|
264
425
|
run stays parked with no way to answer it. A lone call whose resolved
|
|
@@ -279,6 +440,34 @@ What the statewire transport wires up in `AthenaChat`:
|
|
|
279
440
|
confirmed there. Its `onPending` gets the code and link to show while the
|
|
280
441
|
tab is open; `useBrowserDecisionConfirmer` takes your own request and opener
|
|
281
442
|
when the provider's don't fit (an extension, an Office add-in).
|
|
443
|
+
- **The agent's typed questions and approvals:** when a run parks on a typed
|
|
444
|
+
Athena interrupt, `AthenaChat` renders that kind's own card, the ones Athena
|
|
445
|
+
on the web shows, and answers with the resume shape its tool validates (a
|
|
446
|
+
host that mounts `StatewireApprovalCard` itself passes
|
|
447
|
+
`typedInterrupts={statewireTypedInterrupts}`, from
|
|
448
|
+
`@athenaintel/react/typed-interrupts`; without it a typed park keeps the
|
|
449
|
+
card's decline): the `ask` tool's questionnaire (one question
|
|
450
|
+
at a time, yes / no, one or several options, text, a comment on each, a
|
|
451
|
+
draft kept on agora), a file request (uploaded into Athena assets), a form
|
|
452
|
+
(from the resume model's JSON Schema), toolkits to turn on or off (with the
|
|
453
|
+
tool cap's headroom), a saved login to use, a project schedule, a wait, and
|
|
454
|
+
a tool-raised approval; any other `custom` park gets its schema's form. A
|
|
455
|
+
timed park counts down and stops its timer the first time the person
|
|
456
|
+
touches the card. Approving a typed approval (toolkits, a saved login, a
|
|
457
|
+
schedule, a tool-raised approval) goes through `confirmDecision` like any
|
|
458
|
+
approval, and agora holds it to a signed-in person: when it refuses an
|
|
459
|
+
answer, the card says why (for an app signed in with a key, where to answer
|
|
460
|
+
instead). Answering a question never asks. `isHandledElsewhere`, `readOnly`
|
|
461
|
+
and `onResumeRejected` apply to these cards too, and a host whose own cards
|
|
462
|
+
answer typed parks (Olympus) passes no `typedInterrupts` and never imports
|
|
463
|
+
that entry, so it bundles neither the SDK's cards nor its selector. The
|
|
464
|
+
cards load on the first typed park. For an approval UI of your own, the same
|
|
465
|
+
entry has `StatewireTypedInterruptCard`, which mounts them alone,
|
|
466
|
+
`useStatewireTypedInterrupt`, the engine behind them, `TypedInterruptCard`,
|
|
467
|
+
which renders one from an engine slice of your own, and the payload
|
|
468
|
+
contract's selector and parser (`isTypedInterruptRequest`,
|
|
469
|
+
`parseTypedInterruptPayload`); each kind's reader and resume are
|
|
470
|
+
`@athenaintel/agent-runtime/typed-interrupt-kinds`'.
|
|
282
471
|
- **Frontend tools:** tools in `frontendTools` with a local `execute` are
|
|
283
472
|
declared to the backend as `client_tools` and executed by the mounted
|
|
284
473
|
client-tool bridge, which resumes the run with each tool's result.
|
|
@@ -523,7 +712,8 @@ The provider asks for pull-request state by default in thread-list mode
|
|
|
523
712
|
never shows the chips to spare the server the lookup). The pure rules behind
|
|
524
713
|
the rows — `groupSessions`, `sessionIndicator`, `sessionSecondaryLine`,
|
|
525
714
|
`pullRequestChip`, `orderedPullRequests`, `sessionOriginLabel` — are exported for hosts drawing their
|
|
526
|
-
own rows
|
|
715
|
+
own rows, also alone as `@athenaintel/react/session-list-model`, which loads nothing else of the SDK;
|
|
716
|
+
`useAthenaStatewireThreadList().setFavorited({ threadId,
|
|
527
717
|
isFavorited })` is the toggle behind them.
|
|
528
718
|
|
|
529
719
|
### `useAthenaSessionAttention(threadId?)`
|
|
@@ -637,7 +827,13 @@ import { AthenaProvider, InboxButton, SessionsPage } from '@athenaintel/react';
|
|
|
637
827
|
first; group by what each session needs (Needs you, Working, Ready,
|
|
638
828
|
Waiting, Error, Done), by run status, or not at all; show or hide the
|
|
639
829
|
Status, Origin, Mode, Pull requests, Creator, Created and Updated columns
|
|
640
|
-
(remembered per browser).
|
|
830
|
+
(remembered per browser). `defaultHiddenColumns` (typed `SessionsColumnId[]`)
|
|
831
|
+
chooses which columns start hidden; every other column shows. The default is
|
|
832
|
+
`DEFAULT_HIDDEN_SESSIONS_COLUMNS` (Mode, Creator, Created). An app whose
|
|
833
|
+
sessions have no pull requests passes
|
|
834
|
+
`defaultHiddenColumns={[...DEFAULT_HIDDEN_SESSIONS_COLUMNS, 'pullRequests']}`.
|
|
835
|
+
The person can still show any column. Once they change the display, their
|
|
836
|
+
choice is remembered and replaces the host's default.
|
|
641
837
|
- **A status column that says what to do.** `sessionStatusChip`: the server's
|
|
642
838
|
next action where the person must act ("Approve send email", "Merge #12"),
|
|
643
839
|
else Working / Sleeping (a follow-up is pending) / Waiting / Error /
|
|
@@ -719,6 +915,15 @@ body used to drop it. With `threadListAgentHome`, `home_agent_id` rides beside
|
|
|
719
915
|
it, and the answer's `home_agent_applied` says whether the list holds the
|
|
720
916
|
agent's conversations (absent on an older server: it does not).
|
|
721
917
|
|
|
918
|
+
`firstPageUpdatedAt` says when the query's first page was last written (ms
|
|
919
|
+
since the epoch; 0 before it has any). With `offlineHistory` the first page can
|
|
920
|
+
be the copy the device kept, painted at once while agora is asked again: that
|
|
921
|
+
copy carries its old stamp until agora answers, and a refresh that fails leaves
|
|
922
|
+
the stamp as it was. A host that must act only on what agora said since it
|
|
923
|
+
started (Athena Desktop's needs-you notifications) compares it with its own
|
|
924
|
+
start time. `useConversationList` in `@athenaintel/agent-runtime` reports the
|
|
925
|
+
same stamp.
|
|
926
|
+
|
|
722
927
|
## Session workbench
|
|
723
928
|
|
|
724
929
|
A Devin-style workspace pane beside the chat for the active session: a tab
|
|
@@ -826,6 +1031,122 @@ registry entries (`SESSION_WORKBENCH_TASKS_PANE`, …), the data hooks
|
|
|
826
1031
|
(`deriveShellRows`, `filterShellRows`, `deriveTaskSteps`, `taskProgress`,
|
|
827
1032
|
`workspaceComputers`) are exported for hosts composing their own.
|
|
828
1033
|
|
|
1034
|
+
## Suggested follow-up prompts
|
|
1035
|
+
|
|
1036
|
+
`<AthenaChat followUpSuggestions />` suggests what the person might send next,
|
|
1037
|
+
as Codex's desktop app does after a turn. It is off by default, and while it is
|
|
1038
|
+
off nothing is requested.
|
|
1039
|
+
|
|
1040
|
+
```tsx
|
|
1041
|
+
<AthenaChat followUpSuggestions={isCodingChat} />
|
|
1042
|
+
```
|
|
1043
|
+
|
|
1044
|
+
- **When.** Once a run the person watched finishes with a reply, the chat asks
|
|
1045
|
+
Athena once for that turn (`POST /api/chat/follow-up-suggestions`, with the
|
|
1046
|
+
provider's token or API key, as every SDK request) and shows up to three
|
|
1047
|
+
chips just above the composer. A run that was stopped, failed or is waiting
|
|
1048
|
+
on the person gets none, and so does a conversation opened at rest. A
|
|
1049
|
+
`readOnly` chat never shows them.
|
|
1050
|
+
- **A click fills the composer.** A chip puts its words in the composer, with
|
|
1051
|
+
the caret after them. Nothing is sent. The chips go away once the person
|
|
1052
|
+
types or sends, or a new run starts.
|
|
1053
|
+
- **What is sent.** The turn's last user message (its first 4,000 characters)
|
|
1054
|
+
and the reply's text (its last 8,000) go with the conversation's thread id.
|
|
1055
|
+
Athena reads nothing else of the conversation, answers only for one the
|
|
1056
|
+
credential can read (404 otherwise), and charges the model call to that
|
|
1057
|
+
conversation's token usage.
|
|
1058
|
+
- **Failures show nothing.** A refused or failed request (an
|
|
1059
|
+
`AthenaSdkError`, code `follow_up_suggestions_failed`, or `auth_rejected`
|
|
1060
|
+
for a 401 / 403), or an Athena that predates the route (404), leaves the
|
|
1061
|
+
composer as it was. No error appears.
|
|
1062
|
+
|
|
1063
|
+
## Attach objects to the next message
|
|
1064
|
+
|
|
1065
|
+
`useAttachToChat()` hands the agent an object on screen ("Discuss this with
|
|
1066
|
+
the agent"): an Athena asset (optionally a place inside it), an ontology object
|
|
1067
|
+
or a web page. The composer shows each one as a removable chip, and the next
|
|
1068
|
+
message carries the references as structured data, never as text. Athena
|
|
1069
|
+
resolves each one on the server with the signed-in person's own permission
|
|
1070
|
+
before the agent is told about it.
|
|
1071
|
+
|
|
1072
|
+
```tsx
|
|
1073
|
+
import { useAttachToChat } from '@athenaintel/react';
|
|
1074
|
+
|
|
1075
|
+
function DiscussButton({ investor }: { investor: { id: string; name: string } }) {
|
|
1076
|
+
const { attach } = useAttachToChat();
|
|
1077
|
+
return (
|
|
1078
|
+
<button
|
|
1079
|
+
onClick={() =>
|
|
1080
|
+
attach(
|
|
1081
|
+
{ referenced: 'ontology_object', id: investor.id, meta: { title: investor.name } },
|
|
1082
|
+
{ prompt: 'Draft an intro email to ', open: true },
|
|
1083
|
+
)
|
|
1084
|
+
}
|
|
1085
|
+
>
|
|
1086
|
+
Discuss
|
|
1087
|
+
</button>
|
|
1088
|
+
);
|
|
1089
|
+
}
|
|
1090
|
+
```
|
|
1091
|
+
|
|
1092
|
+
`attach(reference, { prompt?, open? })` takes an `AthenaReference`, one of the
|
|
1093
|
+
reference standard's kinds (`@athenaintel/references`):
|
|
1094
|
+
|
|
1095
|
+
| `referenced` | Shape | Read on the server through |
|
|
1096
|
+
|---|---|---|
|
|
1097
|
+
| `asset` | `{ id: 'asset_…', anchor?, meta?: { title?, assetType? } }`; `anchor` is the standard's (`{ type: 'page', page: 5 }`, `{ type: 'sheet_range', sheetId, range }`, …) | the asset permission check, then `read_asset` |
|
|
1098
|
+
| `ontology_object` | `{ id: 'asset_…', meta?: { title?, objectType? } }`: a v1 object or a Platform 2.0 object | the object gate (Platform 2.0) or the asset check and the ontology rule (v1), then `get_ontology_object` or `read_asset` |
|
|
1099
|
+
| `external_url` | `{ url: 'https://…', meta?: { title? } }` | the web reader's egress guard (`read_web_page`) |
|
|
1100
|
+
|
|
1101
|
+
- **The chips.** `AthenaChat` shows them above the editor
|
|
1102
|
+
(`ComposerAttachedReferences`), with the kind's icon, the label and an
|
|
1103
|
+
anchored asset's place (`Q4 deck · p.5`). Each one has a remove button. A
|
|
1104
|
+
sent message shows what it carried, read-only, above its bubble
|
|
1105
|
+
(`MessageAttachedReferences`). A host that mounts `TiptapComposer` itself
|
|
1106
|
+
can mount both, and spreads `useAttachedReferencesComposerProps(threadId)`
|
|
1107
|
+
on the composer so its sends carry the references. A composer without them
|
|
1108
|
+
never sends attachments. `AthenaChat` puts the references on the message it
|
|
1109
|
+
sends itself, so they reach Athena on the stock `@assistant-ui/react-statewire`
|
|
1110
|
+
an app installs from npm; a host's own `TiptapComposer` hands them to the
|
|
1111
|
+
runtime's `getMessageMetadata`, which only Athena's patched build of that
|
|
1112
|
+
package reads (SDK 0.59.0's `AthenaChat` did the same, so an npm app's
|
|
1113
|
+
attachments never left the browser, #55425).
|
|
1114
|
+
- **The send.** The references ride the message's own metadata
|
|
1115
|
+
(`message.metadata.attachedReferences`), so a message that waits in the chat
|
|
1116
|
+
outbox, is retried, or is posted again after a reload keeps its own. A
|
|
1117
|
+
message needs words: chips with an empty draft send nothing. A message with
|
|
1118
|
+
attachments sent while a run is live waits in the queue for its own turn
|
|
1119
|
+
instead of joining the running one. Sending takes the chips off the composer.
|
|
1120
|
+
They come back if the send does: a send Athena refuses and hands back to the
|
|
1121
|
+
composer, or a held message's Cancel or Edit.
|
|
1122
|
+
- **What the agent sees.** For the turn the message starts, the agent is told
|
|
1123
|
+
each attachment's kind, its id, its label, the title and type Athena read
|
|
1124
|
+
with the person's permission, and the exact call that reads it. The label
|
|
1125
|
+
(`meta.title`) is only what the chip shows. The agent is told it is the
|
|
1126
|
+
app's text, unverified, and never the object's content. The agent reads the
|
|
1127
|
+
object itself through the same gated tools as anything else. A later turn
|
|
1128
|
+
does not repeat the list.
|
|
1129
|
+
- **Refusals.** An object the person can't open, one that doesn't exist, an
|
|
1130
|
+
item in a connected source (SharePoint, Drive, …), a malformed id or URL,
|
|
1131
|
+
and a kind Athena doesn't take yet all reach the agent as refusals with a
|
|
1132
|
+
reason, never as content. A missing object and one the person can't open
|
|
1133
|
+
get the same refusal. In a conversation with several people, an asset not
|
|
1134
|
+
all of them can open is left out, and so is every ontology object.
|
|
1135
|
+
- **Results.** `attach` returns `{ attached: true, reference, duplicate }` or
|
|
1136
|
+
`{ attached: false, reason }`, where `reason` is `invalid_reference` (not an
|
|
1137
|
+
attachable reference), `too_many` (a message carries at most
|
|
1138
|
+
`MAX_ATTACHED_REFERENCES`, 10) or `no_thread`. Attaching the same pointer
|
|
1139
|
+
again (same kind and id, and the same anchor for an asset) keeps one chip
|
|
1140
|
+
and updates its label. `detach(reference)`, `clear()` and `references` (the
|
|
1141
|
+
pending list) complete the hook. The list is per conversation, kept in
|
|
1142
|
+
memory for the page, and forgotten when someone else signs in.
|
|
1143
|
+
- **`prompt` and `open`.** `prompt` puts text in the composer, after the
|
|
1144
|
+
draft, for the person to finish. Nothing is sent. `open` focuses the
|
|
1145
|
+
composer with the caret at the end. A host whose chat can be hidden shows it
|
|
1146
|
+
itself.
|
|
1147
|
+
- **Not yet:** a table row (a lakehouse or Kronos row, by key) waits for a
|
|
1148
|
+
permission-checked row reader on the server (#54759).
|
|
1149
|
+
|
|
829
1150
|
## Chat voice in AthenaChat
|
|
830
1151
|
|
|
831
1152
|
`AthenaChat` includes realtime voice alongside dictation where the deployment
|
|
@@ -962,7 +1283,41 @@ Sessions in Athena and transcript/grading calls are authorized as them. This
|
|
|
962
1283
|
works for workspace members and for external SSO viewers alike: the viewer
|
|
963
1284
|
credential minted by `/_athena/auth` is authorized for session creation and
|
|
964
1285
|
grading the same way it is for `/api/v0/sessions`, scoped to the viewer's own
|
|
965
|
-
workspace.
|
|
1286
|
+
workspace. Which credential each kind of viewer's app gets, and what each
|
|
1287
|
+
reaches: `marathon/MARATHON_SYSTEM.md` ("The credential each viewer's app is
|
|
1288
|
+
signed in with").
|
|
1289
|
+
|
|
1290
|
+
Inside Olympus (the computer's Preview tab and the sidebar app page) the
|
|
1291
|
+
parent window answers the bridge with what agora mints for the frame; on the
|
|
1292
|
+
app's own URL `/_athena/auth` (and the SSO provider's `/api/sso/userinfo`)
|
|
1293
|
+
mints the same thing. The computer's creator gets a sign-in of their own; a
|
|
1294
|
+
workspace member who did not create the computer gets an asset-bound
|
|
1295
|
+
`member_viewer` credential (`athview_`, 30 minutes, bound to the computer, its
|
|
1296
|
+
workspace and the app port; the bridge renews it 5 minutes before expiry),
|
|
1297
|
+
never their full sign-in, because the app runs the computer owner's code. That
|
|
1298
|
+
credential reaches `GET /api/v0/me` (listing that workspace alone), voice
|
|
1299
|
+
session creation, `agents/general/invoke` without tools, a knowledge base or an
|
|
1300
|
+
earlier thread (transcript grading), and these reads, each narrowed to what the
|
|
1301
|
+
app's code may learn:
|
|
1302
|
+
- `GET /api/v0/assets` and `GET /api/v0/assets/{id}`: only an asset both the member and the computer's creator can read, in that workspace, and never a conversation;
|
|
1303
|
+
- the thread list (`POST /api/conversations/threads/list`), `GET /api/v0/sessions`, `GET /api/v0/sessions/{id}` and the transcript download: only the sessions this app started for the member.
|
|
1304
|
+
|
|
1305
|
+
Every other id answers `404`, as a missing one does. The voice agent gets a
|
|
1306
|
+
credential of its own for each call (it saves the call's turns and runs
|
|
1307
|
+
`ask_agent` without tools), so a member's call cannot enable
|
|
1308
|
+
`read_full_asset`, `search_assets` or `ask_agent` tools (`403`). Asset writes,
|
|
1309
|
+
`POST /api/asset-sessions/{id}`, `/api/v0/tools/*`, `/api/v0/me/*`, sharing,
|
|
1310
|
+
GraphQL and the chat transport (`/v2/threads`, `POST /api/unstable/threads/`)
|
|
1311
|
+
answer `403` with `X-Athena-Credential-Scope: refused`, in the frame and on the
|
|
1312
|
+
app's own URL alike: the credential never reaches those routes, so renewing it
|
|
1313
|
+
cannot help (the SDK renews only on a `401`). A chat app opened by a member who
|
|
1314
|
+
did not create the computer lists its assets and sessions but cannot start a
|
|
1315
|
+
chat yet. See `marathon/MARATHON_SYSTEM.md` and
|
|
1316
|
+
`docs/COMPUTER_ASSET_STANDARDS.md` ("App frame sign-in"). Nothing to change in
|
|
1317
|
+
your app: the credential arrives through the same `athena-auth` message and the
|
|
1318
|
+
same `/_athena/auth` body.
|
|
1319
|
+
|
|
1320
|
+
Anywhere else — standalone hosting, custom auth — pass
|
|
966
1321
|
`createSession` and create the session from your own server (API key stays server-side):
|
|
967
1322
|
|
|
968
1323
|
```tsx
|
|
@@ -978,7 +1333,7 @@ it never falls back to a shared key.
|
|
|
978
1333
|
|
|
979
1334
|
**After the call.** `voice.sessionId` is a regular Athena session asset:
|
|
980
1335
|
|
|
981
|
-
- Transcript: `GET /api/v0/sessions/{asset_id}/download?
|
|
1336
|
+
- Transcript: `GET /api/v0/sessions/{asset_id}/download?export_format=messages`
|
|
982
1337
|
- Grading against a rubric: `POST /api/v0/agents/general/invoke` with
|
|
983
1338
|
`config.structured_output` (a JSON Schema) → typed `structured_output` in
|
|
984
1339
|
the response.
|
|
@@ -988,6 +1343,74 @@ Both use the same bearer / API key as session creation. The full recipe
|
|
|
988
1343
|
template skill `voice-session-guide.md`. `createAthenaVoiceSession` is also
|
|
989
1344
|
exported if you hold the bridge state yourself.
|
|
990
1345
|
|
|
1346
|
+
## What's new in 0.60.0
|
|
1347
|
+
|
|
1348
|
+
**The `@` menu draws each asset's type icon, as Olympus does.** Asset rows used to show the same generic file icon in every app that didn't serve Athena's icon files itself. Now each row shows the icon Olympus draws for its type, from Olympus's own type → icon table. An email whose mailbox is recorded on it (a Gmail or Outlook draft or message) shows that mailbox's logo. The SVGs load from the Athena web app the chat talks to (`<appUrl>/assets/icons/files/`), so there's nothing to configure. Each chat uses its own provider's app, and a host that ships its own copy still points at it with `configureAssetIconBasePath`. Where an SVG can't load (a strict `img-src` CSP, offline), the row shows the type's Lucide icon. The mention chips and the drive cards draw the same icons. A renderer of your own draws them with `assetTypeToThumb(type, { appUrl: useAssetIconAppUrl() })`. The search reads no metadata; a page with email rows reads theirs alone (`getAssetsByIds`).
|
|
1349
|
+
|
|
1350
|
+
**What an app attaches reaches Athena on the stock `@assistant-ui/react-statewire`.** `AthenaChat` now puts a message's attachments (`useAttachToChat`) and the agents it names on the message itself, so an app that installs the SDK from npm sends them. Before, they reached Athena only on the monorepo's patched package. A send `AthenaChat` makes moves its conversation to the top of the list, as a composer send does.
|
|
1351
|
+
|
|
1352
|
+
Also in this release:
|
|
1353
|
+
- Requests from the data hooks (`useAthenaFetch`, `useAthenaGraphQL`, `useAthenaRest`, `useSemanticQuery`) name the SDK and its version in `X-Athena-Client`. This is telemetry only: Athena never admits or refuses a request by it.
|
|
1354
|
+
- `connectGenericDoc` takes `keepHttpFirstRead` with `httpFirstOpen`, and its handle's `takeHttpFirstRead()` hands over the bytes the room's HTTP-first read applied, once.
|
|
1355
|
+
- A session workspace or live desktop read that agora answers "Asset … not found" now says the asset does not exist or the signed-in user may not read it.
|
|
1356
|
+
- Tool labels for the Chrome extension's page subscriptions, and the "Always keep on this device" wording for offline availability.
|
|
1357
|
+
|
|
1358
|
+
## What's new in 0.59.0
|
|
1359
|
+
|
|
1360
|
+
**Every message is one `run/send`, and the chat needs an Athena that serves it.** The SDK moves to `statewire` 0.27.1 and `@assistant-ui/react-statewire` 0.35.1 (from 0.25.0 and 0.34.0) and speaks Athena's 2026-11-04 command contract. A new message goes as `run/send` with a behavior: `auto` from the composer (while a run is live, Athena decides whether the message joins the running turn, waits for a turn of its own, or stops the run for it), and `queue`, `steer` or `preempt` (Send now) from the queue tray. 0.58.0 sent `run/enqueue`, `run/steer`, `run/steer-live` and `run/prioritize`. The transport offers the 2026-11-04 contract only, on wire 2026-11-01. Athena's hosts serve it from the release that added `run/send` (agora on Python statewire 0.23.1, Athena's managed cloud since November 8, 2026); an older Athena cannot serve a 0.59.0 chat, so a customer deployment moves its own Athena first, then its apps. Messages an earlier SDK kept on the device are read back as the `run/send` each one meant, and session records stay inside `localStorage`'s quota.
|
|
1361
|
+
|
|
1362
|
+
**Read and write Athena data as the signed-in person.** `useAthenaFetch`, `useAthenaGraphQL`, `useAthenaGraphQLMutation`, `useAthenaRest` and `useSemanticQuery` call agora's own routes with the provider's credential, and `useInvalidateAthenaQueries` reads them again (see [Reading and writing Athena data](#reading-and-writing-athena-data-useathenafetch-useathenagraphql-useathenarest-usesemanticquery)). `useAthenaMember` resolves a bundle member's name to the workspace's own asset; an Athena that predates the members route answers 404 (`member_not_found`).
|
|
1363
|
+
|
|
1364
|
+
**Attach an object to the next message.** `useAttachToChat()` puts an Athena asset (or a place in it), an ontology object or a web page on the composer as a chip. The message carries it as structured data (`metadata.attachedReferences`), and Athena checks each one with the sender's own permission before the agent is told about it (see [Attach objects to the next message](#attach-objects-to-the-next-message)). An Athena that predates it keeps the references on the message and tells the agent nothing.
|
|
1365
|
+
|
|
1366
|
+
**Pickers and the composer.** `useAthenaThreadAgent()` reads a session's own agent. Each `useAthenaModelCatalog()` option carries its place in its model family (`variantMode`, `variantEffort`, `variantServiceTier`), and `useAthenaAgentDirectory()` lists agents with who made them. `composer.attachButton`, `composer.mentionButton` and `useAthenaComposerActions()` fold attaching and the `@` menu into a menu of the host's own.
|
|
1367
|
+
|
|
1368
|
+
Also in this release:
|
|
1369
|
+
- `SessionsPage` takes `defaultHiddenColumns`; `DEFAULT_HIDDEN_SESSIONS_COLUMNS` (Mode, Creator, Created) is the default.
|
|
1370
|
+
- A step's long detail is cut short, so its label stays readable.
|
|
1371
|
+
- Someone other than a conversation's owner receives its tool calls as stubs; `AthenaChat` draws each one as a muted "Used a tool" chip instead of dropping it.
|
|
1372
|
+
- A 1:1 chat with a collab agent shows no answer label: only an agent other than the header's is labelled.
|
|
1373
|
+
- `connectGenericDoc` takes `diffedInitialSync` with `httpFirstOpen`, and an HTTP-first read whose bytes keep coming runs on; one that receives nothing for a minute is given up.
|
|
1374
|
+
- Everything 0.58.0 carries (below).
|
|
1375
|
+
|
|
1376
|
+
## What's new in 0.58.0
|
|
1377
|
+
|
|
1378
|
+
0.58.0 was tagged but never published to npm: everything below ships in 0.59.0.
|
|
1379
|
+
|
|
1380
|
+
**The chat runs on statewire 0.25 and needs an Athena that serves wire 2026-11-01.** The SDK moves to `statewire` 0.25.0 and `@assistant-ui/react-statewire` 0.34.0 (from 0.21.0 and 0.31.0). Its transport offers wire 2026-11-01 only: the client always sends the attach's results cursor and stamps a command's sequence number once, as it leaves, which a 2026-09-30 attach refuses. Athena's hosts serve 2026-09-30 through 2026-11-01 from Python statewire 0.21.2 on (Athena's managed cloud since November 6, 2026); an older host cannot serve a 0.58.0 chat. A customer deployment moves its own Athena first, then its apps. The Athena application schema stays 2026-09-13, so messages an earlier SDK queued on the device are sent on the new wire unchanged. Stored sessions move to statewire 0.25's format the first time a conversation opens.
|
|
1381
|
+
|
|
1382
|
+
**Messages typed while Athena can't be reached wait in their conversation's own session.** With `chatOutbox` on `AthenaProvider`, each conversation's statewire session now holds its waiting messages (statewire's outbox), instead of a store of the SDK's own. The session is sealed in IndexedDB with the key your `getKey('write')` returns, or kept in page memory when it returns `null` (the tray then says the device can't keep them). A conversation waits to connect until the provider has asked for that key. A conversation whose session from an earlier SDK still holds unsent messages in `localStorage` stays there until they are sent. Messages 0.53 kept on the device move into their conversation the next time it opens, and until then `countChatOutboxMessages`, `listChatOutboxMessages` and `clearChatOutbox` include them. A message shows "Not synced yet" only once it is stuck or the device is offline, not while an ordinary send is on its way (each listed message carries `queuedAt`).
|
|
1383
|
+
|
|
1384
|
+
**A failed message shows once.** With a chat outbox, a send that failed is one "Couldn't send" row at the top of the queue tray (Retry, Edit, Discard), and `StatewireQueuedMessages` no longer lists it again in its failed lane. A message waiting for the countdown is never shown as failed. Hosts without `chatOutbox` keep the failed lane as before.
|
|
1385
|
+
|
|
1386
|
+
**What changed in the API.** `AthenaChatOutbox.getKey` is typed `ChatSessionKeyProvider` (same shape: `(purpose: 'read' | 'write') => Promise<CryptoKey | null>`). `ChatSessionKeyPurpose` is exported, and `ChatOutboxKeyPurpose` stays as a deprecated alias of it. In `listChatOutboxMessages`, `sending` now means the message has left the outbox for its conversation (there is no claim lease anymore), and a failed message is Retry, Edit or Discard. `subscribeChatOutbox` calls its listener only when what waits changed. Nothing to change in your app unless you named the removed `@athenaintel/agent-runtime` chat outbox store exports yourself.
|
|
1387
|
+
|
|
1388
|
+
**Waiting messages belong to one account.** Statewire 0.25 keeps every stored session under the account it belongs to (`user:<id>`), so on a shared browser one account's waiting messages are never sent or shown as another's. Sessions stored by an earlier SDK move under the signed-in account the first time it opens them; another account's stay where they are until that account signs in.
|
|
1389
|
+
|
|
1390
|
+
**The agent's typed questions and approvals get their own cards.** A run parked on the `ask` tool's questionnaire, a file request, a form, a toolkit choice, a saved login, a project schedule, a wait or a tool-raised approval used to show only a Decline in the SDK chat, so the run stalled. `AthenaChat` now renders each kind's card as Athena on the web does and answers with the shape its tool validates (see **The agent's typed questions and approvals** under Transport). A host that mounts `StatewireApprovalCard` itself passes `typedInterrupts={statewireTypedInterrupts}` from `@athenaintel/react/typed-interrupts`.
|
|
1391
|
+
|
|
1392
|
+
**Slash commands and plan mode in the composer.** `composer.slashCommands` gives the composer a `/` menu of the host's commands, and `planMode` on `AthenaProvider` turns the agent's to-do plan off or on for the next turn, with `ChatPlanModeToggle` as the composer chip and `useAthenaThreadPlanMode()` to read a session's own setting (see **Plan mode** and **Composer slash commands**).
|
|
1393
|
+
|
|
1394
|
+
**The `@` menu offers people and agents.** `mentionCategories` adds `team` (the workspace's members and groups, as Olympus offers them) and `agents`: choosing an agent names it on the composer's To line, and each send names those agents to Athena on the message's own metadata (`addressedAgents`), which agora checks against each agent's VIEW gate (see **What the `@` menu offers: people and agents**).
|
|
1395
|
+
|
|
1396
|
+
**Subagents run side by side.** A delegation's subagents render as lanes under one strip, each card with its status, plan progress and last call, and "View transcript" opens a lane in a drawer, as Spaces shows them. The pieces are on `@athenaintel/react/subagents` (see **Subagent lanes**).
|
|
1397
|
+
|
|
1398
|
+
**Cards for Athena's toolkits.** `AthenaChat` draws the most-used toolkits' tools (the deep agent's sandbox and tasks, Drive, ontology, project manager, the studios, documents, decks, the browser, computers, email and calendar) with Athena on the web's cards, from `TOOL_UI_REGISTRY` (see **Cards for Athena's toolkits**). A coding chat's background commands read as what they did, not their tool ids.
|
|
1399
|
+
|
|
1400
|
+
**Following what the agent makes.** `useAthenaAgentCreations({ onCreation })` reports each asset the agent creates or opens for the person in a conversation, once, as the call finishes, and the tool auto-open's `autoOpen` now says why (`kind`: `'created'`, `'shown'` or `'touched'`).
|
|
1401
|
+
|
|
1402
|
+
**Finding assets, and uploading into a folder.** `useAthenaAssetSearch`, `useAthenaRecentAssets`, `useAthenaFavoriteAssets`, `useAthenaProjects`, `useAthenaFolderAssets` and `useAthenaProjectAssets` read what the signed-in person may open through agora's own gated queries, and `useAthenaAssetsRefresh()` reads them again. `useFileUpload().upload(files, { parentFolderId })` uploads into a folder the person may edit (see **Finding assets: a title search, recent work and favourites**).
|
|
1403
|
+
|
|
1404
|
+
**Suggested follow-up prompts and a turn's changes card, both off by default.** `<AthenaChat followUpSuggestions />` offers up to three chips after a finished turn (`POST /api/chat/follow-up-suggestions`; an Athena that predates the route answers 404 and nothing shows), and `turnChanges` ends a turn that changed files with Codex's "Edited 5 files" card, read and acted on by the host (see **Suggested follow-up prompts** and **What a turn changed**). With neither turned on, nothing is requested.
|
|
1405
|
+
|
|
1406
|
+
Also in this release:
|
|
1407
|
+
- `composer.onBeforeSend` (`AthenaChatBeforeSend`) runs host work before a draft goes, however it is sent; a rejection sends nothing and keeps the draft.
|
|
1408
|
+
- A composer toolbar too narrow for its chips wraps them onto another row, so the mic, voice and Send stay in reach.
|
|
1409
|
+
- A host that takes `onCitationAction` also gets each member a person opens in an embedded folder, project or collection, to open as an asset of its own.
|
|
1410
|
+
- The session-list rules are on `@athenaintel/react/session-list-model`, which loads nothing else of the SDK.
|
|
1411
|
+
- The collaboration client sends Keryx only its own awareness entry, never a collaborator's.
|
|
1412
|
+
- Everything 0.57.2 shipped from the 0.57.1 tree (the session list's pending rows, and how a run ended in `AthenaChat`).
|
|
1413
|
+
|
|
991
1414
|
## What's new in 0.57.2
|
|
992
1415
|
|
|
993
1416
|
**A message you send shows in the session list the moment you send it.** The list used to wait for the server: a new chat appeared only after the server listed it and the list read its page again (about 5 seconds on staging), and a session you wrote to again stayed where it was. Now, in `SessionList`, `ThreadList` and any list a host draws from `useAthenaStatewireThreadList().threads`:
|
|
@@ -2123,9 +2546,14 @@ app. `AthenaChat` renders them as chips with nothing to configure, and so do `Ch
|
|
|
2123
2546
|
`TiptapText`, `MentionLink` and `parseMentionsInText` in a renderer of your own
|
|
2124
2547
|
(`@athenaintel/react/chat-ui`). A chip shows:
|
|
2125
2548
|
|
|
2126
|
-
- **the asset type's icon
|
|
2127
|
-
|
|
2128
|
-
|
|
2549
|
+
- **the asset type's icon**, the one Olympus draws for that type. The SVGs load from the Athena web
|
|
2550
|
+
app the chat talks to (`<appUrl>/assets/icons/files/`, public files, no credential), each chat
|
|
2551
|
+
from its own provider's. A host that ships its own copy of the type glyphs points the chips at it
|
|
2552
|
+
with `configureAssetIconBasePath({ basePath })`; brand logos (Gmail, Outlook, Power BI, Slack)
|
|
2553
|
+
still come from the app. Outside a provider, or where the SVG cannot load (a strict `img-src`
|
|
2554
|
+
CSP, offline), the chip draws a Lucide icon for the type. A renderer of your own draws the same
|
|
2555
|
+
icon with `assetTypeToThumb(type, { appUrl: useAssetIconAppUrl() })`. A repository file's lines
|
|
2556
|
+
read as a code file.
|
|
2129
2557
|
- **the label the link was written with**, then **the cited place** in grey (`p.5`, `Slide 3`,
|
|
2130
2558
|
`'Buy List'!A1:B2`, `jwt.py:12-25`). The SDK reads and labels the place with the same parser
|
|
2131
2559
|
Olympus's chips use. A citation written without a label is named by its place (`Page 5`).
|
|
@@ -2137,6 +2565,52 @@ file with the lines highlighted: no embed renders a catalog. Agora's own citatio
|
|
|
2137
2565
|
(`<a class="mention" data-type="pdf" data-id="asset_…" data-page-number=…>`) render as the same
|
|
2138
2566
|
chips.
|
|
2139
2567
|
|
|
2568
|
+
### What the `@` menu offers: people and agents
|
|
2569
|
+
|
|
2570
|
+
`AthenaChat`'s `@` menu offers the asset library by default (Favorites, Assets, Projects and
|
|
2571
|
+
Folders), plus Tools and Toolkits when `mentionTools` (or the provider's toolkits) offers any.
|
|
2572
|
+
`mentionCategories` picks the rest, and the menu lists them in Athena's order:
|
|
2573
|
+
|
|
2574
|
+
```tsx
|
|
2575
|
+
<AthenaChat mentionCategories={['favorites', 'assets', 'projects', 'folders', 'team', 'agents']} />
|
|
2576
|
+
```
|
|
2577
|
+
|
|
2578
|
+
Each asset row draws the icon Olympus's menu draws for its type (from the same SVGs as the chips,
|
|
2579
|
+
see **Mentions and citations**), and an email whose mailbox is recorded on it draws Gmail's or
|
|
2580
|
+
Outlook's logo. The search reads no metadata; a page with email rows reads theirs alone
|
|
2581
|
+
(`getAssetsByIds`), and lists them with the mail icon when that read fails.
|
|
2582
|
+
|
|
2583
|
+
- **`team`** — people, as Olympus's chat composer offers them: the workspace's members, then its
|
|
2584
|
+
groups. An Athena admin's people come ranked, the people they talked to most recently first,
|
|
2585
|
+
with the people they saved who are not members. They are read with the chat's own credentials
|
|
2586
|
+
through the queries Olympus uses (`getUsersInWorkspace`, `getWorkspaceGroups`, and for an admin
|
|
2587
|
+
`personMentionCandidates`); agora answers each for the signed-in person's own workspace only. A
|
|
2588
|
+
person is the link Olympus writes, `[@Ada Lovelace](mention://person?id=ada@acme.com&email=ada@acme.com&name=Ada+Lovelace)`,
|
|
2589
|
+
and a group `[@Finance](mention://group?id=group_…&name=Finance)`, a pointer to the group that
|
|
2590
|
+
shares nothing and notifies nobody. Typing a name after `@` finds people beside assets.
|
|
2591
|
+
- **`agents`** — the agents a message can name (one conversation, many participants): the person's
|
|
2592
|
+
own assistant ("Athena"), then the agents the chat's agent picker lists. Choosing one never writes
|
|
2593
|
+
text: it names the agent on the composer's To line (`ComposerNamedAgents`, each chip with a
|
|
2594
|
+
remove button), and the chips stay for every message until the person changes them. Each send
|
|
2595
|
+
names them, in order, to Athena exactly as Olympus does: on the message's own metadata
|
|
2596
|
+
(`addressedAgents`: `collab_agent:<asset id>`, or `assistant`), which agora reads ahead of the
|
|
2597
|
+
run config. Each named agent answers the message in its own turn. A message names at
|
|
2598
|
+
most eight. Agora checks every agent a message names (the agent's VIEW gate; a colleague's own
|
|
2599
|
+
assistant is refused), so the menu only offers. While Olympus offers the section to Athena admins
|
|
2600
|
+
only, so does `AthenaChat` (`CHAT_AGENT_NAMING_ADMIN_ONLY` in
|
|
2601
|
+
`@athenaintel/agent-runtime/named-agents`, the module both run on). A message without chips names
|
|
2602
|
+
what it always did: the provider's `agent`, or none, and Athena then runs the person's last agent
|
|
2603
|
+
in that conversation, else their own assistant.
|
|
2604
|
+
- **`browse_profiles`** and **`drives`** — the asset types of those names.
|
|
2605
|
+
|
|
2606
|
+
A message held in the chat outbox keeps the agents it names and goes out naming them; a failed send
|
|
2607
|
+
retried from the queue tray or by send recovery names the agents it was sent with; a refused send
|
|
2608
|
+
handed back to the composer brings its chips back.
|
|
2609
|
+
|
|
2610
|
+
Hosts composing their own chat from `@athenaintel/react/chat-ui` pass `rootCategories` to
|
|
2611
|
+
`TiptapComposer` and, for Agents, a `chatAgents` binding (`MentionChatAgents`: what is offered,
|
|
2612
|
+
naming what is chosen, a subscription).
|
|
2613
|
+
|
|
2140
2614
|
## Citation Links
|
|
2141
2615
|
|
|
2142
2616
|
When you render chat inside `<AthenaLayout>`, Athena citation links (`app.athenaintel.com/dashboard/spaces?...`) now open the referenced asset in the SDK asset pane by default instead of navigating away.
|
|
@@ -2186,7 +2660,15 @@ asset panel:
|
|
|
2186
2660
|
asset panel mounted (`isAssetPanelAvailable` is true); a modified click (⌘, Ctrl, Shift, Alt)
|
|
2187
2661
|
stays the browser's;
|
|
2188
2662
|
- the auto-open after a tool created or touched an asset, marked `origin: 'auto'` (a person's open
|
|
2189
|
-
is `origin: 'user'`).
|
|
2663
|
+
is `origin: 'user'`). It says why it came in `autoOpen`: the tool, and what that tool did with
|
|
2664
|
+
the asset (`kind`): `'created'` (a create tool, or a studio script's `Create*` sub-call),
|
|
2665
|
+
`'shown'` (`open_asset_in_workspace`, the agent opening it for the person) or `'touched'` (a call
|
|
2666
|
+
that read or changed an asset that was already there). A host that follows only what the agent
|
|
2667
|
+
makes, as Athena's desktop app does, opens the first two. A call whose answer says it did not
|
|
2668
|
+
happen (it failed, agora refused it, or agora told the agent it left the person's view alone)
|
|
2669
|
+
raises none. These auto-opens ride each tool's `streamCall`, which the deep agent's runtime
|
|
2670
|
+
(statewire) never runs; to follow what the agent makes there, use `useAthenaAgentCreations`
|
|
2671
|
+
(below).
|
|
2190
2672
|
|
|
2191
2673
|
```tsx
|
|
2192
2674
|
<AthenaProvider
|
|
@@ -2205,6 +2687,33 @@ opens it on the web keeps every parameter it carried. Return `false` to leave th
|
|
|
2205
2687
|
asset panel, or, with no panel mounted, to the link's own navigation; anything else (returning
|
|
2206
2688
|
nothing included) means the host opened it. Hosts that do not pass `onOpenAsset` behave as before.
|
|
2207
2689
|
|
|
2690
|
+
To follow what the agent makes in a conversation, render `useAthenaAgentCreations` inside
|
|
2691
|
+
`AthenaChat` (a `composer` slot or a `components` override, where the conversation's state is
|
|
2692
|
+
read). It calls `onCreation` once for each asset the agent makes (a create tool, a studio
|
|
2693
|
+
script's `Create*` sub-call, a subagent's too) or opens for the person (`open_asset_in_workspace`),
|
|
2694
|
+
as the call finishes, with `{ key, assetId, type, autoOpen }`. It never reports the thread's
|
|
2695
|
+
history (what its first state holds, and older pages loaded in later), a call that failed or was
|
|
2696
|
+
refused, or a call that only read or changed an asset. Nothing is read while `enabled` is false.
|
|
2697
|
+
|
|
2698
|
+
```tsx
|
|
2699
|
+
function FollowTheAgent() {
|
|
2700
|
+
useAthenaAgentCreations({
|
|
2701
|
+
onCreation: ({ assetId, type, autoOpen }) => openBehind({ assetId, type, madeBy: autoOpen.tool }),
|
|
2702
|
+
});
|
|
2703
|
+
return null;
|
|
2704
|
+
}
|
|
2705
|
+
|
|
2706
|
+
<AthenaChat composer={{ aboveEditor: <FollowTheAgent /> }} />;
|
|
2707
|
+
```
|
|
2708
|
+
|
|
2709
|
+
To show the places the agent points the person at (`highlight_in_asset`: "flash and scroll the
|
|
2710
|
+
user to a location inside an asset", with a tooltip), render `useAthenaAgentHighlights` the same
|
|
2711
|
+
way. It calls `onHighlight` once for each highlight as its call answers, with `{ key, assetId,
|
|
2712
|
+
assetRef, content, durationMs }`: `assetRef` is the asset id and its anchor query
|
|
2713
|
+
(`asset_x?anchor=pm_node&node_id=…`), `content` the tooltip or `null`, `durationMs` at most 30
|
|
2714
|
+
seconds. A highlight agora refused (an asset the person may not view) carries no place and is never
|
|
2715
|
+
reported, nor is the thread's history.
|
|
2716
|
+
|
|
2208
2717
|
`appendCitationReferenceParams({ params, reference })` writes a reference's place (its anchor and
|
|
2209
2718
|
excerpt) into any URL's search params, the way `AthenaAssetEmbed` writes it into the embed URL; a
|
|
2210
2719
|
host that opens a cited place in Athena on the web writes it into the Spaces link the same way.
|
|
@@ -2281,7 +2790,7 @@ message), which tells a page that is still loading from one that never arrived (
|
|
|
2281
2790
|
|
|
2282
2791
|
When `onCitationClick` is provided, citation navigation is delegated to the host by default. Set `citationBehavior="browser"` to observe the event while preserving Athena's default new-tab navigation. Host mode requires `onCitationClick`; without a handler, the SDK safely falls back to browser navigation.
|
|
2283
2792
|
|
|
2284
|
-
`onCitationAction` handles actions initiated from a citation popover. It currently receives `action: 'open-in-spaces'` when the user clicks the (+) button. Providing the handler delegates that action to the host by default. Set `citationActionBehavior="browser"` to observe the event while preserving Athena's default navigation; requesting host mode without a handler safely falls back to browser behavior.
|
|
2793
|
+
`onCitationAction` handles actions initiated from a citation popover. It currently receives `action: 'open-in-spaces'` when the user clicks the (+) button. Providing the handler delegates that action to the host by default. Set `citationActionBehavior="browser"` to observe the event while preserving Athena's default navigation; requesting host mode without a handler safely falls back to browser behavior. A host that takes the action also gets, as `open-in-spaces` with the member's reference and no place, each member that is not a container which the person opens in an embedded folder, project or collection, and opens it as an asset of its own; any other host sees the member open in place inside the embed.
|
|
2285
2794
|
|
|
2286
2795
|
Pass the callback's complete `reference` to the linked `AthenaAssetEmbed`, rather than storing only
|
|
2287
2796
|
`reference.id`. The embed uses the reference anchor to navigate PDFs to the cited page and highlight
|
|
@@ -2330,6 +2839,225 @@ text anchors, and positioned citations are also preserved by `parseAthenaCitatio
|
|
|
2330
2839
|
`page_rect` may include `unit=percent` (the default) or `unit=point`; retain the unit so the region
|
|
2331
2840
|
maps to the correct PDF coordinates.
|
|
2332
2841
|
|
|
2842
|
+
## Reading and writing Athena data: `useAthenaFetch`, `useAthenaGraphQL`, `useAthenaRest`, `useSemanticQuery`
|
|
2843
|
+
|
|
2844
|
+
Generic hooks for calling agora's GraphQL and REST routes as the signed-in
|
|
2845
|
+
person, so an app does not write its own authenticated client. They add no
|
|
2846
|
+
server route of their own: agora checks every call against the person's
|
|
2847
|
+
access, as it does for Athena on the web. Use them inside `<AthenaProvider>`;
|
|
2848
|
+
no `QueryClientProvider` is needed.
|
|
2849
|
+
|
|
2850
|
+
```tsx
|
|
2851
|
+
import {
|
|
2852
|
+
useAthenaGraphQL,
|
|
2853
|
+
useAthenaGraphQLMutation,
|
|
2854
|
+
useAthenaRest,
|
|
2855
|
+
useInvalidateAthenaQueries,
|
|
2856
|
+
useSemanticQuery,
|
|
2857
|
+
} from '@athenaintel/react';
|
|
2858
|
+
|
|
2859
|
+
const ASSET = `query Asset($id: String!) { asset(id: $id) { id title } }`;
|
|
2860
|
+
const RENAME = `mutation Rename($id: String!, $title: String!) { renameAsset(id: $id, title: $title) { id } }`;
|
|
2861
|
+
|
|
2862
|
+
function AssetTitle({ id }: { id: string }) {
|
|
2863
|
+
const asset = useAthenaGraphQL<{ asset: { id: string; title: string } }, { id: string }>(ASSET, { id });
|
|
2864
|
+
const invalidate = useInvalidateAthenaQueries();
|
|
2865
|
+
const rename = useAthenaGraphQLMutation<unknown, { id: string; title: string }>(RENAME, {
|
|
2866
|
+
onSuccess: () => invalidate({ operationNames: ['Asset'] }),
|
|
2867
|
+
});
|
|
2868
|
+
if (asset.error) return <p>{asset.error.code === 'UNAUTHORIZED' ? 'No access' : asset.error.message}</p>;
|
|
2869
|
+
return <h1 onDoubleClick={() => rename.mutate({ id, title: 'Renamed' })}>{asset.data?.asset.title}</h1>;
|
|
2870
|
+
}
|
|
2871
|
+
|
|
2872
|
+
function RevenueByRegion({ modelId }: { modelId: string }) {
|
|
2873
|
+
const me = useAthenaRest<{ user_id: string; workspace_id: string }>('/api/v0/me');
|
|
2874
|
+
const revenue = useSemanticQuery({
|
|
2875
|
+
semanticModelId: modelId,
|
|
2876
|
+
query: { measures: ['orders.total_revenue'], dimensions: ['orders.region'], limit: 20 },
|
|
2877
|
+
});
|
|
2878
|
+
if (revenue.error) return <p>{revenue.error.message}</p>;
|
|
2879
|
+
return <Table rows={revenue.data?.data ?? []} caption={`As ${me.data?.user_id ?? '…'}`} />;
|
|
2880
|
+
}
|
|
2881
|
+
```
|
|
2882
|
+
|
|
2883
|
+
**The hooks:**
|
|
2884
|
+
|
|
2885
|
+
- `useAthenaFetch()` returns an authenticated fetch bound to the provider.
|
|
2886
|
+
`athenaFetch<T>(path, options?)` returns the route's body (JSON, or text).
|
|
2887
|
+
`athenaFetch.graphql<TData, TVariables>(document, variables?, options?)` runs
|
|
2888
|
+
one GraphQL operation and returns its `data`. `athenaFetch.raw(path, options?)`
|
|
2889
|
+
returns the response itself, for a body you read yourself (a file). The
|
|
2890
|
+
options are `method`, `params` (the query string), `json` or `body`,
|
|
2891
|
+
`headers`, `signal`, `timeoutMs` and `rateLimitRetry`. `createAthenaFetch(config)`
|
|
2892
|
+
is the same thing without React.
|
|
2893
|
+
- `useAthenaGraphQL<TData, TVariables, TSelected>(document, variables?, options?)`
|
|
2894
|
+
reads with one GraphQL query: the one `operationName` names, or the
|
|
2895
|
+
document's only operation. It refuses a mutation or subscription, which would
|
|
2896
|
+
run again on every refetch.
|
|
2897
|
+
- `useAthenaGraphQLMutation<TData, TVariables>(document, options?)` writes, with
|
|
2898
|
+
`mutate(variables)` / `mutateAsync(variables)`.
|
|
2899
|
+
- `useAthenaRest<TData, TSelected>(path, options?)` reads a JSON `GET` route.
|
|
2900
|
+
Pass `null` as the path to keep it idle; `params` is part of the cache key.
|
|
2901
|
+
- `useSemanticQuery({ semanticModelId, query, ...options })` runs a metric
|
|
2902
|
+
query on a semantic model through agora's public route,
|
|
2903
|
+
`POST /api/v0/semantic-model/{id}/query`. Agora checks the person's access to
|
|
2904
|
+
the model, and to its lakehouse sources, before the query runs.
|
|
2905
|
+
`AthenaSemanticQuery` and `AthenaSemanticQueryResult` are that route's own
|
|
2906
|
+
request and response types (`measures`, `dimensions`, `filters`,
|
|
2907
|
+
`time_dimensions`, `order`, `limit` → `data`, `row_count`, `truncated`,
|
|
2908
|
+
`data_as_of`…). Pass `null` as the model to keep it idle.
|
|
2909
|
+
- `useAthenaMember(name, { track? })` resolves a bundle member's name,
|
|
2910
|
+
`support-desk/support_agent`, to this workspace's own asset (`asset_id`,
|
|
2911
|
+
`type`, `link`, and with `track` the `revision` that track serves), through
|
|
2912
|
+
agora's `GET /api/v0/bundles/{bundle_key}/members/{member_key}`. Name members
|
|
2913
|
+
this way in code a bundle ships: each workspace or deployment holding a copy
|
|
2914
|
+
answers with its own id, where a raw `asset_…` id names one place's asset only.
|
|
2915
|
+
A name that doesn't resolve for the person (no such member, or one they can't
|
|
2916
|
+
open: agora answers both alike) fails with `status` 404 and `code`
|
|
2917
|
+
`member_not_found`. `resolveAthenaMember({ backendUrl, apiKey | token, name,
|
|
2918
|
+
track? })` is the same read without React, throwing
|
|
2919
|
+
`AthenaMemberNotFoundError`; `parseAthenaMemberName` and
|
|
2920
|
+
`isAthenaMemberName` read the grammar.
|
|
2921
|
+
- `useInvalidateAthenaQueries()` returns a function that reads the current
|
|
2922
|
+
person's data again. Narrow it by `operationNames`, REST `paths` (prefixes)
|
|
2923
|
+
or `semanticModelIds`; with no filter, it reads everything again.
|
|
2924
|
+
|
|
2925
|
+
A document is a string or a typed document string (graphql-codegen's client
|
|
2926
|
+
preset with `documentMode: 'string'`). With a typed document, `TData` and
|
|
2927
|
+
`TVariables` are inferred. The query hooks also take TanStack Query's options
|
|
2928
|
+
(`enabled`, `select`, `staleTime`, `refetchInterval`…), and the mutation hook
|
|
2929
|
+
takes its callbacks (`onSuccess`, `onError`, `onMutate`…).
|
|
2930
|
+
|
|
2931
|
+
**Requests.** Every request goes to the provider's `backendUrl`, and only
|
|
2932
|
+
there: a path must start with `/`, so the person's credential never leaves for
|
|
2933
|
+
another host. It presents the token `getToken` resolves, renewed once after a
|
|
2934
|
+
401, or else the API key. It presents no other credential: an
|
|
2935
|
+
`Authorization`, `X-API-KEY`, `Cookie`, `Proxy-Authorization` or
|
|
2936
|
+
`X-Athena-View-As` header passed in `headers` is refused, in any letter case.
|
|
2937
|
+
|
|
2938
|
+
- **429.** The SDK waits as agora's `Retry-After` (or `retryAfterSeconds`)
|
|
2939
|
+
asks, up to 30 s, and sends again at most twice. A longer wait fails at once,
|
|
2940
|
+
with `retryAfterMs` set. A write is sent again only when agora's per-user
|
|
2941
|
+
limiter refused it (`RATE_LIMITED`), because that limiter refuses before
|
|
2942
|
+
anything runs.
|
|
2943
|
+
- **Timeout.** Each attempt is abandoned after `timeoutMs`: 30 s by default,
|
|
2944
|
+
90 s for a semantic query, since agora waits up to 60 s for the engine.
|
|
2945
|
+
|
|
2946
|
+
**Errors.** Every failure is an `AthenaApiError` with these fields:
|
|
2947
|
+
|
|
2948
|
+
- `kind`: `http`, `graphql`, `network`, `timeout`, `credential`, `response` or
|
|
2949
|
+
`request`.
|
|
2950
|
+
- `status`: the HTTP status, or `0` when no answer came.
|
|
2951
|
+
- `code`: agora's code (`UNAUTHORIZED`, `BAD_USER_INPUT`, `RATE_LIMITED`…), from
|
|
2952
|
+
the first GraphQL error's `extensions.code` or a REST error's `detail.code`.
|
|
2953
|
+
- `message`: agora's message.
|
|
2954
|
+
- `errors`, `detail`, `retryAfterMs`, `method` and `path`.
|
|
2955
|
+
|
|
2956
|
+
A request you cancel rejects with the abort's reason, as `fetch` does.
|
|
2957
|
+
`isAthenaApiError` recognises the error across copies of the SDK.
|
|
2958
|
+
|
|
2959
|
+
**Caching and retries.**
|
|
2960
|
+
|
|
2961
|
+
- The query hooks run on the SDK's own `QueryClient`, one per provider, so
|
|
2962
|
+
they never write into your app's cache.
|
|
2963
|
+
- Every key starts with the backend, the signed-in person, a fingerprint of the
|
|
2964
|
+
credential (the API key's, and who the held token acts as and in which
|
|
2965
|
+
workspace; never the secret) and the provider's credential scope epoch. The
|
|
2966
|
+
epoch moves when a `getToken` token acts as another person or is scoped to
|
|
2967
|
+
another workspace or org. A switch of person, key or workspace therefore
|
|
2968
|
+
reads under new keys and never shows the previous identity's answers. A
|
|
2969
|
+
renewal of the same person's token keeps the cache.
|
|
2970
|
+
- If your own `getToken` switches who is signed in, or their workspace, without
|
|
2971
|
+
remounting the provider, the switch is seen when the next request resolves a
|
|
2972
|
+
token. Remount the provider (`key={userId}`) to drop the previous person's
|
|
2973
|
+
answers at once.
|
|
2974
|
+
- A write that switches the person's workspace on agora while the token stays
|
|
2975
|
+
the same can't be seen in the keys. Call `useInvalidateAthenaQueries()()`
|
|
2976
|
+
after it.
|
|
2977
|
+
- An answer stays fresh for 30 s (`staleTime`).
|
|
2978
|
+
- A 4xx, a GraphQL error, a timeout or an unreadable answer is never retried.
|
|
2979
|
+
A failure with no answer, or a 5xx, is asked twice more, after
|
|
2980
|
+
`Retry-After` when agora sends one.
|
|
2981
|
+
- A read is cancelled when the last component reading it unmounts.
|
|
2982
|
+
- A write is not cancelled on unmount, since agora may have applied it.
|
|
2983
|
+
`timeoutMs` still bounds it.
|
|
2984
|
+
|
|
2985
|
+
## Finding assets: a title search, recent work and favourites
|
|
2986
|
+
|
|
2987
|
+
Three TanStack Query hooks find the assets the signed-in person may open, the way Athena on the
|
|
2988
|
+
web's ⌘K box and sidebar do. Each reads agora's `simpleSearch` (the query the composer's
|
|
2989
|
+
@-mentions send) with the provider's `backendUrl` and credentials, so a host adds no other path
|
|
2990
|
+
for its key or token, and agora answers only with assets the person may open, never a hidden or
|
|
2991
|
+
an archived one. They run on the host's `QueryClient` (the session list's under
|
|
2992
|
+
`enableThreadList`), keyed by the request and a fingerprint of the credential, so they wait while
|
|
2993
|
+
the host's `onlineManager` says Athena can't be reached, as the SDK's other reads do.
|
|
2994
|
+
|
|
2995
|
+
- `useAthenaAssetSearch({ words, limit?, notTypes?, enabled? })`: the assets whose title holds
|
|
2996
|
+
the words, the best match first (agora's `RELEVANCE` order; an agora that predates it answers
|
|
2997
|
+
by the newest change). Blank words hold it idle.
|
|
2998
|
+
- `useAthenaRecentAssets({ limit?, enabled? })`: the person's recent work, as the web sidebar's
|
|
2999
|
+
"Your Recents" lists it: what they created, the newest change first, without folders, emails,
|
|
3000
|
+
conversations, catalogs or a meeting's own files. It waits for `/api/v0/me` (the read the chat
|
|
3001
|
+
shares) to name the person.
|
|
3002
|
+
- `useAthenaFavoriteAssets({ limit?, notTypes?, enabled? })`: the person's favourites from every
|
|
3003
|
+
folder, the newest change first.
|
|
3004
|
+
|
|
3005
|
+
Each answers `AthenaAssetSummary[]` (`id`, `title`, `athenaOriginalType`, `athenaConvertedType`,
|
|
3006
|
+
`parentFolderId`, `updatedAt`, `isFavorited`…). `searchAthenaAssets` is the same read without
|
|
3007
|
+
React.
|
|
3008
|
+
|
|
3009
|
+
```tsx
|
|
3010
|
+
import { useAthenaAssetSearch } from '@athenaintel/react';
|
|
3011
|
+
|
|
3012
|
+
function OpenBox({ words }: { words: string }) {
|
|
3013
|
+
const found = useAthenaAssetSearch({ words, limit: 8, notTypes: ['session', 'catalog'] });
|
|
3014
|
+
return (
|
|
3015
|
+
<ul>
|
|
3016
|
+
{(found.data ?? []).map((asset) => (
|
|
3017
|
+
<li key={asset.id}>{asset.title ?? 'Untitled'}</li>
|
|
3018
|
+
))}
|
|
3019
|
+
</ul>
|
|
3020
|
+
);
|
|
3021
|
+
}
|
|
3022
|
+
```
|
|
3023
|
+
|
|
3024
|
+
For a tree of the person's files, `useAthenaProjects({ limit?, enabled? })` lists the projects they
|
|
3025
|
+
can open, the newest change first, and two reads page with TanStack's `useInfiniteQuery`
|
|
3026
|
+
(`fetchNextPage`, `hasNextPage`), each page `{ assets, next }`:
|
|
3027
|
+
|
|
3028
|
+
- `useAthenaFolderAssets({ folderId, pageSize?, enabled? })`: a folder's children, or the
|
|
3029
|
+
workspace's top level for `folderId: null` (agora's `getPaginatedAssetsForWorkspace`, gated by
|
|
3030
|
+
the caller's access): folders first, then the newest change, without conversations or catalogs,
|
|
3031
|
+
each asset once. agora appends a listed meeting's transcript and video and a listed catalog's
|
|
3032
|
+
children to its page, wherever they are filed; those are left out, and the next page starts
|
|
3033
|
+
after the folder's own rows.
|
|
3034
|
+
- `useAthenaProjectAssets({ projectId, pageSize?, enabled? })`: the assets a project links
|
|
3035
|
+
(`getProjectLinkedAssetsPaginated`, which leaves out every asset the caller may not open).
|
|
3036
|
+
|
|
3037
|
+
`useAthenaAssetsRefresh()` answers a function that has every asset read of the provider read again
|
|
3038
|
+
(the search, recent work, favourites, projects, and each folder's and project's pages), for the
|
|
3039
|
+
backend and credential in use alone: call it after changing the person's assets (an upload into a
|
|
3040
|
+
folder, say). Only the reads on screen are sent again.
|
|
3041
|
+
|
|
3042
|
+
### Uploading into a folder
|
|
3043
|
+
|
|
3044
|
+
`useFileUpload().upload(files, { parentFolderId })` uploads into that folder through agora's async
|
|
3045
|
+
upload (`POST /api/upload/async` with `parent_folder_id`), which refuses the whole upload, before
|
|
3046
|
+
it takes any file, unless the person may edit the folder, then reads its task (`asyncUploadTask`)
|
|
3047
|
+
until it ends (at most 15 minutes, waiting 250 ms to 2 s between reads). It answers the uploaded
|
|
3048
|
+
assets as the quick upload does; a refusal or a task that took no file throws with agora's reason.
|
|
3049
|
+
Without `parentFolderId` the files go to the workspace's root through `POST /api/upload/`, as
|
|
3050
|
+
before. Either way, `onFilesRefused` hears each file Athena refused (`{ fileName, error }`, in
|
|
3051
|
+
agora's words) when it took others from the same upload, before `upload` resolves:
|
|
3052
|
+
|
|
3053
|
+
```ts
|
|
3054
|
+
const refused: UploadRefusal[] = [];
|
|
3055
|
+
const assets = await upload(files, {
|
|
3056
|
+
parentFolderId: folderId,
|
|
3057
|
+
onFilesRefused: (rejected) => refused.push(...rejected),
|
|
3058
|
+
});
|
|
3059
|
+
```
|
|
3060
|
+
|
|
2333
3061
|
## Repository Code Search (platform staff only, managed cloud)
|
|
2334
3062
|
|
|
2335
3063
|
`useAthenaRepoSearch` searches the workspace's indexed GitHub repositories
|
|
@@ -2567,7 +3295,17 @@ The transcript is `SuperGroupingTranscript` from `@athenaintel/react/super-group
|
|
|
2567
3295
|
|
|
2568
3296
|
Every step row and every thread tool card reads one summary registry, `summarizeToolCall({ toolName, args, result, status })` → `{ label, detail?, meta?, code? }` (also on `@athenaintel/react/tools`). It has rules for the deep agent's core tools (`execute`, the workspace file tools, `search_assets`, the computer and GitHub tools, web search and browse, `read_asset`, `write_todos`, `task`, and the UI Testing toolkit's `test_recording_start` / `_mark` / `_stop`); other tools read the shared display registry, and a tool neither knows falls back to a host catalog name (`resolveToolDisplayName`), else its sentence-cased name. A call that targets a machine or document by id (`sandbox_asset_id`, `computer_asset_id`) is named by its title when an earlier result in the turn carried one (`collectAssetTitles`); nothing is fetched.
|
|
2569
3297
|
|
|
2570
|
-
A delegation to a subagent (`task`) stays in the conversation, as an email draft or a UI test report does:
|
|
3298
|
+
A delegation to a subagent (`task`) stays in the conversation, as an email draft or a UI test report does: its lanes, drawn as Athena on the web draws them (see [Subagent lanes](#subagent-lanes)).
|
|
3299
|
+
|
|
3300
|
+
### Subagent lanes
|
|
3301
|
+
|
|
3302
|
+
`SubagentTaskToolUI` (`TOOL_UI_REGISTRY.task`) shows the subagents a turn delegated:
|
|
3303
|
+
|
|
3304
|
+
- **A fan-out side by side.** The `task` calls one assistant message made together render as one group: the strip ("3 subagents in parallel · 1 running · 2 done · 41 tool calls · 1m 12s") with a progress bar, a fork connector to each card, and the cards in a grid as wide as the column allows. Above four lanes the group pages ("Page 1 of 2"). Only the first sibling's tool UI draws the group; the others draw nothing. A lone delegation is one card.
|
|
3305
|
+
- **Each card says where its lane is.** Its brief (which opens whole), its preset's type, its status and duration ("Running · 1m 04s", "Done · 2m 05s", the server's measure once it finished), and while it works, a ring of its own plan's progress, the call it made last, the thought it streams and, after 30 seconds without a change, "No activity for 42s". A finished lane shows the start of its report, a failed one why. Its footer counts its tool calls, plan steps and tokens. A lane parked on an approval reads "Waiting for approval" with the call it waits on, and no clock; a lane its run left before it settled (the run was stopped, or the conversation moved on) reads "Stopped".
|
|
3306
|
+
- **"View transcript" opens the lane in a drawer.** The lane's steps, laid out as the chat lays out a turn and rendered read-only with the chat's own tool UIs, live while it runs (the drawer follows the lane, so its card carries every step); "Showing the latest 8 of 42 steps" and "Load earlier steps" for a lane its card carries cut (`history/lane`, opened at the newest page); its images as they scroll into view; and its run details (status, type, model, dispatch id, duration, volume, tokens) for matching a failure with the backend's logs. Escape or the backdrop closes it; a tool UI that throws inside it stays inside it. Inside a lane, a delegation is a static chip.
|
|
3307
|
+
|
|
3308
|
+
The pieces are on `@athenaintel/react/subagents` for a host that renders its own thread or its own `task` UI (Athena on the web does): `SubagentLaneGroup` (with `renderLaneApproval` for a host's own controls in a queued lane's card, `footer`, and `TranscriptDrawer`), `useTaskSubagentGroup`, `SubagentTranscriptDrawer` (with `renderTranscript`, `renderReport` and `onError`), the card's parts, what a lane says (`subagentLaneTitle`, `laneDurationLabel`, `formatLaneTokens`, …), and `DeepAgentLaneFollowScope`, the lanes a chat follows. `AthenaChat` mounts that scope, and its history edge keeps the attach following the lane an open drawer shows; a host with its own runtime mounts the scope and runs `useDeepAgentLaneFollowSync` itself.
|
|
2571
3309
|
|
|
2572
3310
|
Every tool call it renders — the generic `ToolFallback`, the built-in tool UIs, nested sub-calls — shares one row anatomy: a status glyph (spinner / check / x / alert), the verb and its target on one line, a running call's elapsed seconds after three, a failed call tinted red, and a disclosure for the arguments and result.
|
|
2573
3311
|
|
|
@@ -2582,6 +3320,51 @@ import { ToolFallback, ToolFallbackAppearanceProvider } from '@athenaintel/react
|
|
|
2582
3320
|
|
|
2583
3321
|
Dedicated tool UIs built on `ToolCard` follow the provider automatically; `useToolAppearance()` reads the appearance in force for a custom tool UI.
|
|
2584
3322
|
|
|
3323
|
+
## What a turn changed (`turnChanges`)
|
|
3324
|
+
|
|
3325
|
+
A host whose agent edits files (Athena Desktop, in a chat that works in a folder on the person's Mac) can end every finished turn that changed files with Codex's card: **Edited 5 files +164 −6**, **Undo** and **View changes**, then the first three files with their lines added and removed and **Show 2 more files** for the rest. An earlier turn keeps its own card with that turn's numbers. The SDK draws the card (in the SDK's theme, light and dark) and puts it at the end of the turn; the host reads the changes and does what Undo and View changes mean. Off unless the host turns it on: without `turnChanges` (or with `null`), or with `enabled` not `true`, nothing renders and nothing is read.
|
|
3326
|
+
|
|
3327
|
+
```tsx
|
|
3328
|
+
import { AthenaChat, type AthenaChatTurnChanges } from '@athenaintel/react';
|
|
3329
|
+
|
|
3330
|
+
const turnChanges: AthenaChatTurnChanges = {
|
|
3331
|
+
enabled: true,
|
|
3332
|
+
// 'chat' (the default): View changes opens every change in the chat; 'turn': this turn's alone.
|
|
3333
|
+
reviewScope: 'turn',
|
|
3334
|
+
read: async ({ threadId, turn, signal }) => myChanges({ threadId, runIds: turn.runIds, signal }),
|
|
3335
|
+
onView: ({ threadId, turn, changes, scope }) => openMyReview({ threadId, ref: changes.ref, scope }),
|
|
3336
|
+
onUndo: ({ threadId, changes }) => undoMyChanges({ threadId, ref: changes.ref }),
|
|
3337
|
+
};
|
|
3338
|
+
|
|
3339
|
+
<AthenaChat turnChanges={turnChanges} />;
|
|
3340
|
+
```
|
|
3341
|
+
|
|
3342
|
+
- **Which turns.** A turn is the assistant messages between two of the person's. It is read once it has finished (one the person wrote after, or the last one once its run is over), and only when its messages name their runs: Athena stamps `metadata.custom.athena_run_id` on every assistant message, the id the run's device calls carry, so a host that keeps something per run (the desktop app's checkpoint before a run's first change) finds the turn's. `turn` is `{ messageId, runIds }`, the runs oldest first (a turn resumed after an approval has more than one).
|
|
3343
|
+
- **What `read` answers.** `AthenaTurnChangesSummary`: `files` (`{ path, additions, deletions }`, `null` lines for a binary file), `more` (files changed past those listed), the total `additions` and `deletions`, and `ref`, the host's own handle on these changes, opaque to the SDK and handed back to `onView` and `onUndo`. `null`, no files or a rejection show nothing. Each turn is read once and kept (TanStack Query, per thread and turn, whether or not Athena can be reached); after `onUndo` settles the card reads its turn again.
|
|
3344
|
+
- **The buttons.** View changes calls `onView` with `scope` (`reviewScope`, `chat` unless the host says `turn`). Undo calls `onUndo` and is off until it settles; the host decides how to undo and whether to ask first (the desktop app's own dialog asks).
|
|
3345
|
+
- **A thread of your own.** The card renders in `AthenaChat`'s assistant turn. A host with its own `AssistantMessage` places `AthenaTurnChangesSlot` where the card goes; it reads `turnChanges` from `AthenaChat`.
|
|
3346
|
+
|
|
3347
|
+
## Cards for Athena's toolkits
|
|
3348
|
+
|
|
3349
|
+
`AthenaChat` draws the tools agents use most the way Athena on the web does, from `TOOL_UI_REGISTRY`, with nothing to pass in `toolUIs`. Each card reads only its own call (arguments, result, status, artifact); the one request any of them makes is for a fresh URL for a screenshot whose stored one has expired (`POST /api/asset/screenshot-presigned-url`, which signs only what the signed-in person may read).
|
|
3350
|
+
|
|
3351
|
+
| Toolkit | Tools | What the card shows |
|
|
3352
|
+
|---|---|---|
|
|
3353
|
+
| Deep-agent sandbox | `execute`, `delete` | `$ ` and the command's first line with its `exit N` / `truncated` chips and the machine it ran on; opened, the command and its output in a terminal (cut at 400 lines). The deleted path and the sandbox's answer. |
|
|
3354
|
+
| Code interpreter and background tasks | `eval`, `start_async_task`, `check_async_task`, `update_async_task`, `cancel_async_task`, `ask_agent` | The code and its output. A coding task's status, summary, branch, commit, files, tests and blockers; an agent session's answer and a button that opens it. |
|
|
3355
|
+
| Athena Drive | `search_assets`, `list_contents`, `project_links` | The matches (type, title, creator, last update), each opening its asset; a folder's tree and page; the assets linked to a project. |
|
|
3356
|
+
| Ontology | `list_object_types`, `search_objects`, `get_object_links` | How many types, objects or links came back. |
|
|
3357
|
+
| Project manager | `pm_documents`, `get_pm_roadmap` | The project file read or patched (patches as before and after), and the roadmap. |
|
|
3358
|
+
| Spreadsheets | `execute_spreadsheet_code`, `query_sheet_range`, `capture_sheet_screenshot` | The run's phase, then its summary, code and output and an Open workbook button; the range read as a table (a batch lists each range); the captured range. |
|
|
3359
|
+
| Word documents | `execute_word_document_code`, `capture_page_screenshot` | The run's phase and result; the captured page. |
|
|
3360
|
+
| Athena documents | `replace_markdown_in_athena_document`, `insert_markdown_before_block`, `insert_markdown_after_block`, `delete_blocks_from_athena_document`, `clear_athena_document`, `convert_athena_doc_to_pdf` | What changed, with the written markdown as a preview; the PDF, which opens. |
|
|
3361
|
+
| Decks | `capture_slide_screenshots`, `manage_slides`, `set_slide_notes`, `update_slide_shapes` | The contact sheet with a chip per slide that opens it; each edit and the slide it touched. |
|
|
3362
|
+
| Hosted browser | `computer`, `browser_batch`, `go_to_url`, `get_page_text`, `get_current_url`, `create_new_browse_session`, `stop_browser_session` | Each action in words ("Did Left-Click", "Typed …", the zoomed region); a batch's steps; the browse session and its profiles, with Open session. |
|
|
3363
|
+
| Computers | `computer_asset_create`, `computer_asset_ensure_sandbox`, `computer_asset_get_status`, `computer_asset_deploy` | The machine's state, and a deployment's link and ports. |
|
|
3364
|
+
| Email and calendar | `send_email_from_athena`, `unified_email_get_thread`, `unified_email_get_message`, `unified_search_calendar_events` | The sent email's recipients, subject, files and opening lines; the thread as Gmail lists it; the events by day. |
|
|
3365
|
+
|
|
3366
|
+
A card that opens an asset does it through the asset panel (`useAssetPanelStore().openAsset`), only when the person clicks. Each card is also exported by name (`ExecuteToolUI`, `SearchAssetsToolUI`, `QuerySheetRangeToolUI`, …) for a host that composes its own registry; a tool UI a host passes in `toolUIs` replaces the card for that tool.
|
|
3367
|
+
|
|
2585
3368
|
## Spreadsheet range previews (`@athenaintel/react/sheet-range`)
|
|
2586
3369
|
|
|
2587
3370
|
The sheet tool cards show a read-only preview of the range a tool read or wrote: column letters across the top, row numbers down the side, each cell on one line (its full text on hover), and the rows and columns left out counted under the table. The same pieces are on the `@athenaintel/react/sheet-range` entry (and the root entry) for a custom tool UI:
|
|
@@ -2599,7 +3382,7 @@ const preview = rangePreviewFromCellMap({
|
|
|
2599
3382
|
{preview && <RangePreviewTable preview={preview} maxRows={20} caption="Q1 Plan A1:F40" />}
|
|
2600
3383
|
```
|
|
2601
3384
|
|
|
2602
|
-
`rangePreviewFromRows` previews rows of values written from an anchor cell instead. `parseA1Range` reads a cell (`B7`), a rectangle (`A1:C5`), whole columns (`A:C`) or whole rows (`3:5`), with an optional sheet prefix (`Sales!`, `'Q1 Plan'!`, `''` for a quote in a quoted name), `$` markers and any letter case, and returns `null` for anything else (a named range, a column past XFD, row 0). The entry imports nothing else from the SDK, so a shell can use it without loading the chat.
|
|
3385
|
+
`rangePreviewFromRows` previews rows of values written from an anchor cell instead. `queryRangeItemTable({ item, data })` reads one range of a `query_sheet_range` result into the table the query card draws (values, formulas or formats, capped at `QUERY_RANGE_MAX_DISPLAY_ROWS` rows). `parseA1Range` reads a cell (`B7`), a rectangle (`A1:C5`), whole columns (`A:C`) or whole rows (`3:5`), with an optional sheet prefix (`Sales!`, `'Q1 Plan'!`, `''` for a quote in a quoted name), `$` markers and any letter case, and returns `null` for anything else (a named range, a column past XFD, row 0). The entry imports nothing else from the SDK, so a shell can use it without loading the chat.
|
|
2603
3386
|
|
|
2604
3387
|
## Key Components
|
|
2605
3388
|
|