@@ -90,19 +90,46 @@ function readSettingsFile(filePath: string): Record<string, unknown> {
9090 }
9191}
9292
93+ /**
94+ * Check if a recommended hook is installed in settings
95+ */
96+ function isHookInstalled (
97+ settings : Record < string , unknown > & { hooks ?: Record < string , unknown [ ] > } ,
98+ hook : typeof RECOMMENDED_HOOKS [ number ]
99+ ) : boolean {
100+ const hooks = settings . hooks ;
101+ if ( ! hooks ) return false ;
102+
103+ const eventHooks = hooks [ hook . event ] ;
104+ if ( ! eventHooks || ! Array . isArray ( eventHooks ) ) return false ;
105+
106+ // Check if hook exists in nested hooks array (by command)
107+ return eventHooks . some ( ( entry ) => {
108+ const entryHooks = ( entry as Record < string , unknown > ) . hooks as Array < Record < string , unknown > > | undefined ;
109+ if ( ! entryHooks || ! Array . isArray ( entryHooks ) ) return false ;
110+ return entryHooks . some ( ( h ) => ( h as Record < string , unknown > ) . command === hook . command ) ;
111+ } ) ;
112+ }
113+
93114/**
94115 * Get system settings from global settings file
95116 */
96117function getSystemSettings ( ) : {
97118 injectionControl : typeof DEFAULT_INJECTION_CONTROL ;
98119 personalSpecDefaults : typeof DEFAULT_PERSONAL_SPEC_DEFAULTS ;
99120 devProgressInjection : typeof DEFAULT_DEV_PROGRESS_INJECTION ;
100- recommendedHooks : typeof RECOMMENDED_HOOKS ;
121+ recommendedHooks : Array < typeof RECOMMENDED_HOOKS [ number ] & { installed : boolean } > ;
101122} {
102- const settings = readSettingsFile ( GLOBAL_SETTINGS_PATH ) as Record < string , unknown > ;
123+ const settings = readSettingsFile ( GLOBAL_SETTINGS_PATH ) as Record < string , unknown > & { hooks ?: Record < string , unknown [ ] > } ;
103124 const system = ( settings . system || { } ) as Record < string , unknown > ;
104125 const user = ( settings . user || { } ) as Record < string , unknown > ;
105126
127+ // Check installation status for each recommended hook
128+ const recommendedHooksWithStatus = RECOMMENDED_HOOKS . map ( hook => ( {
129+ ...hook ,
130+ installed : isHookInstalled ( settings , hook )
131+ } ) ) ;
132+
106133 return {
107134 injectionControl : {
108135 ...DEFAULT_INJECTION_CONTROL ,
@@ -116,7 +143,7 @@ function getSystemSettings(): {
116143 ...DEFAULT_DEV_PROGRESS_INJECTION ,
117144 ...( ( system . devProgressInjection || { } ) as Record < string , unknown > )
118145 } as typeof DEFAULT_DEV_PROGRESS_INJECTION ,
119- recommendedHooks : RECOMMENDED_HOOKS
146+ recommendedHooks : recommendedHooksWithStatus
120147 } ;
121148}
122149
0 commit comments