§
    ™ŠtjX ã                  ó,  — U d Z ddlmZ ddlZddlZddlZddlmZmZ ddl	m
Z
 ddlmZmZmZmZ ddlmZ ddlmZmZ dd	lmZ dd
lmZ ddlmZmZmZmZmZmZm Z  ddl!m"Z"m#Z# ddl$m%Z%m&Z& ddl'm(Z(m)Z)m*Z*m+Z+  G d„ de¦  «        Z,e
 G d„ d¦  «        ¦   «         Z-g d¢Z.de/d<   dSd„Z0dTd„Z1ed         Z2dUd"„Z3dVd&„Z4dWd*„Z5dXd+„Z6dYd-„Z7dZd[d/„Z8 G d0„ d1¦  «        Z9 G d2„ d3¦  «        Z: G d4„ d5¦  «        Z; G d6„ d7¦  «        Z< G d8„ d9¦  «        Z=d\d?„Z> G d@„ dA¦  «        Z? G dB„ dC¦  «        Z@ G dD„ dE¦  «        ZA G dF„ dG¦  «        ZB G dH„ dI¦  «        ZC G dJ„ dK¦  «        ZD G dL„ dM¦  «        ZE G dN„ dO¦  «        ZF G dP„ dQ¦  «        ZG G dR„ d=¦  «        ZHdS )]a%  Synchronous thread-centric streaming surface for the v3 protocol.

`SyncThreadStream` is a synchronous context manager that owns a
`SyncProtocolSseTransport` for one thread, dispatches commands (`run.start`,
`run.respond`), exposes typed subscriptions over a single shared SSE,
surfaces lifecycle state (`interrupted`, `interrupts`) via an always-on
lifecycle watcher thread, and provides typed projections (`thread.values`,
`thread.messages`, `thread.tool_calls`, `thread.extensions`).

Sync mirror of `libs/sdk-py/langgraph_sdk/_async/stream.py`.
é    )ÚannotationsN)ÚIteratorÚMapping)Ú	dataclass)ÚAnyÚLiteralÚ	TypedDictÚcast©ÚChatModelStream)ÚEventÚSubscribeParams)ÚSyncHttpClient)ÚQueryParamTypes)ÚDataDecoderÚDecoderÚExtensionsDecoderÚMessagesDecoderÚSubgraphsDecoderÚToolCallsDecoderÚvalidate_interleave_channels)Úcompute_union_filterÚinfer_channel)ÚSyncStreamControllerÚ_SyncSubscription)ÚSyncEventStreamHandleÚSyncProtocolSseTransportÚSyncProtocolTransportÚSyncProtocolWebSocketTransportc                  ó2   — e Zd ZU dZded<   ded<   ded<   dS )	ÚInterruptPayloadzCPayload surfaced when the server requests human input for a thread.ÚstrÚinterrupt_idr   Úvalueú	list[str]Ú	namespaceN)Ú__name__Ú
__module__Ú__qualname__Ú__doc__Ú__annotations__© ó    úX/var/www/html/CA-Chatbot/venv/lib/python3.11/site-packages/langgraph_sdk/_sync/stream.pyr!   r!   .   s9   € € € € € € ØMÐMàÐÐÑØ€J€J�JØÐÐÑÐÐr-   r!   c                  ó,   — e Zd ZU dZded<   dZded<   dS )Ú_RunTerminalzHTerminal state record resolved into `_run_done` on lifecycle completion.zLiteral['completed', 'errored']ÚstatusNzBaseException | NoneÚerror)r'   r(   r)   r*   r+   r2   r,   r-   r.   r0   r0   6   s5   € € € € € € àRÐRà+Ð+Ð+Ñ+Ø"&€EÐ&Ð&Ð&Ñ&Ð&Ð&r-   r0   )	ÚvaluesÚupdatesÚmessagesÚtoolsÚ	lifecycleÚinputÚcheckpointsÚtasksÚcustomr%   Ú_ALL_CHANNELSÚchannelsr&   Úreturnr   c                ó*   — | t          |¦  «        gddœS )Nr   )r=   Ú
namespacesÚdepth©Úlist)r=   r&   s     r.   Ú_exact_namespace_paramsrD   K   s%   € ð
 Ý˜I‘”Ð'Øðð ð r-   Úparams_fieldr   c                óª   — t          | t          ¦  «        sg S |                      d¦  «        pg }t          |t          ¦  «        rt          |¦  «        ng S )Nr&   )Ú
isinstanceÚdictÚgetrC   )rE   r&   s     r.   Ú_event_namespacerJ   V   sP   € Ý�l¥DÑ)Ô)ð Øˆ	Ø× Ò  Ñ-Ô-Ð3°€IÝ(¨µDÑ9Ô9ÐA�4�	‰?Œ?ˆ?¸rÐAr-   )ÚstartedÚ	completedÚfailedÚinterruptedÚsegmentr"   útuple[str, str | None]c                óD   — |                       d¦  «        \  }}}||r|nd fS )Nú:)Ú	partition)rO   ÚnameÚsepÚtask_ids       r.   Ú_parse_namespace_segmentrW   `   s0   € Ø ×*Ò*¨3Ñ/Ô/Ñ€Dˆ#ˆwØ˜CÐ)�� TÐ)Ð)r-   Údataúdict[str, Any]ú!tuple[SubgraphStatus, str | None]c                ó„   — |                       d¦  «        rdS |                       d¦  «        }|rdt          |¦  «        fS dS )NÚ
interrupts)rN   Nr2   rM   )rL   N©rI   r"   )rX   r2   s     r.   Ú_terminal_from_tasks_resultr^   e   sN   € ð ‡x‚x�ÑÔð #Ø"Ð"Ø�HŠH�WÑÔ€EØð $Ø�˜U™œÐ#Ð#ØÐr-   Úscopeútuple[str, ...]Úboolc                ó˜   — t          | ¦  «        t          |¦  «        dz   k    o't          | d t          |¦  «        …         ¦  «        |k    S )Né   )ÚlenÚtuple)r&   r_   s     r.   Ú_is_direct_childrf   p   s?   € Ýˆy‰>Œ>�S ™ZœZ¨!™^Ò+ÐWµ°iÀÅ#ÀeÁ*Ä*ÀÔ6MÑ0NÔ0NÐRWÒ0WÐWr-   c                ó,   — g d¢t          | ¦  «        gdœS )N)r5   r:   r6   r7   )r=   r@   rB   ©r_   s    r.   Ú_subgraph_subscription_paramsri   t   s(   € ð
 @Ð?Ð?Ý˜E‘{”{�mðð ð r-   ú
str | Nonec                ó|   — |                       d¦  «        p|                       d¦  «        }|�t          |¦  «        nd S )NÚidÚ
message_idr]   )rX   rm   s     r.   Ú_message_event_idrn   ~   s7   € Ø—’˜$‘”Ð9 4§8¢8¨LÑ#9Ô#9€JØ(Ð4�3ˆz‰?Œ?ˆ?¸$Ð>r-   Úfallbackc                ó@   — t          | ¦  «        }|�d|› �S |�d|› �S dS )a  Return the routing key for a message-channel event in `active`.

    Keys on `message_id` when available so concurrent messages that share the
    same `run_id` (two AI turns in one agent step) route to independent streams
    rather than colliding on a shared `run:<run_id>` slot.
    Nzmessage:Ú
__single__)rn   )rX   ro   rm   s      r.   Ú_message_route_keyrr   ƒ   s>   € õ # 4Ñ(Ô(€JØÐØ&˜*Ð&Ð&Ð&ØÐØ$˜(Ð$Ð$Ð$Øˆ<r-   c                  ó8   — e Zd Zdd„Zdd„Zdd	„Zddd„Zdd„Zd
S )Ú_BlockingResultr>   ÚNonec                óR   — t          j        ¦   «         | _        d | _        d | _        d S ©N)Ú	threadingr   Ú_eventÚ_valueÚ_error©Úselfs    r.   Ú__init__z_BlockingResult.__init__“   s#   € Ý”oÑ'Ô'ˆŒØˆŒØ,0ˆŒˆˆr-   r$   r   c                ó|   — | j                              ¦   «         rd S || _        | j                              ¦   «          d S rw   )ry   Úis_setrz   Úset)r}   r$   s     r.   Ú
set_resultz_BlockingResult.set_result˜   ó<   € ØŒ;×ÒÑÔð 	ØˆFØˆŒØŒ�ŠÑÔÐÐÐr-   r2   ÚBaseExceptionc                ó|   — | j                              ¦   «         rd S || _        | j                              ¦   «          d S rw   )ry   r€   r{   r�   )r}   r2   s     r.   Úset_exceptionz_BlockingResult.set_exceptionž   rƒ   r-   NÚtimeoutúfloat | Nonec                ó~   — | j                              |¦  «        st          d¦  «        ‚| j        �| j        ‚| j        S )Nz"Result was not set before timeout.)ry   ÚwaitÚTimeoutErrorr{   rz   )r}   r‡   s     r.   Úresultz_BlockingResult.result¤   sB   € ØŒ{×Ò Ñ(Ô(ð 	EÝÐCÑDÔDÐDØŒ;Ð"Ø”+ÐØŒ{Ðr-   ra   c                ó4   — | j                              ¦   «         S rw   )ry   r€   r|   s    r.   Údonez_BlockingResult.done«   s   € ØŒ{×!Ò!Ñ#Ô#Ð#r-   ©r>   ru   )r$   r   r>   ru   )r2   r„   r>   ru   rw   )r‡   rˆ   r>   r   ©r>   ra   )r'   r(   r)   r~   r‚   r†   rŒ   rŽ   r,   r-   r.   rt   rt   ’   s}   € € € € € ð1ð 1ð 1ð 1ð
ð ð ð ðð ð ð ðð ð ð ð ð$ð $ð $ð $ð $ð $r-   rt   c                  ó,   — e Zd ZdZdd„Zdddd	œdd„ZdS )Ú_SyncAgentModulez9Assistant graph helpers scoped to one sync thread stream.ÚownerÚSyncThreadStreamr>   ru   c                ó   — || _         d S rw   ©Ú_owner©r}   r“   s     r.   r~   z_SyncAgentModule.__init__²   ó   € ØˆŒˆˆr-   FN)ÚxrayÚheadersÚparamsrš   ú
int | boolr›   úMapping[str, str] | Nonerœ   úQueryParamTypes | Noneúdict[str, list[dict[str, Any]]]c               ó4  — | j         j        rt          d¦  «        ‚i }|r||d<   |r"|                     t	          |¦  «        ¦  «         i | j         j        ¥t	          |pi ¦  «        ¥}| j         j                             d| j         j        › d�||pd ¬¦  «        S )NzSyncThreadStream is closed.rš   z/assistants/z/graph)rœ   r›   )	r—   Ú_closedÚRuntimeErrorÚupdaterH   Ú_headersÚ_httprI   Úassistant_id)r}   rš   r›   rœ   Úquery_paramsÚrequest_headerss         r.   Úget_treez_SyncAgentModule.get_treeµ   s¹   € ð Œ;Ôð 	>ÝÐ<Ñ=Ô=Ð=Ø')ˆØð 	(Ø#'ˆL˜Ñ Øð 	.Ø×Ò¥ V¡¤Ñ-Ô-Ð-ØI˜Tœ[Ô1ÐIµT¸'¸-ÀRÑ5HÔ5HÐIˆØŒ{Ô ×$Ò$Ø;˜4œ;Ô3Ð;Ð;Ð;ØØ#Ð+ tð %ñ 
ô 
ð 	
r-   ©r“   r”   r>   ru   )rš   r�   r›   rž   rœ   rŸ   r>   r    )r'   r(   r)   r*   r~   rª   r,   r-   r.   r’   r’   ¯   sW   € € € € € ØCÐCðð ð ð ð !Ø,0Ø)-ð
ð 
ð 
ð 
ð 
ð 
ð 
ð 
r-   r’   c                  ó:   — e Zd ZdZdd„Zddddœdd„Zddœdd„ZdS )ÚSyncRunModulezwCommand dispatcher for `run.start`.

    Bound to one `SyncThreadStream`; accesses its transport and id allocator.
    r“   r”   r>   ru   c                ó   — || _         d S rw   r–   r˜   s     r.   r~   zSyncRunModule.__init__Ñ   r™   r-   N)r8   ÚconfigÚmetadatar8   r   r¯   údict[str, Any] | Noner°   rY   c               óö   — d| j         j        i}|�||d<   |�||d<   |�||d<   | j                              d|¦  «        }d| j         _        | j         j        }|� |j        �|j                             ¦   «          |S )zGSend `run.start` to the server. Returns the result (`{"run_id": ...}`).r§   Nr8   r¯   r°   z	run.startT)r—   r§   Ú_send_commandÚ	_run_seenÚ_controllerÚ_run_start_gater�   )r}   r8   r¯   r°   rœ   rŒ   Ú
