245245 if ( node . type === 'py_print' && inputs . length > 0 && ! block . content ) {
246246 block . content = inputs [ 0 ] ;
247247 }
248-
248+ if ( node . type === 'py_loop' && ( ! block . iterator || block . iterator . trim ( ) === '' ) ) {
249+ block . iterator = 'i' ;
250+ }
249251 if ( CONTAINER_TYPES . includes ( node . type ) ) {
250252 block . body = [ ] ;
251253 }
@@ -613,11 +615,20 @@ <h3 className="text-white font-bold text-lg mb-4 flex items-center gap-2">
613615 ) ;
614616
615617 const BaseNode = ( { data, title, icon : Icon , color, children } ) => (
616- < div >
617- < div className = { `forest-node-header ${ color } text-white` } > < Icon size = { 16 } /> < span > { title } </ span > </ div >
618+ < div className = { `relative transition-all ${ data . error ? 'ring-2 ring-red-500 shadow-[0_0_15px_rgba(239,68,68,0.6)] rounded-lg' : '' } ` } >
619+ < div className = { `forest-node-header ${ color } text-white` } >
620+ < Icon size = { 16 } /> < span > { title } </ span >
621+ </ div >
618622 < div className = "forest-node-body" > { children } </ div >
619623 < Handle type = "target" position = "left" className = "!bg-gray-400 !w-3 !h-3 hover:!bg-white" />
620624 < Handle type = "source" position = "right" className = "!bg-blue-500 !w-3 !h-3 hover:!bg-white" />
625+
626+ { /* Cartelito flotante con el error de sintaxis */ }
627+ { data . errorMsg && (
628+ < div className = "absolute -bottom-8 left-0 text-red-300 font-bold text-[10px] bg-gray-900 border border-red-500/50 px-2 py-1 rounded z-50 whitespace-nowrap animate-fade-in shadow-lg" >
629+ { data . errorMsg }
630+ </ div >
631+ ) }
621632 </ div >
622633 ) ;
623634
@@ -1595,6 +1606,7 @@ <h3 className="text-red-400 font-bold uppercase text-xs mb-3 flex items-center g
15951606 } ;
15961607
15971608 const runPipeline = async ( ) => {
1609+ clearNodeErrors ( ) ; // Limpiamos errores pasados
15981610 setIsExecuting ( true ) ;
15991611 setLogs ( [ { time : new Date ( ) . toLocaleTimeString ( ) , msg : "Iniciando Sandbox..." , type : 'warn' } ] ) ;
16001612 setEdges ( eds => eds . map ( e => ( { ...e , data : { status : 'active' } } ) ) ) ;
@@ -1606,6 +1618,16 @@ <h3 className="text-red-400 font-bold uppercase text-xs mb-3 flex items-center g
16061618 addLog ( "Ejecución finalizada." , 'success' ) ;
16071619 } else {
16081620 addLog ( `Error: ${ res . error } ` , 'error' ) ;
1621+
1622+ if ( res . error_nodes ) {
1623+ setNodes ( nds => nds . map ( n => {
1624+ const errInfo = res . error_nodes . find ( err => err . node_id === n . id ) ;
1625+ if ( errInfo ) {
1626+ return { ...n , data : { ...n . data , error : true , errorMsg : errInfo . message } } ;
1627+ }
1628+ return n ;
1629+ } ) ) ;
1630+ }
16091631 }
16101632 }
16111633 } catch ( e ) {
0 commit comments