@@ -2,6 +2,7 @@ import React, { useEffect } from 'react';
22import { createLogger , createErrorMetadata } from '../utils/loggerConfig' ;
33import { debugState } from '../utils/clientDebugState' ;
44import { useSettingsStore } from '../store/settingsStore' ;
5+ import { useWorkerErrorStore } from '../store/workerErrorStore' ;
56import WebSocketService from '../services/WebSocketService' ;
67import { graphWorkerProxy } from '../features/graph/managers/graphWorkerProxy' ;
78import { graphDataManager } from '../features/graph/managers/graphDataManager' ;
@@ -74,10 +75,56 @@ const AppInitializer: React.FC<AppInitializerProps> = ({ onInitialized, onError
7475 logger . info ( 'Starting application initialization...' ) ;
7576 }
7677
78+ // Set up retry handler for worker initialization
79+ const initializeWorker = async ( ) : Promise < boolean > => {
80+ try {
81+ console . log ( '[AppInitializer] Step 1: Initializing graphWorkerProxy' ) ;
82+ await graphWorkerProxy . initialize ( ) ;
83+ console . log ( '[AppInitializer] Step 1b: graphWorkerProxy initialized, ensuring graphDataManager worker connection' ) ;
84+
85+ // Ensure graphDataManager is connected to the worker now that it's ready
86+ const workerReady = await graphDataManager . ensureWorkerReady ( ) ;
87+ console . log ( `[AppInitializer] Step 1c: graphDataManager worker ready: ${ workerReady } ` ) ;
88+
89+ if ( ! workerReady ) {
90+ throw new Error ( 'Graph worker failed to become ready after initialization' ) ;
91+ }
92+
93+ return true ;
94+ } catch ( workerError ) {
95+ console . error ( '[AppInitializer] Worker initialization failed:' , workerError ) ;
96+ const errorMessage = workerError instanceof Error ? workerError . message : String ( workerError ) ;
97+
98+ // Check for SharedArrayBuffer-related issues
99+ let details = errorMessage ;
100+ if ( typeof SharedArrayBuffer === 'undefined' ) {
101+ details = 'SharedArrayBuffer is not available. This is required for the graph engine to function properly.' ;
102+ } else if ( errorMessage . includes ( 'Worker' ) || errorMessage . includes ( 'worker' ) ) {
103+ details = `Worker initialization error: ${ errorMessage } ` ;
104+ }
105+
106+ useWorkerErrorStore . getState ( ) . setWorkerError (
107+ 'The graph visualization engine failed to initialize.' ,
108+ details
109+ ) ;
110+
111+ // Continue without worker - graceful degradation
112+ logger . warn ( 'Continuing without fully initialized worker' ) ;
113+ return false ;
114+ }
115+ } ;
116+
117+ // Store retry handler
118+ useWorkerErrorStore . getState ( ) . setRetryHandler ( async ( ) => {
119+ const success = await initializeWorker ( ) ;
120+ if ( ! success ) {
121+ throw new Error ( 'Worker initialization retry failed' ) ;
122+ }
123+ } ) ;
124+
77125 try {
78- console . log ( '[AppInitializer] Step 1: Initializing graphWorkerProxy' ) ;
79-
80- await graphWorkerProxy . initialize ( ) ;
126+ await initializeWorker ( ) ;
127+
81128 console . log ( '[AppInitializer] Step 2: graphWorkerProxy initialized, calling settings initialize' ) ;
82129 await initialize ( ) ;
83130 console . log ( '[AppInitializer] Step 3: Settings initialized' ) ;
0 commit comments