@athenaintel/react 0.20.0 → 0.21.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 +74 -0
- package/dist/assets/use-asset-embed.cjs +8 -0
- package/dist/assets/use-asset-embed.cjs.map +1 -1
- package/dist/assets/use-asset-embed.js +8 -0
- package/dist/assets/use-asset-embed.js.map +1 -1
- package/dist/chat/StatewireApprovalCard.cjs +22 -4
- package/dist/chat/StatewireApprovalCard.cjs.map +1 -1
- package/dist/chat/StatewireApprovalCard.d.ts +14 -0
- package/dist/chat/StatewireApprovalCard.js +23 -5
- package/dist/chat/StatewireApprovalCard.js.map +1 -1
- package/dist/chat/StatewireClientToolBridge.cjs +2 -1
- package/dist/chat/StatewireClientToolBridge.cjs.map +1 -1
- package/dist/chat/StatewireClientToolBridge.js +2 -1
- package/dist/chat/StatewireClientToolBridge.js.map +1 -1
- package/dist/chat/StatewireQueuedMessages.cjs +2 -1
- package/dist/chat/StatewireQueuedMessages.cjs.map +1 -1
- package/dist/chat/StatewireQueuedMessages.js +2 -1
- package/dist/chat/StatewireQueuedMessages.js.map +1 -1
- package/dist/chat/athena-citation-links.cjs +17 -1
- package/dist/chat/athena-citation-links.cjs.map +1 -1
- package/dist/chat/athena-citation-links.js +17 -1
- package/dist/chat/athena-citation-links.js.map +1 -1
- package/dist/chat/statewire-client-tools.cjs +2 -1
- package/dist/chat/statewire-client-tools.cjs.map +1 -1
- package/dist/chat/statewire-client-tools.js +2 -1
- package/dist/chat/statewire-client-tools.js.map +1 -1
- package/dist/chat/super-grouping/SuperGroupingCard.cjs +69 -187
- package/dist/chat/super-grouping/SuperGroupingCard.cjs.map +1 -1
- package/dist/chat/super-grouping/SuperGroupingCard.d.ts +10 -6
- package/dist/chat/super-grouping/SuperGroupingCard.js +73 -191
- package/dist/chat/super-grouping/SuperGroupingCard.js.map +1 -1
- package/dist/chat/super-grouping/ToolTimeline.cjs +131 -0
- package/dist/chat/super-grouping/ToolTimeline.cjs.map +1 -0
- package/dist/chat/super-grouping/ToolTimeline.d.ts +16 -0
- package/dist/chat/super-grouping/ToolTimeline.js +131 -0
- package/dist/chat/super-grouping/ToolTimeline.js.map +1 -0
- package/dist/chat/super-grouping/activity-timeline.cjs +14 -8
- package/dist/chat/super-grouping/activity-timeline.cjs.map +1 -1
- package/dist/chat/super-grouping/activity-timeline.d.ts +3 -0
- package/dist/chat/super-grouping/activity-timeline.js +14 -8
- package/dist/chat/super-grouping/activity-timeline.js.map +1 -1
- package/dist/chat/super-grouping/timeline-step.cjs +65 -0
- package/dist/chat/super-grouping/timeline-step.cjs.map +1 -0
- package/dist/chat/super-grouping/timeline-step.d.ts +17 -0
- package/dist/chat/super-grouping/timeline-step.js +65 -0
- package/dist/chat/super-grouping/timeline-step.js.map +1 -0
- package/dist/chat/tiptap-text.cjs +8 -8
- package/dist/chat/tiptap-text.cjs.map +1 -1
- package/dist/chat/use-athena-run-live.cjs +2 -1
- package/dist/chat/use-athena-run-live.cjs.map +1 -1
- package/dist/chat/use-athena-run-live.js +2 -1
- package/dist/chat/use-athena-run-live.js.map +1 -1
- package/dist/chat/use-statewire-approval-request.cjs +7 -2
- package/dist/chat/use-statewire-approval-request.cjs.map +1 -1
- package/dist/chat/use-statewire-approval-request.d.ts +12 -2
- package/dist/chat/use-statewire-approval-request.js +8 -3
- package/dist/chat/use-statewire-approval-request.js.map +1 -1
- package/dist/chat-ui/composer/tiptap-composer.cjs +24 -65
- package/dist/chat-ui/composer/tiptap-composer.cjs.map +1 -1
- package/dist/chat-ui/composer/tiptap-composer.js +24 -65
- package/dist/chat-ui/composer/tiptap-composer.js.map +1 -1
- package/dist/chat-ui/index.cjs +2 -1
- package/dist/chat-ui/index.cjs.map +1 -1
- package/dist/chat-ui/index.js +2 -1
- package/dist/chat-ui/index.js.map +1 -1
- package/dist/chat-ui/mentions/mention-chip.cjs +49 -4
- package/dist/chat-ui/mentions/mention-chip.cjs.map +1 -1
- package/dist/chat-ui/mentions/mention-chip.d.ts +11 -0
- package/dist/chat-ui/mentions/mention-chip.js +50 -5
- package/dist/chat-ui/mentions/mention-chip.js.map +1 -1
- package/dist/chat-ui/mentions/mention-extension.cjs +18 -6
- package/dist/chat-ui/mentions/mention-extension.cjs.map +1 -1
- package/dist/chat-ui/mentions/mention-extension.d.ts +2 -0
- package/dist/chat-ui/mentions/mention-extension.js +18 -6
- package/dist/chat-ui/mentions/mention-extension.js.map +1 -1
- package/dist/chat-ui/mentions/suggestions/components/mention-suggestion-list.cjs +1 -1
- package/dist/chat-ui/mentions/suggestions/components/mention-suggestion-list.cjs.map +1 -1
- package/dist/chat-ui/mentions/suggestions/components/mention-suggestion-list.js +1 -1
- package/dist/chat-ui/mentions/suggestions/components/mention-suggestion-list.js.map +1 -1
- package/dist/chat-ui/mentions/suggestions/components/menu-item.cjs +9 -6
- package/dist/chat-ui/mentions/suggestions/components/menu-item.cjs.map +1 -1
- package/dist/chat-ui/mentions/suggestions/components/menu-item.d.ts +2 -2
- package/dist/chat-ui/mentions/suggestions/components/menu-item.js +10 -7
- package/dist/chat-ui/mentions/suggestions/components/menu-item.js.map +1 -1
- package/dist/chat-ui/mentions/suggestions/components/menu-list.cjs +2 -2
- package/dist/chat-ui/mentions/suggestions/components/menu-list.cjs.map +1 -1
- package/dist/chat-ui/mentions/suggestions/components/menu-list.d.ts +2 -2
- package/dist/chat-ui/mentions/suggestions/components/menu-list.js +2 -2
- package/dist/chat-ui/mentions/suggestions/components/menu-list.js.map +1 -1
- package/dist/chat-ui/mentions/suggestions/data/api-client.cjs +2 -1
- package/dist/chat-ui/mentions/suggestions/data/api-client.cjs.map +1 -1
- package/dist/chat-ui/mentions/suggestions/data/api-client.d.ts +3 -2
- package/dist/chat-ui/mentions/suggestions/data/api-client.js +2 -1
- package/dist/chat-ui/mentions/suggestions/data/api-client.js.map +1 -1
- package/dist/chat-ui/messages/message-components.cjs +6 -29
- package/dist/chat-ui/messages/message-components.cjs.map +1 -1
- package/dist/chat-ui/messages/message-components.d.ts +1 -13
- package/dist/chat-ui/messages/message-components.js +8 -31
- package/dist/chat-ui/messages/message-components.js.map +1 -1
- package/dist/chat-ui/messages/runtime-message.cjs +3 -2
- package/dist/chat-ui/messages/runtime-message.cjs.map +1 -1
- package/dist/chat-ui/messages/runtime-message.js +3 -2
- package/dist/chat-ui/messages/runtime-message.js.map +1 -1
- package/dist/chat-ui/messages/statewire-continue-run.cjs +23 -8
- package/dist/chat-ui/messages/statewire-continue-run.cjs.map +1 -1
- package/dist/chat-ui/messages/statewire-continue-run.d.ts +14 -4
- package/dist/chat-ui/messages/statewire-continue-run.js +23 -8
- package/dist/chat-ui/messages/statewire-continue-run.js.map +1 -1
- package/dist/chat-ui/messages/user-edit-composer.cjs +2 -1
- package/dist/chat-ui/messages/user-edit-composer.cjs.map +1 -1
- package/dist/chat-ui/messages/user-edit-composer.js +2 -1
- package/dist/chat-ui/messages/user-edit-composer.js.map +1 -1
- package/dist/chat-ui/rich-text/chat-message-body.cjs +76 -0
- package/dist/chat-ui/rich-text/chat-message-body.cjs.map +1 -0
- package/dist/chat-ui/rich-text/chat-message-body.d.ts +5 -0
- package/dist/chat-ui/rich-text/chat-message-body.js +76 -0
- package/dist/chat-ui/rich-text/chat-message-body.js.map +1 -0
- package/dist/chat-ui/rich-text/chat-node-views.cjs +51 -0
- package/dist/chat-ui/rich-text/chat-node-views.cjs.map +1 -0
- package/dist/chat-ui/rich-text/chat-node-views.d.ts +13 -0
- package/dist/chat-ui/rich-text/chat-node-views.js +51 -0
- package/dist/chat-ui/rich-text/chat-node-views.js.map +1 -0
- package/dist/chat-ui/rich-text/chat-text-schema.cjs +70 -0
- package/dist/chat-ui/rich-text/chat-text-schema.cjs.map +1 -0
- package/dist/chat-ui/rich-text/chat-text-schema.d.ts +7 -0
- package/dist/chat-ui/rich-text/chat-text-schema.js +70 -0
- package/dist/chat-ui/rich-text/chat-text-schema.js.map +1 -0
- package/dist/chat-ui/rich-text/dom-output-spec.cjs +83 -0
- package/dist/chat-ui/rich-text/dom-output-spec.cjs.map +1 -0
- package/dist/chat-ui/rich-text/dom-output-spec.d.ts +11 -0
- package/dist/chat-ui/rich-text/dom-output-spec.js +83 -0
- package/dist/chat-ui/rich-text/dom-output-spec.js.map +1 -0
- package/dist/chat-ui/statewire.cjs +2 -1
- package/dist/chat-ui/statewire.cjs.map +1 -1
- package/dist/chat-ui/statewire.js +2 -1
- package/dist/chat-ui/statewire.js.map +1 -1
- package/dist/chat-ui/thread/statewire-history-edge.cjs +2 -1
- package/dist/chat-ui/thread/statewire-history-edge.cjs.map +1 -1
- package/dist/chat-ui/thread/statewire-history-edge.js +2 -1
- package/dist/chat-ui/thread/statewire-history-edge.js.map +1 -1
- package/dist/index.cjs +2 -1
- package/dist/index.cjs.map +1 -1
- package/dist/index.js +2 -1
- package/dist/index.js.map +1 -1
- package/dist/node_modules/qrcode-generator/dist/qrcode.cjs +32 -0
- package/dist/node_modules/qrcode-generator/dist/qrcode.cjs.map +1 -0
- package/dist/node_modules/qrcode-generator/dist/qrcode.js +31 -0
- package/dist/node_modules/qrcode-generator/dist/qrcode.js.map +1 -0
- package/dist/node_modules/zod/v4/classic/errors.cjs +44 -0
- package/dist/node_modules/zod/v4/classic/errors.cjs.map +1 -0
- package/dist/node_modules/zod/v4/classic/errors.js +44 -0
- package/dist/node_modules/zod/v4/classic/errors.js.map +1 -0
- package/dist/node_modules/zod/v4/classic/iso.cjs +43 -0
- package/dist/node_modules/zod/v4/classic/iso.cjs.map +1 -0
- package/dist/node_modules/zod/v4/classic/iso.js +43 -0
- package/dist/node_modules/zod/v4/classic/iso.js.map +1 -0
- package/dist/node_modules/zod/v4/classic/parse.cjs +29 -0
- package/dist/node_modules/zod/v4/classic/parse.cjs.map +1 -0
- package/dist/node_modules/zod/v4/classic/parse.js +29 -0
- package/dist/node_modules/zod/v4/classic/parse.js.map +1 -0
- package/dist/node_modules/zod/v4/classic/schemas.cjs +871 -0
- package/dist/node_modules/zod/v4/classic/schemas.cjs.map +1 -0
- package/dist/node_modules/zod/v4/classic/schemas.js +871 -0
- package/dist/node_modules/zod/v4/classic/schemas.js.map +1 -0
- package/dist/node_modules/zod/v4/core/api.cjs +570 -0
- package/dist/node_modules/zod/v4/core/api.cjs.map +1 -0
- package/dist/node_modules/zod/v4/core/api.js +570 -0
- package/dist/node_modules/zod/v4/core/api.js.map +1 -0
- package/dist/node_modules/zod/v4/core/checks.cjs +411 -0
- package/dist/node_modules/zod/v4/core/checks.cjs.map +1 -0
- package/dist/node_modules/zod/v4/core/checks.js +411 -0
- package/dist/node_modules/zod/v4/core/checks.js.map +1 -0
- package/dist/node_modules/zod/v4/core/core.cjs +77 -0
- package/dist/node_modules/zod/v4/core/core.cjs.map +1 -0
- package/dist/node_modules/zod/v4/core/core.js +77 -0
- package/dist/node_modules/zod/v4/core/core.js.map +1 -0
- package/dist/node_modules/zod/v4/core/doc.cjs +38 -0
- package/dist/node_modules/zod/v4/core/doc.cjs.map +1 -0
- package/dist/node_modules/zod/v4/core/doc.js +38 -0
- package/dist/node_modules/zod/v4/core/doc.js.map +1 -0
- package/dist/node_modules/zod/v4/core/errors.cjs +76 -0
- package/dist/node_modules/zod/v4/core/errors.cjs.map +1 -0
- package/dist/node_modules/zod/v4/core/errors.js +76 -0
- package/dist/node_modules/zod/v4/core/errors.js.map +1 -0
- package/dist/node_modules/zod/v4/core/json-schema-processors.cjs +312 -0
- package/dist/node_modules/zod/v4/core/json-schema-processors.cjs.map +1 -0
- package/dist/node_modules/zod/v4/core/json-schema-processors.js +312 -0
- package/dist/node_modules/zod/v4/core/json-schema-processors.js.map +1 -0
- package/dist/node_modules/zod/v4/core/parse.cjs +96 -0
- package/dist/node_modules/zod/v4/core/parse.cjs.map +1 -0
- package/dist/node_modules/zod/v4/core/parse.js +96 -0
- package/dist/node_modules/zod/v4/core/parse.js.map +1 -0
- package/dist/node_modules/zod/v4/core/regexes.cjs +86 -0
- package/dist/node_modules/zod/v4/core/regexes.cjs.map +1 -0
- package/dist/node_modules/zod/v4/core/regexes.js +86 -0
- package/dist/node_modules/zod/v4/core/regexes.js.map +1 -0
- package/dist/node_modules/zod/v4/core/registries.cjs +52 -0
- package/dist/node_modules/zod/v4/core/registries.cjs.map +1 -0
- package/dist/node_modules/zod/v4/core/registries.js +52 -0
- package/dist/node_modules/zod/v4/core/registries.js.map +1 -0
- package/dist/node_modules/zod/v4/core/schemas.cjs +1412 -0
- package/dist/node_modules/zod/v4/core/schemas.cjs.map +1 -0
- package/dist/node_modules/zod/v4/core/schemas.js +1413 -0
- package/dist/node_modules/zod/v4/core/schemas.js.map +1 -0
- package/dist/node_modules/zod/v4/core/to-json-schema.cjs +370 -0
- package/dist/node_modules/zod/v4/core/to-json-schema.cjs.map +1 -0
- package/dist/node_modules/zod/v4/core/to-json-schema.js +370 -0
- package/dist/node_modules/zod/v4/core/to-json-schema.js.map +1 -0
- package/dist/node_modules/zod/v4/core/util.cjs +444 -0
- package/dist/node_modules/zod/v4/core/util.cjs.map +1 -0
- package/dist/node_modules/zod/v4/core/util.js +444 -0
- package/dist/node_modules/zod/v4/core/util.js.map +1 -0
- package/dist/node_modules/zod/v4/core/versions.cjs +9 -0
- package/dist/node_modules/zod/v4/core/versions.cjs.map +1 -0
- package/dist/node_modules/zod/v4/core/versions.js +9 -0
- package/dist/node_modules/zod/v4/core/versions.js.map +1 -0
- package/dist/packages/agent-runtime/src/client-tool-bridge.cjs +7 -1
- package/dist/packages/agent-runtime/src/client-tool-bridge.cjs.map +1 -1
- package/dist/packages/agent-runtime/src/client-tool-bridge.js +7 -1
- package/dist/packages/agent-runtime/src/client-tool-bridge.js.map +1 -1
- package/dist/packages/agent-runtime/src/conversation-list.cjs +4 -0
- package/dist/packages/agent-runtime/src/conversation-list.cjs.map +1 -1
- package/dist/packages/agent-runtime/src/conversation-list.js +4 -0
- package/dist/packages/agent-runtime/src/conversation-list.js.map +1 -1
- package/dist/packages/agent-runtime/src/edit-command.cjs.map +1 -1
- package/dist/packages/agent-runtime/src/edit-command.js.map +1 -1
- package/dist/packages/agent-runtime/src/generated/runconfig-contract.cjs +2 -0
- package/dist/packages/agent-runtime/src/generated/runconfig-contract.cjs.map +1 -1
- package/dist/packages/agent-runtime/src/generated/runconfig-contract.js +2 -0
- package/dist/packages/agent-runtime/src/generated/runconfig-contract.js.map +1 -1
- package/dist/packages/agent-runtime/src/interrupts.cjs +31 -7
- package/dist/packages/agent-runtime/src/interrupts.cjs.map +1 -1
- package/dist/packages/agent-runtime/src/interrupts.js +31 -7
- package/dist/packages/agent-runtime/src/interrupts.js.map +1 -1
- package/dist/packages/agent-runtime/src/messages.cjs +35 -5
- package/dist/packages/agent-runtime/src/messages.cjs.map +1 -1
- package/dist/packages/agent-runtime/src/messages.js +35 -5
- package/dist/packages/agent-runtime/src/messages.js.map +1 -1
- package/dist/packages/agent-runtime/src/protocol.cjs +4 -6
- package/dist/packages/agent-runtime/src/protocol.cjs.map +1 -1
- package/dist/packages/agent-runtime/src/protocol.js +4 -6
- package/dist/packages/agent-runtime/src/protocol.js.map +1 -1
- package/dist/packages/agent-runtime/src/quota-safe-local-storage-session.cjs +296 -14
- package/dist/packages/agent-runtime/src/quota-safe-local-storage-session.cjs.map +1 -1
- package/dist/packages/agent-runtime/src/quota-safe-local-storage-session.js +293 -11
- package/dist/packages/agent-runtime/src/quota-safe-local-storage-session.js.map +1 -1
- package/dist/packages/agent-runtime/src/screen-point.cjs +68 -0
- package/dist/packages/agent-runtime/src/screen-point.cjs.map +1 -0
- package/dist/packages/agent-runtime/src/screen-point.js +68 -0
- package/dist/packages/agent-runtime/src/screen-point.js.map +1 -0
- package/dist/packages/agent-runtime/src/statewire-transport.cjs +6 -1
- package/dist/packages/agent-runtime/src/statewire-transport.cjs.map +1 -1
- package/dist/packages/agent-runtime/src/statewire-transport.js +6 -1
- package/dist/packages/agent-runtime/src/statewire-transport.js.map +1 -1
- package/dist/packages/agent-runtime/src/thread-handoff.cjs +85 -0
- package/dist/packages/agent-runtime/src/thread-handoff.cjs.map +1 -0
- package/dist/packages/agent-runtime/src/thread-handoff.js +85 -0
- package/dist/packages/agent-runtime/src/thread-handoff.js.map +1 -0
- package/dist/packages/agent-runtime/src/thread-snapshot-cache.cjs +1 -1
- package/dist/packages/agent-runtime/src/thread-snapshot-cache.cjs.map +1 -1
- package/dist/packages/agent-runtime/src/thread-snapshot-cache.js +1 -1
- package/dist/packages/agent-runtime/src/thread-snapshot-cache.js.map +1 -1
- package/dist/packages/agent-runtime/src/tool-metadata.cjs +0 -8
- package/dist/packages/agent-runtime/src/tool-metadata.cjs.map +1 -1
- package/dist/packages/agent-runtime/src/tool-metadata.js +0 -8
- package/dist/packages/agent-runtime/src/tool-metadata.js.map +1 -1
- package/dist/packages/agent-runtime/src/use-deep-agent-config.cjs +14 -0
- package/dist/packages/agent-runtime/src/use-deep-agent-config.cjs.map +1 -0
- package/dist/packages/agent-runtime/src/use-deep-agent-config.js +14 -0
- package/dist/packages/agent-runtime/src/use-deep-agent-config.js.map +1 -0
- package/dist/packages/agent-runtime/src/use-deep-agent-edit-submit.cjs +21 -5
- package/dist/packages/agent-runtime/src/use-deep-agent-edit-submit.cjs.map +1 -1
- package/dist/packages/agent-runtime/src/use-deep-agent-edit-submit.js +21 -5
- package/dist/packages/agent-runtime/src/use-deep-agent-edit-submit.js.map +1 -1
- package/dist/packages/agent-runtime/src/use-deep-agent-runtime.cjs +13 -3
- package/dist/packages/agent-runtime/src/use-deep-agent-runtime.cjs.map +1 -1
- package/dist/packages/agent-runtime/src/use-deep-agent-runtime.js +14 -4
- package/dist/packages/agent-runtime/src/use-deep-agent-runtime.js.map +1 -1
- package/dist/packages/agent-runtime/src/use-deep-agent-thread.cjs +35 -15
- package/dist/packages/agent-runtime/src/use-deep-agent-thread.cjs.map +1 -1
- package/dist/packages/agent-runtime/src/use-deep-agent-thread.js +35 -15
- package/dist/packages/agent-runtime/src/use-deep-agent-thread.js.map +1 -1
- package/dist/packages/agent-runtime/src/voice-presentation.cjs.map +1 -1
- package/dist/packages/agent-runtime/src/voice-presentation.js.map +1 -1
- package/dist/packages/react/package.json.cjs +1 -1
- package/dist/packages/react/package.json.js +1 -1
- package/dist/provider/AthenaProvider.cjs +2 -1
- package/dist/provider/AthenaProvider.cjs.map +1 -1
- package/dist/provider/AthenaProvider.js +2 -1
- package/dist/provider/AthenaProvider.js.map +1 -1
- package/dist/runtime/statewire-lifecycle.cjs +2 -1
- package/dist/runtime/statewire-lifecycle.cjs.map +1 -1
- package/dist/runtime/statewire-lifecycle.js +2 -1
- package/dist/runtime/statewire-lifecycle.js.map +1 -1
- package/dist/runtime/useAthenaStatewireRuntime.cjs +2 -1
- package/dist/runtime/useAthenaStatewireRuntime.cjs.map +1 -1
- package/dist/runtime/useAthenaStatewireRuntime.js +2 -1
- package/dist/runtime/useAthenaStatewireRuntime.js.map +1 -1
- package/dist/styles.css +1 -1
- package/dist/threads/conversation-list-fetcher.cjs +4 -0
- package/dist/threads/conversation-list-fetcher.cjs.map +1 -1
- package/dist/threads/conversation-list-fetcher.js +4 -0
- package/dist/threads/conversation-list-fetcher.js.map +1 -1
- package/dist/threads/statewire-thread-list.cjs +2 -1
- package/dist/threads/statewire-thread-list.cjs.map +1 -1
- package/dist/threads/statewire-thread-list.js +2 -1
- package/dist/threads/statewire-thread-list.js.map +1 -1
- package/dist/threads/use-rest-conversation-history.cjs +2 -1
- package/dist/threads/use-rest-conversation-history.cjs.map +1 -1
- package/dist/threads/use-rest-conversation-history.js +2 -1
- package/dist/threads/use-rest-conversation-history.js.map +1 -1
- package/dist/threads/use-statewire-conversation-history.cjs +2 -1
- package/dist/threads/use-statewire-conversation-history.cjs.map +1 -1
- package/dist/threads/use-statewire-conversation-history.d.ts +1 -0
- package/dist/threads/use-statewire-conversation-history.js +2 -1
- package/dist/threads/use-statewire-conversation-history.js.map +1 -1
- package/dist/tools/index.cjs +2 -1
- package/dist/tools/index.cjs.map +1 -1
- package/dist/tools/index.js +2 -1
- package/dist/tools/index.js.map +1 -1
- package/dist/tools/misc-tool-uis.cjs +2 -1
- package/dist/tools/misc-tool-uis.cjs.map +1 -1
- package/dist/tools/misc-tool-uis.js +2 -1
- package/dist/tools/misc-tool-uis.js.map +1 -1
- package/dist/tools/primitives.cjs +2 -1
- package/dist/tools/primitives.cjs.map +1 -1
- package/dist/tools/primitives.js +2 -1
- package/dist/tools/primitives.js.map +1 -1
- package/dist/tools/tool-fallback.cjs +2 -1
- package/dist/tools/tool-fallback.cjs.map +1 -1
- package/dist/tools/tool-fallback.js +2 -1
- package/dist/tools/tool-fallback.js.map +1 -1
- package/dist/tools/voice-update-tool-ui.cjs +2 -1
- package/dist/tools/voice-update-tool-ui.cjs.map +1 -1
- package/dist/tools/voice-update-tool-ui.js +2 -1
- package/dist/tools/voice-update-tool-ui.js.map +1 -1
- package/dist/voice/index.cjs +6 -0
- package/dist/voice/index.cjs.map +1 -0
- package/dist/voice/index.d.ts +2 -0
- package/dist/voice/index.js +6 -0
- package/dist/voice/index.js.map +1 -0
- package/dist/voice/use-athena-voice-session.cjs +315 -0
- package/dist/voice/use-athena-voice-session.cjs.map +1 -0
- package/dist/voice/use-athena-voice-session.d.ts +145 -0
- package/dist/voice/use-athena-voice-session.js +315 -0
- package/dist/voice/use-athena-voice-session.js.map +1 -0
- package/package.json +17 -3
|
@@ -8,6 +8,8 @@ const toolFallback = require("../../tools/tool-fallback.cjs");
|
|
|
8
8
|
const activityTimeline = require("./activity-timeline.cjs");
|
|
9
9
|
const CollapsibleGroup = require("./CollapsibleGroup.cjs");
|
|
10
10
|
const groupingFunction = require("./grouping-function.cjs");
|
|
11
|
+
const ToolTimeline = require("./ToolTimeline.cjs");
|
|
12
|
+
const timelineStep = require("./timeline-step.cjs");
|
|
11
13
|
const toolkitMap = require("./toolkit-map.cjs");
|
|
12
14
|
const cnfast = require("cnfast");
|
|
13
15
|
const DEFAULT_MAX_VISIBLE_STEPS = 3;
|
|
@@ -61,66 +63,6 @@ function useActivityExpansion({
|
|
|
61
63
|
};
|
|
62
64
|
return { expanded, toggleExpanded };
|
|
63
65
|
}
|
|
64
|
-
function PulsingDots() {
|
|
65
|
-
return /* @__PURE__ */ jsxRuntime.jsxs("span", { className: "inline-flex items-center gap-[3px]", "aria-hidden": "true", children: [
|
|
66
|
-
/* @__PURE__ */ jsxRuntime.jsx("span", { className: "size-[5px] rounded-full bg-foreground/80 animate-[aui-sg-pulse-dot_1.4s_ease-in-out_infinite]" }),
|
|
67
|
-
/* @__PURE__ */ jsxRuntime.jsx("span", { className: "size-[5px] rounded-full bg-foreground/80 animate-[aui-sg-pulse-dot_1.4s_ease-in-out_0.2s_infinite]" }),
|
|
68
|
-
/* @__PURE__ */ jsxRuntime.jsx("span", { className: "size-[5px] rounded-full bg-foreground/80 animate-[aui-sg-pulse-dot_1.4s_ease-in-out_0.4s_infinite]" }),
|
|
69
|
-
/* @__PURE__ */ jsxRuntime.jsx("style", { children: `
|
|
70
|
-
@keyframes aui-sg-pulse-dot {
|
|
71
|
-
0%, 80%, 100% { opacity: 0.2; transform: scale(0.8); }
|
|
72
|
-
40% { opacity: 1; transform: scale(1); }
|
|
73
|
-
}
|
|
74
|
-
@keyframes aui-sg-shimmer-bar {
|
|
75
|
-
0% { transform: translateX(-100%); }
|
|
76
|
-
100% { transform: translateX(400%); }
|
|
77
|
-
}
|
|
78
|
-
` })
|
|
79
|
-
] });
|
|
80
|
-
}
|
|
81
|
-
function StepIcon({ item }) {
|
|
82
|
-
if (item.kind === "reasoning") {
|
|
83
|
-
return /* @__PURE__ */ jsxRuntime.jsx(
|
|
84
|
-
lucideReact.Brain,
|
|
85
|
-
{
|
|
86
|
-
"aria-hidden": "true",
|
|
87
|
-
className: cnfast.cn(
|
|
88
|
-
"mt-[1px] size-3.5 shrink-0",
|
|
89
|
-
item.state === "running" ? "text-blue-500 motion-safe:animate-pulse" : "text-muted-foreground"
|
|
90
|
-
)
|
|
91
|
-
}
|
|
92
|
-
);
|
|
93
|
-
}
|
|
94
|
-
switch (item.state) {
|
|
95
|
-
case "complete":
|
|
96
|
-
return /* @__PURE__ */ jsxRuntime.jsx(lucideReact.Check, { "aria-hidden": "true", className: "mt-[1px] size-3.5 shrink-0 text-emerald-500" });
|
|
97
|
-
case "rejected":
|
|
98
|
-
return /* @__PURE__ */ jsxRuntime.jsx(lucideReact.X, { "aria-hidden": "true", className: "mt-[1px] size-3.5 shrink-0 text-muted-foreground" });
|
|
99
|
-
case "cancelled":
|
|
100
|
-
return /* @__PURE__ */ jsxRuntime.jsx(lucideReact.Circle, { "aria-hidden": "true", className: "mt-[1px] size-3.5 shrink-0 text-muted-foreground" });
|
|
101
|
-
case "error":
|
|
102
|
-
return /* @__PURE__ */ jsxRuntime.jsx(lucideReact.AlertCircle, { "aria-hidden": "true", className: "mt-[1px] size-3.5 shrink-0 text-destructive" });
|
|
103
|
-
case "waiting":
|
|
104
|
-
return /* @__PURE__ */ jsxRuntime.jsx(lucideReact.Circle, { "aria-hidden": "true", className: "mt-[1px] size-3.5 shrink-0 text-amber-500" });
|
|
105
|
-
case "paused":
|
|
106
|
-
return /* @__PURE__ */ jsxRuntime.jsx(lucideReact.Pause, { "aria-hidden": "true", className: "mt-[1px] size-3.5 shrink-0 text-amber-600" });
|
|
107
|
-
case "running":
|
|
108
|
-
return /* @__PURE__ */ jsxRuntime.jsx("span", { className: "flex size-3.5 shrink-0 items-center justify-center", "aria-hidden": "true", children: /* @__PURE__ */ jsxRuntime.jsx("span", { className: "size-1.5 rounded-full bg-blue-500 motion-safe:animate-pulse" }) });
|
|
109
|
-
}
|
|
110
|
-
}
|
|
111
|
-
function SummaryIcon({ timeline }) {
|
|
112
|
-
const tools = timeline.filter((item) => item.kind === "tool");
|
|
113
|
-
if (tools.some((item) => item.state === "error" || item.state === "rejected")) {
|
|
114
|
-
return /* @__PURE__ */ jsxRuntime.jsx(lucideReact.X, { "aria-hidden": "true", className: "size-3.5 shrink-0 text-muted-foreground" });
|
|
115
|
-
}
|
|
116
|
-
if (tools.some((item) => item.state === "cancelled")) {
|
|
117
|
-
return /* @__PURE__ */ jsxRuntime.jsx(lucideReact.Circle, { "aria-hidden": "true", className: "size-3.5 shrink-0 text-muted-foreground" });
|
|
118
|
-
}
|
|
119
|
-
if (tools.some((item) => item.state === "paused")) {
|
|
120
|
-
return /* @__PURE__ */ jsxRuntime.jsx(lucideReact.Pause, { "aria-hidden": "true", className: "size-3.5 shrink-0 text-amber-600" });
|
|
121
|
-
}
|
|
122
|
-
return /* @__PURE__ */ jsxRuntime.jsx(lucideReact.Check, { "aria-hidden": "true", className: "size-3.5 shrink-0 text-emerald-500" });
|
|
123
|
-
}
|
|
124
66
|
const SuperGroupingCard = react.memo(function SuperGroupingCard2({
|
|
125
67
|
toolUIs,
|
|
126
68
|
ToolFallback: ToolFallbackComponent = toolFallback.ToolFallback,
|
|
@@ -135,6 +77,7 @@ const SuperGroupingCard = react.memo(function SuperGroupingCard2({
|
|
|
135
77
|
resolveToolDisplayName,
|
|
136
78
|
expansionKey: expansionKeyProp,
|
|
137
79
|
expandWhileWaiting = false,
|
|
80
|
+
mountDetails = false,
|
|
138
81
|
maxVisibleSteps = DEFAULT_MAX_VISIBLE_STEPS,
|
|
139
82
|
summaryDetails,
|
|
140
83
|
renderHeaderActions,
|
|
@@ -167,7 +110,15 @@ const SuperGroupingCard = react.memo(function SuperGroupingCard2({
|
|
|
167
110
|
const generatedId = react.useId().replace(/[^A-Za-z0-9_-]/g, "");
|
|
168
111
|
const detailsPanelId = `aui-sg-details-${generatedId}`;
|
|
169
112
|
const statusId = `aui-sg-status-${generatedId}`;
|
|
170
|
-
const
|
|
113
|
+
const { expanded: detailsExpanded, toggleExpanded: toggleDetails } = useActivityExpansion({
|
|
114
|
+
expansionKey: `${expansionKeyProp ?? messageId}:details`,
|
|
115
|
+
phase,
|
|
116
|
+
expandWhileWaiting
|
|
117
|
+
});
|
|
118
|
+
const steps = react.useMemo(
|
|
119
|
+
() => timeline.map((item, index) => timelineStep.toTimelineStep({ item, index, resolveToolDisplayName })),
|
|
120
|
+
[timeline, resolveToolDisplayName]
|
|
121
|
+
);
|
|
171
122
|
const grouping = react.useMemo(
|
|
172
123
|
() => activityTimeline.excludeFinalTextFromGroups(groupingFunction$1 ?? groupingFunction.createToolBasedGroupingFunction(getToolGroupKey)),
|
|
173
124
|
[groupingFunction$1, getToolGroupKey]
|
|
@@ -175,7 +126,10 @@ const SuperGroupingCard = react.memo(function SuperGroupingCard2({
|
|
|
175
126
|
const groupingContext = react.useMemo(() => ({ groupingFunction: grouping }), [grouping]);
|
|
176
127
|
const components = react.useMemo(
|
|
177
128
|
() => ({
|
|
178
|
-
tools: {
|
|
129
|
+
tools: {
|
|
130
|
+
...toolUIs ? { by_name: toolUIs } : {},
|
|
131
|
+
Fallback: ToolFallbackComponent
|
|
132
|
+
},
|
|
179
133
|
Text: TextComponent,
|
|
180
134
|
...ReasoningComponent ? { Reasoning: ReasoningComponent } : {},
|
|
181
135
|
Group: GroupComponent
|
|
@@ -185,150 +139,78 @@ const SuperGroupingCard = react.memo(function SuperGroupingCard2({
|
|
|
185
139
|
const isActive = phase === "running" || phase === "waiting";
|
|
186
140
|
const hasActivity = timeline.length > 0 || phase !== "complete";
|
|
187
141
|
if (!hasActivity) return null;
|
|
188
|
-
const detailsMounted = isActive || expanded;
|
|
189
|
-
const
|
|
190
|
-
const
|
|
191
|
-
const latestStatus = phase === "waiting" ? "Waiting for
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
queueMicrotask(() => {
|
|
198
|
-
var _a;
|
|
199
|
-
return (_a = primaryDisclosureRef.current) == null ? void 0 : _a.focus();
|
|
200
|
-
});
|
|
201
|
-
};
|
|
142
|
+
const detailsMounted = isActive || mountDetails || expanded && detailsExpanded;
|
|
143
|
+
const activeSteps = steps.filter((step) => step.state === "running");
|
|
144
|
+
const currentStep = activeSteps.at(-1);
|
|
145
|
+
const latestStatus = phase === "waiting" ? "Waiting for you" : phase === "error" ? (messageStatus == null ? void 0 : messageStatus.type) === "incomplete" && messageStatus.reason === "cancelled" ? "Run stopped" : "Something went wrong" : phase === "running" ? currentStep ? [
|
|
146
|
+
currentStep.verb,
|
|
147
|
+
currentStep.chip,
|
|
148
|
+
activeSteps.length > 1 ? `${activeSteps.length} in progress` : null
|
|
149
|
+
].filter(Boolean).join(" · ") : steps.length > 0 ? "Preparing response" : "Thinking" : activityTimeline.getActivitySummary(timeline);
|
|
150
|
+
const label = [latestStatus, ...isActive ? [] : summaryDetails ?? []].join(" · ");
|
|
202
151
|
return /* @__PURE__ */ jsxRuntime.jsxs(
|
|
203
152
|
"section",
|
|
204
153
|
{
|
|
205
154
|
"data-slot": "super-grouping-card",
|
|
206
155
|
"data-phase": phase,
|
|
207
156
|
"data-tool-count": toolCount,
|
|
208
|
-
className: cnfast.cn(
|
|
209
|
-
"my-3 min-w-0 overflow-hidden rounded-2xl border transition-colors duration-200",
|
|
210
|
-
phase === "error" ? "border-destructive/30 bg-destructive/5" : phase === "waiting" ? "border-amber-200 bg-amber-50/40 dark:border-amber-500/30 dark:bg-amber-500/10" : "border-border/60 bg-muted/10",
|
|
211
|
-
className,
|
|
212
|
-
classNames == null ? void 0 : classNames.root
|
|
213
|
-
),
|
|
157
|
+
className: cnfast.cn("my-3 min-w-0", className, classNames == null ? void 0 : classNames.root),
|
|
214
158
|
"aria-busy": phase === "running" ? "true" : "false",
|
|
215
159
|
"aria-describedby": statusId,
|
|
216
160
|
children: [
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
"button",
|
|
220
|
-
{
|
|
221
|
-
ref: primaryDisclosureRef,
|
|
222
|
-
type: "button",
|
|
223
|
-
onClick: toggleExpanded,
|
|
224
|
-
"aria-expanded": expanded,
|
|
225
|
-
"aria-controls": detailsPanelId,
|
|
226
|
-
className: "flex min-w-0 flex-1 items-center gap-2 px-4 py-3 text-left transition-colors hover:bg-muted/30 focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-inset focus-visible:ring-ring",
|
|
227
|
-
children: [
|
|
228
|
-
/* @__PURE__ */ jsxRuntime.jsx(SummaryIcon, { timeline }),
|
|
229
|
-
/* @__PURE__ */ jsxRuntime.jsx("span", { className: "min-w-0 flex-1 truncate text-[12px] text-muted-foreground", children: summary })
|
|
230
|
-
]
|
|
231
|
-
}
|
|
232
|
-
),
|
|
233
|
-
/* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex shrink-0 items-center gap-1 pr-3 pl-1", children: [
|
|
234
|
-
headerActions,
|
|
235
|
-
/* @__PURE__ */ jsxRuntime.jsx(
|
|
236
|
-
"button",
|
|
237
|
-
{
|
|
238
|
-
type: "button",
|
|
239
|
-
onClick: toggleExpanded,
|
|
240
|
-
"aria-label": expanded ? "Hide run details" : "Show run details",
|
|
241
|
-
"aria-expanded": expanded,
|
|
242
|
-
"aria-controls": detailsPanelId,
|
|
243
|
-
className: "flex items-center justify-center rounded-md p-1 text-muted-foreground transition-colors hover:bg-muted/40 hover:text-foreground",
|
|
244
|
-
children: expanded ? /* @__PURE__ */ jsxRuntime.jsx(lucideReact.ChevronDown, { className: "size-3.5" }) : /* @__PURE__ */ jsxRuntime.jsx(lucideReact.ChevronRight, { className: "size-3.5" })
|
|
245
|
-
}
|
|
246
|
-
)
|
|
247
|
-
] })
|
|
248
|
-
] }) : /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
|
|
249
|
-
/* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex min-w-0 items-center justify-between gap-2 px-4 pt-4 pb-2", children: [
|
|
250
|
-
/* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex min-w-0 items-center gap-2", children: [
|
|
251
|
-
/* @__PURE__ */ jsxRuntime.jsx("h3", { className: "truncate text-[13px] font-semibold text-foreground", children: phase === "error" ? "Something went wrong" : phase === "waiting" ? "Waiting for you" : "Athena is working" }),
|
|
252
|
-
phase === "running" ? /* @__PURE__ */ jsxRuntime.jsx(PulsingDots, {}) : null
|
|
253
|
-
] }),
|
|
254
|
-
headerActions ? /* @__PURE__ */ jsxRuntime.jsx("div", { className: "flex shrink-0 items-center gap-1", children: headerActions }) : null
|
|
255
|
-
] }),
|
|
256
|
-
runningMeta ? /* @__PURE__ */ jsxRuntime.jsx("div", { className: "px-4 pb-1", children: runningMeta }) : null,
|
|
257
|
-
phase === "running" ? /* @__PURE__ */ jsxRuntime.jsx("div", { className: "px-4 pb-1", children: /* @__PURE__ */ jsxRuntime.jsx("div", { className: "h-[2px] w-full overflow-hidden rounded-full bg-muted/40", children: /* @__PURE__ */ jsxRuntime.jsx("div", { className: "h-full w-1/3 rounded-full bg-gradient-to-r from-blue-400 to-indigo-400 animate-[aui-sg-shimmer-bar_1.5s_ease-in-out_infinite] motion-reduce:animate-none" }) }) }) : null,
|
|
258
|
-
visibleItems.length > 0 ? /* @__PURE__ */ jsxRuntime.jsxs("ul", { className: "space-y-1 px-4 pt-1.5 pb-1", "aria-label": "Work status updates", children: [
|
|
259
|
-
hiddenCount > 0 ? /* @__PURE__ */ jsxRuntime.jsxs("li", { className: "pl-[22px] text-[11px] text-muted-foreground/70", children: [
|
|
260
|
-
hiddenCount,
|
|
261
|
-
" earlier ",
|
|
262
|
-
hiddenCount === 1 ? "step" : "steps"
|
|
263
|
-
] }) : null,
|
|
264
|
-
visibleItems.map((item, index) => /* @__PURE__ */ jsxRuntime.jsxs(
|
|
265
|
-
"li",
|
|
266
|
-
{
|
|
267
|
-
className: "flex min-w-0 items-start gap-2 text-[12px]",
|
|
268
|
-
children: [
|
|
269
|
-
/* @__PURE__ */ jsxRuntime.jsx(StepIcon, { item }),
|
|
270
|
-
item.kind === "reasoning" ? item.text.trim() ? /* @__PURE__ */ jsxRuntime.jsx("span", { className: "line-clamp-2 min-w-0 flex-1 italic leading-relaxed text-muted-foreground", children: item.text }) : /* @__PURE__ */ jsxRuntime.jsx("span", { className: "shimmer min-w-0 flex-1 leading-relaxed text-muted-foreground", children: "Thinking…" }) : /* @__PURE__ */ jsxRuntime.jsx(
|
|
271
|
-
"span",
|
|
272
|
-
{
|
|
273
|
-
className: cnfast.cn(
|
|
274
|
-
"min-w-0 flex-1 truncate leading-relaxed",
|
|
275
|
-
item.state === "complete" ? "text-muted-foreground/70" : "text-foreground/80"
|
|
276
|
-
),
|
|
277
|
-
children: activityTimeline.getActivityItemLabel(item, resolveToolDisplayName)
|
|
278
|
-
}
|
|
279
|
-
)
|
|
280
|
-
]
|
|
281
|
-
},
|
|
282
|
-
`${item.kind}-${hiddenCount + index}`
|
|
283
|
-
))
|
|
284
|
-
] }) : /* @__PURE__ */ jsxRuntime.jsx("div", { className: "px-4 pt-1 pb-2", children: /* @__PURE__ */ jsxRuntime.jsx("span", { className: "shimmer text-[12px] text-muted-foreground", children: "Planning approach..." }) }),
|
|
285
|
-
/* @__PURE__ */ jsxRuntime.jsx("div", { className: "px-4 pb-3 pt-0.5", children: /* @__PURE__ */ jsxRuntime.jsxs(
|
|
286
|
-
"button",
|
|
287
|
-
{
|
|
288
|
-
ref: primaryDisclosureRef,
|
|
289
|
-
type: "button",
|
|
290
|
-
onClick: toggleExpanded,
|
|
291
|
-
"aria-expanded": expanded,
|
|
292
|
-
"aria-controls": detailsPanelId,
|
|
293
|
-
className: "flex items-center gap-1 rounded px-1 py-0.5 text-[11px] font-medium text-muted-foreground transition-colors hover:text-foreground focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring",
|
|
294
|
-
children: [
|
|
295
|
-
expanded ? /* @__PURE__ */ jsxRuntime.jsx(lucideReact.ChevronDown, { className: "size-3" }) : /* @__PURE__ */ jsxRuntime.jsx(lucideReact.ChevronRight, { className: "size-3" }),
|
|
296
|
-
expanded ? "Hide details" : "Show details"
|
|
297
|
-
]
|
|
298
|
-
}
|
|
299
|
-
) })
|
|
300
|
-
] }),
|
|
301
|
-
/* @__PURE__ */ jsxRuntime.jsx("output", { id: statusId, "aria-live": "polite", "aria-atomic": "true", className: "sr-only", children: latestStatus }),
|
|
302
|
-
detailsMounted ? /* @__PURE__ */ jsxRuntime.jsxs(
|
|
303
|
-
"div",
|
|
161
|
+
/* @__PURE__ */ jsxRuntime.jsx(
|
|
162
|
+
ToolTimeline.ToolTimeline,
|
|
304
163
|
{
|
|
305
|
-
|
|
306
|
-
|
|
307
|
-
|
|
308
|
-
|
|
309
|
-
|
|
310
|
-
|
|
311
|
-
|
|
312
|
-
),
|
|
313
|
-
|
|
314
|
-
|
|
164
|
+
steps,
|
|
165
|
+
open: expanded,
|
|
166
|
+
onOpenChange: toggleExpanded,
|
|
167
|
+
label,
|
|
168
|
+
phase,
|
|
169
|
+
maxVisibleSteps,
|
|
170
|
+
keepMounted: isActive || mountDetails,
|
|
171
|
+
actions: renderHeaderActions == null ? void 0 : renderHeaderActions({ phase, messageContent }),
|
|
172
|
+
meta: isActive ? renderRunningMeta == null ? void 0 : renderRunningMeta({ phase }) : null,
|
|
173
|
+
children: /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "min-w-0 pl-5", children: [
|
|
315
174
|
/* @__PURE__ */ jsxRuntime.jsxs(
|
|
316
175
|
"button",
|
|
317
176
|
{
|
|
318
177
|
type: "button",
|
|
319
|
-
onClick:
|
|
178
|
+
onClick: toggleDetails,
|
|
179
|
+
"aria-expanded": detailsExpanded,
|
|
320
180
|
"aria-controls": detailsPanelId,
|
|
321
|
-
"
|
|
322
|
-
className: "mx-auto mt-3 flex items-center gap-1 rounded-md px-3 py-1.5 text-[11px] font-medium text-muted-foreground transition-colors hover:bg-muted/40 hover:text-foreground focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring",
|
|
181
|
+
className: "flex items-center gap-1.5 rounded py-1 text-xs text-muted-foreground transition-colors hover:text-foreground focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring",
|
|
323
182
|
children: [
|
|
324
|
-
/* @__PURE__ */ jsxRuntime.jsx(
|
|
325
|
-
|
|
183
|
+
/* @__PURE__ */ jsxRuntime.jsx(
|
|
184
|
+
lucideReact.ChevronRight,
|
|
185
|
+
{
|
|
186
|
+
"aria-hidden": "true",
|
|
187
|
+
className: cnfast.cn(
|
|
188
|
+
"size-3 transition-transform motion-reduce:transition-none",
|
|
189
|
+
detailsExpanded && "rotate-90"
|
|
190
|
+
)
|
|
191
|
+
}
|
|
192
|
+
),
|
|
193
|
+
detailsExpanded ? "Hide tool details" : "Show tool details"
|
|
326
194
|
]
|
|
327
195
|
}
|
|
328
|
-
)
|
|
329
|
-
|
|
196
|
+
),
|
|
197
|
+
detailsMounted ? /* @__PURE__ */ jsxRuntime.jsx(
|
|
198
|
+
"section",
|
|
199
|
+
{
|
|
200
|
+
id: detailsPanelId,
|
|
201
|
+
"aria-label": "Run details",
|
|
202
|
+
hidden: !expanded || !detailsExpanded,
|
|
203
|
+
className: cnfast.cn(
|
|
204
|
+
"min-w-0 space-y-2 overflow-hidden border-l border-border/60 py-2 pl-3",
|
|
205
|
+
classNames == null ? void 0 : classNames.details
|
|
206
|
+
),
|
|
207
|
+
children: /* @__PURE__ */ jsxRuntime.jsx(CollapsibleGroup.SuperGroupingProvider, { value: groupingContext, children: /* @__PURE__ */ jsxRuntime.jsx(react$1.MessagePrimitive.Unstable_PartsGrouped, { groupingFunction: grouping, components }) })
|
|
208
|
+
}
|
|
209
|
+
) : null
|
|
210
|
+
] })
|
|
330
211
|
}
|
|
331
|
-
)
|
|
212
|
+
),
|
|
213
|
+
/* @__PURE__ */ jsxRuntime.jsx("output", { id: statusId, "aria-live": "polite", "aria-atomic": "true", className: "sr-only", children: phase === "waiting" ? "Waiting for your input" : latestStatus })
|
|
332
214
|
]
|
|
333
215
|
}
|
|
334
216
|
);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SuperGroupingCard.cjs","sources":["../../../src/chat/super-grouping/SuperGroupingCard.tsx"],"sourcesContent":["'use client';\n\nimport type {\n ReasoningMessagePartComponent,\n TextMessagePartComponent,\n ThreadAssistantMessagePart,\n ToolCallMessagePartComponent,\n ToolCallMessagePartProps,\n} from '@assistant-ui/react';\nimport { MessagePrimitive, useAuiState } from '@assistant-ui/react';\nimport {\n AlertCircle,\n Brain,\n Check,\n ChevronDown,\n ChevronRight,\n ChevronUp,\n Circle,\n Pause,\n X,\n} from 'lucide-react';\nimport {\n type ComponentType,\n memo,\n type ReactNode,\n useEffect,\n useId,\n useMemo,\n useRef,\n useState,\n} from 'react';\nimport { cn } from '../../lib/utils';\nimport { ToolFallback } from '../../tools/tool-fallback';\nimport {\n type ActivityItem,\n type ActivityPhase,\n buildActivityTimeline,\n countActivityTools,\n excludeFinalTextFromGroups,\n getActivityItemLabel,\n getActivitySummary,\n getFinalText,\n resolveActivityPhase,\n} from './activity-timeline';\nimport { CollapsibleGroup, type CollapsibleGroupProps, SuperGroupingProvider } from './CollapsibleGroup';\nimport { createToolBasedGroupingFunction, type GroupingFunction } from './grouping-function';\nimport { defaultGetToolGroupKey, type GetToolGroupKey } from './toolkit-map';\n\nconst DEFAULT_MAX_VISIBLE_STEPS = 3;\nconst MAX_REMEMBERED_EXPANSIONS = 200;\nconst EMPTY_TIMELINE: ActivityItem[] = [];\nconst EMPTY_CONTENT: readonly ThreadAssistantMessagePart[] = [];\n\n// ─── Disclosure memory ─────────────────────────────────────────────────\n\n/**\n * Session-local memory of which cards the user opened, keyed by the host's\n * expansion key (the message id by default; the Chrome extension keys by\n * thread + position so a streaming message keeps its choice when it receives\n * its stable id). Bounded so a long session cannot grow it without limit.\n */\nconst rememberedExpansions = new Map<string, boolean>();\n\nfunction rememberExpansion(key: string, expanded: boolean): void {\n rememberedExpansions.delete(key);\n rememberedExpansions.set(key, expanded);\n while (rememberedExpansions.size > MAX_REMEMBERED_EXPANSIONS) {\n const oldestKey = rememberedExpansions.keys().next().value;\n if (oldestKey === undefined) break;\n rememberedExpansions.delete(oldestKey);\n }\n}\n\nexport function resetRememberedExpansionsForTests(): void {\n rememberedExpansions.clear();\n}\n\n/**\n * The details disclosure: remembered per expansion key, and — when the host\n * opts in — opened once when the turn starts waiting on the person, so the\n * approval controls inside the details are visible without a click.\n */\nexport function useActivityExpansion({\n expansionKey,\n phase,\n expandWhileWaiting = false,\n}: {\n expansionKey: string;\n phase: ActivityPhase;\n expandWhileWaiting?: boolean;\n}) {\n const [userExpanded, setUserExpanded] = useState<boolean | undefined>(() =>\n rememberedExpansions.get(expansionKey),\n );\n const [waitingAutoExpanded, setWaitingAutoExpanded] = useState(false);\n const previousRef = useRef({ expansionKey, phase });\n\n useEffect(() => {\n setUserExpanded(rememberedExpansions.get(expansionKey));\n setWaitingAutoExpanded(false);\n }, [expansionKey]);\n\n useEffect(() => {\n const previous = previousRef.current;\n if (expandWhileWaiting && previous.expansionKey === expansionKey) {\n if (previous.phase !== 'waiting' && phase === 'waiting') {\n setWaitingAutoExpanded(true);\n } else if (previous.phase === 'waiting' && phase !== 'waiting') {\n setWaitingAutoExpanded(false);\n }\n }\n previousRef.current = { expansionKey, phase };\n }, [expansionKey, phase, expandWhileWaiting]);\n\n const expanded =\n waitingAutoExpanded || (userExpanded ?? (expandWhileWaiting && phase === 'waiting'));\n const toggleExpanded = () => {\n const next = !expanded;\n setWaitingAutoExpanded(false);\n rememberExpansion(expansionKey, next);\n setUserExpanded(next);\n };\n\n return { expanded, toggleExpanded };\n}\n\n// ─── Pieces ────────────────────────────────────────────────────────────\n\nfunction PulsingDots() {\n return (\n <span className=\"inline-flex items-center gap-[3px]\" aria-hidden=\"true\">\n <span className=\"size-[5px] rounded-full bg-foreground/80 animate-[aui-sg-pulse-dot_1.4s_ease-in-out_infinite]\" />\n <span className=\"size-[5px] rounded-full bg-foreground/80 animate-[aui-sg-pulse-dot_1.4s_ease-in-out_0.2s_infinite]\" />\n <span className=\"size-[5px] rounded-full bg-foreground/80 animate-[aui-sg-pulse-dot_1.4s_ease-in-out_0.4s_infinite]\" />\n <style>{`\n @keyframes aui-sg-pulse-dot {\n 0%, 80%, 100% { opacity: 0.2; transform: scale(0.8); }\n 40% { opacity: 1; transform: scale(1); }\n }\n @keyframes aui-sg-shimmer-bar {\n 0% { transform: translateX(-100%); }\n 100% { transform: translateX(400%); }\n }\n `}</style>\n </span>\n );\n}\n\nfunction StepIcon({ item }: { item: ActivityItem }) {\n if (item.kind === 'reasoning') {\n return (\n <Brain\n aria-hidden=\"true\"\n className={cn(\n 'mt-[1px] size-3.5 shrink-0',\n item.state === 'running' ? 'text-blue-500 motion-safe:animate-pulse' : 'text-muted-foreground',\n )}\n />\n );\n }\n switch (item.state) {\n case 'complete':\n return <Check aria-hidden=\"true\" className=\"mt-[1px] size-3.5 shrink-0 text-emerald-500\" />;\n case 'rejected':\n return <X aria-hidden=\"true\" className=\"mt-[1px] size-3.5 shrink-0 text-muted-foreground\" />;\n case 'cancelled':\n return <Circle aria-hidden=\"true\" className=\"mt-[1px] size-3.5 shrink-0 text-muted-foreground\" />;\n case 'error':\n return <AlertCircle aria-hidden=\"true\" className=\"mt-[1px] size-3.5 shrink-0 text-destructive\" />;\n case 'waiting':\n return <Circle aria-hidden=\"true\" className=\"mt-[1px] size-3.5 shrink-0 text-amber-500\" />;\n case 'paused':\n return <Pause aria-hidden=\"true\" className=\"mt-[1px] size-3.5 shrink-0 text-amber-600\" />;\n case 'running':\n return (\n <span className=\"flex size-3.5 shrink-0 items-center justify-center\" aria-hidden=\"true\">\n <span className=\"size-1.5 rounded-full bg-blue-500 motion-safe:animate-pulse\" />\n </span>\n );\n }\n}\n\nfunction SummaryIcon({ timeline }: { timeline: readonly ActivityItem[] }) {\n const tools = timeline.filter((item) => item.kind === 'tool');\n if (tools.some((item) => item.state === 'error' || item.state === 'rejected')) {\n return <X aria-hidden=\"true\" className=\"size-3.5 shrink-0 text-muted-foreground\" />;\n }\n if (tools.some((item) => item.state === 'cancelled')) {\n return <Circle aria-hidden=\"true\" className=\"size-3.5 shrink-0 text-muted-foreground\" />;\n }\n if (tools.some((item) => item.state === 'paused')) {\n return <Pause aria-hidden=\"true\" className=\"size-3.5 shrink-0 text-amber-600\" />;\n }\n return <Check aria-hidden=\"true\" className=\"size-3.5 shrink-0 text-emerald-500\" />;\n}\n\n// ─── Card ──────────────────────────────────────────────────────────────\n\nexport interface SuperGroupingCardProps {\n /** Tool UIs to render inside the details panel, by tool name (registered tool UIs still apply). */\n toolUIs?: Record<string, ToolCallMessagePartComponent>;\n /** Fallback for tools without a UI; the SDK's `ToolFallback` by default. */\n ToolFallback?: ComponentType<ToolCallMessagePartProps>;\n /** Text renderer for the details panel. */\n TextComponent: TextMessagePartComponent;\n /** Reasoning renderer for the details panel. */\n ReasoningComponent?: ReasoningMessagePartComponent;\n /** Per-toolkit block inside the details panel; the SDK's `CollapsibleGroup` by default. */\n GroupComponent?: ComponentType<CollapsibleGroupProps>;\n /** Toolkit lookup driving the per-toolkit sub-grouping; the SDK's static map by default. */\n getToolGroupKey?: GetToolGroupKey;\n /** A complete grouping function, when the host builds its own (overrides `getToolGroupKey`). */\n groupingFunction?: GroupingFunction;\n /** Tools whose unresolved call means the turn is waiting on the person (see `buildActivityTimeline`). */\n waitingTools?: ReadonlySet<string>;\n /** Tools whose result is a relayed application payload (see `buildActivityTimeline`). */\n passThroughTools?: ReadonlySet<string>;\n /**\n * Host assertion that the turn is waiting on the person. The SDK derives waiting\n * from `requires-action` and waiting tools itself; no in-repo host passes this.\n */\n waitingForInput?: boolean;\n /** Names tools the shared registry has no entry for (Olympus's tool catalog). */\n resolveToolDisplayName?: (toolName: string) => string | undefined;\n /** Key the disclosure choice is remembered under; the message id by default. */\n expansionKey?: string;\n /** Open the details once when the turn starts waiting on the person. */\n expandWhileWaiting?: boolean;\n /** How many latest steps the live list shows before folding the rest into \"N earlier steps\". */\n maxVisibleSteps?: number;\n /** Extra segments after the collapsed summary (\"1m 23s\", \"12.4k tokens\"), joined with \" · \". */\n summaryDetails?: readonly string[];\n /** Header controls beside the title (a stop button while running, a changes button once done). */\n renderHeaderActions?: (context: {\n phase: ActivityPhase;\n messageContent: readonly ThreadAssistantMessagePart[];\n }) => ReactNode;\n /** A line under the header while the turn is live (an elapsed timer). */\n renderRunningMeta?: (context: { phase: ActivityPhase }) => ReactNode;\n className?: string;\n classNames?: { root?: string; details?: string };\n}\n\n/**\n * The grouped (\"conversational\") view of an assistant turn: one \"Athena is\n * working\" card while the turn runs, listing its latest steps; a collapsed\n * \"Used N tools\" summary once it ends, with the full tool cards behind a\n * details disclosure. The answer itself renders below the card\n * (`SuperGroupingFinalText`). Shared by the SDK's `AthenaChat`, Olympus, and\n * the Chrome extension, which supply their own text/tool renderers and the\n * host-specific controls through the slots.\n *\n * The details panel stays mounted (visually hidden) while the turn is live so\n * the tool UIs inside run their effects — an asset-streaming card's follow\n * mode must not wait for \"Show details\".\n *\n * Selector discipline: raw reads only (`message.content`, `message.status`,\n * `message.id`); every derivation runs in `useMemo` — a selector that returned\n * a fresh array would tear through `useSyncExternalStore`.\n */\nexport const SuperGroupingCard = memo(function SuperGroupingCard({\n toolUIs,\n ToolFallback: ToolFallbackComponent = ToolFallback,\n TextComponent,\n ReasoningComponent,\n GroupComponent = CollapsibleGroup,\n getToolGroupKey = defaultGetToolGroupKey,\n groupingFunction,\n waitingTools,\n passThroughTools,\n waitingForInput = false,\n resolveToolDisplayName,\n expansionKey: expansionKeyProp,\n expandWhileWaiting = false,\n maxVisibleSteps = DEFAULT_MAX_VISIBLE_STEPS,\n summaryDetails,\n renderHeaderActions,\n renderRunningMeta,\n className,\n classNames,\n}: SuperGroupingCardProps) {\n const messageId = useAuiState((s) => s.message.id);\n const messageContent = useAuiState((s) =>\n s.message.role === 'assistant' ? s.message.content : EMPTY_CONTENT,\n );\n const messageStatus = useAuiState((s) => s.message.status);\n\n const timeline = useMemo(() => {\n const items = buildActivityTimeline(messageContent, messageStatus, {\n waitingTools,\n passThroughTools,\n });\n return items.length > 0 ? items : EMPTY_TIMELINE;\n }, [messageContent, messageStatus, waitingTools, passThroughTools]);\n const phase = useMemo(\n () => resolveActivityPhase(messageStatus, timeline, { waitingForInput }),\n [messageStatus, timeline, waitingForInput],\n );\n const toolCount = countActivityTools(timeline);\n\n const { expanded, toggleExpanded } = useActivityExpansion({\n expansionKey: expansionKeyProp ?? messageId,\n phase,\n expandWhileWaiting,\n });\n const generatedId = useId().replace(/[^A-Za-z0-9_-]/g, '');\n const detailsPanelId = `aui-sg-details-${generatedId}`;\n const statusId = `aui-sg-status-${generatedId}`;\n const primaryDisclosureRef = useRef<HTMLButtonElement>(null);\n\n const grouping = useMemo(\n () => excludeFinalTextFromGroups(groupingFunction ?? createToolBasedGroupingFunction(getToolGroupKey)),\n [groupingFunction, getToolGroupKey],\n );\n const groupingContext = useMemo(() => ({ groupingFunction: grouping }), [grouping]);\n const components = useMemo(\n () => ({\n tools: { ...(toolUIs ? { by_name: toolUIs } : {}), Fallback: ToolFallbackComponent },\n Text: TextComponent,\n ...(ReasoningComponent ? { Reasoning: ReasoningComponent } : {}),\n Group: GroupComponent,\n }),\n [toolUIs, ToolFallbackComponent, TextComponent, ReasoningComponent, GroupComponent],\n );\n\n const isActive = phase === 'running' || phase === 'waiting';\n const hasActivity = timeline.length > 0 || phase !== 'complete';\n if (!hasActivity) return null;\n\n const detailsMounted = isActive || expanded;\n const visibleItems = timeline.slice(-Math.max(1, maxVisibleSteps));\n const hiddenCount = timeline.length - visibleItems.length;\n const latestStatus =\n phase === 'waiting'\n ? 'Waiting for your input'\n : phase === 'error'\n ? 'Something went wrong'\n : timeline.length > 0\n ? getActivityItemLabel(timeline[timeline.length - 1], resolveToolDisplayName)\n : 'Planning approach';\n const summary = [getActivitySummary(timeline), ...(summaryDetails ?? [])].join(' · ');\n const headerActions = renderHeaderActions?.({ phase, messageContent });\n const runningMeta = isActive ? renderRunningMeta?.({ phase }) : null;\n\n const hideDetails = () => {\n toggleExpanded();\n queueMicrotask(() => primaryDisclosureRef.current?.focus());\n };\n\n return (\n <section\n data-slot=\"super-grouping-card\"\n data-phase={phase}\n data-tool-count={toolCount}\n className={cn(\n 'my-3 min-w-0 overflow-hidden rounded-2xl border transition-colors duration-200',\n phase === 'error'\n ? 'border-destructive/30 bg-destructive/5'\n : phase === 'waiting'\n ? 'border-amber-200 bg-amber-50/40 dark:border-amber-500/30 dark:bg-amber-500/10'\n : 'border-border/60 bg-muted/10',\n className,\n classNames?.root,\n )}\n aria-busy={phase === 'running' ? 'true' : 'false'}\n aria-describedby={statusId}\n >\n {phase === 'complete' ? (\n <div className=\"flex w-full items-center\">\n <button\n ref={primaryDisclosureRef}\n type=\"button\"\n onClick={toggleExpanded}\n aria-expanded={expanded}\n aria-controls={detailsPanelId}\n className=\"flex min-w-0 flex-1 items-center gap-2 px-4 py-3 text-left transition-colors hover:bg-muted/30 focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-inset focus-visible:ring-ring\"\n >\n <SummaryIcon timeline={timeline} />\n <span className=\"min-w-0 flex-1 truncate text-[12px] text-muted-foreground\">{summary}</span>\n </button>\n <div className=\"flex shrink-0 items-center gap-1 pr-3 pl-1\">\n {headerActions}\n <button\n type=\"button\"\n onClick={toggleExpanded}\n aria-label={expanded ? 'Hide run details' : 'Show run details'}\n aria-expanded={expanded}\n aria-controls={detailsPanelId}\n className=\"flex items-center justify-center rounded-md p-1 text-muted-foreground transition-colors hover:bg-muted/40 hover:text-foreground\"\n >\n {expanded ? <ChevronDown className=\"size-3.5\" /> : <ChevronRight className=\"size-3.5\" />}\n </button>\n </div>\n </div>\n ) : (\n <>\n <div className=\"flex min-w-0 items-center justify-between gap-2 px-4 pt-4 pb-2\">\n <div className=\"flex min-w-0 items-center gap-2\">\n <h3 className=\"truncate text-[13px] font-semibold text-foreground\">\n {phase === 'error'\n ? 'Something went wrong'\n : phase === 'waiting'\n ? 'Waiting for you'\n : 'Athena is working'}\n </h3>\n {phase === 'running' ? <PulsingDots /> : null}\n </div>\n {headerActions ? (\n <div className=\"flex shrink-0 items-center gap-1\">{headerActions}</div>\n ) : null}\n </div>\n\n {runningMeta ? <div className=\"px-4 pb-1\">{runningMeta}</div> : null}\n\n {phase === 'running' ? (\n <div className=\"px-4 pb-1\">\n <div className=\"h-[2px] w-full overflow-hidden rounded-full bg-muted/40\">\n <div className=\"h-full w-1/3 rounded-full bg-gradient-to-r from-blue-400 to-indigo-400 animate-[aui-sg-shimmer-bar_1.5s_ease-in-out_infinite] motion-reduce:animate-none\" />\n </div>\n </div>\n ) : null}\n\n {visibleItems.length > 0 ? (\n <ul className=\"space-y-1 px-4 pt-1.5 pb-1\" aria-label=\"Work status updates\">\n {hiddenCount > 0 ? (\n <li className=\"pl-[22px] text-[11px] text-muted-foreground/70\">\n {hiddenCount} earlier {hiddenCount === 1 ? 'step' : 'steps'}\n </li>\n ) : null}\n {visibleItems.map((item, index) => (\n <li\n key={`${item.kind}-${hiddenCount + index}`}\n className=\"flex min-w-0 items-start gap-2 text-[12px]\"\n >\n <StepIcon item={item} />\n {item.kind === 'reasoning' ? (\n item.text.trim() ? (\n <span className=\"line-clamp-2 min-w-0 flex-1 italic leading-relaxed text-muted-foreground\">\n {item.text}\n </span>\n ) : (\n <span className=\"shimmer min-w-0 flex-1 leading-relaxed text-muted-foreground\">\n Thinking…\n </span>\n )\n ) : (\n <span\n className={cn(\n 'min-w-0 flex-1 truncate leading-relaxed',\n item.state === 'complete' ? 'text-muted-foreground/70' : 'text-foreground/80',\n )}\n >\n {getActivityItemLabel(item, resolveToolDisplayName)}\n </span>\n )}\n </li>\n ))}\n </ul>\n ) : (\n <div className=\"px-4 pt-1 pb-2\">\n <span className=\"shimmer text-[12px] text-muted-foreground\">Planning approach...</span>\n </div>\n )}\n\n <div className=\"px-4 pb-3 pt-0.5\">\n <button\n ref={primaryDisclosureRef}\n type=\"button\"\n onClick={toggleExpanded}\n aria-expanded={expanded}\n aria-controls={detailsPanelId}\n className=\"flex items-center gap-1 rounded px-1 py-0.5 text-[11px] font-medium text-muted-foreground transition-colors hover:text-foreground focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring\"\n >\n {expanded ? <ChevronDown className=\"size-3\" /> : <ChevronRight className=\"size-3\" />}\n {expanded ? 'Hide details' : 'Show details'}\n </button>\n </div>\n </>\n )}\n\n <output id={statusId} aria-live=\"polite\" aria-atomic=\"true\" className=\"sr-only\">\n {latestStatus}\n </output>\n\n {detailsMounted ? (\n <div\n id={detailsPanelId}\n role=\"region\"\n aria-label=\"Run details\"\n hidden={!expanded}\n className={cn(\n 'space-y-2 overflow-hidden border-t border-border/60 bg-background/80 px-4 py-4',\n classNames?.details,\n )}\n >\n <SuperGroupingProvider value={groupingContext}>\n <MessagePrimitive.Unstable_PartsGrouped groupingFunction={grouping} components={components} />\n </SuperGroupingProvider>\n <button\n type=\"button\"\n onClick={hideDetails}\n aria-controls={detailsPanelId}\n aria-expanded=\"true\"\n className=\"mx-auto mt-3 flex items-center gap-1 rounded-md px-3 py-1.5 text-[11px] font-medium text-muted-foreground transition-colors hover:bg-muted/40 hover:text-foreground focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring\"\n >\n <ChevronUp className=\"size-3\" />\n Hide details\n </button>\n </div>\n ) : null}\n </section>\n );\n});\n\n/**\n * The turn's visible answer, rendered below the card: the text after the last\n * tool call (all of it when the turn called no tools), streaming while the\n * turn is live so the person reads the answer as it arrives.\n */\nexport const SuperGroupingFinalText = memo(function SuperGroupingFinalText({\n TextComponent,\n}: {\n TextComponent: TextMessagePartComponent;\n}) {\n const messageContent = useAuiState((s) =>\n s.message.role === 'assistant' ? s.message.content : EMPTY_CONTENT,\n );\n const statusType = useAuiState((s) => s.message.status?.type);\n const finalText = useMemo(() => getFinalText(messageContent), [messageContent]);\n\n if (!finalText) return null;\n return (\n <TextComponent\n type=\"text\"\n text={finalText}\n status={\n statusType === 'running' || statusType === 'requires-action'\n ? { type: 'running' }\n : { type: 'complete' }\n }\n />\n );\n});\n"],"names":["useState","useRef","useEffect","jsxs","jsx","Brain","cn","Check","X","Circle","AlertCircle","Pause","memo","SuperGroupingCard","ToolFallback","CollapsibleGroup","defaultGetToolGroupKey","groupingFunction","useAuiState","useMemo","buildActivityTimeline","resolveActivityPhase","countActivityTools","useId","excludeFinalTextFromGroups","createToolBasedGroupingFunction","getActivityItemLabel","getActivitySummary","ChevronDown","ChevronRight","Fragment","SuperGroupingProvider","MessagePrimitive","ChevronUp","SuperGroupingFinalText","getFinalText"],"mappings":";;;;;;;;;;;;AAgDA,MAAM,4BAA4B;AAClC,MAAM,4BAA4B;AAClC,MAAM,iBAAiC,CAAA;AACvC,MAAM,gBAAuD,CAAA;AAU7D,MAAM,2CAA2B,IAAA;AAEjC,SAAS,kBAAkB,KAAa,UAAyB;AAC/D,uBAAqB,OAAO,GAAG;AAC/B,uBAAqB,IAAI,KAAK,QAAQ;AACtC,SAAO,qBAAqB,OAAO,2BAA2B;AAC5D,UAAM,YAAY,qBAAqB,KAAA,EAAO,OAAO;AACrD,QAAI,cAAc,OAAW;AAC7B,yBAAqB,OAAO,SAAS;AAAA,EACvC;AACF;AAEO,SAAS,oCAA0C;AACxD,uBAAqB,MAAA;AACvB;AAOO,SAAS,qBAAqB;AAAA,EACnC;AAAA,EACA;AAAA,EACA,qBAAqB;AACvB,GAIG;AACD,QAAM,CAAC,cAAc,eAAe,IAAIA,MAAAA;AAAAA,IAA8B,MACpE,qBAAqB,IAAI,YAAY;AAAA,EAAA;AAEvC,QAAM,CAAC,qBAAqB,sBAAsB,IAAIA,MAAAA,SAAS,KAAK;AACpE,QAAM,cAAcC,MAAAA,OAAO,EAAE,cAAc,OAAO;AAElDC,QAAAA,UAAU,MAAM;AACd,oBAAgB,qBAAqB,IAAI,YAAY,CAAC;AACtD,2BAAuB,KAAK;AAAA,EAC9B,GAAG,CAAC,YAAY,CAAC;AAEjBA,QAAAA,UAAU,MAAM;AACd,UAAM,WAAW,YAAY;AAC7B,QAAI,sBAAsB,SAAS,iBAAiB,cAAc;AAChE,UAAI,SAAS,UAAU,aAAa,UAAU,WAAW;AACvD,+BAAuB,IAAI;AAAA,MAC7B,WAAW,SAAS,UAAU,aAAa,UAAU,WAAW;AAC9D,+BAAuB,KAAK;AAAA,MAC9B;AAAA,IACF;AACA,gBAAY,UAAU,EAAE,cAAc,MAAA;AAAA,EACxC,GAAG,CAAC,cAAc,OAAO,kBAAkB,CAAC;AAE5C,QAAM,WACJ,wBAAwB,iBAAiB,sBAAsB,UAAU;AAC3E,QAAM,iBAAiB,MAAM;AAC3B,UAAM,OAAO,CAAC;AACd,2BAAuB,KAAK;AAC5B,sBAAkB,cAAc,IAAI;AACpC,oBAAgB,IAAI;AAAA,EACtB;AAEA,SAAO,EAAE,UAAU,eAAA;AACrB;AAIA,SAAS,cAAc;AACrB,SACEC,2BAAAA,KAAC,QAAA,EAAK,WAAU,sCAAqC,eAAY,QAC/D,UAAA;AAAA,IAAAC,2BAAAA,IAAC,QAAA,EAAK,WAAU,gGAAA,CAAgG;AAAA,IAChHA,2BAAAA,IAAC,QAAA,EAAK,WAAU,qGAAA,CAAqG;AAAA,IACrHA,2BAAAA,IAAC,QAAA,EAAK,WAAU,qGAAA,CAAqG;AAAA,mCACpH,SAAA,EAAO,UAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,QAAA,CASN;AAAA,EAAA,GACJ;AAEJ;AAEA,SAAS,SAAS,EAAE,QAAgC;AAClD,MAAI,KAAK,SAAS,aAAa;AAC7B,WACEA,2BAAAA;AAAAA,MAACC,YAAAA;AAAAA,MAAA;AAAA,QACC,eAAY;AAAA,QACZ,WAAWC,OAAAA;AAAAA,UACT;AAAA,UACA,KAAK,UAAU,YAAY,4CAA4C;AAAA,QAAA;AAAA,MACzE;AAAA,IAAA;AAAA,EAGN;AACA,UAAQ,KAAK,OAAA;AAAA,IACX,KAAK;AACH,aAAOF,2BAAAA,IAACG,YAAAA,OAAA,EAAM,eAAY,QAAO,WAAU,+CAA8C;AAAA,IAC3F,KAAK;AACH,aAAOH,2BAAAA,IAACI,YAAAA,GAAA,EAAE,eAAY,QAAO,WAAU,oDAAmD;AAAA,IAC5F,KAAK;AACH,aAAOJ,2BAAAA,IAACK,YAAAA,QAAA,EAAO,eAAY,QAAO,WAAU,oDAAmD;AAAA,IACjG,KAAK;AACH,aAAOL,2BAAAA,IAACM,YAAAA,aAAA,EAAY,eAAY,QAAO,WAAU,+CAA8C;AAAA,IACjG,KAAK;AACH,aAAON,2BAAAA,IAACK,YAAAA,QAAA,EAAO,eAAY,QAAO,WAAU,6CAA4C;AAAA,IAC1F,KAAK;AACH,aAAOL,2BAAAA,IAACO,YAAAA,OAAA,EAAM,eAAY,QAAO,WAAU,6CAA4C;AAAA,IACzF,KAAK;AACH,aACEP,2BAAAA,IAAC,QAAA,EAAK,WAAU,sDAAqD,eAAY,QAC/E,UAAAA,2BAAAA,IAAC,QAAA,EAAK,WAAU,8DAAA,CAA8D,EAAA,CAChF;AAAA,EAAA;AAGR;AAEA,SAAS,YAAY,EAAE,YAAmD;AACxE,QAAM,QAAQ,SAAS,OAAO,CAAC,SAAS,KAAK,SAAS,MAAM;AAC5D,MAAI,MAAM,KAAK,CAAC,SAAS,KAAK,UAAU,WAAW,KAAK,UAAU,UAAU,GAAG;AAC7E,WAAOA,2BAAAA,IAACI,YAAAA,GAAA,EAAE,eAAY,QAAO,WAAU,2CAA0C;AAAA,EACnF;AACA,MAAI,MAAM,KAAK,CAAC,SAAS,KAAK,UAAU,WAAW,GAAG;AACpD,WAAOJ,2BAAAA,IAACK,YAAAA,QAAA,EAAO,eAAY,QAAO,WAAU,2CAA0C;AAAA,EACxF;AACA,MAAI,MAAM,KAAK,CAAC,SAAS,KAAK,UAAU,QAAQ,GAAG;AACjD,WAAOL,2BAAAA,IAACO,YAAAA,OAAA,EAAM,eAAY,QAAO,WAAU,oCAAmC;AAAA,EAChF;AACA,SAAOP,2BAAAA,IAACG,YAAAA,OAAA,EAAM,eAAY,QAAO,WAAU,sCAAqC;AAClF;AAkEO,MAAM,oBAAoBK,MAAAA,KAAK,SAASC,mBAAkB;AAAA,EAC/D;AAAA,EACA,cAAc,wBAAwBC,aAAAA;AAAAA,EACtC;AAAA,EACA;AAAA,EACA,iBAAiBC,iBAAAA;AAAAA,EACjB,kBAAkBC,WAAAA;AAAAA,EAAA,kBAClBC;AAAAA,EACA;AAAA,EACA;AAAA,EACA,kBAAkB;AAAA,EAClB;AAAA,EACA,cAAc;AAAA,EACd,qBAAqB;AAAA,EACrB,kBAAkB;AAAA,EAClB;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,GAA2B;AACzB,QAAM,YAAYC,QAAAA,YAAY,CAAC,MAAM,EAAE,QAAQ,EAAE;AACjD,QAAM,iBAAiBA,QAAAA;AAAAA,IAAY,CAAC,MAClC,EAAE,QAAQ,SAAS,cAAc,EAAE,QAAQ,UAAU;AAAA,EAAA;AAEvD,QAAM,gBAAgBA,QAAAA,YAAY,CAAC,MAAM,EAAE,QAAQ,MAAM;AAEzD,QAAM,WAAWC,MAAAA,QAAQ,MAAM;AAC7B,UAAM,QAAQC,iBAAAA,sBAAsB,gBAAgB,eAAe;AAAA,MACjE;AAAA,MACA;AAAA,IAAA,CACD;AACD,WAAO,MAAM,SAAS,IAAI,QAAQ;AAAA,EACpC,GAAG,CAAC,gBAAgB,eAAe,cAAc,gBAAgB,CAAC;AAClE,QAAM,QAAQD,MAAAA;AAAAA,IACZ,MAAME,iBAAAA,qBAAqB,eAAe,UAAU,EAAE,iBAAiB;AAAA,IACvE,CAAC,eAAe,UAAU,eAAe;AAAA,EAAA;AAE3C,QAAM,YAAYC,iBAAAA,mBAAmB,QAAQ;AAE7C,QAAM,EAAE,UAAU,eAAA,IAAmB,qBAAqB;AAAA,IACxD,cAAc,oBAAoB;AAAA,IAClC;AAAA,IACA;AAAA,EAAA,CACD;AACD,QAAM,cAAcC,MAAAA,MAAA,EAAQ,QAAQ,mBAAmB,EAAE;AACzD,QAAM,iBAAiB,kBAAkB,WAAW;AACpD,QAAM,WAAW,iBAAiB,WAAW;AAC7C,QAAM,uBAAuBtB,MAAAA,OAA0B,IAAI;AAE3D,QAAM,WAAWkB,MAAAA;AAAAA,IACf,MAAMK,4CAA2BP,sBAAoBQ,iBAAAA,gCAAgC,eAAe,CAAC;AAAA,IACrG,CAACR,oBAAkB,eAAe;AAAA,EAAA;AAEpC,QAAM,kBAAkBE,MAAAA,QAAQ,OAAO,EAAE,kBAAkB,aAAa,CAAC,QAAQ,CAAC;AAClF,QAAM,aAAaA,MAAAA;AAAAA,IACjB,OAAO;AAAA,MACL,OAAO,EAAE,GAAI,UAAU,EAAE,SAAS,YAAY,CAAA,GAAK,UAAU,sBAAA;AAAA,MAC7D,MAAM;AAAA,MACN,GAAI,qBAAqB,EAAE,WAAW,mBAAA,IAAuB,CAAA;AAAA,MAC7D,OAAO;AAAA,IAAA;AAAA,IAET,CAAC,SAAS,uBAAuB,eAAe,oBAAoB,cAAc;AAAA,EAAA;AAGpF,QAAM,WAAW,UAAU,aAAa,UAAU;AAClD,QAAM,cAAc,SAAS,SAAS,KAAK,UAAU;AACrD,MAAI,CAAC,YAAa,QAAO;AAEzB,QAAM,iBAAiB,YAAY;AACnC,QAAM,eAAe,SAAS,MAAM,CAAC,KAAK,IAAI,GAAG,eAAe,CAAC;AACjE,QAAM,cAAc,SAAS,SAAS,aAAa;AACnD,QAAM,eACJ,UAAU,YACN,2BACA,UAAU,UACR,yBACA,SAAS,SAAS,IAChBO,iBAAAA,qBAAqB,SAAS,SAAS,SAAS,CAAC,GAAG,sBAAsB,IAC1E;AACV,QAAM,UAAU,CAACC,iBAAAA,mBAAmB,QAAQ,GAAG,GAAI,kBAAkB,CAAA,CAAG,EAAE,KAAK,KAAK;AACpF,QAAM,gBAAgB,2DAAsB,EAAE,OAAO;AACrD,QAAM,cAAc,WAAW,uDAAoB,EAAE,MAAA,KAAW;AAEhE,QAAM,cAAc,MAAM;AACxB,mBAAA;AACA,mBAAe,MAAA;;AAAM,wCAAqB,YAArB,mBAA8B;AAAA,KAAO;AAAA,EAC5D;AAEA,SACExB,2BAAAA;AAAAA,IAAC;AAAA,IAAA;AAAA,MACC,aAAU;AAAA,MACV,cAAY;AAAA,MACZ,mBAAiB;AAAA,MACjB,WAAWG,OAAAA;AAAAA,QACT;AAAA,QACA,UAAU,UACN,2CACA,UAAU,YACR,kFACA;AAAA,QACN;AAAA,QACA,yCAAY;AAAA,MAAA;AAAA,MAEd,aAAW,UAAU,YAAY,SAAS;AAAA,MAC1C,oBAAkB;AAAA,MAEjB,UAAA;AAAA,QAAA,UAAU,aACTH,gCAAC,OAAA,EAAI,WAAU,4BACb,UAAA;AAAA,UAAAA,2BAAAA;AAAAA,YAAC;AAAA,YAAA;AAAA,cACC,KAAK;AAAA,cACL,MAAK;AAAA,cACL,SAAS;AAAA,cACT,iBAAe;AAAA,cACf,iBAAe;AAAA,cACf,WAAU;AAAA,cAEV,UAAA;AAAA,gBAAAC,+BAAC,eAAY,UAAoB;AAAA,gBACjCA,2BAAAA,IAAC,QAAA,EAAK,WAAU,6DAA6D,UAAA,QAAA,CAAQ;AAAA,cAAA;AAAA,YAAA;AAAA,UAAA;AAAA,UAEvFD,2BAAAA,KAAC,OAAA,EAAI,WAAU,8CACZ,UAAA;AAAA,YAAA;AAAA,YACDC,2BAAAA;AAAAA,cAAC;AAAA,cAAA;AAAA,gBACC,MAAK;AAAA,gBACL,SAAS;AAAA,gBACT,cAAY,WAAW,qBAAqB;AAAA,gBAC5C,iBAAe;AAAA,gBACf,iBAAe;AAAA,gBACf,WAAU;AAAA,gBAET,UAAA,0CAAYwB,YAAAA,aAAA,EAAY,WAAU,YAAW,IAAKxB,2BAAAA,IAACyB,YAAAA,cAAA,EAAa,WAAU,WAAA,CAAW;AAAA,cAAA;AAAA,YAAA;AAAA,UACxF,EAAA,CACF;AAAA,QAAA,EAAA,CACF,IAEA1B,2BAAAA,KAAA2B,WAAAA,UAAA,EACE,UAAA;AAAA,UAAA3B,2BAAAA,KAAC,OAAA,EAAI,WAAU,kEACb,UAAA;AAAA,YAAAA,2BAAAA,KAAC,OAAA,EAAI,WAAU,mCACb,UAAA;AAAA,cAAAC,2BAAAA,IAAC,MAAA,EAAG,WAAU,sDACX,UAAA,UAAU,UACP,yBACA,UAAU,YACR,oBACA,oBAAA,CACR;AAAA,cACC,UAAU,YAAYA,2BAAAA,IAAC,aAAA,CAAA,CAAY,IAAK;AAAA,YAAA,GAC3C;AAAA,YACC,gBACCA,2BAAAA,IAAC,OAAA,EAAI,WAAU,oCAAoC,yBAAc,IAC/D;AAAA,UAAA,GACN;AAAA,UAEC,cAAcA,2BAAAA,IAAC,OAAA,EAAI,WAAU,aAAa,uBAAY,IAAS;AAAA,UAE/D,UAAU,YACTA,2BAAAA,IAAC,OAAA,EAAI,WAAU,aACb,UAAAA,2BAAAA,IAAC,OAAA,EAAI,WAAU,2DACb,yCAAC,OAAA,EAAI,WAAU,4JAA2J,EAAA,CAC5K,GACF,IACE;AAAA,UAEH,aAAa,SAAS,IACrBD,2BAAAA,KAAC,QAAG,WAAU,8BAA6B,cAAW,uBACnD,UAAA;AAAA,YAAA,cAAc,IACbA,gCAAC,MAAA,EAAG,WAAU,kDACX,UAAA;AAAA,cAAA;AAAA,cAAY;AAAA,cAAU,gBAAgB,IAAI,SAAS;AAAA,YAAA,EAAA,CACtD,IACE;AAAA,YACH,aAAa,IAAI,CAAC,MAAM,UACvBA,2BAAAA;AAAAA,cAAC;AAAA,cAAA;AAAA,gBAEC,WAAU;AAAA,gBAEV,UAAA;AAAA,kBAAAC,+BAAC,YAAS,MAAY;AAAA,kBACrB,KAAK,SAAS,cACb,KAAK,KAAK,KAAA,IACRA,+BAAC,QAAA,EAAK,WAAU,4EACb,UAAA,KAAK,MACR,IAEAA,2BAAAA,IAAC,UAAK,WAAU,gEAA+D,uBAE/E,IAGFA,2BAAAA;AAAAA,oBAAC;AAAA,oBAAA;AAAA,sBACC,WAAWE,OAAAA;AAAAA,wBACT;AAAA,wBACA,KAAK,UAAU,aAAa,6BAA6B;AAAA,sBAAA;AAAA,sBAG1D,UAAAoB,iBAAAA,qBAAqB,MAAM,sBAAsB;AAAA,oBAAA;AAAA,kBAAA;AAAA,gBACpD;AAAA,cAAA;AAAA,cAtBG,GAAG,KAAK,IAAI,IAAI,cAAc,KAAK;AAAA,YAAA,CAyB3C;AAAA,UAAA,EAAA,CACH,IAEAtB,2BAAAA,IAAC,OAAA,EAAI,WAAU,kBACb,yCAAC,QAAA,EAAK,WAAU,6CAA4C,UAAA,uBAAA,CAAoB,GAClF;AAAA,UAGFA,2BAAAA,IAAC,OAAA,EAAI,WAAU,oBACb,UAAAD,2BAAAA;AAAAA,YAAC;AAAA,YAAA;AAAA,cACC,KAAK;AAAA,cACL,MAAK;AAAA,cACL,SAAS;AAAA,cACT,iBAAe;AAAA,cACf,iBAAe;AAAA,cACf,WAAU;AAAA,cAET,UAAA;AAAA,gBAAA,WAAWC,2BAAAA,IAACwB,2BAAY,WAAU,SAAA,CAAS,IAAKxB,2BAAAA,IAACyB,YAAAA,cAAA,EAAa,WAAU,SAAA,CAAS;AAAA,gBACjF,WAAW,iBAAiB;AAAA,cAAA;AAAA,YAAA;AAAA,UAAA,EAC/B,CACF;AAAA,QAAA,GACF;AAAA,QAGFzB,2BAAAA,IAAC,UAAA,EAAO,IAAI,UAAU,aAAU,UAAS,eAAY,QAAO,WAAU,WACnE,UAAA,aAAA,CACH;AAAA,QAEC,iBACCD,2BAAAA;AAAAA,UAAC;AAAA,UAAA;AAAA,YACC,IAAI;AAAA,YACJ,MAAK;AAAA,YACL,cAAW;AAAA,YACX,QAAQ,CAAC;AAAA,YACT,WAAWG,OAAAA;AAAAA,cACT;AAAA,cACA,yCAAY;AAAA,YAAA;AAAA,YAGd,UAAA;AAAA,cAAAF,2BAAAA,IAAC2B,iBAAAA,uBAAA,EAAsB,OAAO,iBAC5B,UAAA3B,2BAAAA,IAAC4B,yBAAiB,uBAAjB,EAAuC,kBAAkB,UAAU,WAAA,CAAwB,EAAA,CAC9F;AAAA,cACA7B,2BAAAA;AAAAA,gBAAC;AAAA,gBAAA;AAAA,kBACC,MAAK;AAAA,kBACL,SAAS;AAAA,kBACT,iBAAe;AAAA,kBACf,iBAAc;AAAA,kBACd,WAAU;AAAA,kBAEV,UAAA;AAAA,oBAAAC,2BAAAA,IAAC6B,YAAAA,WAAA,EAAU,WAAU,SAAA,CAAS;AAAA,oBAAE;AAAA,kBAAA;AAAA,gBAAA;AAAA,cAAA;AAAA,YAElC;AAAA,UAAA;AAAA,QAAA,IAEA;AAAA,MAAA;AAAA,IAAA;AAAA,EAAA;AAGV,CAAC;AAOM,MAAM,yBAAyBrB,MAAAA,KAAK,SAASsB,wBAAuB;AAAA,EACzE;AACF,GAEG;AACD,QAAM,iBAAiBhB,QAAAA;AAAAA,IAAY,CAAC,MAClC,EAAE,QAAQ,SAAS,cAAc,EAAE,QAAQ,UAAU;AAAA,EAAA;AAEvD,QAAM,aAAaA,QAAAA,YAAY,CAAC;;AAAM,mBAAE,QAAQ,WAAV,mBAAkB;AAAA,GAAI;AAC5D,QAAM,YAAYC,MAAAA,QAAQ,MAAMgB,iBAAAA,aAAa,cAAc,GAAG,CAAC,cAAc,CAAC;AAE9E,MAAI,CAAC,UAAW,QAAO;AACvB,SACE/B,2BAAAA;AAAAA,IAAC;AAAA,IAAA;AAAA,MACC,MAAK;AAAA,MACL,MAAM;AAAA,MACN,QACE,eAAe,aAAa,eAAe,oBACvC,EAAE,MAAM,UAAA,IACR,EAAE,MAAM,WAAA;AAAA,IAAW;AAAA,EAAA;AAI/B,CAAC;;;;;"}
|
|
1
|
+
{"version":3,"file":"SuperGroupingCard.cjs","sources":["../../../src/chat/super-grouping/SuperGroupingCard.tsx"],"sourcesContent":["'use client';\n\nimport type {\n ReasoningMessagePartComponent,\n TextMessagePartComponent,\n ThreadAssistantMessagePart,\n ToolCallMessagePartComponent,\n ToolCallMessagePartProps,\n} from '@assistant-ui/react';\nimport { MessagePrimitive, useAuiState } from '@assistant-ui/react';\nimport { ChevronRight } from 'lucide-react';\nimport { type ComponentType, memo, type ReactNode, useEffect, useId, useMemo, useRef, useState } from 'react';\nimport { cn } from '../../lib/utils';\nimport { ToolFallback } from '../../tools/tool-fallback';\nimport {\n type ActivityItem,\n type ActivityPhase,\n buildActivityTimeline,\n countActivityTools,\n excludeFinalTextFromGroups,\n getActivitySummary,\n getFinalText,\n resolveActivityPhase,\n} from './activity-timeline';\nimport { CollapsibleGroup, type CollapsibleGroupProps, SuperGroupingProvider } from './CollapsibleGroup';\nimport { createToolBasedGroupingFunction, type GroupingFunction } from './grouping-function';\nimport { ToolTimeline } from './ToolTimeline';\nimport { toTimelineStep } from './timeline-step';\nimport { defaultGetToolGroupKey, type GetToolGroupKey } from './toolkit-map';\n\nconst DEFAULT_MAX_VISIBLE_STEPS = 3;\nconst MAX_REMEMBERED_EXPANSIONS = 200;\nconst EMPTY_TIMELINE: ActivityItem[] = [];\nconst EMPTY_CONTENT: readonly ThreadAssistantMessagePart[] = [];\n\n// ─── Disclosure memory ─────────────────────────────────────────────────\n\n/**\n * Session-local memory of which cards the user opened, keyed by the host's\n * expansion key (the message id by default; the Chrome extension keys by\n * thread + position so a streaming message keeps its choice when it receives\n * its stable id). Bounded so a long session cannot grow it without limit.\n */\nconst rememberedExpansions = new Map<string, boolean>();\n\nfunction rememberExpansion(key: string, expanded: boolean): void {\n rememberedExpansions.delete(key);\n rememberedExpansions.set(key, expanded);\n while (rememberedExpansions.size > MAX_REMEMBERED_EXPANSIONS) {\n const oldestKey = rememberedExpansions.keys().next().value;\n if (oldestKey === undefined) break;\n rememberedExpansions.delete(oldestKey);\n }\n}\n\nexport function resetRememberedExpansionsForTests(): void {\n rememberedExpansions.clear();\n}\n\n/**\n * The details disclosure: remembered per expansion key, and — when the host\n * opts in — opened once when the turn starts waiting on the person, so the\n * approval controls inside the details are visible without a click.\n */\nexport function useActivityExpansion({\n expansionKey,\n phase,\n expandWhileWaiting = false,\n}: {\n expansionKey: string;\n phase: ActivityPhase;\n expandWhileWaiting?: boolean;\n}) {\n const [userExpanded, setUserExpanded] = useState<boolean | undefined>(() =>\n rememberedExpansions.get(expansionKey),\n );\n const [waitingAutoExpanded, setWaitingAutoExpanded] = useState(false);\n const previousRef = useRef({ expansionKey, phase });\n\n useEffect(() => {\n setUserExpanded(rememberedExpansions.get(expansionKey));\n setWaitingAutoExpanded(false);\n }, [expansionKey]);\n\n useEffect(() => {\n const previous = previousRef.current;\n if (expandWhileWaiting && previous.expansionKey === expansionKey) {\n if (previous.phase !== 'waiting' && phase === 'waiting') {\n setWaitingAutoExpanded(true);\n } else if (previous.phase === 'waiting' && phase !== 'waiting') {\n setWaitingAutoExpanded(false);\n }\n }\n previousRef.current = { expansionKey, phase };\n }, [expansionKey, phase, expandWhileWaiting]);\n\n const expanded = waitingAutoExpanded || (userExpanded ?? (expandWhileWaiting && phase === 'waiting'));\n const toggleExpanded = () => {\n const next = !expanded;\n setWaitingAutoExpanded(false);\n rememberExpansion(expansionKey, next);\n setUserExpanded(next);\n };\n\n return { expanded, toggleExpanded };\n}\n\n// ─── Card ──────────────────────────────────────────────────────────────\n\nexport interface SuperGroupingCardProps {\n /** Tool UIs to render inside the details panel, by tool name (registered tool UIs still apply). */\n toolUIs?: Record<string, ToolCallMessagePartComponent>;\n /** Fallback for tools without a UI; the SDK's `ToolFallback` by default. */\n ToolFallback?: ComponentType<ToolCallMessagePartProps>;\n /** Text renderer for the details panel. */\n TextComponent: TextMessagePartComponent;\n /** Reasoning renderer for the details panel. */\n ReasoningComponent?: ReasoningMessagePartComponent;\n /** Per-toolkit block inside the details panel; the SDK's `CollapsibleGroup` by default. */\n GroupComponent?: ComponentType<CollapsibleGroupProps>;\n /** Toolkit lookup driving the per-toolkit sub-grouping; the SDK's static map by default. */\n getToolGroupKey?: GetToolGroupKey;\n /** A complete grouping function, when the host builds its own (overrides `getToolGroupKey`). */\n groupingFunction?: GroupingFunction;\n /** Tools whose unresolved call means the turn is waiting on the person (see `buildActivityTimeline`). */\n waitingTools?: ReadonlySet<string>;\n /** Tools whose result is a relayed application payload (see `buildActivityTimeline`). */\n passThroughTools?: ReadonlySet<string>;\n /**\n * Host assertion that the turn is waiting on the person. The SDK derives waiting\n * from `requires-action` and waiting tools itself; no in-repo host passes this.\n */\n waitingForInput?: boolean;\n /** Names tools the shared registry has no entry for (Olympus's tool catalog). */\n resolveToolDisplayName?: (toolName: string) => string | undefined;\n /** Key the disclosure choice is remembered under; the message id by default. */\n expansionKey?: string;\n /** Open the details once when the turn starts waiting on the person. */\n expandWhileWaiting?: boolean;\n /**\n * Keep the details panel mounted (hidden) while collapsed, so a host that\n * needs to find content inside it (a deep link into the run's steps) can.\n */\n mountDetails?: boolean;\n /** Latest steps shown when expanded; unresolved parallel calls always remain visible. */\n maxVisibleSteps?: number;\n /** Extra segments after the collapsed summary (\"1m 23s\", \"12.4k tokens\"), joined with \" · \". */\n summaryDetails?: readonly string[];\n /** Header controls beside the title (a stop button while running, a changes button once done). */\n renderHeaderActions?: (context: {\n phase: ActivityPhase;\n messageContent: readonly ThreadAssistantMessagePart[];\n }) => ReactNode;\n /** A line under the header while the turn is live (an elapsed timer). */\n renderRunningMeta?: (context: { phase: ActivityPhase }) => ReactNode;\n className?: string;\n classNames?: { root?: string; details?: string };\n}\n\n/**\n * The grouped (\"conversational\") view of an assistant turn: a compact current\n * action, an expandable tool timeline, and the original interactive tool UIs\n * behind a separate details disclosure. The answer itself renders below the card\n * (`SuperGroupingFinalText`). Shared by the SDK's `AthenaChat`, Olympus, and\n * the Chrome extension, which supply their own text/tool renderers and the\n * host-specific controls through the slots.\n *\n * The details panel stays mounted (visually hidden) while the turn is live so\n * the tool UIs inside run their effects — an asset-streaming card's follow\n * mode must not wait for \"Show details\".\n *\n * Selector discipline: raw reads only (`message.content`, `message.status`,\n * `message.id`); every derivation runs in `useMemo` — a selector that returned\n * a fresh array would tear through `useSyncExternalStore`.\n */\nexport const SuperGroupingCard = memo(function SuperGroupingCard({\n toolUIs,\n ToolFallback: ToolFallbackComponent = ToolFallback,\n TextComponent,\n ReasoningComponent,\n GroupComponent = CollapsibleGroup,\n getToolGroupKey = defaultGetToolGroupKey,\n groupingFunction,\n waitingTools,\n passThroughTools,\n waitingForInput = false,\n resolveToolDisplayName,\n expansionKey: expansionKeyProp,\n expandWhileWaiting = false,\n mountDetails = false,\n maxVisibleSteps = DEFAULT_MAX_VISIBLE_STEPS,\n summaryDetails,\n renderHeaderActions,\n renderRunningMeta,\n className,\n classNames,\n}: SuperGroupingCardProps) {\n const messageId = useAuiState((s) => s.message.id);\n const messageContent = useAuiState((s) =>\n s.message.role === 'assistant' ? s.message.content : EMPTY_CONTENT,\n );\n const messageStatus = useAuiState((s) => s.message.status);\n\n const timeline = useMemo(() => {\n const items = buildActivityTimeline(messageContent, messageStatus, {\n waitingTools,\n passThroughTools,\n });\n return items.length > 0 ? items : EMPTY_TIMELINE;\n }, [messageContent, messageStatus, waitingTools, passThroughTools]);\n const phase = useMemo(\n () => resolveActivityPhase(messageStatus, timeline, { waitingForInput }),\n [messageStatus, timeline, waitingForInput],\n );\n const toolCount = countActivityTools(timeline);\n\n const { expanded, toggleExpanded } = useActivityExpansion({\n expansionKey: expansionKeyProp ?? messageId,\n phase,\n expandWhileWaiting,\n });\n const generatedId = useId().replace(/[^A-Za-z0-9_-]/g, '');\n const detailsPanelId = `aui-sg-details-${generatedId}`;\n const statusId = `aui-sg-status-${generatedId}`;\n const { expanded: detailsExpanded, toggleExpanded: toggleDetails } = useActivityExpansion({\n expansionKey: `${expansionKeyProp ?? messageId}:details`,\n phase,\n expandWhileWaiting,\n });\n const steps = useMemo(\n () => timeline.map((item, index) => toTimelineStep({ item, index, resolveToolDisplayName })),\n [timeline, resolveToolDisplayName],\n );\n\n const grouping = useMemo(\n () => excludeFinalTextFromGroups(groupingFunction ?? createToolBasedGroupingFunction(getToolGroupKey)),\n [groupingFunction, getToolGroupKey],\n );\n const groupingContext = useMemo(() => ({ groupingFunction: grouping }), [grouping]);\n const components = useMemo(\n () => ({\n tools: {\n ...(toolUIs ? { by_name: toolUIs } : {}),\n Fallback: ToolFallbackComponent,\n },\n Text: TextComponent,\n ...(ReasoningComponent ? { Reasoning: ReasoningComponent } : {}),\n Group: GroupComponent,\n }),\n [toolUIs, ToolFallbackComponent, TextComponent, ReasoningComponent, GroupComponent],\n );\n\n const isActive = phase === 'running' || phase === 'waiting';\n const hasActivity = timeline.length > 0 || phase !== 'complete';\n if (!hasActivity) return null;\n\n // Tool UIs perform live subscriptions and asset-follow effects. Collapsing\n // either disclosure must only hide them while active or targeted by a deep link.\n const detailsMounted = isActive || mountDetails || (expanded && detailsExpanded);\n const activeSteps = steps.filter((step) => step.state === 'running');\n const currentStep = activeSteps.at(-1);\n const latestStatus =\n phase === 'waiting'\n ? 'Waiting for you'\n : phase === 'error'\n ? messageStatus?.type === 'incomplete' && messageStatus.reason === 'cancelled'\n ? 'Run stopped'\n : 'Something went wrong'\n : phase === 'running'\n ? currentStep\n ? [\n currentStep.verb,\n currentStep.chip,\n activeSteps.length > 1 ? `${activeSteps.length} in progress` : null,\n ]\n .filter(Boolean)\n .join(' · ')\n : steps.length > 0\n ? 'Preparing response'\n : 'Thinking'\n : getActivitySummary(timeline);\n const label = [latestStatus, ...(isActive ? [] : (summaryDetails ?? []))].join(' · ');\n\n return (\n <section\n data-slot=\"super-grouping-card\"\n data-phase={phase}\n data-tool-count={toolCount}\n className={cn('my-3 min-w-0', className, classNames?.root)}\n aria-busy={phase === 'running' ? 'true' : 'false'}\n aria-describedby={statusId}\n >\n <ToolTimeline\n steps={steps}\n open={expanded}\n onOpenChange={toggleExpanded}\n label={label}\n phase={phase}\n maxVisibleSteps={maxVisibleSteps}\n keepMounted={isActive || mountDetails}\n actions={renderHeaderActions?.({ phase, messageContent })}\n meta={isActive ? renderRunningMeta?.({ phase }) : null}\n >\n <div className=\"min-w-0 pl-5\">\n <button\n type=\"button\"\n onClick={toggleDetails}\n aria-expanded={detailsExpanded}\n aria-controls={detailsPanelId}\n className=\"flex items-center gap-1.5 rounded py-1 text-xs text-muted-foreground transition-colors hover:text-foreground focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring\"\n >\n <ChevronRight\n aria-hidden=\"true\"\n className={cn(\n 'size-3 transition-transform motion-reduce:transition-none',\n detailsExpanded && 'rotate-90',\n )}\n />\n {detailsExpanded ? 'Hide tool details' : 'Show tool details'}\n </button>\n {detailsMounted ? (\n <section\n id={detailsPanelId}\n aria-label=\"Run details\"\n hidden={!expanded || !detailsExpanded}\n className={cn(\n 'min-w-0 space-y-2 overflow-hidden border-l border-border/60 py-2 pl-3',\n classNames?.details,\n )}\n >\n <SuperGroupingProvider value={groupingContext}>\n <MessagePrimitive.Unstable_PartsGrouped groupingFunction={grouping} components={components} />\n </SuperGroupingProvider>\n </section>\n ) : null}\n </div>\n </ToolTimeline>\n <output id={statusId} aria-live=\"polite\" aria-atomic=\"true\" className=\"sr-only\">\n {phase === 'waiting' ? 'Waiting for your input' : latestStatus}\n </output>\n </section>\n );\n});\n\n/**\n * The turn's visible answer, rendered below the card: the text after the last\n * tool call (all of it when the turn called no tools), streaming while the\n * turn is live so the person reads the answer as it arrives.\n */\nexport const SuperGroupingFinalText = memo(function SuperGroupingFinalText({\n TextComponent,\n}: {\n TextComponent: TextMessagePartComponent;\n}) {\n const messageContent = useAuiState((s) =>\n s.message.role === 'assistant' ? s.message.content : EMPTY_CONTENT,\n );\n const statusType = useAuiState((s) => s.message.status?.type);\n const finalText = useMemo(() => getFinalText(messageContent), [messageContent]);\n\n if (!finalText) return null;\n return (\n <TextComponent\n type=\"text\"\n text={finalText}\n status={\n statusType === 'running' || statusType === 'requires-action'\n ? { type: 'running' }\n : { type: 'complete' }\n }\n />\n );\n});\n"],"names":["useState","useRef","useEffect","memo","SuperGroupingCard","ToolFallback","CollapsibleGroup","defaultGetToolGroupKey","groupingFunction","useAuiState","useMemo","buildActivityTimeline","resolveActivityPhase","countActivityTools","useId","toTimelineStep","excludeFinalTextFromGroups","createToolBasedGroupingFunction","getActivitySummary","jsxs","cn","jsx","ToolTimeline","ChevronRight","SuperGroupingProvider","MessagePrimitive","SuperGroupingFinalText","getFinalText"],"mappings":"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"}
|
|
@@ -48,7 +48,12 @@ export interface SuperGroupingCardProps {
|
|
|
48
48
|
expansionKey?: string;
|
|
49
49
|
/** Open the details once when the turn starts waiting on the person. */
|
|
50
50
|
expandWhileWaiting?: boolean;
|
|
51
|
-
/**
|
|
51
|
+
/**
|
|
52
|
+
* Keep the details panel mounted (hidden) while collapsed, so a host that
|
|
53
|
+
* needs to find content inside it (a deep link into the run's steps) can.
|
|
54
|
+
*/
|
|
55
|
+
mountDetails?: boolean;
|
|
56
|
+
/** Latest steps shown when expanded; unresolved parallel calls always remain visible. */
|
|
52
57
|
maxVisibleSteps?: number;
|
|
53
58
|
/** Extra segments after the collapsed summary ("1m 23s", "12.4k tokens"), joined with " · ". */
|
|
54
59
|
summaryDetails?: readonly string[];
|
|
@@ -68,10 +73,9 @@ export interface SuperGroupingCardProps {
|
|
|
68
73
|
};
|
|
69
74
|
}
|
|
70
75
|
/**
|
|
71
|
-
* The grouped ("conversational") view of an assistant turn:
|
|
72
|
-
*
|
|
73
|
-
*
|
|
74
|
-
* details disclosure. The answer itself renders below the card
|
|
76
|
+
* The grouped ("conversational") view of an assistant turn: a compact current
|
|
77
|
+
* action, an expandable tool timeline, and the original interactive tool UIs
|
|
78
|
+
* behind a separate details disclosure. The answer itself renders below the card
|
|
75
79
|
* (`SuperGroupingFinalText`). Shared by the SDK's `AthenaChat`, Olympus, and
|
|
76
80
|
* the Chrome extension, which supply their own text/tool renderers and the
|
|
77
81
|
* host-specific controls through the slots.
|
|
@@ -84,7 +88,7 @@ export interface SuperGroupingCardProps {
|
|
|
84
88
|
* `message.id`); every derivation runs in `useMemo` — a selector that returned
|
|
85
89
|
* a fresh array would tear through `useSyncExternalStore`.
|
|
86
90
|
*/
|
|
87
|
-
export declare const SuperGroupingCard: import("react").MemoExoticComponent<({ toolUIs, ToolFallback: ToolFallbackComponent, TextComponent, ReasoningComponent, GroupComponent, getToolGroupKey, groupingFunction, waitingTools, passThroughTools, waitingForInput, resolveToolDisplayName, expansionKey: expansionKeyProp, expandWhileWaiting, maxVisibleSteps, summaryDetails, renderHeaderActions, renderRunningMeta, className, classNames, }: SuperGroupingCardProps) => import("react/jsx-runtime").JSX.Element | null>;
|
|
91
|
+
export declare const SuperGroupingCard: import("react").MemoExoticComponent<({ toolUIs, ToolFallback: ToolFallbackComponent, TextComponent, ReasoningComponent, GroupComponent, getToolGroupKey, groupingFunction, waitingTools, passThroughTools, waitingForInput, resolveToolDisplayName, expansionKey: expansionKeyProp, expandWhileWaiting, mountDetails, maxVisibleSteps, summaryDetails, renderHeaderActions, renderRunningMeta, className, classNames, }: SuperGroupingCardProps) => import("react/jsx-runtime").JSX.Element | null>;
|
|
88
92
|
/**
|
|
89
93
|
* The turn's visible answer, rendered below the card: the text after the last
|
|
90
94
|
* tool call (all of it when the turn called no tools), streaming while the
|