@athenaintel/react 0.41.3 → 0.42.2
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 +132 -10
- package/dist/agent-runtime/src/asset-attachment.d.ts +98 -0
- package/dist/agent-runtime/src/athena-asset-drag.d.ts +32 -0
- package/dist/agent-runtime/src/auth-denial.d.ts +29 -0
- package/dist/agent-runtime/src/chat-outbox-attachments.cjs +41 -0
- package/dist/agent-runtime/src/chat-outbox-attachments.cjs.map +1 -0
- package/dist/agent-runtime/src/chat-outbox-attachments.d.ts +38 -0
- package/dist/agent-runtime/src/chat-outbox-attachments.js +41 -0
- package/dist/agent-runtime/src/chat-outbox-attachments.js.map +1 -0
- package/dist/agent-runtime/src/chat-outbox-signals.cjs +63 -0
- package/dist/agent-runtime/src/chat-outbox-signals.cjs.map +1 -0
- package/dist/agent-runtime/src/chat-outbox-signals.d.ts +12 -0
- package/dist/agent-runtime/src/chat-outbox-signals.js +63 -0
- package/dist/agent-runtime/src/chat-outbox-signals.js.map +1 -0
- package/dist/agent-runtime/src/chat-outbox-store.cjs +509 -0
- package/dist/agent-runtime/src/chat-outbox-store.cjs.map +1 -0
- package/dist/agent-runtime/src/chat-outbox-store.d.ts +203 -0
- package/dist/agent-runtime/src/chat-outbox-store.js +509 -0
- package/dist/agent-runtime/src/chat-outbox-store.js.map +1 -0
- package/dist/agent-runtime/src/chat-outbox-thread.cjs +136 -0
- package/dist/agent-runtime/src/chat-outbox-thread.cjs.map +1 -0
- package/dist/agent-runtime/src/chat-outbox-thread.d.ts +118 -0
- package/dist/agent-runtime/src/chat-outbox-thread.js +136 -0
- package/dist/agent-runtime/src/chat-outbox-thread.js.map +1 -0
- package/dist/agent-runtime/src/chat-outbox.cjs +696 -0
- package/dist/agent-runtime/src/chat-outbox.cjs.map +1 -0
- package/dist/agent-runtime/src/chat-outbox.d.ts +285 -0
- package/dist/agent-runtime/src/chat-outbox.js +696 -0
- package/dist/agent-runtime/src/chat-outbox.js.map +1 -0
- package/dist/agent-runtime/src/chat-socket-reachability.d.ts +45 -0
- package/dist/agent-runtime/src/client-tool-bridge.d.ts +152 -0
- package/dist/agent-runtime/src/client-tools.d.ts +133 -0
- package/dist/agent-runtime/src/composer-markdown.cjs +10 -0
- package/dist/agent-runtime/src/composer-markdown.cjs.map +1 -1
- package/dist/agent-runtime/src/composer-markdown.d.ts +108 -0
- package/dist/agent-runtime/src/composer-markdown.js +10 -0
- package/dist/agent-runtime/src/composer-markdown.js.map +1 -1
- package/dist/agent-runtime/src/config-mutations.d.ts +51 -0
- package/dist/agent-runtime/src/conversation-index.d.ts +110 -0
- package/dist/agent-runtime/src/conversation-list.d.ts +343 -0
- package/dist/agent-runtime/src/deep-agent-transport-recipe.cjs +3 -2
- package/dist/agent-runtime/src/deep-agent-transport-recipe.cjs.map +1 -1
- package/dist/agent-runtime/src/deep-agent-transport-recipe.d.ts +166 -0
- package/dist/agent-runtime/src/deep-agent-transport-recipe.js +3 -2
- package/dist/agent-runtime/src/deep-agent-transport-recipe.js.map +1 -1
- package/dist/agent-runtime/src/desktop-handoff.d.ts +139 -0
- package/dist/agent-runtime/src/durable-thread-snapshot-cache.d.ts +60 -0
- package/dist/agent-runtime/src/edit-command.d.ts +156 -0
- package/dist/agent-runtime/src/errors.d.ts +174 -0
- package/dist/agent-runtime/src/execute-output.d.ts +31 -0
- package/dist/agent-runtime/src/generated/runconfig-contract.cjs +16 -2
- package/dist/agent-runtime/src/generated/runconfig-contract.cjs.map +1 -1
- package/dist/agent-runtime/src/generated/runconfig-contract.d.ts +202 -0
- package/dist/agent-runtime/src/generated/runconfig-contract.js +16 -2
- package/dist/agent-runtime/src/generated/runconfig-contract.js.map +1 -1
- package/dist/agent-runtime/src/github-wake-event.d.ts +77 -0
- package/dist/agent-runtime/src/index.d.ts +74 -0
- package/dist/agent-runtime/src/interrupts.cjs +17 -0
- package/dist/agent-runtime/src/interrupts.cjs.map +1 -1
- package/dist/agent-runtime/src/interrupts.d.ts +348 -0
- package/dist/agent-runtime/src/interrupts.js +17 -0
- package/dist/agent-runtime/src/interrupts.js.map +1 -1
- package/dist/agent-runtime/src/lane-follow.d.ts +121 -0
- package/dist/agent-runtime/src/lane-history.cjs +209 -0
- package/dist/agent-runtime/src/lane-history.cjs.map +1 -0
- package/dist/agent-runtime/src/lane-history.d.ts +175 -0
- package/dist/agent-runtime/src/lane-history.js +209 -0
- package/dist/agent-runtime/src/lane-history.js.map +1 -0
- package/dist/agent-runtime/src/lane-images.d.ts +184 -0
- package/dist/agent-runtime/src/message-author.d.ts +43 -0
- package/dist/agent-runtime/src/message-text.cjs +15 -0
- package/dist/agent-runtime/src/message-text.cjs.map +1 -0
- package/dist/agent-runtime/src/message-text.d.ts +47 -0
- package/dist/agent-runtime/src/message-text.js +15 -0
- package/dist/agent-runtime/src/message-text.js.map +1 -0
- package/dist/agent-runtime/src/message-window.cjs +15 -1
- package/dist/agent-runtime/src/message-window.cjs.map +1 -1
- package/dist/agent-runtime/src/message-window.d.ts +159 -0
- package/dist/agent-runtime/src/message-window.js +16 -2
- package/dist/agent-runtime/src/message-window.js.map +1 -1
- package/dist/agent-runtime/src/messages.cjs +123 -8
- package/dist/agent-runtime/src/messages.cjs.map +1 -1
- package/dist/agent-runtime/src/messages.d.ts +621 -0
- package/dist/agent-runtime/src/messages.js +123 -8
- package/dist/agent-runtime/src/messages.js.map +1 -1
- package/dist/agent-runtime/src/model-context.d.ts +22 -0
- package/dist/agent-runtime/src/offline-status.d.ts +157 -0
- package/dist/agent-runtime/src/optimistic-content.d.ts +21 -0
- package/dist/agent-runtime/src/protocol.cjs +12 -4
- package/dist/agent-runtime/src/protocol.cjs.map +1 -1
- package/dist/agent-runtime/src/protocol.d.ts +119 -0
- package/dist/agent-runtime/src/protocol.js +13 -5
- package/dist/agent-runtime/src/protocol.js.map +1 -1
- package/dist/agent-runtime/src/ptc-subcalls.d.ts +51 -0
- package/dist/agent-runtime/src/queue.d.ts +138 -0
- package/dist/agent-runtime/src/quota-safe-local-storage-session.cjs +10 -0
- 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 +161 -0
- package/dist/agent-runtime/src/quota-safe-local-storage-session.js +10 -0
- package/dist/agent-runtime/src/quota-safe-local-storage-session.js.map +1 -1
- package/dist/agent-runtime/src/running-tool-placeholder.cjs +11 -0
- package/dist/agent-runtime/src/running-tool-placeholder.cjs.map +1 -0
- package/dist/agent-runtime/src/running-tool-placeholder.d.ts +25 -0
- package/dist/agent-runtime/src/running-tool-placeholder.js +11 -0
- package/dist/agent-runtime/src/running-tool-placeholder.js.map +1 -0
- package/dist/agent-runtime/src/runtime-messages.d.ts +104 -0
- package/dist/agent-runtime/src/screen-point.d.ts +151 -0
- package/dist/agent-runtime/src/sealed-idb.cjs +112 -0
- package/dist/agent-runtime/src/sealed-idb.cjs.map +1 -0
- package/dist/agent-runtime/src/sealed-idb.d.ts +106 -0
- package/dist/agent-runtime/src/sealed-idb.js +112 -0
- package/dist/agent-runtime/src/sealed-idb.js.map +1 -0
- package/dist/agent-runtime/src/send-recovery.d.ts +40 -0
- package/dist/agent-runtime/src/session-lane-scope.cjs +25 -0
- package/dist/agent-runtime/src/session-lane-scope.cjs.map +1 -0
- package/dist/agent-runtime/src/session-lane-scope.d.ts +59 -0
- package/dist/agent-runtime/src/session-lane-scope.js +25 -0
- package/dist/agent-runtime/src/session-lane-scope.js.map +1 -0
- package/dist/agent-runtime/src/statewire-attach-observer.d.ts +194 -0
- package/dist/agent-runtime/src/statewire-diagnostics.d.ts +74 -0
- package/dist/agent-runtime/src/statewire-state.d.ts +29 -0
- package/dist/agent-runtime/src/statewire-suspended.cjs.map +1 -1
- package/dist/agent-runtime/src/statewire-suspended.d.ts +27 -0
- package/dist/agent-runtime/src/statewire-suspended.js.map +1 -1
- package/dist/agent-runtime/src/statewire-transport.d.ts +40 -0
- package/dist/agent-runtime/src/streaming-markdown.d.ts +46 -0
- package/dist/agent-runtime/src/subagent-transcripts.cjs +209 -0
- package/dist/agent-runtime/src/subagent-transcripts.cjs.map +1 -0
- package/dist/agent-runtime/src/subagent-transcripts.d.ts +71 -0
- package/dist/agent-runtime/src/subagent-transcripts.js +209 -0
- package/dist/agent-runtime/src/subagent-transcripts.js.map +1 -0
- package/dist/agent-runtime/src/subagents.cjs +253 -0
- package/dist/agent-runtime/src/subagents.cjs.map +1 -0
- package/dist/agent-runtime/src/subagents.d.ts +311 -0
- package/dist/agent-runtime/src/subagents.js +253 -0
- package/dist/agent-runtime/src/subagents.js.map +1 -0
- package/dist/agent-runtime/src/subscription-wake-event.d.ts +111 -0
- package/dist/agent-runtime/src/thread-extras.d.ts +43 -0
- package/dist/agent-runtime/src/thread-handoff.d.ts +364 -0
- package/dist/agent-runtime/src/thread-prewarm-controller.d.ts +76 -0
- package/dist/agent-runtime/src/thread-prewarm.d.ts +118 -0
- package/dist/agent-runtime/src/thread-snapshot-cache.d.ts +99 -0
- package/dist/agent-runtime/src/thread-snapshot-mirror.cjs +46 -117
- package/dist/agent-runtime/src/thread-snapshot-mirror.cjs.map +1 -1
- package/dist/agent-runtime/src/thread-snapshot-mirror.d.ts +101 -0
- package/dist/agent-runtime/src/thread-snapshot-mirror.js +17 -88
- package/dist/agent-runtime/src/thread-snapshot-mirror.js.map +1 -1
- package/dist/agent-runtime/src/thread-status.d.ts +53 -0
- package/dist/agent-runtime/src/tool-metadata.d.ts +146 -0
- package/dist/agent-runtime/src/tool-names.cjs +71 -0
- package/dist/agent-runtime/src/tool-names.cjs.map +1 -1
- package/dist/agent-runtime/src/tool-names.d.ts +67 -0
- package/dist/agent-runtime/src/tool-names.js +72 -1
- package/dist/agent-runtime/src/tool-names.js.map +1 -1
- package/dist/agent-runtime/src/tool-outputs.d.ts +35 -0
- package/dist/agent-runtime/src/tool-result.cjs +1 -0
- package/dist/agent-runtime/src/tool-result.cjs.map +1 -1
- package/dist/agent-runtime/src/tool-result.d.ts +126 -0
- package/dist/agent-runtime/src/tool-result.js +1 -0
- package/dist/agent-runtime/src/tool-result.js.map +1 -1
- package/dist/agent-runtime/src/types.d.ts +159 -0
- package/dist/agent-runtime/src/use-conversation-list.d.ts +76 -0
- package/dist/agent-runtime/src/use-deep-agent-chat-outbox.cjs +136 -0
- package/dist/agent-runtime/src/use-deep-agent-chat-outbox.cjs.map +1 -0
- package/dist/agent-runtime/src/use-deep-agent-chat-outbox.d.ts +64 -0
- package/dist/agent-runtime/src/use-deep-agent-chat-outbox.js +136 -0
- package/dist/agent-runtime/src/use-deep-agent-chat-outbox.js.map +1 -0
- package/dist/agent-runtime/src/use-deep-agent-config.d.ts +169 -0
- package/dist/agent-runtime/src/use-deep-agent-edit-submit.cjs +13 -0
- package/dist/agent-runtime/src/use-deep-agent-edit-submit.cjs.map +1 -1
- package/dist/agent-runtime/src/use-deep-agent-edit-submit.d.ts +22 -0
- package/dist/agent-runtime/src/use-deep-agent-edit-submit.js +13 -0
- package/dist/agent-runtime/src/use-deep-agent-edit-submit.js.map +1 -1
- package/dist/agent-runtime/src/use-deep-agent-runtime.cjs +37 -2
- package/dist/agent-runtime/src/use-deep-agent-runtime.cjs.map +1 -1
- package/dist/agent-runtime/src/use-deep-agent-runtime.d.ts +177 -0
- package/dist/agent-runtime/src/use-deep-agent-runtime.js +38 -3
- package/dist/agent-runtime/src/use-deep-agent-runtime.js.map +1 -1
- package/dist/agent-runtime/src/use-deep-agent-thread.cjs +39 -13
- package/dist/agent-runtime/src/use-deep-agent-thread.cjs.map +1 -1
- package/dist/agent-runtime/src/use-deep-agent-thread.d.ts +352 -0
- package/dist/agent-runtime/src/use-deep-agent-thread.js +39 -13
- package/dist/agent-runtime/src/use-deep-agent-thread.js.map +1 -1
- package/dist/agent-runtime/src/use-deep-agent-voice.cjs +1019 -0
- package/dist/agent-runtime/src/use-deep-agent-voice.cjs.map +1 -0
- package/dist/agent-runtime/src/use-deep-agent-voice.d.ts +409 -0
- package/dist/agent-runtime/src/use-deep-agent-voice.js +1019 -0
- package/dist/agent-runtime/src/use-deep-agent-voice.js.map +1 -0
- package/dist/agent-runtime/src/use-deep-agent-window-sync.d.ts +102 -0
- package/dist/agent-runtime/src/use-historical-edit-attachments.d.ts +2 -0
- package/dist/agent-runtime/src/use-thread-handoff-flow.d.ts +84 -0
- package/dist/agent-runtime/src/voice-presentation.cjs +2 -0
- package/dist/agent-runtime/src/voice-presentation.cjs.map +1 -1
- package/dist/agent-runtime/src/voice-presentation.d.ts +80 -0
- package/dist/agent-runtime/src/voice-presentation.js +2 -0
- package/dist/agent-runtime/src/voice-presentation.js.map +1 -1
- package/dist/agent-runtime/src/voice-turn-grouping.d.ts +28 -0
- package/dist/agent-runtime/src/voice-wire-types.d.ts +15 -0
- package/dist/agent-runtime/src/withdrawn-turns.d.ts +97 -0
- package/dist/catalog/runtime-catalog.js +1 -1
- package/dist/chat/AthenaChat.cjs +192 -103
- package/dist/chat/AthenaChat.cjs.map +1 -1
- package/dist/chat/AthenaChat.d.ts +9 -0
- package/dist/chat/AthenaChat.js +194 -105
- package/dist/chat/AthenaChat.js.map +1 -1
- package/dist/chat/StatewireApprovalCard.d.ts +1 -1
- package/dist/chat/StatewireClientToolBridge.d.ts +1 -1
- package/dist/chat/StatewireQueuedMessages.cjs +11 -4
- package/dist/chat/StatewireQueuedMessages.cjs.map +1 -1
- package/dist/chat/StatewireQueuedMessages.d.ts +1 -1
- package/dist/chat/StatewireQueuedMessages.js +11 -4
- package/dist/chat/StatewireQueuedMessages.js.map +1 -1
- package/dist/chat/chat-outbox-rows.cjs +223 -0
- package/dist/chat/chat-outbox-rows.cjs.map +1 -0
- package/dist/chat/chat-outbox-rows.d.ts +29 -0
- package/dist/chat/chat-outbox-rows.js +223 -0
- package/dist/chat/chat-outbox-rows.js.map +1 -0
- package/dist/chat/chat-voice-controls.cjs +128 -0
- package/dist/chat/chat-voice-controls.cjs.map +1 -0
- package/dist/chat/chat-voice-controls.d.ts +19 -0
- package/dist/chat/chat-voice-controls.js +128 -0
- package/dist/chat/chat-voice-controls.js.map +1 -0
- package/dist/chat/statewire-approval.d.ts +1 -1
- package/dist/chat/statewire-client-tools.d.ts +1 -1
- package/dist/chat/super-grouping/SuperGroupingCard.cjs +3 -1
- package/dist/chat/super-grouping/SuperGroupingCard.cjs.map +1 -1
- package/dist/chat/super-grouping/SuperGroupingCard.d.ts +7 -1
- package/dist/chat/super-grouping/SuperGroupingCard.js +3 -1
- package/dist/chat/super-grouping/SuperGroupingCard.js.map +1 -1
- package/dist/chat/super-grouping/SuperGroupingTranscript.cjs +7 -2
- package/dist/chat/super-grouping/SuperGroupingTranscript.cjs.map +1 -1
- package/dist/chat/super-grouping/SuperGroupingTranscript.d.ts +2 -2
- package/dist/chat/super-grouping/SuperGroupingTranscript.js +7 -2
- package/dist/chat/super-grouping/SuperGroupingTranscript.js.map +1 -1
- package/dist/chat/super-grouping/activity-timeline.cjs +15 -8
- package/dist/chat/super-grouping/activity-timeline.cjs.map +1 -1
- package/dist/chat/super-grouping/activity-timeline.d.ts +18 -8
- package/dist/chat/super-grouping/activity-timeline.js +15 -8
- package/dist/chat/super-grouping/activity-timeline.js.map +1 -1
- package/dist/chat/use-statewire-approval-request.cjs +36 -0
- package/dist/chat/use-statewire-approval-request.cjs.map +1 -1
- package/dist/chat/use-statewire-approval-request.d.ts +49 -1
- package/dist/chat/use-statewire-approval-request.js +39 -3
- package/dist/chat/use-statewire-approval-request.js.map +1 -1
- package/dist/chat-ui/composer/tiptap-composer.cjs +133 -14
- package/dist/chat-ui/composer/tiptap-composer.cjs.map +1 -1
- package/dist/chat-ui/composer/tiptap-composer.d.ts +33 -1
- package/dist/chat-ui/composer/tiptap-composer.js +135 -16
- package/dist/chat-ui/composer/tiptap-composer.js.map +1 -1
- package/dist/chat-ui/header/conversation-history-panel.d.ts +1 -1
- package/dist/chat-ui/index.d.ts +1 -1
- package/dist/chat-ui/mentions/suggestions/data/api-client.cjs +2 -1
- package/dist/chat-ui/mentions/suggestions/data/api-client.cjs.map +1 -1
- package/dist/chat-ui/mentions/suggestions/data/api-client.d.ts +3 -1
- package/dist/chat-ui/mentions/suggestions/data/api-client.js +2 -1
- package/dist/chat-ui/mentions/suggestions/data/api-client.js.map +1 -1
- package/dist/chat-ui/mentions/use-account-workspace-id.cjs +29 -51
- package/dist/chat-ui/mentions/use-account-workspace-id.cjs.map +1 -1
- package/dist/chat-ui/mentions/use-account-workspace-id.d.ts +2 -2
- package/dist/chat-ui/mentions/use-account-workspace-id.js +30 -52
- package/dist/chat-ui/mentions/use-account-workspace-id.js.map +1 -1
- package/dist/chat-ui/messages/message-components.cjs +15 -0
- package/dist/chat-ui/messages/message-components.cjs.map +1 -1
- package/dist/chat-ui/messages/message-components.js +15 -0
- package/dist/chat-ui/messages/message-components.js.map +1 -1
- package/dist/chat-ui/messages/runtime-message.d.ts +1 -1
- package/dist/chat-ui/messages/statewire-continue-run.d.ts +1 -1
- package/dist/chat-ui/messages/user-edit-composer.cjs +15 -2
- package/dist/chat-ui/messages/user-edit-composer.cjs.map +1 -1
- package/dist/chat-ui/messages/user-edit-composer.d.ts +4 -2
- package/dist/chat-ui/messages/user-edit-composer.js +15 -2
- package/dist/chat-ui/messages/user-edit-composer.js.map +1 -1
- package/dist/chat-ui/messages/wake-marker.d.ts +1 -1
- package/dist/chat-ui/rich-text/chat-text-schema.cjs +1 -0
- package/dist/chat-ui/rich-text/chat-text-schema.cjs.map +1 -1
- package/dist/chat-ui/rich-text/chat-text-schema.d.ts +3 -0
- package/dist/chat-ui/rich-text/chat-text-schema.js +1 -0
- package/dist/chat-ui/rich-text/chat-text-schema.js.map +1 -1
- package/dist/chat-ui/statewire.cjs +1 -0
- package/dist/chat-ui/statewire.cjs.map +1 -1
- package/dist/chat-ui/statewire.d.ts +2 -2
- package/dist/chat-ui/statewire.js +2 -1
- package/dist/chat-ui/thread/composer-send-or-stop.cjs +2 -1
- package/dist/chat-ui/thread/composer-send-or-stop.cjs.map +1 -1
- package/dist/chat-ui/thread/composer-send-or-stop.d.ts +2 -0
- package/dist/chat-ui/thread/composer-send-or-stop.js +2 -1
- package/dist/chat-ui/thread/composer-send-or-stop.js.map +1 -1
- package/dist/chat-ui/thread/statewire-history-edge.d.ts +1 -1
- package/dist/composer/AttachmentContext.cjs +8 -4
- package/dist/composer/AttachmentContext.cjs.map +1 -1
- package/dist/composer/AttachmentContext.d.ts +7 -0
- package/dist/composer/AttachmentContext.js +8 -4
- package/dist/composer/AttachmentContext.js.map +1 -1
- package/dist/composer/build-composed-message.cjs +34 -0
- package/dist/composer/build-composed-message.cjs.map +1 -1
- package/dist/composer/build-composed-message.d.ts +20 -0
- package/dist/composer/build-composed-message.js +35 -1
- package/dist/composer/build-composed-message.js.map +1 -1
- package/dist/composer/composer-handoff.cjs +39 -2
- package/dist/composer/composer-handoff.cjs.map +1 -1
- package/dist/composer/composer-handoff.d.ts +28 -3
- package/dist/composer/composer-handoff.js +39 -2
- package/dist/composer/composer-handoff.js.map +1 -1
- package/dist/composer/useAttachFiles.cjs +15 -2
- package/dist/composer/useAttachFiles.cjs.map +1 -1
- package/dist/composer/useAttachFiles.d.ts +11 -0
- package/dist/composer/useAttachFiles.js +15 -2
- package/dist/composer/useAttachFiles.js.map +1 -1
- package/dist/composer/useSendMessage.cjs.map +1 -1
- package/dist/composer/useSendMessage.d.ts +4 -3
- package/dist/composer/useSendMessage.js.map +1 -1
- package/dist/diagnostics/athena-diagnostics.cjs.map +1 -1
- package/dist/diagnostics/athena-diagnostics.d.ts +3 -1
- package/dist/diagnostics/athena-diagnostics.js.map +1 -1
- package/dist/index.cjs +13 -0
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.ts +14 -7
- package/dist/index.js +14 -1
- package/dist/index.js.map +1 -1
- package/dist/offline/chat-outbox.cjs +57 -0
- package/dist/offline/chat-outbox.cjs.map +1 -0
- package/dist/offline/chat-outbox.d.ts +80 -0
- package/dist/offline/chat-outbox.js +57 -0
- package/dist/offline/chat-outbox.js.map +1 -0
- package/dist/offline/offline-history.d.ts +1 -1
- package/dist/provider/AthenaProvider.cjs +162 -8
- package/dist/provider/AthenaProvider.cjs.map +1 -1
- package/dist/provider/AthenaProvider.d.ts +15 -1
- package/dist/provider/AthenaProvider.js +163 -9
- package/dist/provider/AthenaProvider.js.map +1 -1
- package/dist/provider/statewire-window-context.d.ts +1 -1
- package/dist/react/package.json.cjs +1 -1
- package/dist/react/package.json.js +1 -1
- package/dist/references/src/anchors/file-line-range.d.ts +58 -0
- package/dist/references/src/anchors/format.d.ts +21 -0
- package/dist/references/src/anchors/message-anchors.d.ts +71 -0
- package/dist/references/src/anchors/parse.d.ts +8 -0
- package/dist/references/src/anchors/registry-contract.d.ts +24 -0
- package/dist/references/src/anchors/registry.d.ts +19 -0
- package/dist/references/src/anchors/schemas.d.ts +194 -0
- package/dist/references/src/anchors/serialize.d.ts +8 -0
- package/dist/references/src/anchors/time.d.ts +78 -0
- package/dist/references/src/anchors/types.d.ts +474 -0
- package/dist/references/src/asset-bounds.d.ts +27 -0
- package/dist/references/src/asset-links.d.ts +23 -0
- package/dist/references/src/asset-reference.d.ts +16 -0
- package/dist/references/src/formats/format-catalog.d.ts +79 -0
- package/dist/references/src/formats/markdown/parse-reference-markdown.d.ts +28 -0
- package/dist/references/src/formats/markdown/reference-display-name.d.ts +6 -0
- package/dist/references/src/formats/object/asset-object.d.ts +9 -0
- package/dist/references/src/formats/object/callable-object.d.ts +6 -0
- package/dist/references/src/formats/object/decode-reference-object-payload.d.ts +3 -0
- package/dist/references/src/formats/object/external-url-object.d.ts +9 -0
- package/dist/references/src/formats/object/group-object.d.ts +9 -0
- package/dist/references/src/formats/object/navigation-object.d.ts +9 -0
- package/dist/references/src/formats/object/parse-reference-object.d.ts +11 -0
- package/dist/references/src/formats/object/person-object.d.ts +9 -0
- package/dist/references/src/formats/uri/asset-mention-uri.d.ts +9 -0
- package/dist/references/src/formats/uri/asset-spaces-url.d.ts +9 -0
- package/dist/references/src/formats/uri/callable-mention-uris.d.ts +9 -0
- package/dist/references/src/formats/uri/detect-uri-wire.d.ts +9 -0
- package/dist/references/src/formats/uri/group-mention-uri.d.ts +12 -0
- package/dist/references/src/formats/uri/navigation-spaces-url.d.ts +14 -0
- package/dist/references/src/formats/uri/parse-reference-uri.d.ts +20 -0
- package/dist/references/src/formats/uri/person-mention-uri.d.ts +9 -0
- package/dist/references/src/formats/uri/template-placeholder.d.ts +12 -0
- package/dist/references/src/index.d.ts +47 -0
- package/dist/references/src/legacy/index.d.ts +14 -0
- package/dist/references/src/legacy/pre-reference-asset-url.d.ts +57 -0
- package/dist/references/src/legacy/pre-reference-citation-bridge.d.ts +22 -0
- package/dist/references/src/legacy/pre-reference-citation.d.ts +138 -0
- package/dist/references/src/legacy/pre-reference-external-url.d.ts +31 -0
- package/dist/references/src/legacy/pre-reference-format.d.ts +8 -0
- package/dist/references/src/legacy/pre-reference-mention.d.ts +27 -0
- package/dist/references/src/legacy/pre-reference-object.d.ts +8 -0
- package/dist/references/src/legacy/pre-reference-uri.d.ts +12 -0
- package/dist/references/src/legacy.d.ts +2 -0
- package/dist/references/src/mention-href-patterns.d.ts +19 -0
- package/dist/references/src/mention-node/index.d.ts +5 -0
- package/dist/references/src/mention-node/mention-node.d.ts +31 -0
- package/dist/references/src/mention-node/resolve-node-attrs.d.ts +27 -0
- package/dist/references/src/parse-reference.d.ts +23 -0
- package/dist/references/src/schemas.d.ts +463 -0
- package/dist/references/src/serialize-reference.d.ts +50 -0
- package/dist/references/src/sheet-name.d.ts +10 -0
- package/dist/references/src/tool-option-schemas.d.ts +597 -0
- package/dist/references/src/types.d.ts +125 -0
- package/dist/references/src/version-ref.d.ts +30 -0
- package/dist/runtime/statewire-lifecycle.d.ts +1 -1
- package/dist/runtime/statewire-model-lane.d.ts +1 -1
- package/dist/runtime/statewire-server-lane-context.d.ts +1 -1
- package/dist/runtime/statewire-session-key.cjs +7 -0
- package/dist/runtime/statewire-session-key.cjs.map +1 -1
- package/dist/runtime/statewire-session-key.d.ts +19 -0
- package/dist/runtime/statewire-session-key.js +8 -1
- package/dist/runtime/statewire-session-key.js.map +1 -1
- package/dist/runtime/statewire-session-lane.cjs +48 -0
- package/dist/runtime/statewire-session-lane.cjs.map +1 -0
- package/dist/runtime/statewire-session-lane.d.ts +29 -0
- package/dist/runtime/statewire-session-lane.js +48 -0
- package/dist/runtime/statewire-session-lane.js.map +1 -0
- package/dist/runtime/statewire-thread-config-lane.d.ts +1 -1
- package/dist/runtime/useAthenaStatewireRuntime.cjs +19 -5
- package/dist/runtime/useAthenaStatewireRuntime.cjs.map +1 -1
- package/dist/runtime/useAthenaStatewireRuntime.d.ts +15 -1
- package/dist/runtime/useAthenaStatewireRuntime.js +20 -6
- package/dist/runtime/useAthenaStatewireRuntime.js.map +1 -1
- package/dist/styles.css +1 -1
- package/dist/threads/api.d.ts +1 -1
- package/dist/threads/conversation-list-fetcher.d.ts +1 -1
- package/dist/threads/index-triggered-refresh.cjs +164 -0
- package/dist/threads/index-triggered-refresh.cjs.map +1 -0
- package/dist/threads/index-triggered-refresh.d.ts +70 -0
- package/dist/threads/index-triggered-refresh.js +164 -0
- package/dist/threads/index-triggered-refresh.js.map +1 -0
- package/dist/threads/offline-session-list.d.ts +1 -1
- package/dist/threads/pull-request-display.d.ts +1 -1
- package/dist/threads/session-list-model.d.ts +1 -1
- package/dist/threads/session-list-tab-share.cjs +150 -0
- package/dist/threads/session-list-tab-share.cjs.map +1 -0
- package/dist/threads/session-list-tab-share.d.ts +73 -0
- package/dist/threads/session-list-tab-share.js +150 -0
- package/dist/threads/session-list-tab-share.js.map +1 -0
- package/dist/threads/session-row-parts.d.ts +1 -1
- package/dist/threads/sessions-query.d.ts +1 -1
- package/dist/threads/statewire-thread-list.cjs +42 -16
- 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 +43 -17
- package/dist/threads/statewire-thread-list.js.map +1 -1
- package/dist/threads/thread-prefetcher.d.ts +1 -1
- package/dist/threads/use-athena-session-attention.d.ts +1 -1
- package/dist/threads/use-athena-sessions.cjs +32 -22
- package/dist/threads/use-athena-sessions.cjs.map +1 -1
- package/dist/threads/use-athena-sessions.js +33 -23
- package/dist/threads/use-athena-sessions.js.map +1 -1
- package/dist/threads/use-rest-conversation-history.d.ts +1 -1
- package/dist/threads/use-statewire-conversation-history.d.ts +5 -5
- package/dist/tiptap-markdown-table/src/markdown-table-serializer.d.ts +56 -0
- package/dist/tools/NestedPtcMessages.cjs +14 -9
- package/dist/tools/NestedPtcMessages.cjs.map +1 -1
- package/dist/tools/NestedPtcMessages.d.ts +9 -0
- package/dist/tools/NestedPtcMessages.js +6 -1
- package/dist/tools/NestedPtcMessages.js.map +1 -1
- package/dist/tools/index.d.ts +1 -1
- package/dist/tools/primitives.d.ts +1 -1
- package/dist/tools/subagent-task-tool-ui.cjs +494 -0
- package/dist/tools/subagent-task-tool-ui.cjs.map +1 -0
- package/dist/tools/subagent-task-tool-ui.d.ts +109 -0
- package/dist/tools/subagent-task-tool-ui.js +494 -0
- package/dist/tools/subagent-task-tool-ui.js.map +1 -0
- package/dist/tools/tool-fallback.d.ts +1 -1
- package/dist/tools/tool-icons.d.ts +1 -1
- package/dist/tools/tool-summary.d.ts +1 -1
- package/dist/tools/tool-uis.cjs +4 -0
- package/dist/tools/tool-uis.cjs.map +1 -1
- package/dist/tools/tool-uis.js +4 -0
- package/dist/tools/tool-uis.js.map +1 -1
- package/dist/voice/chat.cjs +6 -0
- package/dist/voice/chat.cjs.map +1 -0
- package/dist/voice/chat.d.ts +2 -0
- package/dist/voice/chat.js +6 -0
- package/dist/voice/chat.js.map +1 -0
- package/dist/voice/livekit-join.cjs +119 -0
- package/dist/voice/livekit-join.cjs.map +1 -0
- package/dist/voice/livekit-join.d.ts +8 -0
- package/dist/voice/livekit-join.js +119 -0
- package/dist/voice/livekit-join.js.map +1 -0
- package/dist/voice/livekit.cjs +32 -0
- package/dist/voice/livekit.cjs.map +1 -0
- package/dist/voice/livekit.d.ts +80 -0
- package/dist/voice/livekit.js +32 -0
- package/dist/voice/livekit.js.map +1 -0
- package/dist/voice/use-chat-voice-enabled.cjs +43 -0
- package/dist/voice/use-chat-voice-enabled.cjs.map +1 -0
- package/dist/voice/use-chat-voice-enabled.d.ts +9 -0
- package/dist/voice/use-chat-voice-enabled.js +43 -0
- package/dist/voice/use-chat-voice-enabled.js.map +1 -0
- package/package.json +22 -16
|
@@ -0,0 +1,494 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
|
|
3
|
+
const jsxRuntime = require("react/jsx-runtime");
|
|
4
|
+
const react$1 = require("@assistant-ui/react");
|
|
5
|
+
const reactQuery = require("@tanstack/react-query");
|
|
6
|
+
const lucideReact = require("lucide-react");
|
|
7
|
+
const react = require("react");
|
|
8
|
+
const useStatewireApprovalRequest = require("../chat/use-statewire-approval-request.cjs");
|
|
9
|
+
const messageTime = require("../chat/message-time.cjs");
|
|
10
|
+
const turnTiming = require("../chat/super-grouping/turn-timing.cjs");
|
|
11
|
+
const athenaDiagnostics = require("../diagnostics/athena-diagnostics.cjs");
|
|
12
|
+
const useAthenaRestQuery = require("../lib/use-athena-rest-query.cjs");
|
|
13
|
+
const collapsible = require("../ui/collapsible.cjs");
|
|
14
|
+
const NestedPtcMessages = require("./NestedPtcMessages.cjs");
|
|
15
|
+
const stepText = require("./step-text.cjs");
|
|
16
|
+
const toolAppearance = require("./tool-appearance.cjs");
|
|
17
|
+
const toolFallback = require("./tool-fallback.cjs");
|
|
18
|
+
const toolSummary = require("./tool-summary.cjs");
|
|
19
|
+
const threadExtras = require("../agent-runtime/src/thread-extras.cjs");
|
|
20
|
+
const subagents = require("../agent-runtime/src/subagents.cjs");
|
|
21
|
+
const toolNames = require("../agent-runtime/src/tool-names.cjs");
|
|
22
|
+
const laneHistory = require("../agent-runtime/src/lane-history.cjs");
|
|
23
|
+
const subagentTranscripts = require("../agent-runtime/src/subagent-transcripts.cjs");
|
|
24
|
+
const messages = require("../agent-runtime/src/messages.cjs");
|
|
25
|
+
const cnfast = require("cnfast");
|
|
26
|
+
const NO_LANE_STEPS = [];
|
|
27
|
+
const NO_MESSAGES = [];
|
|
28
|
+
const SUBAGENT_LANE_PHASE_LABELS = {
|
|
29
|
+
queued: "Queued",
|
|
30
|
+
approval: "Waiting for approval",
|
|
31
|
+
waiting: "Waiting for you",
|
|
32
|
+
running: "Running",
|
|
33
|
+
complete: "Done",
|
|
34
|
+
error: "Failed",
|
|
35
|
+
stopped: "Stopped"
|
|
36
|
+
};
|
|
37
|
+
function subagentLanePhase({
|
|
38
|
+
status,
|
|
39
|
+
partStatus,
|
|
40
|
+
awaitingApproval = false
|
|
41
|
+
}) {
|
|
42
|
+
if (status === "complete" || status === "error") return status;
|
|
43
|
+
if (awaitingApproval) return "approval";
|
|
44
|
+
if ((partStatus == null ? void 0 : partStatus.type) === "requires-action") return "waiting";
|
|
45
|
+
if ((partStatus == null ? void 0 : partStatus.type) === "incomplete") {
|
|
46
|
+
return partStatus.reason === "cancelled" ? "stopped" : "error";
|
|
47
|
+
}
|
|
48
|
+
return status;
|
|
49
|
+
}
|
|
50
|
+
function isSettledSubagentLanePhase(phase) {
|
|
51
|
+
return phase === "complete" || phase === "error" || phase === "stopped";
|
|
52
|
+
}
|
|
53
|
+
function subagentLaneResult({
|
|
54
|
+
output,
|
|
55
|
+
phase,
|
|
56
|
+
partStatus
|
|
57
|
+
}) {
|
|
58
|
+
if (!isSettledSubagentLanePhase(phase)) return "";
|
|
59
|
+
const own = (output == null ? void 0 : output.trim()) ?? "";
|
|
60
|
+
if (own !== "" || phase !== "error" || (partStatus == null ? void 0 : partStatus.type) !== "incomplete") return own;
|
|
61
|
+
const { error } = partStatus;
|
|
62
|
+
if (error === void 0 || error === null) return "";
|
|
63
|
+
return (typeof error === "string" ? error : JSON.stringify(error)).trim();
|
|
64
|
+
}
|
|
65
|
+
function record(value) {
|
|
66
|
+
return value && typeof value === "object" && !Array.isArray(value) ? value : void 0;
|
|
67
|
+
}
|
|
68
|
+
function finishedLaneDurationMs(artifact) {
|
|
69
|
+
const stamps = record(artifact);
|
|
70
|
+
const startedAt = turnTiming.readInstantMs(stamps == null ? void 0 : stamps._started_at);
|
|
71
|
+
const finishedAt = turnTiming.readInstantMs(stamps == null ? void 0 : stamps[messageTime.MESSAGE_CREATED_AT_KEY]);
|
|
72
|
+
return startedAt !== null && finishedAt !== null && finishedAt >= startedAt ? finishedAt - startedAt : null;
|
|
73
|
+
}
|
|
74
|
+
const ASSISTANT_TYPES = /* @__PURE__ */ new Set(["ai", "AIMessageChunk"]);
|
|
75
|
+
function laneDelegatedAtMs({
|
|
76
|
+
sources,
|
|
77
|
+
toolCallId
|
|
78
|
+
}) {
|
|
79
|
+
for (const source of sources) {
|
|
80
|
+
const message = record(source);
|
|
81
|
+
if (!message || !ASSISTANT_TYPES.has(message.type)) continue;
|
|
82
|
+
const calls = message.tool_calls;
|
|
83
|
+
if (!Array.isArray(calls) || !calls.some((call) => {
|
|
84
|
+
var _a;
|
|
85
|
+
return ((_a = record(call)) == null ? void 0 : _a.id) === toolCallId;
|
|
86
|
+
})) continue;
|
|
87
|
+
const kwargs = record(message.additional_kwargs);
|
|
88
|
+
const metadata = record(kwargs == null ? void 0 : kwargs.metadata);
|
|
89
|
+
return turnTiming.readInstantMs(metadata == null ? void 0 : metadata[messageTime.MESSAGE_CREATED_AT_KEY]) ?? turnTiming.readInstantMs(kwargs == null ? void 0 : kwargs[messageTime.MESSAGE_CREATED_AT_KEY]) ?? turnTiming.readInstantMs(message[messageTime.MESSAGE_CREATED_AT_KEY]);
|
|
90
|
+
}
|
|
91
|
+
return null;
|
|
92
|
+
}
|
|
93
|
+
function latestLaneStep(messages2) {
|
|
94
|
+
for (let index = messages2.length - 1; index >= 0; index -= 1) {
|
|
95
|
+
const message = messages2[index];
|
|
96
|
+
if ((message == null ? void 0 : message.role) !== "assistant") continue;
|
|
97
|
+
for (let partIndex = message.content.length - 1; partIndex >= 0; partIndex -= 1) {
|
|
98
|
+
const part = message.content[partIndex];
|
|
99
|
+
if ((part == null ? void 0 : part.type) !== "tool-call") continue;
|
|
100
|
+
const answered = part.result !== void 0 && part.isPreliminary !== true;
|
|
101
|
+
return toolSummary.summarizeToolCall({
|
|
102
|
+
toolName: part.toolName,
|
|
103
|
+
args: part.args,
|
|
104
|
+
result: answered ? part.result : void 0,
|
|
105
|
+
status: answered ? part.isError === true ? "error" : "complete" : "running"
|
|
106
|
+
});
|
|
107
|
+
}
|
|
108
|
+
}
|
|
109
|
+
return null;
|
|
110
|
+
}
|
|
111
|
+
function subagentTypeLabel(name) {
|
|
112
|
+
const trimmed = name.trim();
|
|
113
|
+
if (trimmed === "" || trimmed === "subagent" || trimmed === "general-purpose") return "Subagent";
|
|
114
|
+
return toolSummary.humanizeToolName(trimmed);
|
|
115
|
+
}
|
|
116
|
+
function toolCallCountLabel(count) {
|
|
117
|
+
return `${count} tool call${count === 1 ? "" : "s"}`;
|
|
118
|
+
}
|
|
119
|
+
function stepsLabel(count) {
|
|
120
|
+
return `${count} step${count === 1 ? "" : "s"}`;
|
|
121
|
+
}
|
|
122
|
+
function laneStepsNote({
|
|
123
|
+
shown,
|
|
124
|
+
total,
|
|
125
|
+
arrivesLater
|
|
126
|
+
}) {
|
|
127
|
+
if (total === void 0 || total <= shown) return null;
|
|
128
|
+
const leftOff = total - shown;
|
|
129
|
+
return arrivesLater ? `Showing the latest steps. ${leftOff} earlier ${leftOff === 1 ? "step arrives" : "steps arrive"} when this subagent finishes.` : `Showing the latest ${shown} of ${stepsLabel(total)}.`;
|
|
130
|
+
}
|
|
131
|
+
function useInReadOnlyThread() {
|
|
132
|
+
return react$1.useAuiState((s) => {
|
|
133
|
+
var _a;
|
|
134
|
+
const thread = (_a = s.optional) == null ? void 0 : _a.thread;
|
|
135
|
+
return thread !== void 0 && !threadExtras.hasStatewireThreadExtras(thread.extras);
|
|
136
|
+
});
|
|
137
|
+
}
|
|
138
|
+
function laneFromArgs(toolCallId, args) {
|
|
139
|
+
const record2 = typeof args === "object" && args !== null ? args : {};
|
|
140
|
+
return {
|
|
141
|
+
id: toolCallId,
|
|
142
|
+
name: typeof record2.subagent_type === "string" ? record2.subagent_type : "subagent",
|
|
143
|
+
description: typeof record2.description === "string" ? record2.description : "",
|
|
144
|
+
status: "queued",
|
|
145
|
+
toolCallCount: 0,
|
|
146
|
+
messages: NO_MESSAGES,
|
|
147
|
+
messageCount: 0,
|
|
148
|
+
currentText: ""
|
|
149
|
+
};
|
|
150
|
+
}
|
|
151
|
+
function LaneStatusGlyph({ phase }) {
|
|
152
|
+
const glyph = phase === "running" ? /* @__PURE__ */ jsxRuntime.jsx(lucideReact.LoaderIcon, { className: "size-3.5 animate-spin text-muted-foreground motion-reduce:animate-none" }) : phase === "complete" ? /* @__PURE__ */ jsxRuntime.jsx(lucideReact.CheckIcon, { className: "size-3.5 text-emerald-600" }) : phase === "error" ? /* @__PURE__ */ jsxRuntime.jsx(lucideReact.AlertCircleIcon, { className: "size-3.5 text-destructive" }) : phase === "stopped" ? /* @__PURE__ */ jsxRuntime.jsx(lucideReact.XCircleIcon, { className: "size-3.5 text-muted-foreground" }) : phase === "waiting" || phase === "approval" ? /* @__PURE__ */ jsxRuntime.jsx(lucideReact.ShieldAlertIcon, { className: "size-3.5 text-amber-600" }) : /* @__PURE__ */ jsxRuntime.jsx(lucideReact.CircleDashedIcon, { className: "size-3.5 text-muted-foreground motion-safe:animate-pulse" });
|
|
153
|
+
return /* @__PURE__ */ jsxRuntime.jsx(
|
|
154
|
+
"span",
|
|
155
|
+
{
|
|
156
|
+
"data-slot": "subagent-status",
|
|
157
|
+
"data-phase": phase,
|
|
158
|
+
"aria-hidden": "true",
|
|
159
|
+
className: "mt-0.5 flex size-4 shrink-0 items-center justify-center",
|
|
160
|
+
children: glyph
|
|
161
|
+
}
|
|
162
|
+
);
|
|
163
|
+
}
|
|
164
|
+
function useRunningElapsedMs(running, startMs) {
|
|
165
|
+
const [clock, setClock] = react.useState(null);
|
|
166
|
+
react.useEffect(() => {
|
|
167
|
+
if (!running) {
|
|
168
|
+
setClock(null);
|
|
169
|
+
return void 0;
|
|
170
|
+
}
|
|
171
|
+
const seenAt = Date.now();
|
|
172
|
+
setClock({ seenAt, now: seenAt });
|
|
173
|
+
const timer = setInterval(() => setClock({ seenAt, now: Date.now() }), 1e3);
|
|
174
|
+
return () => clearInterval(timer);
|
|
175
|
+
}, [running]);
|
|
176
|
+
if (!running || clock === null) return null;
|
|
177
|
+
return Math.max(0, clock.now - (startMs ?? clock.seenAt));
|
|
178
|
+
}
|
|
179
|
+
const LaneStepComponentsContext = react.createContext(null);
|
|
180
|
+
const EmptyStepPart = () => null;
|
|
181
|
+
const LaneStep = () => {
|
|
182
|
+
const role = react$1.useAuiState((s) => s.message.role);
|
|
183
|
+
const components = react.useContext(LaneStepComponentsContext);
|
|
184
|
+
if (role !== "assistant") return null;
|
|
185
|
+
return /* @__PURE__ */ jsxRuntime.jsx(react$1.MessagePrimitive.Parts, { components: { Empty: EmptyStepPart, ...components } });
|
|
186
|
+
};
|
|
187
|
+
const LANE_ROW_COMPONENTS = { Message: LaneStep };
|
|
188
|
+
const ROW_KEY_SEPARATOR = "\0";
|
|
189
|
+
function LaneRows() {
|
|
190
|
+
const joinedKeys = react$1.useAuiState(
|
|
191
|
+
(s) => s.thread.messages.map((message) => messages.deepAgentRowKey(message)).join(ROW_KEY_SEPARATOR)
|
|
192
|
+
);
|
|
193
|
+
const rowKeys = react.useMemo(
|
|
194
|
+
() => joinedKeys === "" ? [] : joinedKeys.split(ROW_KEY_SEPARATOR),
|
|
195
|
+
[joinedKeys]
|
|
196
|
+
);
|
|
197
|
+
return /* @__PURE__ */ jsxRuntime.jsx(jsxRuntime.Fragment, { children: rowKeys.map((key, index) => /* @__PURE__ */ jsxRuntime.jsx(react$1.ThreadPrimitive.MessageByIndex, { index, components: LANE_ROW_COMPONENTS }, key)) });
|
|
198
|
+
}
|
|
199
|
+
class LaneStepsBoundary extends react.Component {
|
|
200
|
+
constructor(props) {
|
|
201
|
+
super(props);
|
|
202
|
+
this.state = { failed: false };
|
|
203
|
+
}
|
|
204
|
+
static getDerivedStateFromError() {
|
|
205
|
+
return { failed: true };
|
|
206
|
+
}
|
|
207
|
+
componentDidCatch(error, errorInfo) {
|
|
208
|
+
var _a;
|
|
209
|
+
athenaDiagnostics.athenaDiagnostics.error(
|
|
210
|
+
"sdk.error",
|
|
211
|
+
error,
|
|
212
|
+
{
|
|
213
|
+
code: "chat_render_crash",
|
|
214
|
+
message: "A subagent's steps could not be shown",
|
|
215
|
+
hint: "Inspect component_stack: a tool UI that reads the live thread fails inside a subagent's read-only steps."
|
|
216
|
+
},
|
|
217
|
+
{
|
|
218
|
+
surface: "subagent-lane",
|
|
219
|
+
subagent: this.props.name,
|
|
220
|
+
component_stack: ((_a = errorInfo.componentStack) == null ? void 0 : _a.slice(0, 2e3)) ?? null
|
|
221
|
+
}
|
|
222
|
+
);
|
|
223
|
+
}
|
|
224
|
+
render() {
|
|
225
|
+
if (this.state.failed) {
|
|
226
|
+
return /* @__PURE__ */ jsxRuntime.jsx("p", { role: "alert", className: "px-1 text-xs text-muted-foreground", children: "These steps couldn't be shown. The conversation is not affected." });
|
|
227
|
+
}
|
|
228
|
+
return this.props.children;
|
|
229
|
+
}
|
|
230
|
+
}
|
|
231
|
+
function LaneQueryScope({ children }) {
|
|
232
|
+
const queryClient = useAthenaRestQuery.useAthenaQueryClient();
|
|
233
|
+
return /* @__PURE__ */ jsxRuntime.jsx(reactQuery.QueryClientProvider, { client: queryClient, children });
|
|
234
|
+
}
|
|
235
|
+
function LaneSteps({ lane, phase, result, partMessages }) {
|
|
236
|
+
var _a, _b;
|
|
237
|
+
const running = lane.status === "running" && (phase === "running" || phase === "approval");
|
|
238
|
+
const source = lane.source;
|
|
239
|
+
const history = laneHistory.useDeepAgentLaneHistory({
|
|
240
|
+
messageId: source == null ? void 0 : source.messageId,
|
|
241
|
+
lane: source == null ? void 0 : source.lane,
|
|
242
|
+
carried: (source == null ? void 0 : source.transcript) ?? NO_LANE_STEPS,
|
|
243
|
+
total: (_a = source == null ? void 0 : source.truncated) == null ? void 0 : _a.messages,
|
|
244
|
+
finished: ((_b = source == null ? void 0 : source.truncated) == null ? void 0 : _b.finished) === true
|
|
245
|
+
});
|
|
246
|
+
const [convertLane] = react.useState(() => subagentTranscripts.createSubagentLaneConversion());
|
|
247
|
+
const report = lane.status === "complete" && (source == null ? void 0 : source.messageId) !== void 0 ? lane.output : void 0;
|
|
248
|
+
const messages2 = (source === void 0 ? void 0 : convertLane(subagentTranscripts.withLaneReport(history.steps, report), running)) ?? partMessages ?? NO_MESSAGES;
|
|
249
|
+
const components = NestedPtcMessages.useNestedPtcComponents(toolFallback.ToolFallback);
|
|
250
|
+
const shown = history.steps.length;
|
|
251
|
+
const arrivesLater = running && (source == null ? void 0 : source.messageId) !== void 0 && !history.available;
|
|
252
|
+
const note = laneStepsNote({ shown, total: history.total, arrivesLater });
|
|
253
|
+
const emptyText = phase === "running" ? "Starting…" : phase === "queued" || phase === "waiting" || phase === "approval" ? "Not started yet." : "No steps were recorded for this subagent.";
|
|
254
|
+
const failed = phase === "error";
|
|
255
|
+
const closing = failed || messages2.length === 0 ? result : "";
|
|
256
|
+
return /* @__PURE__ */ jsxRuntime.jsxs("div", { "data-slot": "subagent-steps", className: "flex min-w-0 flex-col gap-2 px-2.5", children: [
|
|
257
|
+
lane.description ? /* @__PURE__ */ jsxRuntime.jsx(
|
|
258
|
+
"p",
|
|
259
|
+
{
|
|
260
|
+
"data-slot": "subagent-brief",
|
|
261
|
+
className: "whitespace-pre-wrap break-words text-xs leading-relaxed text-muted-foreground",
|
|
262
|
+
children: lane.description
|
|
263
|
+
}
|
|
264
|
+
) : null,
|
|
265
|
+
note ? /* @__PURE__ */ jsxRuntime.jsxs(
|
|
266
|
+
"div",
|
|
267
|
+
{
|
|
268
|
+
"data-slot": "subagent-steps-note",
|
|
269
|
+
className: "flex flex-wrap items-center gap-x-2 gap-y-1 text-xs text-muted-foreground",
|
|
270
|
+
children: [
|
|
271
|
+
/* @__PURE__ */ jsxRuntime.jsx("span", { children: note }),
|
|
272
|
+
history.hasEarlier && !arrivesLater ? /* @__PURE__ */ jsxRuntime.jsx(
|
|
273
|
+
"button",
|
|
274
|
+
{
|
|
275
|
+
type: "button",
|
|
276
|
+
onClick: history.loadEarlier,
|
|
277
|
+
disabled: history.loading,
|
|
278
|
+
className: "rounded font-medium text-primary hover:underline focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring disabled:cursor-default disabled:no-underline disabled:opacity-60",
|
|
279
|
+
children: history.loading ? "Loading earlier steps…" : "Load earlier steps"
|
|
280
|
+
}
|
|
281
|
+
) : null
|
|
282
|
+
]
|
|
283
|
+
}
|
|
284
|
+
) : null,
|
|
285
|
+
messages2.length > 0 ? /* @__PURE__ */ jsxRuntime.jsx(LaneStepsBoundary, { name: lane.name, children: /* @__PURE__ */ jsxRuntime.jsx(LaneStepComponentsContext.Provider, { value: components, children: /* @__PURE__ */ jsxRuntime.jsx(react$1.ReadonlyThreadProvider, { messages: messages2, children: /* @__PURE__ */ jsxRuntime.jsx("div", { "data-slot": "subagent-step-rows", className: "flex min-w-0 flex-col gap-1", children: /* @__PURE__ */ jsxRuntime.jsx(LaneRows, {}) }) }) }) }) : /* @__PURE__ */ jsxRuntime.jsx("p", { className: "text-xs text-muted-foreground", children: emptyText }),
|
|
286
|
+
closing ? /* @__PURE__ */ jsxRuntime.jsxs("div", { "data-slot": "subagent-result", className: "flex min-w-0 flex-col gap-0.5", children: [
|
|
287
|
+
/* @__PURE__ */ jsxRuntime.jsx(
|
|
288
|
+
"p",
|
|
289
|
+
{
|
|
290
|
+
className: cnfast.cn(
|
|
291
|
+
"text-xs font-medium",
|
|
292
|
+
failed ? "text-destructive" : "text-muted-foreground"
|
|
293
|
+
),
|
|
294
|
+
children: failed ? "Error" : "Report"
|
|
295
|
+
}
|
|
296
|
+
),
|
|
297
|
+
/* @__PURE__ */ jsxRuntime.jsx(
|
|
298
|
+
"p",
|
|
299
|
+
{
|
|
300
|
+
"data-slot": "subagent-result-text",
|
|
301
|
+
className: cnfast.cn(
|
|
302
|
+
"max-h-72 overflow-auto whitespace-pre-wrap break-words text-xs leading-relaxed",
|
|
303
|
+
failed ? "text-destructive/80" : "text-foreground/80"
|
|
304
|
+
),
|
|
305
|
+
children: closing
|
|
306
|
+
}
|
|
307
|
+
)
|
|
308
|
+
] }) : null
|
|
309
|
+
] });
|
|
310
|
+
}
|
|
311
|
+
function laneMeta({
|
|
312
|
+
phase,
|
|
313
|
+
toolCallCount,
|
|
314
|
+
elapsedMs
|
|
315
|
+
}) {
|
|
316
|
+
const parts = [SUBAGENT_LANE_PHASE_LABELS[phase]];
|
|
317
|
+
if (toolCallCount > 0 || isSettledSubagentLanePhase(phase)) {
|
|
318
|
+
parts.push(toolCallCountLabel(toolCallCount));
|
|
319
|
+
}
|
|
320
|
+
if (elapsedMs !== null && (phase !== "running" || elapsedMs >= 1e3)) {
|
|
321
|
+
parts.push(turnTiming.formatWorkDuration(elapsedMs));
|
|
322
|
+
}
|
|
323
|
+
return parts.join(" · ");
|
|
324
|
+
}
|
|
325
|
+
function SubagentTaskCard({ toolCallId, args, status, artifact, messages: messages2 }) {
|
|
326
|
+
const appearance = toolAppearance.useToolAppearance();
|
|
327
|
+
const isThread = appearance === "thread";
|
|
328
|
+
const readLane = react$1.useAuiState((s) => subagents.taskSubagentsOfTurn(s.message).get(toolCallId));
|
|
329
|
+
const lane = react.useMemo(
|
|
330
|
+
() => readLane ?? laneFromArgs(toolCallId, args),
|
|
331
|
+
[readLane, toolCallId, args]
|
|
332
|
+
);
|
|
333
|
+
const { toolCallIds: waitingToolCallIds } = useStatewireApprovalRequest.useApprovalWaitInScope();
|
|
334
|
+
const awaitingApproval = subagents.subagentAwaitingApproval({ lane, toolCallIds: waitingToolCallIds });
|
|
335
|
+
const gatedCall = awaitingApproval ? subagents.subagentToolCallAwaitingApproval({ lane, toolCallIds: waitingToolCallIds }) : void 0;
|
|
336
|
+
const phase = subagentLanePhase({ status: lane.status, partStatus: status, awaitingApproval });
|
|
337
|
+
const running = phase === "running";
|
|
338
|
+
const delegatedAt = react$1.useAuiState(
|
|
339
|
+
(s) => running ? laneDelegatedAtMs({ sources: react$1.getExternalStoreMessages(s.message), toolCallId }) : null
|
|
340
|
+
);
|
|
341
|
+
const runningElapsed = useRunningElapsedMs(running, delegatedAt);
|
|
342
|
+
const elapsedMs = running ? runningElapsed : isSettledSubagentLanePhase(phase) ? finishedLaneDurationMs(artifact) : null;
|
|
343
|
+
const step = react.useMemo(() => running ? latestLaneStep(lane.messages) : null, [running, lane.messages]);
|
|
344
|
+
const hasSteps = lane.messageCount > 0 || (lane.omittedMessageCount ?? 0) > 0;
|
|
345
|
+
const typeLabel = subagentTypeLabel(lane.name);
|
|
346
|
+
const title = lane.description.trim() || typeLabel;
|
|
347
|
+
const meta = laneMeta({ phase, toolCallCount: lane.toolCallCount, elapsedMs });
|
|
348
|
+
const liveText = step ? null : lane.currentText.trim();
|
|
349
|
+
const report = subagentLaneResult({ output: lane.output, phase, partStatus: status });
|
|
350
|
+
const header = /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
|
|
351
|
+
/* @__PURE__ */ jsxRuntime.jsx(LaneStatusGlyph, { phase }),
|
|
352
|
+
/* @__PURE__ */ jsxRuntime.jsxs("span", { className: "flex min-w-0 flex-1 flex-col gap-0.5", children: [
|
|
353
|
+
/* @__PURE__ */ jsxRuntime.jsxs("span", { className: "flex min-w-0 items-baseline gap-1.5", children: [
|
|
354
|
+
/* @__PURE__ */ jsxRuntime.jsx(
|
|
355
|
+
"span",
|
|
356
|
+
{
|
|
357
|
+
"data-slot": "subagent-title",
|
|
358
|
+
title: lane.description || void 0,
|
|
359
|
+
className: "min-w-0 truncate font-medium text-foreground",
|
|
360
|
+
children: title
|
|
361
|
+
}
|
|
362
|
+
),
|
|
363
|
+
title !== typeLabel ? /* @__PURE__ */ jsxRuntime.jsx(
|
|
364
|
+
"span",
|
|
365
|
+
{
|
|
366
|
+
"data-slot": "subagent-type",
|
|
367
|
+
className: "shrink-0 rounded-full bg-muted px-1.5 py-px text-[10px] font-medium text-muted-foreground",
|
|
368
|
+
children: typeLabel
|
|
369
|
+
}
|
|
370
|
+
) : null
|
|
371
|
+
] }),
|
|
372
|
+
/* @__PURE__ */ jsxRuntime.jsx(
|
|
373
|
+
"span",
|
|
374
|
+
{
|
|
375
|
+
"data-slot": "subagent-meta",
|
|
376
|
+
className: cnfast.cn(
|
|
377
|
+
"text-xs tabular-nums text-muted-foreground",
|
|
378
|
+
phase === "error" && "text-destructive"
|
|
379
|
+
),
|
|
380
|
+
children: meta
|
|
381
|
+
}
|
|
382
|
+
),
|
|
383
|
+
phase === "approval" ? /* @__PURE__ */ jsxRuntime.jsxs(
|
|
384
|
+
"span",
|
|
385
|
+
{
|
|
386
|
+
"data-slot": "subagent-approval",
|
|
387
|
+
className: "flex min-w-0 items-baseline gap-1 text-xs text-muted-foreground",
|
|
388
|
+
children: [
|
|
389
|
+
/* @__PURE__ */ jsxRuntime.jsx("span", { className: "shrink-0 text-amber-700", children: gatedCall ? "Needs approval to run" : "Needs approval to start" }),
|
|
390
|
+
gatedCall ? /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
|
|
391
|
+
/* @__PURE__ */ jsxRuntime.jsx("code", { className: "shrink-0 rounded bg-foreground/[0.06] px-1 py-px font-mono text-[11px] text-foreground/85", children: gatedCall.name }),
|
|
392
|
+
/* @__PURE__ */ jsxRuntime.jsx("span", { className: "min-w-0 truncate", children: toolNames.salientToolCallDetail(gatedCall) })
|
|
393
|
+
] }) : null
|
|
394
|
+
]
|
|
395
|
+
}
|
|
396
|
+
) : running ? /* @__PURE__ */ jsxRuntime.jsx("span", { "data-slot": "subagent-activity", className: "min-w-0 truncate text-xs text-muted-foreground", children: step ? /* @__PURE__ */ jsxRuntime.jsx("span", { title: step.detail, children: /* @__PURE__ */ jsxRuntime.jsx(stepText.StepText, { text: step.label, code: step.code }) }) : liveText || "Starting…" }) : null
|
|
397
|
+
] })
|
|
398
|
+
] });
|
|
399
|
+
return /* @__PURE__ */ jsxRuntime.jsxs(
|
|
400
|
+
toolFallback.ToolFallbackRoot,
|
|
401
|
+
{
|
|
402
|
+
"data-testid": "subagent-task-card",
|
|
403
|
+
"data-phase": phase,
|
|
404
|
+
role: "group",
|
|
405
|
+
"aria-label": `Subagent: ${title}`,
|
|
406
|
+
className: cnfast.cn(isThread && phase === "error" && "border-destructive/30 bg-destructive/5"),
|
|
407
|
+
children: [
|
|
408
|
+
hasSteps || running || report ? /* @__PURE__ */ jsxRuntime.jsxs(
|
|
409
|
+
collapsible.CollapsibleTrigger,
|
|
410
|
+
{
|
|
411
|
+
"data-slot": "subagent-trigger",
|
|
412
|
+
className: cnfast.cn(
|
|
413
|
+
"group/trigger flex w-full min-w-0 items-start gap-2 text-left text-[13px] leading-snug transition-colors hover:bg-muted/40",
|
|
414
|
+
isThread ? "rounded-lg px-2.5 py-1.5" : "px-3"
|
|
415
|
+
),
|
|
416
|
+
children: [
|
|
417
|
+
header,
|
|
418
|
+
/* @__PURE__ */ jsxRuntime.jsx(
|
|
419
|
+
lucideReact.ChevronDownIcon,
|
|
420
|
+
{
|
|
421
|
+
"aria-hidden": "true",
|
|
422
|
+
className: cnfast.cn(
|
|
423
|
+
"mt-0.5 size-3.5 shrink-0 text-muted-foreground/60",
|
|
424
|
+
"transition-transform duration-(--animation-duration) ease-out",
|
|
425
|
+
"group-data-[state=closed]/trigger:-rotate-90"
|
|
426
|
+
)
|
|
427
|
+
}
|
|
428
|
+
)
|
|
429
|
+
]
|
|
430
|
+
}
|
|
431
|
+
) : /* @__PURE__ */ jsxRuntime.jsx(
|
|
432
|
+
"div",
|
|
433
|
+
{
|
|
434
|
+
"data-slot": "subagent-trigger",
|
|
435
|
+
className: cnfast.cn(
|
|
436
|
+
"flex w-full min-w-0 items-start gap-2 text-[13px] leading-snug",
|
|
437
|
+
isThread ? "px-2.5 py-1.5" : "px-3"
|
|
438
|
+
),
|
|
439
|
+
children: header
|
|
440
|
+
}
|
|
441
|
+
),
|
|
442
|
+
report ? /* @__PURE__ */ jsxRuntime.jsx(
|
|
443
|
+
"p",
|
|
444
|
+
{
|
|
445
|
+
"data-slot": "subagent-report",
|
|
446
|
+
className: cnfast.cn(
|
|
447
|
+
"mb-1.5 line-clamp-3 whitespace-pre-line break-words text-xs leading-relaxed",
|
|
448
|
+
isThread ? "mr-2.5 ml-8" : "mx-3 mt-1.5 ml-9",
|
|
449
|
+
phase === "error" ? "text-destructive" : "text-foreground/80"
|
|
450
|
+
),
|
|
451
|
+
children: report
|
|
452
|
+
}
|
|
453
|
+
) : null,
|
|
454
|
+
/* @__PURE__ */ jsxRuntime.jsx(toolFallback.ToolFallbackContent, { children: /* @__PURE__ */ jsxRuntime.jsx(LaneQueryScope, { children: /* @__PURE__ */ jsxRuntime.jsx(LaneSteps, { lane, phase, result: report, partMessages: messages2 }) }) })
|
|
455
|
+
]
|
|
456
|
+
}
|
|
457
|
+
);
|
|
458
|
+
}
|
|
459
|
+
function SubagentDelegationRow({ args, result, isError, status }) {
|
|
460
|
+
const settled = result !== void 0 && (status == null ? void 0 : status.type) !== "running";
|
|
461
|
+
const summary = toolSummary.summarizeToolCall({
|
|
462
|
+
toolName: "task",
|
|
463
|
+
args: typeof args === "object" && args !== null ? args : void 0,
|
|
464
|
+
status: !settled ? "running" : isError === true ? "error" : "complete"
|
|
465
|
+
});
|
|
466
|
+
return /* @__PURE__ */ jsxRuntime.jsxs(
|
|
467
|
+
"div",
|
|
468
|
+
{
|
|
469
|
+
"data-testid": "subagent-delegation",
|
|
470
|
+
className: "my-1 flex min-w-0 items-center gap-2 rounded-lg border border-border/50 bg-background px-2.5 py-1.5 text-[13px]",
|
|
471
|
+
children: [
|
|
472
|
+
/* @__PURE__ */ jsxRuntime.jsx(lucideReact.BotIcon, { "aria-hidden": "true", className: "size-3.5 shrink-0 text-muted-foreground" }),
|
|
473
|
+
/* @__PURE__ */ jsxRuntime.jsx("span", { title: summary.detail, className: "min-w-0 truncate text-foreground", children: summary.label })
|
|
474
|
+
]
|
|
475
|
+
}
|
|
476
|
+
);
|
|
477
|
+
}
|
|
478
|
+
const SubagentTaskToolUIImpl = (props) => useInReadOnlyThread() ? /* @__PURE__ */ jsxRuntime.jsx(SubagentDelegationRow, { ...props }) : /* @__PURE__ */ jsxRuntime.jsx(SubagentTaskCard, { ...props });
|
|
479
|
+
const SubagentTaskToolUI = react.memo(
|
|
480
|
+
SubagentTaskToolUIImpl
|
|
481
|
+
);
|
|
482
|
+
SubagentTaskToolUI.displayName = "SubagentTaskToolUI";
|
|
483
|
+
exports.SUBAGENT_LANE_PHASE_LABELS = SUBAGENT_LANE_PHASE_LABELS;
|
|
484
|
+
exports.SubagentTaskToolUI = SubagentTaskToolUI;
|
|
485
|
+
exports.finishedLaneDurationMs = finishedLaneDurationMs;
|
|
486
|
+
exports.isSettledSubagentLanePhase = isSettledSubagentLanePhase;
|
|
487
|
+
exports.laneDelegatedAtMs = laneDelegatedAtMs;
|
|
488
|
+
exports.laneStepsNote = laneStepsNote;
|
|
489
|
+
exports.latestLaneStep = latestLaneStep;
|
|
490
|
+
exports.subagentLanePhase = subagentLanePhase;
|
|
491
|
+
exports.subagentLaneResult = subagentLaneResult;
|
|
492
|
+
exports.subagentTypeLabel = subagentTypeLabel;
|
|
493
|
+
exports.toolCallCountLabel = toolCallCountLabel;
|
|
494
|
+
//# sourceMappingURL=subagent-task-tool-ui.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"subagent-task-tool-ui.cjs","sources":["../../src/tools/subagent-task-tool-ui.tsx"],"sourcesContent":["\"use client\";\n\n/**\n * The subagent card: one `task` call the deep agent delegated, shown the way\n * Olympus shows a subagent lane.\n *\n * - On the card: where the lane is (queued, running, done, failed, stopped),\n * how many tool calls it made (the wire's cut marker counts a lane whose\n * card carries only its newest steps), how long it has run, and while it\n * runs, its newest step; a finished lane's report, or why it failed, under\n * it, clamped.\n * - Behind its disclosure: the lane's steps, live while it runs, ending on\n * what the lane ended on, whole (a failure, or a report no step carries),\n * so a lane with no steps still opens to its full result. The lane is\n * assistant-ui's native nested thread: the `task` part's `messages`, which\n * the SDK runtime's opt-in conversion fills\n * (`createSubagentTranscriptConversionCache`), rendered read-only under\n * `ReadonlyThreadProvider` with the chat's own tool UIs. A cut lane (a\n * running card always; a finished one when the provider declares the\n * lane-cut contract, `subagentLaneHistory`) says how many of its steps it\n * shows, and \"Load earlier steps\" reads the rest with `history/lane`\n * (`useDeepAgentLaneHistory`), a read under the thread's own attach.\n *\n * A read-only nested thread has no statewire thread behind it: a `task` call\n * inside a subagent's own steps renders as a static row, and the steps are\n * their own error boundary, so a tool UI that throws there never takes the\n * chat down with it.\n */\nimport {\n getExternalStoreMessages,\n MessagePrimitive,\n ReadonlyThreadProvider,\n type ThreadMessage,\n ThreadPrimitive,\n type ToolCallMessagePartComponent,\n type ToolCallMessagePartProps,\n type ToolCallMessagePartStatus,\n useAuiState,\n} from \"@assistant-ui/react\";\nimport type { LangChainMessage } from \"@assistant-ui/react-langgraph\";\nimport {\n createSubagentLaneConversion,\n deepAgentRowKey,\n hasStatewireThreadExtras,\n salientToolCallDetail,\n type SubagentDiscoverySnapshot,\n type SubagentStatus,\n subagentAwaitingApproval,\n subagentToolCallAwaitingApproval,\n taskSubagentsOfTurn,\n useDeepAgentLaneHistory,\n withLaneReport,\n} from \"@athenaintel/agent-runtime\";\nimport { QueryClientProvider } from \"@tanstack/react-query\";\nimport {\n AlertCircleIcon,\n BotIcon,\n CheckIcon,\n ChevronDownIcon,\n CircleDashedIcon,\n LoaderIcon,\n ShieldAlertIcon,\n XCircleIcon,\n} from \"lucide-react\";\nimport {\n Component,\n createContext,\n type ErrorInfo,\n type FC,\n memo,\n type ReactNode,\n useContext,\n useEffect,\n useMemo,\n useState,\n} from \"react\";\nimport { useApprovalWaitInScope } from \"../chat/use-statewire-approval-request\";\nimport { MESSAGE_CREATED_AT_KEY } from \"../chat/message-time\";\nimport { formatWorkDuration, readInstantMs } from \"../chat/super-grouping/turn-timing\";\nimport { athenaDiagnostics } from \"../diagnostics/athena-diagnostics\";\nimport { useAthenaQueryClient } from \"../lib/use-athena-rest-query\";\nimport { cn } from \"../lib/utils\";\nimport { CollapsibleTrigger } from \"../ui/collapsible\";\nimport { useNestedPtcComponents } from \"./NestedPtcMessages\";\nimport { StepText } from \"./step-text\";\nimport { useToolAppearance } from \"./tool-appearance\";\nimport { ToolFallback, ToolFallbackContent, ToolFallbackRoot } from \"./tool-fallback\";\nimport { humanizeToolName, summarizeToolCall, type ToolCallSummary } from \"./tool-summary\";\n\nconst NO_LANE_STEPS: readonly LangChainMessage[] = [];\nconst NO_MESSAGES: readonly ThreadMessage[] = [];\n\n// ─── What the card says ──────────────────────────────────────────────\n// Pure: where a lane is, how long it ran, the step it took last, and the\n// note over a cut lane's steps, tested without rendering the card.\n\n/**\n * Where a lane is, as the card shows it: the lane's own status, except that a\n * lane parked on a person's approval is `approval` (its own dispatch, or a call\n * it made, is a gated call nobody has answered), any other call the run waits\n * on an answer for is `waiting`, and one the run stopped before it settled is\n * `stopped`.\n */\nexport type SubagentLanePhase =\n | \"queued\"\n | \"approval\"\n | \"waiting\"\n | \"running\"\n | \"complete\"\n | \"error\"\n | \"stopped\";\n\nexport const SUBAGENT_LANE_PHASE_LABELS: Record<SubagentLanePhase, string> = {\n queued: \"Queued\",\n approval: \"Waiting for approval\",\n waiting: \"Waiting for you\",\n running: \"Running\",\n complete: \"Done\",\n error: \"Failed\",\n stopped: \"Stopped\",\n};\n\n/** The lane's phase from its status, the status assistant-ui gives its part, and the run's approval. */\nexport function subagentLanePhase({\n status,\n partStatus,\n awaitingApproval = false,\n}: {\n status: SubagentStatus;\n partStatus: ToolCallMessagePartStatus | undefined;\n /** The lane waits on a person's approval (agent-runtime's `subagentAwaitingApproval`). */\n awaitingApproval?: boolean;\n}): SubagentLanePhase {\n if (status === \"complete\" || status === \"error\") return status;\n if (awaitingApproval) return \"approval\";\n if (partStatus?.type === \"requires-action\") return \"waiting\";\n if (partStatus?.type === \"incomplete\") {\n return partStatus.reason === \"cancelled\" ? \"stopped\" : \"error\";\n }\n return status;\n}\n\n/** The phases a lane never leaves. */\nexport function isSettledSubagentLanePhase(phase: SubagentLanePhase): boolean {\n return phase === \"complete\" || phase === \"error\" || phase === \"stopped\";\n}\n\n/**\n * What a settled lane ended on, whole: its report, or why it failed. A lane\n * that the run's own failure ended has no result of its own, so the `task`\n * part's status says why (as the generic card shows a failed call). Empty\n * while the lane runs.\n */\nexport function subagentLaneResult({\n output,\n phase,\n partStatus,\n}: {\n /** The lane's own result text (`SubagentDiscoverySnapshot.output`). */\n output: string | undefined;\n phase: SubagentLanePhase;\n partStatus: ToolCallMessagePartStatus | undefined;\n}): string {\n if (!isSettledSubagentLanePhase(phase)) return \"\";\n const own = output?.trim() ?? \"\";\n if (own !== \"\" || phase !== \"error\" || partStatus?.type !== \"incomplete\") return own;\n const { error } = partStatus;\n if (error === undefined || error === null) return \"\";\n return (typeof error === \"string\" ? error : JSON.stringify(error)).trim();\n}\n\nfunction record(value: unknown): Record<string, unknown> | undefined {\n return value && typeof value === \"object\" && !Array.isArray(value)\n ? (value as Record<string, unknown>)\n : undefined;\n}\n\n/**\n * How long a finished lane ran, measured by the server: the `task` result's\n * `_started_at` and `_created_at`, which the deep agent's tool-call timing\n * stamps on every tool result and mirrors onto its artifact (the one field of\n * a tool message the converter hands the tool-call part). `null` when either\n * stamp is missing.\n */\nexport function finishedLaneDurationMs(artifact: unknown): number | null {\n const stamps = record(artifact);\n const startedAt = readInstantMs(stamps?._started_at);\n const finishedAt = readInstantMs(stamps?.[MESSAGE_CREATED_AT_KEY]);\n return startedAt !== null && finishedAt !== null && finishedAt >= startedAt\n ? finishedAt - startedAt\n : null;\n}\n\nconst ASSISTANT_TYPES: ReadonlySet<unknown> = new Set([\"ai\", \"AIMessageChunk\"]);\n\n/**\n * When the agent delegated the call `toolCallId`: the server stamp\n * (`_created_at`) of the assistant message that made it, among the raw\n * messages bound to the turn. A running lane's card carries no stamp of its\n * own, so its clock counts from here, the way the turn header counts from the\n * turn's own stamps. `null` without one.\n */\nexport function laneDelegatedAtMs({\n sources,\n toolCallId,\n}: {\n sources: readonly unknown[];\n toolCallId: string;\n}): number | null {\n for (const source of sources) {\n const message = record(source);\n if (!message || !ASSISTANT_TYPES.has(message.type)) continue;\n const calls = message.tool_calls;\n if (!Array.isArray(calls) || !calls.some((call) => record(call)?.id === toolCallId)) continue;\n const kwargs = record(message.additional_kwargs);\n const metadata = record(kwargs?.metadata);\n return (\n readInstantMs(metadata?.[MESSAGE_CREATED_AT_KEY]) ??\n readInstantMs(kwargs?.[MESSAGE_CREATED_AT_KEY]) ??\n readInstantMs(message[MESSAGE_CREATED_AT_KEY])\n );\n }\n return null;\n}\n\n/**\n * The lane's newest tool step as its summary line (\"Read `routes.ts`\",\n * \"Running `npm test`\"), from the lane's converted steps: the last tool call\n * of its newest assistant turn, worded for whether it has answered. `null`\n * before the lane's first tool call.\n */\nexport function latestLaneStep(messages: readonly ThreadMessage[]): ToolCallSummary | null {\n for (let index = messages.length - 1; index >= 0; index -= 1) {\n const message = messages[index];\n if (message?.role !== \"assistant\") continue;\n for (let partIndex = message.content.length - 1; partIndex >= 0; partIndex -= 1) {\n const part = message.content[partIndex];\n if (part?.type !== \"tool-call\") continue;\n const answered = part.result !== undefined && part.isPreliminary !== true;\n return summarizeToolCall({\n toolName: part.toolName,\n args: part.args,\n result: answered ? part.result : undefined,\n status: answered ? (part.isError === true ? \"error\" : \"complete\") : \"running\",\n });\n }\n }\n return null;\n}\n\n/**\n * The subagent's type as the card names it: the `task` call's `subagent_type`\n * in words, with the default `general-purpose` agent as \"Subagent\".\n */\nexport function subagentTypeLabel(name: string): string {\n const trimmed = name.trim();\n if (trimmed === \"\" || trimmed === \"subagent\" || trimmed === \"general-purpose\") return \"Subagent\";\n return humanizeToolName(trimmed);\n}\n\n/** \"1 tool call\", \"12 tool calls\". */\nexport function toolCallCountLabel(count: number): string {\n return `${count} tool call${count === 1 ? \"\" : \"s\"}`;\n}\n\n/** \"1 step\", \"12 steps\". */\nfunction stepsLabel(count: number): string {\n return `${count} step${count === 1 ? \"\" : \"s\"}`;\n}\n\n/** What the steps panel says about the steps it shows of a cut lane. */\nexport function laneStepsNote({\n shown,\n total,\n arrivesLater,\n}: {\n /** Steps the panel shows. */\n shown: number;\n /** Steps the lane stores (its cut marker), when the card carries fewer. */\n total: number | undefined;\n /**\n * A running lane on a host that pages no running lane: its card brings the\n * rest once the subagent finishes.\n */\n arrivesLater: boolean;\n}): string | null {\n if (total === undefined || total <= shown) return null;\n const leftOff = total - shown;\n return arrivesLater\n ? `Showing the latest steps. ${leftOff} earlier ${leftOff === 1 ? \"step arrives\" : \"steps arrive\"} when this subagent finishes.`\n : `Showing the latest ${shown} of ${stepsLabel(total)}.`;\n}\n\n/**\n * Whether this card renders inside a read-only nested thread (a subagent's own\n * steps, under `ReadonlyThreadProvider`), whose thread has no statewire\n * extras. Never throws: rendered outside any thread, it is not nested.\n */\nfunction useInReadOnlyThread(): boolean {\n return useAuiState((s) => {\n const thread = s.optional?.thread;\n return thread !== undefined && !hasStatewireThreadExtras(thread.extras);\n });\n}\n\n/** A lane for a call agent-runtime read no lane for: what its arguments say, queued. */\nfunction laneFromArgs(toolCallId: string, args: unknown): SubagentDiscoverySnapshot {\n const record = typeof args === \"object\" && args !== null ? (args as Record<string, unknown>) : {};\n return {\n id: toolCallId,\n name: typeof record.subagent_type === \"string\" ? record.subagent_type : \"subagent\",\n description: typeof record.description === \"string\" ? record.description : \"\",\n status: \"queued\",\n toolCallCount: 0,\n messages: NO_MESSAGES,\n messageCount: 0,\n currentText: \"\",\n };\n}\n\n// ─── Status glyph ────────────────────────────────────────────────────\n\nfunction LaneStatusGlyph({ phase }: { phase: SubagentLanePhase }) {\n const glyph =\n phase === \"running\" ? (\n <LoaderIcon className=\"size-3.5 animate-spin text-muted-foreground motion-reduce:animate-none\" />\n ) : phase === \"complete\" ? (\n <CheckIcon className=\"size-3.5 text-emerald-600\" />\n ) : phase === \"error\" ? (\n <AlertCircleIcon className=\"size-3.5 text-destructive\" />\n ) : phase === \"stopped\" ? (\n <XCircleIcon className=\"size-3.5 text-muted-foreground\" />\n ) : phase === \"waiting\" || phase === \"approval\" ? (\n <ShieldAlertIcon className=\"size-3.5 text-amber-600\" />\n ) : (\n <CircleDashedIcon className=\"size-3.5 text-muted-foreground motion-safe:animate-pulse\" />\n );\n return (\n <span\n data-slot=\"subagent-status\"\n data-phase={phase}\n aria-hidden=\"true\"\n className=\"mt-0.5 flex size-4 shrink-0 items-center justify-center\"\n >\n {glyph}\n </span>\n );\n}\n\n// ─── Clock ───────────────────────────────────────────────────────────\n\n/**\n * How long a running lane has run: since `startMs` (the server's stamp on the\n * delegating message), else since this card saw it running; `null` while it\n * does not run. Ticks once a second off the wall clock.\n */\nfunction useRunningElapsedMs(running: boolean, startMs: number | null): number | null {\n const [clock, setClock] = useState<{ seenAt: number; now: number } | null>(null);\n useEffect(() => {\n if (!running) {\n setClock(null);\n return undefined;\n }\n const seenAt = Date.now();\n setClock({ seenAt, now: seenAt });\n const timer = setInterval(() => setClock({ seenAt, now: Date.now() }), 1000);\n return () => clearInterval(timer);\n }, [running]);\n if (!running || clock === null) return null;\n return Math.max(0, clock.now - (startMs ?? clock.seenAt));\n}\n\n// ─── The lane's steps ────────────────────────────────────────────────\n\ntype NestedPartsComponents = ReturnType<typeof useNestedPtcComponents>;\n\nconst LaneStepComponentsContext = createContext<NestedPartsComponents | null>(null);\n\nconst EmptyStepPart: FC = () => null;\n\n/**\n * One row of the lane: an assistant turn's parts, through the chat's own\n * renderers (`NestedPtcComponentsProvider`, which `AthenaChat` mounts). The\n * subagent's brief (its user message) is the card's own description, so it is\n * not repeated.\n */\nconst LaneStep: FC = () => {\n const role = useAuiState((s) => s.message.role);\n const components = useContext(LaneStepComponentsContext);\n if (role !== \"assistant\") return null;\n return <MessagePrimitive.Parts components={{ Empty: EmptyStepPart, ...components }} />;\n};\n\nconst LANE_ROW_COMPONENTS = { Message: LaneStep };\n\nconst ROW_KEY_SEPARATOR = \"\\u0000\";\n\n/**\n * The nested thread's rows, each under its row key (`deepAgentRowKey`): the\n * lane's turn keeps its row while the card's cut drops its oldest steps and\n * when earlier pages land, so what the person opened in it stays open.\n */\nfunction LaneRows() {\n const joinedKeys = useAuiState((s) =>\n s.thread.messages.map((message) => deepAgentRowKey(message)).join(ROW_KEY_SEPARATOR),\n );\n const rowKeys = useMemo(\n () => (joinedKeys === \"\" ? [] : joinedKeys.split(ROW_KEY_SEPARATOR)),\n [joinedKeys],\n );\n return (\n <>\n {rowKeys.map((key, index) => (\n <ThreadPrimitive.MessageByIndex key={key} index={index} components={LANE_ROW_COMPONENTS} />\n ))}\n </>\n );\n}\n\ninterface LaneStepsBoundaryProps {\n name: string;\n children: ReactNode;\n}\n\n/**\n * The steps' own boundary: they render the chat's tool UIs (a host's own\n * among them) in a nested thread no statewire thread backs, and a card that\n * throws there must not take the chat down. Reported like a chat render\n * crash, with the lane named.\n */\nclass LaneStepsBoundary extends Component<LaneStepsBoundaryProps, { failed: boolean }> {\n constructor(props: LaneStepsBoundaryProps) {\n super(props);\n this.state = { failed: false };\n }\n\n static getDerivedStateFromError(): { failed: boolean } {\n return { failed: true };\n }\n\n componentDidCatch(error: Error, errorInfo: ErrorInfo): void {\n athenaDiagnostics.error(\n \"sdk.error\",\n error,\n {\n code: \"chat_render_crash\",\n message: \"A subagent's steps could not be shown\",\n hint: \"Inspect component_stack: a tool UI that reads the live thread fails inside a subagent's read-only steps.\",\n },\n {\n surface: \"subagent-lane\",\n subagent: this.props.name,\n component_stack: errorInfo.componentStack?.slice(0, 2000) ?? null,\n },\n );\n }\n\n render(): ReactNode {\n if (this.state.failed) {\n return (\n <p role=\"alert\" className=\"px-1 text-xs text-muted-foreground\">\n These steps couldn't be shown. The conversation is not affected.\n </p>\n );\n }\n return this.props.children;\n }\n}\n\n/** The host's `QueryClient` when one is in context, else one of the panel's own (`useAthenaQueryClient`). */\nfunction LaneQueryScope({ children }: { children: ReactNode }) {\n const queryClient = useAthenaQueryClient();\n return <QueryClientProvider client={queryClient}>{children}</QueryClientProvider>;\n}\n\ninterface LaneStepsProps {\n lane: SubagentDiscoverySnapshot;\n phase: SubagentLanePhase;\n /** What the lane ended on, whole (`subagentLaneResult`); empty while it runs. */\n result: string;\n /** The `task` part's own nested thread, shown if the panel cannot convert the lane itself. */\n partMessages: readonly ThreadMessage[] | undefined;\n}\n\n/**\n * The open card's steps: the lane the card carries, and the earlier steps the\n * person asks for. The panel converts the lane itself, with one conversion\n * memory while it is open (`createSubagentLaneConversion`), so the lane's turn\n * keeps its row key as the cut slides and pages land. It ends on what the lane\n * ended on, whole and selectable: the card clamps it.\n */\nfunction LaneSteps({ lane, phase, result, partMessages }: LaneStepsProps) {\n // The lane's card is its running placeholder, whether it streams or waits on an approval.\n const running = lane.status === \"running\" && (phase === \"running\" || phase === \"approval\");\n const source = lane.source;\n const history = useDeepAgentLaneHistory({\n messageId: source?.messageId,\n lane: source?.lane,\n carried: source?.transcript ?? NO_LANE_STEPS,\n total: source?.truncated?.messages,\n finished: source?.truncated?.finished === true,\n });\n const [convertLane] = useState(() => createSubagentLaneConversion());\n // A `task` lane that finished ends on its report, the card's content, even\n // when its stored transcript does not (`withLaneReport`), as in Olympus's drawer.\n const report =\n lane.status === \"complete\" && source?.messageId !== undefined ? lane.output : undefined;\n const messages =\n (source === undefined\n ? undefined\n : convertLane(withLaneReport(history.steps, report), running)) ??\n partMessages ??\n NO_MESSAGES;\n const components = useNestedPtcComponents(ToolFallback);\n const shown = history.steps.length;\n // A running card on a host that pages no running lane carries the rest once it finishes.\n const arrivesLater = running && source?.messageId !== undefined && !history.available;\n const note = laneStepsNote({ shown, total: history.total, arrivesLater });\n const emptyText =\n phase === \"running\"\n ? \"Starting…\"\n : phase === \"queued\" || phase === \"waiting\" || phase === \"approval\"\n ? \"Not started yet.\"\n : \"No steps were recorded for this subagent.\";\n // Why a lane failed is never one of its steps; a report is the closing\n // step of a lane with steps to close (`withLaneReport`).\n const failed = phase === \"error\";\n const closing = failed || messages.length === 0 ? result : \"\";\n\n return (\n <div data-slot=\"subagent-steps\" className=\"flex min-w-0 flex-col gap-2 px-2.5\">\n {lane.description ? (\n <p\n data-slot=\"subagent-brief\"\n className=\"whitespace-pre-wrap break-words text-xs leading-relaxed text-muted-foreground\"\n >\n {lane.description}\n </p>\n ) : null}\n {note ? (\n <div\n data-slot=\"subagent-steps-note\"\n className=\"flex flex-wrap items-center gap-x-2 gap-y-1 text-xs text-muted-foreground\"\n >\n <span>{note}</span>\n {history.hasEarlier && !arrivesLater ? (\n <button\n type=\"button\"\n onClick={history.loadEarlier}\n disabled={history.loading}\n className=\"rounded font-medium text-primary hover:underline focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring disabled:cursor-default disabled:no-underline disabled:opacity-60\"\n >\n {history.loading ? \"Loading earlier steps…\" : \"Load earlier steps\"}\n </button>\n ) : null}\n </div>\n ) : null}\n {messages.length > 0 ? (\n <LaneStepsBoundary name={lane.name}>\n <LaneStepComponentsContext.Provider value={components}>\n <ReadonlyThreadProvider messages={messages}>\n <div data-slot=\"subagent-step-rows\" className=\"flex min-w-0 flex-col gap-1\">\n <LaneRows />\n </div>\n </ReadonlyThreadProvider>\n </LaneStepComponentsContext.Provider>\n </LaneStepsBoundary>\n ) : (\n <p className=\"text-xs text-muted-foreground\">{emptyText}</p>\n )}\n {closing ? (\n <div data-slot=\"subagent-result\" className=\"flex min-w-0 flex-col gap-0.5\">\n <p\n className={cn(\n \"text-xs font-medium\",\n failed ? \"text-destructive\" : \"text-muted-foreground\",\n )}\n >\n {failed ? \"Error\" : \"Report\"}\n </p>\n <p\n data-slot=\"subagent-result-text\"\n className={cn(\n \"max-h-72 overflow-auto whitespace-pre-wrap break-words text-xs leading-relaxed\",\n failed ? \"text-destructive/80\" : \"text-foreground/80\",\n )}\n >\n {closing}\n </p>\n </div>\n ) : null}\n </div>\n );\n}\n\n// ─── The card ────────────────────────────────────────────────────────\n\n/** The card's second line: where the lane is, its tool calls, how long it ran. */\nfunction laneMeta({\n phase,\n toolCallCount,\n elapsedMs,\n}: {\n phase: SubagentLanePhase;\n toolCallCount: number;\n elapsedMs: number | null;\n}): string {\n const parts: string[] = [SUBAGENT_LANE_PHASE_LABELS[phase]];\n if (toolCallCount > 0 || isSettledSubagentLanePhase(phase)) {\n parts.push(toolCallCountLabel(toolCallCount));\n }\n if (elapsedMs !== null && (phase !== \"running\" || elapsedMs >= 1000)) {\n parts.push(formatWorkDuration(elapsedMs));\n }\n return parts.join(\" · \");\n}\n\nfunction SubagentTaskCard({ toolCallId, args, status, artifact, messages }: ToolCallMessagePartProps) {\n const appearance = useToolAppearance();\n const isThread = appearance === \"thread\";\n const readLane = useAuiState((s) => taskSubagentsOfTurn(s.message).get(toolCallId));\n const lane = useMemo(\n () => readLane ?? laneFromArgs(toolCallId, args),\n [readLane, toolCallId, args],\n );\n // A lane holding a gated call the run's approval names waits on a person:\n // no live activity, no clock, just what it waits on. Read-only (the approval\n // card answers).\n const { toolCallIds: waitingToolCallIds } = useApprovalWaitInScope();\n const awaitingApproval = subagentAwaitingApproval({ lane, toolCallIds: waitingToolCallIds });\n const gatedCall = awaitingApproval\n ? subagentToolCallAwaitingApproval({ lane, toolCallIds: waitingToolCallIds })\n : undefined;\n const phase = subagentLanePhase({ status: lane.status, partStatus: status, awaitingApproval });\n const running = phase === \"running\";\n // Only a running lane's clock reads it, so a settled card scans nothing.\n const delegatedAt = useAuiState((s) =>\n running\n ? laneDelegatedAtMs({ sources: getExternalStoreMessages<unknown>(s.message), toolCallId })\n : null,\n );\n const runningElapsed = useRunningElapsedMs(running, delegatedAt);\n const elapsedMs = running\n ? runningElapsed\n : isSettledSubagentLanePhase(phase)\n ? finishedLaneDurationMs(artifact)\n : null;\n const step = useMemo(() => (running ? latestLaneStep(lane.messages) : null), [running, lane.messages]);\n const hasSteps = lane.messageCount > 0 || (lane.omittedMessageCount ?? 0) > 0;\n const typeLabel = subagentTypeLabel(lane.name);\n const title = lane.description.trim() || typeLabel;\n const meta = laneMeta({ phase, toolCallCount: lane.toolCallCount, elapsedMs });\n const liveText = step ? null : lane.currentText.trim();\n const report = subagentLaneResult({ output: lane.output, phase, partStatus: status });\n\n const header = (\n <>\n <LaneStatusGlyph phase={phase} />\n <span className=\"flex min-w-0 flex-1 flex-col gap-0.5\">\n <span className=\"flex min-w-0 items-baseline gap-1.5\">\n <span\n data-slot=\"subagent-title\"\n title={lane.description || undefined}\n className=\"min-w-0 truncate font-medium text-foreground\"\n >\n {title}\n </span>\n {title !== typeLabel ? (\n <span\n data-slot=\"subagent-type\"\n className=\"shrink-0 rounded-full bg-muted px-1.5 py-px text-[10px] font-medium text-muted-foreground\"\n >\n {typeLabel}\n </span>\n ) : null}\n </span>\n <span\n data-slot=\"subagent-meta\"\n className={cn(\n \"text-xs tabular-nums text-muted-foreground\",\n phase === \"error\" && \"text-destructive\",\n )}\n >\n {meta}\n </span>\n {phase === \"approval\" ? (\n <span\n data-slot=\"subagent-approval\"\n className=\"flex min-w-0 items-baseline gap-1 text-xs text-muted-foreground\"\n >\n <span className=\"shrink-0 text-amber-700\">\n {gatedCall ? \"Needs approval to run\" : \"Needs approval to start\"}\n </span>\n {gatedCall ? (\n <>\n <code className=\"shrink-0 rounded bg-foreground/[0.06] px-1 py-px font-mono text-[11px] text-foreground/85\">\n {gatedCall.name}\n </code>\n <span className=\"min-w-0 truncate\">{salientToolCallDetail(gatedCall)}</span>\n </>\n ) : null}\n </span>\n ) : running ? (\n <span data-slot=\"subagent-activity\" className=\"min-w-0 truncate text-xs text-muted-foreground\">\n {step ? (\n <span title={step.detail}>\n <StepText text={step.label} code={step.code} />\n </span>\n ) : (\n liveText || \"Starting…\"\n )}\n </span>\n ) : null}\n </span>\n </>\n );\n\n return (\n <ToolFallbackRoot\n data-testid=\"subagent-task-card\"\n data-phase={phase}\n role=\"group\"\n aria-label={`Subagent: ${title}`}\n className={cn(isThread && phase === \"error\" && \"border-destructive/30 bg-destructive/5\")}\n >\n {/* A report or a failure is behind the disclosure whole, steps or none. */}\n {hasSteps || running || report ? (\n <CollapsibleTrigger\n data-slot=\"subagent-trigger\"\n className={cn(\n \"group/trigger flex w-full min-w-0 items-start gap-2 text-left text-[13px] leading-snug transition-colors hover:bg-muted/40\",\n isThread ? \"rounded-lg px-2.5 py-1.5\" : \"px-3\",\n )}\n >\n {header}\n <ChevronDownIcon\n aria-hidden=\"true\"\n className={cn(\n \"mt-0.5 size-3.5 shrink-0 text-muted-foreground/60\",\n \"transition-transform duration-(--animation-duration) ease-out\",\n \"group-data-[state=closed]/trigger:-rotate-90\",\n )}\n />\n </CollapsibleTrigger>\n ) : (\n <div\n data-slot=\"subagent-trigger\"\n className={cn(\n \"flex w-full min-w-0 items-start gap-2 text-[13px] leading-snug\",\n isThread ? \"px-2.5 py-1.5\" : \"px-3\",\n )}\n >\n {header}\n </div>\n )}\n {report ? (\n <p\n data-slot=\"subagent-report\"\n // Margins, not padding: a clamped block clips at its padding edge,\n // so bottom padding would show the top of the next line.\n className={cn(\n \"mb-1.5 line-clamp-3 whitespace-pre-line break-words text-xs leading-relaxed\",\n isThread ? \"mr-2.5 ml-8\" : \"mx-3 mt-1.5 ml-9\",\n phase === \"error\" ? \"text-destructive\" : \"text-foreground/80\",\n )}\n >\n {report}\n </p>\n ) : null}\n <ToolFallbackContent>\n <LaneQueryScope>\n <LaneSteps lane={lane} phase={phase} result={report} partMessages={messages} />\n </LaneQueryScope>\n </ToolFallbackContent>\n </ToolFallbackRoot>\n );\n}\n\n/**\n * A delegation inside a subagent's own steps: one static row. It is not the\n * run's lane to show; its steps live in the subagent's own transcript.\n */\nfunction SubagentDelegationRow({ args, result, isError, status }: ToolCallMessagePartProps) {\n const settled = result !== undefined && status?.type !== \"running\";\n const summary = summarizeToolCall({\n toolName: \"task\",\n args: typeof args === \"object\" && args !== null ? (args as Record<string, unknown>) : undefined,\n status: !settled ? \"running\" : isError === true ? \"error\" : \"complete\",\n });\n return (\n <div\n data-testid=\"subagent-delegation\"\n className=\"my-1 flex min-w-0 items-center gap-2 rounded-lg border border-border/50 bg-background px-2.5 py-1.5 text-[13px]\"\n >\n <BotIcon aria-hidden=\"true\" className=\"size-3.5 shrink-0 text-muted-foreground\" />\n <span title={summary.detail} className=\"min-w-0 truncate text-foreground\">\n {summary.label}\n </span>\n </div>\n );\n}\n\nconst SubagentTaskToolUIImpl: ToolCallMessagePartComponent = (props) =>\n useInReadOnlyThread() ? <SubagentDelegationRow {...props} /> : <SubagentTaskCard {...props} />;\n\n/**\n * The `task` tool UI (`TOOL_UI_REGISTRY.task`): the subagent card, or inside\n * a subagent's own steps, a static delegation row.\n */\nexport const SubagentTaskToolUI = memo(\n SubagentTaskToolUIImpl,\n) as unknown as ToolCallMessagePartComponent;\nSubagentTaskToolUI.displayName = \"SubagentTaskToolUI\";\n"],"names":["readInstantMs","MESSAGE_CREATED_AT_KEY","messages","summarizeToolCall","humanizeToolName","useAuiState","hasStatewireThreadExtras","record","LoaderIcon","jsx","CheckIcon","AlertCircleIcon","XCircleIcon","ShieldAlertIcon","CircleDashedIcon","useState","useEffect","createContext","useContext","MessagePrimitive","deepAgentRowKey","useMemo","Fragment","ThreadPrimitive","Component","athenaDiagnostics","useAthenaQueryClient","QueryClientProvider","useDeepAgentLaneHistory","createSubagentLaneConversion","withLaneReport","useNestedPtcComponents","ToolFallback","jsxs","ReadonlyThreadProvider","cn","formatWorkDuration","useToolAppearance","taskSubagentsOfTurn","useApprovalWaitInScope","subagentAwaitingApproval","subagentToolCallAwaitingApproval","getExternalStoreMessages","salientToolCallDetail","StepText","ToolFallbackRoot","CollapsibleTrigger","ChevronDownIcon","ToolFallbackContent","BotIcon","memo"],"mappings":"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"}
|