From b795a95091ed21dec84443ba9ea7afd0be749bd9 Mon Sep 17 00:00:00 2001 From: DKotsyuba <16292493+DKotsyuba@users.noreply.github.com> Date: Thu, 16 Jul 2026 22:08:29 +0200 Subject: [PATCH 1/2] fix(dashboard): show Obsidian context source card --- .../dashboard/endpoint/EndpointPageClient.tsx | 24 ++++--------------- 1 file changed, 5 insertions(+), 19 deletions(-) diff --git a/src/app/(dashboard)/dashboard/endpoint/EndpointPageClient.tsx b/src/app/(dashboard)/dashboard/endpoint/EndpointPageClient.tsx index 54e27f4991e6..6746fd67f53c 100644 --- a/src/app/(dashboard)/dashboard/endpoint/EndpointPageClient.tsx +++ b/src/app/(dashboard)/dashboard/endpoint/EndpointPageClient.tsx @@ -12,6 +12,7 @@ import { useTranslations } from "next-intl"; import A2ADashboardPage from "./components/A2ADashboard"; import McpDashboardPage from "./components/MCPDashboard"; import NotionSourceCard from "./components/NotionSourceCard"; +import ObsidianSourceCard from "./components/ObsidianSourceCard"; import VscodeTokenAliasCard from "./VscodeTokenAliasCard"; const BUILD_TIME_CLOUD_URL = process.env.NEXT_PUBLIC_CLOUD_URL || null; @@ -19,12 +20,7 @@ const CLOUD_ACTION_TIMEOUT_MS = 15000; type TranslationValues = Record; type CloudflaredTunnelPhase = - | "unsupported" - | "not_installed" - | "stopped" - | "starting" - | "running" - | "error"; + "unsupported" | "not_installed" | "stopped" | "starting" | "running" | "error"; type CloudflaredTunnelStatus = { supported: boolean; @@ -43,12 +39,7 @@ type CloudflaredTunnelStatus = { }; type TailscaleTunnelPhase = - | "unsupported" - | "not_installed" - | "needs_login" - | "stopped" - | "running" - | "error"; + "unsupported" | "not_installed" | "needs_login" | "stopped" | "running" | "error"; type TailscaleTunnelStatus = { supported: boolean; @@ -70,13 +61,7 @@ type TailscaleTunnelStatus = { }; type NgrokTunnelPhase = - | "unsupported" - | "not_installed" - | "stopped" - | "needs_auth" - | "starting" - | "running" - | "error"; + "unsupported" | "not_installed" | "stopped" | "needs_auth" | "starting" | "running" | "error"; type NgrokTunnelStatus = { supported: boolean; @@ -1261,6 +1246,7 @@ export default function APIPageClient({ machineId }: Readonly + ) : null} From 1a1409fb1792b865cea6c83215bae1831631e4b4 Mon Sep 17 00:00:00 2001 From: DKotsyuba <16292493+DKotsyuba@users.noreply.github.com> Date: Thu, 16 Jul 2026 22:25:51 +0200 Subject: [PATCH 2/2] test(dashboard): guard Obsidian context source wiring --- tests/unit/dashboard-shell-tabs.test.ts | 21 +++++++++++++++++++++ 1 file changed, 21 insertions(+) diff --git a/tests/unit/dashboard-shell-tabs.test.ts b/tests/unit/dashboard-shell-tabs.test.ts index fb09fab916a6..d4c428830334 100644 --- a/tests/unit/dashboard-shell-tabs.test.ts +++ b/tests/unit/dashboard-shell-tabs.test.ts @@ -45,6 +45,27 @@ test("endpoint page keeps APIs, MCP, and A2A as in-page tabs", () => { assert.ok(source.includes('activeEndpointTab === "a2a" ? : null')); }); +test("endpoint page exposes context-sources tab with Notion and Obsidian source cards", () => { + const source = readSource("src/app/(dashboard)/dashboard/endpoint/EndpointPageClient.tsx"); + + // Verify context-sources is part of the EndpointTab type contract + assert.ok(source.includes('type EndpointTab = "apis" | "mcp" | "a2a" | "context-sources"')); + + // Verify context-sources tab label is in ENDPOINT_TABS + assert.ok( + source.includes('{ value: "context-sources", label: "Context Sources", icon: "database" }') + ); + + // Verify both source card components are imported + assert.ok(source.includes('import NotionSourceCard from "./components/NotionSourceCard"')); + assert.ok(source.includes('import ObsidianSourceCard from "./components/ObsidianSourceCard"')); + + // Verify both components are rendered in the context-sources conditional block + assert.ok(source.includes('activeEndpointTab === "context-sources" ? (')); + assert.ok(source.includes("")); + assert.ok(source.includes("")); +}); + test("settings root redirects to section pages instead of rendering a tab shell", () => { const pageSource = readSource("src/app/(dashboard)/dashboard/settings/page.tsx");