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

@@ -8,6 +8,7 @@ import { treesApi } from '@/api/trees'
import { sessionToFlowApi } from '@/api/sessionToFlow'
import { ExportPreviewModal } from '@/components/session/ExportPreviewModal'
import { SaveSessionAsTreeModal } from '@/components/session/SaveSessionAsTreeModal'
import { analytics } from '@/lib/analytics'
import { ShareSessionModal } from '@/components/session/ShareSessionModal'
import { SessionOutcomeModal } from '@/components/session/SessionOutcomeModal'
import { SessionTimeline } from '@/components/session/SessionTimeline'
@@ -150,6 +151,7 @@ export function SessionDetailPage() {
setCopied(true)
setTimeout(() => setCopied(false), 2000)
toast.success('Copied to clipboard')
analytics.exportGenerated({ session_id: session?.id || '', format: exportFormat })
}
} catch (err) {
console.error('Copy failed:', err)
@@ -168,6 +170,7 @@ export function SessionDetailPage() {
setCopiedPsa(true)
setTimeout(() => setCopiedPsa(false), 2000)
toast.success('Copied ticket notes to clipboard')
analytics.exportGenerated({ session_id: session.id, format: 'psa' })
}
} catch (err) {
console.error('Copy for ticket failed:', err)
@@ -177,6 +180,7 @@ export function SessionDetailPage() {
const handleDownload = (content: string) => {
if (!session) return
analytics.exportGenerated({ session_id: session.id, format: exportFormat })
const blob = new Blob([content], { type: 'text/plain' })
const url = URL.createObjectURL(blob)
const a = document.createElement('a')
@@ -256,6 +260,7 @@ export function SessionDetailPage() {
setIsGeneratingFlow(true)
try {
const flowData = await sessionToFlowApi.generate(session.id)
analytics.aiFeatureUsed({ feature: 'session_to_flow' })
const tree = await treesApi.create({
name: flowData.name,
description: flowData.description,
@@ -264,6 +269,7 @@ export function SessionDetailPage() {
tags: flowData.tags,
})
toast.success('Flow generated! Opening editor...')
analytics.flowCreated({ flow_type: 'procedural', method: 'session_to_flow' })
navigate(getTreeEditorPath(tree.id, 'procedural'))
} catch (err) {
console.error('Failed to generate flow from session:', err)