controllers          r.   ÚstartzSyncRunModule.startÔ   s•   € ð #1°$´+Ô2JÐ!KˆØÐØ#ˆF�7‰OØÐØ%ˆF�8ÑØÐØ!)ˆF�:ÑØ”×*Ò*¨;¸Ñ?Ô?ˆØ $ˆŒÔØ”[Ô,ˆ
ØÐ! jÔ&@Ð&LØÔ&×*Ò*Ñ,Ô,Ð,Øˆr-   ©r#   Úresponser#   rj   c               ó¶  ‡— | j         j        }‰€mt          |¦  «        dk    rt          d¦  «        ‚t          |¦  «        dk    r/d„ |D ¦   «         }t          dt          |¦  «        › d|›d�¦  «        ‚|d         }n1t	          ˆfd	„|D ¦   «         d¦  «        }|€t          d
‰›d�¦  «        ‚|d         |d         |dœ}| j                              d|¦  «        S )a	  Reply to a server-side interrupt and resume the run.

        Args:
            response: the response value forwarded as `params.response` on the wire.
            interrupt_id: optional explicit id. When omitted, requires exactly one
                outstanding interrupt.

        Raises:
            RuntimeError: no outstanding interrupts; `interrupt_id` is None but
                multiple interrupts are outstanding; or the explicit `interrupt_id`
                doesn't match any outstanding interrupt.
        Nr   zrthread.run.respond: no outstanding interrupt. Provide an explicit `interrupt_id` or wait for `thread.interrupted`.rc   c                ó   — g | ]
}|d          ‘ŒS r¹   r,   )Ú.0Úps     r.   ú
<listcomp>z)SyncRunModule.respond.<locals>.<listcomp>  s   € Ð>Ð>Ð>¨Q�q˜Ô(Ð>Ð>Ð>r-   u"   thread.run.respond: ambiguous â€” z outstanding interrupts (z&). Provide an explicit `interrupt_id`.c              3  ó4   •K  — | ]}|d          ‰k    ¯|V — ŒdS )r#   Nr,   )r½   r¾   r#   s     €r.   ú	<genexpr>z(SyncRunModule.respond.<locals>.<genexpr>  s2   øè è € ÐMÐM�q¨1¨^Ô+<ÀÒ+LÐ+L�Ð+LÐ+LÐ+LÐ+LÐMÐMr-   z!thread.run.respond: interrupt_id zA does not match any outstanding interrupt in `thread.interrupts`.r#   r&   )r#   r&   rº   zinput.respond)r—   r\   rd   r£   Únextr³   )r}   rº   r#   ÚoutstandingÚidsÚmatchrœ   s     `    r.   ÚrespondzSyncRunModule.respondê   sI  ø€ ð$ ”kÔ,ˆØÐÝ�;ÑÔ 1Ò$Ð$Ý"ðPñô ð õ �;ÑÔ !Ò#Ð#Ø>Ð>°+Ð>Ñ>Ô>�Ý"ð&½¸[Ñ9IÔ9Ið &ð &Ø/2ð&ð &ð &ñô ð ð
   ”NˆEˆEåØMÐMÐMÐM˜KÐMÑMÔMØñô ˆEð ˆ}Ý"ðN¸ð Nð Nð Nñô ð ð
 " .Ô1Ø˜{Ô+Ø ð
ð 
ˆð
 Œ{×(Ò(¨¸&ÑAÔAÐAr-   r«   )r8   r   r¯   r±   r°   r±   r>   rY   )rº   r   r#   rj   r>   rY   )r'   r(   r)   r*   r~   r¸   rÆ   r,   r-   r.   r­   r­   Ë   s†   € € € € € ðð ð
ð ð ð ð Ø(,Ø*.ðð ð ð ð ð ð4 $(ð	0Bð 0Bð 0Bð 0Bð 0Bð 0Bð 0Bð 0Br-   r­   c                  ó2   — e Zd ZdZdd„Zdd„Zdd
„Zdd„ZdS )Ú_SyncValuesProjectionz¾Typed projection for `thread.values`.

    Supports `for snapshot in thread.values` (REST snapshot then live stream
    events) and `thread.values.get()` (delegates to `thread.output`).
    Úthreadr”   r>   ru   c                ó   — || _         d S rw   )Ú_thread)r}   rÉ   s     r.   r~   z_SyncValuesProjection.__init__$  ó   € ØˆŒˆˆr-   úIterator[Any]c                ó*   — |                       ¦   «         S )zHIterate over state snapshots: REST state first, then live values events.)Ú_values_iterr|   s    r.   Ú__iter__z_SyncValuesProjection.__iter__'  s   € à× Ò Ñ"Ô"Ð"r-   r   c                ó   — | j         j        S )z<Return terminal state values; equivalent to `thread.output`.)rË   Úoutputr|   s    r.   rI   z_SyncValuesProjection.get+  s   € àŒ|Ô"Ð"r-   c              #  óŒ  K  — | j         j        €t          d¦  «        ‚ddgi}| j                              |¦  «        }t	          d¦  «        }	 | j                              |¦  «         | j                              ¦   «          | j                              ¦   «         }|d         V — 	 |j         	                    ¦   «         }|€"	 | j          
                    |j        ¦  «         d S |                     t          t          t          t           f         |¦  «        ¦  «        E d {V —† Œ~# | j          
                    |j        ¦  «         w xY w)Nõ,   SyncThreadStream not entered â€” use `with`.r=   r3   )rË   Ú
_transportr£   Ú_register_subscriptionr   Ú_reconcile_streamÚ_ensure_fanout_runningÚ_fetch_stateÚqueuerI   Ú_unregister_subscriptionrl   Úfeedr
   rH   r"   r   )r}   rœ   ÚsubÚdecoderÚstateÚitems         r.   rÏ   z"_SyncValuesProjection._values_iter/  s<  è è € ØŒ<Ô"Ð*ÝÐMÑNÔNÐNØ#-°¨zÐ":ˆØŒl×1Ò1°&Ñ9Ô9ˆÝ˜hÑ'Ô'ˆð	:ØŒL×*Ò*¨6Ñ2Ô2Ð2ØŒL×/Ò/Ñ1Ô1Ð1Ø”L×-Ò-Ñ/Ô/ˆEØ˜”/Ð!Ð!Ð!ðDØ”y—}’}‘”�Ø�<Øð ŒL×1Ò1°#´&Ñ9Ô9Ð9Ð9Ð9ð #Ÿ<š<­­Tµ#µs°(¬^¸TÑ(BÔ(BÑCÔCÐCÐCÐCÐCÐCÐCÐCð	Døð ŒL×1Ò1°#´&Ñ9Ô9Ð9Ð9øøøs   ÁA2D" Ã!AD" Ä"!EN)rÉ   r”   r>   ru   )r>   rÍ   ©r>   r   )r'   r(   r)   r*   r~   rÐ   rI   rÏ   r,   r-   r.   rÈ   rÈ     sn   € € € € € ðð ðð ð ð ð#ð #ð #ð #ð#ð #ð #ð #ð:ð :ð :ð :ð :ð :r-   rÈ   c                  ó.   — e Zd ZdZ	 ddd	„Zdd„Zdd„ZdS )Ú_SyncMessagesProjectionzüTyped projection for root-scope `thread.messages`.

    Iterating yields one `ChatModelStream` per message-start event. Each
    stream is fully dispatched before being yielded so that `str(message.text)`
    works immediately inside a `for` loop.
    NrÉ   r”   r&   úlist[str] | Noner>   ru   c                ó@   — || _         t          |pg ¦  «        | _        d S rw   ©rË   rC   Ú
_namespace©r}   rÉ   r&   s      r.   r~   z _SyncMessagesProjection.__init__K  ó"   € ð ˆŒÝ˜y˜¨BÑ/Ô/ˆŒˆˆr-   úIterator[ChatModelStream]c                ó*   — |                       ¦   «         S rw   ©Ú_messages_iterr|   s    r.   rÐ   z _SyncMessagesProjection.__iter__Q  ó   € Ø×"Ò"Ñ$Ô$Ð$r-   c              #  ó”  K  — | j         j        €t          d¦  «        ‚| j        s| j         j        nd }|�#t          || j        | j         ¦  «        E d {V —† d S t          dg| j        ¦  «        }| j                              |¦  «        }t          | j        d„ ¬¦  «        }g }g }	 | j          	                    |¦  «         | j          
                    ¦   «          	 |j                             ¦   «         }|€\|r|                     d¦  «        V — |°	 |D ]}| j                              |¦  «         Œ| j                              |j        ¦  «         d S |                     t%          t&          t(          t*          f         |¦  «        ¦  «        D ]F}| j                              |¦  «         |                     |¦  «         |                     |¦  «         ŒG|r3|d         j        r&|                     d¦  «        V — |r|d         j        °&�Œ/# |D ]}| j                              |¦  «         Œ| j                              |j        ¦  «         w xY w)NrÔ   r5   c                ó&   — t          | ||¬¦  «        S ©N©r&   Únoderm   r   rò   s      r.   ú<lambda>z8_SyncMessagesProjection._messages_iter.<locals>.<lambda>_  s   € Å/Ø#¨$¸:ðCñ Cô C€ r-   ©r&   Ústream_factoryTr   )rË   rÕ   r£   rç   Ú_root_messages_inboxÚ_drain_messages_inboxrD   rÖ   r   r×   rØ   rÚ   rI   ÚpopÚ!_unregister_active_message_streamrÛ   rl   rÜ   r
   rH   r"   r   Ú_register_active_message_streamÚappendÚ_done)	r}   Ú
root_inboxrœ   rÝ   rÞ   Ú
registeredÚpendingrà   Ústreams	            r.   rí   z&_SyncMessagesProjection._messages_iterT  s‚  è è € ØŒ<Ô"Ð*ÝÐMÑNÔNÐNØ>B¼oÐW�T”\Ô6Ð6ÐSWˆ
ØÐ!Ý,¨Z¸¼È$Ì,ÑWÔWÐWÐWÐWÐWÐWÐWÐWØˆFÝ(¨*¨°t´ÑGÔGˆØŒl×1Ò1°&Ñ9Ô9ˆÝ!Ø”oðð ð
ñ 
ô 
ˆð -/ˆ
Ø)+ˆð	:ØŒL×*Ò*¨6Ñ2Ô2Ð2ØŒL×/Ò/Ñ1Ô1Ð1ð)Ø”y—}’}‘”�Ø�<à!ð -Ø%Ÿkšk¨!™nœnÐ,Ð,Ð,ð "ð -àð %ð Gð G�Ø”×>Ò>¸vÑFÔFÐFÐFØŒL×1Ò1°#´&Ñ9Ô9Ð9Ð9Ð9ð &Ÿlšl­4µµS½#°X´ÀÑ+EÔ+EÑFÔFð +ð +�FØ”L×@Ò@ÀÑHÔHÐHØ×%Ò% fÑ-Ô-Ð-Ø—N’N 6Ñ*Ô*Ð*Ð*ð ð ) '¨!¤*Ô"2ð )Ø!Ÿ+š+ a™.œ.Ð(Ð(Ð(ð ð ) '¨!¤*Ô"2ð )ñ)øð  %ð Gð G�Ø”×>Ò>¸vÑFÔFÐFÐFØŒL×1Ò1°#´&Ñ9Ô9Ð9Ð9øøøs   Â$A*H ÅB8H ÈA Irw   ©rÉ   r”   r&   rä   r>   ru   ©r>   rê   ©r'   r(   r)   r*   r~   rÐ   rí   r,   r-   r.   rã   rã   C  sf   € € € € € ðð ð GKð0ð 0ð 0ð 0ð 0ð%ð %ð %ð %ð&:ð &:ð &:ð &:ð &:ð &:r-   rã   Úinboxúqueue.Queue[Event | None]rÉ   r”   rê   c              #  ó   K  — i }	 	 |                       ¦   «         }|€/	 |                     ¦   «         D ]}|                     |¦  «         ŒdS |                      d¦  «        pi }t          |t          ¦  «        r|                      d¦  «        nd}t          |t          ¦  «        sŒŸ|                      d¦  «        }|dk    �r?t          |¦  «        }	t          ||	¬¦  «        }
t          |                      d¦  «        t          ¦  «        r|                      d¦  «        ni }t          t          |¦  «        |r|                      d	¦  «        nd|	¬
¦  «        }|||
<   | 	                    |¦  «         | 
                    |¦  «         |j        �sn|                       ¦   «         }|€|                      d¦  «         �nA|                      d¦  «        pi }t          |t          ¦  «        r|                      d¦  «        nd}t          |t          ¦  «        sŒŽ|                      d¦  «        }t          |¦  «        }|                      |¦  «        }|€G|dk    rAt          |¦  «        dk    r.t          t          |                     ¦   «         ¦  «        ¦  «        }|�\| 
                    |¦  «         |dv rC|                     |¦  «         t          |                     ¦   «         ¦  «        D ]\  }}||u r||= Œ|j        �¯n|V — nÍt          |¦  «        }
|                      |
¦  «        }|€G|
dk    rAt          |¦  «        dk    r.t          t          |                     ¦   «         ¦  «        ¦  «        }|€�Œk| 
                    |¦  «         |dv rC|                     |¦  «         t          |                     ¦   «         ¦  «        D ]\  }}||u r||= Œ�ŒÈ# |                     ¦   «         D ]}|                     |¦  «         Œw xY w)aI  Drain a pre-filled inbox of messages events, yielding one stream per message.

    Mirrors the pre-dispatch pattern in `_SyncMessagesProjection._messages_iter`:
    each `message-start` triggers an inner loop that reads ahead until the stream
    is `_done` before yielding, so callers can do `str(stream.text)` immediately.
    TNrœ   rX   Úeventúmessage-start©ro   r°   Úlanggraph_noderò   rq   rc   ©zmessage-finishr2   )rI   r3   rú   rG   rH   rn   rr   r   rC   rû   Údispatchrý   Úputrd   rÂ   ÚiterÚitems)r  r&   rÉ   Úactiverà   ÚsrE   rX   Ú
event_typerm   Úkeyr°   r  Ú	next_itemÚnext_paramsÚ	next_dataÚnext_event_typeÚnext_keyÚtargetÚrkÚcandÚ	route_keyÚ	candidates                          r.   rø   rø   }  s'  è è € ð *,€FðE8ðA	2Ø—9’9‘;”;ˆDØˆ|Øð@ —’‘”ð 	8ð 	8ˆAØ×4Ò4°QÑ7Ô7Ð7Ð7ð	8ð 	8ð  Ÿ8š8 HÑ-Ô-Ð3°ˆLÝ/9¸,ÍÑ/MÔ/MÐW�<×#Ò# FÑ+Ô+Ð+ÐSWˆDÝ˜d¥DÑ)Ô)ð ØØŸš 'Ñ*Ô*ˆJØ˜_Ò,Ñ,Ý.¨tÑ4Ô4�
Ý(¨¸
ÐCÑCÔC�õ " $§(¢(¨:Ñ"6Ô"6½Ñ=Ô=ð�D—H’H˜ZÑ(Ô(Ð(àð õ
 )Ý" 9™oœoØ;CÐM˜ŸšÐ&6Ñ7Ô7Ð7ÈØ)ðñ ô �ð
 %��s‘Ø×6Ò6°vÑ>Ô>Ð>Ø—’ Ñ%Ô%Ð%ð !œ,ñ 3Ø %§	¢	¡¤�IØ Ð(ØŸ	š	 $™œ˜ÙØ"+§-¢-°Ñ"9Ô"9Ð"?¸R�Kõ & kµ4Ñ8Ô8ð"˜Ÿš¨Ñ/Ô/Ð/à!ð õ
 & iµÑ6Ô6ð !Ø Ø&/§m¢m°GÑ&<Ô&<�OÝ1°)Ñ<Ô<�HØ#ŸZšZ¨Ñ1Ô1�FØ�~¨(°lÒ*BÐ*BÅsÈ6Á{Ä{ÐVWÒGWÐGWÝ!%¥d¨6¯=ª=©?¬?Ñ&;Ô&;Ñ!<Ô!<˜ØÐ)ØŸš¨	Ñ2Ô2Ð2Ø*Ð.IÐIÐIØ"×DÒDÀVÑLÔLÐLÝ,0°·²±´Ñ,@Ô,@ð 3ð 3¡  DØ#'¨6 > >Ø(.¨r¨
