diff --git a/apps/web/components/select-spaces-modal.tsx b/apps/web/components/select-spaces-modal.tsx index fa283b3b..c9a06dd0 100644 --- a/apps/web/components/select-spaces-modal.tsx +++ b/apps/web/components/select-spaces-modal.tsx @@ -47,7 +47,7 @@ import { spacePluginIdToCatalogId, type PluginInfo, } from "@/lib/plugin-catalog" -import { InstallSteps, PillButton } from "./integrations/install-steps" +import { INSET, InstallSteps, PillButton } from "./integrations/install-steps" import { useProjectMutations } from "@/hooks/use-project-mutations" import { AUTO_CHAT_SPACE_ID } from "@/lib/chat-auto-space" import NovaOrb from "@/components/nova/nova-orb" @@ -1660,15 +1660,16 @@ function AgentsDiscoverPanel({ newKey?.pluginId ?? catalogIds[0] ?? "codex", ) + // snap to the just-connected plugin only when the key changes, so manual tab clicks aren't overridden + useEffect(() => { + if (newKey?.pluginId) setActiveCatalogId(newKey.pluginId) + }, [newKey?.pluginId]) + useEffect(() => { - if (newKey?.pluginId && catalogIds.includes(newKey.pluginId)) { - setActiveCatalogId(newKey.pluginId) - return - } if (!catalogIds.includes(activeCatalogId)) { setActiveCatalogId(catalogIds[0] ?? "codex") } - }, [activeCatalogId, catalogIds, newKey?.pluginId]) + }, [activeCatalogId, catalogIds]) if (catalogIds.length === 0) { return ( @@ -1680,39 +1681,32 @@ function AgentsDiscoverPanel({ return (
-
-
- -
-
-

Agents

-

- Claude Code, Codex, and OpenCode share project memory -

-
+
{catalogIds.map((catalogId) => { const info = PLUGIN_CATALOG[catalogId] if (!info) return null + const isActive = activeCatalogId === catalogId return ( ) })}
onConnect(activeCatalogId)} @@ -1728,12 +1722,14 @@ function DiscoverPanel({ newKey, onConnect, onDismissKey, + hideHeader, }: { catalogId: string isConnecting: boolean newKey: string | null onConnect: () => void onDismissKey: () => void + hideHeader?: boolean }) { const info = PLUGIN_CATALOG[catalogId] if (!info) { @@ -1763,30 +1759,36 @@ function DiscoverPanel({ return (
-
-
- {info.name} + {hideHeader ? ( +

+ {info.tagline} +

+ ) : ( +
+
+ {info.name} +
+
+

+ {info.name} +

+

+ {info.tagline} +

+
-
-

- {info.name} -

-

- {info.tagline} -

-
-
+ )} {isConnected && (
@@ -1811,19 +1813,11 @@ function DiscoverPanel({

)} -
-
- -
- - {!isConnected && ( -
+ {isConnected ? ( + + ) : ( + <> +
{isConnecting ? ( <> @@ -1840,7 +1834,7 @@ function DiscoverPanel({ rel="noopener noreferrer" className={cn( dmSans125ClassName(), - "flex h-8 min-w-[94px] items-center justify-center gap-1.5 rounded-full px-3 sm:h-9 sm:min-w-[116px] sm:px-5", + "flex h-8 items-center justify-center gap-1.5 rounded-full px-3 sm:h-9 sm:px-4", "text-[12px] font-medium text-[#A1A1AA] sm:text-[14px]", "transition-colors hover:text-[#FAFAFA]", )} @@ -1849,8 +1843,30 @@ function DiscoverPanel({ )}
- )} -
+
+

+ What you'll do next +

+
    + {setupSteps.map((step, i) => ( +
  1. + + {i + 1} + + + {step.title} + +
  2. + ))} +
+
+ + )}
) }