feat(posthog): Add tracking on mothership abort (#4023)

Co-authored-by: Theodore Li <theo@sim.ai>
This commit is contained in:
Theodore Li
2026-04-07 15:30:46 -07:00
committed by GitHub
parent e2d4d0edfe
commit d0d3581605
3 changed files with 33 additions and 3 deletions

View File

@@ -223,6 +223,14 @@ export function Home({ chatId }: HomeProps = {}) {
posthogRef.current = posthog
}, [posthog])
const handleStopGeneration = useCallback(() => {
captureEvent(posthogRef.current, 'task_generation_aborted', {
workspace_id: workspaceId,
view: 'mothership',
})
stopGeneration()
}, [stopGeneration, workspaceId])
const handleSubmit = useCallback(
(text: string, fileAttachments?: FileAttachmentForApi[], contexts?: ChatContext[]) => {
const trimmed = text.trim()
@@ -334,7 +342,7 @@ export function Home({ chatId }: HomeProps = {}) {
defaultValue={initialPrompt}
onSubmit={handleSubmit}
isSending={isSending}
onStopGeneration={stopGeneration}
onStopGeneration={handleStopGeneration}
userId={session?.user?.id}
onContextAdd={handleContextAdd}
/>
@@ -359,7 +367,7 @@ export function Home({ chatId }: HomeProps = {}) {
isSending={isSending}
isReconnecting={isReconnecting}
onSubmit={handleSubmit}
onStopGeneration={stopGeneration}
onStopGeneration={handleStopGeneration}
messageQueue={messageQueue}
onRemoveQueuedMessage={removeFromQueue}
onSendQueuedMessage={sendNow}

View File

@@ -4,6 +4,7 @@ import { memo, useCallback, useEffect, useRef, useState } from 'react'
import { createLogger } from '@sim/logger'
import { History, Plus, Square } from 'lucide-react'
import { useParams, useRouter } from 'next/navigation'
import { usePostHog } from 'posthog-js/react'
import { useShallow } from 'zustand/react/shallow'
import {
BubbleChatClose,
@@ -33,6 +34,7 @@ import {
import { Lock, Unlock, Upload } from '@/components/emcn/icons'
import { VariableIcon } from '@/components/icons'
import { useSession } from '@/lib/auth/auth-client'
import { captureEvent } from '@/lib/posthog/client'
import { generateWorkflowJson } from '@/lib/workflows/operations/import-export'
import { ConversationListItem } from '@/app/workspace/[workspaceId]/components'
import { MothershipChat } from '@/app/workspace/[workspaceId]/home/components'
@@ -101,6 +103,9 @@ export const Panel = memo(function Panel({ workspaceId: propWorkspaceId }: Panel
const params = useParams()
const workspaceId = propWorkspaceId ?? (params.workspaceId as string)
const posthog = usePostHog()
const posthogRef = useRef(posthog)
const panelRef = useRef<HTMLElement>(null)
const fileInputRef = useRef<HTMLInputElement>(null)
const { activeTab, setActiveTab, panelWidth, _hasHydrated, setHasHydrated } = usePanelStore(
@@ -264,6 +269,10 @@ export const Panel = memo(function Panel({ workspaceId: propWorkspaceId }: Panel
loadCopilotChats()
}, [loadCopilotChats])
useEffect(() => {
posthogRef.current = posthog
}, [posthog])
const handleCopilotSelectChat = useCallback((chat: { id: string; title: string | null }) => {
setCopilotChatId(chat.id)
setCopilotChatTitle(chat.title)
@@ -394,6 +403,14 @@ export const Panel = memo(function Panel({ workspaceId: propWorkspaceId }: Panel
[copilotEditQueuedMessage]
)
const handleCopilotStopGeneration = useCallback(() => {
captureEvent(posthogRef.current, 'task_generation_aborted', {
workspace_id: workspaceId,
view: 'copilot',
})
copilotStopGeneration()
}, [copilotStopGeneration, workspaceId])
const handleCopilotSubmit = useCallback(
(text: string, fileAttachments?: FileAttachmentForApi[], contexts?: ChatContext[]) => {
const trimmed = text.trim()
@@ -833,7 +850,7 @@ export const Panel = memo(function Panel({ workspaceId: propWorkspaceId }: Panel
isSending={copilotIsSending}
isReconnecting={copilotIsReconnecting}
onSubmit={handleCopilotSubmit}
onStopGeneration={copilotStopGeneration}
onStopGeneration={handleCopilotStopGeneration}
messageQueue={copilotMessageQueue}
onRemoveQueuedMessage={copilotRemoveFromQueue}
onSendQueuedMessage={copilotSendNow}

View File

@@ -378,6 +378,11 @@ export interface PostHogEventMap {
workspace_id: string
}
task_generation_aborted: {
workspace_id: string
view: 'mothership' | 'copilot'
}
task_message_sent: {
workspace_id: string
has_attachments: boolean