§
    œŠtjÁ-  ã                  óú   — d Z ddlmZ ddlZddlmZmZmZ ddlm	Z	m
Z
 ddlmZ ddlmZmZ erddlmZ dd	lmZ dd
lmZ  ej        e¦  «        Z G d„ de
¦  «        Z G d„ de	¦  «        Z G d„ de¦  «        ZdS )a  Surface nested named agents as typed `run.subagents` handles.

Detects subagents via the `lc_agent_name` transition that langgraph's base
`_TasksLifecycleBase` now computes. `create_agent(name=...)` binds
`lc_agent_name` into the run config; the base transformer records, per
namespace, the `lc_agent_name` seen on each task start (first-write-wins).

A subagent boundary is a nested run whose `lc_agent_name` is set *and* differs
from its parent namespace's `lc_agent_name`. Plain subgraphs inherit the
parent's name (so they compare equal and are excluded); unnamed agents have
`lc_agent_name == None` (also excluded). For genuine subagents the base also
recovers the originating tool call and exposes it as a `cause`
(`{"type": "toolCall", "tool_call_id": ...}`) via `self._pending_cause`, joined
from the parent task's pending tool calls.

This transformer gates on that boundary and surfaces a typed handle on
`run.subagents`, then forwards child-scope events into the handle's mux so the
nested run can be consumed independently.
é    )ÚannotationsN)ÚTYPE_CHECKINGÚAnyÚClassVar)ÚAsyncSubgraphRunStreamÚSubgraphRunStream)ÚStreamChannel)ÚSubgraphStatusÚ_TasksLifecycleBase)ÚLifecycleCause)Ú	StreamMux)ÚProtocolEventc                  ó^   ‡ — e Zd ZdZddddœdˆ fd„Zedd„¦   «         Zedd„¦   «         Zˆ xZS )ÚSubagentRunStreamzØTyped sync handle for a nested named-agent execution.

    Surfaces on `run.subagents` when a nested run's `lc_agent_name` differs
    from its parent's (i.e., a `create_agent(name=...)` dispatched from a tool).
    N©Ú
