/ src / hooks / usePermissionRequestLogging.ts
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  }