øð1 !œ,ñ 3ð2 ����å(¨Ñ.Ô.�ØŸš C™œ�Ø�> c¨\Ò&9Ð&9½cÀ&¹k¼kÈQÒ>NÐ>NÝ!¥$ v§}¢}¡¤Ñ"7Ô"7Ñ8Ô8�FØ�>ÙØ—’ Ñ%Ô%Ð%ØÐ!<Ð<Ð<Ø×<Ò<¸VÑDÔDÐDÝ04°V·\²\±^´^Ñ0DÔ0Dð 2ð 2Ñ,˜	 9Ø$¨Ð.Ð.Ø & yÐ 1øñCA	2øðF —’‘”ð 	8ð 	8ˆAØ×4Ò4°QÑ7Ô7Ð7Ð7ð	8øøøs   †O ÁNO Ï.O=c                  ót   — e Zd ZdZddddœdd„Zedd„¦   «         Zedd„¦   «         Zdd„Zdd„Z	d d„Z
d!d„ZdS )"ÚSyncToolCallHandlez)Sync handle for one root-scope tool call.Ni   )r8   r&   Úmax_queue_sizeÚtool_call_idr"   rT   r8   r   r&   rä   r!  Úintr>   ru   c               óà   — || _         || _        || _        t          |pg ¦  «        | _        d| _        d | _        t          ¦   «         | _        t          j
        |¬¦  «        | _        d| _        d S )NF©Úmaxsize)r"  rT   r8   rC   r&   rŽ   r2   rt   Ú_resultrÚ   ÚQueueÚ_deltasÚ_deltas_consumed)r}   r"  rT   r8   r&   r!  s         r.   r~   zSyncToolCallHandle.__init__Ô  sj   € ð )ˆÔØˆŒ	ØˆŒ
Ý˜i˜o¨2Ñ.Ô.ˆŒØˆŒ	Ø+/ˆŒ
Ý(7Ñ(9Ô(9ˆŒÝ05´ÀNÐ0SÑ0SÔ0SˆŒØ&+ˆÔÐÐr-   c                ó4   — | j                              ¦   «         S )z:Block until the tool call completes and return its output.)r'  rŒ   r|   s    r.   rÒ   zSyncToolCallHandle.outputç  s   € ð Œ|×"Ò"Ñ$Ô$Ð$r-   úIterator[str]c                ód   — | j         rt          d¦  «        ‚d| _         |                      ¦   «         S )uì   Iterate over tool output deltas emitted before the terminal event.

        Raises:
            RuntimeError: if called more than once â€” the underlying queue is
                single-consumer and cannot be fanned out safely.
        zDSyncToolCallHandle.deltas can only be iterated by a single consumer.T)r*  r£   Ú_delta_iterr|   s    r.   ÚdeltaszSyncToolCallHandle.deltasì  s@   € ð Ô ð 	ÝØVñô ð ð !%ˆÔØ×ÒÑ!Ô!Ð!r-   c              #  óL   K  — 	 | j                              ¦   «         }|€d S |V — Œ"rw   )r)  rI   )r}   rà   s     r.   r.  zSyncToolCallHandle._delta_iterû  s6   è è € ð	Ø”<×#Ò#Ñ%Ô%ˆDØˆ|Ø�ØˆJˆJˆJð		r-   Údeltac                óL   — | j         rd S | j                             |¦  «         d S rw   )rŽ   r)  Ú
put_nowait)r}   r1  s     r.   Ú_push_deltazSyncToolCallHandle._push_delta  s-   € ØŒ9ð 	ØˆFØŒ×Ò Ñ&Ô&Ð&Ð&Ð&r-   rÒ   c                óŽ   — | j         rd S d| _         | j                             |¦  «         | j                             d ¦  «         d S ©NT)rŽ   r'  r‚   r)  r3  )r}   rÒ   s     r.   Ú_finishzSyncToolCallHandle._finish  sJ   € ØŒ9ð 	ØˆFØˆŒ	ØŒ×Ò Ñ'Ô'Ð'ØŒ×Ò Ñ%Ô%Ð%Ð%Ð%r-   Úerrr„   c                óœ   — | j         rd S d| _         || _        | j                             |¦  «         | j                             d ¦  «         d S r6  )rŽ   r2   r'  r†   r)  r3  )r}   r8  s     r.   Ú_failzSyncToolCallHandle._fail  sQ   € ØŒ9ð 	ØˆFØˆŒ	ØˆŒ
ØŒ×"Ò" 3Ñ'Ô'Ð'ØŒ×Ò Ñ%Ô%Ð%Ð%Ð%r-   )r"  r"   rT   r"   r8   r   r&   rä   r!  r#  r>   ru   rá   )r>   r,  )r1  r"   r>   ru   )rÒ   r   r>   ru   ©r8  r„   r>   ru   )r'   r(   r)   r*   r~   ÚpropertyrÒ   r/  r.  r4  r7  r:  r,   r-   r.   r   r   Ñ  sÓ   € € € € € Ø3Ð3ð Ø&*Ø"ð,ð ,ð ,ð ,ð ,ð ,ð& ð%ð %ð %ñ „Xð%ð ð"ð "ð "ñ „Xð"ðð ð ð ð'ð 'ð 'ð 'ð
&ð &ð &ð &ð&ð &ð &ð &ð &ð &r-   r   c                  ó.   — e Zd ZdZ	 ddd	„Zdd„Zdd„ZdS )Ú_SyncToolCallsProjectionz4Typed projection for root-scope `thread.tool_calls`.NrÉ   r”   r&   rä   r>   ru   c                ó@   — || _         t          |pg ¦  «        | _        d S rw   ræ   rè   s      r.   r~   z!_SyncToolCallsProjection.__init__  ré   r-   úIterator[SyncToolCallHandle]c                ó*   — |                       ¦   «         S rw   ©Ú_tool_calls_iterr|   s    r.   rÐ   z!_SyncToolCallsProjection.__iter__   ó   € Ø×$Ò$Ñ&Ô&Ð&r-   c              #  ó¨  K  — | j         j        €t          d¦  «        ‚t          dg| j        ¦  «        }| j                              |¦  «        }t          | j        d„ ¬¦  «        }g }g }	 | j                              |¦  «         | j                              ¦   «          	 |j	         
                    ¦   «         }|€þ|r|                     d¦  «        V — |°	 | j         j        }d }|�A|                     ¦   «         r-	 |                     ¦   «         }	|	j        }n# t           $ r Y nw xY w|�|nt          d¦  «        }
t#          |j                             ¦   «         ¦  «        D ]}|                     |
¦  «         Œ|D ]}| j                              |¦  «         Œ| j                              |j        ¦  «         d S |                     t3          t4          t6          t8          f         |¦  «        ¦  «        D ]F}| j                              |¦  «         |                     |¦  «         |                     |¦  «         ŒG|r3|d         j        r&|                     d¦  «        V — |r|d         j        °&�ŒÑ# | j         j        }d }|�A|                     ¦   «         r-	 |                     ¦   «         }	|	j        }n# t           $ r Y nw xY w|�|nt          d¦  «        }
t#          |j                             ¦   «         ¦  «        D ]}|                     |
¦  «         Œ|D ]}| j                              |¦  «         Œ| j                              |j        ¦  «         w xY w)NrÔ   r6   c                ó(   — t          | |||¬¦  «        S ©N©r"  rT   r8   r&   ©r   rH  s       r.   rô   z;_SyncToolCallsProjection._tool_calls_iter.<locals>.<lambda>*  s%   € Ý"Ø!-ØØØ'ð	ñ ô ð r-   ©r&   Úhandle_factoryTr   ú3Tool call stream closed before terminal tool event.)rË   rÕ   r£   rD   rç   rÖ   r   r×   rØ   rÚ   rI   rù   Ú	_run_donerŽ   rŒ   r2   Ú	ExceptionrC   Ú_activer3   r:  Ú_unregister_active_tool_callrÛ   rl   rÜ   r
   rH   r"   r   Ú_register_active_tool_callrü   )r}   rœ   rÝ   rÞ   rÿ   r   rà   Úrun_doneÚterminal_errÚterminalr8  Úhandles               r.   rC  z)_SyncToolCallsProjection._tool_calls_iter#  s¬  è è € ØŒ<Ô"Ð*ÝÐMÑNÔNÐNÝ(¨'¨°D´OÑDÔDˆØŒl×1Ò1°&Ñ9Ô9ˆÝ"Ø”oðð ð

ñ 

ô 

ˆð 02ˆ
Ø,.ˆð)	:ØŒL×*Ò*¨6Ñ2Ô2Ð2ØŒL×/Ò/Ñ1Ô1Ð1ð)Ø”y—}’}‘”�Ø�<à!ð -Ø%Ÿkšk¨!™nœnÐ,Ð,Ð,ð "ð -àð ”|Ô-ˆHØ15ˆLØÐ#¨¯ª©¬Ð#ðØ'ŸšÑ0Ô0�HØ#+¤>�L�LøÝ ð ð ð Ø�Dðøøøð  Ð+ð �å!Ð"WÑXÔXð õ
 ˜wœ×5Ò5Ñ7Ô7Ñ8Ô8ð "ð "�Ø—’˜SÑ!Ô!Ð!Ð!Ø$ð Bð B�Ø”×9Ò9¸&ÑAÔAÐAÐAØŒL×1Ò1°#´&Ñ9Ô9Ð9Ð9Ð9ð? &Ÿlšl­4µµS½#°X´ÀÑ+EÔ+EÑFÔFð +ð +�FØ”L×;Ò;¸FÑCÔCÐCØ×%Ò% fÑ-Ô-Ð-Ø—N’N 6Ñ*Ô*Ð*Ð*ð ð ) '¨!¤*¤/ð )Ø!Ÿ+š+ a™.œ.Ð(Ð(Ð(ð ð ) '¨!¤*¤/ð )ñ)øð* ”|Ô-ˆHØ15ˆLØÐ#¨¯ª©¬Ð#ðØ'ŸšÑ0Ô0�HØ#+¤>�L�LøÝ ð ð ð Ø�Dðøøøð  Ð+ð �å!Ð"WÑXÔXð õ
 ˜wœ×5Ò5Ñ7Ô7Ñ8Ô8ð "ð "�Ø—’˜SÑ!Ô!Ð!Ð!Ø$ð Bð B�Ø”×9Ò9¸&ÑAÔAÐAÐAØŒL×1Ò1°#´&Ñ9Ô9Ð9Ð9øøøsK   Á*A*I/ Ã:D Ä
D#Ä"D#Æ7B8I/ É/%MÊJ1Ê0MÊ1
J>Ê;MÊ=J>Ê>BMrw   r  ©r>   r@  ©r'   r(   r)   r*   r~   rÐ   rC  r,   r-   r.   r>  r>    sb   € € € € € Ø>Ð>ð GKð0ð 0ð 0ð 0ð 0ð'ð 'ð 'ð 'ð;:ð ;:ð ;:ð ;:ð ;:ð ;:r-   r>  c                  óR   — e Zd ZdZddœdd„Zd d„Zd!d„Zd"d„Zd#d„Zd$d„Z	d%d&d„Z
dS )'ÚSyncScopedStreamHandlez<Scoped streaming handle for one discovered child invocation.r   )r!  rÉ   r”   Úpathr`   Ú
graph_namerj   Útrigger_call_idr!  r#  r>   ru   c               óf  — || _         || _        t          |¦  «        | _        || _        || _        d| _        d | _        || _        t          j
        ¦   «         | _        t          j        |¬¦  «        | _        t          j        |¬¦  «        | _        t          j        |¬¦  «        | _        i | _        t%          ¦   «         | _        t)          | ¦  «        | _        t-          | ¦  «        | _        t1          | ¦  «        | _        | j        | _        t7          |t          |¦  «        ¬¦  «        | _        d S )NrK   r%  ©r&   )rË   rZ  rC   r&   r[  r\  r1   r2   Ú_max_queue_sizerx   ÚLockÚ_finish_lockrÚ   r(  Ú_messages_inboxÚ_tools_inboxÚ_tasks_inboxÚ_descendant_handlesr�   Ú_iterated_inboxesÚ_SyncHandleMessagesProjectionr5   Ú_SyncHandleToolCallsProjectionÚ
tool_callsÚ_SyncHandleSubgraphsProjectionÚ	subgraphsÚ	subagentsÚ_SyncExtensionsProjectionÚ
extensions)r}   rÉ   rZ  r[  r\  r!  s         r.   r~   zSyncScopedStreamHandle.__init__d  s  € ð ˆŒØˆŒ	Ý˜d™œˆŒØ$ˆŒØ.ˆÔØ&/ˆŒØ!%ˆŒ
Ø-ˆÔÝ%œNÑ,Ô,ˆÔÝ:?¼+Ø"ð;
ñ ;
ô ;
ˆÔõ 8=´{Ø"ð8
ñ 8
ô 8
ˆÔõ 8=´{Ø"ð8
ñ 8
ô 8
ˆÔð SUˆÔ õ ,/©5¬5ˆÔÝ5°dÑ;Ô;ˆŒÝ8¸Ñ>Ô>ˆŒÝ7¸Ñ=Ô=ˆŒØœˆŒÝ3°FÅdÈ4ÁjÄjÐQÑQÔQˆŒˆˆr-   r  r   c                óD  — |                      d¦  «        }|dk    r| j                             |¦  «         nA|dk    r| j                             |¦  «         n |dk    r| j                             |¦  «         |dv r¢t          t          |                      d¦  «        pi ¦  «        ¦  «        }t          | j         	                    ¦   «         ¦  «        D ]L\  }}t          |¦  «        }t          |¦  «        |k    r#|d|…         |k    r|                     |¦  «         ŒKdS dS )a  Route a descendant event into the appropriate channel inbox.

        Also fans out to any registered descendant handles whose path is a
        prefix of the event namespace, so grandchild events are delivered at
        push time rather than via a post-hoc drain-and-replay.
        Úmethodr5   r6   r:   ©r5   r6   r:   rœ   N)rI   rb  r3  rc  rd  re   rJ   rC   re  r  rd   Ú_push_event)r}   r  rp  Úns_tupleÚ	desc_pathÚdesc_handleÚdesc_lens          r.   rr  z"SyncScopedStreamHandle._push_eventŽ  s7  € ð —’˜8Ñ$Ô$ˆØ�ZÒÐØÔ ×+Ò+¨EÑ2Ô2Ð2Ð2Ø�wÒÐØÔ×(Ò(¨Ñ/Ô/Ð/Ð/Ø�wÒÐØÔ×(Ò(¨Ñ/Ô/Ð/ð Ð3Ð3Ð3ÝÕ-¨e¯iªi¸Ñ.AÔ.AÐ.GÀRÑHÔHÑIÔIˆHÝ*.¨tÔ/G×/MÒ/MÑ/OÔ/OÑ*PÔ*Pð 3ð 3Ñ&�	˜;Ý˜y™>œ>�Ý�x‘=”= HÒ,Ð,°¸)¸8¸)Ô1DÈ	Ò1QÐ1QØ×+Ò+¨EÑ2Ô2Ð2øð 4Ð3ð3ð 3r-   rU  c           	     ó(  — || j         |j        <   t          |j        ¦  «        }dD ]ë}t          | |¦  «        }g }	 	 |                     |                     ¦   «         ¦  «         n# t          j        $ r Y nw xY wŒ?|D ]”}|                     |¦  «         |€Œt          t          |                     d¦  «        pi ¦  «        ¦  «        }t          |¦  «        |k    r6|d|…         |j        k    r#t          ||¦  «                             |¦  «         Œ•ŒìdS )a.  Register a newly-discovered grandchild so future events are fanned out.

        Also drains any events already buffered in this handle's inboxes whose
        namespace matches the grandchild, so events that arrived before the
        grandchild was discovered are forwarded in arrival order.
        )rb  rc  rd  TNrœ   )re  rZ  rd   Úgetattrrü   Ú