graph_nameÚtrigger_call_idÚcauseÚmuxr   Úpathútuple[str, ...]r   ú
str | Noner   r   úLifecycleCause | NoneÚreturnÚNonec               ó`   •— t          ¦   «                              ||||¬¦  «         || _        d S ©N)r   r   r   ©ÚsuperÚ__init__Ú_cause©Úselfr   r   r   r   r   Ú	__class__s         €úd/var/www/html/CA-Chatbot/venv/lib/python3.11/site-packages/langchain/agents/_subagent_transformer.pyr    zSubagentRunStream.__init__3   ó?   ø€ õ 	‰Œ×ÒØØØ!Ø+ð	 	ñ 	
ô 	
ð 	
ð ˆŒˆˆó    c                ó   — | j         S ©z1Subagent name (the nested run's `lc_agent_name`).©r   ©r#   s    r%   ÚnamezSubagentRunStream.nameD   ó   € ð ŒÐr'   c                ó   — | j         S ©u  Causation edge â€” the tool call that triggered this subagent.

        Returns the `LifecycleCause` recovered by the base transformer (a
        `{"type": "toolCall", "tool_call_id": ...}` dict) when the originating
        tool call could be joined, else `None`.
        ©r!   r+   s    r%   r   zSubagentRunStream.causeI   ó   € ð Œ{Ðr'   ©r   r   r   r   r   r   r   r   r   r   r   r   ©r   r   ©r   r   ©	Ú__name__Ú
__module__Ú__qualname__Ú__doc__r    Úpropertyr,   r   Ú__classcell__©r$   s   @r%   r   r   ,   sœ   ø€ € € € € ðð ð "&Ø&*Ø'+ðð ð ð ð ð ð ð ð" ðð ð ñ „Xðð ðð ð ñ „Xðð ð ð ð r'   r   c                  ó^   ‡ — e Zd ZdZddddœdˆ fd„Zedd„¦   «         Zedd„¦   «         Zˆ xZS )ÚAsyncSubagentRunStreamz6Typed async handle for a nested named-agent execution.Nr   r   r   r   r   r   r   r   r   r   r   r   c               ó`   •— t          ¦   «                              ||||¬¦  «         || _        d S r   r   r"   s         €r%   r    zAsyncSubagentRunStream.__init__W   r&   r'   c                ó   — | j         S r)   r*   r+   s    r%   r,   zAsyncSubagentRunStream.nameh   r-   r'   c                ó   — | j         S r/   r0   r+   s    r%   r   zAsyncSubagentRunStream.causem   r1   r'   r2   r3   r4   r5   r<   s   @r%   r>   r>   T   s˜   ø€ € € € € Ø@Ð@ð "&Ø&*Ø'+ðð ð ð ð ð ð ð ð" ðð ð ñ „Xðð ðð ð ñ „Xðð ð ð ð r'   r>   c                  ó¨   ‡ — e Zd ZU dZdZded<   dZded<   d(d)ˆ fd„Zd*d„Zd+d„Z	d,d„Z
d-d„Zd.d„Zd.d„Zd/d„Zd0d „Zd0d!„Zd1d%„Zd2ˆ fd&„Zd2d'„Zˆ xZS )3ÚSubagentTransformera€  Promote nested named agents into typed handles on `run.subagents`.

    The base `_TasksLifecycleBase` records each namespace's `lc_agent_name`
    (set by `create_agent(name=...)`) and, on every task start, fires
    `_on_started` with the resolved `graph_name` and a `cause` for genuine
    subagent boundaries. This transformer gates on that boundary using the
    inherited `_lc_by_ns` map: a nested run is a subagent when it carries an
    `lc_agent_name`. Same-named nested agents (e.g. a subagent that invokes
    itself) are surfaced; unnamed agents (`None`) are excluded. Trade-off: a
    non-agent subgraph that inherited the parent's name will also surface.

    On the first matching task start it builds a child mux and emits a typed
    handle on `run.subagents`, then forwards subsequent child-scope events into
    that handle so the nested run can be consumed independently.
    TzClassVar[bool]Ú_nativeÚsupports_sync© Úscoper   r   r   c                óŒ   •— t          ¦   «                              |¦  «         t          ¦   «         | _        i | _        d | _        d S ©N)r   r    r	   Ú_logÚ_handlesÚ_mux)r#   rG   r$   s     €r%   r    zSubagentTransformer.__init__Ž   s8   ø€ Ý‰Œ×Ò˜ÑÔÐÝO\ÉÌˆŒ	Ø[]ˆŒØ&*ˆŒ	ˆ	ˆ	r'   údict[str, Any]c                ó   — d| j         iS )NÚ	subagents)rJ   r+   s    r%   ÚinitzSubagentTransformer.init”   s   € Ø˜TœYÐ'Ð'r'   r   r   c                ó   — || _         d S rI   )rL   )r#   r   s     r%   Ú_on_registerz SubagentTransformer._on_register—   s   € ØˆŒ	ˆ	ˆ	r'   ÚnsÚboolc                ó|   — t          | j        ¦  «        }t          |¦  «        |dz   k    o|d |…         | j        k    S )Né   )ÚlenrG   )r#   rS   Údepths      r%   Ú_should_trackz!SubagentTransformer._should_trackš   s8   € Ý�D”J‘”ˆÝ�2‰wŒw˜% !™)Ò#Ð@¨¨6¨E¨6¬
