@athenaintel/react 0.57.2 → 0.60.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +795 -12
- package/dist/agent-runtime/src/addressed-agents.cjs +16 -0
- package/dist/agent-runtime/src/addressed-agents.cjs.map +1 -0
- package/dist/agent-runtime/src/addressed-agents.d.ts +30 -0
- package/dist/agent-runtime/src/addressed-agents.js +16 -0
- package/dist/agent-runtime/src/addressed-agents.js.map +1 -0
- package/dist/agent-runtime/src/answer-label.cjs +4 -3
- package/dist/agent-runtime/src/answer-label.cjs.map +1 -1
- package/dist/agent-runtime/src/answer-label.d.ts +13 -6
- package/dist/agent-runtime/src/answer-label.js +4 -3
- package/dist/agent-runtime/src/answer-label.js.map +1 -1
- package/dist/agent-runtime/src/chat-outbox-attachments.cjs.map +1 -1
- package/dist/agent-runtime/src/chat-outbox-attachments.d.ts +1 -1
- package/dist/agent-runtime/src/chat-outbox-attachments.js.map +1 -1
- package/dist/agent-runtime/src/chat-outbox-entry.cjs +101 -0
- package/dist/agent-runtime/src/chat-outbox-entry.cjs.map +1 -0
- package/dist/agent-runtime/src/chat-outbox-entry.d.ts +99 -0
- package/dist/agent-runtime/src/chat-outbox-entry.js +101 -0
- package/dist/agent-runtime/src/chat-outbox-entry.js.map +1 -0
- package/dist/agent-runtime/src/chat-outbox-legacy.cjs +252 -0
- package/dist/agent-runtime/src/chat-outbox-legacy.cjs.map +1 -0
- package/dist/agent-runtime/src/chat-outbox-legacy.d.ts +96 -0
- package/dist/agent-runtime/src/chat-outbox-legacy.js +252 -0
- package/dist/agent-runtime/src/chat-outbox-legacy.js.map +1 -0
- package/dist/agent-runtime/src/chat-outbox-policy.cjs +30 -0
- package/dist/agent-runtime/src/chat-outbox-policy.cjs.map +1 -0
- package/dist/agent-runtime/src/chat-outbox-policy.d.ts +42 -0
- package/dist/agent-runtime/src/chat-outbox-policy.js +30 -0
- package/dist/agent-runtime/src/chat-outbox-policy.js.map +1 -0
- package/dist/agent-runtime/src/chat-outbox-storage.cjs +306 -0
- package/dist/agent-runtime/src/chat-outbox-storage.cjs.map +1 -0
- package/dist/agent-runtime/src/chat-outbox-storage.d.ts +194 -0
- package/dist/agent-runtime/src/chat-outbox-storage.js +306 -0
- package/dist/agent-runtime/src/chat-outbox-storage.js.map +1 -0
- package/dist/agent-runtime/src/chat-outbox-thread.cjs +21 -94
- package/dist/agent-runtime/src/chat-outbox-thread.cjs.map +1 -1
- package/dist/agent-runtime/src/chat-outbox-thread.d.ts +22 -18
- package/dist/agent-runtime/src/chat-outbox-thread.js +21 -94
- package/dist/agent-runtime/src/chat-outbox-thread.js.map +1 -1
- package/dist/agent-runtime/src/chat-outbox.cjs +492 -547
- package/dist/agent-runtime/src/chat-outbox.cjs.map +1 -1
- package/dist/agent-runtime/src/chat-outbox.d.ts +110 -142
- package/dist/agent-runtime/src/chat-outbox.js +492 -547
- package/dist/agent-runtime/src/chat-outbox.js.map +1 -1
- package/dist/agent-runtime/src/composer-markdown.cjs +0 -16
- package/dist/agent-runtime/src/composer-markdown.cjs.map +1 -1
- package/dist/agent-runtime/src/composer-markdown.d.ts +1 -1
- package/dist/agent-runtime/src/composer-markdown.js +1 -17
- package/dist/agent-runtime/src/composer-markdown.js.map +1 -1
- package/dist/agent-runtime/src/deep-agent-transport-recipe.cjs +3 -1
- package/dist/agent-runtime/src/deep-agent-transport-recipe.cjs.map +1 -1
- package/dist/agent-runtime/src/deep-agent-transport-recipe.d.ts +8 -1
- package/dist/agent-runtime/src/deep-agent-transport-recipe.js +3 -1
- package/dist/agent-runtime/src/deep-agent-transport-recipe.js.map +1 -1
- package/dist/agent-runtime/src/dictation-preferences.d.ts +356 -0
- package/dist/agent-runtime/src/dictation-record.d.ts +279 -0
- package/dist/agent-runtime/src/dictation-session.d.ts +106 -7
- package/dist/agent-runtime/src/dictation-snippets.d.ts +9 -0
- package/dist/agent-runtime/src/dictation-transfer.d.ts +142 -0
- package/dist/agent-runtime/src/edit-command.cjs.map +1 -1
- package/dist/agent-runtime/src/edit-command.d.ts +1 -1
- package/dist/agent-runtime/src/edit-command.js.map +1 -1
- package/dist/agent-runtime/src/errors.cjs +1 -0
- package/dist/agent-runtime/src/errors.cjs.map +1 -1
- package/dist/agent-runtime/src/errors.js +1 -0
- package/dist/agent-runtime/src/errors.js.map +1 -1
- package/dist/agent-runtime/src/generated/runconfig-contract.cjs +24 -0
- package/dist/agent-runtime/src/generated/runconfig-contract.cjs.map +1 -1
- package/dist/agent-runtime/src/generated/runconfig-contract.d.ts +3 -3
- package/dist/agent-runtime/src/generated/runconfig-contract.js +24 -0
- package/dist/agent-runtime/src/generated/runconfig-contract.js.map +1 -1
- package/dist/agent-runtime/src/index.d.ts +14 -8
- package/dist/agent-runtime/src/lane-follow.cjs +289 -0
- package/dist/agent-runtime/src/lane-follow.cjs.map +1 -0
- package/dist/agent-runtime/src/lane-follow.js +289 -0
- package/dist/agent-runtime/src/lane-follow.js.map +1 -0
- package/dist/agent-runtime/src/lane-images.cjs +387 -0
- package/dist/agent-runtime/src/lane-images.cjs.map +1 -0
- package/dist/agent-runtime/src/lane-images.js +387 -0
- package/dist/agent-runtime/src/lane-images.js.map +1 -0
- package/dist/agent-runtime/src/message-window.js +1 -1
- package/dist/agent-runtime/src/messages.cjs +19 -1
- package/dist/agent-runtime/src/messages.cjs.map +1 -1
- package/dist/agent-runtime/src/messages.d.ts +8 -0
- package/dist/agent-runtime/src/messages.js +21 -3
- package/dist/agent-runtime/src/messages.js.map +1 -1
- package/dist/agent-runtime/src/named-agents.cjs +301 -0
- package/dist/agent-runtime/src/named-agents.cjs.map +1 -0
- package/dist/agent-runtime/src/named-agents.d.ts +246 -0
- package/dist/agent-runtime/src/named-agents.js +301 -0
- package/dist/agent-runtime/src/named-agents.js.map +1 -0
- package/dist/agent-runtime/src/offline-status.cjs.map +1 -1
- package/dist/agent-runtime/src/offline-status.d.ts +93 -2
- package/dist/agent-runtime/src/offline-status.js.map +1 -1
- package/dist/agent-runtime/src/ptc-subcalls.cjs +41 -0
- package/dist/agent-runtime/src/ptc-subcalls.cjs.map +1 -0
- package/dist/agent-runtime/src/ptc-subcalls.js +41 -0
- package/dist/agent-runtime/src/ptc-subcalls.js.map +1 -0
- package/dist/agent-runtime/src/queue.cjs +2 -2
- package/dist/agent-runtime/src/queue.cjs.map +1 -1
- package/dist/agent-runtime/src/queue.d.ts +20 -25
- package/dist/agent-runtime/src/queue.js +2 -2
- package/dist/agent-runtime/src/queue.js.map +1 -1
- package/dist/agent-runtime/src/quota-safe-local-storage-session.cjs +314 -84
- package/dist/agent-runtime/src/quota-safe-local-storage-session.cjs.map +1 -1
- package/dist/agent-runtime/src/quota-safe-local-storage-session.d.ts +137 -40
- package/dist/agent-runtime/src/quota-safe-local-storage-session.js +318 -88
- package/dist/agent-runtime/src/quota-safe-local-storage-session.js.map +1 -1
- package/dist/agent-runtime/src/run-send.cjs +54 -0
- package/dist/agent-runtime/src/run-send.cjs.map +1 -0
- package/dist/agent-runtime/src/run-send.d.ts +51 -0
- package/dist/agent-runtime/src/run-send.js +54 -0
- package/dist/agent-runtime/src/run-send.js.map +1 -0
- package/dist/agent-runtime/src/running-tool-placeholder.cjs +6 -0
- package/dist/agent-runtime/src/running-tool-placeholder.cjs.map +1 -1
- package/dist/agent-runtime/src/running-tool-placeholder.js +6 -0
- package/dist/agent-runtime/src/running-tool-placeholder.js.map +1 -1
- package/dist/agent-runtime/src/runtime.d.ts +9 -5
- package/dist/agent-runtime/src/sealed-idb.cjs +64 -0
- package/dist/agent-runtime/src/sealed-idb.cjs.map +1 -1
- package/dist/agent-runtime/src/sealed-idb.d.ts +16 -0
- package/dist/agent-runtime/src/sealed-idb.js +64 -0
- package/dist/agent-runtime/src/sealed-idb.js.map +1 -1
- package/dist/agent-runtime/src/send-recovery.cjs +90 -118
- package/dist/agent-runtime/src/send-recovery.cjs.map +1 -1
- package/dist/agent-runtime/src/send-recovery.d.ts +25 -29
- package/dist/agent-runtime/src/send-recovery.js +90 -118
- package/dist/agent-runtime/src/send-recovery.js.map +1 -1
- package/dist/agent-runtime/src/statewire-diagnostics.d.ts +4 -1
- package/dist/agent-runtime/src/statewire-held-sends.cjs +191 -0
- package/dist/agent-runtime/src/statewire-held-sends.cjs.map +1 -0
- package/dist/agent-runtime/src/statewire-held-sends.d.ts +119 -0
- package/dist/agent-runtime/src/statewire-held-sends.js +191 -0
- package/dist/agent-runtime/src/statewire-held-sends.js.map +1 -0
- package/dist/agent-runtime/src/statewire-state.cjs +4 -0
- package/dist/agent-runtime/src/statewire-state.cjs.map +1 -1
- package/dist/agent-runtime/src/statewire-state.js +4 -0
- package/dist/agent-runtime/src/statewire-state.js.map +1 -1
- package/dist/agent-runtime/src/statewire-transport.cjs +8 -2
- package/dist/agent-runtime/src/statewire-transport.cjs.map +1 -1
- package/dist/agent-runtime/src/statewire-transport.d.ts +14 -5
- package/dist/agent-runtime/src/statewire-transport.js +8 -2
- package/dist/agent-runtime/src/statewire-transport.js.map +1 -1
- package/dist/agent-runtime/src/subagent-transcripts.cjs +1 -23
- package/dist/agent-runtime/src/subagent-transcripts.cjs.map +1 -1
- package/dist/agent-runtime/src/subagent-transcripts.js +3 -25
- package/dist/agent-runtime/src/subagent-transcripts.js.map +1 -1
- package/dist/agent-runtime/src/subagents.cjs +22 -29
- package/dist/agent-runtime/src/subagents.cjs.map +1 -1
- package/dist/agent-runtime/src/subagents.js +23 -30
- package/dist/agent-runtime/src/subagents.js.map +1 -1
- package/dist/agent-runtime/src/thread-extras.cjs +27 -19
- package/dist/agent-runtime/src/thread-extras.cjs.map +1 -1
- package/dist/agent-runtime/src/thread-extras.d.ts +19 -6
- package/dist/agent-runtime/src/thread-extras.js +27 -19
- package/dist/agent-runtime/src/thread-extras.js.map +1 -1
- package/dist/agent-runtime/src/thread-handoff-flow-machine.d.ts +8 -8
- package/dist/agent-runtime/src/tool-metadata.cjs +19 -0
- package/dist/agent-runtime/src/tool-metadata.cjs.map +1 -1
- package/dist/agent-runtime/src/tool-metadata.js +19 -0
- package/dist/agent-runtime/src/tool-metadata.js.map +1 -1
- package/dist/agent-runtime/src/tool-names.cjs +21 -0
- package/dist/agent-runtime/src/tool-names.cjs.map +1 -1
- package/dist/agent-runtime/src/tool-names.d.ts +8 -0
- package/dist/agent-runtime/src/tool-names.js +21 -0
- package/dist/agent-runtime/src/tool-names.js.map +1 -1
- package/dist/agent-runtime/src/typed-interrupt-kinds.cjs +247 -0
- package/dist/agent-runtime/src/typed-interrupt-kinds.cjs.map +1 -0
- package/dist/agent-runtime/src/typed-interrupt-kinds.d.ts +173 -0
- package/dist/agent-runtime/src/typed-interrupt-kinds.js +247 -0
- package/dist/agent-runtime/src/typed-interrupt-kinds.js.map +1 -0
- package/dist/agent-runtime/src/typed-interrupts.cjs +48 -0
- package/dist/agent-runtime/src/typed-interrupts.cjs.map +1 -0
- package/dist/agent-runtime/src/typed-interrupts.d.ts +75 -0
- package/dist/agent-runtime/src/typed-interrupts.js +48 -0
- package/dist/agent-runtime/src/typed-interrupts.js.map +1 -0
- package/dist/agent-runtime/src/types.d.ts +1 -1
- package/dist/agent-runtime/src/use-conversation-list.cjs +1 -0
- package/dist/agent-runtime/src/use-conversation-list.cjs.map +1 -1
- package/dist/agent-runtime/src/use-conversation-list.d.ts +7 -0
- package/dist/agent-runtime/src/use-conversation-list.js +1 -0
- package/dist/agent-runtime/src/use-conversation-list.js.map +1 -1
- package/dist/agent-runtime/src/use-deep-agent-chat-outbox.cjs +46 -29
- package/dist/agent-runtime/src/use-deep-agent-chat-outbox.cjs.map +1 -1
- package/dist/agent-runtime/src/use-deep-agent-chat-outbox.d.ts +14 -22
- package/dist/agent-runtime/src/use-deep-agent-chat-outbox.js +46 -29
- package/dist/agent-runtime/src/use-deep-agent-chat-outbox.js.map +1 -1
- package/dist/agent-runtime/src/use-deep-agent-runtime.cjs +78 -14
- package/dist/agent-runtime/src/use-deep-agent-runtime.cjs.map +1 -1
- package/dist/agent-runtime/src/use-deep-agent-runtime.d.ts +34 -7
- package/dist/agent-runtime/src/use-deep-agent-runtime.js +79 -15
- package/dist/agent-runtime/src/use-deep-agent-runtime.js.map +1 -1
- package/dist/agent-runtime/src/use-deep-agent-thread.cjs +16 -1
- package/dist/agent-runtime/src/use-deep-agent-thread.cjs.map +1 -1
- package/dist/agent-runtime/src/use-deep-agent-thread.d.ts +7 -2
- package/dist/agent-runtime/src/use-deep-agent-thread.js +16 -1
- package/dist/agent-runtime/src/use-deep-agent-thread.js.map +1 -1
- package/dist/agent-runtime/src/use-deep-agent-voice.cjs +30 -4
- package/dist/agent-runtime/src/use-deep-agent-voice.cjs.map +1 -1
- package/dist/agent-runtime/src/use-deep-agent-voice.d.ts +22 -4
- package/dist/agent-runtime/src/use-deep-agent-voice.js +30 -4
- package/dist/agent-runtime/src/use-deep-agent-voice.js.map +1 -1
- package/dist/agent-runtime/src/withdrawn-turns.d.ts +5 -4
- package/dist/agent-runtime/src/word-device-fit.d.ts +174 -0
- package/dist/agent-runtime/src/work-in.d.ts +127 -0
- package/dist/assets/AthenaAssetEmbed.cjs.map +1 -1
- package/dist/assets/AthenaAssetEmbed.d.ts +6 -1
- package/dist/assets/AthenaAssetEmbed.js.map +1 -1
- package/dist/assets/asset-panel-store.cjs +13 -5
- package/dist/assets/asset-panel-store.cjs.map +1 -1
- package/dist/assets/asset-panel-store.d.ts +33 -2
- package/dist/assets/asset-panel-store.js +13 -5
- package/dist/assets/asset-panel-store.js.map +1 -1
- package/dist/auth/AthenaCredentialSourceContext.cjs +11 -0
- package/dist/auth/AthenaCredentialSourceContext.cjs.map +1 -1
- package/dist/auth/AthenaCredentialSourceContext.d.ts +6 -0
- package/dist/auth/AthenaCredentialSourceContext.js +11 -0
- package/dist/auth/AthenaCredentialSourceContext.js.map +1 -1
- package/dist/auth/account-identity.cjs +13 -2
- package/dist/auth/account-identity.cjs.map +1 -1
- package/dist/auth/account-identity.d.ts +9 -0
- package/dist/auth/account-identity.js +13 -2
- package/dist/auth/account-identity.js.map +1 -1
- package/dist/auth/credential-source.cjs +20 -4
- package/dist/auth/credential-source.cjs.map +1 -1
- package/dist/auth/credential-source.d.ts +9 -0
- package/dist/auth/credential-source.js +20 -4
- package/dist/auth/credential-source.js.map +1 -1
- package/dist/catalog/chat-pickers.cjs +31 -0
- package/dist/catalog/chat-pickers.cjs.map +1 -1
- package/dist/catalog/chat-pickers.d.ts +17 -0
- package/dist/catalog/chat-pickers.js +33 -2
- package/dist/catalog/chat-pickers.js.map +1 -1
- package/dist/catalog/runtime-catalog.cjs +63 -3
- package/dist/catalog/runtime-catalog.cjs.map +1 -1
- package/dist/catalog/runtime-catalog.d.ts +63 -3
- package/dist/catalog/runtime-catalog.js +64 -4
- package/dist/catalog/runtime-catalog.js.map +1 -1
- package/dist/chat/AthenaChat.cjs +301 -98
- package/dist/chat/AthenaChat.cjs.map +1 -1
- package/dist/chat/AthenaChat.d.ts +80 -4
- package/dist/chat/AthenaChat.js +302 -99
- package/dist/chat/AthenaChat.js.map +1 -1
- package/dist/chat/StatewireApprovalCard.cjs +35 -5
- package/dist/chat/StatewireApprovalCard.cjs.map +1 -1
- package/dist/chat/StatewireApprovalCard.d.ts +55 -2
- package/dist/chat/StatewireApprovalCard.js +37 -7
- package/dist/chat/StatewireApprovalCard.js.map +1 -1
- package/dist/chat/StatewireQueuedMessages.cjs +17 -2
- package/dist/chat/StatewireQueuedMessages.cjs.map +1 -1
- package/dist/chat/StatewireQueuedMessages.d.ts +8 -45
- package/dist/chat/StatewireQueuedMessages.js +18 -3
- package/dist/chat/StatewireQueuedMessages.js.map +1 -1
- package/dist/chat/chat-agent-mentions.cjs +70 -0
- package/dist/chat/chat-agent-mentions.cjs.map +1 -0
- package/dist/chat/chat-agent-mentions.d.ts +13 -0
- package/dist/chat/chat-agent-mentions.js +70 -0
- package/dist/chat/chat-agent-mentions.js.map +1 -0
- package/dist/chat/composer-actions.cjs +12 -0
- package/dist/chat/composer-actions.cjs.map +1 -0
- package/dist/chat/composer-actions.d.ts +22 -0
- package/dist/chat/composer-actions.js +12 -0
- package/dist/chat/composer-actions.js.map +1 -0
- package/dist/chat/follow-up-suggestions.cjs +185 -0
- package/dist/chat/follow-up-suggestions.cjs.map +1 -0
- package/dist/chat/follow-up-suggestions.d.ts +64 -0
- package/dist/chat/follow-up-suggestions.js +185 -0
- package/dist/chat/follow-up-suggestions.js.map +1 -0
- package/dist/chat/super-grouping/ToolTimeline.cjs +4 -3
- package/dist/chat/super-grouping/ToolTimeline.cjs.map +1 -1
- package/dist/chat/super-grouping/ToolTimeline.d.ts +7 -3
- package/dist/chat/super-grouping/ToolTimeline.js +4 -3
- package/dist/chat/super-grouping/ToolTimeline.js.map +1 -1
- package/dist/chat/turn-changes.cjs +284 -0
- package/dist/chat/turn-changes.cjs.map +1 -0
- package/dist/chat/turn-changes.d.ts +130 -0
- package/dist/chat/turn-changes.js +284 -0
- package/dist/chat/turn-changes.js.map +1 -0
- package/dist/chat/typed-interrupts/StatewireTypedInterruptCard.cjs +31 -0
- package/dist/chat/typed-interrupts/StatewireTypedInterruptCard.cjs.map +1 -0
- package/dist/chat/typed-interrupts/StatewireTypedInterruptCard.d.ts +31 -0
- package/dist/chat/typed-interrupts/StatewireTypedInterruptCard.js +31 -0
- package/dist/chat/typed-interrupts/StatewireTypedInterruptCard.js.map +1 -0
- package/dist/chat/typed-interrupts/approval-cards.cjs +250 -0
- package/dist/chat/typed-interrupts/approval-cards.cjs.map +1 -0
- package/dist/chat/typed-interrupts/approval-cards.d.ts +22 -0
- package/dist/chat/typed-interrupts/approval-cards.js +250 -0
- package/dist/chat/typed-interrupts/approval-cards.js.map +1 -0
- package/dist/chat/typed-interrupts/form-cards.cjs +289 -0
- package/dist/chat/typed-interrupts/form-cards.cjs.map +1 -0
- package/dist/chat/typed-interrupts/form-cards.d.ts +6 -0
- package/dist/chat/typed-interrupts/form-cards.js +289 -0
- package/dist/chat/typed-interrupts/form-cards.js.map +1 -0
- package/dist/chat/typed-interrupts/interrupt-card-shell.cjs +182 -0
- package/dist/chat/typed-interrupts/interrupt-card-shell.cjs.map +1 -0
- package/dist/chat/typed-interrupts/interrupt-card-shell.d.ts +47 -0
- package/dist/chat/typed-interrupts/interrupt-card-shell.js +182 -0
- package/dist/chat/typed-interrupts/interrupt-card-shell.js.map +1 -0
- package/dist/chat/typed-interrupts/json-schema-form.cjs +388 -0
- package/dist/chat/typed-interrupts/json-schema-form.cjs.map +1 -0
- package/dist/chat/typed-interrupts/json-schema-form.d.ts +33 -0
- package/dist/chat/typed-interrupts/json-schema-form.js +388 -0
- package/dist/chat/typed-interrupts/json-schema-form.js.map +1 -0
- package/dist/chat/typed-interrupts/questionnaire-card.cjs +449 -0
- package/dist/chat/typed-interrupts/questionnaire-card.cjs.map +1 -0
- package/dist/chat/typed-interrupts/questionnaire-card.d.ts +20 -0
- package/dist/chat/typed-interrupts/questionnaire-card.js +449 -0
- package/dist/chat/typed-interrupts/questionnaire-card.js.map +1 -0
- package/dist/chat/typed-interrupts/request-file-card.cjs +159 -0
- package/dist/chat/typed-interrupts/request-file-card.cjs.map +1 -0
- package/dist/chat/typed-interrupts/request-file-card.d.ts +2 -0
- package/dist/chat/typed-interrupts/request-file-card.js +159 -0
- package/dist/chat/typed-interrupts/request-file-card.js.map +1 -0
- package/dist/chat/typed-interrupts/toolkit-selection-card.cjs +189 -0
- package/dist/chat/typed-interrupts/toolkit-selection-card.cjs.map +1 -0
- package/dist/chat/typed-interrupts/toolkit-selection-card.d.ts +23 -0
- package/dist/chat/typed-interrupts/toolkit-selection-card.js +189 -0
- package/dist/chat/typed-interrupts/toolkit-selection-card.js.map +1 -0
- package/dist/chat/typed-interrupts/typed-interrupt-body.cjs +26 -0
- package/dist/chat/typed-interrupts/typed-interrupt-body.cjs.map +1 -0
- package/dist/chat/typed-interrupts/typed-interrupt-body.d.ts +3 -0
- package/dist/chat/typed-interrupts/typed-interrupt-body.js +26 -0
- package/dist/chat/typed-interrupts/typed-interrupt-body.js.map +1 -0
- package/dist/chat/typed-interrupts/typed-interrupt-graphql.cjs +105 -0
- package/dist/chat/typed-interrupts/typed-interrupt-graphql.cjs.map +1 -0
- package/dist/chat/typed-interrupts/typed-interrupt-graphql.d.ts +29 -0
- package/dist/chat/typed-interrupts/typed-interrupt-graphql.js +105 -0
- package/dist/chat/typed-interrupts/typed-interrupt-graphql.js.map +1 -0
- package/dist/chat/typed-interrupts/typed-interrupt-notice.cjs +70 -0
- package/dist/chat/typed-interrupts/typed-interrupt-notice.cjs.map +1 -0
- package/dist/chat/typed-interrupts/typed-interrupt-notice.d.ts +45 -0
- package/dist/chat/typed-interrupts/typed-interrupt-notice.js +70 -0
- package/dist/chat/typed-interrupts/typed-interrupt-notice.js.map +1 -0
- package/dist/chat/typed-interrupts/typed-interrupt-panel.cjs +76 -0
- package/dist/chat/typed-interrupts/typed-interrupt-panel.cjs.map +1 -0
- package/dist/chat/typed-interrupts/typed-interrupt-panel.d.ts +11 -0
- package/dist/chat/typed-interrupts/typed-interrupt-panel.js +76 -0
- package/dist/chat/typed-interrupts/typed-interrupt-panel.js.map +1 -0
- package/dist/chat/typed-interrupts/typed-interrupt-types.d.ts +46 -0
- package/dist/chat/typed-interrupts/use-interrupt-draft.cjs +106 -0
- package/dist/chat/typed-interrupts/use-interrupt-draft.cjs.map +1 -0
- package/dist/chat/typed-interrupts/use-interrupt-draft.d.ts +29 -0
- package/dist/chat/typed-interrupts/use-interrupt-draft.js +106 -0
- package/dist/chat/typed-interrupts/use-interrupt-draft.js.map +1 -0
- package/dist/chat/typed-interrupts/use-statewire-typed-interrupt.cjs +231 -0
- package/dist/chat/typed-interrupts/use-statewire-typed-interrupt.cjs.map +1 -0
- package/dist/chat/typed-interrupts/use-statewire-typed-interrupt.d.ts +66 -0
- package/dist/chat/typed-interrupts/use-statewire-typed-interrupt.js +231 -0
- package/dist/chat/typed-interrupts/use-statewire-typed-interrupt.js.map +1 -0
- package/dist/chat-ui/composer/composer-named-agents.cjs +13 -0
- package/dist/chat-ui/composer/composer-named-agents.cjs.map +1 -0
- package/dist/chat-ui/composer/composer-named-agents.d.ts +20 -0
- package/dist/chat-ui/composer/composer-named-agents.js +13 -0
- package/dist/chat-ui/composer/composer-named-agents.js.map +1 -0
- package/dist/chat-ui/composer/slash-command-menu.cjs +143 -0
- package/dist/chat-ui/composer/slash-command-menu.cjs.map +1 -0
- package/dist/chat-ui/composer/slash-command-menu.d.ts +19 -0
- package/dist/chat-ui/composer/slash-command-menu.js +143 -0
- package/dist/chat-ui/composer/slash-command-menu.js.map +1 -0
- package/dist/chat-ui/composer/slash-commands-extension.cjs +51 -0
- package/dist/chat-ui/composer/slash-commands-extension.cjs.map +1 -0
- package/dist/chat-ui/composer/slash-commands-extension.d.ts +39 -0
- package/dist/chat-ui/composer/slash-commands-extension.js +51 -0
- package/dist/chat-ui/composer/slash-commands-extension.js.map +1 -0
- package/dist/chat-ui/composer/slash-commands.cjs +74 -0
- package/dist/chat-ui/composer/slash-commands.cjs.map +1 -0
- package/dist/chat-ui/composer/slash-commands.d.ts +82 -0
- package/dist/chat-ui/composer/slash-commands.js +74 -0
- package/dist/chat-ui/composer/slash-commands.js.map +1 -0
- package/dist/chat-ui/composer/tiptap-composer.cjs +135 -9
- package/dist/chat-ui/composer/tiptap-composer.cjs.map +1 -1
- package/dist/chat-ui/composer/tiptap-composer.d.ts +61 -2
- package/dist/chat-ui/composer/tiptap-composer.js +135 -9
- package/dist/chat-ui/composer/tiptap-composer.js.map +1 -1
- package/dist/chat-ui/index.cjs +5 -0
- package/dist/chat-ui/index.cjs.map +1 -1
- package/dist/chat-ui/index.d.ts +4 -2
- package/dist/chat-ui/index.js +5 -0
- package/dist/chat-ui/index.js.map +1 -1
- package/dist/chat-ui/mentions/mention-chip.cjs +10 -4
- package/dist/chat-ui/mentions/mention-chip.cjs.map +1 -1
- package/dist/chat-ui/mentions/mention-chip.js +11 -5
- package/dist/chat-ui/mentions/mention-chip.js.map +1 -1
- package/dist/chat-ui/mentions/mention-extension.cjs +8 -1
- package/dist/chat-ui/mentions/mention-extension.cjs.map +1 -1
- package/dist/chat-ui/mentions/mention-extension.js +8 -1
- package/dist/chat-ui/mentions/mention-extension.js.map +1 -1
- package/dist/chat-ui/mentions/suggestions/components/get-scope-name.cjs +1 -0
- package/dist/chat-ui/mentions/suggestions/components/get-scope-name.cjs.map +1 -1
- package/dist/chat-ui/mentions/suggestions/components/get-scope-name.js +1 -0
- package/dist/chat-ui/mentions/suggestions/components/get-scope-name.js.map +1 -1
- package/dist/chat-ui/mentions/suggestions/components/mention-icon.cjs +20 -2
- package/dist/chat-ui/mentions/suggestions/components/mention-icon.cjs.map +1 -1
- package/dist/chat-ui/mentions/suggestions/components/mention-icon.d.ts +10 -1
- package/dist/chat-ui/mentions/suggestions/components/mention-icon.js +22 -4
- package/dist/chat-ui/mentions/suggestions/components/mention-icon.js.map +1 -1
- package/dist/chat-ui/mentions/suggestions/components/menu-item.cjs +1 -1
- package/dist/chat-ui/mentions/suggestions/components/menu-item.cjs.map +1 -1
- package/dist/chat-ui/mentions/suggestions/components/menu-item.js +1 -1
- package/dist/chat-ui/mentions/suggestions/components/menu-item.js.map +1 -1
- package/dist/chat-ui/mentions/suggestions/data/api-client.cjs +45 -0
- package/dist/chat-ui/mentions/suggestions/data/api-client.cjs.map +1 -1
- package/dist/chat-ui/mentions/suggestions/data/api-client.d.ts +48 -0
- package/dist/chat-ui/mentions/suggestions/data/api-client.js +45 -0
- package/dist/chat-ui/mentions/suggestions/data/api-client.js.map +1 -1
- package/dist/chat-ui/mentions/suggestions/data/sources/asset-type-icon-names.generated.cjs +89 -0
- package/dist/chat-ui/mentions/suggestions/data/sources/asset-type-icon-names.generated.cjs.map +1 -0
- package/dist/chat-ui/mentions/suggestions/data/sources/asset-type-icon-names.generated.d.ts +8 -0
- package/dist/chat-ui/mentions/suggestions/data/sources/asset-type-icon-names.generated.js +89 -0
- package/dist/chat-ui/mentions/suggestions/data/sources/asset-type-icon-names.generated.js.map +1 -0
- package/dist/chat-ui/mentions/suggestions/data/sources/asset-type-icons.cjs +140 -116
- package/dist/chat-ui/mentions/suggestions/data/sources/asset-type-icons.cjs.map +1 -1
- package/dist/chat-ui/mentions/suggestions/data/sources/asset-type-icons.d.ts +46 -12
- package/dist/chat-ui/mentions/suggestions/data/sources/asset-type-icons.js +141 -117
- package/dist/chat-ui/mentions/suggestions/data/sources/asset-type-icons.js.map +1 -1
- package/dist/chat-ui/mentions/suggestions/data/sources/index.cjs +272 -25
- package/dist/chat-ui/mentions/suggestions/data/sources/index.cjs.map +1 -1
- package/dist/chat-ui/mentions/suggestions/data/sources/index.d.ts +88 -10
- package/dist/chat-ui/mentions/suggestions/data/sources/index.js +274 -27
- package/dist/chat-ui/mentions/suggestions/data/sources/index.js.map +1 -1
- package/dist/chat-ui/mentions/suggestions/data/types.cjs.map +1 -1
- package/dist/chat-ui/mentions/suggestions/data/types.d.ts +27 -1
- package/dist/chat-ui/mentions/suggestions/data/types.js.map +1 -1
- package/dist/chat-ui/mentions/suggestions/data/use-mention-suggestions.cjs +56 -5
- package/dist/chat-ui/mentions/suggestions/data/use-mention-suggestions.cjs.map +1 -1
- package/dist/chat-ui/mentions/suggestions/data/use-mention-suggestions.d.ts +26 -6
- package/dist/chat-ui/mentions/suggestions/data/use-mention-suggestions.js +57 -6
- package/dist/chat-ui/mentions/suggestions/data/use-mention-suggestions.js.map +1 -1
- package/dist/chat-ui/mentions/suggestions/mention-suggestions.extension.cjs +34 -17
- package/dist/chat-ui/mentions/suggestions/mention-suggestions.extension.cjs.map +1 -1
- package/dist/chat-ui/mentions/suggestions/mention-suggestions.extension.d.ts +19 -1
- package/dist/chat-ui/mentions/suggestions/mention-suggestions.extension.js +35 -18
- package/dist/chat-ui/mentions/suggestions/mention-suggestions.extension.js.map +1 -1
- package/dist/chat-ui/mentions/use-asset-icon-app-url.cjs +12 -0
- package/dist/chat-ui/mentions/use-asset-icon-app-url.cjs.map +1 -0
- package/dist/chat-ui/mentions/use-asset-icon-app-url.d.ts +8 -0
- package/dist/chat-ui/mentions/use-asset-icon-app-url.js +12 -0
- package/dist/chat-ui/mentions/use-asset-icon-app-url.js.map +1 -0
- package/dist/chat-ui/statewire.d.ts +1 -1
- package/dist/chat-ui/thread/statewire-history-edge.cjs +15 -0
- package/dist/chat-ui/thread/statewire-history-edge.cjs.map +1 -1
- package/dist/chat-ui/thread/statewire-history-edge.d.ts +4 -1
- package/dist/chat-ui/thread/statewire-history-edge.js +15 -0
- package/dist/chat-ui/thread/statewire-history-edge.js.map +1 -1
- package/dist/collab/client.cjs +41 -6
- package/dist/collab/client.cjs.map +1 -1
- package/dist/collab/client.d.ts +38 -7
- package/dist/collab/client.js +41 -6
- package/dist/collab/client.js.map +1 -1
- package/dist/composer/ComposerAttachedReferences.cjs +119 -0
- package/dist/composer/ComposerAttachedReferences.cjs.map +1 -0
- package/dist/composer/ComposerAttachedReferences.d.ts +26 -0
- package/dist/composer/ComposerAttachedReferences.js +119 -0
- package/dist/composer/ComposerAttachedReferences.js.map +1 -0
- package/dist/composer/ComposerNamedAgents.cjs +63 -0
- package/dist/composer/ComposerNamedAgents.cjs.map +1 -0
- package/dist/composer/ComposerNamedAgents.d.ts +16 -0
- package/dist/composer/ComposerNamedAgents.js +63 -0
- package/dist/composer/ComposerNamedAgents.js.map +1 -0
- package/dist/composer/attached-references.cjs +159 -0
- package/dist/composer/attached-references.cjs.map +1 -0
- package/dist/composer/attached-references.d.ts +86 -0
- package/dist/composer/attached-references.js +159 -0
- package/dist/composer/attached-references.js.map +1 -0
- package/dist/composer/build-composed-message.cjs +14 -7
- package/dist/composer/build-composed-message.cjs.map +1 -1
- package/dist/composer/build-composed-message.d.ts +6 -1
- package/dist/composer/build-composed-message.js +14 -7
- package/dist/composer/build-composed-message.js.map +1 -1
- package/dist/composer/composer-handoff.cjs +6 -2
- package/dist/composer/composer-handoff.cjs.map +1 -1
- package/dist/composer/composer-handoff.d.ts +7 -1
- package/dist/composer/composer-handoff.js +6 -2
- package/dist/composer/composer-handoff.js.map +1 -1
- package/dist/composer/folder-upload.cjs +149 -0
- package/dist/composer/folder-upload.cjs.map +1 -0
- package/dist/composer/folder-upload.d.ts +79 -0
- package/dist/composer/folder-upload.js +149 -0
- package/dist/composer/folder-upload.js.map +1 -0
- package/dist/composer/index.d.ts +1 -1
- package/dist/composer/staged-message-metadata.cjs +12 -0
- package/dist/composer/staged-message-metadata.cjs.map +1 -0
- package/dist/composer/staged-message-metadata.d.ts +15 -0
- package/dist/composer/staged-message-metadata.js +12 -0
- package/dist/composer/staged-message-metadata.js.map +1 -0
- package/dist/composer/useAttachToChat.cjs +35 -0
- package/dist/composer/useAttachToChat.cjs.map +1 -0
- package/dist/composer/useAttachToChat.d.ts +54 -0
- package/dist/composer/useAttachToChat.js +35 -0
- package/dist/composer/useAttachToChat.js.map +1 -0
- package/dist/composer/useAttachedReferencesComposerProps.cjs +19 -0
- package/dist/composer/useAttachedReferencesComposerProps.cjs.map +1 -0
- package/dist/composer/useAttachedReferencesComposerProps.d.ts +12 -0
- package/dist/composer/useAttachedReferencesComposerProps.js +19 -0
- package/dist/composer/useAttachedReferencesComposerProps.js.map +1 -0
- package/dist/composer/useFileUpload.cjs +95 -7
- package/dist/composer/useFileUpload.cjs.map +1 -1
- package/dist/composer/useFileUpload.d.ts +21 -2
- package/dist/composer/useFileUpload.js +95 -7
- package/dist/composer/useFileUpload.js.map +1 -1
- package/dist/data/athena-api-error.cjs +125 -0
- package/dist/data/athena-api-error.cjs.map +1 -0
- package/dist/data/athena-api-error.d.ts +96 -0
- package/dist/data/athena-api-error.js +125 -0
- package/dist/data/athena-api-error.js.map +1 -0
- package/dist/data/athena-data-client.cjs +106 -0
- package/dist/data/athena-data-client.cjs.map +1 -0
- package/dist/data/athena-data-client.d.ts +74 -0
- package/dist/data/athena-data-client.js +106 -0
- package/dist/data/athena-data-client.js.map +1 -0
- package/dist/data/athena-member.cjs +93 -0
- package/dist/data/athena-member.cjs.map +1 -0
- package/dist/data/athena-member.d.ts +125 -0
- package/dist/data/athena-member.js +93 -0
- package/dist/data/athena-member.js.map +1 -0
- package/dist/data/athena-request.cjs +460 -0
- package/dist/data/athena-request.cjs.map +1 -0
- package/dist/data/athena-request.d.ts +120 -0
- package/dist/data/athena-request.js +460 -0
- package/dist/data/athena-request.js.map +1 -0
- package/dist/data/use-athena-fetch.cjs +14 -0
- package/dist/data/use-athena-fetch.cjs.map +1 -0
- package/dist/data/use-athena-fetch.d.ts +19 -0
- package/dist/data/use-athena-fetch.js +14 -0
- package/dist/data/use-athena-fetch.js.map +1 -0
- package/dist/data/use-athena-graphql.cjs +66 -0
- package/dist/data/use-athena-graphql.cjs.map +1 -0
- package/dist/data/use-athena-graphql.d.ts +56 -0
- package/dist/data/use-athena-graphql.js +66 -0
- package/dist/data/use-athena-graphql.js.map +1 -0
- package/dist/data/use-athena-rest.cjs +33 -0
- package/dist/data/use-athena-rest.cjs.map +1 -0
- package/dist/data/use-athena-rest.d.ts +21 -0
- package/dist/data/use-athena-rest.js +33 -0
- package/dist/data/use-athena-rest.js.map +1 -0
- package/dist/data/use-semantic-query.cjs +44 -0
- package/dist/data/use-semantic-query.cjs.map +1 -0
- package/dist/data/use-semantic-query.d.ts +92 -0
- package/dist/data/use-semantic-query.js +44 -0
- package/dist/data/use-semantic-query.js.map +1 -0
- package/dist/diagnostics/athena-diagnostics.cjs.map +1 -1
- package/dist/diagnostics/athena-diagnostics.d.ts +5 -1
- package/dist/diagnostics/athena-diagnostics.js.map +1 -1
- package/dist/diagnostics/errors.cjs +7 -0
- package/dist/diagnostics/errors.cjs.map +1 -1
- package/dist/diagnostics/errors.d.ts +7 -0
- package/dist/diagnostics/errors.js +7 -0
- package/dist/diagnostics/errors.js.map +1 -1
- package/dist/index.cjs +155 -11
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.ts +72 -13
- package/dist/index.js +148 -4
- package/dist/index.js.map +1 -1
- package/dist/keryx-http/src/initial-sync.cjs +64 -16
- package/dist/keryx-http/src/initial-sync.cjs.map +1 -1
- package/dist/keryx-http/src/initial-sync.d.ts +31 -1
- package/dist/keryx-http/src/initial-sync.js +64 -16
- package/dist/keryx-http/src/initial-sync.js.map +1 -1
- package/dist/keryx-http/src/own-awareness.cjs +20 -0
- package/dist/keryx-http/src/own-awareness.cjs.map +1 -0
- package/dist/keryx-http/src/own-awareness.d.ts +50 -0
- package/dist/keryx-http/src/own-awareness.js +20 -0
- package/dist/keryx-http/src/own-awareness.js.map +1 -0
- package/dist/keryx-http/src/update-attributions.cjs +26 -1
- package/dist/keryx-http/src/update-attributions.cjs.map +1 -1
- package/dist/keryx-http/src/update-attributions.d.ts +10 -1
- package/dist/keryx-http/src/update-attributions.js +26 -1
- package/dist/keryx-http/src/update-attributions.js.map +1 -1
- package/dist/offline/chat-outbox.cjs +262 -26
- package/dist/offline/chat-outbox.cjs.map +1 -1
- package/dist/offline/chat-outbox.d.ts +90 -12
- package/dist/offline/chat-outbox.js +263 -27
- package/dist/offline/chat-outbox.js.map +1 -1
- package/dist/provider/AthenaProvider.cjs +60 -22
- package/dist/provider/AthenaProvider.cjs.map +1 -1
- package/dist/provider/AthenaProvider.d.ts +24 -8
- package/dist/provider/AthenaProvider.js +61 -23
- package/dist/provider/AthenaProvider.js.map +1 -1
- package/dist/react/package.json.cjs +1 -1
- package/dist/react/package.json.js +1 -1
- package/dist/references/src/anchors/parse.cjs +11 -1
- package/dist/references/src/anchors/parse.cjs.map +1 -1
- package/dist/references/src/anchors/parse.js +11 -1
- package/dist/references/src/anchors/parse.js.map +1 -1
- package/dist/references/src/anchors/schemas.d.ts +1 -0
- package/dist/references/src/anchors/serialize.cjs +1 -0
- package/dist/references/src/anchors/serialize.cjs.map +1 -1
- package/dist/references/src/anchors/serialize.js +1 -0
- package/dist/references/src/anchors/serialize.js.map +1 -1
- package/dist/references/src/anchors/types.cjs +5 -0
- package/dist/references/src/anchors/types.cjs.map +1 -1
- package/dist/references/src/anchors/types.d.ts +9 -0
- package/dist/references/src/anchors/types.js +5 -0
- package/dist/references/src/anchors/types.js.map +1 -1
- package/dist/references/src/attachable.cjs +149 -0
- package/dist/references/src/attachable.cjs.map +1 -0
- package/dist/references/src/attachable.d.ts +87 -0
- package/dist/references/src/attachable.js +149 -0
- package/dist/references/src/attachable.js.map +1 -0
- package/dist/references/src/schemas.d.ts +2 -0
- package/dist/runtime/StatewirePlanModeLaneSync.cjs +93 -0
- package/dist/runtime/StatewirePlanModeLaneSync.cjs.map +1 -0
- package/dist/runtime/StatewirePlanModeLaneSync.d.ts +34 -0
- package/dist/runtime/StatewirePlanModeLaneSync.js +93 -0
- package/dist/runtime/StatewirePlanModeLaneSync.js.map +1 -0
- package/dist/runtime/StatewireThreadConfigLaneSync.cjs +2 -0
- package/dist/runtime/StatewireThreadConfigLaneSync.cjs.map +1 -1
- package/dist/runtime/StatewireThreadConfigLaneSync.d.ts +4 -0
- package/dist/runtime/StatewireThreadConfigLaneSync.js +2 -0
- package/dist/runtime/StatewireThreadConfigLaneSync.js.map +1 -1
- package/dist/runtime/statewire-plan-mode.cjs +71 -0
- package/dist/runtime/statewire-plan-mode.cjs.map +1 -0
- package/dist/runtime/statewire-plan-mode.d.ts +88 -0
- package/dist/runtime/statewire-plan-mode.js +71 -0
- package/dist/runtime/statewire-plan-mode.js.map +1 -0
- package/dist/runtime/statewire-run-config.cjs +3 -1
- package/dist/runtime/statewire-run-config.cjs.map +1 -1
- package/dist/runtime/statewire-run-config.d.ts +7 -0
- package/dist/runtime/statewire-run-config.js +3 -1
- package/dist/runtime/statewire-run-config.js.map +1 -1
- package/dist/runtime/statewire-session-key.cjs +11 -5
- package/dist/runtime/statewire-session-key.cjs.map +1 -1
- package/dist/runtime/statewire-session-key.d.ts +22 -10
- package/dist/runtime/statewire-session-key.js +11 -5
- package/dist/runtime/statewire-session-key.js.map +1 -1
- package/dist/runtime/useAthenaStatewireRuntime.cjs +64 -9
- package/dist/runtime/useAthenaStatewireRuntime.cjs.map +1 -1
- package/dist/runtime/useAthenaStatewireRuntime.d.ts +26 -10
- package/dist/runtime/useAthenaStatewireRuntime.js +66 -11
- package/dist/runtime/useAthenaStatewireRuntime.js.map +1 -1
- package/dist/search/useAthenaAssets.cjs +394 -0
- package/dist/search/useAthenaAssets.cjs.map +1 -0
- package/dist/search/useAthenaAssets.d.ts +186 -0
- package/dist/search/useAthenaAssets.js +394 -0
- package/dist/search/useAthenaAssets.js.map +1 -0
- package/dist/sheet-range/index.cjs +4 -0
- package/dist/sheet-range/index.cjs.map +1 -1
- package/dist/sheet-range/index.d.ts +4 -2
- package/dist/sheet-range/index.js +4 -0
- package/dist/sheet-range/index.js.map +1 -1
- package/dist/sheet-range/query-range.cjs +102 -0
- package/dist/sheet-range/query-range.cjs.map +1 -0
- package/dist/sheet-range/query-range.d.ts +46 -0
- package/dist/sheet-range/query-range.js +102 -0
- package/dist/sheet-range/query-range.js.map +1 -0
- package/dist/styles.css +1 -1
- package/dist/subagents/index.cjs +49 -0
- package/dist/subagents/index.cjs.map +1 -0
- package/dist/subagents/index.d.ts +16 -0
- package/dist/subagents/index.js +49 -0
- package/dist/subagents/index.js.map +1 -0
- package/dist/subagents/lane-follow.cjs +19 -0
- package/dist/subagents/lane-follow.cjs.map +1 -0
- package/dist/subagents/lane-follow.d.ts +9 -0
- package/dist/subagents/lane-follow.js +19 -0
- package/dist/subagents/lane-follow.js.map +1 -0
- package/dist/subagents/lane-model.cjs +178 -0
- package/dist/subagents/lane-model.cjs.map +1 -0
- package/dist/subagents/lane-model.d.ts +140 -0
- package/dist/subagents/lane-model.js +178 -0
- package/dist/subagents/lane-model.js.map +1 -0
- package/dist/subagents/lane-parts.cjs +517 -0
- package/dist/subagents/lane-parts.cjs.map +1 -0
- package/dist/subagents/lane-parts.d.ts +130 -0
- package/dist/subagents/lane-parts.js +517 -0
- package/dist/subagents/lane-parts.js.map +1 -0
- package/dist/subagents/subagent-lane-group.cjs +215 -0
- package/dist/subagents/subagent-lane-group.cjs.map +1 -0
- package/dist/subagents/subagent-lane-group.d.ts +67 -0
- package/dist/subagents/subagent-lane-group.js +215 -0
- package/dist/subagents/subagent-lane-group.js.map +1 -0
- package/dist/subagents/subagent-transcript-drawer.cjs +431 -0
- package/dist/subagents/subagent-transcript-drawer.cjs.map +1 -0
- package/dist/subagents/subagent-transcript-drawer.d.ts +78 -0
- package/dist/subagents/subagent-transcript-drawer.js +431 -0
- package/dist/subagents/subagent-transcript-drawer.js.map +1 -0
- package/dist/subagents/task-subagent-group.cjs +115 -0
- package/dist/subagents/task-subagent-group.cjs.map +1 -0
- package/dist/subagents/task-subagent-group.d.ts +36 -0
- package/dist/subagents/task-subagent-group.js +115 -0
- package/dist/subagents/task-subagent-group.js.map +1 -0
- package/dist/subagents/use-omitted-images-in-view.cjs +68 -0
- package/dist/subagents/use-omitted-images-in-view.cjs.map +1 -0
- package/dist/subagents/use-omitted-images-in-view.d.ts +21 -0
- package/dist/subagents/use-omitted-images-in-view.js +68 -0
- package/dist/subagents/use-omitted-images-in-view.js.map +1 -0
- package/dist/threads/Inbox.cjs +2 -2
- package/dist/threads/Inbox.cjs.map +1 -1
- package/dist/threads/SessionList.cjs +6 -6
- package/dist/threads/SessionList.cjs.map +1 -1
- package/dist/threads/SessionsPage.cjs +13 -7
- package/dist/threads/SessionsPage.cjs.map +1 -1
- package/dist/threads/SessionsPage.d.ts +10 -1
- package/dist/threads/SessionsPage.js +9 -3
- package/dist/threads/SessionsPage.js.map +1 -1
- package/dist/threads/session-list-model.cjs.map +1 -1
- package/dist/threads/session-list-model.d.ts +2 -1
- package/dist/threads/session-list-model.js.map +1 -1
- package/dist/threads/session-row-parts.cjs +3 -3
- package/dist/threads/session-row-parts.cjs.map +1 -1
- package/dist/threads/sessions-page-model.cjs +13 -5
- package/dist/threads/sessions-page-model.cjs.map +1 -1
- package/dist/threads/sessions-page-model.d.ts +7 -0
- package/dist/threads/sessions-page-model.js +11 -3
- package/dist/threads/sessions-page-model.js.map +1 -1
- package/dist/threads/sessions-page-storage.cjs +8 -8
- package/dist/threads/sessions-page-storage.cjs.map +1 -1
- package/dist/threads/sessions-page-storage.d.ts +5 -1
- package/dist/threads/sessions-page-storage.js +8 -8
- package/dist/threads/sessions-page-storage.js.map +1 -1
- package/dist/threads/statewire-thread-list.cjs +14 -2
- package/dist/threads/statewire-thread-list.cjs.map +1 -1
- package/dist/threads/statewire-thread-list.d.ts +11 -2
- package/dist/threads/statewire-thread-list.js +14 -2
- package/dist/threads/statewire-thread-list.js.map +1 -1
- package/dist/threads/use-athena-sessions.cjs +1 -0
- package/dist/threads/use-athena-sessions.cjs.map +1 -1
- package/dist/threads/use-athena-sessions.d.ts +7 -0
- package/dist/threads/use-athena-sessions.js +1 -0
- package/dist/threads/use-athena-sessions.js.map +1 -1
- package/dist/threads/use-athena-thread-agent.cjs +31 -0
- package/dist/threads/use-athena-thread-agent.cjs.map +1 -0
- package/dist/threads/use-athena-thread-agent.d.ts +38 -0
- package/dist/threads/use-athena-thread-agent.js +31 -0
- package/dist/threads/use-athena-thread-agent.js.map +1 -0
- package/dist/threads/use-athena-thread-plan-mode.cjs +18 -0
- package/dist/threads/use-athena-thread-plan-mode.cjs.map +1 -0
- package/dist/threads/use-athena-thread-plan-mode.d.ts +18 -0
- package/dist/threads/use-athena-thread-plan-mode.js +18 -0
- package/dist/threads/use-athena-thread-plan-mode.js.map +1 -0
- package/dist/threads/use-rest-conversation-history.d.ts +1 -0
- package/dist/tools/agent-creations.cjs +97 -0
- package/dist/tools/agent-creations.cjs.map +1 -0
- package/dist/tools/agent-creations.d.ts +38 -0
- package/dist/tools/agent-creations.js +97 -0
- package/dist/tools/agent-creations.js.map +1 -0
- package/dist/tools/agent-highlights.cjs +100 -0
- package/dist/tools/agent-highlights.cjs.map +1 -0
- package/dist/tools/agent-highlights.d.ts +57 -0
- package/dist/tools/agent-highlights.js +100 -0
- package/dist/tools/agent-highlights.js.map +1 -0
- package/dist/tools/append-document-tool-ui.cjs +1 -0
- package/dist/tools/append-document-tool-ui.cjs.map +1 -1
- package/dist/tools/append-document-tool-ui.d.ts +7 -0
- package/dist/tools/append-document-tool-ui.js +2 -1
- package/dist/tools/append-document-tool-ui.js.map +1 -1
- package/dist/tools/auto-open-tools.cjs +144 -71
- package/dist/tools/auto-open-tools.cjs.map +1 -1
- package/dist/tools/auto-open-tools.d.ts +131 -1
- package/dist/tools/auto-open-tools.js +145 -72
- package/dist/tools/auto-open-tools.js.map +1 -1
- package/dist/tools/browser-tool-uis.cjs +594 -0
- package/dist/tools/browser-tool-uis.cjs.map +1 -0
- package/dist/tools/browser-tool-uis.d.ts +8 -0
- package/dist/tools/browser-tool-uis.js +594 -0
- package/dist/tools/browser-tool-uis.js.map +1 -0
- package/dist/tools/computer-asset-tool-uis.cjs +313 -0
- package/dist/tools/computer-asset-tool-uis.cjs.map +1 -0
- package/dist/tools/computer-asset-tool-uis.d.ts +5 -0
- package/dist/tools/computer-asset-tool-uis.js +313 -0
- package/dist/tools/computer-asset-tool-uis.js.map +1 -0
- package/dist/tools/document-edit-tool-uis.cjs +218 -0
- package/dist/tools/document-edit-tool-uis.cjs.map +1 -0
- package/dist/tools/document-edit-tool-uis.d.ts +40 -0
- package/dist/tools/document-edit-tool-uis.js +218 -0
- package/dist/tools/document-edit-tool-uis.js.map +1 -0
- package/dist/tools/drive-tool-uis.cjs +429 -0
- package/dist/tools/drive-tool-uis.cjs.map +1 -0
- package/dist/tools/drive-tool-uis.d.ts +121 -0
- package/dist/tools/drive-tool-uis.js +429 -0
- package/dist/tools/drive-tool-uis.js.map +1 -0
- package/dist/tools/email-calendar-tool-uis.cjs +789 -0
- package/dist/tools/email-calendar-tool-uis.cjs.map +1 -0
- package/dist/tools/email-calendar-tool-uis.d.ts +129 -0
- package/dist/tools/email-calendar-tool-uis.js +789 -0
- package/dist/tools/email-calendar-tool-uis.js.map +1 -0
- package/dist/tools/ontology-tool-uis.cjs +83 -0
- package/dist/tools/ontology-tool-uis.cjs.map +1 -0
- package/dist/tools/ontology-tool-uis.d.ts +9 -0
- package/dist/tools/ontology-tool-uis.js +83 -0
- package/dist/tools/ontology-tool-uis.js.map +1 -0
- package/dist/tools/orchestration-tool-uis.cjs +586 -0
- package/dist/tools/orchestration-tool-uis.cjs.map +1 -0
- package/dist/tools/orchestration-tool-uis.d.ts +141 -0
- package/dist/tools/orchestration-tool-uis.js +586 -0
- package/dist/tools/orchestration-tool-uis.js.map +1 -0
- package/dist/tools/presentation-edit-tool-uis.cjs +516 -0
- package/dist/tools/presentation-edit-tool-uis.cjs.map +1 -0
- package/dist/tools/presentation-edit-tool-uis.d.ts +73 -0
- package/dist/tools/presentation-edit-tool-uis.js +516 -0
- package/dist/tools/presentation-edit-tool-uis.js.map +1 -0
- package/dist/tools/project-tool-uis.cjs +213 -0
- package/dist/tools/project-tool-uis.cjs.map +1 -0
- package/dist/tools/project-tool-uis.d.ts +14 -0
- package/dist/tools/project-tool-uis.js +213 -0
- package/dist/tools/project-tool-uis.js.map +1 -0
- package/dist/tools/sandbox-tool-uis.cjs +491 -0
- package/dist/tools/sandbox-tool-uis.cjs.map +1 -0
- package/dist/tools/sandbox-tool-uis.d.ts +116 -0
- package/dist/tools/sandbox-tool-uis.js +491 -0
- package/dist/tools/sandbox-tool-uis.js.map +1 -0
- package/dist/tools/sheet-query-tool-ui.cjs +138 -0
- package/dist/tools/sheet-query-tool-ui.cjs.map +1 -0
- package/dist/tools/sheet-query-tool-ui.d.ts +15 -0
- package/dist/tools/sheet-query-tool-ui.js +138 -0
- package/dist/tools/sheet-query-tool-ui.js.map +1 -0
- package/dist/tools/studio-screenshot-tool-uis.cjs +262 -0
- package/dist/tools/studio-screenshot-tool-uis.cjs.map +1 -0
- package/dist/tools/studio-screenshot-tool-uis.d.ts +52 -0
- package/dist/tools/studio-screenshot-tool-uis.js +262 -0
- package/dist/tools/studio-screenshot-tool-uis.js.map +1 -0
- package/dist/tools/subagent-task-tool-ui.cjs +24 -475
- package/dist/tools/subagent-task-tool-ui.cjs.map +1 -1
- package/dist/tools/subagent-task-tool-ui.d.ts +19 -103
- package/dist/tools/subagent-task-tool-ui.js +28 -479
- package/dist/tools/subagent-task-tool-ui.js.map +1 -1
- package/dist/tools/tool-summary.cjs +36 -0
- package/dist/tools/tool-summary.cjs.map +1 -1
- package/dist/tools/tool-summary.js +36 -0
- package/dist/tools/tool-summary.js.map +1 -1
- package/dist/tools/tool-uis.cjs +181 -53
- package/dist/tools/tool-uis.cjs.map +1 -1
- package/dist/tools/tool-uis.d.ts +40 -0
- package/dist/tools/tool-uis.js +183 -55
- package/dist/tools/tool-uis.js.map +1 -1
- package/dist/typed-interrupts/index.cjs +15 -0
- package/dist/typed-interrupts/index.cjs.map +1 -0
- package/dist/typed-interrupts/index.d.ts +20 -0
- package/dist/typed-interrupts/index.js +15 -0
- package/dist/typed-interrupts/index.js.map +1 -0
- package/dist/version.cjs +4 -0
- package/dist/version.cjs.map +1 -1
- package/dist/version.d.ts +9 -0
- package/dist/version.js +4 -0
- package/dist/version.js.map +1 -1
- package/dist/workbench/live-desktop-api.cjs +2 -1
- package/dist/workbench/live-desktop-api.cjs.map +1 -1
- package/dist/workbench/live-desktop-api.js +2 -1
- package/dist/workbench/live-desktop-api.js.map +1 -1
- package/dist/workbench/session-workbench-panes.cjs +6 -6
- package/dist/workbench/session-workbench-panes.cjs.map +1 -1
- package/dist/workbench/session-workspace-api.cjs +7 -2
- package/dist/workbench/session-workspace-api.cjs.map +1 -1
- package/dist/workbench/session-workspace-api.d.ts +10 -0
- package/dist/workbench/session-workspace-api.js +7 -2
- package/dist/workbench/session-workspace-api.js.map +1 -1
- package/package.json +28 -6
- package/dist/agent-runtime/src/chat-outbox-store.cjs +0 -510
- package/dist/agent-runtime/src/chat-outbox-store.cjs.map +0 -1
- package/dist/agent-runtime/src/chat-outbox-store.d.ts +0 -210
- package/dist/agent-runtime/src/chat-outbox-store.js +0 -510
- package/dist/agent-runtime/src/chat-outbox-store.js.map +0 -1
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"lane-parts.js","sources":["../../src/subagents/lane-parts.tsx"],"sourcesContent":["'use client';\n\n/**\n * The pieces a subagent lane is drawn with: its progress ring, its status\n * line, its card, a fan-out's orchestration strip and fork connectors, the\n * pager, and the chip a delegation inside a transcript shows as. Presentational\n * only: what a lane says comes from `lane-model.ts`, and where it is from the\n * group (`subagent-lane-group.tsx`). Every app that shows lanes draws them\n * with these (Athena on the web, the desktop app, any SDK host).\n */\nimport {\n isTerminalSubagentStatus,\n type SubagentDiscoverySnapshot,\n type SubagentLaneApprovalWait,\n type SubagentStatus,\n salientToolCallDetail,\n subagentApprovalNoteLabel,\n} from '@athenaintel/agent-runtime';\nimport {\n AlertTriangleIcon,\n CheckCircle2Icon,\n ChevronLeftIcon,\n ChevronRightIcon,\n GitForkIcon,\n ShieldAlertIcon,\n XCircleIcon,\n ZapIcon,\n} from 'lucide-react';\nimport { type CSSProperties, type ReactNode, type RefObject, useLayoutEffect, useState } from 'react';\nimport { cn } from '../lib/utils';\nimport {\n formatLaneElapsed,\n formatLaneTokens,\n laneFacts,\n lanePlanProgress,\n SUBAGENT_STALL_THRESHOLD_MS,\n SUBAGENT_STOPPED_OUTPUT,\n subagentCountParts,\n subagentLaneTitle,\n subagentStatusLabel,\n subagentTypeLabel,\n type SubagentTiming,\n} from './lane-model';\n\n// ─── Progress ring ───────────────────────────────────────────────────\n\nconst RING_RADIUS = 8;\nconst RING_CIRCUMFERENCE = 2 * Math.PI * RING_RADIUS;\n\n/**\n * The status dot with the subagent's plan progress drawn as a ring: the share\n * of its own `write_todos` plan it completed (`subgraph_state.todos`); an\n * indeterminate spinning arc while it has written no plan; a pulsing hollow\n * dot while queued; a check or a cross once settled (a muted one for a lane\n * its run stopped). Neutral while it works, amber while stalled, and a shield\n * while it waits for a person's approval. `sizeClassName` sizes it, so a list\n * of lanes can draw it smaller.\n */\nexport function SubagentProgressRing({\n snapshot,\n stalled = false,\n awaitingApproval = false,\n stopped = false,\n sizeClassName = 'size-4',\n}: {\n snapshot: Pick<SubagentDiscoverySnapshot, 'status' | 'todos'>;\n stalled?: boolean;\n awaitingApproval?: boolean;\n /** The run ended before the lane settled. */\n stopped?: boolean;\n sizeClassName?: string;\n}) {\n if (snapshot.status === 'complete') {\n return <CheckCircle2Icon aria-hidden=\"true\" className={cn('shrink-0 text-emerald-600', sizeClassName)} />;\n }\n if (snapshot.status === 'error') {\n return <XCircleIcon aria-hidden=\"true\" className={cn('shrink-0 text-destructive', sizeClassName)} />;\n }\n if (stopped) {\n return <XCircleIcon aria-hidden=\"true\" className={cn('shrink-0 text-muted-foreground', sizeClassName)} />;\n }\n if (awaitingApproval) {\n return (\n <ShieldAlertIcon\n role=\"img\"\n aria-label=\"Waiting for approval\"\n className={cn('shrink-0 text-amber-600', sizeClassName)}\n />\n );\n }\n const colorClass = stalled ? 'text-amber-600' : 'text-foreground/60';\n if (snapshot.status === 'queued') {\n return (\n <span className={cn('flex shrink-0 items-center justify-center', sizeClassName)}>\n <span\n className={cn(\n 'h-1/2 w-1/2 rounded-full border-2 motion-safe:animate-pulse',\n colorClass,\n )}\n />\n </span>\n );\n }\n const plan = lanePlanProgress(snapshot);\n const fraction = plan ? plan.done / plan.total : null;\n return (\n <span className={cn('flex shrink-0 items-center justify-center', sizeClassName)}>\n <svg\n viewBox=\"0 0 20 20\"\n className={cn(\n 'h-full w-full',\n fraction == null ? 'motion-safe:animate-spin' : '-rotate-90',\n )}\n role=\"img\"\n aria-label=\"Subagent progress\"\n >\n {/* The hover hint, as the ring's own: no tooltip library for one line. */}\n <title>{plan ? `${plan.done}/${plan.total} plan steps complete` : 'Working — no plan written yet'}</title>\n <circle\n cx=\"10\"\n cy=\"10\"\n r={RING_RADIUS}\n strokeWidth=\"2.5\"\n className=\"fill-none stroke-current text-border\"\n />\n <circle\n cx=\"10\"\n cy=\"10\"\n r={RING_RADIUS}\n strokeWidth=\"2.5\"\n strokeLinecap=\"round\"\n strokeDasharray={RING_CIRCUMFERENCE}\n strokeDashoffset={RING_CIRCUMFERENCE * (1 - (fraction ?? 0.25))}\n className={cn(\n 'fill-none stroke-current transition-[stroke-dashoffset] duration-500',\n colorClass,\n )}\n />\n </svg>\n </span>\n );\n}\n\n// ─── Status line ─────────────────────────────────────────────────────\n\n/**\n * A lane's muted status line, \"Done · 29s\": its status word and, when known,\n * its duration. Only a failure and a wait for approval take a tone.\n */\nexport function SubagentStatusLine({\n status,\n awaitingApproval = false,\n stopped = false,\n duration,\n className,\n}: {\n status: SubagentStatus;\n awaitingApproval?: boolean;\n /** The run ended before the lane settled. */\n stopped?: boolean;\n duration?: string;\n className?: string;\n}) {\n return (\n <span\n data-slot=\"lane-meta\"\n className={cn('flex min-w-0 items-center gap-1 tabular-nums text-muted-foreground', className)}\n >\n <span\n className={cn(\n !stopped && awaitingApproval && 'text-amber-600',\n !stopped && !awaitingApproval && status === 'error' && 'text-destructive',\n )}\n >\n {subagentStatusLabel({ status, awaitingApproval, stopped })}\n </span>\n {duration ? (\n <>\n <span aria-hidden=\"true\">·</span>\n <span>{duration}</span>\n </>\n ) : null}\n </span>\n );\n}\n\n/**\n * A fan-out's progress as one quiet bar: the finished lanes, then the failed\n * ones, over the queued and running remainder. Placed and sized through\n * `className`.\n */\nexport function SubagentSegmentedProgress({\n total,\n complete,\n failed,\n className,\n}: {\n total: number;\n complete: number;\n failed: number;\n className?: string;\n}) {\n const width = (count: number) => `${total > 0 ? Math.round((count / total) * 100) : 0}%`;\n return (\n <span aria-hidden=\"true\" data-slot=\"subagent-progress\" className={cn('flex overflow-hidden bg-muted', className)}>\n <span\n data-slot=\"subagent-progress-done\"\n className=\"block h-full bg-foreground/25 transition-all duration-500\"\n style={{ width: width(complete) }}\n />\n <span\n data-slot=\"subagent-progress-failed\"\n className=\"block h-full bg-destructive/60 transition-all duration-500\"\n style={{ width: width(failed) }}\n />\n </span>\n );\n}\n\n/**\n * What a lane waiting for approval shows in place of its live activity: the\n * call it waits on (a gated tool its subagent raised), or that it needs\n * approval to start or to continue. Answering is the approval card's.\n */\nexport function LaneAwaitingApprovalNote({\n gatedCall,\n insideLane = false,\n}: Pick<SubagentLaneApprovalWait, 'gatedCall' | 'insideLane'>) {\n return (\n <div data-testid=\"subagent-lane-awaiting-approval\" className=\"flex min-w-0 items-center gap-1.5 text-[0.7rem]\">\n <ShieldAlertIcon aria-hidden=\"true\" className=\"size-3 shrink-0 text-amber-600\" />\n <span className=\"shrink-0 text-amber-600\">{subagentApprovalNoteLabel({ gatedCall, insideLane })}</span>\n {gatedCall ? (\n <>\n <code className=\"shrink-0 font-mono font-medium text-foreground\">{gatedCall.name}</code>\n <span className=\"truncate text-muted-foreground\">{salientToolCallDetail(gatedCall)}</span>\n </>\n ) : null}\n </div>\n );\n}\n\n// ─── The lane card ───────────────────────────────────────────────────\n\n/** Whether a lane waits on a person, and on what; `runParked` when the whole run waits on one. */\nexport interface SubagentLaneWait extends SubagentLaneApprovalWait {\n /** The whole run is parked on a request a person answers: no lane runs until someone does. */\n runParked: boolean;\n}\n\nexport interface SubagentLaneCardProps {\n snapshot: SubagentDiscoverySnapshot;\n timing: SubagentTiming | undefined;\n /** The group's clock. */\n now: number;\n /** The duration the card shows (`laneDurationLabel`). */\n duration: string | undefined;\n /** Its place among the cards shown, which staggers their entrance. */\n index: number;\n /** Opens the lane's transcript. */\n onOpenTranscript: (id: string) => void;\n /** The card's element, for the fork connectors. */\n registerCardEl?: (id: string, el: HTMLElement | null) => void;\n /** A host's in-card approval controls for this queued lane (Athena on the web's lane editor). */\n approval?: ReactNode;\n wait: SubagentLaneWait;\n /** The run that delegated the lane ended before it settled: it reads Stopped, not live. */\n stopped?: boolean;\n}\n\nconst TYPE_BADGE_CLASS =\n 'inline-flex items-center gap-1 whitespace-nowrap rounded-md border border-transparent bg-muted px-1.5 py-0 text-[10px] font-medium leading-4 text-muted-foreground';\n\n/**\n * One subagent lane: its brief (which opens whole), its status and duration,\n * and while it works, the call it made last, the thought it streams, and a\n * badge once it has gone quiet; a settled lane's report or failure; its facts\n * (tool calls, plan steps, tokens) and \"View transcript\".\n */\nexport function SubagentLaneCard({\n snapshot,\n timing,\n now,\n duration,\n index,\n onOpenTranscript,\n registerCardEl,\n approval,\n wait,\n stopped = false,\n}: SubagentLaneCardProps) {\n const [descriptionExpanded, setDescriptionExpanded] = useState(false);\n const running = snapshot.status === 'running' && !stopped;\n // A queued lane offering a host's in-card approval controls already shows\n // what it waits for; every other lane waiting for approval says so, and\n // shows what it waits on in place of live activity.\n const editing = !stopped && snapshot.status === 'queued' && approval !== undefined && approval !== null;\n const awaitingApproval = !stopped && wait.awaitingApproval && !editing;\n const settled = stopped || isTerminalSubagentStatus(snapshot.status);\n const live = running && !awaitingApproval;\n // In-eval dispatches (`evalId`) report their lifecycle only, so a healthy\n // long dispatch would read as stalled; a lane waiting on a person (its\n // approval, or a run parked on one) makes no progress until someone\n // answers, and that is not a stall either.\n const stalled =\n live &&\n !wait.runParked &&\n !snapshot.evalId &&\n timing != null &&\n now - timing.lastEventAt > SUBAGENT_STALL_THRESHOLD_MS;\n const stallSeconds = timing ? Math.floor((now - timing.lastEventAt) / 1000) : 0;\n // A lane with a source pages its steps in the transcript (one left only its summary too).\n const hasTranscript =\n snapshot.messages.length > 0 || Boolean(snapshot.output) || snapshot.source !== undefined;\n const lastToolCall = snapshot.lastToolCall;\n const laneTokens = formatLaneTokens(snapshot.usage);\n const typeLabel = subagentTypeLabel(snapshot.name);\n const title = subagentLaneTitle(snapshot);\n const facts = laneFacts(snapshot);\n const entrance: CSSProperties = { animationDelay: `${index * 60}ms` };\n\n return (\n // A fieldset: the card is a group named by its lane, which assistive tech\n // announces as one (its implicit role), with no form semantics of its own.\n <fieldset\n ref={registerCardEl ? (el) => registerCardEl(snapshot.id, el) : undefined}\n aria-label={`Subagent: ${title}`}\n data-testid=\"subagent-lane-card\"\n data-status={stopped ? 'stopped' : awaitingApproval ? 'awaiting-approval' : snapshot.status}\n style={entrance}\n className=\"relative z-10 m-0 flex min-w-0 flex-col overflow-hidden rounded-lg border border-border bg-card p-0 text-card-foreground duration-300 ease-out [animation-fill-mode:both] animate-in fade-in-0 slide-in-from-bottom-2 zoom-in-95 motion-reduce:animate-none\"\n >\n <div className=\"flex items-start gap-2 px-3 pt-2.5\">\n <SubagentProgressRing\n snapshot={snapshot}\n stalled={stalled}\n awaitingApproval={awaitingApproval}\n stopped={stopped}\n sizeClassName=\"mt-0.5 size-4\"\n />\n <div className=\"flex min-w-0 flex-1 flex-col gap-0.5\">\n {snapshot.description ? (\n <button\n type=\"button\"\n data-slot=\"lane-title\"\n aria-expanded={descriptionExpanded}\n onClick={() => setDescriptionExpanded(!descriptionExpanded)}\n title={descriptionExpanded ? undefined : snapshot.description}\n className=\"rounded-sm text-left text-sm font-medium leading-snug text-foreground focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring\"\n >\n <span className={cn('break-words', !descriptionExpanded && 'line-clamp-1')}>\n {snapshot.description}\n </span>\n </button>\n ) : (\n <span data-slot=\"lane-title\" className=\"text-sm font-medium leading-snug text-foreground\">\n {title}\n </span>\n )}\n <SubagentStatusLine\n status={snapshot.status}\n awaitingApproval={awaitingApproval}\n stopped={stopped}\n // No clock while it waits on a person: it is not running.\n duration={awaitingApproval ? undefined : duration}\n className=\"text-xs\"\n />\n </div>\n {typeLabel ? (\n <span data-slot=\"lane-type\" className={cn(TYPE_BADGE_CLASS, 'mt-0.5 shrink-0')}>\n {typeLabel}\n </span>\n ) : null}\n </div>\n\n <div className=\"flex min-h-[3.25rem] flex-col gap-1.5 px-3 py-2\">\n {editing ? approval : null}\n {awaitingApproval ? (\n <LaneAwaitingApprovalNote gatedCall={wait.gatedCall} insideLane={wait.insideLane} />\n ) : null}\n {snapshot.status === 'queued' && !stopped && !editing && !awaitingApproval ? (\n <div className=\"text-xs text-muted-foreground motion-safe:animate-pulse\">\n Queued — waiting for a dispatch slot…\n </div>\n ) : null}\n\n {live && lastToolCall ? (\n <div\n key={lastToolCall.id ?? `${lastToolCall.name}-${snapshot.toolCallCount}`}\n data-slot=\"lane-activity\"\n className=\"flex min-w-0 items-center gap-1.5 duration-300 animate-in fade-in slide-in-from-bottom-1 motion-reduce:animate-none\"\n >\n <ZapIcon aria-hidden=\"true\" className=\"size-3 shrink-0 text-muted-foreground\" />\n <code className=\"shrink-0 font-mono text-[0.7rem] font-medium text-foreground/80\">\n {lastToolCall.name}\n </code>\n <span className=\"truncate text-[0.7rem] text-muted-foreground\">{salientToolCallDetail(lastToolCall)}</span>\n </div>\n ) : null}\n\n {live && snapshot.currentText ? (\n <p data-slot=\"lane-thought\" className=\"line-clamp-2 text-xs leading-relaxed text-muted-foreground\">\n {snapshot.currentText}\n <span className=\"ml-0.5 inline-block h-3 w-1 rounded-sm bg-muted-foreground/50 align-middle motion-safe:animate-pulse\" />\n </p>\n ) : null}\n {live && !snapshot.currentText && !lastToolCall ? (\n <div className=\"text-xs text-muted-foreground motion-safe:animate-pulse\">\n {snapshot.evalId ? 'Working… — output arrives when this dispatch completes' : 'Working…'}\n </div>\n ) : null}\n\n {stalled ? (\n <div\n data-slot=\"lane-stalled\"\n className=\"flex w-fit items-center gap-1 rounded-md bg-amber-500/10 px-1.5 py-0.5 text-[0.7rem] text-amber-600 duration-300 animate-in fade-in motion-reduce:animate-none\"\n >\n <AlertTriangleIcon aria-hidden=\"true\" className=\"size-3 shrink-0\" />\n No activity for {stallSeconds}s\n </div>\n ) : null}\n\n {settled ? (\n <p\n data-slot=\"lane-output\"\n className={cn(\n 'line-clamp-3 whitespace-pre-line break-words text-xs leading-relaxed',\n snapshot.status === 'error' ? 'text-destructive' : stopped ? 'text-muted-foreground' : 'text-foreground/80',\n )}\n >\n {/* An in-eval dispatch's completion carries no output (the result\n returns into the interpreter, not this lane): say so rather\n than implying the subagent produced nothing. */}\n {snapshot.output ||\n (stopped\n ? SUBAGENT_STOPPED_OUTPUT\n : snapshot.status === 'complete' && snapshot.evalId\n ? 'Done — result returned to the orchestrator.'\n : 'No output.')}\n </p>\n ) : null}\n </div>\n\n <div className=\"mt-auto flex min-h-8 items-center gap-2 border-t border-border px-3 py-1.5\">\n <span className=\"min-w-0 truncate text-[0.7rem] tabular-nums text-muted-foreground\">\n {facts.join(' · ')}\n {laneTokens ? (\n <>\n {facts.length > 0 ? ' · ' : null}\n <span data-slot=\"lane-tokens\">{laneTokens}</span>\n </>\n ) : null}\n </span>\n {hasTranscript ? (\n <button\n type=\"button\"\n data-slot=\"lane-view-transcript\"\n onClick={() => onOpenTranscript(snapshot.id)}\n className=\"ml-auto flex shrink-0 items-center gap-0.5 rounded px-1 py-0.5 text-[0.7rem] font-medium text-muted-foreground transition-colors hover:bg-muted hover:text-foreground focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring\"\n >\n View transcript\n <ChevronRightIcon aria-hidden=\"true\" className=\"size-3\" />\n </button>\n ) : null}\n </div>\n </fieldset>\n );\n}\n\n// ─── Orchestration strip (parallel groups only) ──────────────────────\n\nexport function SubagentOrchestrationStrip({\n snapshots,\n timings,\n now,\n stripRef,\n awaitingLaneIds,\n stoppedLaneIds,\n}: {\n snapshots: readonly SubagentDiscoverySnapshot[];\n timings: ReadonlyMap<string, SubagentTiming>;\n now: number;\n stripRef: RefObject<HTMLDivElement | null>;\n /** Lanes waiting for approval: counted on their own, so a paged-away one is still seen. */\n awaitingLaneIds: ReadonlySet<string>;\n /** Lanes the run stopped before they settled. */\n stoppedLaneIds?: ReadonlySet<string>;\n}) {\n let queued = 0;\n let running = 0;\n let complete = 0;\n let failed = 0;\n let stopped = 0;\n let awaiting = 0;\n let calls = 0;\n for (const lane of snapshots) {\n calls += lane.toolCallCount;\n if (stoppedLaneIds?.has(lane.id) === true && !isTerminalSubagentStatus(lane.status)) stopped += 1;\n else if (awaitingLaneIds.has(lane.id) && !isTerminalSubagentStatus(lane.status)) awaiting += 1;\n else if (lane.status === 'queued') queued += 1;\n else if (lane.status === 'running') running += 1;\n else if (lane.status === 'complete') complete += 1;\n else failed += 1;\n }\n const total = snapshots.length;\n // Wall time only for a run this page watched: a reopened group's lanes were\n // all first seen at mount, so its clock would read \"0s\".\n const watched = snapshots.some((lane) => timings.get(lane.id)?.sawActive === true);\n const firstSeen = Math.min(\n ...snapshots.map((lane) => timings.get(lane.id)?.firstSeenAt ?? Number.POSITIVE_INFINITY),\n );\n const elapsed = watched && Number.isFinite(firstSeen) ? formatLaneElapsed(now - firstSeen) : null;\n const parts = subagentCountParts({ awaiting, queued, running, complete, failed, stopped });\n\n return (\n <div\n ref={stripRef}\n data-slot=\"subagent-strip\"\n className=\"relative z-10 mx-auto flex w-fit max-w-full items-center gap-2 overflow-hidden rounded-full border border-border bg-card py-1 pr-4 pl-3 duration-300 animate-in fade-in slide-in-from-bottom-1 motion-reduce:animate-none\"\n >\n <GitForkIcon aria-hidden=\"true\" className=\"size-3.5 rotate-180 text-muted-foreground\" />\n <span className=\"whitespace-nowrap text-xs font-medium text-foreground\">{total} subagents in parallel</span>\n <span className=\"truncate whitespace-nowrap text-xs tabular-nums text-muted-foreground\">\n {parts.join(' · ')}\n {calls > 0 ? ` · ${calls} tool calls` : null}\n {elapsed ? ` · ${elapsed}` : null}\n </span>\n <SubagentSegmentedProgress\n total={total}\n complete={complete}\n failed={failed + stopped}\n className=\"absolute inset-x-0 bottom-0 h-0.5\"\n />\n </div>\n );\n}\n\n// ─── Fork connectors ─────────────────────────────────────────────────\n\ninterface ConnectorPath {\n id: string;\n d: string;\n flowing: boolean;\n}\n\n/**\n * Curves from the strip's bottom centre to the top centre of each card shown,\n * measured from the layout. A connector to a lane still working carries a\n * flowing dash (SVG's own animation, no stylesheet keyframes); one to a\n * settled lane is a faint solid line. Measured again on every resize, so a\n * reflow keeps the fork attached.\n */\nexport function SubagentForkConnectors({\n containerRef,\n stripRef,\n cardEls,\n snapshots,\n stoppedLaneIds,\n}: {\n containerRef: RefObject<HTMLDivElement | null>;\n stripRef: RefObject<HTMLDivElement | null>;\n cardEls: RefObject<Map<string, HTMLElement>>;\n snapshots: readonly SubagentDiscoverySnapshot[];\n /** Lanes the run stopped before they settled: their connectors settle too. */\n stoppedLaneIds?: ReadonlySet<string>;\n}) {\n const [paths, setPaths] = useState<ConnectorPath[]>([]);\n\n useLayoutEffect(() => {\n const container = containerRef.current;\n if (!container) return undefined;\n const measure = () => {\n const strip = stripRef.current;\n if (!strip) {\n setPaths([]);\n return;\n }\n const containerRect = container.getBoundingClientRect();\n const stripRect = strip.getBoundingClientRect();\n const originX = stripRect.left + stripRect.width / 2 - containerRect.left;\n const originY = stripRect.bottom - containerRect.top;\n const next: ConnectorPath[] = [];\n for (const snap of snapshots) {\n const el = cardEls.current?.get(snap.id);\n if (!el) continue;\n const rect = el.getBoundingClientRect();\n const cardX = rect.left + rect.width / 2 - containerRect.left;\n const cardY = rect.top - containerRect.top;\n if (cardY <= originY) continue;\n next.push({\n id: snap.id,\n d: `M ${originX} ${originY} C ${originX} ${originY + 14}, ${cardX} ${cardY - 14}, ${cardX} ${cardY}`,\n flowing: (snap.status === 'running' || snap.status === 'queued') && stoppedLaneIds?.has(snap.id) !== true,\n });\n }\n setPaths(next);\n };\n measure();\n if (typeof ResizeObserver !== 'function') return undefined;\n const observer = new ResizeObserver(measure);\n observer.observe(container);\n return () => observer.disconnect();\n // `snapshots` gets a fresh identity on every stream update, so status flips\n // re-measure too; the observer covers pure geometry (wrap/resize) changes.\n }, [containerRef, stripRef, cardEls, snapshots, stoppedLaneIds]);\n\n if (paths.length === 0) return null;\n return (\n <svg\n data-slot=\"subagent-connectors\"\n className=\"pointer-events-none absolute inset-0 z-0 h-full w-full overflow-visible\"\n aria-hidden=\"true\"\n >\n {paths.map((path) => (\n <path\n key={path.id}\n d={path.d}\n strokeWidth=\"1.5\"\n strokeLinecap=\"round\"\n strokeDasharray={path.flowing ? '5 5' : undefined}\n className={cn('fill-none stroke-current', path.flowing ? 'text-muted-foreground/60' : 'text-border')}\n >\n {path.flowing ? (\n <animate attributeName=\"stroke-dashoffset\" values=\"10;0\" dur=\"0.8s\" repeatCount=\"indefinite\" />\n ) : null}\n </path>\n ))}\n </svg>\n );\n}\n\n// ─── Pager ───────────────────────────────────────────────────────────\n\nfunction LanesPagerButton({\n label,\n disabled,\n onClick,\n children,\n}: {\n label: string;\n disabled: boolean;\n onClick: () => void;\n children: ReactNode;\n}) {\n return (\n <button\n type=\"button\"\n aria-label={label}\n disabled={disabled}\n onClick={onClick}\n className=\"flex size-6 items-center justify-center rounded-full border border-border bg-card text-muted-foreground transition-colors hover:bg-muted hover:text-foreground focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring disabled:cursor-default disabled:opacity-40 disabled:hover:bg-card disabled:hover:text-muted-foreground\"\n >\n {children}\n </button>\n );\n}\n\n/** Prev and next for a fan-out of more lanes than one page shows. */\nexport function SubagentLanesPager({\n page,\n pageCount,\n onPageChange,\n}: {\n /** The page shown, from 0. */\n page: number;\n pageCount: number;\n onPageChange: (page: number) => void;\n}) {\n return (\n <div data-slot=\"subagent-pager\" className=\"relative z-10 mt-2 flex items-center justify-center gap-2\">\n <LanesPagerButton label=\"Previous subagents\" disabled={page === 0} onClick={() => onPageChange(page - 1)}>\n <ChevronLeftIcon aria-hidden=\"true\" className=\"size-3.5\" />\n </LanesPagerButton>\n <span className=\"text-xs tabular-nums text-muted-foreground\">\n Page {page + 1} of {pageCount}\n </span>\n <LanesPagerButton\n label=\"Next subagents\"\n disabled={page === pageCount - 1}\n onClick={() => onPageChange(page + 1)}\n >\n <ChevronRightIcon aria-hidden=\"true\" className=\"size-3.5\" />\n </LanesPagerButton>\n </div>\n );\n}\n\n// ─── A delegation inside a transcript ────────────────────────────────\n\n/**\n * A delegation inside a subagent's own transcript: one static chip. It is not\n * the run's lane to show (its steps live in the subagent's own transcript) and\n * carries no approval.\n */\nexport function SubagentDelegationChip({\n name,\n description,\n}: {\n /** The delegation's `subagent_type`. */\n name: string;\n description?: string;\n}) {\n return (\n <div\n data-testid=\"subagent-delegation\"\n className=\"my-2 flex min-w-0 items-center gap-2 rounded-lg border border-border bg-muted/40 px-3 py-2\"\n >\n <GitForkIcon aria-hidden=\"true\" className=\"size-3.5 shrink-0 rotate-180 text-muted-foreground\" />\n <span className=\"shrink-0 text-xs font-medium text-foreground\">{subagentTypeLabel(name) ?? 'Subagent'}</span>\n {description ? <span className=\"min-w-0 truncate text-xs text-muted-foreground\">{description}</span> : null}\n </div>\n );\n}\n"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,215 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
|
|
3
|
+
const jsxRuntime = require("react/jsx-runtime");
|
|
4
|
+
const require$$0 = require("react");
|
|
5
|
+
const toolPartPlacement = require("../chat/super-grouping/tool-part-placement.cjs");
|
|
6
|
+
const useStatewireApprovalRequest = require("../chat/use-statewire-approval-request.cjs");
|
|
7
|
+
const laneModel = require("./lane-model.cjs");
|
|
8
|
+
const laneParts = require("./lane-parts.cjs");
|
|
9
|
+
const subagentTranscriptDrawer = require("./subagent-transcript-drawer.cjs");
|
|
10
|
+
const subagents = require("../agent-runtime/src/subagents.cjs");
|
|
11
|
+
const cnfast = require("cnfast");
|
|
12
|
+
function snapshotFingerprint(snap) {
|
|
13
|
+
var _a, _b, _c;
|
|
14
|
+
return [
|
|
15
|
+
snap.status,
|
|
16
|
+
snap.toolCallCount,
|
|
17
|
+
snap.messageCount,
|
|
18
|
+
snap.currentText.length,
|
|
19
|
+
((_a = snap.output) == null ? void 0 : _a.length) ?? 0,
|
|
20
|
+
((_b = snap.todos) == null ? void 0 : _b.length) ?? 0,
|
|
21
|
+
((_c = snap.todos) == null ? void 0 : _c.filter((todo) => todo.status === "completed").length) ?? 0
|
|
22
|
+
].join("|");
|
|
23
|
+
}
|
|
24
|
+
function useSubagentTimings({
|
|
25
|
+
snapshots,
|
|
26
|
+
isHeld,
|
|
27
|
+
isSettled,
|
|
28
|
+
delegatedAtMs
|
|
29
|
+
}) {
|
|
30
|
+
const store = require$$0.useRef(/* @__PURE__ */ new Map());
|
|
31
|
+
require$$0.useEffect(() => {
|
|
32
|
+
const now = Date.now();
|
|
33
|
+
for (const snap of snapshots) {
|
|
34
|
+
const settled = isSettled(snap);
|
|
35
|
+
const fingerprint = `${snapshotFingerprint(snap)}|${settled}`;
|
|
36
|
+
const entry = store.current.get(snap.id);
|
|
37
|
+
if (!entry) {
|
|
38
|
+
const startedEarlier = snap.status === "running" && delegatedAtMs != null && delegatedAtMs < now ? delegatedAtMs : now;
|
|
39
|
+
store.current.set(snap.id, {
|
|
40
|
+
fingerprint,
|
|
41
|
+
timing: {
|
|
42
|
+
firstSeenAt: startedEarlier,
|
|
43
|
+
lastEventAt: now,
|
|
44
|
+
completedAt: settled ? now : null,
|
|
45
|
+
sawActive: snap.status === "running" && !settled
|
|
46
|
+
}
|
|
47
|
+
});
|
|
48
|
+
continue;
|
|
49
|
+
}
|
|
50
|
+
if (isHeld(snap)) entry.timing.lastEventAt = now;
|
|
51
|
+
if (entry.fingerprint === fingerprint) continue;
|
|
52
|
+
entry.fingerprint = fingerprint;
|
|
53
|
+
entry.timing.lastEventAt = now;
|
|
54
|
+
if (snap.status === "running" && !settled) entry.timing.sawActive = true;
|
|
55
|
+
if (settled && entry.timing.completedAt == null) {
|
|
56
|
+
entry.timing.completedAt = now;
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
});
|
|
60
|
+
return new Map([...store.current].map(([id, entry]) => [id, entry.timing]));
|
|
61
|
+
}
|
|
62
|
+
function useNowTick(active) {
|
|
63
|
+
const [now, setNow] = require$$0.useState(() => Date.now());
|
|
64
|
+
require$$0.useEffect(() => {
|
|
65
|
+
if (!active) return void 0;
|
|
66
|
+
setNow(Date.now());
|
|
67
|
+
const id = setInterval(() => setNow(Date.now()), 1e3);
|
|
68
|
+
return () => clearInterval(id);
|
|
69
|
+
}, [active]);
|
|
70
|
+
return now;
|
|
71
|
+
}
|
|
72
|
+
const NO_LANE_IDS = /* @__PURE__ */ new Set();
|
|
73
|
+
function SubagentLaneGroup({
|
|
74
|
+
lanes,
|
|
75
|
+
ownerTerminal = false,
|
|
76
|
+
turnToolCallIds,
|
|
77
|
+
delegatedAtMs,
|
|
78
|
+
stoppedLaneIds = NO_LANE_IDS,
|
|
79
|
+
approvalWait: approvalWaitProp,
|
|
80
|
+
renderLaneApproval,
|
|
81
|
+
footer,
|
|
82
|
+
TranscriptDrawer = subagentTranscriptDrawer.SubagentTranscriptDrawer
|
|
83
|
+
}) {
|
|
84
|
+
const snapshots = require$$0.useMemo(() => subagents.finalizeOrphanedSubagents(lanes, ownerTerminal), [lanes, ownerTerminal]);
|
|
85
|
+
const scopedWait = useStatewireApprovalRequest.useApprovalWaitInScope();
|
|
86
|
+
const approvalWait = approvalWaitProp ?? scopedWait;
|
|
87
|
+
const unseenApproval = require$$0.useMemo(
|
|
88
|
+
() => turnToolCallIds === void 0 ? void 0 : subagents.subagentLanesHoldingUnseenApproval({
|
|
89
|
+
lanes: snapshots,
|
|
90
|
+
turnToolCallIds,
|
|
91
|
+
toolCallIds: approvalWait.toolCallIds
|
|
92
|
+
}),
|
|
93
|
+
[snapshots, turnToolCallIds, approvalWait.toolCallIds]
|
|
94
|
+
);
|
|
95
|
+
const awaitingLaneIds = require$$0.useMemo(
|
|
96
|
+
() => approvalWait.toolCallIds.size === 0 ? NO_LANE_IDS : new Set(
|
|
97
|
+
snapshots.filter(
|
|
98
|
+
(lane) => subagents.subagentAwaitingApproval({ lane, toolCallIds: approvalWait.toolCallIds }) || (unseenApproval == null ? void 0 : unseenApproval.laneIds.has(lane.id)) === true
|
|
99
|
+
).map((lane) => lane.id)
|
|
100
|
+
),
|
|
101
|
+
[snapshots, approvalWait.toolCallIds, unseenApproval]
|
|
102
|
+
);
|
|
103
|
+
const isSettled = (lane) => subagents.isTerminalSubagentStatus(lane.status) || stoppedLaneIds.has(lane.id);
|
|
104
|
+
const timings = useSubagentTimings({
|
|
105
|
+
snapshots,
|
|
106
|
+
isHeld: (snap) => approvalWait.runParked || awaitingLaneIds.has(snap.id),
|
|
107
|
+
isSettled,
|
|
108
|
+
delegatedAtMs
|
|
109
|
+
});
|
|
110
|
+
const anyActive = snapshots.some((lane) => !isSettled(lane));
|
|
111
|
+
const now = useNowTick(anyActive);
|
|
112
|
+
const isParallel = snapshots.length > 1;
|
|
113
|
+
const [page, setPage] = require$$0.useState(0);
|
|
114
|
+
const [drawerId, setDrawerId] = require$$0.useState(null);
|
|
115
|
+
const pageCount = laneModel.subagentLanePageCount(snapshots.length);
|
|
116
|
+
const currentPage = Math.min(page, pageCount - 1);
|
|
117
|
+
const visibleSnapshots = pageCount > 1 ? snapshots.slice(currentPage * laneModel.SUBAGENT_LANES_PAGE_SIZE, (currentPage + 1) * laneModel.SUBAGENT_LANES_PAGE_SIZE) : snapshots;
|
|
118
|
+
const containerRef = require$$0.useRef(null);
|
|
119
|
+
const stripRef = require$$0.useRef(null);
|
|
120
|
+
const cardEls = require$$0.useRef(/* @__PURE__ */ new Map());
|
|
121
|
+
const registerCardEl = require$$0.useCallback((id, el) => {
|
|
122
|
+
if (el) cardEls.current.set(id, el);
|
|
123
|
+
else cardEls.current.delete(id);
|
|
124
|
+
}, []);
|
|
125
|
+
const closeDrawer = require$$0.useCallback(() => setDrawerId(null), []);
|
|
126
|
+
const drawerSnapshot = drawerId ? snapshots.find((lane) => lane.id === drawerId) : void 0;
|
|
127
|
+
return /* @__PURE__ */ jsxRuntime.jsxs("div", { ref: containerRef, "data-slot": "subagent-lanes", className: "relative my-2", children: [
|
|
128
|
+
isParallel ? /* @__PURE__ */ jsxRuntime.jsx("div", { className: "mb-4", children: /* @__PURE__ */ jsxRuntime.jsx(
|
|
129
|
+
laneParts.SubagentOrchestrationStrip,
|
|
130
|
+
{
|
|
131
|
+
snapshots,
|
|
132
|
+
timings,
|
|
133
|
+
now,
|
|
134
|
+
stripRef,
|
|
135
|
+
awaitingLaneIds,
|
|
136
|
+
stoppedLaneIds
|
|
137
|
+
}
|
|
138
|
+
) }) : null,
|
|
139
|
+
isParallel ? /* @__PURE__ */ jsxRuntime.jsx(
|
|
140
|
+
laneParts.SubagentForkConnectors,
|
|
141
|
+
{
|
|
142
|
+
containerRef,
|
|
143
|
+
stripRef,
|
|
144
|
+
cardEls,
|
|
145
|
+
snapshots: visibleSnapshots,
|
|
146
|
+
stoppedLaneIds
|
|
147
|
+
}
|
|
148
|
+
) : null,
|
|
149
|
+
/* @__PURE__ */ jsxRuntime.jsx(
|
|
150
|
+
"div",
|
|
151
|
+
{
|
|
152
|
+
"data-slot": "subagent-lane-cards",
|
|
153
|
+
className: cnfast.cn(
|
|
154
|
+
"relative z-10",
|
|
155
|
+
// Lanes sized by the column, not the viewport: a chat column is
|
|
156
|
+
// narrow on any screen, and auto-fit lays out as many lanes side by
|
|
157
|
+
// side as fit at 250px each.
|
|
158
|
+
isParallel && "grid grid-cols-[repeat(auto-fit,minmax(250px,1fr))] gap-3"
|
|
159
|
+
),
|
|
160
|
+
children: visibleSnapshots.map((snapshot, index) => /* @__PURE__ */ jsxRuntime.jsx(
|
|
161
|
+
laneParts.SubagentLaneCard,
|
|
162
|
+
{
|
|
163
|
+
snapshot,
|
|
164
|
+
timing: timings.get(snapshot.id),
|
|
165
|
+
now,
|
|
166
|
+
duration: laneModel.laneDurationLabel({
|
|
167
|
+
snapshot,
|
|
168
|
+
timing: timings.get(snapshot.id),
|
|
169
|
+
now,
|
|
170
|
+
stopped: stoppedLaneIds.has(snapshot.id)
|
|
171
|
+
}),
|
|
172
|
+
stopped: stoppedLaneIds.has(snapshot.id),
|
|
173
|
+
index,
|
|
174
|
+
onOpenTranscript: setDrawerId,
|
|
175
|
+
registerCardEl,
|
|
176
|
+
wait: {
|
|
177
|
+
...subagents.subagentLaneApprovalWait({
|
|
178
|
+
lane: snapshot,
|
|
179
|
+
toolCallIds: approvalWait.toolCallIds,
|
|
180
|
+
unseenApproval,
|
|
181
|
+
actionRequests: approvalWait.actionRequests
|
|
182
|
+
}),
|
|
183
|
+
runParked: approvalWait.runParked
|
|
184
|
+
},
|
|
185
|
+
approval: renderLaneApproval == null ? void 0 : renderLaneApproval(snapshot)
|
|
186
|
+
},
|
|
187
|
+
snapshot.id
|
|
188
|
+
))
|
|
189
|
+
}
|
|
190
|
+
),
|
|
191
|
+
footer,
|
|
192
|
+
pageCount > 1 ? /* @__PURE__ */ jsxRuntime.jsx(laneParts.SubagentLanesPager, { page: currentPage, pageCount, onPageChange: setPage }) : null,
|
|
193
|
+
drawerSnapshot ? (
|
|
194
|
+
// The drawer lays its own turns out: the placement of the card it
|
|
195
|
+
// opened from ends here.
|
|
196
|
+
/* @__PURE__ */ jsxRuntime.jsx(toolPartPlacement.ToolPartPlacementProvider, { value: null, children: /* @__PURE__ */ jsxRuntime.jsx(
|
|
197
|
+
TranscriptDrawer,
|
|
198
|
+
{
|
|
199
|
+
snapshot: drawerSnapshot,
|
|
200
|
+
durationLabel: laneModel.laneDurationLabel({
|
|
201
|
+
snapshot: drawerSnapshot,
|
|
202
|
+
timing: timings.get(drawerSnapshot.id),
|
|
203
|
+
now,
|
|
204
|
+
stopped: stoppedLaneIds.has(drawerSnapshot.id)
|
|
205
|
+
}),
|
|
206
|
+
awaitingApproval: awaitingLaneIds.has(drawerSnapshot.id),
|
|
207
|
+
stopped: stoppedLaneIds.has(drawerSnapshot.id),
|
|
208
|
+
onClose: closeDrawer
|
|
209
|
+
}
|
|
210
|
+
) })
|
|
211
|
+
) : null
|
|
212
|
+
] });
|
|
213
|
+
}
|
|
214
|
+
exports.SubagentLaneGroup = SubagentLaneGroup;
|
|
215
|
+
//# sourceMappingURL=subagent-lane-group.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"subagent-lane-group.cjs","sources":["../../src/subagents/subagent-lane-group.tsx"],"sourcesContent":["'use client';\n\n/**\n * A fan-out of subagent lanes, drawn as Athena draws it in every app: sibling\n * `task` calls of one turn side by side (a wrapping grid) under the\n * orchestration strip, with fork connectors from the strip to each card; a lone\n * delegation as one card. Above four lanes the group pages, four at a time.\n * A lane's \"View transcript\" opens its transcript drawer.\n *\n * The group reads where each lane is (its own status, and whether the run's\n * approval holds it) and keeps the clocks the wire does not carry (when a lane\n * was first seen, last changed and finished). It only reads: approving is the\n * approval card's, or a host's own controls in a queued lane's card\n * (`renderLaneApproval`).\n */\nimport {\n finalizeOrphanedSubagents,\n isTerminalSubagentStatus,\n type PendingActionRequest,\n type SubagentDiscoverySnapshot,\n subagentAwaitingApproval,\n subagentLaneApprovalWait,\n subagentLanesHoldingUnseenApproval,\n} from '@athenaintel/agent-runtime';\nimport {\n type ComponentType,\n type ReactNode,\n useCallback,\n useEffect,\n useMemo,\n useRef,\n useState,\n} from 'react';\nimport { ToolPartPlacementProvider } from '../chat/super-grouping/tool-part-placement';\nimport { useApprovalWaitInScope } from '../chat/use-statewire-approval-request';\nimport { cn } from '../lib/utils';\nimport {\n laneDurationLabel,\n SUBAGENT_LANES_PAGE_SIZE,\n type SubagentTiming,\n subagentLanePageCount,\n} from './lane-model';\nimport {\n SubagentForkConnectors,\n SubagentLaneCard,\n SubagentLanesPager,\n SubagentOrchestrationStrip,\n} from './lane-parts';\nimport {\n SubagentTranscriptDrawer,\n type SubagentTranscriptDrawerProps,\n} from './subagent-transcript-drawer';\n\n// ─── Clocks ──────────────────────────────────────────────────────────\n\nfunction snapshotFingerprint(snap: SubagentDiscoverySnapshot): string {\n return [\n snap.status,\n snap.toolCallCount,\n snap.messageCount,\n snap.currentText.length,\n snap.output?.length ?? 0,\n snap.todos?.length ?? 0,\n snap.todos?.filter((todo) => todo.status === 'completed').length ?? 0,\n ].join('|');\n}\n\n/**\n * When this client saw each lane begin, change (the stall badge's clock) and\n * finish (a duration it witnessed). An every-render effect over a ref, so a\n * streaming re-render stamps its change without a state update of its own; a\n * duration shows only for a lane seen running (`sawActive`), so a session\n * reopened finished never shows a made-up \"0s\".\n *\n * A running lane first seen after its delegation (a reload) counts from when\n * the agent delegated it (`delegatedAtMs`, the server's stamp), not from this\n * mount. A lane `held` on a person (its approval, or a run parked on one)\n * keeps its last-event clock current while the hold lasts, so the time a\n * person takes to answer never counts as the lane's silence.\n */\nfunction useSubagentTimings({\n snapshots,\n isHeld,\n isSettled,\n delegatedAtMs,\n}: {\n snapshots: readonly SubagentDiscoverySnapshot[];\n isHeld: (snap: SubagentDiscoverySnapshot) => boolean;\n /** The lane runs no longer: its own status settled, or its run stopped it. */\n isSettled: (snap: SubagentDiscoverySnapshot) => boolean;\n delegatedAtMs: number | null | undefined;\n}): ReadonlyMap<string, SubagentTiming> {\n const store = useRef(new Map<string, { fingerprint: string; timing: SubagentTiming }>());\n useEffect(() => {\n const now = Date.now();\n for (const snap of snapshots) {\n const settled = isSettled(snap);\n const fingerprint = `${snapshotFingerprint(snap)}|${settled}`;\n const entry = store.current.get(snap.id);\n if (!entry) {\n const startedEarlier =\n snap.status === 'running' && delegatedAtMs != null && delegatedAtMs < now ? delegatedAtMs : now;\n store.current.set(snap.id, {\n fingerprint,\n timing: {\n firstSeenAt: startedEarlier,\n lastEventAt: now,\n completedAt: settled ? now : null,\n sawActive: snap.status === 'running' && !settled,\n },\n });\n continue;\n }\n if (isHeld(snap)) entry.timing.lastEventAt = now;\n if (entry.fingerprint === fingerprint) continue;\n entry.fingerprint = fingerprint;\n entry.timing.lastEventAt = now;\n if (snap.status === 'running' && !settled) entry.timing.sawActive = true;\n if (settled && entry.timing.completedAt == null) {\n entry.timing.completedAt = now;\n }\n }\n });\n return new Map([...store.current].map(([id, entry]) => [id, entry.timing]));\n}\n\n/** A one-second clock while anything is active, so elapsed times and the stall badge tick. */\nfunction useNowTick(active: boolean): number {\n const [now, setNow] = useState(() => Date.now());\n useEffect(() => {\n if (!active) return undefined;\n setNow(Date.now());\n const id = setInterval(() => setNow(Date.now()), 1000);\n return () => clearInterval(id);\n }, [active]);\n return now;\n}\n\n// ─── The group ───────────────────────────────────────────────────────\n\n/** What the run waits on a person for, as the group reads it (`useApprovalWaitInScope`'s shape). */\nexport interface SubagentLaneGroupApprovalWait {\n /** The gated calls still waiting on a decision, by `tool_call_id`. */\n toolCallIds: ReadonlySet<string>;\n /** The run is parked on a request a person answers: no lane's silence is a stall. */\n runParked: boolean;\n /** The approval's gated calls, which name a call a lane's card cannot show. */\n actionRequests?: readonly Pick<PendingActionRequest, 'toolCallId' | 'name' | 'args'>[];\n}\n\nexport interface SubagentLaneGroupProps {\n /** The group's lanes, in the order the agent delegated them. */\n lanes: readonly SubagentDiscoverySnapshot[];\n /**\n * The context that dispatched the lanes has ended (the `eval` call whose\n * in-eval `task()` issued them): a lane still queued or running then never\n * settles, so it reads as interrupted.\n */\n ownerTerminal?: boolean;\n /**\n * Every call of the delegating turn while that turn is still open (running\n * or waiting on a person), `openTurnToolCallIds`: a lane whose steps did not\n * ride (the conversation was opened after its run parked) still reads as\n * waiting on the approval of a call it made. Absent for a settled turn.\n */\n turnToolCallIds?: ReadonlySet<string>;\n /** When the agent delegated the group (the delegating message's server stamp, ms). */\n delegatedAtMs?: number | null;\n /**\n * Lanes whose run ended before they settled (the run was stopped, or the\n * turn is behind the conversation): they read Stopped, not live.\n */\n stoppedLaneIds?: ReadonlySet<string>;\n /** The run's approval wait; the chat's (`useApprovalWaitInScope`) by default. */\n approvalWait?: SubagentLaneGroupApprovalWait;\n /**\n * A host's own approval controls for a queued lane (Athena on the web\n * approves, edits or rejects a dispatch in its card); `undefined` for none.\n * Without them, a lane waiting on its approval says so and the approval\n * card answers.\n */\n renderLaneApproval?: (lane: SubagentDiscoverySnapshot) => ReactNode | undefined;\n /** Shown under the cards (a host's notice about the approvals they hold). */\n footer?: ReactNode;\n /** The drawer \"View transcript\" opens; the SDK's own by default. */\n TranscriptDrawer?: ComponentType<SubagentTranscriptDrawerProps>;\n}\n\nconst NO_LANE_IDS: ReadonlySet<string> = new Set();\n\n/**\n * The lanes of one delegation: a lone card, or the parallel fan-out with its\n * strip, connectors and pager. See the module comment.\n */\nexport function SubagentLaneGroup({\n lanes,\n ownerTerminal = false,\n turnToolCallIds,\n delegatedAtMs,\n stoppedLaneIds = NO_LANE_IDS,\n approvalWait: approvalWaitProp,\n renderLaneApproval,\n footer,\n TranscriptDrawer = SubagentTranscriptDrawer,\n}: SubagentLaneGroupProps) {\n const snapshots = useMemo(() => finalizeOrphanedSubagents(lanes, ownerTerminal), [lanes, ownerTerminal]);\n const scopedWait = useApprovalWaitInScope();\n const approvalWait = approvalWaitProp ?? scopedWait;\n // A lane whose transcript carries the gated call is joined by the call id; a\n // lane opened after its run parked carries no steps, so a gated call none of\n // the turn's calls or transcripts shows is held by the turn's step-less lanes.\n const unseenApproval = useMemo(\n () =>\n turnToolCallIds === undefined\n ? undefined\n : subagentLanesHoldingUnseenApproval({\n lanes: snapshots,\n turnToolCallIds,\n toolCallIds: approvalWait.toolCallIds,\n }),\n [snapshots, turnToolCallIds, approvalWait.toolCallIds],\n );\n const awaitingLaneIds = useMemo(\n () =>\n approvalWait.toolCallIds.size === 0\n ? NO_LANE_IDS\n : new Set(\n snapshots\n .filter(\n (lane) =>\n subagentAwaitingApproval({ lane, toolCallIds: approvalWait.toolCallIds }) ||\n unseenApproval?.laneIds.has(lane.id) === true,\n )\n .map((lane) => lane.id),\n ),\n [snapshots, approvalWait.toolCallIds, unseenApproval],\n );\n const isSettled = (lane: SubagentDiscoverySnapshot) =>\n isTerminalSubagentStatus(lane.status) || stoppedLaneIds.has(lane.id);\n const timings = useSubagentTimings({\n snapshots,\n isHeld: (snap) => approvalWait.runParked || awaitingLaneIds.has(snap.id),\n isSettled,\n delegatedAtMs,\n });\n const anyActive = snapshots.some((lane) => !isSettled(lane));\n const now = useNowTick(anyActive);\n const isParallel = snapshots.length > 1;\n const [page, setPage] = useState(0);\n const [drawerId, setDrawerId] = useState<string | null>(null);\n\n // The page is clamped at render, so a shrinking list never strands an empty page.\n const pageCount = subagentLanePageCount(snapshots.length);\n const currentPage = Math.min(page, pageCount - 1);\n const visibleSnapshots =\n pageCount > 1\n ? snapshots.slice(currentPage * SUBAGENT_LANES_PAGE_SIZE, (currentPage + 1) * SUBAGENT_LANES_PAGE_SIZE)\n : snapshots;\n\n const containerRef = useRef<HTMLDivElement | null>(null);\n const stripRef = useRef<HTMLDivElement | null>(null);\n const cardEls = useRef(new Map<string, HTMLElement>());\n // Stable: an inline callback ref would detach and reattach every card's\n // element on each streamed update (React calls the old ref with null first).\n const registerCardEl = useCallback((id: string, el: HTMLElement | null) => {\n if (el) cardEls.current.set(id, el);\n else cardEls.current.delete(id);\n }, []);\n const closeDrawer = useCallback(() => setDrawerId(null), []);\n\n const drawerSnapshot = drawerId ? snapshots.find((lane) => lane.id === drawerId) : undefined;\n\n return (\n <div ref={containerRef} data-slot=\"subagent-lanes\" className=\"relative my-2\">\n {isParallel ? (\n <div className=\"mb-4\">\n <SubagentOrchestrationStrip\n snapshots={snapshots}\n timings={timings}\n now={now}\n stripRef={stripRef}\n awaitingLaneIds={awaitingLaneIds}\n stoppedLaneIds={stoppedLaneIds}\n />\n </div>\n ) : null}\n {isParallel ? (\n <SubagentForkConnectors\n containerRef={containerRef}\n stripRef={stripRef}\n cardEls={cardEls}\n snapshots={visibleSnapshots}\n stoppedLaneIds={stoppedLaneIds}\n />\n ) : null}\n <div\n data-slot=\"subagent-lane-cards\"\n className={cn(\n 'relative z-10',\n // Lanes sized by the column, not the viewport: a chat column is\n // narrow on any screen, and auto-fit lays out as many lanes side by\n // side as fit at 250px each.\n isParallel && 'grid grid-cols-[repeat(auto-fit,minmax(250px,1fr))] gap-3',\n )}\n >\n {visibleSnapshots.map((snapshot, index) => (\n <SubagentLaneCard\n key={snapshot.id}\n snapshot={snapshot}\n timing={timings.get(snapshot.id)}\n now={now}\n duration={laneDurationLabel({\n snapshot,\n timing: timings.get(snapshot.id),\n now,\n stopped: stoppedLaneIds.has(snapshot.id),\n })}\n stopped={stoppedLaneIds.has(snapshot.id)}\n index={index}\n onOpenTranscript={setDrawerId}\n registerCardEl={registerCardEl}\n wait={{\n ...subagentLaneApprovalWait({\n lane: snapshot,\n toolCallIds: approvalWait.toolCallIds,\n unseenApproval,\n actionRequests: approvalWait.actionRequests,\n }),\n runParked: approvalWait.runParked,\n }}\n approval={renderLaneApproval?.(snapshot)}\n />\n ))}\n </div>\n {footer}\n {pageCount > 1 ? <SubagentLanesPager page={currentPage} pageCount={pageCount} onPageChange={setPage} /> : null}\n {drawerSnapshot ? (\n // The drawer lays its own turns out: the placement of the card it\n // opened from ends here.\n <ToolPartPlacementProvider value={null}>\n <TranscriptDrawer\n snapshot={drawerSnapshot}\n durationLabel={laneDurationLabel({\n snapshot: drawerSnapshot,\n timing: timings.get(drawerSnapshot.id),\n now,\n stopped: stoppedLaneIds.has(drawerSnapshot.id),\n })}\n awaitingApproval={awaitingLaneIds.has(drawerSnapshot.id)}\n stopped={stoppedLaneIds.has(drawerSnapshot.id)}\n onClose={closeDrawer}\n />\n </ToolPartPlacementProvider>\n ) : null}\n </div>\n );\n}\n"],"names":["useRef","useEffect","useState","SubagentTranscriptDrawer","useMemo","finalizeOrphanedSubagents","useApprovalWaitInScope","subagentLanesHoldingUnseenApproval","subagentAwaitingApproval","isTerminalSubagentStatus","subagentLanePageCount","SUBAGENT_LANES_PAGE_SIZE","useCallback","jsx","SubagentOrchestrationStrip","SubagentForkConnectors","cn","SubagentLaneCard","laneDurationLabel","subagentLaneApprovalWait","SubagentLanesPager","ToolPartPlacementProvider"],"mappings":"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"}
|
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* A fan-out of subagent lanes, drawn as Athena draws it in every app: sibling
|
|
3
|
+
* `task` calls of one turn side by side (a wrapping grid) under the
|
|
4
|
+
* orchestration strip, with fork connectors from the strip to each card; a lone
|
|
5
|
+
* delegation as one card. Above four lanes the group pages, four at a time.
|
|
6
|
+
* A lane's "View transcript" opens its transcript drawer.
|
|
7
|
+
*
|
|
8
|
+
* The group reads where each lane is (its own status, and whether the run's
|
|
9
|
+
* approval holds it) and keeps the clocks the wire does not carry (when a lane
|
|
10
|
+
* was first seen, last changed and finished). It only reads: approving is the
|
|
11
|
+
* approval card's, or a host's own controls in a queued lane's card
|
|
12
|
+
* (`renderLaneApproval`).
|
|
13
|
+
*/
|
|
14
|
+
import { type PendingActionRequest, type SubagentDiscoverySnapshot } from '../agent-runtime/src/index';
|
|
15
|
+
import { type ComponentType, type ReactNode } from 'react';
|
|
16
|
+
import { type SubagentTranscriptDrawerProps } from './subagent-transcript-drawer';
|
|
17
|
+
/** What the run waits on a person for, as the group reads it (`useApprovalWaitInScope`'s shape). */
|
|
18
|
+
export interface SubagentLaneGroupApprovalWait {
|
|
19
|
+
/** The gated calls still waiting on a decision, by `tool_call_id`. */
|
|
20
|
+
toolCallIds: ReadonlySet<string>;
|
|
21
|
+
/** The run is parked on a request a person answers: no lane's silence is a stall. */
|
|
22
|
+
runParked: boolean;
|
|
23
|
+
/** The approval's gated calls, which name a call a lane's card cannot show. */
|
|
24
|
+
actionRequests?: readonly Pick<PendingActionRequest, 'toolCallId' | 'name' | 'args'>[];
|
|
25
|
+
}
|
|
26
|
+
export interface SubagentLaneGroupProps {
|
|
27
|
+
/** The group's lanes, in the order the agent delegated them. */
|
|
28
|
+
lanes: readonly SubagentDiscoverySnapshot[];
|
|
29
|
+
/**
|
|
30
|
+
* The context that dispatched the lanes has ended (the `eval` call whose
|
|
31
|
+
* in-eval `task()` issued them): a lane still queued or running then never
|
|
32
|
+
* settles, so it reads as interrupted.
|
|
33
|
+
*/
|
|
34
|
+
ownerTerminal?: boolean;
|
|
35
|
+
/**
|
|
36
|
+
* Every call of the delegating turn while that turn is still open (running
|
|
37
|
+
* or waiting on a person), `openTurnToolCallIds`: a lane whose steps did not
|
|
38
|
+
* ride (the conversation was opened after its run parked) still reads as
|
|
39
|
+
* waiting on the approval of a call it made. Absent for a settled turn.
|
|
40
|
+
*/
|
|
41
|
+
turnToolCallIds?: ReadonlySet<string>;
|
|
42
|
+
/** When the agent delegated the group (the delegating message's server stamp, ms). */
|
|
43
|
+
delegatedAtMs?: number | null;
|
|
44
|
+
/**
|
|
45
|
+
* Lanes whose run ended before they settled (the run was stopped, or the
|
|
46
|
+
* turn is behind the conversation): they read Stopped, not live.
|
|
47
|
+
*/
|
|
48
|
+
stoppedLaneIds?: ReadonlySet<string>;
|
|
49
|
+
/** The run's approval wait; the chat's (`useApprovalWaitInScope`) by default. */
|
|
50
|
+
approvalWait?: SubagentLaneGroupApprovalWait;
|
|
51
|
+
/**
|
|
52
|
+
* A host's own approval controls for a queued lane (Athena on the web
|
|
53
|
+
* approves, edits or rejects a dispatch in its card); `undefined` for none.
|
|
54
|
+
* Without them, a lane waiting on its approval says so and the approval
|
|
55
|
+
* card answers.
|
|
56
|
+
*/
|
|
57
|
+
renderLaneApproval?: (lane: SubagentDiscoverySnapshot) => ReactNode | undefined;
|
|
58
|
+
/** Shown under the cards (a host's notice about the approvals they hold). */
|
|
59
|
+
footer?: ReactNode;
|
|
60
|
+
/** The drawer "View transcript" opens; the SDK's own by default. */
|
|
61
|
+
TranscriptDrawer?: ComponentType<SubagentTranscriptDrawerProps>;
|
|
62
|
+
}
|
|
63
|
+
/**
|
|
64
|
+
* The lanes of one delegation: a lone card, or the parallel fan-out with its
|
|
65
|
+
* strip, connectors and pager. See the module comment.
|
|
66
|
+
*/
|
|
67
|
+
export declare function SubagentLaneGroup({ lanes, ownerTerminal, turnToolCallIds, delegatedAtMs, stoppedLaneIds, approvalWait: approvalWaitProp, renderLaneApproval, footer, TranscriptDrawer, }: SubagentLaneGroupProps): import("react").JSX.Element;
|
|
@@ -0,0 +1,215 @@
|
|
|
1
|
+
import { jsxs, jsx } from "react/jsx-runtime";
|
|
2
|
+
import { useMemo, useState, useRef, useCallback, useEffect } from "react";
|
|
3
|
+
import { ToolPartPlacementProvider } from "../chat/super-grouping/tool-part-placement.js";
|
|
4
|
+
import { useApprovalWaitInScope } from "../chat/use-statewire-approval-request.js";
|
|
5
|
+
import { subagentLanePageCount, SUBAGENT_LANES_PAGE_SIZE, laneDurationLabel } from "./lane-model.js";
|
|
6
|
+
import { SubagentOrchestrationStrip, SubagentForkConnectors, SubagentLaneCard, SubagentLanesPager } from "./lane-parts.js";
|
|
7
|
+
import { SubagentTranscriptDrawer } from "./subagent-transcript-drawer.js";
|
|
8
|
+
import { finalizeOrphanedSubagents, subagentLanesHoldingUnseenApproval, subagentAwaitingApproval, subagentLaneApprovalWait, isTerminalSubagentStatus } from "../agent-runtime/src/subagents.js";
|
|
9
|
+
import { cn } from "cnfast";
|
|
10
|
+
function snapshotFingerprint(snap) {
|
|
11
|
+
var _a, _b, _c;
|
|
12
|
+
return [
|
|
13
|
+
snap.status,
|
|
14
|
+
snap.toolCallCount,
|
|
15
|
+
snap.messageCount,
|
|
16
|
+
snap.currentText.length,
|
|
17
|
+
((_a = snap.output) == null ? void 0 : _a.length) ?? 0,
|
|
18
|
+
((_b = snap.todos) == null ? void 0 : _b.length) ?? 0,
|
|
19
|
+
((_c = snap.todos) == null ? void 0 : _c.filter((todo) => todo.status === "completed").length) ?? 0
|
|
20
|
+
].join("|");
|
|
21
|
+
}
|
|
22
|
+
function useSubagentTimings({
|
|
23
|
+
snapshots,
|
|
24
|
+
isHeld,
|
|
25
|
+
isSettled,
|
|
26
|
+
delegatedAtMs
|
|
27
|
+
}) {
|
|
28
|
+
const store = useRef(/* @__PURE__ */ new Map());
|
|
29
|
+
useEffect(() => {
|
|
30
|
+
const now = Date.now();
|
|
31
|
+
for (const snap of snapshots) {
|
|
32
|
+
const settled = isSettled(snap);
|
|
33
|
+
const fingerprint = `${snapshotFingerprint(snap)}|${settled}`;
|
|
34
|
+
const entry = store.current.get(snap.id);
|
|
35
|
+
if (!entry) {
|
|
36
|
+
const startedEarlier = snap.status === "running" && delegatedAtMs != null && delegatedAtMs < now ? delegatedAtMs : now;
|
|
37
|
+
store.current.set(snap.id, {
|
|
38
|
+
fingerprint,
|
|
39
|
+
timing: {
|
|
40
|
+
firstSeenAt: startedEarlier,
|
|
41
|
+
lastEventAt: now,
|
|
42
|
+
completedAt: settled ? now : null,
|
|
43
|
+
sawActive: snap.status === "running" && !settled
|
|
44
|
+
}
|
|
45
|
+
});
|
|
46
|
+
continue;
|
|
47
|
+
}
|
|
48
|
+
if (isHeld(snap)) entry.timing.lastEventAt = now;
|
|
49
|
+
if (entry.fingerprint === fingerprint) continue;
|
|
50
|
+
entry.fingerprint = fingerprint;
|
|
51
|
+
entry.timing.lastEventAt = now;
|
|
52
|
+
if (snap.status === "running" && !settled) entry.timing.sawActive = true;
|
|
53
|
+
if (settled && entry.timing.completedAt == null) {
|
|
54
|
+
entry.timing.completedAt = now;
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
});
|
|
58
|
+
return new Map([...store.current].map(([id, entry]) => [id, entry.timing]));
|
|
59
|
+
}
|
|
60
|
+
function useNowTick(active) {
|
|
61
|
+
const [now, setNow] = useState(() => Date.now());
|
|
62
|
+
useEffect(() => {
|
|
63
|
+
if (!active) return void 0;
|
|
64
|
+
setNow(Date.now());
|
|
65
|
+
const id = setInterval(() => setNow(Date.now()), 1e3);
|
|
66
|
+
return () => clearInterval(id);
|
|
67
|
+
}, [active]);
|
|
68
|
+
return now;
|
|
69
|
+
}
|
|
70
|
+
const NO_LANE_IDS = /* @__PURE__ */ new Set();
|
|
71
|
+
function SubagentLaneGroup({
|
|
72
|
+
lanes,
|
|
73
|
+
ownerTerminal = false,
|
|
74
|
+
turnToolCallIds,
|
|
75
|
+
delegatedAtMs,
|
|
76
|
+
stoppedLaneIds = NO_LANE_IDS,
|
|
77
|
+
approvalWait: approvalWaitProp,
|
|
78
|
+
renderLaneApproval,
|
|
79
|
+
footer,
|
|
80
|
+
TranscriptDrawer = SubagentTranscriptDrawer
|
|
81
|
+
}) {
|
|
82
|
+
const snapshots = useMemo(() => finalizeOrphanedSubagents(lanes, ownerTerminal), [lanes, ownerTerminal]);
|
|
83
|
+
const scopedWait = useApprovalWaitInScope();
|
|
84
|
+
const approvalWait = approvalWaitProp ?? scopedWait;
|
|
85
|
+
const unseenApproval = useMemo(
|
|
86
|
+
() => turnToolCallIds === void 0 ? void 0 : subagentLanesHoldingUnseenApproval({
|
|
87
|
+
lanes: snapshots,
|
|
88
|
+
turnToolCallIds,
|
|
89
|
+
toolCallIds: approvalWait.toolCallIds
|
|
90
|
+
}),
|
|
91
|
+
[snapshots, turnToolCallIds, approvalWait.toolCallIds]
|
|
92
|
+
);
|
|
93
|
+
const awaitingLaneIds = useMemo(
|
|
94
|
+
() => approvalWait.toolCallIds.size === 0 ? NO_LANE_IDS : new Set(
|
|
95
|
+
snapshots.filter(
|
|
96
|
+
(lane) => subagentAwaitingApproval({ lane, toolCallIds: approvalWait.toolCallIds }) || (unseenApproval == null ? void 0 : unseenApproval.laneIds.has(lane.id)) === true
|
|
97
|
+
).map((lane) => lane.id)
|
|
98
|
+
),
|
|
99
|
+
[snapshots, approvalWait.toolCallIds, unseenApproval]
|
|
100
|
+
);
|
|
101
|
+
const isSettled = (lane) => isTerminalSubagentStatus(lane.status) || stoppedLaneIds.has(lane.id);
|
|
102
|
+
const timings = useSubagentTimings({
|
|
103
|
+
snapshots,
|
|
104
|
+
isHeld: (snap) => approvalWait.runParked || awaitingLaneIds.has(snap.id),
|
|
105
|
+
isSettled,
|
|
106
|
+
delegatedAtMs
|
|
107
|
+
});
|
|
108
|
+
const anyActive = snapshots.some((lane) => !isSettled(lane));
|
|
109
|
+
const now = useNowTick(anyActive);
|
|
110
|
+
const isParallel = snapshots.length > 1;
|
|
111
|
+
const [page, setPage] = useState(0);
|
|
112
|
+
const [drawerId, setDrawerId] = useState(null);
|
|
113
|
+
const pageCount = subagentLanePageCount(snapshots.length);
|
|
114
|
+
const currentPage = Math.min(page, pageCount - 1);
|
|
115
|
+
const visibleSnapshots = pageCount > 1 ? snapshots.slice(currentPage * SUBAGENT_LANES_PAGE_SIZE, (currentPage + 1) * SUBAGENT_LANES_PAGE_SIZE) : snapshots;
|
|
116
|
+
const containerRef = useRef(null);
|
|
117
|
+
const stripRef = useRef(null);
|
|
118
|
+
const cardEls = useRef(/* @__PURE__ */ new Map());
|
|
119
|
+
const registerCardEl = useCallback((id, el) => {
|
|
120
|
+
if (el) cardEls.current.set(id, el);
|
|
121
|
+
else cardEls.current.delete(id);
|
|
122
|
+
}, []);
|
|
123
|
+
const closeDrawer = useCallback(() => setDrawerId(null), []);
|
|
124
|
+
const drawerSnapshot = drawerId ? snapshots.find((lane) => lane.id === drawerId) : void 0;
|
|
125
|
+
return /* @__PURE__ */ jsxs("div", { ref: containerRef, "data-slot": "subagent-lanes", className: "relative my-2", children: [
|
|
126
|
+
isParallel ? /* @__PURE__ */ jsx("div", { className: "mb-4", children: /* @__PURE__ */ jsx(
|
|
127
|
+
SubagentOrchestrationStrip,
|
|
128
|
+
{
|
|
129
|
+
snapshots,
|
|
130
|
+
timings,
|
|
131
|
+
now,
|
|
132
|
+
stripRef,
|
|
133
|
+
awaitingLaneIds,
|
|
134
|
+
stoppedLaneIds
|
|
135
|
+
}
|
|
136
|
+
) }) : null,
|
|
137
|
+
isParallel ? /* @__PURE__ */ jsx(
|
|
138
|
+
SubagentForkConnectors,
|
|
139
|
+
{
|
|
140
|
+
containerRef,
|
|
141
|
+
stripRef,
|
|
142
|
+
cardEls,
|
|
143
|
+
snapshots: visibleSnapshots,
|
|
144
|
+
stoppedLaneIds
|
|
145
|
+
}
|
|
146
|
+
) : null,
|
|
147
|
+
/* @__PURE__ */ jsx(
|
|
148
|
+
"div",
|
|
149
|
+
{
|
|
150
|
+
"data-slot": "subagent-lane-cards",
|
|
151
|
+
className: cn(
|
|
152
|
+
"relative z-10",
|
|
153
|
+
// Lanes sized by the column, not the viewport: a chat column is
|
|
154
|
+
// narrow on any screen, and auto-fit lays out as many lanes side by
|
|
155
|
+
// side as fit at 250px each.
|
|
156
|
+
isParallel && "grid grid-cols-[repeat(auto-fit,minmax(250px,1fr))] gap-3"
|
|
157
|
+
),
|
|
158
|
+
children: visibleSnapshots.map((snapshot, index) => /* @__PURE__ */ jsx(
|
|
159
|
+
SubagentLaneCard,
|
|
160
|
+
{
|
|
161
|
+
snapshot,
|
|
162
|
+
timing: timings.get(snapshot.id),
|
|
163
|
+
now,
|
|
164
|
+
duration: laneDurationLabel({
|
|
165
|
+
snapshot,
|
|
166
|
+
timing: timings.get(snapshot.id),
|
|
167
|
+
now,
|
|
168
|
+
stopped: stoppedLaneIds.has(snapshot.id)
|
|
169
|
+
}),
|
|
170
|
+
stopped: stoppedLaneIds.has(snapshot.id),
|
|
171
|
+
index,
|
|
172
|
+
onOpenTranscript: setDrawerId,
|
|
173
|
+
registerCardEl,
|
|
174
|
+
wait: {
|
|
175
|
+
...subagentLaneApprovalWait({
|
|
176
|
+
lane: snapshot,
|
|
177
|
+
toolCallIds: approvalWait.toolCallIds,
|
|
178
|
+
unseenApproval,
|
|
179
|
+
actionRequests: approvalWait.actionRequests
|
|
180
|
+
}),
|
|
181
|
+
runParked: approvalWait.runParked
|
|
182
|
+
},
|
|
183
|
+
approval: renderLaneApproval == null ? void 0 : renderLaneApproval(snapshot)
|
|
184
|
+
},
|
|
185
|
+
snapshot.id
|
|
186
|
+
))
|
|
187
|
+
}
|
|
188
|
+
),
|
|
189
|
+
footer,
|
|
190
|
+
pageCount > 1 ? /* @__PURE__ */ jsx(SubagentLanesPager, { page: currentPage, pageCount, onPageChange: setPage }) : null,
|
|
191
|
+
drawerSnapshot ? (
|
|
192
|
+
// The drawer lays its own turns out: the placement of the card it
|
|
193
|
+
// opened from ends here.
|
|
194
|
+
/* @__PURE__ */ jsx(ToolPartPlacementProvider, { value: null, children: /* @__PURE__ */ jsx(
|
|
195
|
+
TranscriptDrawer,
|
|
196
|
+
{
|
|
197
|
+
snapshot: drawerSnapshot,
|
|
198
|
+
durationLabel: laneDurationLabel({
|
|
199
|
+
snapshot: drawerSnapshot,
|
|
200
|
+
timing: timings.get(drawerSnapshot.id),
|
|
201
|
+
now,
|
|
202
|
+
stopped: stoppedLaneIds.has(drawerSnapshot.id)
|
|
203
|
+
}),
|
|
204
|
+
awaitingApproval: awaitingLaneIds.has(drawerSnapshot.id),
|
|
205
|
+
stopped: stoppedLaneIds.has(drawerSnapshot.id),
|
|
206
|
+
onClose: closeDrawer
|
|
207
|
+
}
|
|
208
|
+
) })
|
|
209
|
+
) : null
|
|
210
|
+
] });
|
|
211
|
+
}
|
|
212
|
+
export {
|
|
213
|
+
SubagentLaneGroup
|
|
214
|
+
};
|
|
215
|
+
//# sourceMappingURL=subagent-lane-group.js.map
|