get_nowaitrÚ   ÚEmptyr3  re   rJ   rI   )r}   rU  rv  Ú
inbox_attrr  Ústagingr  rs  s           r.   Ú_register_descendantz+SyncScopedStreamHandle._register_descendant¥  sJ  € ð 17ˆÔ  ¤Ñ-Ý�v”{Ñ#Ô#ˆð
ð 	Bð 	BˆJõ
 07°t¸ZÑ/HÔ/HˆEØ*,ˆGððØ—N’N 5×#3Ò#3Ñ#5Ô#5Ñ6Ô6Ð6Ð6øÝ”{ð ð ð Ø�Eðøøøðð
 !ð Bð B�Ø× Ò  Ñ'Ô'Ð'Ø�=ØÝ Õ!1°%·)²)¸HÑ2EÔ2EÐ2KÈÑ!LÔ!LÑMÔM�Ý�x‘=”= HÒ,Ð,°¸)¸8¸)Ô1DÈÌÒ1SÐ1SÝ˜F JÑ/Ô/×:Ò:¸5ÑAÔAÐAøðBð	Bð 	Bs   ¼'A$Á$A6Á5A6c                ó<   — | j                              |d¦  «         dS )z6Remove a grandchild after it reaches a terminal state.N)re  rù   )r}   rZ  s     r.   Ú_unregister_descendantz-SyncScopedStreamHandle._unregister_descendantÂ  s!   € àÔ ×$Ò$ T¨4Ñ0Ô0Ð0Ð0Ð0r-   Úkindr"   c                ó¢   — | j                              |¦  «         | j        dk    r)t          | d|› d�¦  «                             d¦  «         dS dS )a\  Record that an inbox has an active consumer.

        If the handle is already closed (status != 'started'), immediately
        enqueue a sentinel so the consumer's `get()` terminates. This
        handles sequential consumption (iterate after the handle is finished).

        Must be called by each projection at the start of iteration.
        rK   Ú_Ú_inboxN)rf  Úaddr1   rx  r3  ©r}   r€  s     r.   Ú_mark_iteratedz%SyncScopedStreamHandle._mark_iteratedÆ  sb   € ð 	Ô×"Ò" 4Ñ(Ô(Ð(ØŒ;˜)Ò#Ð#õ �DÐ*˜dÐ*Ð*Ð*Ñ+Ô+×6Ò6°tÑ<Ô<Ð<Ð<Ð<ð $Ð#r-   c                óp   — dD ]2}|| j         v r't          | d|› d�¦  «                             d¦  «         Œ3dS )a,  Signal EOF only on channel inboxes that have an active consumer.

        Inboxes without a consumer would accumulate a leaked None sentinel
        that is never drained, so we skip them. For inboxes whose consumer
        starts after this call, `_mark_iterated` sends the sentinel lazily.
        rq  r‚  rƒ  N)rf  rx  r3  r…  s     r.   Ú_close_inboxesz%SyncScopedStreamHandle._close_inboxesÕ  sZ   € ð 3ð 	Að 	AˆDØ�tÔ-Ð-Ð-Ý˜Ð. $Ð.Ð.Ð.Ñ/Ô/×:Ò:¸4Ñ@Ô@Ð@øð	Að 	Ar-   Nr1   ÚSubgraphStatusr2   c                óº   — | j         5  | j        dk    r	 d d d ¦  «         d S || _        || _        d d d ¦  «         n# 1 swxY w Y   |                      ¦   «          d S )NrK   )ra  r1   r2   rˆ  )r}   r1   r2   s      r.   r7  zSyncScopedStreamHandle._finishà  sÂ   € ØÔð 	ð 	ØŒ{˜iÒ'Ð'Øð	ð 	ð 	ñ 	ô 	ð 	ð 	ð 	ð !ˆDŒKØˆDŒJð		ð 	ð 	ñ 	ô 	ð 	ð 	ð 	ð 	ð 	ð 	øøøð 	ð 	ð 	ð 	ð
 	×ÒÑÔÐÐÐs   ˆ<¢<¼A ÁA )rÉ   r”   rZ  r`   r[  rj   r\  rj   r!  r#  r>   ru   ©r  r   r>   ru   ©rU  rY  r>   ru   )rZ  r`   r>   ru   )r€  r"   r>   ru   r�   rw   )r1   r‰  r2   rj   r>   ru   )r'   r(   r)   r*   r~   rr  r}  r  r†  rˆ  r7  r,   r-   r.   rY  rY  a  sÉ   € € € € € ØFÐFð  ð(Rð (Rð (Rð (Rð (Rð (RðT3ð 3ð 3ð 3ð.Bð Bð Bð Bð:1ð 1ð 1ð 1ð=ð =ð =ð =ð	Að 	Að 	Að 	Aðð ð ð ð ð ð r-   rY  c                  ó*   — e Zd ZdZdd„Zdd„Zdd	„Zd
S )rg  zLMessages projection that drains a `SyncScopedStreamHandle`'s messages inbox.rU  rY  r>   ru   c                ó   — || _         d S rw   ©Ú_handle©r}   rU  s     r.   r~   z&_SyncHandleMessagesProjection.__init__ì  rÌ   r-   rê   c                ó*   — |                       ¦   «         S rw   rì   r|   s    r.   rÐ   z&_SyncHandleMessagesProjection.__iter__ï  rî   r-   c              #  ó’  K  — | j                              d¦  «         i }| j         j        }| j         j        }	 	 |                     ¦   «         }|€	 d S |                     d¦  «        pi }t          |¦  «        }||k    rŒGt          |t          ¦  «        r|                     d¦  «        nd }t          |t          ¦  «        sŒ‰|                     d¦  «        }|dk    r´t          |¦  «        }	t          ||	¬¦  «        }
t          |                     d¦  «        t          ¦  «        r|                     d¦  «        ni }t          t          |¦  «        |r|                     d	¦  «        nd |	¬
¦  «        }|||
<   |                     |¦  «         |V — n²t          |¦  «        }
|                     |
¦  «        }|€At          |¦  «        dk    r.t          t          |                     ¦   «         ¦  «        ¦  «        }|€�ŒÃ|                     |¦  «         |dv r.t          |                     ¦   «         ¦  «        D ]\  }}||u r||= Œ�Œ# w xY w)Nr5   Trœ   rX   r  r	  r
  r°   r  rò   rc   r  )r�  r†  r&   rb  rI   rJ   rG   rH   rn   rr   r   rC   r  rd   rÂ   r  r3   r  )r}   r  r&   r  rà   rE   ÚnsrX   r  rm   r  r°   r  r  r  s                  r.   rí   z,_SyncHandleMessagesProjection._messages_iterò  sg  è è € ØŒ×#Ò# JÑ/Ô/Ð/Ø-/ˆØ”LÔ*ˆ	Ø”Ô,ˆð,	ð)6Ø—y’y‘{”{�Ø�<ØðP ˆDðO  $Ÿxšx¨Ñ1Ô1Ð7°R�Ý% lÑ3Ô3�Ø˜’?�?Øå0:¸<ÍÑ0NÔ0NÐX�L×$Ò$ VÑ,Ô,Ð,ÐTXð õ " $­Ñ-Ô-ð ØØ!ŸXšX gÑ.Ô.�
Ø Ò0Ð0Ý!2°4Ñ!8Ô!8�JÝ,¨T¸JÐGÑGÔG�Cõ & d§h¢h¨zÑ&:Ô&:½DÑAÔAð ˜Ÿš Ñ,Ô,Ð,àð õ
 -Ý"& y¡/¤/Ø?GÐQ˜XŸ\š\Ð*:Ñ;Ô;Ð;ÈTØ#-ðñ ô �Fð
 #)�F˜3‘KØ—O’O DÑ)Ô)Ð)Ø �L�L�L�Lå,¨TÑ2Ô2�CØ#ŸZšZ¨™_œ_�FØ�~­#¨f©+¬+¸Ò*:Ð*:Ý!%¥d¨6¯=ª=©?¬?Ñ&;Ô&;Ñ!<Ô!<˜Ø�~Ù Ø—O’O DÑ)Ô)Ð)Ø!Ð%@Ð@Ð@Ý48¸¿º¹¼Ñ4HÔ4Hð 6ð 6Ñ0˜I yØ(¨FÐ2Ð2Ø$*¨9Ð$5øñS)6øðV ˆDˆDˆDs   ¸I ÁG2I ÉINrŒ  r  r  r,   r-   r.   rg  rg  é  sV   € € € € € ØVÐVðð ð ð ð%ð %ð %ð %ð1ð 1ð 1ð 1ð 1ð 1r-   rg  c                  ó*   — e Zd ZdZdd„Zdd„Zdd	„Zd
