@@ -52,11 +52,37 @@ export const shortcutsStore = map<Shortcuts>({
5252
5353// Create a single key for provider settings
5454const PROVIDER_SETTINGS_KEY = 'provider_settings' ;
55+ const AUTO_ENABLED_KEY = 'auto_enabled_providers' ;
5556
5657// Add this helper function at the top of the file
5758const isBrowser = typeof window !== 'undefined' ;
5859
59- // Initialize provider settings from both localStorage and defaults
60+ // Interface for configured provider info from server
61+ interface ConfiguredProvider {
62+ name : string ;
63+ isConfigured : boolean ;
64+ configMethod : 'environment' | 'none' ;
65+ }
66+
67+ // Fetch configured providers from server
68+ const fetchConfiguredProviders = async ( ) : Promise < ConfiguredProvider [ ] > => {
69+ try {
70+ const response = await fetch ( '/api/configured-providers' ) ;
71+
72+ if ( ! response . ok ) {
73+ throw new Error ( `HTTP ${ response . status } : ${ response . statusText } ` ) ;
74+ }
75+
76+ const data = ( await response . json ( ) ) as { providers ?: ConfiguredProvider [ ] } ;
77+
78+ return data . providers || [ ] ;
79+ } catch ( error ) {
80+ console . error ( 'Error fetching configured providers:' , error ) ;
81+ return [ ] ;
82+ }
83+ } ;
84+
85+ // Initialize provider settings from both localStorage and server-detected configuration
6086const getInitialProviderSettings = ( ) : ProviderSetting => {
6187 const initialSettings : ProviderSetting = { } ;
6288
@@ -92,8 +118,84 @@ const getInitialProviderSettings = (): ProviderSetting => {
92118 return initialSettings ;
93119} ;
94120
121+ // Auto-enable providers that are configured on the server
122+ const autoEnableConfiguredProviders = async ( ) => {
123+ if ( ! isBrowser ) {
124+ return ;
125+ }
126+
127+ try {
128+ const configuredProviders = await fetchConfiguredProviders ( ) ;
129+ const currentSettings = providersStore . get ( ) ;
130+ const savedSettings = localStorage . getItem ( PROVIDER_SETTINGS_KEY ) ;
131+ const autoEnabledProviders = localStorage . getItem ( AUTO_ENABLED_KEY ) ;
132+
133+ // Track which providers were auto-enabled to avoid overriding user preferences
134+ const previouslyAutoEnabled = autoEnabledProviders ? JSON . parse ( autoEnabledProviders ) : [ ] ;
135+ const newlyAutoEnabled : string [ ] = [ ] ;
136+
137+ let hasChanges = false ;
138+
139+ configuredProviders . forEach ( ( { name, isConfigured, configMethod } ) => {
140+ if ( isConfigured && configMethod === 'environment' && LOCAL_PROVIDERS . includes ( name ) ) {
141+ const currentProvider = currentSettings [ name ] ;
142+
143+ if ( currentProvider ) {
144+ /*
145+ * Only auto-enable if:
146+ * 1. Provider is not already enabled, AND
147+ * 2. Either we haven't saved settings yet (first time) OR provider was previously auto-enabled
148+ */
149+ const hasUserSettings = savedSettings !== null ;
150+ const wasAutoEnabled = previouslyAutoEnabled . includes ( name ) ;
151+ const shouldAutoEnable = ! currentProvider . settings . enabled && ( ! hasUserSettings || wasAutoEnabled ) ;
152+
153+ if ( shouldAutoEnable ) {
154+ currentSettings [ name ] = {
155+ ...currentProvider ,
156+ settings : {
157+ ...currentProvider . settings ,
158+ enabled : true ,
159+ } ,
160+ } ;
161+ newlyAutoEnabled . push ( name ) ;
162+ hasChanges = true ;
163+ }
164+ }
165+ }
166+ } ) ;
167+
168+ if ( hasChanges ) {
169+ // Update the store
170+ providersStore . set ( currentSettings ) ;
171+
172+ // Save to localStorage
173+ localStorage . setItem ( PROVIDER_SETTINGS_KEY , JSON . stringify ( currentSettings ) ) ;
174+
175+ // Update the auto-enabled providers list
176+ const allAutoEnabled = [ ...new Set ( [ ...previouslyAutoEnabled , ...newlyAutoEnabled ] ) ] ;
177+ localStorage . setItem ( AUTO_ENABLED_KEY , JSON . stringify ( allAutoEnabled ) ) ;
178+
179+ console . log ( `Auto-enabled providers: ${ newlyAutoEnabled . join ( ', ' ) } ` ) ;
180+ }
181+ } catch ( error ) {
182+ console . error ( 'Error auto-enabling configured providers:' , error ) ;
183+ }
184+ } ;
185+
95186export const providersStore = map < ProviderSetting > ( getInitialProviderSettings ( ) ) ;
96187
188+ // Export the auto-enable function for use in components
189+ export const initializeProviders = autoEnableConfiguredProviders ;
190+
191+ // Initialize providers when the module loads (in browser only)
192+ if ( isBrowser ) {
193+ // Use a small delay to ensure DOM and other resources are ready
194+ setTimeout ( ( ) => {
195+ autoEnableConfiguredProviders ( ) ;
196+ } , 100 ) ;
197+ }
198+
97199// Create a function to update provider settings that handles both store and persistence
98200export const updateProviderSettings = ( provider : string , settings : ProviderSetting ) => {
99201 const currentSettings = providersStore . get ( ) ;
@@ -113,6 +215,37 @@ export const updateProviderSettings = (provider: string, settings: ProviderSetti
113215 // Save to localStorage
114216 const allSettings = providersStore . get ( ) ;
115217 localStorage . setItem ( PROVIDER_SETTINGS_KEY , JSON . stringify ( allSettings ) ) ;
218+
219+ // If this is a local provider, update the auto-enabled tracking
220+ if ( LOCAL_PROVIDERS . includes ( provider ) && updatedProvider . settings . enabled !== undefined ) {
221+ updateAutoEnabledTracking ( provider , updatedProvider . settings . enabled ) ;
222+ }
223+ } ;
224+
225+ // Update auto-enabled tracking when user manually changes provider settings
226+ const updateAutoEnabledTracking = ( providerName : string , isEnabled : boolean ) => {
227+ if ( ! isBrowser ) {
228+ return ;
229+ }
230+
231+ try {
232+ const autoEnabledProviders = localStorage . getItem ( AUTO_ENABLED_KEY ) ;
233+ const currentAutoEnabled = autoEnabledProviders ? JSON . parse ( autoEnabledProviders ) : [ ] ;
234+
235+ if ( isEnabled ) {
236+ // If user enables provider, add to auto-enabled list (for future detection)
237+ if ( ! currentAutoEnabled . includes ( providerName ) ) {
238+ currentAutoEnabled . push ( providerName ) ;
239+ localStorage . setItem ( AUTO_ENABLED_KEY , JSON . stringify ( currentAutoEnabled ) ) ;
240+ }
241+ } else {
242+ // If user disables provider, remove from auto-enabled list (respect user choice)
243+ const updatedAutoEnabled = currentAutoEnabled . filter ( ( name : string ) => name !== providerName ) ;
244+ localStorage . setItem ( AUTO_ENABLED_KEY , JSON . stringify ( updatedAutoEnabled ) ) ;
245+ }
246+ } catch ( error ) {
247+ console . error ( 'Error updating auto-enabled tracking:' , error ) ;
248+ }
116249} ;
117250
118251export const isDebugMode = atom ( false ) ;
0 commit comments