From 65238152da2e7a03d111696b3d18baad616dbc8f Mon Sep 17 00:00:00 2001 From: Sreeram Sreedhar Date: Tue, 23 Jun 2026 20:34:56 -0700 Subject: [PATCH] Match desktop tool cards to Nova source cards --- apps/desktop/app/(app)/settings/page.tsx | 140 ++++++++++++++------- apps/desktop/app/onboarding/page.tsx | 148 +++++++++++++++-------- apps/desktop/lib/tool-catalog.ts | 16 +++ 3 files changed, 212 insertions(+), 92 deletions(-) diff --git a/apps/desktop/app/(app)/settings/page.tsx b/apps/desktop/app/(app)/settings/page.tsx index 80239289..c8c0f3de 100644 --- a/apps/desktop/app/(app)/settings/page.tsx +++ b/apps/desktop/app/(app)/settings/page.tsx @@ -10,6 +10,7 @@ import { } from "@ui/components/card" import { Button } from "@ui/components/button" import { cn } from "@lib/utils" +import { Check, FolderOpen } from "lucide-react" import Link from "next/link" import { useRouter } from "next/navigation" import { useCallback, useEffect, useState } from "react" @@ -480,7 +481,7 @@ export default function SettingsPage() { Refresh -
+
{tools.map((tool) => ( - - - - - - -

{tool.name}

-

- {tool.description} -

-
-

- {tool.configPath} -

-

{tool.detail}

+
+
+
+ +
+
+
+

+ {tool.name} +

+

+ {tool.description} +

+
+ {tool.connected ? ( + + + Connected + + ) : ( + + )}
-
+ +
    + {tool.perks.map((perk) => ( +
  • + + {perk} +
  • + ))} +
+ +
+
+

+ {tool.configPath} +

+

+ {tool.detected + ? tool.version + ? `Detected ${tool.version}` + : "Detected on this Mac" + : "Not detected yet"} +

+
+ +
+ + {tool.connected ? ( - -
+ ) : null}
) } -function SettingsToolStatusPill({ tool }: { tool: DesktopToolCard }) { - if (tool.connected) { - return ( - - Connected - - ) - } +function SettingsToolTargetChip({ label }: { label: string }) { return ( - - {tool.detected ? "Detected" : "Not detected"} - +
+ + Uses + + + {label} +
) } diff --git a/apps/desktop/app/onboarding/page.tsx b/apps/desktop/app/onboarding/page.tsx index 8364fb7d..41cfbea7 100644 --- a/apps/desktop/app/onboarding/page.tsx +++ b/apps/desktop/app/onboarding/page.tsx @@ -1,6 +1,7 @@ "use client" import { LogoFull } from "@ui/assets/Logo" +import { Button } from "@ui/components/button" import { cn } from "@lib/utils" import { ArrowRight, @@ -56,6 +57,16 @@ const STEP_LABELS: Record = { done: "Done", } +const modalCardStyle = { + boxShadow: + "0 2.842px 14.211px 0 rgba(0, 0, 0, 0.25), 0.711px 0.711px 0.711px 0 rgba(255, 255, 255, 0.10) inset", +} + +const inputBevelStyle = { + boxShadow: + "0px 1px 2px 0px rgba(0,43,87,0.1), inset 0px 0px 0px 1px rgba(43,49,67,0.08), inset 0px 1px 1px 0px rgba(0,0,0,0.08), inset 0px 2px 4px 0px rgba(0,0,0,0.02)", +} + export default function DesktopOnboardingPage() { const router = useRouter() const [session, setSession] = useState(null) @@ -311,7 +322,7 @@ function ToolsStep({ } /> -
+
{tools.map((tool) => ( - - - - - - -

{tool.name}

-

- {tool.description} -

-
- - - {tool.version ? : null} +
+
+
+ +
+
+
+

+ {tool.name} +

+

+ {tool.description} +

+
+ {tool.connected ? ( + + + Connected + + ) : ( + + )}
-

- {tool.restartHint} -

- - {tool.connected - ? "Connected" - : busy - ? "Preparing..." - : tool.primaryAction === "connect" - ? "Connect" - : "Set up"} - - + +
    + {tool.perks.map((perk) => ( +
  • + + {perk} +
  • + ))} +
+ +
+
+

+ {tool.configPath} +

+

+ {tool.detected + ? tool.version + ? `Detected ${tool.version}` + : "Detected on this Mac" + : "Not detected yet"} +

+
+ +
+
) } -function ToolStatusPill({ tool }: { tool: DesktopToolCard }) { - if (tool.connected) { - return ( - - Connected - - ) - } +function SaveTargetChip({ label }: { label: string }) { return ( - - {tool.detected ? "Detected" : "Not detected"} - +
+ + Uses + + + {label} +
) } diff --git a/apps/desktop/lib/tool-catalog.ts b/apps/desktop/lib/tool-catalog.ts index 0b87dedf..3f8283c2 100644 --- a/apps/desktop/lib/tool-catalog.ts +++ b/apps/desktop/lib/tool-catalog.ts @@ -11,6 +11,7 @@ export type DesktopToolCatalogEntry = { description: string docsUrl: string icon: LucideIcon + perks: string[] restartHint: string } @@ -32,6 +33,11 @@ export const DESKTOP_TOOL_CATALOG: Record< "Connect the Supermemory MCP server so Claude Code can search and save memories while you work.", docsUrl: "https://supermemory.ai/docs/integrations/claude-code", icon: Bot, + perks: [ + "Search and save memories from coding sessions", + "Project decisions become reusable context", + "Backs up config before every change", + ], restartHint: "Restart Claude Code after changing MCP config.", }, codex: { @@ -43,6 +49,11 @@ export const DESKTOP_TOOL_CATALOG: Record< "Add Supermemory to Codex MCP servers so coding sessions can recall durable context.", docsUrl: "https://supermemory.ai/docs/integrations/codex", icon: Terminal, + perks: [ + "Persistent memory for Codex CLI sessions", + "Uses the Supermemory MCP server", + "Backs up ~/.codex/config.toml first", + ], restartHint: "Restart Codex after changing ~/.codex/config.toml.", }, cursor: { @@ -54,6 +65,11 @@ export const DESKTOP_TOOL_CATALOG: Record< "Write the Supermemory MCP server into Cursor's MCP config for one-click memory access.", docsUrl: "https://supermemory.ai/docs/supermemory-mcp/setup", icon: Code2, + perks: [ + "Memory tools directly inside Cursor", + "One MCP config for project context", + "Backs up config before every change", + ], restartHint: "Restart Cursor so MCP changes are loaded.", }, }