S )rh  zKTool calls projection that drains a `SyncScopedStreamHandle`'s tools inbox.rU  rY  r>   ru   c                ó   — || _         d S rw   r�  r‘  s     r.   r~   z'_SyncHandleToolCallsProjection.__init__)  rÌ   r-   r@  c                ó*   — |                       ¦   «         S rw   rB  r|   s    r.   rÐ   z'_SyncHandleToolCallsProjection.__iter__,  rD  r-   c              #  ón  K  — | j                              d¦  «         i }| j         j        }| j         j        }	 |                     ¦   «         }|€=t          d¦  «        }|                     ¦   «         D ]}|                     |¦  «         Œd S |                     d¦  «        pi }t          |¦  «        }||k    rŒ�t          |t          ¦  «        r|                     d¦  «        nd }	t          |	t          ¦  «        sŒÃ|	                     d¦  «        }
|	                     d¦  «        }t          |t          ¦  «        s�Œ|
dk    rj|	                     d	¦  «        }t          |t          ¦  «        sd
}t          |||	                     d¦  «        t          |¦  «        ¬¦  «        }|||<   |V — �n
|
dk    rW|                     |¦  «        }|	                     d¦  «        }|�*t          |t          ¦  «        r|                     |¦  «         n­|
dk    rA|                     |d ¦  «        }|�(|                     |	                     d¦  «        ¦  «         nf|
dk    r`|                     |d ¦  «        }|�H|	                     d¦  «        }|                     t          |rt          |¦  «        nd¦  «        ¦  «         �Œ)Nr6   TrL  rœ   rX   r  r"  ztool-startedÚ	tool_nameÚ r8   rH  ztool-output-deltar1  ztool-finishedrÒ   z
tool-errorÚmessagezTool call errored)r�  r†  r&   rc  rI   r£   r3   r:  rJ   rG   rH   r"   r   rC   r4  rù   r7  )r}   r  r&   r  rà   r8  ÚhrE   r”  rX   r  r"  r™  rU  r1  r›  s                   r.   rC  z/_SyncHandleToolCallsProjection._tool_calls_iter/  s­  è è € ØŒ×#Ò# GÑ,Ô,Ð,Ø02ˆØ”LÔ*ˆ	Ø”Ô)ˆð/	Ø—9’9‘;”;ˆDØˆ|Ý"ØIñô �ð  Ÿš™œð !ð !�AØ—G’G˜C‘L”L�L�LØ�ØŸ8š8 HÑ-Ô-Ð3°ˆLÝ! ,Ñ/Ô/ˆBØ�YŠˆØÝ/9¸,ÍÑ/MÔ/MÐW�<×#Ò# FÑ+Ô+Ð+ÐSWˆDÝ˜d¥DÑ)Ô)ð ØØŸš 'Ñ*Ô*ˆJØŸ8š8 NÑ3Ô3ˆLÝ˜l­CÑ0Ô0ð ÙØ˜^Ò+Ð+Ø ŸHšH [Ñ1Ô1�	Ý! )­SÑ1Ô1ð #Ø "�IÝ+Ø!-Ø"ØŸ(š( 7Ñ+Ô+Ý" 9™oœoð	ñ ô �ð (.��|Ñ$Ø���‘ØÐ2Ò2Ð2Ø—J’J˜|Ñ,Ô,�ØŸš Ñ)Ô)�Ø�=¥Z°µsÑ%;Ô%;�=Ø—M’M %Ñ(Ô(Ð(øØ˜Ò.Ð.Ø—J’J˜|¨TÑ2Ô2�Ø�=Ø—I’I˜dŸhšh xÑ0Ô0Ñ1Ô1Ð1øØ˜|Ò+Ð+Ø—J’J˜|¨TÑ2Ô2�Ø�=Ø"Ÿhšh yÑ1Ô1�GØ—G’GÝ$°WÐ%U¥S¨¡\¤\ \ÐBUÑVÔVñô ð ñ[/	r-   NrŒ  rV  rW  r,   r-   r.   rh  rh  &  sV   € € € € € ØUÐUðð ð ð ð'ð 'ð 'ð 'ð4ð 4ð 4ð 4ð 4ð 4r-   rh  c                  ó*   — e Zd ZdZdd„Zdd„Zdd	„Zd
S )rj  zJSubgraphs projection that drains a `SyncScopedStreamHandle`'s tasks inbox.rU  rY  r>   ru   c                ó   — || _         d S rw   r�  r‘  s     r.   r~   z'_SyncHandleSubgraphsProjection.__init__i  rÌ   r-   ú Iterator[SyncScopedStreamHandle]c                ó*   — |                       ¦   «         S rw   ©Ú_subgraphs_iterr|   s    r.   rÐ   z'_SyncHandleSubgraphsProjection.__iter__l  ó   € Ø×#Ò#Ñ%Ô%Ð%r-   c              #  óŽ  K  — | j                              d¦  «         t          ¦   «         }i }| j         j        }	 | j         j                             ¦   «         }|€¬d}| j         j        j        }|�^|                     ¦   «         rJ	 | 	                    d¬¦  «        }t          |t          ¦  «        r|j        dk    rd}n# t          $ r Y nw xY w|                     ¦   «         D ]"}|j        dk    r|                     |¦  «         Œ#d S |                     d	¦  «        pi }	t!          |	¦  «        }
t          |	t"          ¦  «        r|	                     d
¦  «        nd }t          |t"          ¦  «        s�Œ6d|v r±|                     d¦  «        }|s�ŒSt%          |
¦  «        }t'          |                     ¦   «         ¦  «        D ]e\  }}|d d…         |k    rŒ|j        |k    rŒ t-          |¦  «        \  }}|                     ||¦  «         ||= | j                              |¦  «         Œf�Œët1          |
|¦  «        s�Œýt%          |
¦  «        }||v r�Œ|                     |¦  «         t5          |d         ¦  «        \  }}t7          | j         j        ||pd || j         j        ¬¦  «        }|||<   | j                              |¦  «         |V — �Œ�)Nr:   TrL   r   ©r‡   ÚerroredrM   rK   rœ   rX   rŒ   rl   éÿÿÿÿ)rÉ   rZ  r[  r\  r!  )r�  r†  r�   rZ  rd  rI   rË   rM  rŽ   rŒ   rG   r0   r1   rN  r3   r7  rJ   rH   re   rC   r  r\  r^   r  rf   r„  rW   rY  r_  r}  )r}   Úseenr  r_   rà   Úterminal_statusrR  rŒ   ÚchildrE   r&   rX   Ú	result_idÚparent_pathÚ
child_pathÚchild_handler1   r2   rZ  r[  r\  s                        r.   r¢  z._SyncHandleSubgraphsProjection._subgraphs_itero  sø  è è € ØŒ×#Ò# GÑ,Ô,Ð,Ý%(¡U¤UˆØ@BˆØ”Ô!ˆð<	Ø”<Ô,×0Ò0Ñ2Ô2ˆDØˆ|ð 3>�Øœ<Ô/Ô9�ØÐ'¨H¯MªM©O¬OÐ'ðØ!)§¢¸ Ñ!;Ô!;˜å& v­|Ñ<Ô<ð7à &¤°Ò :Ð :à.6˜OøøÝ$ð ð ð Ø˜ðøøøà#Ÿ]š]™_œ_ð 7ð 7�EØ”| yÒ0Ð0ØŸš oÑ6Ô6Ð6øØ�ØŸ8š8 HÑ-Ô-Ð3°ˆLÝ(¨Ñ6Ô6ˆIÝ/9¸,ÍÑ/MÔ/MÐW�<×#Ò# FÑ+Ô+Ð+ÐSWˆDÝ˜d¥DÑ)Ô)ð ÙØ˜4ÐÐØ ŸHšH T™NœN�	Ø ð ÙÝ# IÑ.Ô.�Ý04°V·\²\±^´^Ñ0DÔ0Dð Dð DÑ,�J Ø! # 2 #”¨+Ò5Ð5Ø Ø#Ô3°yÒ@Ð@Ø Ý$?ÀÑ$EÔ$E‘M�F˜EØ ×(Ò(¨°Ñ7Ô7Ð7Ø˜zÐ*Ø”L×7Ò7¸
ÑCÔCÐCÐCÙÝ# I¨uÑ5Ô5ð ÙÝ˜Ñ#Ô#ˆDØ�tˆ|ˆ|ÙØ�HŠH�T‰NŒNˆNÝ*BÀ4ÈÄ8Ñ*LÔ*LÑ'ˆJ˜Ý1Ø”|Ô+ØØ%Ð-¨Ø /Ø#œ|Ô;ðñ ô ˆLð (ˆF�4‰Lð ŒL×-Ò-¨lÑ;Ô;Ð;ØÐÐÐñy<	s   Â8B= Â=
C
Ã	C
NrŒ  ©r>   rŸ  ©r'   r(   r)   r*   r~   rÐ   r¢  r,   r-   r.   rj  rj  f  s\   € € € € € ØTÐTðð ð ð ð&ð &ð &ð &ðAð Að Að Að Að Ar-   rj  c                  ó,   — e Zd ZdZddd	„Zdd„Zdd„ZdS )Ú_SyncSubgraphsProjectionz8Discover direct child invocations for a namespace scope.r,   rÉ   r”   r_   r`   r>   ru   c                ó"   — || _         || _        d S rw   )rË   Ú_scope)r}   rÉ   r_   s      r.   r~   z!_SyncSubgraphsProjection.__init__¶  s   € ØˆŒØˆŒˆˆr-   rŸ  c                ó*   — |                       ¦   «         S rw   r¡  r|   s    r.   rÐ   z!_SyncSubgraphsProjection.__iter__º  r£  r-   c              #  ó¤  ‡ K  — ‰ j         j        €t          d¦  «        ‚t          ‰ j        ¦  «        }‰ j                              |¦  «        }t          ‰ j        ˆ fd„¬¦  «        }‰ j        s‰ j                              ¦   «         nd }	 ‰ j                              |¦  «         ‰ j          	                    ¦   «          	 |j
                             ¦   «         }|€å	 d}‰ j         j        }|�^|                     ¦   «         rJ	 |                     d¬¦  «        }t          |t           ¦  «        r|j        dk    rd	}n# t$          $ r Y nw xY w|j                             ¦   «         D ]"}	|	j        d
k    r|	                     |¦  «         Œ#‰ j                              |j        ¦  «         |�|                     d ¦  «         d S d S |                     d¦  «        pi }
|�S|                     d¦  «        dk    r:t3          t5          |
¦  «        ¦  «        ‰ j        k    r|                     |¦  «         |                     t9          t:          t<          t>          f         |¦  «        ¦  «        D ]}	|	V — Œ�Œ¯# d}‰ j         j        }|�^|                     ¦   «         rJ	 |                     d¬¦  «        }t          |t           ¦  «        r|j        dk    rd	}n# t$          $ r Y nw xY w|j                             ¦   «         D ]"}	|	j        d
k    r|	                     |¦  «         Œ#‰ j                              |j        ¦  «         |�|                     d ¦  «         w w xY w)NrÔ   c                ó4   •— t          ‰j        | ||¬¦  «        S ©N)rÉ   rZ  r[  r\  )rY  rË   ©rZ  r[  r\  r}   s      €r.   rô   z:_SyncSubgraphsProjection._subgraphs_iter.<locals>.<lambda>Ä  s(   ø€ Ý&Øœ<ØØ)Ø$3ð	ñ ô ð r-   ©r_   rK  TrL   r   r¥  r¦  rM   rK   rœ   rp  r5   ) rË   rÕ   r£   ri   r´  rÖ   r   Ú_activate_root_messages_inboxr×   rØ   rÚ   rI   rM  rŽ   rŒ   rG   r0   r1   rN  rO  r3   r7  rÛ   rl   r3  re   rJ   rÜ   r
   rH   r"   r   )r}   rœ   rÝ   rÞ   rþ   rà   r©  rR  rŒ   rU  rE   s   `          r.   r¢  z(_SyncSubgraphsProjection._subgraphs_iter½  s€  øè è € ØŒ<Ô"Ð*ÝÐMÑNÔNÐNÝ.¨t¬{Ñ;Ô;ˆØŒl×1Ò1°&Ñ9Ô9ˆÝ"Ø”+ðð ð ð ð

ñ 

ô 

ˆð AEÄÐUˆDŒL×6Ò6Ñ8Ô8Ð8ÐQUð 	ð"	,ØŒL×*Ò*¨6Ñ2Ô2Ð2ØŒL×/Ò/Ñ1Ô1Ð1ð!Ø”y—}’}‘”�Ø�<Øð /:ˆOØ”|Ô-ˆHØÐ#¨¯ª©¬Ð#ðØ%Ÿ_š_°Q˜_Ñ7Ô7�FÝ! &­,Ñ7Ô7ð 3¸F¼MÈYÒ<VÐ<VØ*2˜øøÝ ð ð ð Ø�Dðøøøà!œ/×0Ò0Ñ2Ô2ð 4ð 4�Ø”= IÒ-Ð-Ø—N’N ?Ñ3Ô3Ð3øØŒL×1Ò1°#´&Ñ9Ô9Ð9ØÐ%Ø×%Ò% dÑ+Ô+Ð+Ð+Ð+ð &Ð%ð5  $Ÿxšx¨Ñ1Ô1Ð7°R�àÐ*ØŸš Ñ*Ô*¨jÒ8Ð8ÝÕ.¨|Ñ<Ô<Ñ=Ô=ÀÄÒLÐLà×)Ò)¨$Ñ/Ô/Ð/Ø%Ÿlšl­4µµS½#°X´ÀÑ+EÔ+EÑFÔFð !ð !�FØ �L�L�L�Lñ!øð" /:ˆOØ”|Ô-ˆHØÐ#¨¯ª©¬Ð#ðØ%Ÿ_š_°Q˜_Ñ7Ô7�FÝ! &­,Ñ7Ô7ð 3¸F¼MÈYÒ<VÐ<VØ*2˜øøÝ ð ð ð Ø�Dðøøøà!œ/×0Ò0Ñ2Ô2ð 4ð 4�Ø”= IÒ-Ð-Ø—N’N ?Ñ3Ô3Ð3øØŒL×1Ò1°#´&Ñ9Ô9Ð9ØÐ%Ø×%Ò% dÑ+Ô+Ð+Ð+ð &øøøsK   Â	AI, Ã>8D7 Ä7
EÅEÆ=B/I, É,%MÊ8KË
MË
KËMËKËA7MN)r,   )rÉ   r”   r_   r`   r>   ru   r¯  r°  r,   r-   r.   r²  r²  ³  s[   € € € € € ØBÐBðð ð ð ð ð&ð &ð &ð &ð5,ð 5,ð 5,ð 5,ð 5,ð 5,r-   r²  c                  ó"   — e Zd ZdZdd„Zdd„ZdS )rm  a  Mapping from extension name to custom event payload stream.

    Repeated access for the same `name` returns the cached projection so that
    callers receive the same subscription handle across multiple references to
    `thread.extensions["foo"]` within one session.
    rÉ   r”   r&   r%   r>   ru   c                ó0   — || _         || _        i | _        d S rw   )rË   rç   Ú_cacherè   s      r.   r~   z"_SyncExtensionsProjection.__init__ý  s   € ØˆŒØ#ˆŒØ;=ˆŒˆˆr-   rT   r"   Ú_SyncExtensionProjectionc                ó˜   — |st          d¦  «        ‚|| j        vr$t          | j        || j        ¬¦  «        | j        |<   | j        |         S )Nz!extension name must be non-empty.)rT   r&   )Ú
ValueErrorr¾  r¿  rË   rç   )r}   rT   s     r.   Ú__getitem__z%_SyncExtensionsProjection.__getitem__  s^   € Øð 	BÝÐ@ÑAÔAÐAØ�t”{Ð"Ð"Ý 8Ø”ØØœ/ð!ñ !ô !ˆDŒK˜Ñð
 Œ{˜4Ô Ð r-   N)rÉ   r”   r&   r%   r>   ru   )rT   r"   r>   r¿  )r'   r(   r)   r*   r~   rÂ  r,   r-   r.   rm  rm  õ  sF   € € € € € ðð ð>ð >ð >ð >ð
	!ð 	!ð 	!ð 	!ð 	!ð 	!r-   rm  c                  ó&   — e Zd Zdd	„Zdd„Zdd„ZdS )r¿  rÉ   r”   rT   r"   r&   r%   r>   ru   c               ó0   — || _         || _        || _        d S rw   )rË   Ú_namerç   )r}   rÉ   rT   r&   s       r.   r~   z!_SyncExtensionProjection.__init__  s   € ð ˆŒØˆŒ
Ø#ˆŒˆˆr-   úIterator[dict[str, Any]]c                ó*   — |                       ¦   «         S rw   )Ú_iterr|   s    r.   rÐ   z!_SyncExtensionProjection.__iter__  s   € Ø�zŠz‰|Œ|Ðr-   c              #  ó¬  K  — dd| j         › �gi}| j        r| j        g|d<   | j                             |¦  «        }t	          | j         ¬¦  «        }	 | j        j        r"	 | j                             |j        ¦  «         d S | j                             |¦  «         | j         	                    ¦   «          	 |j
                             ¦   «         }|€"	 | j                             |j        ¦  «         d S |                     t          t          t          t           f         |¦  «        ¦  «        E d {V —† Œ~# | j                             |j        ¦  «         w xY w)Nr=   úcustom:r@   ©rT   )rÅ  rç   rË   rÖ   r   r¢   rÛ   rl   r×   rØ   rÚ   rI   rÜ   r
   rH   r"   r   )r}   rœ   rÝ   rÞ   rà   s        r.   rÈ  z_SyncExtensionProjection._iter  s[  è è € Ø#-Ð0F¸$¼*Ð0FÐ0FÐ/GÐ"HˆØŒ?ð 	5Ø$(¤OÐ#4ˆF�<Ñ ØŒl×1Ò1°&Ñ9Ô9ˆÝ#¨¬Ð4Ñ4Ô4ˆð	:ØŒ|Ô#ð Øð ŒL×1Ò1°#´&Ñ9Ô9Ð9Ð9Ð9ð ŒL×*Ò*¨6Ñ2Ô2Ð2ØŒL×/Ò/Ñ1Ô1Ð1ðDØ”y—}’}‘”�Ø�<Øð ŒL×1Ò1°#´&Ñ9Ô9Ð9Ð9Ð9ð #Ÿ<š<­­Tµ#µs°(¬^¸TÑ(BÔ(BÑCÔCÐCÐCÐCÐCÐCÐCÐCð	Døð ŒL×1Ò1°#´&Ñ9Ô9Ð9Ð9øøøs   ÁD2 Â AD2 Ã1AD2 Ä2!EN)rÉ   r”   rT   r"   r&   r%   r>   ru   )r>   rÆ  )r'   r(   r)   r~   rÐ   rÈ  r,   r-   r.   r¿  r¿    sP   € € € € € ð	$ð 	$ð 	$ð 	$ðð ð ð ð:ð :ð :ð :ð :ð :r-   r¿  c                  ó^  — e Zd ZdZdddddœd_d„Zd`d„Zdad„Zedbd„¦   «         Zedcd„¦   «         Z	ddd„Z
