usePermissionRequestLogging.ts
1 import { useEffect } from 'react' 2 import { logEvent } from '../services/statsig.js' 3 import { logUnaryEvent, CompletionType } from '../utils/unaryLogging.js' 4 import { ToolUseConfirm } from '../components/permissions/PermissionRequest.js' 5 import { env } from '../utils/env.js' 6 7 export type UnaryEvent = { 8 completion_type: CompletionType 9 language_name: string | Promise<string> 10 } 11 12 /** 13 * Logs permission request events using Statsig and unary logging. 14 * Handles both the Statsig event and the unary event logging. 15 * Can handle either a string or Promise<string> for language_name. 16 */ 17 export function usePermissionRequestLogging( 18 toolUseConfirm: ToolUseConfirm, 19 unaryEvent: UnaryEvent, 20 ): void { 21 useEffect(() => { 22 // Log Statsig event 23 logEvent('tengu_tool_use_show_permission_request', { 24 messageID: toolUseConfirm.assistantMessage.message.id, 25 toolName: toolUseConfirm.tool.name, 26 }) 27 28 // Handle string or Promise language name 29 const languagePromise = Promise.resolve(unaryEvent.language_name) 30 31 // Log unary event once language is resolved 32 languagePromise.then(language => { 33 logUnaryEvent({ 34 completion_type: unaryEvent.completion_type, 35 event: 'response', 36 metadata: { 37 language_name: language, 38 message_id: toolUseConfirm.assistantMessage.message.id, 39 platform: env.platform, 40 }, 41 }) 42 }) 43 }, [toolUseConfirm, unaryEvent]) 44 }