diff --git a/apps/web/components/chat/message/agent-message.tsx b/apps/web/components/chat/message/agent-message.tsx
index 09add29b..b30b92f7 100644
--- a/apps/web/components/chat/message/agent-message.tsx
+++ b/apps/web/components/chat/message/agent-message.tsx
@@ -211,6 +211,10 @@ function connectorIconSrc(
return connector.icon
}
+function connectorCardKey(connector: NovaConnectorCardData): string {
+ return `${connector.kind ?? "connector"}-${connector.id ?? connector.name ?? "unknown"}`
+}
+
function connectorIdentity(
output: NovaConnectorToolOutput | null,
): string | null {
@@ -503,15 +507,26 @@ function NovaConnectorCard({
function NovaConnectorCompactCard({
connector,
+ expanded,
+ onToggle,
}: {
connector: NovaConnectorCardData
+ expanded: boolean
+ onToggle: () => void
}) {
const iconSrc = connectorIconSrc(connector)
return (
-
+
-
-
-
)
}
function NovaConnectorToolDisplay({ part }: { part: ToolCallDisplayPart }) {
+ const [expandedConnectorKey, setExpandedConnectorKey] = useState<
+ string | null
+ >(null)
const toolName = connectorToolName(part)
const output = unwrapToolOutput(part.output)
const isLoading =
@@ -585,6 +605,12 @@ function NovaConnectorToolDisplay({ part }: { part: ToolCallDisplayPart }) {
: (output.connectors ?? [])
const isConnectorList =
toolName === "listNovaConnectors" && connectors.length > 1
+ const expandedConnector =
+ isConnectorList && expandedConnectorKey
+ ? connectors.find(
+ (connector) => connectorCardKey(connector) === expandedConnectorKey,
+ )
+ : null
return (
{isConnectorList ? (
@@ -601,17 +627,29 @@ function NovaConnectorToolDisplay({ part }: { part: ToolCallDisplayPart }) {
{connectors.map((connector) =>
isConnectorList ? (
{
+ const nextKey = connectorCardKey(connector)
+ setExpandedConnectorKey((current) =>
+ current === nextKey ? null : nextKey,
+ )
+ }}
/>
) : (
),
)}
+ {expandedConnector ? (
+
+
+
+ ) : null}
)
}