ded#„Zdfd&„Zddd'„Zdgd)„Zdhd+„Zdid.„Zdid/„Zdjd2„Zdkd5„Zdkd6„Zdjd7„Zddd8„Zddd9œdld@„ZdmdB„ZedndE„¦   «         ZdodM„ZdpdN„ZdqdQ„ZdddR„ZdrdU„ZdsdV„Z dddW„Z!dsdX„Z"dtdZ„Z#dud[„Z$dvd]„Z%drd^„Z&dS )wr”   zÀSynchronous context manager for one thread's v3 streaming session.

    Construct via `client.threads.stream(thread_id=None, *, assistant_id, ...)`
    rather than instantiating directly.
    NFÚsse)r›   Úrun_start_timeoutÚexplicit_thread_idÚtransport_kindÚhttpr   Ú	thread_idr"   r§   r›   rž   rÎ  rˆ   rÏ  ra   rÐ  úLiteral['sse', 'websocket']r>   ru   c               óø  — || _         t          |pi ¦  «        | _        || _        || _        || _        || _        || _        d| _        d | _	        d | _
        t          j        ¦   «         | _        d| _        d| _        g | _        d | _        d | _        d | _        d| _        d| _        d | _        t/          ¦   «         | _        t/          ¦   «         | _        d | _        t7          | ¦  «        | _        t;          | ¦  «        | _        t?          | ¦  «        | _         tC          | g ¬¦  «        | _"        tG          | g ¬¦  «        | _$        tK          | d¬¦  «        | _&        | j&        | _'        tQ          | g ¬¦  «        | _)        d S )NFrc   é   r^  r,   rh   )*r¦   rH   r¥   rÒ  r§   Ú_run_start_timeoutÚ_explicit_thread_idÚ_transport_kindr¢   rÕ   rµ   rx   r`  Ú_command_id_lockÚ_next_command_idrN   r\   Ú_lifecycle_watcher_threadÚ_lifecycle_watcher_handleÚ_lifecycle_cursorÚ!_lifecycle_max_reconnect_attemptsr´   rM  r�   Ú_active_message_streamsÚ_active_tool_callsr÷   r­   Úrunr’   ÚagentrÈ   r3   rã   r5   r>  ri  r²  rk  rl  rm  rn  )r}   rÑ  rÒ  r§   r›   rÎ  rÏ  rÐ  s           r.   r~   zSyncThreadStream.__init__8  sZ  € ð ˆŒ
Ý˜W˜]¨Ñ+Ô+ˆŒØ"ˆŒØ(ˆÔØ"3ˆÔØ#5ˆÔ Ø-ˆÔØˆŒØ8<ˆŒØ8<ˆÔÝ )¤Ñ 0Ô 0ˆÔØ !ˆÔØ!&ˆÔØ24ˆŒØBFˆÔ&ØGKˆÔ&Ø-1ˆÔØ12ˆÔ.Ø$ˆŒØ15ˆŒÝ=@¹U¼UˆÔ$Ý;>¹5¼5ˆÔØFJˆÔ!Ý  Ñ&Ô&ˆŒÝ% dÑ+Ô+ˆŒ
Ý+¨DÑ1Ô1ˆŒÝ/°ÀÐCÑCÔCˆŒÝ2°4À2ÐFÑFÔFˆŒÝ1°$¸bÐAÑAÔAˆŒØœˆŒÝ3°DÀBÐGÑGÔGˆŒˆˆr-   c                ó\  — | j         rt          d¦  «        ‚| j        dk    rt          nt          } || j        j        | j        | j        ¬¦  «        | _	        t          j        ¦   «         }t          | j	        |¬¦  «        | _        t          ¦   «         | _        |                      ¦   «          | S )Nz4SyncThreadStream is closed and cannot be re-entered.Ú	websocket)ÚclientrÒ  r›   )Úrun_start_gate)r¢   r£   rØ  r   r   r¦   rå  rÒ  r¥   rÕ   rx   r   r   rµ   rt   rM  Ú!_ensure_lifecycle_watcher_running)r}   Útransport_clsræ  s      r.   Ú	__enter__zSyncThreadStream.__enter__c  s»   € ØŒ<ð 	WÝÐUÑVÔVÐVð Ô# {Ò2Ð2õ +Ð*å)ð 	ð
 (˜-Ø”:Ô$Ø”nØ”Mð
ñ 
ô 
ˆŒõ #œÑ*Ô*ˆÝ/ØŒO¨Nð
ñ 
ô 
ˆÔõ )Ñ*Ô*ˆŒØ×.Ò.Ñ0Ô0Ð0Øˆr-   Úexc_typer   ÚexcÚtbc                ó.   — |                       ¦   «          d S rw   )Úclose)r}   rê  rë  rì  s       r.   Ú__exit__zSyncThreadStream.__exit__{  s   € Ø�
Š
‰Œˆˆˆr-   c                ó  — |                       ¦   «         r1|                      ¦   «         }|                      |¦  «        r|d         S |                      ¦   «         }|j        �|j        ‚|                      ¦   «         }|d         S )zÙFetch terminal thread state (blocking); waits for lifecycle completion.

        Raises:
            RuntimeError: stream not entered, or no run started and no explicit
                thread_id was provided.
        r3   )Ú&_can_return_existing_state_immediatelyrÙ   Ú_state_is_terminalÚ_wait_for_run_doner2   )r}   rß   rT  s      r.   rÒ   zSyncThreadStream.output~  s…   € ð ×6Ò6Ñ8Ô8ð 	'Ø×%Ò%Ñ'Ô'ˆEØ×&Ò& uÑ-Ô-ð 'Ø˜X”Ð&Ø×*Ò*Ñ,Ô,ˆØŒ>Ð%Ø”.Ð Ø×!Ò!Ñ#Ô#ˆØ�XŒÐr-   úIterator[Event]c                ób   — | j         €t          d¦  «        ‚|                      t          ¦  «        S )z?Raw iterator of every `Event` the server emits for this thread.NrÔ   )rÕ   r£   Ú	subscriber<   r|   s    r.   ÚeventszSyncThreadStream.events�  s-   € ð Œ?Ð"ÝÐMÑNÔNÐNØ�~Š~�mÑ,Ô,Ð,r-   c                ó  — | j         rdS d| _         | j        }|�6|                     ¦   «         s"|                     t	          d¦  «        ¦  «         | j        �| j                             ¦   «          | j        }|�Et          j	        t          ¦  «        5  |                     ¦   «          ddd¦  «         n# 1 swxY w Y   | j        }|�[|                     ¦   «         rGt          j	        t          ¦  «        5  |                     d¬¦  «         ddd¦  «         n# 1 swxY w Y   |                      t	          d¦  «        ¦  «         |                      t	          d¦  «        ¦  «         | j        �| j                             ¦   «          dS dS )z(Tear down the thread stream. Idempotent.NTzSyncThreadStream closedg      ð?r¥  )r¢   rM  rŽ   r†   r£   rµ   rî  rÜ  Ú
contextlibÚsuppressrN  rÛ  Úis_aliveÚjoinÚ_fail_active_message_streamsÚ_fail_active_tool_callsrÕ   )r}   rR  rU  rÉ   s       r.   rî  zSyncThreadStream.close—  së  € àŒ<ð 	ØˆFØˆŒØ”>ˆØÐ¨¯ª©¬ÐØ×"Ò"¥<Ð0IÑ#JÔ#JÑKÔKÐKð ÔÐ'ØÔ×"Ò"Ñ$Ô$Ð$ØÔ/ˆØÐÝÔ$¥YÑ/Ô/ð ð Ø—’‘”�ðð ð ñ ô ð ð ð ð ð ð øøøð ð ð ð àÔ/ˆØÐ &§/¢/Ñ"3Ô"3ÐÝÔ$¥\Ñ2Ô2ð )ð )Ø—’ C�Ñ(Ô(Ð(ð)ð )ð )ñ )ô )ð )ð )ð )ð )ð )ð )øøøð )ð )ð )ð )à×)Ò)­,Ð7PÑ*QÔ*QÑRÔRÐRØ×$Ò$¥\Ð2KÑ%LÔ%LÑMÔMÐMØŒ?Ð&ØŒO×!Ò!Ñ#Ô#Ð#Ð#Ð#ð 'Ð&s$   ÂB3Â3B7Â:B7Ã4DÄDÄDrœ   r   r   c                ób   — | j         €t          d¦  «        ‚| j                              |¦  «        S ©NrÔ   )rµ   r£   Úregister_subscription©r}   rœ   s     r.   rÖ   z'SyncThreadStream._register_subscriptionµ  s1   € ØÔÐ#ÝÐMÑNÔNÐNØÔ×5Ò5°fÑ=Ô=Ð=r-   Úsubscription_idr#  c                óL   — | j         �| j                              |¦  «         d S d S rw   )rµ   Úunregister_subscription)r}   r  s     r.   rÛ   z)SyncThreadStream._unregister_subscriptionº  s0   € ØÔÐ'ØÔ×4Ò4°_ÑEÔEÐEÐEÐEð (Ð'r-   c                óJ   — | j         �| j                              ¦   «          d S d S rw   )rµ   Úensure_fanout_runningr|   s    r.   rØ   z'SyncThreadStream._ensure_fanout_running¾  s.   € ØÔÐ'ØÔ×2Ò2Ñ4Ô4Ð4Ð4Ð4ð (Ð'r-   Úcandidate_filterc                óf   — | j         €t          d¦  «        ‚| j                              |¦  «         d S r   )rµ   r£   Úreconcile_stream)r}   r  s     r.   r×   z"SyncThreadStream._reconcile_streamÂ  s8   € ØÔÐ#ÝÐMÑNÔNÐNØÔ×)Ò)Ð*:Ñ;Ô;Ð;Ð;Ð;r-   r  c                óN   — | j         €t          j        ¦   «         | _         | j         S rw   )r÷   rÚ   r(  r|   s    r.   r»  z.SyncThreadStream._activate_root_messages_inboxÇ  s"   € ØÔ$Ð,Ý(-¬©¬ˆDÔ%ØÔ(Ð(r-   r  r   c                ó:   — | j                              |¦  «         d S rw   )rß  r„  ©r}   r  s     r.   rû   z0SyncThreadStream._register_active_message_streamÌ  s   € ØÔ$×(Ò(¨Ñ0Ô0Ð0Ð0Ð0r-   c                ó:   — | j                              |¦  «         d S rw   )rß  Údiscardr  s     r.   rú   z2SyncThreadStream._unregister_active_message_streamÏ  s   € ØÔ$×,Ò,¨VÑ4Ô4Ð4Ð4Ð4r-   r8  r„   c                ó�   — t          | j        ¦  «        D ]}|                     |¦  «         Œ| j                             ¦   «          d S rw   )rC   rß  ÚfailÚclear)r}   r8  r  s      r.   rý  z-SyncThreadStream._fail_active_message_streamsÒ  sL   € Ý˜4Ô7Ñ8Ô8ð 	ð 	ˆFØ�KŠK˜ÑÔÐÐØÔ$×*Ò*Ñ,Ô,Ð,Ð,Ð,r-   rU  r   c                ó:   — | j                              |¦  «         d S rw   )rà  r„  r‘  s     r.   rQ  z+SyncThreadStream._register_active_tool_call×  s   € ØÔ×#Ò# FÑ+Ô+Ð+Ð+Ð+r-   c                ó:   — | j                              |¦  «         d S rw   )rà  r  r‘  s     r.   rP  z-SyncThreadStream._unregister_active_tool_callÚ  s   € ØÔ×'Ò'¨Ñ/Ô/Ð/Ð/Ð/r-   c                ó�   — t          | j        ¦  «        D ]}|                     |¦  «         Œ| j                             ¦   «          d S rw   )rC   rà  r:  r  )r}   r8  rU  s      r.   rþ  z(SyncThreadStream._fail_active_tool_callsÝ  sL   € Ý˜4Ô2Ñ3Ô3ð 	ð 	ˆFØ�LŠL˜ÑÔÐÐØÔ×%Ò%Ñ'Ô'Ð'Ð'Ð'r-   c                óJ   — | j         �| j                              ¦   «          dS dS )aè  Wake every active projection iterator on interrupt / run end.

        Delegates to the shared controller (subscription queues). The
        root messages inbox is intentionally NOT signaled here: the
        subgraphs projection that populates it is responsible for
        pushing the terminal ``None`` in its own ``finally`` block, so
        any message events it redirected to the inbox land before the
        sentinel. Signaling root_inbox here would race the redirection.
        N)rµ   Úsignal_pausedr|   s    r.   Ú_signal_pausedzSyncThreadStream._signal_pausedâ  s0   € ð ÔÐ'ØÔ×*Ò*Ñ,Ô,Ð,Ð,Ð,ð (Ð'r-   )r@   rA   r=   r%   r@   úlist[list[str]] | NonerA   ú
