import { useCallback, useState } from 'react'; import { setTeleportedSessionInfo } from 'src/bootstrap/state.js'; import { type AnalyticsMetadata_I_VERIFIED_THIS_IS_NOT_CODE_OR_FILEPATHS, logEvent, } from 'src/services/analytics/index.js'; import type { TeleportRemoteResponse } from 'src/utils/conversationRecovery.js'; import type { CodeSession } from 'src/utils/teleport/api.js'; import { errorMessage, TeleportOperationError } from '../utils/errors.js'; import { teleportResumeCodeSession } from '../utils/teleport.js'; export type TeleportResumeError = { message: string; formattedMessage?: string; isOperationError: boolean; }; export type TeleportSource = 'cliArg' | 'localCommand'; export function useTeleportResume(source: TeleportSource) { const [isResuming, setIsResuming] = useState(false); const [error, setError] = useState(null); const [selectedSession, setSelectedSession] = useState(null); const resumeSession = useCallback( async (session: CodeSession): Promise => { setIsResuming(true); setError(null); setSelectedSession(session); // Log teleport session selection logEvent('tengu_teleport_resume_session', { source: source as AnalyticsMetadata_I_VERIFIED_THIS_IS_NOT_CODE_OR_FILEPATHS, session_id: session.id as AnalyticsMetadata_I_VERIFIED_THIS_IS_NOT_CODE_OR_FILEPATHS, }); try { const result = await teleportResumeCodeSession(session.id); // Track teleported session for reliability logging setTeleportedSessionInfo({ sessionId: session.id }); setIsResuming(false); return result; } catch (err) { const teleportError: TeleportResumeError = { message: err instanceof TeleportOperationError ? err.message : errorMessage(err), formattedMessage: err instanceof TeleportOperationError ? err.formattedMessage : undefined, isOperationError: err instanceof TeleportOperationError, }; setError(teleportError); setIsResuming(false); return null; } }, [source], ); const clearError = useCallback(() => { setError(null); }, []); return { resumeSession, isResuming, error, selectedSession, clearError, }; }