feat: wire remaining PostHog events across all key user actions (#111)

- export_generated: session copy, copy-for-ticket, download
- ai_feature_used: copilot, assistant chat, session-to-flow, KB accelerator, flow assist
- psa_connected: ConnectWise integration creation
- session_shared: share link creation
- flow_created: troubleshooting editor, procedural editor, session-to-flow

All 9 events from the product analytics plan are now fully wired.

Co-authored-by: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
This commit was merged in pull request #111.
This commit is contained in:
chihlasm
2026-03-16 18:49:01 -04:00
committed by GitHub
parent 1e8ed09fbd
commit c44edc5088
9 changed files with 23 additions and 0 deletions

View File

@@ -2,6 +2,7 @@ import { useState, useRef, useEffect, useCallback } from 'react'
import { X, Send, Sparkles, Loader2 } from 'lucide-react'
import { MarkdownContent } from '@/components/ui/MarkdownContent'
import { copilotApi } from '@/api/copilot'
import { analytics } from '@/lib/analytics'
import { SuggestedFlowCard } from '@/components/assistant/SuggestedFlowCard'
import type { CopilotMessage, SuggestedFlow } from '@/types/copilot'
@@ -32,6 +33,7 @@ export function CopilotPanel({ isOpen, onClose, treeId, sessionId, currentNodeId
current_node_id: currentNodeId,
})
setConversationId(response.conversation_id)
analytics.aiFeatureUsed({ feature: 'copilot' })
setMessages([{ role: 'assistant', content: response.greeting }])
} catch {
setMessages([{ role: 'assistant', content: 'Failed to start copilot. Please try again.' }])

View File

@@ -1,6 +1,7 @@
import { useState, useEffect, useCallback } from 'react'
import { Copy, Check, Globe, Users, Clock, Trash2, Link2 } from 'lucide-react'
import type { SessionShare, SessionShareVisibility } from '@/types'
import { analytics } from '@/lib/analytics'
import { sessionsApi } from '@/api/sessions'
import { buildSessionShareUrl, filterSharesForSession } from '@/lib/sessionShare'
import { cn } from '@/lib/utils'
@@ -122,6 +123,7 @@ export function ShareSessionModal({ sessionId, sessionLabel, isOpen, onClose }:
expires_at,
})
setShares([newShare, ...shares])
analytics.sessionShared({ session_id: sessionId, visibility })
toast.success('Share link generated')
setShareName('')
setExpirationPreset('never')