int | Nonec               ó–   — | j         €t          d¦  «        ‚dt          |¦  «        i}|�||d<   |�||d<   |                      |¦  «        S )a  Open a typed subscription against the shared SSE.

        Returns an iterator that yields raw `Event` dicts matching the given
        filter. Multiple concurrent subscribes share one HTTP connection whose
        union expands or rotates as subscriptions come and go.
        NrÔ   r=   r@   rA   )rÕ   r£   rC   Ú_subscription_iter)r}   r=   r@   rA   rœ   s        r.   rö  zSyncThreadStream.subscribeï  s^   € ð Œ?Ð"ÝÐMÑNÔNÐNØ#-­t°H©~¬~Ð">ˆØÐ!Ø#-ˆF�<Ñ ØÐØ#ˆF�7‰OØ×&Ò& vÑ.Ô.Ð.r-   úIterator[tuple[str, Any]]c           	   #  óØ  ‡ K  — t          |¦  «         ‰ j        €t          d¦  «        ‚i }g }|D �]•}|dk    r+t          d¦  «        ||<   |                     ddgi¦  «         Œ4|dv rFt          |g ¬¦  «        ||<   |                     t          t          |gg ¦  «        ¦  «        ¦  «         Œ~|dk    rGt          g d„ ¬	¦  «        ||<   |                     t          t          dgg ¦  «        ¦  «        ¦  «         ŒË|d
k    rHt          g d„ ¬¦  «        ||<   |                     t          t          dgg ¦  «        ¦  «        ¦  «         �Œ|dk    rHt          dˆ fd„¬¦  «        ||<   |                     t          t          d¦  «        ¦  «        ¦  «         �Œgt          |¬¦  «        ||<   |                     dd|› �gi¦  «         �Œ—|sdS t          t          t          t          d|¦  «        ¦  «        ¦  «        }|                     d¦  «        }g }g }	 ‰                      |¦  «        D ]ä}	|�|                     |	¦  «        D ]}
d|
fV — Œ	t%          |	¦  «        }‰                      |¦  «        }|�œ|dk    r–|                     |¦  «        }|�|                     |	¦  «        D ]i}
|d
k    r+‰                      |
¦  «         |                     |
¦  «         n0|dk    r*‰                      |
¦  «         |                     |
¦  «         ||
fV — ŒjŒå	 ‰                      |                     d
¦  «        |||¦  «         dS # ‰                      |                     d
¦  «        |||¦  «         w xY w)a­  Yield `(channel_name, item)` tuples across multiple projections.

        One shared subscription drives all per-channel decoders; items arrive
        in server-emit order (the SDK analog of `GraphRunStream.interleave`).

        Args:
            channels: Flat list of `"values"`, `"messages"`, `"tool_calls"`,
                `"subgraphs"`, and/or extension names. Built-ins yield their
                typed item (snapshot dict / `ChatModelStream` /
                `SyncToolCallHandle` / `SyncScopedStreamHandle`); an extension
                yields its payload dict, keyed by the bare extension name.

        Note:
            Handles and streams are yielded eagerly (before their sub-stream
            completes), so items arrive interleaved in real time. To receive a
            fully-resolved handle (output already populated), use the dedicated
            `thread.tool_calls` / `thread.messages` projections instead.
        NrÔ   r3   r=   )r4   r9   r:   r^  r5   c                ó&   — t          | ||¬¦  «        S rñ   r   rò   s      r.   rô   z9SyncThreadStream.interleave_projections.<locals>.<lambda>+  s    € Ý'Ø&/°dÀzðñ ô ð r-   rõ   ri  c                ó(   — t          | |||¬¦  «        S rG  rI  rH  s       r.   rô   z9SyncThreadStream.interleave_projections.<locals>.<lambda>5  s%   € Ý*Ø)5Ø!%Ø"'Ø&/ð	ñ ô ð r-   rJ  r6   rk  r,   c                ó*   •— t          ‰| ||¬¦  «        S r¸  )rY  r¹  s      €r.   rô   z9SyncThreadStream.interleave_projections.<locals>.<lambda>B  s&   ø€ Ý.Ø#'Ø!%Ø'1Ø,;ð	ñ ô ð r-   rº  rË  rÊ  zlist[dict[str, Any]])r   rÕ   r£   r   rü   rH   rD   r   r   r   ri   r   r
   r   r   rI   r  rÜ   r   Ú_interleave_public_namerQ  rû   Ú_finalize_interleave_decoders)r}   r=   ÚdecodersÚ
