Ë
    ÓÏëjÄ  ã                  óä   — d Z ddlmZ ddlZddlZddlmZ ddlmZm	Z	 ddl
mZ ddlmZmZ ddlmZmZ dd	lmZ dd
lmZ  ej,                  e«      Z G d„ deeef   «      Z G d„ d«      ZddgZy)a)  LangGraph orchestration integration for CyberBrain26 Phase 6.

Implements multi-agent orchestration using LangGraph patterns (subagents,
supervisor-worker hierarchy) with shared AgentState for state propagation.
Integrates with existing PtahBridge / AgentRegistry / TaskDispatcher security chain.
é    )ÚannotationsN)ÚAny)Ú
StateGraphÚEND)ÚCompiledStateGraph)Ú	BaseAgentÚAgentResult)ÚAsyncEventBusÚMemoryTaskQueue)ÚAgentIdentity)ÚPermissionGatewayc                  ó$   ‡ — e Zd ZdZdˆ fd„Zˆ xZS )Ú
AgentStatez´Shared state propagated between supervisor and worker agents.

    Carries task data, intermediate results, and routing decisions through
    the LangGraph orchestration loop.
    c           	     ó4   •— t        ‰| �  d d d g dd dœfi |¤Ž y )NÚpending)Útask_idÚgoalÚcurrent_agentÚresultsÚstatusÚerror)ÚsuperÚ__init__)ÚselfÚkwargsÚ	__class__s     €úW/home/oem/CyberBrain26-unified/src/cyberbrain26/orchestration/langgraph_orchestrator.pyr   zAgentState.__init__    s1   ø€ Ü‰ÑàØØ!%ØØ#Øññ
	
ð ó
	
ó    )r   r   ÚreturnÚNone)Ú__name__Ú
__module__Ú__qualname__Ú__doc__r   Ú__classcell__)r   s   @r   r   r      s   ø„ ñ÷
ñ 
r   r   c                  óD   — e Zd ZdZ	 	 	 	 	 	 	 	 	 	 dd„Zdd„Zd	d„Zdd„Zy)
ÚLangGraphOrchestratoruÒ  Orchestrates agent execution via LangGraph state graph.

    Builds a supervisor â†’ worker hierarchy where:
    1. Supervisor analyzes the goal and assigns tasks to workers
    2. Workers execute specialized tasks (coder, evaluator, researcher, etc.)
    3. Results are aggregated and routed back through supervisor

    Integrates with CyberBrain26 security plane: every worker invocation
    passes through AgentIdentity + PermissionGateway before execution.
    c                ój   — || _         || _        || _        || _        d | _        | j                  «        y ©N)ÚbusÚqueueÚpermission_gatewayÚagentsÚ_graphÚ_build_graph)r   r*   r+   r,   r-   s        r   r   zLangGraphOrchestrator.__init__:   s4   € ð ˆŒØˆŒ
