ó
    ýÞ j
 ã                  óô  • % S r SSKJr  SSKrSSKrSSKrSSKJrJr  SSK	J
r
  SSKJrJrJrJr  SSKJr  SSKJrJr  SS	KJr  SS
KJrJr  SSKJrJrJrJrJrJ r J!r!  SSK"J#r#J$r$  SSK%J&r&J'r'  SSK(J)r)J*r*J+r+J,r,   " S S\5      r-\
 " S S5      5       r./ SQr/S\0S'         S>S jr1S?S jr2\S   r3S@S jr4    SAS jr5SBS jr6SCS jr7SDS jr8SESFS jjr9 " S S 5      r: " S! S"5      r; " S# S$5      r< " S% S&5      r= " S' S(5      r>        SGS* jr? " S+ S,5      r@ " S- S.5      rA " S/ S05      rB " S1 S25      rC " S3 S45      rD " S5 S65      rE " S7 S85      rF " S9 S:5      rG " S; S<5      rH " S= S)5      rIg)Ha%  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)ÚLangSmithTracingÚQueryParamTypes)ÚDataDecoderÚDecoderÚExtensionsDecoderÚMessagesDecoderÚSubgraphsDecoderÚToolCallsDecoderÚvalidate_interleave_channels)Úcompute_union_filterÚinfer_channel)ÚSyncStreamControllerÚ_SyncSubscription)ÚSyncEventStreamHandleÚSyncProtocolSseTransportÚSyncProtocolTransportÚSyncProtocolWebSocketTransportc                  ó8   • \ rS rSr% SrS\S'   S\S'   S\S'   S	rg
)ÚInterruptPayloadé.   zCPayload surfaced when the server requests human input for a thread.ÚstrÚinterrupt_idr   Úvalueú	list[str]Ú	namespace© N)Ú__name__Ú
__module__Ú__qualname__Ú__firstlineno__Ú__doc__Ú__annotations__Ú__static_attributes__r)   ó    ÚT/var/www/html/gaurav/venv/lib/python3.13/site-packages/langgraph_sdk/_sync/stream.pyr"   r"   .   s   ‡ ÙMàÓØƒJØÖr1   r"   c                  ó2   • \ rS rSr% SrS\S'   SrS\S'   Srg)	Ú_RunTerminalé6   zHTerminal state record resolved into `_run_done` on lifecycle completion.zLiteral['completed', 'errored']ÚstatusNzBaseException | NoneÚerrorr)   )r*   r+   r,   r-   r.   r/   r7   r0   r)   r1   r2   r4   r4   6   s   ‡ áRà+Ó+Ø"&€EÐÖ&r1   r4   )	ÚvaluesÚupdatesÚmessagesÚtoolsÚ	lifecycleÚinputÚcheckpointsÚtasksÚcustomr'   Ú_ALL_CHANNELSc                ó"   • U [        U5      /SS.$ )Nr   )ÚchannelsÚ
namespacesÚdepth©Úlist)rC   r(   s     r2   Ú_exact_namespace_paramsrH   K   s   € ð
 Ü˜I“Ð'Øñð r1   c                ó¨   • [        U [        5      (       d  / $ U R                  S5      =(       d    / n[        U[        5      (       a  [        U5      $ / $ )Nr(   )Ú
isinstanceÚdictÚgetrG   )Úparams_fieldr(   s     r2   Ú_event_namespacerN   V   sD   € Ü�l¤D×)Ñ)Øˆ	Ø× Ñ  Ó-×3°€IÜ(¨´D×9Ñ9Œ4�	‹?ÐA¸rÐAr1   )ÚstartedÚ	completedÚfailedÚinterruptedc                óD   • U R                  S5      u  pnX(       a  U4$ S 4$ )NÚ:)Ú	partition)ÚsegmentÚnameÚsepÚtask_ids       r2   Ú_parse_namespace_segmentrZ   `   s,   € Ø ×*Ñ*¨3Ó/Ñ€DˆwØ�C�Ð)Ð) TÐ)Ð)r1   c                ó|   • U R                  S5      (       a  gU R                  S5      nU(       a  S[        U5      4$ g)NÚ
interrupts)rR   Nr7   rQ   )rP   N©rL   r$   )Údatar7   s     r2   Ú_terminal_from_tasks_resultr_   e   s9   € ð ‡x�x�×ÑØ"Ø�H‰H�WÓ€EÞØœ˜U›Ð#Ð#Ør1   c                óx   • [        U 5      [        U5      S-   :H  =(       a    [        U S [        U5       5      U:H  $ )Né   )ÚlenÚtuple)r(   Úscopes     r2   Ú_is_direct_childre   p   s4   € Üˆy‹>œS ›Z¨!™^Ñ+×W´°iÀÄ#ÀeÃ*Ð6MÓ0NÐRWÑ0WÐWr1   c                ó$   • / SQ[        U 5      /S.$ )N)r:   r?   r;   r<   )rC   rD   rF   ©rd   s    r2   Ú_subgraph_subscription_paramsrh   t   s   € ò
 @Ü˜E“{�mñð r1   c                ót   • U R                  S5      =(       d    U R                  S5      nUb  [        U5      $ S $ )NÚidÚ
message_idr]   )r^   rk   s     r2   Ú_message_event_idrl   ~   s1   € Ø—‘˜$“×9 4§8¡8¨LÓ#9€JØ(Ñ4Œ3ˆz‹?Ð>¸$Ð>r1   c                ó:   • [        U 5      nUb  SU 3$ Ub  SU 3$ g)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.
zmessage:Ú
__single__)rl   )r^   Úfallbackrk   s      r2   Ú_message_route_keyrp   ƒ   s7   € ô # 4Ó(€JØÑØ˜*˜Ð&Ð&ØÑØ˜(˜Ð$Ð$Ør1   c                  óJ   • \ rS rSrS	S jrS
S jrSS jrSSS jjrSS jrSr	g)Ú_BlockingResulté’   c                óT   • [         R                  " 5       U l        S U l        S U l        g ©N)Ú	threadingr   Ú_eventÚ_valueÚ_error©Úselfs    r2   Ú__init__Ú_BlockingResult.__init__“   s   € Ü—o’oÓ'ˆŒØˆŒØ,0ˆ�r1   c                ó„   • U R                   R                  5       (       a  g Xl        U R                   R                  5         g ru   )rw   Úis_setrx   Úset)r{   r&   s     r2   Ú
set_resultÚ_BlockingResult.set_result˜   ó+   € Ø�;‰;×Ñ×ÑØØŒØ�‰�‰Õr1   c                ó„   • U R                   R                  5       (       a  g Xl        U R                   R                  5         g ru   )rw   r   ry   r€   )r{   r7   s     r2   Úset_exceptionÚ_BlockingResult.set_exceptionž   rƒ   r1   Nc                ó¢   • U R                   R                  U5      (       d  [        S5      eU R                  b  U R                  eU R                  $ )Nz"Result was not set before timeout.)rw   ÚwaitÚTimeoutErrorry   rx   )r{   Útimeouts     r2   ÚresultÚ_BlockingResult.result¤   sA   € Ø�{‰{×Ñ ×(Ñ(ÜÐCÓDÐDØ�;‰;Ñ"Ø—+‘+ÐØ�{‰{Ðr1   c                ó6   • U R                   R                  5       $ ru   )rw   r   rz   s    r2   ÚdoneÚ_BlockingResult.done«   s   € Ø�{‰{×!Ñ!Ó#Ð#r1   )ry   rw   rx   ©ÚreturnÚNone)r&   r   r‘   r’   )r7   ÚBaseExceptionr‘   r’   ru   )rŠ   úfloat | Noner‘   r   ©r‘   Úbool)
r*   r+   r,   r-   r|   r�   r…   r‹   rŽ   r0   r)   r1   r2   rr   rr   ’   s   † ô1ô
ôö÷$r1   rr   c                  óF   • \ rS rSrSrS	S jrSSSS.       S
S jjrSrg)Ú_SyncAgentModuleé¯   z9Assistant graph helpers scoped to one sync thread stream.c                ó   • Xl         g ru   ©Ú_owner©r{   Úowners     r2   r|   Ú_SyncAgentModule.__init__²   ó   € Ø�r1   FN)ÚxrayÚheadersÚparamsc               óŽ  • U R                   R                  (       a  [        S5      e0 nU(       a  XS'   U(       a  UR                  [	        U5      5        0 U R                   R
                  E[	        U=(       d    0 5      EnU R                   R                  R                  SU R                   R                   S3UU=(       d    S S9$ )NzSyncThreadStream is closed.r¡   z/assistants/z/graph)r£   r¢   )	rœ   Ú_closedÚRuntimeErrorÚupdaterK   Ú_headersÚ_httprL   Úassistant_id)r{   r¡   r¢   r£   Úquery_paramsÚrequest_headerss         r2   Úget_treeÚ_SyncAgentModule.get_treeµ   s¨   € ð �;‰;××ÜÐ<Ó=Ð=Ø')ˆÞØ#'˜Ñ ÞØ×Ñ¤ V£Ô-ØI˜TŸ[™[×1Ñ1ÐI´T¸'¿-ÀRÓ5HÐIˆØ�{‰{× Ñ ×$Ñ$Ø˜4Ÿ;™;×3Ñ3Ð4°FÐ;ØØ#×+ tð %ð 
ð 	
r1   r›   ©rž   ÚSyncThreadStreamr‘   r’   )r¡   z
int | boolr¢   úMapping[str, str] | Noner£   zQueryParamTypes | Noner‘   zdict[str, list[dict[str, Any]]])r*   r+   r,   r-   r.   r|   r­   r0   r)   r1   r2   r˜   r˜   ¯   sG   † ÙCôð !Ø,0Ø)-ñ
ð ð
ð *ð	
ð
 'ð
ð 
)÷
ð 
r1   r˜   c                  óh   • \ rS rSrSrS
S jrSSSSS.         SS jjrSS.     SS jjrS	rg)ÚSyncRunModuleéË   zoCommand dispatcher for `run.start`.

Bound to one `SyncThreadStream`; accesses its transport and id allocator.
c                ó   • Xl         g ru   r›   r�   s     r2   r|   ÚSyncRunModule.__init__Ñ   r    r1   N)r=   ÚconfigÚmetadataÚlangsmith_tracingc               óH  • SU R                   R                  0nUb  XS'   Ub  X%S'   Ub  X5S'   Ub  XES'   U R                   R                  SU5      nSU R                   l        U R                   R                  nUb'  UR
                  b  UR
                  R                  5         U$ )zGSend `run.start` to the server. Returns the result (`{"run_id": ...}`).rª   r=   r·   r¸   Úlangsmith_tracerz	run.startT)rœ   rª   Ú_send_commandÚ	_run_seenÚ_controllerÚ_run_start_gater€   )r{   r=   r·   r¸   r¹   r£   r‹   Ú
controllers           r2   ÚstartÚSyncRunModule.startÔ   s©   € ð #1°$·+±+×2JÑ2JÐ!KˆØÑØ#�7‰OØÑØ%�8ÑØÑØ!)�:ÑØÑ(Ø):Ð%Ñ&Ø—‘×*Ñ*¨;¸Ó?ˆØ $ˆ�‰ÔØ—[‘[×,Ñ,ˆ
ØÑ! j×&@Ñ&@Ñ&LØ×&Ñ&×*Ñ*Ô,Øˆr1   )r%   c               óž  ^• U R                   R                  nTc^  [        U5      S:X  a  [        S5      e[        U5      S:”  a/  U Vs/ sH  oDS   PM	     nn[        S[        U5       SU< S35      eUS   nO)[	        U4S	 jU 5       S5      nUc  [        S
T< S35      eUS   US   US.nU R                   R                  SU5      $ s  snf )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`.ra   r%   u"   thread.run.respond: ambiguous â€” z outstanding interrupts (z&). Provide an explicit `interrupt_id`.c              3  ó:   >#   • U H  oS    T:X  d  M  Uv •  M     g7f)r%   Nr)   )Ú.0Úpr%   s     €r2   Ú	<genexpr>Ú(SyncRunModule.respond.<locals>.<genexpr>  s   øé € ÐM™K�q¨^Ñ+<ÀÑ+L—‘šKùs   ƒ’	z!thread.run.respond: interrupt_id zA does not match any outstanding interrupt in `thread.interrupts`.r(   )r%   r(   Úresponsezinput.respond)rœ   r\   rb   r¦   Únextr¼   )r{   rÉ   r%   ÚoutstandingrÆ   ÚidsÚmatchr£   s     `     r2   ÚrespondÚSyncRunModule.respondí   s  ø€ ð$ —k‘k×,Ñ,ˆØÑÜ�;Ó 1Ó$Ü"ðPóð ô �;Ó !Ó#Ù2=Ó>±+¨Q˜Ô(±+�Ð>Ü"Ø8¼¸[Ó9IÐ8Jð K/Ø/2©gð 6&ð&óð ð
   ‘N‰EäÜM™KÓMØóˆEð ‰}Ü"Ø7¸Ñ7Gð HNð Nóð ð
 " .Ñ1Ø˜{Ñ+Ø ñ