sub_paramsÚchÚmergedrk  Úregistered_tool_callsÚregistered_message_streamsr  rà   ÚwireÚpublicrÞ   s   `             r.   Úinterleave_projectionsz'SyncThreadStream.interleave_projections  s/  øè è € õ& 	% XÑ.Ô.Ð.ØŒ?Ð"ÝÐMÑNÔNÐNØ')ˆØ+-ˆ
Øð 1	Bñ 1	BˆBØ�XŠ~ˆ~Ý*¨8Ñ4Ô4�˜‘Ø×!Ò! :°¨zÐ":Ñ;Ô;Ð;Ð;ØÐ:Ð:Ð:õ
  +¨2¸Ð<Ñ<Ô<�˜‘Ø×!Ò!¥$Õ'>À¸tÀRÑ'HÔ'HÑ"IÔ"IÑJÔJÐJÐJØ�zÒ!Ð!Ý.Ø ð$ð $ð ñ  ô  �˜‘ð ×!Ò!¥$Õ'>À
¸|ÈRÑ'PÔ'PÑ"QÔ"QÑRÔRÐRÐRØ�|Ò#Ð#Ý/Ø ð$ð $ð
 ñ 
 ô 
 �˜‘ð ×!Ò!¥$Õ'>À¸yÈ"Ñ'MÔ'MÑ"NÔ"NÑOÔOÐOÑOØ�{Ò"Ð"Ý/Øð$ð $ð $ð $ð
 ñ 
 ô 
 �˜‘ð ×!Ò!¥$Õ'DÀRÑ'HÔ'HÑ"IÔ"IÑJÔJÐJÑJå0°bÐ9Ñ9Ô9�˜‘Ø×!Ò! :°¸"°°Ð/?Ð"@ÑAÔAÐAÑAØð 	ØˆFÝÝÝ ¥Ð&<¸jÑ!IÔ!IÑJÔJñ
ô 
ˆð —L’L Ñ-Ô-ˆ	ð ;=ÐØ<>Ð"ð	Ø×0Ò0°Ñ8Ô8ð 1ð 1�ØÐ(Ø )§¢¨uÑ 5Ô 5ð 2ð 2˜Ø*¨DÐ1Ð1Ð1Ð1Ð1Ý$ UÑ+Ô+�Ø×5Ò5°dÑ;Ô;�àÐ%¨&°KÒ*?Ð*?Ø&Ÿlšl¨6Ñ2Ô2�GØÐ*Ø$+§L¢L°Ñ$7Ô$7ð 1ð 1˜DØ%¨Ò5Ð5Ø $× ?Ò ?ÀÑ EÔ EÐ EØ 5× <Ò <¸TÑ BÔ BÐ BÐ BØ!'¨:Ò!5Ð!5Ø $× DÒ DÀTÑ JÔ JÐ JØ :× AÒ AÀ$Ñ GÔ GÐ GØ#)¨4 .Ð0Ð0Ð0Ð0øð#1ð& ×.Ò.Ø—’˜\Ñ*Ô*ØØ%Ø*ñ	ô ð ð ð øˆD×.Ò.Ø—’˜\Ñ*Ô*ØØ%Ø*ñ	ô ð ð øøøs   ÈC:L< Ì<-M)r*  rj   c                óv   — | €dS | dk    rdS |                       d¦  «        r| t          d¦  «        d…         S | S )zMMap a wire channel name to the public channel name used in interleave tuples.Nr6   ri  rÊ  )Ú
startswithrd   )r*  s    r.   r"  z(SyncThreadStream._interleave_public_namev  sL   € ð ˆ<Ø�4Ø�7Š?ˆ?Ø�<Ø�?Š?˜9Ñ%Ô%ð 	*Ø�˜I™œÐ(Ð(Ô)Ð)Øˆr-   ri  úDecoder | Nonerk  r(  úlist[SyncToolCallHandle]r)  úlist[ChatModelStream]c                ó¬  — | j         }d}|�>|                     ¦   «         r*	 |                     d¬¦  «        }n# t          $ r d}Y nw xY wt	          |t
          ¦  «        r]|�|j        �|j        nt          d¦  «        }t          |j	         
                    ¦   «         ¦  «        D ]}|                     |¦  «         Œ|D ]}|                      |¦  «         Œ|D ]}	|                      |	¦  «         Œt	          |t          ¦  «        rM|�|j        dk    rdnd}
|j	         
                    ¦   «         D ]$}|j        dk    r|                     |
¦  «         Œ#dS dS )	av  Finalize in-flight handles when `interleave_projections` tears down.

        Mirrors the terminal handling of the dedicated `_SyncToolCallsProjection`
        / `_SyncSubgraphsProjection`: in-flight tool calls are failed (so a
        blocking `handle.output` can't hang) and discovered subgraph children
        are force-completed with the run's terminal status.
        Nr   r¥  rL  r¦  rM   rL   rK   )rM  rŽ   rŒ   rN  rG   r   r2   r£   rC   rO  r3   r:  rP  rú   r   r1   r7  )r}   ri  rk  r(  r)  rR  Úresolvedr8  rU  r  r©  rª  s               r.   r#  z.SyncThreadStream._finalize_interleave_decoders�  s°  € ð ”>ˆØ(,ˆØÐ H§M¢M¡O¤OÐð Ø#Ÿ?š?°1˜?Ñ5Ô5��øÝð  ð  ð  Ø���ð øøøå�jÕ"2Ñ3Ô3ð 	"ð Ð'¨H¬NÐ,Fð ”�å!Ð"WÑXÔXð õ
 ˜zÔ1×8Ò8Ñ:Ô:Ñ;Ô;ð "ð "�Ø—’˜SÑ!Ô!Ð!Ð!Ø+ð 	6ð 	6ˆFØ×-Ò-¨fÑ5Ô5Ð5Ð5Ø0ð 	;ð 	;ˆFØ×2Ò2°6Ñ:Ô:Ð:Ð:Ý�iÕ!1Ñ2Ô2ð 	3ð Ð'¨H¬O¸yÒ,HÐ,Hð �à ð ð
 #Ô*×1Ò1Ñ3Ô3ð 3ð 3�Ø”< 9Ò,Ð,Ø—M’M /Ñ2Ô2Ð2øð	3ð 	3ð3ð 3s   ¡8 ¸AÁAc              #  ó†  K  — |                       |¦  «        }	 | j        r	 |                      |j        ¦  «         d S |                      |¦  «         |                      ¦   «          	 |j                             ¦   «         }|€	 |                      |j        ¦  «         d S |V — Œ=# |                      |j        ¦  «         w xY wrw   )rÖ   r¢   rÛ   rl   r×   rØ   rÚ   rI   )r}   rœ   rÝ   rà   s       r.   r  z#SyncThreadStream._subscription_iter¬  sÚ   è è € Ø×)Ò)¨&Ñ1Ô1ˆð	2ØŒ|ð Øð ×)Ò)¨#¬&Ñ1Ô1Ð1Ð1Ð1ð ×"Ò" 6Ñ*Ô*Ð*Ø×'Ò'Ñ)Ô)Ð)ðØ”y—}’}‘”�Ø�<Øð ×)Ò)¨#¬&Ñ1Ô1Ð1Ð1Ð1ð �
�
�
ð	øð ×)Ò)¨#¬&Ñ1Ô1Ð1Ð1øøøs   ™B$ ½AB$ ÂB$ Â$C rp  rY   c                ó~  — | j         €t          d¦  «        ‚| j        5  | j        }| xj        dz  c_        ddd¦  «         n# 1 swxY w Y   | j                              |||dœ¦  «        }|€i S |                     d¦  «        dk    rA|                     dd¦  «        }|                     dd	¦  «        }t          d
|› d|› �¦  «        ‚|                     d¦  «        }t          |t          ¦  «        r6|                     d¦  «        }| j        �| j         	                    |¦  «         |                     di ¦  «        S )z8Send a protocol command and return the `result` payload.NrÔ   rc   )rl   rp  rœ   Útyper2   Úunknownr›  rš  zProtocol error [z]: ÚmetaÚapplied_through_seqrŒ   )
rÕ   r£   rÙ  rÚ  Úsend_commandrI   rG   rH   rµ   Úobserve_applied_through_seq)	r}   rp  rœ   Ú
command_idrº   Úcoder›  r8  r9  s	            r.   r³   zSyncThreadStream._send_command»  sŽ  € àŒ?Ð"ÝÐMÑNÔNÐNØÔ"ð 	'ð 	'ØÔ.ˆJØÐ!Ô! QÑ&Ð!Ô!ð	'ð 	'ð 	'ñ 	'ô 	'ð 	'ð 	'ð 	'ð 	'ð 	'ð 	'øøøð 	'ð 	'ð 	'ð 	'ð ”?×/Ò/Ø¨¸6ÐBÐBñ
ô 
ˆð ÐØˆIØ�<Š<˜ÑÔ 7Ò*Ð*Ø—<’< ¨Ñ3Ô3ˆDØ—l’l 9¨bÑ1Ô1ˆGÝÐD°$ÐDÐD¸7ÐDÐDÑEÔEÐEØ�|Š|˜FÑ#Ô#ˆÝ�d�DÑ!Ô!ð 	RØ"&§(¢(Ð+@Ñ"AÔ"AÐØÔÐ+ØÔ ×<Ò<Ð=PÑQÔQÐQØ�|Š|˜H bÑ)Ô)Ð)s   žAÁAÁ	Ac                óŒ   — | j         �d S t          j        | j        dd¬¦  «        | _         | j                              ¦   «          d S )Nzlanggraph-sdk-sync-lifecycleT)r  rT   Údaemon)rÛ  rx   ÚThreadÚ_run_lifecycle_watcherr¸   r|   s    r.   rç  z2SyncThreadStream._ensure_lifecycle_watcher_runningÒ  sS   € ØÔ)Ð5ØˆFÝ)2Ô)9ØÔ.Ø/Øð*
ñ *
ô *
ˆÔ&ð
 	Ô&×,Ò,Ñ.Ô.Ð.Ð.Ð.r-   r  r   c                ó”   — |                      d¦  «        }t          |t          ¦  «        r| j        �|| j        k    r|| _        d S d S d S )NÚseq)rI   rG   r#  rÝ  )r}   r  rC  s      r.   Ú_observe_lifecycle_eventz)SyncThreadStream._observe_lifecycle_eventÜ  sY   € Ø�iŠi˜ÑÔˆÝ�c�3ÑÔð 	)ØÔ"Ð*¨c°DÔ4JÒ.JÐ.Jà%(ˆDÔ"Ð"Ð"ð	)ð 	)Ø.JÐ.Jr-   c                ó4   — dddgi}| j         �
| j         |d<   |S )Nr=   r7   r8   Úsince)rÝ  r  s     r.   Ú_lifecycle_stream_paramsz)SyncThreadStream._lifecycle_stream_paramsã  s+   € Ø",¨{¸GÐ.DÐ!EˆØÔ!Ð-Ø"Ô4ˆF�7‰OØˆr-   c           
     óv  — | j         €dS d}| j        �s%	 | j                              |                      ¦   «         ¦  «        }|| _        |j        D ]6}| j        r dS |                      |¦  «         |                      |¦  «         Œ7|                     ¦   «         }|€dS |dz  }|| j	        k    r|‚n~# t          $ rq}|dz  }|| j	        k    rY d}~ŒÄ| j        }|�H|                     ¦   «         s4|                     t          dt          d|› �¦  «        ¬¦  «        ¦  «         Y d}~dS d}~ww xY w| j        �¯#dS dS )z6Always-on thread consuming lifecycle + input channels.Nr   rc   r¦  zLifecycle transport failed: ©r1   r2   )rÕ   r¢   Úopen_event_streamrG  rÜ  r÷  rD  Ú_apply_lifecycle_eventr2   rÞ  rN  rM  rŽ   r‚   r0   r£   )r}   Úreconnect_attemptsrU  r  r8  rë  rR  s          r.   rA  z'SyncThreadStream._run_lifecycle_watcheré  s©  € àŒ?Ð"ØˆFØÐØ”,ñ 	ðØœ×:Ò:Ø×1Ò1Ñ3Ô3ñô �ð 28�Ô.Ø#œ]ð 7ð 7�EØ”|ð Ø˜˜Ø×1Ò1°%Ñ8Ô8Ð8Ø×/Ò/°Ñ6Ô6Ð6Ð6Ø—l’l‘n”n�Ø�;Ø�FØ" aÑ'Ð"Ø%¨Ô(NÒNÐNØ�Ið Oøåð ð ð Ø" aÑ'Ð"Ø%¨Ô)OÒOÐOØ�H�H�H�HØœ>�ØÐ'°·²±´Ð'Ø×'Ò'Ý$Ø#,Ý".Ð/SÈcÐ/SÐ/SÑ"TÔ"Tðñ ô ñô ð ð �����øøøøðøøøð# ”,ñ 	ð 	ð 	ð 	ð 	s,   •AB1 ÁAB1 ÂB1 Â1
D,Â;D'ÃAD'Ä'D,c                óZ   — | j                              d| j        › d�| j        pd¬¦  «        S )z6Fetch the current thread state from the REST endpoint.z	/threads/z/stateN)r›   )r¦   rI   rÒ  r¥   r|   s    r.   rÙ   zSyncThreadStream._fetch_state  s9   € àŒz�~Š~Ø.˜œÐ.Ð.Ð.Ø”MÐ) Tð ñ 
ô 
ð 	
r-   rß   c                óZ   — |                      d¦  «         o|                      d¦  «         S )zEReturn `True` if the thread state has no pending tasks or next nodes.rÂ   r:   )rI   )r}   rß   s     r.   rò  z#SyncThreadStream._state_is_terminal  s+   € à—9’9˜VÑ$Ô$Ð$Ð?¨U¯YªY°wÑ-?Ô-?Ð)?Ð?r-   c                ó    — | j         o| j         S )zKReturn `True` if we can try the REST state before waiting on the lifecycle.)r×  r´   r|   s    r.   rñ  z7SyncThreadStream._can_return_existing_state_immediately  s   € àÔ'Ð>°´Ð,>Ð>r-   r0   c                óš   — | j         €t          d¦  «        ‚| j        s| j        st          d¦  «        ‚| j                              ¦   «         S )z³Block until lifecycle completion.

        Raises:
            RuntimeError: stream not entered, or no run started and no explicit
                thread_id was provided.
        NrÔ   zmthread.output: no run has been started and no explicit thread_id was provided. Call thread.run.start() first.)rM  r£   r´   r×  rŒ   r|   s    r.   ró  z#SyncThreadStream._wait_for_run_done  s\   € ð Œ>Ð!ÝÐMÑNÔNÐNØŒ~ð 	 dÔ&>ð 	Ýð?ñô ð ð Œ~×$Ò$Ñ&Ô&Ð&r-   c                óp  — |                      d¦  «        }|dk    �r$|                      d¦  «        pi }t          |t          ¦  «        r|                      d¦  «        nd}t          |t          ¦  «        r|                      d¦  «        nd}t          |t          ¦  «        rœ|t          |t          ¦  «        r|                      d¦  «        ndt          |t          ¦  «        r|                      d¦  «        pg ng d	œ}| j        }| j                             |¦  «         d
| _        |s|                      ¦   «          dS dS dS |dk    �rh|                      d¦  «        pi }t          |t          ¦  «        r|                      d¦  «        nd}t          |t          ¦  «        r|                      d¦  «        nd}|dv r	d
| _        dS |dv rêd| _        g | _        | j	        }	|	�Õ|	 
                    ¦   «         sÃ|dk    r’t          |t          ¦  «        r|                      d¦  «        nd}
t          |
rd|
› �nd¦  «        }|                      |¦  «         |                      |¦  «         |	                     t          d|¬¦  «        ¦  «         dS |	                     t          d¬¦  «        ¦  «         dS dS dS dS dS )zRUpdate `interrupted` / `interrupts` / `_run_done` from a lifecycle or input event.rp  zinput.requestedrœ   rX   Nr#   r$   r&   )r#   r$   r&   Tr7   r  )rK   Úrunning)rL   rM   FrM   r2   zRun errored: zRun erroredr¦  rI  rL   )r1   )rI   rG   rH   r"   rN   r\   rü   r  r´   rM  rŽ   r£   rý  rþ  r‚   r0   )r}   r  rp  rœ   rX   r#   ÚpayloadÚwas_interruptedÚphaserR  Ú	error_msgr2   s               r.   rK  z'SyncThreadStream._apply_lifecycle_event,  sñ  € à—’˜8Ñ$Ô$ˆØÐ&Ò&Ñ&Ø—Y’Y˜xÑ(Ô(Ð.¨BˆFÝ)3°F½DÑ)AÔ)AÐK�6—:’:˜fÑ%Ô%Ð%ÀtˆDÝ7AÀ$ÍÑ7MÔ7MÐW˜4Ÿ8š8 NÑ3Ô3Ð3ÐSWˆLÝ˜,­Ñ,Ô,ð *à$0Ý2<¸TÅ4Ñ2HÔ2HÐR˜TŸXšX gÑ.Ô.Ð.Èdå! &­$Ñ/Ô/ð" §¢¨KÑ!8Ô!8Ð!>¸Bøàð-ð -�ð #'Ô"2�Ø”×&Ò& wÑ/Ô/Ð/Ø#'�Ô ð 'ð *Ø×'Ò'Ñ)Ô)Ð)Ð)Ð)ð'*ð *ð$*ð *à�{Ò"Ñ"Ø—Y’Y˜xÑ(Ô(Ð.¨BˆFÝ)3°F½DÑ)AÔ)AÐK�6—:’:˜fÑ%Ô%Ð%ÀtˆDÝ)3°D½$Ñ)?Ô)?ÐI�D—H’H˜WÑ%Ô%Ð%ÀTˆEØÐ.Ð.Ð.Ø!%�”��ØÐ1Ð1Ð1Ø#(�Ô Ø"$�”Øœ>�ØÐ'°·²±´Ð'Ø Ò(Ð(å1;¸DÅ$Ñ1GÔ1GÐQ˜DŸHšH WÑ-Ô-Ð-ÈTð "õ !-Ø;DÐWÐ7¨IÐ7Ð7Ð7È-ñ!ô !˜ð ×9Ò9¸%Ñ@Ô@Ð@Ø×4Ò4°UÑ;Ô;Ð;Ø ×+Ò+­LÀ	ÐQVÐ,WÑ,WÔ,WÑXÔXÐXÐXÐXà ×+Ò+­LÀÐ,LÑ,LÔ,LÑMÔMÐMÐMÐMð- #Ð"ð 2Ð1ð (Ð'Ð'Ð'r-   )rÑ  r   rÒ  r"   r§   r"   r›   rž   rÎ  rˆ   rÏ  ra   rÐ  rÓ  r>   ru   )r>   r”   )rê  r   rë  r   rì  r   r>   ru   rá   )r>   rô  r�   )rœ   r   r>   r   )r  r#  r>   ru   )r  r   r>   ru   )r>   r  )r  r   r>   ru   r;  )rU  r   r>   ru   )r=   r%   r@   r  rA   r  r>   rô  )r=   r%   r>   r  )r*  rj   r>   rj   )
ri  r/  rk  r/  r(  r0  r)  r1  r>   ru   )rœ   r   r>   rô  )rp  r"   rœ   rY   r>   rY   r‹  )r>   rY   )rß   rY   r>   ra   r�   )r>   r0   )'r'   r(   r)   r*   r~   ré  rï  r<  rÒ   r÷  rî  rÖ   rÛ   rØ   r×   r»  rû   rú   rý  rQ  rP  rþ  r  rö  r,  Ústaticmethodr"  r#  r  r³   rç  rD  rG  rA  rÙ   rò  rñ  ró  rK  r,   r-   r.   r”   r”   1  s  € € € € € ðð ð -1Ø*.Ø#(Ø6;ð)Hð )Hð )Hð )Hð )Hð )HðVð ð ð ð0ð ð ð ð ðð ð ñ „Xðð" ð-ð -ð -ñ „Xð-ð$ð $ð $ð $ð<>ð >ð >ð >ð
Fð Fð Fð Fð5ð 5ð 5ð 5ð<ð <ð <ð <ð
)ð )ð )ð )ð
1ð 1ð 1ð 1ð5ð 5ð 5ð 5ð-ð -ð -ð -ð
,ð ,ð ,ð ,ð0ð 0ð 0ð 0ð(ð (ð (ð (ð
-ð -ð -ð -ð" .2Ø ð/ð /ð /ð /ð /ð /ð,oð oð oð oðb ðð ð ñ „\ðð)3ð )3ð )3ð )3ðV2ð 2ð 2ð 2ð*ð *ð *ð *ð./ð /ð /ð /ð)ð )ð )ð )ðð ð ð ð"ð "ð "ð "ðH
ð 
ð 
ð 
ð@ð @ð @ð @ð?ð ?ð ?ð ?ð'ð 'ð 'ð 'ð 1Nð 1Nð 1Nð 1Nð 1Nð 1Nr-   )r=   r%   r&   r%   r>   r   )rE   r   r>   r%   )rO   r"   r>   rP   )rX   rY   r>   rZ   )r&   r%   r_   r`   r>   ra   )r_   r`   r>   r   )rX   rY   r>   rj   rw   )rX   rY   ro   rj   r>   r"   )r  r  r&   r%   rÉ   r”   r>   rê   )Ir*   Ú
__future__r   rù  rÚ   rx   Úcollections.abcr   r   Údataclassesr   Útypingr   r   r	   r
   Ú0langchain_core.language_models.chat_model_streamr   Úlangchain_protocolr   r   Úlanggraph_sdk._sync.httpr   Úlanggraph_sdk.schemar   Úlanggraph_sdk.stream.decodersr   r   r   r   r   r   r   Ú!langgraph_sdk.stream.subscriptionr   r   Ú$langgraph_sdk.stream.sync_controllerr   r   Úlanggraph_sdk.stream.transportr   r   r   r   r!   r0   r<   r+   rD   rJ   r‰  rW   r^   rf   ri   rn   rr   rt   r’   r­   rÈ   rã   rø   r   r>  rY  rg  rh  rj  r²  rm  r¿  r”   r,   r-   r.   ú<module>rd     sµ  ðð
ð 
ð 
ð #Ð "Ð "Ð "Ð "Ð "à Ð Ð Ð Ø €€€Ø Ð Ð Ð Ø -Ð -Ð -Ð -Ð -Ð -Ð -Ð -Ø !Ð !Ð !Ð !Ð !Ð !Ø 0Ð 0Ð 0Ð 0Ð 0Ð 0Ð 0Ð 0Ð 0Ð 0Ð 0Ð 0à LÐ LÐ LÐ LÐ LÐ LØ 5Ð 5Ð 5Ð 5Ð 5Ð 5Ð 5Ð 5à 3Ð 3Ð 3Ð 3Ð 3Ð 3Ø 0Ð 0Ð 0Ð 0Ð 0Ð 0ðð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð RÐ QÐ QÐ QÐ QÐ QÐ QÐ QØ XÐ XÐ XÐ XÐ XÐ XÐ XÐ Xðð ð ð ð ð ð ð ð ð ð ð ðð ð ð ð �yñ ô ð ð ð'ð 'ð 'ð 'ð 'ñ 'ô 'ñ „ð'ð
ð 
ð 
€ð 
ð 
ð 
ñ 
ðð ð ð ðBð Bð Bð Bð ÐHÔI€ð*ð *ð *ð *ð
ð ð ð ðXð Xð Xð Xðð ð ð ð?ð ?ð ?ð ?ð
ð ð ð ð ð$ð $ð $ð $ð $ñ $ô $ð $ð:
ð 
ð 
ð 
ð 
ñ 
ô 
ð 
ð8OBð OBð OBð OBð OBñ OBô OBð OBðd#:ð #:ð #:ð #:ð #:ñ #:ô #:ð #:ðL7:ð 7:ð 7:ð 7:ð 7:ñ 7:ô 7:ð 7:ðtQ8ð Q8ð Q8ð Q8ðhC&ð C&ð C&ð C&ð C&ñ C&ô C&ð C&ðLG:ð G:ð G:ð G:ð G:ñ G:ô G:ð G:ðTEð Eð Eð Eð Eñ Eô Eð EðP:ð :ð :ð :ð :ñ :ô :ð :ðz=ð =ð =ð =ð =ñ =ô =ð =ð@Jð Jð Jð Jð Jñ Jô Jð JðZ?,ð ?,ð ?,ð ?,ð ?,ñ ?,ô ?,ð ?,ðD!ð !ð !ð !ð !ñ !ô !ð !ð2 :ð  :ð  :ð  :ð  :ñ  :ô  :ð  :ðFlNð lNð lNð lNð lNñ lNô lNð lNð lNð lNr-   