Ø"4ˆÔØˆŒØ15ˆŒØ×ÑÕr   c                ó   ‡ — dˆ fd„}dˆ fd„}dd„}t        t        «      }|j                  d|«       |j                  d|«       |j                  dd«       |j	                  d|«       |j                  d«       |j                  «       ‰ _        y)	z=Build LangGraph state graph with supervisor and worker nodes.c              “  óÀ  •‡K  — | j                  dd«      }| j                  dd«      }t        dd¬«      }‰j                  j                  |d|«      j                  j
                  dk(  sd	| d
<   d| d<   | S |j                  «       Št        ˆfd„dD «       «      rd| d<   | S t        ˆfd„dD «       «      rd| d<   | S t        ˆfd„dD «       «      rd| d<   | S d| d<   | S ­w)z;Supervisor analyzes state and routes to appropriate worker.r   Ú r   zlanggraph-supervisorÚ
supervisor©Úagent_idÚroleÚdispatchÚallowÚblockedr   z%supervisor denied dispatch permissionr   c              3  ó&   •K  — | ]  }|‰v –— Œ
 y ­wr)   © ©Ú.0ÚwÚcontents     €r   ú	<genexpr>zNLangGraphOrchestrator._build_graph.<locals>.supervisor_node.<locals>.<genexpr>Y   s   øè ø€ ÒT A�1˜”<ÑTùó   ƒ)ÚcodeÚfunctionÚ	implementÚwriteÚcoderr   c              3  ó&   •K  — | ]  }|‰v –— Œ
 y ­wr)   r;   r<   s     €r   r@   zNLangGraphOrchestrator._build_graph.<locals>.supervisor_node.<locals>.<genexpr>[   s   øè ø€ ÒQ a�Q˜'”\ÑQùrA   )ÚresearchÚsearchÚwebÚfindÚ
researcherc              3  ó&   •K  — | ]  }|‰v –— Œ
 y ­wr)   r;   r<   s     €r   r@   zNLangGraphOrchestrator._build_graph.<locals>.supervisor_node.<locals>.<genexpr>]   s   øè ø€ ÒU a�Q˜'”\ÑUùrA   )ÚevaluateÚassessÚreviewÚcheckÚ	evaluatorÚplanner)Úgetr   r,   rN   ÚdecisionÚvalueÚlowerÚany)Ústater   r   Úidentityr?   r   s       @€r   Úsupervisor_nodez;LangGraphOrchestrator._build_graph.<locals>.supervisor_nodeK   sù   ùè ø€ à—9‘9˜V RÓ(ˆDØ—i‘i 	¨2Ó.ˆGô %Ð.DÈ<ÔXˆHØ×*Ñ*×3Ñ3°H¸jÈ$ÓO×XÑX×^Ñ^ÐbiÒiØ"+��h‘Ø!H��g‘Ø�ð —j‘j“lˆGÜÓTÐ)SÔTÔTØ)0��oÑ&ð ˆLô ÓQÐ+PÔQÔQØ)5��oÑ&ð ˆLô ÓUÐ+TÔUÔUØ)4��oÑ&ð ˆLð *3��oÑ&àˆLùs   „CCc              “  óø  •K  — | j                  dd«      }‰j                  j                  |«      }|€d| d<   d|› �| d<   | S t        d|› �|¬	«      }‰j                  j	                  |d
| j                  dd«      «      }|j
                  j                  dk7  rd| d<   d|› d�| d<   | S | j                  d«      | j                  d«      ddœ}	 |j                  |«      ƒ d{  –—† }|rd| d   j                  |j                  ||j                  |j                  |j                  dœ«       |j                  rdnd| d<   |j                  | d<   | S 7 Œl# t        $ r}d| d<   t        |«      | d<   Y d}~| S d}~ww xY w­w)z:Worker agent executes assigned task through security gate.r   rS   NÚfailedr   zunknown agent role: r   z