ˆð
 �{‰{×(Ñ(¨¸&ÓAÐAùò- ?s   ÁC
r›   r¯   )
r=   r   r·   údict[str, Any] | Noner¸   rÐ   r¹   zLangSmithTracing | Noner‘   údict[str, Any])rÉ   r   r%   ú
str | Noner‘   rÑ   )	r*   r+   r,   r-   r.   r|   rÁ   rÎ   r0   r)   r1   r2   r³   r³   Ë   s�   † ñô
ð Ø(,Ø*.Ø59ñð ðð &ð	ð
 (ðð 3ðð 
õð: $(ñ	0Bàð0Bð !ð	0Bð
 
÷0Bð 0Br1   r³   c                  ó@   • \ rS rSrSrS	S jrS
S jrSS jrS
S jrSr	g)Ú_SyncValuesProjectioni   z²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`).
c                ó   • Xl         g ru   ©Ú_thread)r{   Úthreads     r2   r|   Ú_SyncValuesProjection.__init__'  ó   € Ø�r1   c                ó"   • U R                  5       $ )zHIterate over state snapshots: REST state first, then live values events.)Ú_values_iterrz   s    r2   Ú__iter__Ú_SyncValuesProjection.__iter__*  s   € à× Ñ Ó"Ð"r1   c                ó.   • U R                   R                  $ )z<Return terminal state values; equivalent to `thread.output`.)r×   Úoutputrz   s    r2   rL   Ú_SyncValuesProjection.get.  s   € à�|‰|×"Ñ"Ð"r1   c              #  ó   #   • U R                   R                  c  [        S5      eSS/0nU R                   R                  U5      n[	        S5      n U R                   R                  U5        U R                   R                  5         U R                   R                  5       nUS   v •   UR                  R                  5       nUc'   U R                   R                  UR                  5        g UR                  [        [        [        [         4   U5      5       S h  v•N   Mz   N! U R                   R                  UR                  5        f = f7f)Nõ,   SyncThreadStream not entered â€” use `with`.rC   r8   )r×   Ú
_transportr¦   Ú_register_subscriptionr   Ú_reconcile_streamÚ_ensure_fanout_runningÚ_fetch_stateÚqueuerL   Ú_unregister_subscriptionrj   Úfeedr
   rK   r$   r   )r{   r£   ÚsubÚdecoderÚstateÚitems         r2   rÜ   Ú"_SyncValuesProjection._values_iter2  s  é € Ø�<‰<×"Ñ"Ñ*ÜÐMÓNÐNØ#-°¨zÐ":ˆØ�l‰l×1Ñ1°&Ó9ˆÜ˜hÓ'ˆð	:Ø�L‰L×*Ñ*¨6Ô2Ø�L‰L×/Ñ/Ô1Ø—L‘L×-Ñ-Ó/ˆEØ˜‘/Ò!ØØ—y‘y—}‘}“�Ø‘<Øð �L‰L×1Ñ1°#·&±&Õ9ð #Ÿ<™<¬¬T´#´s°(©^¸TÓ(BÓC×CÐCñ	 ñ Døà�L‰L×1Ñ1°#·&±&Õ9üs1   ‚AEÁA4D$ Ã&EÃ,/D$ ÄD"ÄD$ Ä$'EÅErÖ   N)rØ   r°   r‘   r’   )r‘   zIterator[Any]©r‘   r   )
r*   r+   r,   r-   r.   r|   rÝ   rL   rÜ   r0   r)   r1   r2   rÔ   rÔ      s   † ñôô#ô#÷:r1   rÔ   c                  óF   • \ rS rSrSr S     S	S jjrS
S jrS
S jrSrg)Ú_SyncMessagesProjectioniF  zì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.
Nc                óB   • Xl         [        U=(       d    / 5      U l        g ru   ©r×   rG   Ú
_namespace©r{   rØ   r(   s      r2   r|   Ú _SyncMessagesProjection.__init__N  ó   € ð ŒÜ˜yŸ¨BÓ/ˆ�r1   c                ó"   • U R                  5       $ ru   ©Ú_messages_iterrz   s    r2   rÝ   Ú _SyncMessagesProjection.__iter__T  ó   € Ø×"Ñ"Ó$Ð$r1   c              #  ó0  #   • U R                   R                  c  [        S5      eU R                  (       d  U R                   R                  OS nUb)  [        XR                  U R                   5       S h  v•N   g [        S/U R                  5      nU R                   R                  U5      n[        U R                  S S9n/ n/ n U R                   R                  U5        U R                   R                  5          UR                  R                  5       nUcn  U(       a  UR                  S5      v •  U(       a  M   U H  nU R                   R                  U5        M      U R                   R                  UR                   5        g UR#                  [%        [&        [(        [*        4   U5      5       H@  nU R                   R-                  U5        UR/                  U5        UR/                  U5        MB     U(       aD  US   R0                  (       a0  UR                  S5      v •  U(       a  US   R0                  (       a  M0  GMI   GNÑ! U H  nU R                   R                  U5        M      U R                   R                  UR                   5        f = f7f)Nrã   r:   c                ó   • [        XUS9$ ©N©r(   Únoderk   r   r  s      r2   Ú<lambda>Ú8_SyncMessagesProjection._messages_iter.<locals>.<lambda>b  s   € Ä/Ø#¸:òCr1   ©r(   Ústream_factoryr   )r×   rä   r¦   rö   Ú_root_messages_inboxÚ_drain_messages_inboxrH   rå   r   ræ   rç   ré   rL   ÚpopÚ!_unregister_active_message_streamrê   rj   rë   r
   rK   r$   r   Ú_register_active_message_streamÚappendÚ_done)	r{   Ú
root_inboxr£   rì   rí   Ú
registeredÚpendingrï   Ústreams	            r2   rü   Ú&_SyncMessagesProjection._messages_iterW  só  é € Ø�<‰<×"Ñ"Ñ*ÜÐMÓNÐNØ>B¿o¿o�T—\‘\×6Ò6ÐSWˆ
ØÑ!Ü,¨Z¿¹È$Ï,É,ÓW×WÐWØÜ(¨*¨°t·±ÓGˆØ�l‰l×1Ñ1°&Ó9ˆÜ!Ø—o‘oññ
ˆð -/ˆ
Ø)+ˆð	:Ø�L‰L×*Ñ*¨6Ô2Ø�L‰L×/Ñ/Ô1ØØ—y‘y—}‘}“�Ø‘<æ!Ø%Ÿk™k¨!›nÒ,÷ "˜'àó %�Ø—‘×>Ñ>¸vÖFñ %à�L‰L×1Ñ1°#·&±&Õ9ð &Ÿl™l¬4´´S¼#°X±ÀÓ+EÖF�FØ—L‘L×@Ñ@ÀÔHØ×%Ñ% fÔ-Ø—N‘N 6Ö*ñ Gö  '¨!¡*×"2×"2Ø!Ÿ+™+ a›.Ò(ö  '¨!¡*×"2×"2Ñ"2ò ò Xøó> %�Ø—‘×>Ñ>¸vÖFñ %à�L‰L×1Ñ1°#·&±&Õ9üsA   ‚A2JÁ4IÁ5AJÃA4I Ä=A
JÆB9I ÉI ÉJÉAJÊJ©rö   r×   ru   ©rØ   r°   r(   úlist[str] | Noner‘   r’   ©r‘   úIterator[ChatModelStream]©	r*   r+   r,   r-   r.   r|   rÝ   rü   r0   r)   r1   r2   ró   ró   F  s5   † ñð GKð0Ø&ð0Ø3Cð0à	õ0ô%÷&:r1   ró   r°   c              #  ó<  #   • 0 n  U R                  5       nUc*   UR                  5        H  nUR                  U5        M     gUR                  S5      =(       d    0 n[        U[        5      (       a  UR                  S5      OSn[        U[        5      (       d  M—  UR                  S5      nUS:X  Ga  [        U5      n	[        XyS9n
[        UR                  S5      [        5      (       a  UR                  S5      O0 n[        [        U5      U(       a  UR                  S5      OSU	S	9nXÃU
'   UR                  U5        UR                  U5        UR                  (       GdR  U R                  5       nUc  U R                  S5        GO,UR                  S5      =(       d    0 n[        U[        5      (       a  UR                  S5      OSn[        U[        5      (       d  M‘  UR                  S5      n[        U5      nUR                  U5      nUc7  US
:X  a1  [        U5      S:X  a"  [        [        UR                  5       5      5      nUbU  UR                  U5        US;   a>  UR                  U5        [        UR!                  5       5       H  u  nnUUL d  M  UU	 M     UR                  (       d  GMR  Uv •  O±[        U5      n
UR                  U
5      nUc7  U
S
:X  a1  [        U5      S:X  a"  [        [        UR                  5       5      5      nUc  GM  UR                  U5        US;   a>  UR                  U5        [        UR!                  5       5       H  u  nnUUL d  M  UU	 M     GMh  ! UR                  5        H  nUR                  U5        M     f = f7f)a9  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.
Nr£   r^   Úeventúmessage-start©ro   r¸   Úlanggraph_noder  rn   ra   ©zmessage-finishr7   )rL   r8   r  rJ   rK   rl   rp   r   rG   r  Údispatchr  Úputrb   rÊ   ÚiterÚitems)Úinboxr(   rØ   Úactiverï   ÚsrM   r^   Ú
event_typerk   Úkeyr¸   r  Ú	next_itemÚnext_paramsÚ	next_dataÚnext_event_typeÚnext_keyÚtargetÚrkÚcandÚ	route_keyÚ	candidates                          r2   r	  r	  €  s  é € ð *,€FðE8ØØ—9‘9“;ˆDØ‰|Øð@ —‘–ˆAØ×4Ñ4°QÖ7ò !ð  Ÿ8™8 HÓ-×3°ˆLÜ/9¸,Ì×/MÑ/M�<×#Ñ# FÔ+ÐSWˆDÜ˜d¤D×)Ñ)ÙØŸ™ 'Ó*ˆJØ˜_Ô,Ü.¨tÓ4�
Ü(¨ÑC�ô " $§(¡(¨:Ó"6¼×=Ñ=ð —H‘H˜ZÔ(àð ô
 )Ü" 9›oÞ;C˜Ÿ™Ð&6Ô7ÈØ)ñ�ð
 %�s‘Ø×6Ñ6°vÔ>Ø—‘ Ô%ð !Ÿ,Ÿ,˜,Ø %§	¡	£�IØ Ñ(ØŸ	™	 $œÙØ"+§-¡-°Ó"9×"?¸R�Kô & k´4×8Ñ8ð $Ÿ™¨Ô/à!ð ô
 & i´×6Ñ6Ù Ø&/§m¡m°GÓ&<�OÜ1°)Ó<�HØ#ŸZ™Z¨Ó1�FØ‘~¨(°lÓ*BÄsÈ6Ã{ÐVWÓGWÜ!%¤d¨6¯=©=«?Ó&;Ó!<˜ØÑ)ØŸ™¨	Ô2Ø*Ð.IÓIØ"×DÑDÀVÔLÜ,0°·±³Ö,@¡  DØ#'¨6¤>Ø(.¨rª
ñ -Að- !Ÿ,Ÿ,š,ð2 “ä(¨Ó.�ØŸ™ C›�Ø‘> c¨\Ó&9¼cÀ&»kÈQÓ>NÜ!¤$ v§}¡}£Ó"7Ó8�FØ‘>ÚØ—‘ Ô%ØÐ!<Ó<Ø×<Ñ<¸VÔDÜ04°V·\±\³^Ö0DÑ,˜	 9Ø$¨Ô.Ø & yÒ 1ñ 1Eò øðF —‘–ˆAØ×4Ñ4°QÖ7ò !üs5   ‚N†M/ ›)NÁIM/ ÊM/ Ê6B+M/ Í%
M/ Í/*NÎNc                  ó”   • \ rS rSrSrSSSS.           SS jjr\SS j5       r\SS j5       rSS	 jr	SS
 jr
SS jrSS jrSrg)ÚSyncToolCallHandleiÔ  z)Sync handle for one root-scope tool call.Ni   )r=   r(   Úmax_queue_sizec               óÔ   • Xl         X l        X0l        [        U=(       d    / 5      U l        SU l        S U l        [        5       U l        [        R                  " US9U l        SU l        g )NF©Úmaxsize)Útool_call_idrW   r=   rG   r(   rŽ   r7   rr   Ú_resultré   ÚQueueÚ_deltasÚ_deltas_consumed)r{   r9  rW   r=   r(   r5  s         r2   r|   ÚSyncToolCallHandle.__init__×  sT   € ð )ÔØŒ	ØŒ
Ü˜iŸo¨2Ó.ˆŒØˆŒ	Ø+/ˆŒ
Ü(7Ó(9ˆŒÜ05·²ÀNÑ0SˆŒØ&+ˆÕr1   c                ó6   • U R                   R                  5       $ )z:Block until the tool call completes and return its output.)r:  r‹   rz   s    r2   rà   ÚSyncToolCallHandle.outputê  s   € ð �|‰|×"Ñ"Ó$Ð$r1   c                óh   • U R                   (       a  [        S5      eSU l         U R                  5       $ )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_iterrz   s    r2   ÚdeltasÚSyncToolCallHandle.deltasï  s6   € ð × × ÜØVóð ð !%ˆÔØ×ÑÓ!Ð!r1   c              #  óT   #   •  U R                   R                  5       nUc  g Uv •  M$  7fru   )r<  rL   )r{   rï   s     r2   rB  ÚSyncToolCallHandle._delta_iterþ  s,   é € ØØ—<‘<×#Ñ#Ó%ˆDØ‰|ØØŠJñ	 ùs   ‚&(c                ó^   • U R                   (       a  g U R                  R                  U5        g ru   )rŽ   r<  Ú
put_nowait)r{   Údeltas     r2   Ú_push_deltaÚSyncToolCallHandle._push_delta  s   € Ø�9�9ØØ�‰×Ñ Õ&r1   c                ó¢   • U R                   (       a  g SU l         U R                  R                  U5        U R                  R	                  S 5        g ©NT)rŽ   r:  r�   r<  rH  )r{   rà   s     r2   Ú_finishÚSyncToolCallHandle._finish
  s7   € Ø�9�9ØØˆŒ	Ø�‰×Ñ Ô'Ø�‰×Ñ Õ%r1   c                ó®   • U R                   (       a  g SU l         Xl        U R                  R                  U5        U R                  R                  S 5        g rM  )rŽ   r7   r:  r…   r<  rH  )r{   Úerrs     r2   Ú_failÚSyncToolCallHandle._fail  s<   € Ø�9�9ØØˆŒ	ØŒ
Ø�‰×"Ñ" 3Ô'Ø�‰×Ñ Õ%r1   )	r<  r=  r:  rŽ   r7   r=   rW   r(   r9  )r9  r$   rW   r$   r=   r   r(   r  r5  Úintr‘   r’   rñ   )r‘   zIterator[str])rI  r$   r‘   r’   )rà   r   r‘   r’   ©rQ  r“   r‘   r’   )r*   r+   r,   r-   r.   r|   Úpropertyrà   rC  rB  rJ  rN  rR  r0   r)   r1   r2   r4  r4  Ô  s�   † Ù3ð Ø&*Ø"ñ,ð ð,ð ð	,ð
 ð,ð $ð,ð ð,ð 
õ,ð& ó%ó ð%ð ó"ó ð"ôô'ô
&÷&r1   r4  c                  óF   • \ rS rSrSr S     S	S jjrS
S jrS
S jrSrg)Ú_SyncToolCallsProjectioni  z4Typed projection for root-scope `thread.tool_calls`.Nc                óB   • Xl         [        U=(       d    / 5      U l        g ru   rõ   r÷   s      r2   r|   Ú!_SyncToolCallsProjection.__init__  rù   r1   c                ó"   • U R                  5       $ ru   ©Ú_tool_calls_iterrz   s    r2   rÝ   Ú!_SyncToolCallsProjection.__iter__#  ó   € Ø×$Ñ$Ó&Ð&r1   c              #  ó&  #   • U R                   R                  c  [        S5      e[        S/U R                  5      nU R                   R                  U5      n[        U R                  S S9n/ n/ n U R                   R                  U5        U R                   R                  5          UR                  R                  5       nUGc  U(       a  UR                  S5      v •  U(       a  M   U R                   R                  nS nUb2  UR                  5       (       a   UR                  5       n	U	R                  nUb  UO
[        S5      n
[#        UR$                  R'                  5       5       H  nUR)                  U
5        M     U H  nU R                   R+                  U5        M      U R                   R-                  UR.                  5        g UR1                  [3        [4        [6        [8        4   U5      5       H@  nU R                   R;                  U5        UR=                  U5        UR=                  U5        MB     U(       aD  US   R                  (       a0  UR                  S5      v •  U(       a  US   R                  (       a  M0  GMâ  ! [          a     GN`f = f! U R                   R                  nS nUbC  UR                  5       (       a.   UR                  5       n	U	R                  nO! [          a     Of = fUb  UO
[        S5      n
[#        UR$                  R'                  5       5       H  nUR)                  U
5        M     U H  nU R                   R+                  U5        M      U R                   R-                  UR.                  5        f = f7f)Nrã   r;   c                ó   • [        U UUUS9$ ©N©r9  rW   r=   r(   ©r4  rc  s       r2   r  Ú;_SyncToolCallsProjection._tool_calls_iter.<locals>.<lambda>-  s   € Ü"Ø!-ØØØ'ò	r1   ©r(   Úhandle_factoryr   ú3Tool call stream closed before terminal tool event.)r×   rä   r¦   rH   rö   rå   r   ræ   rç   ré   rL   r
  Ú	_run_donerŽ   r‹   r7   Ú	ExceptionrG   Ú_activer8   rR  Ú_unregister_active_tool_callrê   rj   rë   r
   rK   r$   r   Ú_register_active_tool_callr  )r{   r£   rì   rí   r  r  rï   Úrun_doneÚterminal_errÚterminalrQ  Úhandles               r2   r]  Ú)_SyncToolCallsProjection._tool_calls_iter&  sÚ  é € Ø�<‰<×"Ñ"Ñ*ÜÐMÓNÐNÜ(¨'¨°D·O±OÓDˆØ�l‰l×1Ñ1°&Ó9ˆÜ"Ø—o‘oññ

ˆð 02ˆ
Ø,.ˆð)	:Ø�L‰L×*Ñ*¨6Ô2Ø�L‰L×/Ñ/Ô1ØØ—y‘y—}‘}“�Ø’<æ!Ø%Ÿk™k¨!›nÒ,÷ "˜'àð —|‘|×-Ñ-ˆHØ15ˆLØÑ#¨¯©¯©ðØ'Ÿ™Ó0�HØ#+§>¡>�Lð
  Ñ+ñ ä!Ð"WÓXð ô
 ˜wŸ™×5Ñ5Ó7Ö8�Ø—‘˜SÖ!ñ 9ã$�Ø—‘×9Ñ9¸&ÖAñ %à�L‰L×1Ñ1°#·&±&Õ9ð? &Ÿl™l¬4´´S¼#°X±ÀÓ+EÖF�FØ—L‘L×;Ñ;¸FÔCØ×%Ñ% fÔ-Ø—N‘N 6Ö*ñ Gö  '¨!¡*§/§/Ø!Ÿ+™+ a›.Ò(ö  '¨!¡*§/§/¡/ò øô6 !ó Úðûð —|‘|×-Ñ-ˆHØ15ˆLØÑ#¨¯©¯©ðØ'Ÿ™Ó0�HØ#+§>¡>‘LøÜ ó Ùðúð  Ñ+ñ ä!Ð"WÓXð ô
 ˜wŸ™×5Ñ5Ó7Ö8�Ø—‘˜SÖ!ñ 9ã$�Ø—‘×9Ñ9¸&ÖAñ %à�L‰L×1Ñ1°#·&±&Õ9üsv   ‚A.NÁ1A5J Ã)0NÄJ	 Ä6BNÇB9J ÊJ Ê	
JÊNÊJÊNÊ1NËK)Ë(NË)
K6Ë3NË5K6Ë6BNÎNr  ru   r  ©r‘   zIterator[SyncToolCallHandle]©	r*   r+   r,   r-   r.   r|   rÝ   r]  r0   r)   r1   r2   rX  rX    s3   † Ù>ð GKð0Ø&ð0Ø3Cð0à	õ0ô'÷;:r1   rX  c                  ó€   • \ rS rSrSrSS.           SS jjrSS jrSS jrSS jrSS	 jr	SS
 jr