°d´jÒ(@Ð@r'   r   r   r   c                ó–  — | j         }| j                             |¦  «        }|€d S | j        �	|| j        v rd S 	 | j                             |¦  «        }n,# t          $ r t                               d|¦  «         Y d S w xY w|j	        rt          nt          } ||||||¬¦  «        }|| j        |<   | j                             |¦  «         d S )Nz6SubagentTransformer: could not create child mux for %s)r   r   r   r   r   )Ú_pending_causeÚ	_lc_by_nsÚgetrL   rK   Ú_make_childÚRuntimeErrorÚloggerÚdebugÚis_asyncr>   r   rJ   Úpush)	r#   rS   r   r   r   Úchild_lcÚ	child_muxÚ
handle_clsÚhandles	            r%   Ú_on_startedzSubagentTransformer._on_startedž   sþ   € ð Ô#ˆØ”>×%Ò% bÑ)Ô)ˆð ÐØˆFØŒ9Ð  d¤mÐ 3Ð 3ØˆFð	Øœ	×-Ò-¨bÑ1Ô1ˆIˆIøÝð 	ð 	ð 	Ý�LŠLÐQÐSUÑVÔVÐVØˆFˆFð	øøøð 09Ô/AÐXÕ+Ð+ÕGXˆ
Ø�ØØØ!Ø+Øð
ñ 
ô 
ˆð #ˆŒ�bÑØŒ	�Š�vÑÔÐÐÐs   ¹A Á%A=Á<A=Ústatusr
   Úerrorc                óž   — | j                              |¦  «        }|�|                      |||¦  «        sd S |                      |||¦  «         d S rI   )rK   r]   Ú_mark_terminalÚ_close_or_fail_handle©r#   rS   ri   rj   rg   s        r%   Ú_on_terminalz SubagentTransformer._on_terminalÅ   sW   € ð ”×"Ò" 2Ñ&Ô&ˆØˆ> ×!4Ò!4°V¸VÀUÑ!KÔ!Kˆ>ØˆFØ×"Ò" 6¨6°5Ñ9Ô9Ð9Ð9Ð9r'   c              ƒ  ó®   K  — | j                              |¦  «        }|�|                      |||¦  «        sd S |                      |||¦  «        ƒ d {V —† d S rI   )rK   r]   rl   Ú_aclose_or_fail_handlern   s        r%   Ú_aon_terminalz!SubagentTransformer._aon_terminalÐ   sm   è è € ð ”×"Ò" 2Ñ&Ô&ˆØˆ> ×!4Ò!4°V¸VÀUÑ!KÔ!Kˆ>ØˆFØ×)Ò)¨&°&¸%Ñ@Ô@Ð@Ð@Ð@Ð@Ð@Ð@Ð@Ð@Ð@r'   rg   ú*SubagentRunStream | AsyncSubagentRunStreamc                óT   — |j         rdS ||_        |�|j        €||_        d|_         dS )zBMark a handle terminal once. Returns True on the first transition.FNT)Ú_seen_terminalri   rj   ©r#   rg   ri   rj   s       r%   rl   z"SubagentTransformer._mark_terminalÛ   s<   € ð Ô ð 	Ø�5ØˆŒØÐ ¤Ð!5Ø ˆFŒLØ $ˆÔØˆtr'   c                óÎ   — |j         �|j         j        j        rd S |dk    r+|j                              t	          |pd¦  «        ¦  «         d S |j                              ¦   «          d S ©NÚfailedzSubagent failed)rL   Ú_eventsÚ_closedÚfailr_   Úcloserv   s       r%   rm   z)SubagentTransformer._close_or_fail_handleê   sm   € ð Œ;Ð &¤+Ô"5Ô"=ÐØˆFØ�XÒÐØŒK×Ò�\¨%Ð*DÐ3DÑEÔEÑFÔFÐFÐFÐFàŒK×ÒÑÔÐÐÐr'   c              ƒ  óê   K  — |j         �|j         j        j        rd S |dk    r1|j                              t	          |pd¦  «        ¦  «        ƒ d {V —† d S |j                              ¦   «         ƒ d {V —† d S rx   )rL   rz   r{   Úafailr_   Úacloserv   s       r%   rq   z*SubagentTransformer._aclose_or_fail_handle÷   s•   è è € ð Œ;Ð &¤+Ô"5Ô"=ÐØˆFØ�XÒÐØ”+×#Ò#¥L°Ð1KÐ:KÑ$LÔ$LÑMÔMÐMÐMÐMÐMÐMÐMÐMÐMÐMà”+×$Ò$Ñ&Ô&Ð&Ð&Ð&Ð&Ð&Ð&Ð&Ð&Ð&r'   Úeventr   ú1SubagentRunStream | AsyncSubagentRunStream | Nonec                ó  — t          |d         d         ¦  «        }t          | j        ¦  «        }t          |¦  «        |dz   k     rd S | j                             |d |dz   …         ¦  «        }|�|j        �|j        j        j        rd S |S )NÚparamsÚ	namespacerV   )ÚtuplerW   rG   rK   r]   rL   rz   r{   )r#   r�   rS   rX   rg   s        r%   Ú_handle_for_eventz%SubagentTransformer._handle_for_event  s…   € õ �5˜”? ;Ô/Ñ0Ô0ˆÝ�D”J‘”ˆÝˆr‰7Œ7�U˜Q‘YÒÐØ�4Ø”×"Ò" 2 k¨°©	 k¤?Ñ3Ô3ˆØˆ>˜Vœ[Ð0°F´KÔ4GÔ4OÐ0Ø�4Øˆr'   c                óÖ   •— t          ¦   «                              |¦  «        }|                      |¦  «        }|�/|                     |¦  «         |j                             |¦  «         |S rI   )r   Úprocessr‡   Ú_observe_eventrL   rc   )r#   r�   Úkeeprg   r$   s       €r%   r‰   zSubagentTransformer.process  sb   ø€ õ ‰wŒw�Š˜uÑ%Ô%ˆØ×'Ò'¨Ñ.Ô.ˆØÐØ×!Ò! %Ñ(Ô(Ð(ØŒK×Ò˜UÑ#Ô#Ð#Øˆr'   c              ƒ  ó  K  — |d         dk    r¬t          |d         d         ¦  «        }|d         d         }d|v r;|                      ||¦  «        D ]#\  }}}|                      |||¦  «        ƒ d {V —† Œ$nA|                      ||¦  «         |                      |¦  «         |                      ||¦  «         d}nd}|                      |¦  «        }|�5|                     |¦  «         |j         	                    |¦  «        ƒ d {V —† |S )	NÚmethodÚtasksr„   r…   ÚdataÚresultFT)
