From 9b12fcdc30c6a2186a7fd1b21377687ddd59afb8 Mon Sep 17 00:00:00 2001 From: Michael Matloka Date: Wed, 15 Apr 2026 18:18:06 +0200 Subject: [PATCH] feat(inbox): add PostHog Conversations signal source toggle Expose conversations/ticket SignalSourceConfig in settings so emit_signal gating can be enabled from Code. Toggle sits below error tracking. --- apps/code/src/renderer/api/posthogClient.ts | 1 + .../inbox/components/SignalSourceToggles.tsx | 14 ++++++++++++++ .../features/inbox/hooks/useSignalSourceManager.ts | 4 ++++ .../features/onboarding/hooks/useTutorialTour.ts | 4 ++++ 4 files changed, 23 insertions(+) diff --git a/apps/code/src/renderer/api/posthogClient.ts b/apps/code/src/renderer/api/posthogClient.ts index 2093a5dc8..05304acba 100644 --- a/apps/code/src/renderer/api/posthogClient.ts +++ b/apps/code/src/renderer/api/posthogClient.ts @@ -40,6 +40,7 @@ export interface SignalSourceConfig { | "github" | "linear" | "zendesk" + | "conversations" | "error_tracking"; source_type: | "session_analysis_cluster" diff --git a/apps/code/src/renderer/features/inbox/components/SignalSourceToggles.tsx b/apps/code/src/renderer/features/inbox/components/SignalSourceToggles.tsx index 394fbfdba..96e5cc44d 100644 --- a/apps/code/src/renderer/features/inbox/components/SignalSourceToggles.tsx +++ b/apps/code/src/renderer/features/inbox/components/SignalSourceToggles.tsx @@ -2,6 +2,7 @@ import { ArrowSquareOutIcon, BrainIcon, BugIcon, + ChatsIcon, CircleNotchIcon, GithubLogoIcon, KanbanIcon, @@ -31,6 +32,7 @@ export interface SignalSourceValues { github: boolean; linear: boolean; zendesk: boolean; + conversations: boolean; } interface SignalSourceToggleCardProps { @@ -315,6 +317,10 @@ export function SignalSourceToggles({ (checked: boolean) => onToggle("zendesk", checked), [onToggle], ); + const toggleConversations = useCallback( + (checked: boolean) => onToggle("conversations", checked), + [onToggle], + ); const setupGithub = useCallback(() => onSetup?.("github"), [onSetup]); const setupLinear = useCallback(() => onSetup?.("linear"), [onSetup]); const setupZendesk = useCallback(() => onSetup?.("zendesk"), [onSetup]); @@ -329,6 +335,14 @@ export function SignalSourceToggles({ onCheckedChange={toggleErrorTracking} disabled={disabled} /> + } + label="PostHog Conversations" + description="Turn support conversations into signals for the inbox" + checked={value.conversations} + onCheckedChange={toggleConversations} + disabled={disabled} + /> } label="PostHog Session Replay" diff --git a/apps/code/src/renderer/features/inbox/hooks/useSignalSourceManager.ts b/apps/code/src/renderer/features/inbox/hooks/useSignalSourceManager.ts index 3b45bcfb7..026b7fa86 100644 --- a/apps/code/src/renderer/features/inbox/hooks/useSignalSourceManager.ts +++ b/apps/code/src/renderer/features/inbox/hooks/useSignalSourceManager.ts @@ -24,6 +24,7 @@ const SOURCE_TYPE_MAP: Record< github: "issue", linear: "issue", zendesk: "ticket", + conversations: "ticket", }; const ERROR_TRACKING_SOURCE_TYPES: SourceType[] = [ @@ -38,6 +39,7 @@ const SOURCE_LABELS: Record = { github: "GitHub Issues", linear: "Linear Issues", zendesk: "Zendesk Tickets", + conversations: "PostHog Conversations", }; const DATA_WAREHOUSE_SOURCES: Record< @@ -55,6 +57,7 @@ const ALL_SOURCE_PRODUCTS: (keyof SignalSourceValues)[] = [ "github", "linear", "zendesk", + "conversations", ]; function computeValues( @@ -66,6 +69,7 @@ function computeValues( github: false, linear: false, zendesk: false, + conversations: false, }; if (!configs?.length) return result; for (const product of ALL_SOURCE_PRODUCTS) { diff --git a/apps/code/src/renderer/features/onboarding/hooks/useTutorialTour.ts b/apps/code/src/renderer/features/onboarding/hooks/useTutorialTour.ts index 8bd42efbf..4839ea78e 100644 --- a/apps/code/src/renderer/features/onboarding/hooks/useTutorialTour.ts +++ b/apps/code/src/renderer/features/onboarding/hooks/useTutorialTour.ts @@ -75,6 +75,10 @@ export function useTutorialTour() { zendesk: configs?.some((c) => c.source_product === "zendesk" && c.enabled) ?? false, + conversations: + configs?.some( + (c) => c.source_product === "conversations" && c.enabled, + ) ?? false, error_tracking: configs?.some( (c) => c.source_product === "error_tracking" && c.enabled,