We are almost there
Looks like it's working and keeping the layer red if they are not in a group but it's removing the red color if the layer is in a group.
Here is how it looks, level in group is not red

Fixed a bug with Groups in the second script
First Script (sets Red):
#target photoshop
app.bringToFront();
app.activeDocument.suspendHistory('Setting Red colortag', 'main()');
function main(){
if(!documents.length) return;
selectAllLayers();
var selLayers = getSelectedLayersIdx();
for(var a in selLayers){
colorLayer(Number(selLayers));
}
}
function colorLayer(idx){
var ref = new ActionReference();
ref.putProperty( charIDToTypeID("Prpr") , stringIDToTypeID( "name" ));
ref.putIndex( charIDToTypeID( "Lyr " ), idx);
var desc = executeActionGet(ref);
makeActiveByIndex( idx );
var layerName = desc.getString(stringIDToTypeID('name'));
if(layerName.indexOf("Layer")!=-1 || layerName.indexOf("Exposure")!=-1 || layerName.indexOf("Levels")!=-1){
var desc1 = new ActionDescriptor();
var ref1 = new ActionReference();
ref1.putIndex (stringIDToTypeID ("layer"), idx);
desc1.putReference (stringIDToTypeID ("target"), ref1);
var desc2 = new ActionDescriptor();
desc2.putEnumerated (stringIDToTypeID ("color"), stringIDToTypeID ("color"), stringIDToTypeID ("red"));
desc1.putObject (stringIDToTypeID ("to"), stringIDToTypeID ("layer"), desc2);
executeAction (stringIDToTypeID ("set"), desc1, DialogModes.NO);
}
}
function makeActiveByIndex( idx ){
var desc = new ActionDescriptor();
var ref = new ActionReference();
ref.putIndex(charIDToTypeID( "Lyr " ), idx)
desc.putReference( charIDToTypeID( "null" ), ref );
desc.putBoolean( charIDToTypeID( "MkVs" ), false );
executeAction( charIDToTypeID( "slct" ), desc, DialogModes.NO );
};
function selectAllLayers() {
var desc29 = new ActionDescriptor();
var ref23 = new ActionReference();
ref23.putEnumerated( charIDToTypeID('Lyr '), charIDToTypeID('Ordn'), charIDToTypeID('Trgt') );
desc29.putReference( charIDToTypeID('null'), ref23 );
executeAction( stringIDToTypeID('selectAllLayers'), desc29, DialogModes.NO );
};
function getSelectedLayersIdx(){
var selectedLayers = new Array;
var ref = new ActionReference();
ref.putEnumerated( charIDToTypeID("Dcmn"), charIDToTypeID("Ordn"), charIDToTypeID("Trgt") );
var desc = executeActionGet(ref);
if( desc.hasKey( stringIDToTypeID( 'targetLayers' ) ) ){
desc = desc.getList( stringIDToTypeID( 'targetLayers' ));
var c = desc.count
var selectedLayers = new Array();
for(var i=0;i<c;i++){
try{
activeDocument.backgroundLayer;
selectedLayers.push( desc.getReference( i ).getIndex() );
}catch(e){
selectedLayers.push( desc.getReference( i ).getIndex()+1 );
}
}
}else{
var ref = new ActionReference();
ref.putProperty( charIDToTypeID("Prpr") , charIDToTypeID( "ItmI" ));
ref.putEnumerated( charIDToTypeID("Lyr "), charIDToTypeID("Ordn"), charIDToTypeID("Trgt") );
try{
activeDocument.backgroundLayer;
selectedLayers.push( executeActionGet(ref).getInteger(charIDToTypeID( "ItmI" ))-1);
}catch(e){
selectedLayers.push( executeActionGet(ref).getInteger(charIDToTypeID( "ItmI" )));
}
}
return selectedLayers;
};
Second script sets the red to those layers, and in case also removes the red from the layers where the strings are missing:
#target photoshop
app.bringToFront();
app.activeDocument.suspendHistory('Setting or Removing Red colortag', 'main()');
function main(){
if(!documents.length) return;
selectAllLayers();
var selLayers = getSelectedLayersIdx();
for(var a in selLayers){
colorLayer(Number(selLayers));
}
}
function colorLayer(idx){
var ref = new ActionReference();
ref.putProperty( charIDToTypeID("Prpr") , stringIDToTypeID( "layerKind" ));
ref.putIndex( charIDToTypeID( "Lyr " ), idx);
var desc = executeActionGet(ref);
if (desc.getInteger(stringIDToTypeID("layerKind")) == 7) return;
var ref = new ActionReference();
ref.putProperty( charIDToTypeID("Prpr") , stringIDToTypeID( "name" ));
ref.putIndex( charIDToTypeID( "Lyr " ), idx);
var desc = executeActionGet(ref);
makeActiveByIndex( idx );
var layerName = desc.getString(stringIDToTypeID('name'));
var layerColor = (layerName.indexOf("Layer")!=-1 || layerName.indexOf("Exposure")!=-1 || layerName.indexOf("Levels")!=-1) ? stringIDToTypeID ("red") : charIDToTypeID("None");
var desc1 = new ActionDescriptor();
var ref1 = new ActionReference();
ref1.putIndex (stringIDToTypeID ("layer"), idx);
desc1.putReference (stringIDToTypeID ("target"), ref1);
var desc2 = new ActionDescriptor();
desc2.putEnumerated (stringIDToTypeID ("color"), stringIDToTypeID ("color"), layerColor);
desc1.putObject (stringIDToTypeID ("to"), stringIDToTypeID ("layer"), desc2);
executeAction (stringIDToTypeID ("set"), desc1, DialogModes.NO);
}
function makeActiveByIndex( idx ){
var desc = new ActionDescriptor();
var ref = new ActionReference();
ref.putIndex(charIDToTypeID( "Lyr " ), idx)
desc.putReference( charIDToTypeID( "null" ), ref );
desc.putBoolean( charIDToTypeID( "MkVs" ), false );
executeAction( charIDToTypeID( "slct" ), desc, DialogModes.NO );
};
function selectAllLayers() {
var desc29 = new ActionDescriptor();
var ref23 = new ActionReference();
ref23.putEnumerated( charIDToTypeID('Lyr '), charIDToTypeID('Ordn'), charIDToTypeID('Trgt') );
desc29.putReference( charIDToTypeID('null'), ref23 );
executeAction( stringIDToTypeID('selectAllLayers'), desc29, DialogModes.NO );
};
function getSelectedLayersIdx(){
var selectedLayers = new Array;
var ref = new ActionReference();
ref.putEnumerated( charIDToTypeID("Dcmn"), charIDToTypeID("Ordn"), charIDToTypeID("Trgt") );
var desc = executeActionGet(ref);
if( desc.hasKey( stringIDToTypeID( 'targetLayers' ) ) ){
desc = desc.getList( stringIDToTypeID( 'targetLayers' ));
var c = desc.count
var selectedLayers = new Array();
for(var i=0;i<c;i++){
try{
activeDocument.backgroundLayer;
selectedLayers.push( desc.getReference( i ).getIndex() );
}catch(e){
selectedLayers.push( desc.getReference( i ).getIndex()+1 );
}
}
}else{
var ref = new ActionReference();
ref.putProperty( charIDToTypeID("Prpr") , charIDToTypeID( "ItmI" ));
ref.putEnumerated( charIDToTypeID("Lyr "), charIDToTypeID("Ordn"), charIDToTypeID("Trgt") );
try{
activeDocument.backgroundLayer;
selectedLayers.push( executeActionGet(ref).getInteger(charIDToTypeID( "ItmI" ))-1);
}catch(e){
selectedLayers.push( executeActionGet(ref).getInteger(charIDToTypeID( "ItmI" )));
}
}
return selectedLayers;
};
Hope this helps!
Davide