r†   Ú_pop_terminal_transitionsrr   Ú_record_identityÚ_record_pending_tool_callsÚ_handle_task_startr‡   rŠ   rL   Úapush)	r#   r�   rS   r�   Úchild_nsri   rj   r‹   rg   s	            r%   ÚaprocesszSubagentTransformer.aprocess  sJ  è è € ð
 �Œ?˜gÒ%Ð%Ý�u˜X” {Ô3Ñ4Ô4ˆBØ˜”? 6Ô*ˆDØ˜4ÐÐØ/3×/MÒ/MÈbÐRVÑ/WÔ/Wð Fð FÑ+�H˜f eØ×,Ò,¨X°v¸uÑEÔEÐEÐEÐEÐEÐEÐEÐEÐEðFð ×%Ò% b¨$Ñ/Ô/Ð/Ø×/Ò/°Ñ5Ô5Ð5Ø×'Ò'¨¨DÑ1Ô1Ð1ØˆDˆDàˆDØ×'Ò'¨Ñ.Ô.ˆØÐØ×!Ò! %Ñ(Ô(Ð(Ø”+×#Ò# EÑ*Ô*Ð*Ð*Ð*Ð*Ð*Ð*Ð*Øˆr'   )rF   )rG   r   r   r   )r   rM   )r   r   r   r   )rS   r   r   rT   )rS   r   r   r   r   r   r   r   )rS   r   ri   r
   rj   r   r   r   )rg   rs   ri   r
   rj   r   r   rT   )rg   rs   ri   r
   rj   r   r   r   )r�   r   r   r‚   )r�   r   r   rT   )r6   r7   r8   r9   rD   Ú__annotations__rE   r    rP   rR   rY   rh   ro   rr   rl   rm   rq   r‡   r‰   r—   r;   r<   s   @r%   rC   rC   x   sw  ø€ € € € € € ðð ð  #€GÐ"Ð"Ð"Ñ"ð %)€MÐ(Ð(Ð(Ñ(ð+ð +ð +ð +ð +ð +ð +ð(ð (ð (ð (ðð ð ð ðAð Að Að Að%ð %ð %ð %ðN	:ð 	:ð 	:ð 	:ð	Að 	Að 	Að 	Aðð ð ð ð ð  ð  ð  ð'ð 'ð 'ð 'ð
ð 
ð 
ð 
ðð ð ð ð ð ðð ð ð ð ð ð ð r'   rC   )r9   Ú
__future__r   ÚloggingÚtypingr   r   r   Úlanggraph.stream.run_streamr   r   Úlanggraph.stream.stream_channelr	   Úlanggraph.stream.transformersr
   r   Úlangchain_protocol.protocolr   Úlanggraph.stream._muxr   Úlanggraph.stream._typesr   Ú	getLoggerr6   r`   r   r>   rC   rF   r'   r%   ú<module>r£      s—  ððð ð( #Ð "Ð "Ð "Ð "Ð "à €€€Ø /Ð /Ð /Ð /Ð /Ð /Ð /Ð /Ð /Ð /ðð ð ð ð ð ð ð ð :Ð 9Ð 9Ð 9Ð 9Ð 9ðð ð ð ð ð ð ð ð
 ð 6Ø:Ð:Ð:Ð:Ð:Ð:Ø/Ð/Ð/Ð/Ð/Ð/Ø5Ð5Ð5Ð5Ð5Ð5à	ˆÔ	˜8Ñ	$Ô	$€ð%ð %ð %ð %ð %Ð)ñ %ô %ð %ðP!ð !ð !ð !ð !Ð3ñ !ô !ð !ðH{ð {ð {ð {ð {Ð-ñ {ô {ð {ð {ð {r'   