11import React , { useState , useEffect , useRef , useMemo } from "react" ;
22import { motion , AnimatePresence } from "framer-motion" ;
3- import {
3+ import {
44 Copy ,
55 ChevronDown ,
66 GitBranch ,
@@ -15,8 +15,7 @@ import { Label } from "@/components/ui/label";
1515import { Popover } from "@/components/ui/popover" ;
1616import { api , type Session } from "@/lib/api" ;
1717import { cn } from "@/lib/utils" ;
18-
19- import { listen , type UnlistenFn } from "@tauri-apps/api/event" ;
18+ import { listen as tauriListen } from "@tauri-apps/api/event" ;
2019import { StreamMessage } from "./StreamMessage" ;
2120import {
2221 FloatingPromptInput ,
@@ -46,6 +45,37 @@ import {
4645} from "@/hooks" ;
4746import { SessionPersistenceService } from "@/services/sessionPersistence" ;
4847
48+ type UnlistenFn = ( ) => void ;
49+
50+ // Runtime check for Tauri environment (must be function to check at call time)
51+ const isTauriEnv = ( ) => typeof window !== 'undefined' && ! ! ( window . __TAURI__ || window . __TAURI_INTERNALS__ ) ;
52+
53+ // Web-compatible fallback for non-Tauri environments
54+ const webListen = ( eventName : string , callback : ( event : { payload : unknown } ) => void ) : Promise < UnlistenFn > => {
55+ console . log ( '[ClaudeCodeSession] Setting up DOM event listener for:' , eventName ) ;
56+
57+ const domEventHandler = ( event : Event ) => {
58+ const customEvent = event as CustomEvent ;
59+ console . log ( '[ClaudeCodeSession] DOM event received:' , eventName , customEvent . detail ) ;
60+ callback ( { payload : customEvent . detail } ) ;
61+ } ;
62+
63+ window . addEventListener ( eventName , domEventHandler ) ;
64+
65+ return Promise . resolve ( ( ) => {
66+ console . log ( '[ClaudeCodeSession] Removing DOM event listener for:' , eventName ) ;
67+ window . removeEventListener ( eventName , domEventHandler ) ;
68+ } ) ;
69+ } ;
70+
71+ // Dynamic listen function that checks environment at runtime
72+ const listen = ( eventName : string , callback : ( event : { payload : unknown } ) => void ) : Promise < UnlistenFn > => {
73+ if ( isTauriEnv ( ) ) {
74+ return tauriListen ( eventName , callback ) ;
75+ }
76+ return webListen ( eventName , callback ) ;
77+ } ;
78+
4979interface ClaudeCodeSessionProps {
5080 /**
5181 * Optional session to resume (when clicking from SessionList)
0 commit comments