SSS jjrSrg)ÚSyncScopedStreamHandleid  z<Scoped streaming handle for one discovered child invocation.r   )r5  c               ó$  • Xl         X l        [        U5      U l        X0l        X@l        SU l        S U l        XPl        [        R                  " 5       U l        [        R                  " US9U l        [        R                  " US9U l        [        R                  " US9U l        0 U l        [%        5       U l        [)        U 5      U l        [-        U 5      U l        [1        U 5      U l        U R2                  U l        [7        U[        U5      S9U l        g )NrO   r7  ©r(   )r×   ÚpathrG   r(   Ú
graph_nameÚtrigger_call_idr6   r7   Ú_max_queue_sizerv   ÚLockÚ_finish_lockré   r;  Ú_messages_inboxÚ_tools_inboxÚ_tasks_inboxÚ_descendant_handlesr€   Ú_iterated_inboxesÚ_SyncHandleMessagesProjectionr:   Ú_SyncHandleToolCallsProjectionÚ
tool_callsÚ_SyncHandleSubgraphsProjectionÚ	subgraphsÚ	subagentsÚ_SyncExtensionsProjectionÚ
extensions)r{   rØ   ry  rz  r{  r5  s         r2   r|   ÚSyncScopedStreamHandle.__init__g  sà   € ð ŒØŒ	Ü˜d›ˆŒØ$ŒØ.ÔØ&/ˆŒØ!%ˆŒ
Ø-ÔÜ%ŸNšNÓ,ˆÔÜ:?¿+º+Ø"ñ;
ˆÔô 8=·{²{Ø"ñ8
ˆÔô 8=·{²{Ø"ñ8
ˆÔð SUˆÔ ô ,/«5ˆÔÜ5°dÓ;ˆŒÜ8¸Ó>ˆŒÜ7¸Ó=ˆŒØŸ™ˆŒÜ3°FÄdÈ4ÃjÑQˆ�r1   c                ó  • UR                  S5      nUS:X  a  U R                  R                  U5        OCUS:X  a  U R                  R                  U5        O!US:X  a  U R                  R                  U5        US;   a‘  [        [        UR                  S5      =(       d    0 5      5      n[        U R                  R                  5       5       H=  u  pE[        U5      n[        U5      U:¼  d  M!  USU U:X  d  M,  UR                  U5        M?     gg)zý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.
Úmethodr:   r;   r?   ©r:   r;   r?   r£   N)rL   r  rH  r€  r�  rc   rN   rG   r‚  r#  rb   Ú_push_event)r{   r  rŽ  Úns_tupleÚ	desc_pathÚdesc_handleÚdesc_lens          r2   r�  Ú"SyncScopedStreamHandle._push_event‘  sç   € ð —‘˜8Ó$ˆØ�ZÓØ× Ñ ×+Ñ+¨EÕ2Ø�wÓØ×Ñ×(Ñ(¨Õ/Ø�wÓØ×Ñ×(Ñ(¨Ô/ð Ð3Ó3ÜÔ-¨e¯i©i¸Ó.A×.GÀRÓHÓIˆHÜ*.¨t×/GÑ/G×/MÑ/MÓ/OÖ*PÑ&�	Ü˜y›>�Ü�x“= HÕ,°¸)¸8Ð1DÈ	Õ1QØ×+Ñ+¨EÖ2ò +Qð 4r1   c           	     ó  • XR                   UR                  '   [        UR                  5      nS H1  n[        X5      n/ n  UR	                  UR                  5       5        M"     g! [        R                   a     Of = fU H…  nUR                  U5        Uc  M  [        [        UR                  S5      =(       d    0 5      5      n[        U5      U:¼  d  MV  USU UR                  :X  d  Mk  [        X5      R                  U5        M‡     MÝ  )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.
)r  r€  r�  Nr£   )r‚  ry  rb   Úgetattrr  Ú
get_nowaitré   ÚEmptyrH  rc   rN   rL   )r{   rq  r”  Ú
inbox_attrr$  Ústagingr  r‘  s           r2   Ú_register_descendantÚ+SyncScopedStreamHandle._register_descendant¨  sê   € ð 17× Ñ  §¡Ñ-Ü�v—{‘{Ó#ˆó
ˆJô
 07°tÓ/HˆEØ*,ˆGØðØ—N‘N 5×#3Ñ#3Ó#5Ô6ñ ò
øô —{‘{ó Ùðúã �Ø× Ñ  Ô'Ø‘=ÙÜ Ô!1°%·)±)¸HÓ2E×2KÈÓ!LÓM�Ü�x“= HÕ,°¸)¸8Ð1DÈÏÉÕ1SÜ˜FÓ/×:Ñ:¸5ÖAó !s   ÁA&Á&A=Á<A=c                ó<   • U R                   R                  US5        g)z6Remove a grandchild after it reaches a terminal state.N)r‚  r
  )r{   ry  s     r2   Ú_unregister_descendantÚ-SyncScopedStreamHandle._unregister_descendantÅ  s   € à× Ñ ×$Ñ$ T¨4Õ0r1   c                óš   • U R                   R                  U5        U R                  S:w  a   [        U SU S35      R	                  S5        gg)a4  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.
rO   Ú_Ú_inboxN)rƒ  Úaddr6   r—  rH  ©r{   Úkinds     r2   Ú_mark_iteratedÚ%SyncScopedStreamHandle._mark_iteratedÉ  sI   € ð 	×Ñ×"Ñ" 4Ô(Ø�;‰;˜)Ó#ô �D˜A˜d˜V 6Ð*Ó+×6Ñ6°tÕ<ð $r1   c                óv   • S H3  nXR                   ;   d  M  [        U SU S35      R                  S5        M5     g)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.
r�  r¢  r£  N)rƒ  r—  rH  r¥  s     r2   Ú_close_inboxesÚ%SyncScopedStreamHandle._close_inboxesØ  s8   € ó 3ˆDØ×-Ñ-Õ-Ü˜  $  vÐ.Ó/×:Ñ:¸4Ö@ò 3r1   Nc                ó¼   • U R                      U R                  S:w  a
   S S S 5        g Xl        X l        S S S 5        U R                  5         g ! , (       d  f       N= f)NrO   )r~  r6   r7   rª  )r{   r6   r7   s      r2   rN  ÚSyncScopedStreamHandle._finishã  sJ   € Ø×ÓØ�{‰{˜iÓ'Ø÷ Ðð !ŒKØŒJ÷	 ð
 	×ÑÕ÷ Õús   �A¨AÁ
A)r‚  r~  rƒ  r|  r  r�  r×   r€  r7   r‹  rz  r:   r(   ry  r6   r‰  rˆ  r†  r{  )rØ   r°   ry  útuple[str, ...]rz  rÒ   r{  rÒ   r5  rT  r‘   r’   ©r  r   r‘   r’   ©rq  rv  r‘   r’   )ry  r®  r‘   r’   )r¦  r$   r‘   r’   r�   ru   )r6   ÚSubgraphStatusr7   rÒ   r‘   r’   )r*   r+   r,   r-   r.   r|   r�  rœ  rŸ  r§  rª  rN  r0   r)   r1   r2   rv  rv  d  sx   † ÙFð  ñ(Rð !ð(Rð ð	(Rð
 ð(Rð $ð(Rð ð(Rð 
õ(RôT3ô.Bô:1ô=ô	A÷ñ r1   rv  c                  ó6   • \ rS rSrSrSS jrS	S jrS	S jrSrg)
r„  iì  zLMessages projection that drains a `SyncScopedStreamHandle`'s messages inbox.c                ó   • Xl         g ru   ©Ú_handle©r{   rq  s     r2   r|   Ú&_SyncHandleMessagesProjection.__init__ï  rÚ   r1   c                ó"   • U R                  5       $ ru   rû   rz   s    r2   rÝ   Ú&_SyncHandleMessagesProjection.__iter__ò  rþ   r1   c              #  ó.  #   • U R                   R                  S5        0 nU R                   R                  nU R                   R                  n  UR	                  5       nUc   g UR	                  S5      =(       d    0 n[        U5      nXb:w  a  MB  [        U[        5      (       a  UR	                  S5      OS n[        U[        5      (       d  M�  UR	                  S5      nUS:X  a‘  [        U5      n	[        XyS9n
[        UR	                  S5      [        5      (       a  UR	                  S5      O0 n[        [        U5      U(       a  UR	                  S5      OS U	S	9nXÁU
'   UR                  U5        Uv •  O—[        U5      n
UR	                  U
5      nUc1  [        U5      S
:X  a"  [        [        UR!                  5       5      5      nUc  GM  UR                  U5        US;   a*  [        UR#                  5       5       H  u  pÞXìL d  M  X	 M     GMÂ  ! f = f7f)Nr:   r£   r^   r  r  r  r¸   r  r  ra   r  )rµ  r§  r(   r  rL   rN   rJ   rK   rl   rp   r   rG   r   rb   rÊ   r"  r8   r#  )r{   r%  r(   r$  rï   rM   Únsr^   r'  rk   r(  r¸   r  r1  r2  s                  r2   rü   Ú,_SyncHandleMessagesProjection._messages_iterõ  sÛ  é € Ø�‰×#Ñ# JÔ/Ø-/ˆØ—L‘L×*Ñ*ˆ	Ø—‘×,Ñ,ˆð,	ØØ—y‘y“{�Ø‘<ØðP ðO  $Ÿx™x¨Ó1×7°R�Ü% lÓ3�Ø“?Ùä0:¸<Ì×0NÑ0N�L×$Ñ$ VÔ,ÐTXð ô " $¬×-Ñ-ÙØ!ŸX™X gÓ.�
Ø Ó0Ü!2°4Ó!8�JÜ,¨TÑG�Cô & d§h¡h¨zÓ&:¼D×AÑAð Ÿ™ Ô,àð ô
 -Ü"& y£/Þ?G˜XŸ\™\Ð*:Ô;ÈTØ#-ñ�Fð
 #)˜3‘KØ—O‘O DÔ)Ø “Lä,¨TÓ2�CØ#ŸZ™Z¨›_�FØ‘~¬#¨f«+¸Ó*:Ü!%¤d¨6¯=©=«?Ó&;Ó!<˜Ø‘~Ú Ø—O‘O DÔ)Ø!Ð%@Ó@Ü48¸¿¹»Ö4HÑ0˜IØ(Ô2Ø$*Ò$5ñ 5IòO øðV üs+   ‚A
HÁH Á"HÁ#F H È	H ÈHÈHr´  Nr°  r  r  r)   r1   r2   r„  r„  ì  s   † ÙVôô%÷1r1   r„  c                  ó6   • \ rS rSrSrSS jrS	S jrS	S jrSrg)
r…  i)  zKTool calls projection that drains a `SyncScopedStreamHandle`'s tools inbox.c                ó   • Xl         g ru   r´  r¶  s     r2   r|   Ú'_SyncHandleToolCallsProjection.__init__,  rÚ   r1   c                ó"   • U R                  5       $ ru   r\  rz   s    r2   rÝ   Ú'_SyncHandleToolCallsProjection.__iter__/  r_  r1   c              #  óü  #   • U R                   R                  S5        0 nU R                   R                  nU R                   R                  n UR	                  5       nUc4  [        S5      nUR                  5        H  nUR                  U5        M     g UR	                  S5      =(       d    0 n[        U5      nX‚:w  a  Mt  [        U[        5      (       a  UR	                  S5      OS n	[        U	[        5      (       d  M³  U	R	                  S5      n
U	R	                  S5      n[        U[        5      (       d  Mì  U
S:X  aU  U	R	                  S5      n[        U[        5      (       d  S	n[        UUU	R	                  S
5      [        U5      S9nXÑU'   Uv •  OæU
S:X  aL  UR	                  U5      nU	R	                  S5      nUb&  [        U[        5      (       a  UR                  U5        O”U
S:X  a6  UR                  US 5      nUb   UR!                  U	R	                  S5      5        OXU
S:X  aR  UR                  US 5      nUb=  U	R	                  S5      nUR                  [        U(       a  [        U5      OS5      5        GM/  7f)Nr;   rh  r£   r^   r  r9  ztool-startedÚ	tool_nameÚ r=   rc  ztool-output-deltarI  ztool-finishedrà   z
tool-errorÚmessagezTool call errored)rµ  r§  r(   r€  rL   r¦   r8   rR  rN   rJ   rK   r$   r4  rG   rJ  r
  rN  )r{   r%  r(   r$  rï   rQ  ÚhrM   r»  r^   r'  r9  rÃ  rq  rI  rÅ  s                   r2   r]  Ú/_SyncHandleToolCallsProjection._tool_calls_iter2  s  é € Ø�‰×#Ñ# GÔ,Ø02ˆØ—L‘L×*Ñ*ˆ	Ø—‘×)Ñ)ˆØØ—9‘9“;ˆDØ‰|Ü"ØIó�ð  Ÿ™ž�AØ—G‘G˜C–Lñ )àØŸ8™8 HÓ-×3°ˆLÜ! ,Ó/ˆBØ‹ÙÜ/9¸,Ì×/MÑ/M�<×#Ñ# FÔ+ÐSWˆDÜ˜d¤D×)Ñ)ÙØŸ™ 'Ó*ˆJØŸ8™8 NÓ3ˆLÜ˜l¬C×0Ñ0ÙØ˜^Ó+Ø ŸH™H [Ó1�	Ü! )¬S×1Ñ1Ø "�IÜ+Ø!-Ø"ØŸ(™( 7Ó+Ü" 9›oñ	�ð (.�|Ñ$Ø“ØÐ2Ó2Ø—J‘J˜|Ó,�ØŸ™ Ó)�Ø‘=¤Z°´s×%;Ñ%;Ø—M‘M %Ô(øØ˜Ó.Ø—J‘J˜|¨TÓ2�Ø‘=Ø—I‘I˜dŸh™h xÓ0Ô1øØ˜|Ó+Ø—J‘J˜|¨TÓ2�Ø‘=Ø"Ÿh™h yÓ1�GØ—G‘GÜ$¶W¤S¨¤\ÐBUÓVôò[ ùs   ‚I:I<r´  Nr°  rs  rt  r)   r1   r2   r…  r…  )  s   † ÙUôô'÷4r1   r…  c                  ó6   • \ rS rSrSrSS jrS	S jrS	S jrSrg)
r‡  ii  zJSubgraphs projection that drains a `SyncScopedStreamHandle`'s tasks inbox.c                ó   • Xl         g ru   r´  r¶  s     r2   r|   Ú'_SyncHandleSubgraphsProjection.__init__l  rÚ   r1   c                ó"   • U R                  5       $ ru   ©Ú_subgraphs_iterrz   s    r2   rÝ   Ú'_SyncHandleSubgraphsProjection.__iter__o  ó   € Ø×#Ñ#Ó%Ð%r1   c              #  óÈ  #   • U R                   R                  S5        [        5       n0 nU R                   R                  n U R                   R                  R                  5       nUc¬  SnU R                   R                  R                  nUbL  UR                  5       (       a7   UR                  SS9n[        U[        5      (       a  UR                  S:X  a  SnUR                  5        H&  nUR                  S:X  d  M  UR                  U5        M(     g UR                  S5      =(       d    0 n	[!        U	5      n
[        U	["        5      (       a  U	R                  S	5      OS n[        U["        5      (       d  GM9  S
U;   a¥  UR                  S5      nU(       d  GMZ  [%        U
5      n['        UR)                  5       5       H_  u  pïUS S U:w  a  M  UR*                  U:w  a  M"  [-        U5      u  nnUR                  UU5        X.	 U R                   R/                  U5        Ma     GMä  [1        X£5      (       d  GM÷  [%        U
5      nUU;   a  GM  UR3                  U5        [5        US   5      u  nn[7        U R                   R                  UU=(       d    S UU R                   R8                  S9nXòU'   U R                   R;                  U5        Uv •  GM�  ! [         a     GNf = f7f)Nr?   rP   r   ©rŠ   ÚerroredrQ   rO   r£   r^   r‹   rj   éÿÿÿÿ)rØ   ry  rz  r{  r5  )rµ  r§  r€   ry  r�  rL   r×   ri  rŽ   r‹   rJ   r4   r6   rj  r8   rN  rN   rK   rc   rG   r#  r{  r_   rŸ  re   r¤  rZ   rv  r|  rœ  )r{   Úseenr%  rd   rï   Úterminal_statusrn  r‹   ÚchildrM   r(   r^   Ú	result_idÚparent_pathÚ
child_pathÚchild_handler6   r7   ry  rz  r{  s                        r2   rÍ  Ú._SyncHandleSubgraphsProjection._subgraphs_iterr  su  é € Ø�‰×#Ñ# GÔ,Ü%(£UˆØ@BˆØ—‘×!Ñ!ˆØØ—<‘<×,Ñ,×0Ñ0Ó2ˆDØ‰|ð 3>�ØŸ<™<×/Ñ/×9Ñ9�ØÑ'¨H¯M©M¯O©OðØ!)§¡¸ Ð!;˜ä& v¬|×<Ñ<Ø &§¡°Ó :à.6˜Oð $Ÿ]™]ž_�EØ—|‘| yÕ0ØŸ™ oÖ6ñ -ð ØŸ8™8 HÓ-×3°ˆLÜ(¨Ó6ˆIÜ/9¸,Ì×/MÑ/M�<×#Ñ# FÔ+ÐSWˆDÜ˜d¤D×)Ñ)ÚØ˜4ÓØ ŸH™H T›N�	Þ ÚÜ# IÓ.�Ü04°V·\±\³^Ö0DÑ,�JØ! # 2�¨+Ó5Ù Ø#×3Ñ3°yÓ@Ù Ü$?ÀÓ$E‘M�F˜EØ ×(Ñ(¨°Ô7ØÐ*Ø—L‘L×7Ñ7¸
ÖCñ 1Eò Ü# I×5Ñ5ÚÜ˜Ó#ˆDØ�t‹|ÚØ�H‰H�TŒNÜ*BÀ4ÈÁ8Ó*LÑ'ˆJ˜Ü1Ø—|‘|×+Ñ+ØØ%×-¨Ø /Ø#Ÿ|™|×;Ñ;ñˆLð (�4‰Lð �L‰L×-Ñ-¨lÔ;ØÒòy øô  %ó Úðüs1   ‚B K"Â#6K Ã!K"Ã>GK"Ë
KËK"ËKËK"r´  Nr°  ©r‘   z Iterator[SyncScopedStreamHandle]©	r*   r+   r,   r-   r.   r|   rÝ   rÍ  r0   r)   r1   r2   r‡  r‡  i  s   † ÙTôô&÷Ar1   r‡  c                  ó:   • \ rS rSrSrSS	S jjrS
S jrS
S jrSrg)Ú_SyncSubgraphsProjectioni¶  z8Discover direct child invocations for a namespace scope.c                ó   • Xl         X l        g ru   )r×   Ú_scope)r{   rØ   rd   s      r2   r|   Ú!_SyncSubgraphsProjection.__init__¹  s   € ØŒØ�r1   c                ó"   • U R                  5       $ ru   rÌ  rz   s    r2   rÝ   Ú!_SyncSubgraphsProjection.__iter__½  rÏ  r1   c              #  ó  ^ #   • T R                   R                  c  [        S5      e[        T R                  5      nT R                   R                  U5      n[        T R                  U 4S jS9nT R                  (       d  T R                   R                  5       OS n T R                   R                  U5        T R                   R                  5          UR                  R                  5       nUcç   SnT R                   R                  nUbL  UR                  5       (       a7   UR                  SS9n[        U[         5      (       a  UR"                  S:X  a  SnUR&                  R)                  5        H&  n	U	R"                  S	:X  d  M  U	R+                  U5        M(     T R                   R-                  UR.                  5        Ub  UR1                  S 5        g g UR                  S
5      =(       d    0 n
UbH  UR                  S5      S:X  a3  [3        [5        U
5      5      T R                  :X  a  UR1                  U5        UR7                  [9        [:        [<        [>        4   U5      5       H  n	U	v •  M	     GM£  ! [$         a     GN+f = f! SnT R                   R                  nUb]  UR                  5       (       aH   UR                  SS9n[        U[         5      (       a  UR"                  S:X  a  SnO! [$         a     Of = fUR&                  R)                  5        H&  n	U	R"                  S	:X  d  M  U	R+                  U5        M(     T R                   R-                  UR.                  5        Ub  UR1                  S 5        f f = f7f)Nrã   c                ó0   >• [        TR                  U UUS9$ ©N)rØ   ry  rz  r{  )rv  r×   ©ry  rz  r{  r{   s      €r2   r  Ú:_SyncSubgraphsProjection._subgraphs_iter.<locals>.<lambda>Ç  s   ø€ Ü&ØŸ<™<ØØ)Ø$3ò	r1   ©rd   rg  rP   r   rÑ  rÒ  rQ   rO   r£   rŽ  r:   ) r×   rä   r¦   rh   rá  rå   r   Ú_activate_root_messages_inboxræ   rç   ré   rL   ri  rŽ   r‹   rJ   r4   r6   rj  rk  r8   rN  rê   rj   rH  rc   rN   rë   r
   rK   r$   r   )r{   r£   rì   rí   r  rï   rÕ  rn  r‹   rq  rM   s   `          r2   rÍ  Ú(_SyncSubgraphsProjection._subgraphs_iterÀ  sÓ  øé € Ø�<‰<×"Ñ"Ñ*ÜÐMÓNÐNÜ.¨t¯{©{Ó;ˆØ�l‰l×1Ñ1°&Ó9ˆÜ"Ø—+‘+ôñ

ˆð AEÇÇˆD�L‰L×6Ñ6Ô8ÐQUð 	ð"	,Ø�L‰L×*Ñ*¨6Ô2Ø�L‰L×/Ñ/Ô1ØØ—y‘y—}‘}“�Ø‘<Øð /:ˆOØ—|‘|×-Ñ-ˆHØÑ#¨¯©¯©ðØ%Ÿ_™_°Q˜_Ð7�FÜ! &¬,×7Ñ7¸F¿M¹MÈYÓ<VØ*2˜ð "Ÿ/™/×0Ñ0Ö2�Ø—=‘= IÕ-Ø—N‘N ?Ö3ñ 3ð �L‰L×1Ñ1°#·&±&Ô9ØÑ%Ø×%Ñ% dÕ+ð &ð5  $Ÿx™x¨Ó1×7°R�àÑ*ØŸ™ Ó*¨jÓ8ÜÔ.¨|Ó<Ó=ÀÇÁÓLà×)Ñ)¨$Ô/Ø%Ÿl™l¬4´´S¼#°X±ÀÓ+EÖF�FØ ”Lñ Gò øô0 !ó Úðûð /:ˆOØ—|‘|×-Ñ-ˆHØÑ#¨¯©¯©ðØ%Ÿ_™_°Q˜_Ð7�FÜ! &¬,×7Ñ7¸F¿M¹MÈYÓ<VØ*2˜ùÜ ó Ùðúà!Ÿ/™/×0Ñ0Ö2�Ø—=‘= IÕ-Ø—N‘N ?Ö3ñ 3ð �L‰L×1Ñ1°#·&±&Ô9ØÑ%Ø×%Ñ% dÕ+ð &üs|   ƒBNÂAJ Ã00NÄ!6I5 Å+NÆANÇBJ É5
JÉ?NÊJÊNÊ1M>Ê86K/Ë.M>Ë/
K<Ë9M>Ë;K<Ë<.M>Ì.AM>Í>N)rá  r×   N)r)   )rØ   r°   rd   r®  r‘   r’   rÜ  rÝ  r)   r1   r2   rß  rß  ¶  s   † ÙBöô&÷5,r1   rß  c                  ó,   • \ rS rSrSrSS jrSS jrSrg)	rŠ  iø  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.
c                ó*   • Xl         X l        0 U l        g ru   )r×   rö   Ú_cacher÷   s      r2   r|   Ú"_SyncExtensionsProjection.__init__   s   € ØŒØ#ŒØ;=ˆ�r1   c                óº   • U(       d  [        S5      eXR                  ;  a,  [        U R                  UU R                  S9U R                  U'   U R                  U   $ )Nz!extension name must be non-empty.)rW   r(   )Ú
ValueErrorrï  Ú_SyncExtensionProjectionr×   rö   )r{   rW   s     r2   Ú__getitem__Ú%_SyncExtensionsProjection.__getitem__  sP   € ÞÜÐ@ÓAÐAØ—{‘{Ó"Ü 8Ø—‘ØØŸ/™/ñ!ˆD�K‰K˜Ñð
 �{‰{˜4Ñ Ð r1   )rï  rö   r×   N)rØ   r°   r(   r'   r‘   r’   )rW   r$   r‘   ró  )r*   r+   r,   r-   r.   r|   rô  r0   r)   r1   r2   rŠ  rŠ  ø  s   † ñô>÷
	!r1   rŠ  c                  óB   • \ rS rSr        SS jrSS jrSS jrSrg)	ró  i  c               ó(   • Xl         X l        X0l        g ru   )r×   Ú_namerö   )r{   rØ   rW   r(   s       r2   r|   Ú!_SyncExtensionProjection.__init__  s   € ð ŒØŒ
Ø#�r1   c                ó"   • U R                  5       $ ru   )Ú_iterrz   s    r2   rÝ   Ú!_SyncExtensionProjection.__iter__  s   € Ø�z‰z‹|Ðr1   c              #  ó
  #   • SSU R                    3/0nU R                  (       a  U R                  /US'   U R                  R                  U5      n[	        U R                   S9n U R                  R
                  (       a'   U R                  R                  UR                  5        g U R                  R                  U5        U R                  R                  5          UR                  R                  5       nUc'   U R                  R                  UR                  5        g UR                  [        [        [        [         4   U5      5       S h  v•N   Mz   N! U R                  R                  UR                  5        f = f7f)NrC   úcustom:rD   ©rW   )rø  rö   r×   rå   r   r¥   rê   rj   ræ   rç   ré   rL   rë   r
   rK   r$   r   )r{   r£   rì   rí   rï   s        r2   rû  Ú_SyncExtensionProjection._iter   s  é € Ø#-°'¸$¿*¹*¸Ð0FÐ/GÐ"HˆØ�?�?Ø$(§O¡OÐ#4ˆF�<Ñ Ø�l‰l×1Ñ1°&Ó9ˆÜ#¨¯©Ñ4ˆð	:Ø�|‰|×#×#Øð �L‰L×1Ñ1°#·&±&Õ9ð �L‰L×*Ñ*¨6Ô2Ø�L‰L×/Ñ/Ô1ØØ—y‘y—}‘}“�Ø‘<Øð �L‰L×1Ñ1°#·&±&Õ9ð #Ÿ<™<¬¬T´#´s°(©^¸TÓ(BÓC×CÐCñ	 ñ Døà�L‰L×1Ñ1°#·&±&Õ9üs=   ‚A"FÁ%E Â&FÂ'AE Ã;&FÄ!/E ÅEÅE Å'F Æ F)rø  rö   r×   N)rØ   r°   rW   r$   r(   r'   r‘   r’   )r‘   zIterator[dict[str, Any]])r*   r+   r,   r-   r|   rÝ   rû  r0   r)   r1   r2   ró  ró    s7   † ð	$à ð	$ð ð		$ð
 ð	$ð 
ô	$ô÷:r1   ró  c                  óØ  • \ rS rSrSrSSSSS.               S*S jjrS+S jrS,S	 jr\S-S
 j5       r	\S.S j5       r
S/S jrS0S jrS1S jrS/S jrS2S jrS3S jrS4S jrS4S jrS5S jrS6S jrS6S jrS5S jrS/S jrSSS.       S7S jjrS8S jr\S9S j5       r          S:S jrS;S jrS<S jrS/S  jrS=S! jr S>S" jr!S/S# jr"S>S$ jr#S?S% jr$S@S& jr%SAS' jr&S=S( jr'S)r(g)Br°   i4  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_kindc               óž  • Xl         [        U=(       d    0 5      U l        X l        X0l        XPl        X`l        Xpl        SU l        S U l	        S U l
        [        R                  " 5       U l        SU l        SU l        / U l        S U l        S U l        S U l        SU l        SU l        S U l        [/        5       U l        [/        5       U l        S U l        [7        U 5      U l        [;        U 5      U l        [?        U 5      U l         [C        U / S9U l"        [G        U / S9U l$        [K        U SS9U l&        U RL                  U l'        [Q        U / S9U l)        g )NFra   é   rx  r)   rg   )*r©   rK   r¨   Ú	thread_idrª   Ú_run_start_timeoutÚ_explicit_thread_idÚ_transport_kindr¥   rä   r¾   rv   r}  Ú_command_id_lockÚ_next_command_idrR   r\   Ú_lifecycle_watcher_threadÚ_lifecycle_watcher_handleÚ_lifecycle_cursorÚ!_lifecycle_max_reconnect_attemptsr½   ri  r€   Ú_active_message_streamsÚ_active_tool_callsr  r³   Úrunr˜   ÚagentrÔ   r8   ró   r:   rX  r†  rß  rˆ  r‰  rŠ  r‹  )r{   Úhttpr  rª   r¢   r  r  r  s           r2   r|   ÚSyncThreadStream.__init__;  s#  € ð Œ
Ü˜WŸ]¨Ó+ˆŒØ"ŒØ(ÔØ"3ÔØ#5Ô Ø-ÔØˆŒØ8<ˆŒØ8<ˆÔÜ )§¢Ó 0ˆÔØ !ˆÔØ!&ˆÔØ24ˆŒØBFˆÔ&ØGKˆÔ&Ø-1ˆÔØ12ˆÔ.Ø$ˆŒØ15ˆŒÜ=@»UˆÔ$Ü;>»5ˆÔØFJˆÔ!Ü  Ó&ˆŒÜ% dÓ+ˆŒ
Ü+¨DÓ1ˆŒÜ/°ÀÑCˆŒÜ2°4À2ÑFˆŒÜ1°$¸bÑAˆŒØŸ™ˆŒÜ3°DÀBÑGˆ�r1   c                óz  • U R                   (       a  [        S5      eU R                  S:X  a  [        O[        nU" U R
                  R                  U R                  U R                  S9U l	        [        R                  " 5       n[        U R                  US9U l        [        5       U l        U R!                  5         U $ )Nz4SyncThreadStream is closed and cannot be re-entered.Ú	websocket)Úclientr  r¢   )Úrun_start_gate)r¥   r¦   r  r    r   r©   r  r  r¨   rä   rv   r   r   r¾   rr   ri  Ú!_ensure_lifecycle_watcher_running)r{   Útransport_clsr  s      r2   Ú	__enter__ÚSyncThreadStream.__enter__f  sœ   € Ø�<�<ÜÐUÓVÐVð ×#Ñ# {Ó2õ +ä)ð 	ñ
 (Ø—:‘:×$Ñ$Ø—n‘nØ—M‘Mñ
ˆŒô #ŸšÓ*ˆÜ/Ø�O‰O¨Nñ
ˆÔô )Ó*ˆŒØ×.Ñ.Ô0Øˆr1   c                ó$   • U R                  5         g ru   )Úclose)r{   Úexc_typeÚexcÚtbs       r2   Ú__exit__ÚSyncThreadStream.__exit__~  s   € Ø�
‰
�r1   c                óþ   • U R                  5       (       a+  U R                  5       nU R                  U5      (       a  US   $ U R                  5       nUR                  b  UR                  eU R                  5       nU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.
r8   )Ú&_can_return_existing_state_immediatelyrè   Ú_state_is_terminalÚ_wait_for_run_doner7   )r{   rî   rp  s      r2   rà   ÚSyncThreadStream.output�  sv   € ð ×6Ñ6×8Ñ8Ø×%Ñ%Ó'ˆEØ×&Ñ& u×-Ñ-Ø˜X‘Ð&Ø×*Ñ*Ó,ˆØ�>‰>Ñ%Ø—.‘.Ð Ø×!Ñ!Ó#ˆØ�X‰Ðr1   c                ó\   • U R                   c  [        S5      eU R                  [        5      $ )z?Raw iterator of every `Event` the server emits for this thread.rã   )rä   r¦   Ú	subscriberA   rz   s    r2   ÚeventsÚSyncThreadStream.events“  s)   € ð �?‰?Ñ"ÜÐMÓNÐNØ�~‰~œmÓ,Ð,r1   c                ó,  • U R                   (       a  gSU l         U R                  nUb/  UR                  5       (       d  UR                  [	        S5      5        U R
                  b  U R
                  R                  5         U R                  nUb3  [        R                  " [        5         UR                  5         SSS5        U R                  nUbG  UR                  5       (       a2  [        R                  " [        5         UR                  SS9  SSS5        U R                  [	        S5      5        U R                  [	        S5      5        U R                   b  U R                   R                  5         gg! , (       d  f       NÁ= f! , (       d  f       N|= f)z(Tear down the thread stream. Idempotent.NTzSyncThreadStream closedg      ð?rÑ  )r¥   ri  rŽ   r…   r¦   r¾   r!  r  Ú
contextlibÚsuppressrj  r  Úis_aliveÚjoinÚ_fail_active_message_streamsÚ_fail_active_tool_callsrä   )r{   rn  rq  rØ   s       r2   r!  ÚSyncThreadStream.closeš  s$  € à�<�<ØØˆŒØ—>‘>ˆØÑ¨¯©¯©Ø×"Ñ"¤<Ð0IÓ#JÔKð ×ÑÑ'Ø×Ñ×"Ñ"Ô$Ø×/Ñ/ˆØÑÜ×$Ò$¤YÕ/Ø—‘”÷ 0à×/Ñ/ˆØÑ &§/¡/×"3Ñ"3Ü×$Ò$¤\Õ2Ø—‘ C�Ñ(÷ 3à×)Ñ)¬,Ð7PÓ*QÔRØ×$Ñ$¤\Ð2KÓ%LÔMØ�?‰?Ñ&Ø�O‰O×!Ñ!Õ#ð '÷ 0Õ/ú÷ 3Õ2ús   Â(E4Ã?FÅ4
FÆ
Fc                óh   • U R                   c  [        S5      eU R                   R                  U5      $ ©Nrã   )r¾   r¦   Úregister_subscription©r{   r£   s     r2   rå   Ú'SyncThreadStream._register_subscription¸  s1   € Ø×ÑÑ#ÜÐMÓNÐNØ×Ñ×5Ñ5°fÓ=Ð=r1   c                óV   • U R                   b  U R                   R                  U5        g g ru   )r¾   Úunregister_subscription)r{   Úsubscription_ids     r2   rê   Ú)SyncThreadStream._unregister_subscription½  s'   € Ø×ÑÑ'Ø×Ñ×4Ñ4°_ÕEð (r1   c                óT   • U R                   b  U R                   R                  5         g g ru   )r¾   Úensure_fanout_runningrz   s    r2   rç   Ú'SyncThreadStream._ensure_fanout_runningÁ  s%   € Ø×ÑÑ'Ø×Ñ×2Ñ2Õ4ð (r1   c                ój   • U R                   c  [        S5      eU R                   R                  U5        g r9  )r¾   r¦   Úreconcile_stream)r{   Úcandidate_filters     r2   ræ   Ú"SyncThreadStream._reconcile_streamÅ  s/   € Ø×ÑÑ#ÜÐMÓNÐNØ×Ñ×)Ñ)Ð*:Õ;r1   c                óh   • U R                   c  [        R                  " 5       U l         U R                   $ ru   )r  ré   r;  rz   s    r2   rë  Ú.SyncThreadStream._activate_root_messages_inboxÊ  s(   € Ø×$Ñ$Ñ,Ü(-¯ª«ˆDÔ%Ø×(Ñ(Ð(r1   c                ó:   • U R                   R                  U5        g ru   )r  r¤  ©r{   r  s     r2   r  Ú0SyncThreadStream._register_active_message_streamÏ  s   € Ø×$Ñ$×(Ñ(¨Õ0r1   c                ó:   • U R                   R                  U5        g ru   )r  ÚdiscardrK  s     r2   r  Ú2SyncThreadStream._unregister_active_message_streamÒ  s   € Ø×$Ñ$×,Ñ,¨VÕ4r1   c                ó’   • [        U R                  5       H  nUR                  U5        M     U R                  R                  5         g ru   )rG   r  ÚfailÚclear)r{   rQ  r  s      r2   r5  Ú-SyncThreadStream._fail_active_message_streamsÕ  s5   € Ü˜4×7Ñ7Ö8ˆFØ�K‰K˜Öñ 9à×$Ñ$×*Ñ*Õ,r1   c                ó:   • U R                   R                  U5        g ru   )r  r¤  r¶  s     r2   rm  Ú+SyncThreadStream._register_active_tool_callÚ  s   € Ø×Ñ×#Ñ# FÕ+r1   c                ó:   • U R                   R                  U5        g ru   )r  rN  r¶  s     r2   rl  Ú-SyncThreadStream._unregister_active_tool_callÝ  s   € Ø×Ñ×'Ñ'¨Õ/r1   c                ó’   • [        U R                  5       H  nUR                  U5        M     U R                  R                  5         g ru   )rG   r  rR  rR  )r{   rQ  rq  s      r2   r6  Ú(SyncThreadStream._fail_active_tool_callsà  s5   € Ü˜4×2Ñ2Ö3ˆFØ�L‰L˜Öñ 4à×Ñ×%Ñ%Õ'r1   c                óT   • U R                   b  U R                   R                  5         gg)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_pausedrz   s    r2   Ú_signal_pausedÚSyncThreadStream._signal_pausedå  s'   € ð ×ÑÑ'Ø×Ñ×*Ñ*Õ,ð (r1   )rD   rE   c               óŠ   • U R                   c  [        S5      eS[        U5      0nUb  X$S'   Ub  X4S'   U R                  U5      $ )zö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.
rã   rC   rD   rE   )rä   r¦   rG   Ú_subscription_iter)r{   rC   rD   rE   r£   s        r2   r-  ÚSyncThreadStream.subscribeò  sT   € ð �?‰?Ñ"ÜÐMÓNÐNØ#-¬t°H«~Ð">ˆØÑ!Ø#-�<Ñ ØÑØ#�7‰OØ×&Ñ& vÓ.Ð.r1   c           	   #  ó¾  ^ #   • [        U5        T R                  c  [        S5      e0 n/ nU GH8  nUS:X  a#  [        S5      X$'   UR	                  SS/05        M-  US;   a3  [        U/ S9X$'   UR	                  [        [        U// 5      5      5        Mf  US:X  a4  [        / S S	9X$'   UR	                  [        [        S// 5      5      5        M   US
:X  a4  [        / S S9X$'   UR	                  [        [        S// 5      5      5        MÚ  US:X  a6  [        SU 4S jS9X$'   UR	                  [        [        S5      5      5        GM  [        US9X$'   UR	                  SSU 3/05        GM;     U(       d  g[        [        [        [        SU5      5      5      nUR                  S5      n/ n/ n T R!                  U5       HÑ  n	Ub  UR#                  U	5       H	  n
SU
4v •  M     [%        U	5      nT R'                  U5      nUc  ME  US:w  d  MM  UR                  U5      nUc  Mc  UR#                  U	5       HY  n
US
:X  a#  T R)                  U
5        UR	                  U
5        O(US:X  a"  T R+                  U
5        UR	                  U
5        XÊ4v •  M[     MÓ     T R-                  UR                  S
5      UUU5        g! T R-                  UR                  S
5      UUU5        f = f7f)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ã   r8   rC   )r9   r>   r?   rx  r:   c                ó   • [        XUS9$ r  r   r  s      r2   r  Ú9SyncThreadStream.interleave_projections.<locals>.<lambda>.  s   € Ü'Ø&/Àzòr1   r  r†  c                ó   • [        U UUUS9$ rb  rd  rc  s       r2   r  rc  8  s   € Ü*Ø)5Ø!%Ø"'Ø&/ò	r1   rf  r;   rˆ  r)   c                ó   >• [        TU UUS9$ rç  )rv  rè  s      €r2   r  rc  E  s   ø€ Ü.Ø#'Ø!%Ø'1Ø,;ò	r1   rê  rÿ  rþ  zlist[dict[str, Any]])r   rä   r¦   r   r  rK   rH   r   r   r   rh   r   r
   r   r   rL   r_  rë   r   Ú_interleave_public_namerm  r  Ú_finalize_interleave_decoders)r{   rC   ÚdecodersÚ
sub_paramsÚchÚmergedrˆ  Úregistered_tool_callsÚregistered_message_streamsr  rï   ÚwireÚpublicrí   s   `             r2   Úinterleave_projectionsÚ'SyncThreadStream.interleave_projections  sÖ  øé € ô& 	% XÔ.Ø�?‰?Ñ"ÜÐMÓNÐNØ')ˆØ+-ˆ
ÜˆBØ�X‹~Ü*¨8Ó4�‘Ø×!Ñ! :°¨zÐ":Ö;ØÐ:Ó:ô
  +¨2¸Ñ<�‘Ø×!Ñ!¤$Ô'>À¸tÀRÓ'HÓ"IÖJØ�zÓ!Ü.Ø ñ$ñ �‘ð ×!Ñ!¤$Ô'>À
¸|ÈRÓ'PÓ"QÖRØ�|Ó#Ü/Ø ñ$ñ
 �‘ð ×!Ñ!¤$Ô'>À¸yÈ"Ó'MÓ"NÖOØ�{Ó"Ü/Øô$ñ
 �‘ð ×!Ñ!¤$Ô'DÀRÓ'HÓ"I×Jä0°bÑ9�‘Ø×!Ñ! :°'¸"¸°Ð/?Ð"@×Añc öd ØÜÜÜ ¤Ð&<¸jÓ!IÓJó
ˆð —L‘L Ó-ˆ	ð ;=ÐØ<>Ð"ð	Ø×0Ñ0°Ö8�ØÑ(Ø )§¡¨uÖ 5˜Ø*¨DÐ1Ô1ñ !6ä$ UÓ+�Ø×5Ñ5°dÓ;�àÓ%¨&°KÕ*?Ø&Ÿl™l¨6Ó2�GØÓ*Ø$+§L¡L°Ö$7˜DØ%¨Ó5Ø $× ?Ñ ?ÀÔ EØ 5× <Ñ <¸TÕ BØ!'¨:Ó!5Ø $× DÑ DÀTÔ JØ :× AÑ AÀ$Ô GØ#) .Ô0ó %8ñ 9ð& ×.Ñ.Ø—‘˜\Ó*ØØ%Ø*õ	øˆD×.Ñ.Ø—‘˜\Ó*ØØ%Ø*õ	üs2   ƒF'KÆ+AJ5 ÈJ5 È	J5 ÈA2J5 Ê$KÊ5%KËKc                ód   • U c  gU S:X  a  gU R                  S5      (       a  U [        S5      S $ U $ )zMMap a wire channel name to the public channel name used in interleave tuples.Nr;   r†  rþ  )Ú
startswithrb   )rn  s    r2   rf  Ú(SyncThreadStream._interleave_public_namey  s<   € ð ‰<ØØ�7‹?ØØ�?‰?˜9×%Ñ%Øœ˜I›Ð(Ð)Ð)Øˆr1   c                óÎ  • U R                   nSnUb%  UR                  5       (       a   UR                  SS9n[	        U[
        5      (       ab  Ub  UR                  b  UR                  O
[        S5      n[        UR                  R                  5       5       H  nUR                  U5        M     U H  nU R                  U5        M     U H  n	U R                  U	5        M     [	        U[        5      (       a\  Ub  UR                  S:X  a  SOSn
UR                  R                  5        H&  nUR                  S:X  d  M  UR!                  U
5        M(     gg! [         a    Sn GN,f = f)	aN  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Ñ  rh  rÒ  rQ   rP   rO   )ri  rŽ   r‹   rj  rJ   r   r7   r¦   rG   rk  r8   rR  rl  r  r   r6   rN  )r{   r†  rˆ  rl  rm  rn  ÚresolvedrQ  rq  r  rÕ  rÖ  s               r2   rg  Ú.SyncThreadStream._finalize_interleave_decoders„  sG  € ð —>‘>ˆØ(,ˆØÑ H§M¡M§O¡Oð Ø#Ÿ?™?°1˜?Ð5�ô �jÔ"2×3Ñ3ð Ñ'¨H¯N©NÑ,Fð —’ä!Ð"WÓXð ô
 ˜z×1Ñ1×8Ñ8Ó:Ö;�Ø—‘˜SÖ!ñ <ã+ˆFØ×-Ñ-¨fÖ5ñ ,ã0ˆFØ×2Ñ2°6Ö:ñ 1ä�iÔ!1×2Ñ2ð Ñ'¨H¯O©O¸yÓ,Hñ à ð ð
 #×*Ñ*×1Ñ1Ö3�Ø—<‘< 9Õ,Ø—M‘M /Ö2ò 4ð 3øô ó  Ø“ð ús   ¨E ÅE$Å#E$c              #  óŽ  #   • U R                  U5      n U R                  (       a   U R                  UR                  5        g U R	                  U5        U R                  5          UR                  R                  5       nUc   U R                  UR                  5        g Uv •  M@  ! U R                  UR                  5        f = f7fru   )rå   r¥   rê   rj   ræ   rç   ré   rL   )r{   r£   rì   rï   s       r2   r_  Ú#SyncThreadStream._subscription_iter¯  s£   é € Ø×)Ñ)¨&Ó1ˆð	2Ø�|�|Øð ×)Ñ)¨#¯&©&Õ1ð ×"Ñ" 6Ô*Ø×'Ñ'Ô)ØØ—y‘y—}‘}“�Ø‘<Øð ×)Ñ)¨#¯&©&Õ1ð ’
ñ	 øð ×)Ñ)¨#¯&©&Õ1üs-   ‚C•B% §CÁ?B% ÂCÂB% Â%CÃCc                ó|  • U R                   c  [        S5      eU R                     U R                  nU =R                  S-  sl        SSS5        U R                   R	                  WXS.5      nUc  0 $ UR                  S5      S:X  a5  UR                  SS5      nUR                  SS	5      n[        S
U SU 35      eUR                  S5      n[        U[        5      (       a9  UR                  S5      nU R                  b  U R                  R                  U5        UR                  S0 5      $ ! , (       d  f       Nì= f)z8Send a protocol command and return the `result` payload.Nrã   ra   )rj   rŽ  r£   Útyper7   ÚunknownrÅ  rÄ  zProtocol error [z]: ÚmetaÚapplied_through_seqr‹   )
rä   r¦   r  r  Úsend_commandrL   rJ   rK   r¾   Úobserve_applied_through_seq)	r{   rŽ  r£   Ú
command_idrÉ   ÚcoderÅ  r}  r~  s	            r2   r¼   ÚSyncThreadStream._send_command¾  s  € à�?‰?Ñ"ÜÐMÓNÐNØ×"Ó"Ø×.Ñ.ˆJØ×!Ò! QÑ&Õ!÷ #ð —?‘?×/Ñ/Ø¨ÑBó
ˆð ÑØˆIØ�<‰<˜Ó 7Ó*Ø—<‘< ¨Ó3ˆDØ—l‘l 9¨bÓ1ˆGÜÐ!1°$°°s¸7¸)ÐDÓEÐEØ�|‰|˜FÓ#ˆÜ�dœD×!Ñ!Ø"&§(¡(Ð+@Ó"AÐØ×ÑÑ+Ø× Ñ ×<Ñ<Ð=PÔQØ�|‰|˜H bÓ)Ð)÷# #Õ"ús   ¥"D-Ä-
D;c                óž   • U R                   b  g [        R                  " U R                  SSS9U l         U R                   R	                  5         g )Nzlanggraph-sdk-sync-lifecycleT)r.  rW   Údaemon)r  rv   ÚThreadÚ_run_lifecycle_watcherrÁ   rz   s    r2   r  Ú2SyncThreadStream._ensure_lifecycle_watcher_runningÕ  sG   € Ø×)Ñ)Ñ5ØÜ)2×)9Ò)9Ø×.Ñ.Ø/Øñ*
ˆÔ&ð
 	×&Ñ&×,Ñ,Õ.r1   c                ó˜   • UR                  S5      n[        U[        5      (       a$  U R                  b  X R                  :”  a  X l        g g g )NÚseq)rL   rJ   rT  r  )r{   r  rŠ  s      r2   Ú_observe_lifecycle_eventÚ)SyncThreadStream._observe_lifecycle_eventß  sE   € Ø�i‰i˜ÓˆÜ�cœ3×ÑØ×"Ñ"Ñ*¨c×4JÑ4JÓ.Jà%(Õ"ð /Kð  r1   c                óJ   • SSS/0nU R                   b  U R                   US'   U$ )NrC   r<   r=   Úsince)r  r;  s     r2   Ú_lifecycle_stream_paramsÚ)SyncThreadStream._lifecycle_stream_paramsæ  s1   € Ø",¨{¸GÐ.DÐ!EˆØ×!Ñ!Ñ-Ø"×4Ñ4ˆF�7‰OØˆr1   c           
     ó¨  • U R                   c  gSnU R                  (       d·   U R                   R                  U R                  5       5      nX l        UR
                   H8  nU R                  (       a    gU R                  U5        U R                  U5        M:     UR                  5       nUc  gUS-  nXR                  :”  a  Ue U R                  (       d  M¶  gg! [         am  nUS-  nXR                  ::  a   SnAMí  U R                  nUb:  UR                  5       (       d%  UR                  [        S[        SU 35      S95         SnAgSnAff = f)z6Always-on thread consuming lifecycle + input channels.Nr   ra   rÒ  zLifecycle transport failed: ©r6   r7   )rä   r¥   Úopen_event_streamr�  r  r.  r‹  Ú_apply_lifecycle_eventr7   r  rj  ri  rŽ   r�   r4   r¦   )r{   Úreconnect_attemptsrq  r  rQ  r#  rn  s          r2   r‡  Ú'SyncThreadStream._run_lifecycle_watcherì  s2  € à�?‰?Ñ"ØØÐØ—,—,ðØŸ™×:Ñ:Ø×1Ñ1Ó3ó�ð 28Ô.Ø#Ÿ]œ]�EØ—|—|ÙØ×1Ñ1°%Ô8Ø×/Ñ/°Ö6ñ	 +ð
 —l‘l“n�Ø‘;ØØ" aÑ'Ð"Ø%×(NÑ(NÓNØ�Ið Oð —,—,“,øô" ó Ø" aÑ'Ð"Ø%×)OÑ)OÓOÝØŸ>™>�ØÑ'°·±·±Ø×'Ñ'Ü$Ø#,Ü".Ð1MÈcÈUÐ/SÓ"Tñôô ûðús+   £AC Á49C Â.C Ã
EÃ$EÃ>A	EÅEc                óx   • U R                   R                  SU R                   S3U R                  =(       d    SS9$ )z6Fetch the current thread state from the REST endpoint.z	/threads/z/stateN)r¢   )r©   rL   r  r¨   rz   s    r2   rè   ÚSyncThreadStream._fetch_state  s9   € à�z‰z�~‰~Ø˜Ÿ™Ð' vÐ.Ø—M‘M×) Tð ð 
ð 	
r1   c                óh   • UR                  S5      (       + =(       a    UR                  S5      (       + $ )zEReturn `True` if the thread state has no pending tasks or next nodes.rÊ   r?   )rL   )r{   rî   s     r2   r)  Ú#SyncThreadStream._state_is_terminal  s%   € à—9‘9˜VÓ$Ô$×?¨U¯Y©Y°wÓ-?Ô)?Ð?r1   c                óJ   • U R                   =(       a    U R                  (       + $ )zKReturn `True` if we can try the REST state before waiting on the lifecycle.)r
  r½   rz   s    r2   r(  Ú7SyncThreadStream._can_return_existing_state_immediately  s   € à×'Ñ'×>°·±Ô,>Ð>r1   c                óÀ   • U R                   c  [        S5      eU R                  (       d  U R                  (       d  [        S5      eU R                   R	                  5       $ )z“Block until lifecycle completion.

Raises:
    RuntimeError: stream not entered, or no run started and no explicit
        thread_id was provided.
rã   zmthread.output: no run has been started and no explicit thread_id was provided. Call thread.run.start() first.)ri  r¦   r½   r
  r‹   rz   s    r2   r*  Ú#SyncThreadStream._wait_for_run_done  sP   € ð �>‰>Ñ!ÜÐMÓNÐNØ�~�~ d×&>×&>Üð?óð ð �~‰~×$Ñ$Ó&Ð&r1   c                ó   • UR                  S5      nUS:X  Ga"  UR                  S5      =(       d    0 n[        U[        5      (       a  UR                  S5      OSn[        U[        5      (       a  UR                  S5      OSn[        U[        5      (       a¢  U[        U[        5      (       a  UR                  S5      OS[        U[        5      (       a  UR                  S5      =(       d    / O/ S	.nU R                  nU R
                  R                  U5        S
U l        U(       d  U R                  5         gggUS:X  GaM  UR                  S5      =(       d    0 n[        U[        5      (       a  UR                  S5      OSn[        U[        5      (       a  UR                  S5      OSnUS;   a  S
U l        gUS;   aÎ  SU l        / U l        U R                  n	U	b°  U	R                  5       (       dš  US:X  a{  [        U[        5      (       a  UR                  S5      OSn
[        U
(       a  SU
 3OS5      nU R                  U5        U R                  U5        U	R                  [        SUS95        gU	R                  [        SS95        ggggg)zRUpdate `interrupted` / `interrupts` / `_run_done` from a lifecycle or input event.rŽ  zinput.requestedr£   r^   Nr%   r&   r(   )r%   r&   r(   Tr<   r  )rO   Úrunning)rP   rQ   FrQ   r7   zRun errored: zRun erroredrÒ  r’  rP   )r6   )rL   rJ   rK   r$   rR   r\   r  r\  r½   ri  rŽ   r¦   r5  r6  r�   r4   )r{   r  rŽ  r£   r^   r%   ÚpayloadÚwas_interruptedÚphasern  Ú	error_msgr7   s               r2   r”  Ú'SyncThreadStream._apply_lifecycle_event/  s-  € à—‘˜8Ó$ˆØÐ&Ô&Ø—Y‘Y˜xÓ(×.¨BˆFÜ)3°F¼D×)AÑ)A�6—:‘:˜fÔ%ÀtˆDÜ7AÀ$Ì×7MÑ7M˜4Ÿ8™8 NÔ3ÐSWˆLÜ˜,¬×,Ñ,à$0Ü2<¸TÄ4×2HÑ2H˜TŸX™X gÔ.Èdä! &¬$×/Ñ/ð "(§¡¨KÓ!8×!>¸Bøàñ-�ð #'×"2Ñ"2�Ø—‘×&Ñ& wÔ/Ø#'�Ô ö 'Ø×'Ñ'Õ)ð 'ð% -ð( �{Ô"Ø—Y‘Y˜xÓ(×.¨BˆFÜ)3°F¼D×)AÑ)A�6—:‘:˜fÔ%ÀtˆDÜ)3°D¼$×)?Ñ)?�D—H‘H˜WÔ%ÀTˆEØÐ.Ó.Ø!%�•ØÐ1Ó1Ø#(�Ô Ø"$�”ØŸ>™>�ØÑ'°·±·±Ø Ó(ä1;¸DÄ$×1GÑ1G˜DŸH™H WÔ-ÈTð "ô !-Þ;D˜m¨I¨;Ñ7È-ó!˜ð ×9Ñ9¸%Ô@Ø×4Ñ4°UÔ;Ø ×+Ñ+¬LÀ	ÐQVÑ,WÕXà ×+Ñ+¬LÀÑ,LÕMð 1@Ð'ð	 2ð #r1   )r  r  r¥   r  r¾   r
  r¨   r©   r  r  r  r  r  r  ri  r½   r	  rä   r  r  rª   r‹  rR   r\   r:   r  r‰  rˆ  r  r†  r8   )r  r   r  r$   rª   r$   r¢   r±   r  r”   r  r–   r  zLiteral['sse', 'websocket']r‘   r’   )r‘   r°   )r"  r   r#  r   r$  r   r‘   r’   rñ   )r‘   úIterator[Event]r�   )r£   r   r‘   r   )r?  rT  r‘   r’   )rF  r   r‘   r’   )r‘   úqueue.Queue[Event | None])r  r   r‘   r’   rU  )rq  r4  r‘   r’   )rC   r'   rD   zlist[list[str]] | NonerE   z
int | Noner‘   r¦  )rC   r'   r‘   zIterator[tuple[str, Any]])rn  rÒ   r‘   rÒ   )
r†  úDecoder | Nonerˆ  r¨  rl  zlist[SyncToolCallHandle]rm  zlist[ChatModelStream]r‘   r’   )r£   r   r‘   r¦  )rŽ  r$   r£   rÑ   r‘   rÑ   r¯  )r‘   rÑ   )rî   rÑ   r‘   r–   r•   )r‘   r4   ))r*   r+   r,   r-   r.   r|   r  r%  rV  rà   r.  r!  rå   rê   rç   ræ   rë  r  r  r5  rm  rl  r6  r\  r-  rp  Ústaticmethodrf  rg  r_  r¼   r  r‹  r�  r‡  rè   r)  r(  r*  r”  r0   r)   r1   r2   r°   r°   4  s¦  † ñð -1Ø*.Ø#(Ø6;ñ)Hð ð)Hð ð	)Hð
 ð)Hð *ð)Hð (ð)Hð !ð)Hð 4ð)Hð 
õ)HôVô0ð óó ðð" ó-ó ð-ô$ô<>ô
Fô5ô<ô
)ô
1ô5ô-ô
,ô0ô(ô
-ð" .2Ø ñ/àð/ð +ð	/ð
 ð/ð 
õ/ô,oðb óó ðð)3à"ð)3ð "ð)3ð  8ð	)3ð
 %:ð)3ð 
ô)3ôV2ô*ô./ô)ôô"ôH
ô@ô?ô'÷ 1Nr1   )rC   r'   r(   r'   r‘   r   )rM   r   r‘   r'   )rV   r$   r‘   ztuple[str, str | None])r^   rÑ   r‘   z!tuple[SubgraphStatus, str | None])r(   r'   rd   r®  r‘   r–   )rd   r®  r‘   r   )r^   rÑ   r‘   rÒ   ru   )r^   rÑ   ro   rÒ   r‘   r$   )r$  r§  r(   r'   rØ   r°   r‘   r  )Jr.   Ú
__future__r   r1  ré   rv   Ú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   r   Ú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"   r4   rA   r/   rH   rN   r±  rZ   r_   re   rh   rl   rp   rr   r˜   r³   rÔ   ró   r	  r4  rX  rv  r„  r…  r‡  rß  rŠ  ró  r°   r)   r1   r2   Ú<module>r¶     sÆ  ðò
õ #ã Û Û ß -Ý !ß 0Ó 0å Lß 5å 3ß B÷÷ ñ ÷ Rß X÷ó ô�yô ð ÷'ð 'ó ð'ò
€ˆyó 
ðØðàðð ôôBð ÐHÑI€ô*ð
Ø
ðà&ôôXôô?ö
÷$ñ $÷:
ñ 
÷8RBñ RB÷j#:ñ #:÷L7:ñ 7:ðtQ8Ø$ðQ8àðQ8ð ðQ8ð ô	Q8÷hC&ñ C&÷LG:ñ G:÷TEñ E÷P:ñ :÷z=ñ =÷@Jñ J÷Z?,ñ ?,÷D!ñ !÷2 :ñ  :÷FlNò lNr1   