langgraph-r4   Úexecuter   r2   r8   r9   zagent z denied execution permissionr   é   )r   r   Ú	max_stepsr   )Úagentr6   ÚsuccessÚdatar   Ú	completed)rT   r-   r   r,   rN   rU   rV   r^   ÚappendÚnamerb   rc   r   Ú	ExceptionÚstr)	rY   Ú
agent_rolera   rZ   rU   Ú	task_dataÚresultÚexcr   s	           €r   Úworker_nodez7LangGraphOrchestrator._build_graph.<locals>.worker_noded   sŽ  øè ø€ àŸ™ ?°IÓ>ˆJØ—K‘K—O‘O JÓ/ˆEàˆ}Ø"*��h‘Ø#7¸
°|Ð!D��g‘Ø�ô %°
¸:¸,Ð.GÈjÔYˆHØ×.Ñ.×7Ñ7¸À)ÈUÏYÉYÐW]Ð_aÓMbÓcˆHØ× Ñ ×&Ñ&¨'Ò1Ø"+��h‘Ø#)¨*¨Ð5QÐ!R��g‘Ø�ð !Ÿ9™9 YÓ/ØŸ	™	 &Ó)ØñˆIð*Ø$Ÿ}™}¨YÓ7×7�ÙØ˜)Ñ$×+Ñ+à%*§Z¡ZØ$.Ø'-§~¡~Ø$*§K¡KØ%+§\¡\ñôð (.§~¢~™¸8ð ˜(‘Oð &,§\¡\�E˜'‘Nð
 ˆLð' 8ùô ò *Ø"*��h‘Ü!$ S£��g•àˆLûð	*üsC   ƒC	E:ÃE Ã!EÃ"A*E ÅE:ÅE Å	E7ÅE2Å,E:Å2E7Å7E:c                ó<   — | j                  dd«      }|dv rt        S y)z)Route to next node based on state status.r   r   )rd   r]   r9   Úworker)rT   r   )rY   r   s     r   Úrouterz2LangGraphOrchestrator._build_graph.<locals>.router“   s#   € à—Y‘Y˜x¨Ó3ˆFØÐ;Ñ;Ü�
Ør   r3   ro   N)rY   r   r   r   )rY   r   r   rh   )r   r   Úadd_nodeÚadd_edgeÚadd_conditional_edgesÚset_entry_pointÚcompiler.   )r   r[   rm   rp   Úgraphs   `    r   r/   z"LangGraphOrchestrator._build_graphH   st   ø€ õ	õ2-	ó^	ô œ:Ó&ˆØ�‰�| _Ô5Ø�‰�x Ô-Ø�‰�| XÔ.Ø×#Ñ# H¨fÔ5Ø×Ñ˜lÔ+à—m‘m“oˆ�r   c              ƒ  ó¦   K  — | j                   €t        d«      ‚t        ||dg d¬«      }| j                   j                  |«      ƒ d{  –—† }|S 7 Œ­w)z2Execute orchestrated task through LangGraph graph.NzLangGraph graph not builtr   )r   r   r   r   r   )r.   ÚRuntimeErrorr   Úainvoke)r   r   r   Úinitial_stateÚfinal_states        r   ÚrunzLangGraphOrchestrator.run£   sY   è ø€ à�;‰;ÐÜÐ:Ó;Ð;ä"ØØØØØô
ˆð !ŸK™K×/Ñ/°Ó>×>ˆØÐð ?ús   ‚AAÁAÁ	Ac              ƒ  ó6   K  — t         j                  d«       y­w)zCleanup orchestrator resources.zLangGraphOrchestrator shutdownN)ÚloggerÚdebug)r   s    r   ÚshutdownzLangGraphOrchestrator.shutdown³   s   è ø€ ä�‰Ð5Õ6ùs   ‚N)
r*   r
   r+   r   r,   r   r-   zdict[str, BaseAgent]r   r    )r   r    )r   rh   r   rh   r   r   )r!   r"   r#   r$   r   r/   r|   r€   r;   r   r   r'   r'   .   sM   „ ñ	ðàðð ðð .ð	ð
 %ðð 
óóY&óvô 7r   r'   )r$   Ú
__future__r   ÚasyncioÚloggingÚtypingr   Úlanggraph.graphr   r   Úlanggraph.graph.stater   Ú cyberbrain26.agents.orchestratorr   r	   Úcyberbrain26.control_planer
   r   Ú$cyberbrain26.security_plane.identityr   Ú&cyberbrain26.security_plane.permissionr   Ú	getLoggerr!   r~   Údictrh   r   r'   Ú__all__r;   r   r   ú<module>rŽ      si   ðñõ #ã Û Ý ç +Ý 4ç Cß EÝ >Ý Dà	ˆ×	Ñ	˜8Ó	$€ô
��c˜3�h‘ô 
÷*G7ñ G7ðT # LÐ
1�r   