+
    lHàjPq  ã                  ó®  € R t ^ RIHt ^ RIt^ RIt^ RIt^ RIt^ RIt^ RIt^ RI	H
t
 ^ RIHtHtHtHtHtHtHt ^ RIHtHtHtHtHtHtHt ^ RIHtHt ]'       d   ^ RIHt ^ RI H!t! ]PD                  ! ]#4      t$^t%R	 R
 lt& ! R R]'4      t(R R lt)R R lt*R R lt+]
! RR7       ! R R4      4       t, ! R R]]4      t- ! R R4      t.].! 4       t/. ROt0R# )uw  Persistent CDP supervisor for browser dialog + frame detection.

One ``CDPSupervisor`` per Hermes ``task_id`` with a reachable CDP endpoint: one
persistent WebSocket, ``Page`` / ``Runtime`` / ``Target`` events on every attached
session (top page + auto-attached OOPIF / worker targets), pending dialogs + frame
tree exposed via a thread-safe snapshot. Not in the tool schema â€” output reaches the
agent via ``browser_snapshot`` / ``browser_dialog``. Dialog capture and frame tracking
are mixins (``browser_supervisor_dialogs`` / ``browser_supervisor_frames``).
Design spec: ``website/docs/developer-guide/browser-supervisor.md``.
)ÚannotationsN)Ú	dataclass)ÚAnyÚCallableÚDictÚListÚOptionalÚTupleÚTYPE_CHECKING)ÚDEFAULT_DIALOG_POLICYÚDEFAULT_DIALOG_TIMEOUT_SÚRECENT_DIALOGS_MAXÚ_VALID_POLICIESÚDialogRecordÚDialogSupervisionMixinÚPendingDialog)Ú	FrameInfoÚFrameTrackingMixin)ÚClientConnection)ÚCapturedCDPc               ó    € V ^8„  d   QhRRRR/# )é   ÚexcÚobjectÚreturnÚstr© )Úformats   "Ú=/home/ubuntu/.hermes/hermes-agent/tools/browser_supervisor.pyÚ__annotate__r   ,   s   € ÷ 
"ñ 
" ð 
"¨3ñ 
"ó    c                óV   €  ^ RI Hp V! \        V 4      4      #   \         d     R# i ; i)aJ  Redact CDP endpoint credentials from an exception's (or URL's) string form.
``websockets`` bakes the raw URL (``?token=`` / ``user:pass@``) into its exception
messages, so every egress point turning one into log/re-raise text MUST route through
here; falls back to a fixed sentinel if redaction itself raises (err toward masking).)Úredact_cdp_urlz<error redacted>)Úagent.redactr"   r   Ú	Exception)r   r"   s   & r   Ú_redact_cdp_error_textr%   ,   s+   € ð
"Ý/áœc #›hÓ'Ð'øÜô "Ú!ð"ús   ‚ ™(§(c                  ó   € ] tR t^9tRtRtR# )Ú_LoopUnavailablez>The supervisor loop refused new work (closed / shutting down).r   N)Ú__name__Ú
__module__Ú__qualname__Ú__firstlineno__Ú__doc__Ú__static_attributes__r   r    r   r'   r'   9   s   † ÝHr    r'   c               ó   € V ^8„  d   QhRR/# )r   ÚtimeoutÚfloatr   )r   s   "r   r   r   =   s   € ÷ 'ñ ' eñ 'r    c               ó`   € ^ RI Hp V! W4      pVf   \        R4      hVP                  VR7      # )zORun ``coro`` on the supervisor loop from a sync caller and wait for its result.)Úsafe_schedule_threadsafez#Browser supervisor loop unavailable©r/   )Úagent.async_utilsr2   r'   Úresult)ÚcoroÚloopr/   r2   Úfuts   &&$  r   Ú	_scheduler9   =   s1   € å:á
" 4Ó
.€CØ
‚{ÜÐDÓEÐEØ�:‰:˜gˆ:Ó&Ð&r    c               ó    € V ^8„  d   QhRRRR/# )r   Úerrorr   r   údict[str, Any]r   )r   s   "r   r   r   G   s   € ÷ )ñ )�ð )˜ñ )r    c                ó   € R RRV /# )ÚokFr;   r   )r;   s   &r   Ú_failr?   G   s   € Ø�%˜ %Ð(Ð(r    c               ó    € V ^8„  d   QhRRRR/# )r   r   ÚBaseExceptionr   r<   r   )r   s   "r   r   r   K   s   € ÷ 1ñ 1ˆmð 1 ñ 1r    c                óH   € \        \        V 4      P                   R V  24      # )ú: )r?   Útyper(   )r   s   &r   Ú_errrE   K   s#   € Ü”D˜“I×&Ñ&Ð' r¨#¨Ð/Ó0Ð0r    T)Úfrozenc                  ód   € ] tR t^Ot$ RtR]R&   R]R&   R]R&   R]R	&   R
]R&   R
]R&   R R ltRtR# )ÚSupervisorSnapshotz9Read-only snapshot of supervisor state for tool handlers.ztuple[PendingDialog, ...]Úpending_dialogsztuple[DialogRecord, ...]Úrecent_dialogsr<   Ú
frame_treeÚboolÚactiver   Úcdp_urlÚtask_idc               ó   € V ^8„  d   QhRR/# ©r   r   r<   r   )r   s   "r   r   ÚSupervisorSnapshot.__annotate__Z   s   € ÷ ñ ˜ñ r    c                ó  € RV P                    Uu. uF  qP                  4       NK  	  upRV P                  /pV P                  '       d-   V P                   Uu. uF  qP                  4       NK  	  upVR&   V# u upi u upi )z7Serialize for inclusion in ``browser_snapshot`` output.rI   rK   rJ   )rI   Úto_dictrK   rJ   )ÚselfÚdÚouts   &  r   rT   ÚSupervisorSnapshot.to_dictZ   ss   € à0È×H\ÒH\Ó2]ÑH\À1·9±9¶;ÑH\Ñ2]Ð_kÐmq×m|Ñm|Ð}ˆØ××ÐØ:>×:MÒ:MÓ$NÑ:M°Q§Y¡Y¦[Ñ:MÑ$NˆCÐ Ñ!Øˆ
ùò 3^ùâ$Ns   �A8ÁA=r   N)r(   r)   r*   r+   r,   Ú__annotations__rT   r-   r   r    r   rH   rH   O   s0   ‡ áCà.Ó.Ø,Ó,ØÓØƒLØƒLØƒL÷ñ r    rH   c                  ój  € ] tR t^bt$ RtR]R]/R R lltR1R R lltR2R R	 llt	R
 R lt
R R ltRRRRRR/R R lltRRRRRR/R R lltRRRR/R R lltR R ltR R  ltR! R" ltR# R$ ltR% R& ltR' R( ltR3R)RRR/R* R+ llltR, R- lt/ ]P0                  C]P0                  CtR.]R/&   R0tR# )4ÚCDPSupervisoraI  One supervisor per (task_id, cdp_url) pair. ``start()`` spawns a daemon thread
running its own asyncio loop, connects, attaches to the first page target, enables
domains and auto-attach. ``snapshot()`` / ``respond_to_dialog()`` / ``evaluate_runtime()``
are sync, thread-safe bridges onto that loop; all CDP I/O lives on the loop.Údialog_policyÚdialog_timeout_sc          
     ó,   € V ^8„  d   QhRRRRRRRRRR/# )	r   rO   r   rN   r\   r]   r0   r   ÚNoner   )r   s   "r   r   ÚCDPSupervisor.__annotate__h   s1   € ÷ ñ  ð ¨cð ÀSð Ø#(ðØHLñr    c               	óÊ  € V\         9  d    \        R V: R\        \         4       24      hWn        W n        W0n        \        V4      V n        \        P                  ! 4       V n
        / V n        . V n        / V n        RV n        RV n        RV n        \        P"                  ! 4       V n        RV n        RV n        ^V n        / V n        RV n        RV n        / V n        ^ V n        R# )zInvalid dialog_policy z; must be one of FN)r   Ú
ValueErrorÚsortedrO   rN   r\   r0   r]   Ú	threadingÚLockÚ_state_lockÚ_pending_dialogsÚ_recent_dialogsÚ_framesÚ_activeÚ_loopÚ_threadÚEventÚ_ready_eventÚ_start_errorÚ_stop_requestedÚ_next_call_idÚ_pending_callsÚ_wsÚ_page_session_idÚ_dialog_watchdogsÚ_dialog_seq)rU   rO   rN   r\   r]   s   &&&$$r   Ú__init__ÚCDPSupervisor.__init__h   sÖ   € à¤Ô/ÜÐ5°mÑ5FÐFWÔX^Ô_nÓXoÐWpÐqÓrÐrØŒØŒØ*ÔÜ %Ð&6Ó 7ˆÔô %Ÿ>š>Ó+ˆÔØ:<ˆÔØ35ˆÔØ-/ˆŒØˆŒà:>ˆŒ
Ø37ˆŒÜ%ŸOšOÓ-ˆÔØ59ˆÔØ$ˆÔàˆÔØ9;ˆÔØ/3ˆŒØ/3ˆÔàACˆÔØˆÖr    c               ó    € V ^8„  d   QhRRRR/# ©r   r/   r0   r   r_   r   )r   s   "r   r   r`   ˆ   s   € ÷ kñ k˜Uð k¨dñ kr    c                óŠ  € V P                   '       d#   V P                   P                  4       '       d   R# V P                  P                  4        RRuV n        V n        \        P                  ! V P                  RV P                   2RR7      V n         V P                   P                  4        V P                  P                  VR7      '       g=   V P                  4        \        RV R\        V P                  4      R	,           R
24      hV P                  ;pe)   V P                  4        \!        R\        V4       24      RhR# )zkLaunch the background loop and block until attachment completes; raises what attach failed with (redacted).NFzcdp-supervisor-T)ÚtargetÚnameÚdaemonr3   z%CDP supervisor did not attach within zs (cdp_url=:NéP   Nz...)z CDP supervisor failed to start: )rl   Úis_alivern   Úclearro   rp   rd   ÚThreadÚ_thread_mainrO   ÚstartÚwaitÚstopÚTimeoutErrorr%   rN   ÚRuntimeError)rU   r/   Úerrs   && r   r„   ÚCDPSupervisor.startˆ   s  € à�<�<ˆ<˜DŸL™L×1Ñ1×3Ò3ÙØ×Ñ×ÑÔ!Ø26¸Ð/ˆÔ˜4Ô/Ü ×'Ò'¨t×/@Ñ/@ÈÐY]×YeÑYeÐXfÐGgÐptÔuˆŒØ�‰×ÑÔØ× Ñ ×%Ñ%¨gÐ%×6Ò6Ø�I‰IŒKÜÐ!FÀwÀið P+Ü+AÀ$Ç,Á,Ó+OÐPSÕ+TÐ*UÐUYð [ó \ð \à×$Ñ$Ð$ˆCÒ1Ø�I‰IŒKô Ð!AÔBXÐY\ÓB]ÐA^Ð_Ó`ÐfjÐjñ	 2r    c               ó    € V ^8„  d   QhRRRR/# rz   r   )r   s   "r   r   r`   š   s   € ÷  ñ  ˜Eð  ¨Dñ  r    c                óŠ  € RV n         V P                  pVe^   VP                  4       '       dH   \        P                  ! \
        4      ;_uu_ 4        \        V P                  4       VRR7       RRR4       V P                  e   V P                  P                  VR7       V P                  R4       R#   + '       g   i     LM; i)z/Cancel the supervisor task and join the thread.TNg       @r3   F)rp   rk   Ú
is_runningÚ
contextlibÚsuppressr$   r9   Ú	_close_wsrl   ÚjoinÚ_set_active)rU   r/   r7   s   && r   r†   ÚCDPSupervisor.stopš   s†   € à#ˆÔØ�z‰zˆØÒ §¡× 1Ò 1ô ×$Ò$¤Y×/Õ/Ü˜$Ÿ.™.Ó*¨D¸#Õ>÷ 0à�<‰<Ò#Ø�L‰L×Ñ gÐÔ.Ø×Ñ˜Ö÷	 0×/ús   ÁB2Â2C	c               ó    € V ^8„  d   QhRRRR/# )r   ÚvaluerL   r   r_   r   )r   s   "r   r   r`   §   s   € ÷ !ñ ! ð !¨$ñ !r    c                	ót   € V P                   ;_uu_ 4        Wn        R R R 4       R #   + '       g   i     R # ; i©N)rf   rj   )rU   r•   s   &&r   r’   ÚCDPSupervisor._set_active§   s"   € Ø××ÓØ ŒL÷ ××Òús   •&¦7	c               ó   € V ^8„  d   QhRR/# )r   r   rH   r   )r   s   "r   r   r`   «   s   € ÷ ñ Ð,ñ r    c                óZ  € V P                   ;_uu_ 4        \        \        V P                  P	                  4       4      \        V P
                  \        ) R 4      V P                  4       V P                  V P                  V P                  R7      uuRRR4       #   + '       g   i     R# ; i)z.Return an immutable snapshot of current state.N)rI   rJ   rK   rM   rN   rO   )rf   rH   Útuplerg   Úvaluesrh   r   Ú_build_frame_tree_lockedrj   rN   rO   ©rU   s   &r   ÚsnapshotÚCDPSupervisor.snapshot«   su   € à××ÓÜ%Ü % d×&;Ñ&;×&BÑ&BÓ&DÓ EÜ$ T×%9Ñ%9Ô;MÐ:MÐ:NÐ%OÓPØ×8Ñ8Ó:Ø—|‘|¨T¯\©\À4Ç<Á<ô	÷ ××Óús   •A9BÂB*	Úprompt_textNÚ	dialog_idr/   ç      $@c          
     ó,   € V ^8„  d   QhRRRRRRRRRR	/# )
r   Úactionr   r¡   úOptional[str]r¢   r/   r0   r   r<   r   )r   s   "r   r   r`   µ   s2   € ÷ 8ñ 8¨ð 8¸]ð 8Ø%2ð8ØDIð8ØUcñ8r    c          
     ó  € VR9  d   \        RV: 24      # V P                  ;_uu_ 4        V P                  '       g   \        R4      uuRRR4       # \        V P                  P                  4       4      pV'       g   \        R4      uuRRR4       # V'       dQ   V P                  P                  V4      pVf1   \        RV: R\        V P                  4       R24      uuRRR4       # MU\        V4      ^8”  d=   \        \        V4       R	V Uu. uF  qwP                  NK  	  up 24      uuRRR4       # V^ ,          pRRR4       V P                  pVf   \        R
4      #  T P                  XVR8H  T;'       g    RR7      p	\        W˜VR7       RRRTP#                  4       /# u upi   + '       g   i     Ls; i  \         d   p
\        \        T
4      4      u Rp
?
# Rp
?
i\         d   p
\!        T
4      u Rp
?
# Rp
?
ii ; i)z Accept/dismiss a pending dialog (sync bridge onto the supervisor loop). Returns
``{"ok": True, "dialog"}`` or ``{"ok": False, "error"}`` for recoverable errors.Úacceptz*action must be 'accept' or 'dismiss', got úsupervisor is not activeNzno dialog is currently openz
dialog_id z not found (known: Ú)z1 pending dialogs; specify dialog_id. Candidates: úsupervisor loop is not runningÚ )r¨   r¡   r3   r>   TÚdialog>   r¨   Údismiss)r?   rf   rj   Úlistrg   rœ   Úgetrc   ÚlenÚidrk   Ú_handle_dialog_cdpr9   r'   r   r$   rE   rT   )rU   r¥   r¡   r¢   r/   Úpendingr­   rV   r7   r6   Úes   &&$$$      r   Úrespond_to_dialogÚCDPSupervisor.respond_to_dialogµ   sÆ  € ð Ð.Ô.ÜÐEÀfÁZÐPÓQÐQØ××ÓØ—<—<�<ÜÐ7Ó8÷ Òô ˜4×0Ñ0×7Ñ7Ó9Ó:ˆGßÜÐ:Ó;÷ Ò÷ Ø×.Ñ.×2Ñ2°9Ó=�Ø’>Ü  :¨i©]Ð:MÌfÐUY×UjÑUjÓNkÐMlÐlmÐ!nÓo÷ Òð "ä�W“ Ô!Ü¤ G£˜~Ð-^ÑnuÓ_vÑnuÐij×`dÔ`dÑnuÑ_vÐ^wÐxÓy÷ Òð ! ��÷ ð �z‰zˆØŠ<ÜÐ9Ó:Ð:ð	Ø×*Ñ*¨6¸6ÀXÑ;MÐ\g×\mÐ\mÐkmÐ*ÓnˆDÜ�d¨'Õ2ð
 �d˜H f§n¡nÓ&6Ð7Ð7ùò `w÷ ×ûô(  ô 	!Üœ˜Q›“=Õ ûÜô 	Ü˜“7�Nûð	úsx   «F+Á5F+ÂF+ÂAF+Ã*&F+ÄF&Ä$F+Ä7	F+Å$F> Å=F> Æ&F+Æ+F;	Æ>HÇ	G"ÇHÇ"HÇ/HÇ0
H Ç:HÈ HÚreturn_by_valueTÚawait_promisec          
     ó,   € V ^8„  d   QhRRRRRRRRRR	/# )
r   Ú
expressionr   r¸   rL   r¹   r/   r0   r   r<   r   )r   s   "r   r   r`   Õ   s9   € ÷ 5Iñ 5I¨3ð 5IÀDð 5IØ(,ð5IØ>Cð5IØO]ñ5Ir    c               ó¬  a aaaaa€ S P                   oSe   SP                  4       '       g   \        R4      # S P                  ;_uu_ 4        S P                  S P
                  upoRRR4       X'       g   \        R4      # S'       g   \        R4      # R VVVV VV3R llp V! V4      p\        T\        4      '       d   TP                  R	/ 4      M/ p
T
P                  R
4      pT'       dd   TP                  R4      ;'       g    RpTP                  R4      ;'       g    / P                  R4      p\        T'       d   T RT 24      # T4      # T
P                  R	/ 4      pTP                  RR4      pRT9   d   TR,          pM4TR8X  d   RpM*TP                  R4      ;'       g    TP                  R4      pRRR	TRT/#   + '       g   i     ELe; i  \         ds   pT'       d   R\        T4      P                  4       9   g   \        T4      u Rp?#  T! R4      p Rp?EL{  \         d   p	\        T	4      u Rp	?	u Rp?# Rp	?	ii ; iRp?ii ; i)a&  Evaluate ``expression`` in the page's Runtime context over the live WS.
Returns ``{"ok": True, "result", "result_type"}`` or ``{"ok": False, "error"}``.
``return_by_value=True`` JSON-serializes the result (DevTools-console
semantics); non-serializable objects come back as a description string.Nr«   r©   z'supervisor has no attached page sessionc               ó    € V ^8„  d   QhRRRR/# )r   Úby_valuerL   r   r<   r   )r   s   "r   r   Ú4CDPSupervisor.evaluate_runtime.<locals>.__annotate__å   s   € ÷ 	>ñ 	> ð 	>¨ñ 	>r    c                ól   <€ R SRV RSRR/pSP                  RVSSR7      p\        VSS^,           R7      # )r»   ÚreturnByValueÚawaitPromiseÚuserGestureTúRuntime.evaluate©Ú
session_idr/   r3   )Ú_cdpr9   )	r¾   Úparamsr6   r¹   r»   r7   rU   rÆ   r/   s	   &  €€€€€€r   Ú	_run_evalÚ1CDPSupervisor.evaluate_runtime.<locals>._run_evalå   sH   ø€ à" J°ÀØ$ m°]ÀDðJˆFà—9‘9Ð/°ÀJÐX_�9Ó`ˆDÜ˜T 4°¸1µÔ=Ð=r    zreference chain is too longFr5   ÚexceptionDetailsÚtextzJavaScript exceptionÚ	exceptionÚdescriptionrC   rD   Ú	undefinedr•   ÚunserializableValuer>   TÚresult_type)rk   r�   r?   rf   rj   rt   r$   r   ÚlowerrE   Ú
isinstanceÚdictr°   )rU   r»   r¸   r¹   r/   rM   rÉ   Úresponser   Úexc2Úresult_payloadÚexception_detailsÚexc_textrÎ   Ú
result_objrÑ   r•   r7   rÆ   s   ff$dd            @@r   Úevaluate_runtimeÚCDPSupervisor.evaluate_runtimeÕ   sý  ý€ ð �z‰zˆØŠ<˜tŸ™×0Ò0ÜÐ9Ó:Ð:Ø××ÓØ!%§¡¨t×/DÑ/DÐˆF�J÷ çÜÐ3Ó4Ð4ßÜÐBÓCÐC÷	>õ 	>ð	"Ù  Ó1ˆHô 8BÀ(ÌD×7QÒ7Q˜Ÿ™ h°Ô3ÐWYˆØ*×.Ñ.Ð/AÓBÐßØ(×,Ñ,¨VÓ4×NÐNÐ8NˆHØ,×0Ñ0°Ó=×CÐCÀ×HÑHÈÓWˆKÜ¿˜H˜: R¨ }Ð5ÓSÐSÈ(ÓSÐSà#×'Ñ'¨°"Ó5ˆ
Ø —n‘n V¨[Ó9ˆØ�jÔ Ø˜wÕ'‰EØ˜KÔ'Ø‰Eð —N‘N =Ó1×ZÐZ°Z·^±^ÐDYÓ5ZˆEØ�d˜H e¨]¸KÐHÐH÷Y ×Ðûô  ô 		"÷ $Ð(EÌÈSËÏÉÓIYÔ(YÜ˜C“yÕ ð"Ù$ UÓ+–øÜô "Ü˜D“z×!Ò!ûð"þð		"úsZ   ÁGÂ#G ÇG	ÇIÇ!0IÈIÈH&È&IÈ1
IÈ;IÈ<IÉ IÉIÉIÉIr¨   c               ó(   € V ^8„  d   QhRRRRRRRR/# )	r   Úoriginr   r¨   r¦   r/   r0   r   r<   r   )r   s   "r   r   r`     s*   € ÷ /ñ / ð /°ð /ÐPUð /Ðaoñ /r    c               ó  a aaaa€ S P                   pVe   VP                  4       '       g   \        R4      # R V V3R lloR VVVV V3R llp \        V! 4       VS^,           R7      #   \         d   p\        T4      u Rp?# Rp?ii ; i)aó  Re-attach the supervisor's page session to an open page target on ``origin``
(``scheme://host[:port]``). The initial attach picks the FIRST page target, but tools
that open their own tabs (browser_exec) put the login form somewhere else. With
``accept`` (a JS expression) the first same-origin tab where it evaluates truthy wins,
so a login and a checkout tab on one site resolve to the right one. Returns
``{"ok": True, "url"}`` or ``{"ok": False, "error"}``; on failure the previous session stays.Nr«   c               ó    € V ^8„  d   QhRRRR/# )r   Ú	target_idr   r   r   )r   s   "r   r   Ú.CDPSupervisor.focus_page.<locals>.__annotate__  s   € ÷ 	ñ 	 Sð 	¨Sñ 	r    c              “  óä   <"  € SP                  R RV RR/SR7      G Rj  x€L
 pVR,          R,          pSP                  VSR7      G Rj  x€L
  SP                  V4      G Rj  x€L
  V#  LJ L! L
5i)úTarget.attachToTargetÚtargetIdÚflattenTr3   Nr5   Ú	sessionId)rÇ   Ú_enable_page_domainsÚ_install_dialog_bridge)rá   ÚattachÚsidrU   r/   s   &  €€r   Ú_attachÚ)CDPSupervisor.focus_page.<locals>._attach  sw   øé € ØŸ9™9Ð%<¸zÈ9ÐV_ÐaeÐ>fÐpw˜9Óx×xˆFØ˜Õ" ;Õ/ˆCØ×+Ñ+¨C¸Ð+ÓA×AÐAØ×-Ñ-¨cÓ2×2Ð2ØˆJñ	 yáAÙ2ùs3   ƒA0ŸA* *A0Á
A,ÁA0Á#A.Á$A0Á,A0Á.A0c               ó   € V ^8„  d   QhRR/# rQ   r   )r   s   "r   r   râ     s   € ÷ 	Cñ 	C˜nñ 	Cr    c               “  ó  <"  € ^ RI Hp  SP                  RSR7      G Rj  x€L
 P                  R/ 4      P                  R. 4      p. pV FŠ  p\	        VP                  R4      ;'       g    R4      p VP                  R	4      R
8X  dM   VP                  R4      '       d4   S
'       d   V ! V4      S
8X  d   VP                  VR,          V34       K†  Kˆ  KŠ  KŒ  	  V F¿  w  rTS! V4      G Rj  x€L
 pS	'       dy   SP                  RRS	RR/VSR7      G Rj  x€L
 pVP                  R/ 4      P                  R/ 4      P                  R4      '       g!   SP                  RRV/SR7      G Rj  x€L
  K•  SP                  ;_uu_ 4        VSn	        RRR4       RRRV/u # 	  \        RS
;'       g    R 2S	'       d   V'       d   R,           4      # R,           4      #  EL·  \         d     EK   i ; i EL LÝ LŠ  + '       g   i     Lr; i5i)é    )Únormalize_originúTarget.getTargetsr3   Nr5   ÚtargetInfosÚurlr¬   rD   Úpagerå   rÄ   r»   rÁ   TrÅ   r•   zTarget.detachFromTargetrç   r>   zno open page on zany sitez with the expected form)zhttp://zhttps://)Úagent.vault_storerñ   rÇ   r°   r   Ú
startswithÚappendr$   rf   rt   r?   )rñ   ÚtargetsÚ
candidatesÚtrô   rá   rë   Úproberì   r¨   rÞ   rU   r/   s           €€€€€r   Ú_focusÚ(CDPSupervisor.focus_page.<locals>._focus  sþ  øé € Ý:Ø!ŸY™YÐ':ÀG˜YÓL×L×QÑQÐRZÐ\^Ó_×cÑcÐdqÐsuÓvˆGØˆJÛ�Ü˜!Ÿ%™% ›,×,Ð,¨"Ó-�ðà—u‘u˜V“}¨Ô.°3·>±>ÐBY×3ZÒ3Zß%+Ñ/?ÀÓ/DÈÔ/NØ"×)Ñ)¨1¨Z­=¸#Ð*>Ö?ñ 0Oñ 4[Ñ.ñ	 ó #-‘�	Ù# IÓ.×.�ßØ"&§)¡)Ð,>ÀÈvÐWfÐhlÐ@mØ7:ÀGð #,ó #M÷ M�Eà Ÿ9™9 X¨rÓ2×6Ñ6°xÀÓD×HÑHÈ×QÒQØ"Ÿi™iÐ(AÀKÐQTÐCUÐ_f˜iÓg×gÐgÙ Ø×%×%Ó%Ø,/�DÔ)÷ &à˜d E¨3Ð/Ò/ñ #-ô Ð+¨F×,@Ð,@°jÐ+AÐB×ci×nxÐF_õ  Bó  Cð  Cð  Aõ  Bó  Cð  Cò- Møô !ô Ûðúò /ñMñ hç%×%üs¦   ƒH G¡AHÁ)HÁ14GÂ&'GÃHÃ)G-Ã*HÃ6HÄG0Ä:HÅHÅ'G2Å(HÆG4Æ
 HÆ+HÆ7HÆ?HÇG*Ç%HÇ)G*Ç*HÇ0HÇ2HÇ4HÇ?Hr3   )rk   r�   r?   r9   r$   rE   )rU   rÞ   r¨   r/   r7   rý   r   rì   s   ffdd   @r   Ú
focus_pageÚCDPSupervisor.focus_page  su   ü€ ð �z‰zˆØŠ<˜tŸ™×0Ò0ÜÐ9Ó:Ð:÷	ñ 	÷	Cô 	Cð4	Ü™V›X t°W¸qµ[ÔAÐAøÜô 	Ü˜“9Õûð	ús   ÁA) Á)B	Á4
BÁ>B	ÂB	c               ó   € V ^8„  d   QhRR/# ©r   r   r_   r   )r   s   "r   r   r`   ?  s   € ÷ $ñ $˜dñ $r    c                óê  € \         P                  ! 4       pWn         \         P                  ! V4       VP	                  V P                  4       4       \        P                  ! \        4      ;_uu_ 4        \         P                  ! V4       Uu. uF  q3P                  4       '       d   K  VNK  	  ppV F  pVP!                  4        K  	  V'       d&   VP	                  \         P"                  ! VRR/ 4       RRR4       \        P                  ! \        4      ;_uu_ 4        VP%                  4        RRR4       V P'                  R4       R#   \         dD   pT P                  T4      '       g"   \        P                  RT P                  T4        Rp?ELDRp?ii ; iu upi   + '       g   i     L´; i  + '       g   i     LŒ; i  \        P                  ! \        4      ;_uu_ 4        \         P                  ! T4       Uu. uF  q3P                  4       '       d   K  TNK  	  Mu upi ppT F  pTP!                  4        K  	  T'       d&   TP	                  \         P"                  ! TRR/ 4       RRR4       M  + '       g   i     M; i\        P                  ! \        4      ;_uu_ 4        TP%                  4        RRR4       M  + '       g   i     M; iT P'                  R4       i ; i)z2Entry point for the supervisor's dedicated thread.zCDP supervisor %s crashed: %sNÚreturn_exceptionsTF)ÚasyncioÚnew_event_looprk   Úset_event_loopÚrun_until_completeÚ_runrA   Ú_fail_startÚloggerÚwarningrO   rŽ   r�   r$   Ú	all_tasksÚdoneÚcancelÚgatherÚcloser’   )rU   r7   rµ   rû   r´   s   &    r   rƒ   ÚCDPSupervisor._thread_main?  sì  € ä×%Ò%Ó'ˆØŒ
ð	$Ü×"Ò" 4Ô(Ø×#Ñ# D§I¡I£KÔ0ô ×$Ò$¤Y×/Õ/Ü&-×&7Ò&7¸Ô&=ÓNÑ&= ÇVÁVÇXŸ1˜1Ñ&=�ÐNÛ �AØ—H‘H–Jñ !çØ×+Ñ+¬G¯NªN¸GÐ,\ÐW[Ñ,\Ô]÷ 0ô ×$Ò$¤Y×/Õ/Ø—
‘
”÷ 0à×Ñ˜UÖ#øô ô 	QØ×#Ñ# A×&Ò&Ü—‘Ð>ÀÇÁÈaÔPÿùð	Qüò O÷ 0×/ú÷ 0×/ûô ×$Ò$¤Y×/Õ/Ü&-×&7Ò&7¸Ô&=ÓNÑ&= ÇVÁVÇXŸ1˜1Ò&=ùÒN�ÐNÛ �AØ—H‘H–Jñ !çØ×+Ñ+¬G¯NªN¸GÐ,\ÐW[Ñ,\Ô]÷ 0×/×/Ð/úô ×$Ò$¤Y×/Õ/Ø—
‘
”÷ 0×/×/Ð/úà×Ñ˜UÕ#ús§   �5E Á4F#ÂFÂ)FÂ/"F#Ã%F#Ä!F6ÅFÅ8FÆG	 ÆFÆG	 ÆF#Æ#F3	Æ6G	Ç	#K2Ç,I>	ÈH(È!H(È'(I>	É%I>	É5	K2É>JÊ	*K2Ê3K	Ë	K2ËKËK2c               ó    € V ^8„  d   QhRRRR/# )r   rµ   rA   r   rL   r   )r   s   "r   r   r`   V  s   € ÷ ñ ˜]ð ¨tñ r    c                óŠ   € V P                   P                  4       '       d   R# Wn        V P                   P                  4        R# )zNPropagate ``e`` to ``start()`` if we never got ready; True if it was consumed.FT)rn   Úis_setro   Úset)rU   rµ   s   &&r   r
  ÚCDPSupervisor._fail_startV  s5   € à×Ñ×#Ñ#×%Ò%ÙØÔØ×Ñ×ÑÔÙr    c               ó   € V ^8„  d   QhRR/# r  r   )r   s   "r   r   r`   ^  s   € ÷ !ñ ! ñ !r    c              ƒ  óò   "  € V P                   Ruqn         VeF   \        P                  ! \        4      ;_uu_ 4        VP	                  4       G Rj  x€L
  RRR4       R# R#  L  + '       g   i     R# ; i5i)z@Detach and close the current WebSocket, swallowing close errors.N)rs   rŽ   r�   r$   r  )rU   Úwss   & r   r�   ÚCDPSupervisor._close_ws^  sT   é € à—x‘x ˆˆŒHØŠ>Ü×$Ò$¤Y×/Õ/Ø—h‘h“j× Ð ÷ 0Ñ/ñ á ÷ 0×/Ð/üs.   ‚:A7¼A#ÁA!ÁA#ÁA7Á!A#Á#A4	Á.	A7c               ó$   € V ^8„  d   QhRRRRRR/# )r   ÚfailuresÚintrµ   rA   r   rL   r   )r   s   "r   r   r`   e  s!   € ÷ ñ °ð ¸ð È$ñ r    c                óú   € V\         8  d   R# \        P                  RV P                  V\	        V4      4       \
        P                  V P                  4      V J d    \
        P                  V P                  4       R# )aJ  True once ``failures`` consecutive post-attach reconnects failed: log ONE final line
and drop this supervisor from the registry so a dead endpoint (its Chrome exited with
the task) leaves neither a retrying thread nor a stale registry entry behind. A later
browser call for the task starts a fresh supervisor via ``get_or_start``.FzACDP supervisor %s: stopped after %s failed reconnect attempts: %sT)Ú"MAX_POST_ATTACH_RECONNECT_FAILURESr  r  rO   r%   ÚSUPERVISOR_REGISTRYr°   Ú_pop)rU   r  rµ   s   &&&r   Ú_reconnect_budget_spentÚ%CDPSupervisor._reconnect_budget_spente  s]   € ð
 Ô8Ô8ÙÜ�‰ÐZØ—|‘| XÔ/EÀaÓ/Hô	Jä×"Ñ" 4§<¡<Ó0°DÓ8Ü×$Ñ$ T§\¡\Ô2Ùr    c               ó   € V ^8„  d   QhRR/# r  r   )r   s   "r   r   r`   r  s   € ÷ D-ñ D-˜Dñ D-r    c              ƒ  óD  "  € ^ RRr2p^ RI p^ RIHp RR/V! V P                  4      CpV P                  '       EgŠ    \
        P                  ! VP                  ! V P                  3/ VB RR7      G Rj  x€L
 V n        \
        P&                  ! T P)                  4       R	R
7      p RT n        T P-                  4       G Rj  x€L
  T P/                  R4       \0        P0                  ! 4       p^ pRpT P2                  P5                  4        TG Rj  x€L
  T P/                  R4       TP9                  4       '       gU   TP;                  4        \<        P>                  ! \
        P@                  \        4      ;_uu_ 4        TG Rj  x€L
  RRR4       T PB                  PE                  4        F  p	T	P;                  4        K  	  T PB                  PG                  4        T PI                  4       G Rj  x€L
  T PJ                  PE                  4        F5  p
T
P9                  4       '       d   K  T
PM                  \O        R4      4       K7  	  T PJ                  PG                  4        T P                  '       d   R# \        PQ                  RT P                  T4       \
        P"                  ! T4      G Rj  x€L
  \%        T^,          R4      pEKœ  R#  ELT  \         d¼   pT P                  T4      '       d    Rp?R# T^,          pT P                  Y4      '       d    Rp?R# \        P                  RT P                  T\        \!        T4      4       \
        P"                  ! \%        TR4      4      G Rj  x€L 
  \%        T^,          R4      p Rp?EKb  Rp?ii ; i ELÕ ELŠ  \6         Ed÷   pT P                  T4      '       d   h T^,          pT P                  Y4      '       Edh    Rp?T P/                  R4       TP9                  4       '       gj   TP;                  4        \<        P>                  ! \
        P@                  \        4      ;_uu_ 4        TG Rj  x€L 
  RRR4       M  + '       g   i     M; iT PB                  PE                  4        F  p	T	P;                  4        K  	  T PB                  PG                  4        T PI                  4       G Rj  x€L 
  T PJ                  PE                  4        F5  p
T
P9                  4       '       d   K  T
PM                  \O        R4      4       K7  	  T PJ                  PG                  4        R# \        P                  RT P                  \0        P0                  ! 4       T,
          T\        \!        T4      4        Rp?EL…Rp?ii ; i EL  + '       g   i     EL&; i ELË  T P/                  R4       TP9                  4       '       gj   TP;                  4        \<        P>                  ! \
        P@                  \        4      ;_uu_ 4        TG Rj  x€L 
  RRR4       M  + '       g   i     M; iT PB                  PE                  4        F  p	T	P;                  4        K  	  T PB                  PG                  4        T PI                  4       G Rj  x€L 
  T PJ                  PE                  4        F5  p
T
P9                  4       '       d   K  T
PM                  \O        R4      4       K7  	  T PJ                  PG                  4        i ; i ELt5i)a-  Top-level reconnecting supervisor coroutine. Browserbase tears down the CDP
socket whenever a short-lived client (agent-browser's per-command CDP client)
disconnects, so on drop we reset per-session ids, re-attach, and keep going.
A failure before the first successful attach is fatal for ``start()``.g        g      à?N)Úloopback_connect_kwargsÚmax_sizer£   r3   z5CDP supervisor %s: connect failed (attempt %s/%s): %sz
cdp-reader)r}   TFz"CDP connection closed before replyzBCDP supervisor %s: session dropped after %.1fs (attempt %s/%s): %sz+CDP supervisor %s: reconnecting in %.1fs...i   ))Ú
websocketsÚagent.proxy_bypassr'  rN   rp   r  Úwait_forÚconnectrs   r$   r
  r#  r  r  rO   r   r%   ÚsleepÚminÚcreate_taskÚ
_read_looprt   Ú_attach_initial_pager’   Útimern   r  rA   r  r  rŽ   r�   ÚCancelledErrorru   rœ   r�   r�   rr   Úset_exceptionÚConnectionErrorÚdebug)rU   Úreconnect_failuresÚlast_success_atÚbackoffr)  r'  Úconnect_kwargsrµ   Úreader_taskÚhandler8   s   &          r   r	  ÚCDPSupervisor._runr  sA  é € ð
 89¸#¸s¨WÐÛÝ>Ø$Ð&6Ð`Ñ:QÐRV×R^ÑR^Ó:_Ð`ˆØ×&×&Ñ&ðÜ!(×!1Ò!1°*×2DÒ2DÀTÇ\Á\Ñ2dÐUcÑ2dÐnrÔ!s×s�”ô "×-Ò-¨d¯o©oÓ.?ÀlÔSˆKð$,ð )-�Ô%Ø×/Ñ/Ó1×1Ð1Ø× Ñ  Ô&Ü"&§)¢)£+�Ø%&Ð"Ø�Ø×!Ñ!×%Ñ%Ô'Ø!×!Ð!ð × Ñ  Ô'Ø"×'Ñ'×)Ò)Ø×&Ñ&Ô(Ü#×,Ò,¬W×-CÑ-CÄY×OÕOØ)×)Ð)÷ Pà"×4Ñ4×;Ñ;Ö=�FØ—M‘M–Oñ >à×&Ñ&×,Ñ,Ô.Ø—n‘nÓ&×&Ð&ð  ×.Ñ.×5Ñ5Ö7�CØŸ8™8Ÿ:œ:Ø×)Ñ)¬/Ð:^Ó*_Ö`ñ 8ð ×#Ñ#×)Ñ)Ô+à×#×#Ð#ÙÜ�L‰LÐFÈÏÉÐV]Ô^Ü—-’- Ó(×(Ð(Ü˜' A�+ tÓ,‹Gñw 'âsøÜô Ø×#Ñ# A×&Ò&ÝØ" aÕ'Ð"Ø×/Ñ/Ð0B×FÒFÝÜ—‘ÐVØ#Ÿ|™|Ð-?ÔAcÜ5°aÓ8ô:ô —m’m¤C¨°Ó$6Ó7×7Ñ7Ü˜g¨�k¨4Ó0�Þûðúò& 2ò "øÜ õ ^Ø×#Ñ# A×&Ò&ØØ" aÕ'Ð"Ø×/Ñ/Ð0B×FÓFÛð
 × Ñ  Ô'Ø"×'Ñ'×)Ò)Ø×&Ñ&Ô(Ü#×,Ò,¬W×-CÑ-CÄY×OÕOØ)×)Ñ)÷ P×O×OÐOúà"×4Ñ4×;Ñ;Ö=�FØ—M‘M–Oñ >à×&Ñ&×,Ñ,Ô.Ø—n‘nÓ&×&Ñ&ð  ×.Ñ.×5Ñ5Ö7�CØŸ8™8Ÿ:œ:Ø×)Ñ)¬/Ð:^Ó*_Ö`ñ 8ð ×#Ñ#×)Ñ)Ö+ô% —‘ÐcØ#Ÿ|™|¬T¯YªY«[¸?Õ-JÐL^ÜAÔCYÐZ[ÓC\÷^ò ^ûð^úò *÷ P×OÐOúò
 'øð × Ñ  Ô'Ø"×'Ñ'×)Ò)Ø×&Ñ&Ô(Ü#×,Ò,¬W×-CÑ-CÄY×OÕOØ)×)Ñ)÷ P×O×OÐOúà"×4Ñ4×;Ñ;Ö=�FØ—M‘M–Oñ >à×&Ñ&×,Ñ,Ô.Ø—n‘nÓ&×&Ñ&ð  ×.Ñ.×5Ñ5Ö7�CØŸ8™8Ÿ:œ:Ø×)Ñ)¬/Ð:^Ó*_Ö`ñ 8ð ×#Ñ#×)Ñ)Õ+úò
 )ùs”  ‚8\ ¼6K	 Á2KÁ3	K	 Á<&\ Â#N Â=NÂ>AN ÄNÄN ÄA(\ Å8V Å>VÅ?V ÆA&\ Ç)V4Ç*4\ È#A	\ É-<\ Ê)\Ê*\ ËK	 Ë	NËN
Ë+\ Ë1 N
Ì\ ÌAN
Í*M-Í+N
Î\ Î
NÎ\ ÎN ÎN ÎVÎ$9VÏV7 Ï!A(\ Ñ	QÑQÑQÑ	\ ÑQ.	Ñ)A&\ ÓSÓ5\ Ô
:\ ÕAVÖV7 ÖVÖV7 ÖV Ö V1	Ö+
\ Ö7A)\Ø X5	Ø&X)Ø'X5	Ø,	\Ø5YÙ A&\Ú&Z)Ú'5\Û!9\Ü\ c               ó   € V ^8„  d   QhRR/# r  r   )r   s   "r   r   r`   ¸  s   € ÷ 	/ñ 	/¨Dñ 	/r    c              ƒ  óè  "  € V P                  R4      G Rj  x€L
 P                  R/ 4      P                  R. 4      p\        R V 4       R4      pVf$   V P                  RRR/4      G Rj  x€L
 R,          pV P                  R	R
VR
,          RR/4      G Rj  x€L
 pVR,          R,          ;V n        pV P	                  VRR7      G Rj  x€L
  V P                  V4      G Rj  x€L
  R#  LÐ L LU L% L5i)zXFind (or create) a page target, attach flattened, enable domains, install dialog bridge.rò   Nr5   ró   c              3  óT   "  € T F  qP                  R 4      R8X  g   K  Vx € K   	  R# 5i)rD   rõ   N)r°   )Ú.0rû   s   & r   Ú	<genexpr>Ú5CDPSupervisor._attach_initial_page.<locals>.<genexpr>»  s   é € ÐJ¡w !·%±%¸³-À6Ñ2IŸAšA£wùs   ‚(ž
(zTarget.createTargetrô   zabout:blankrä   rå   ræ   Trç   r£   r3   )rÇ   r°   Únextrt   rè   ré   )rU   rù   Úpage_targetrê   rë   s   &    r   r1  Ú"CDPSupervisor._attach_initial_page¸  sæ   é € àŸ™Ð#6Ó7×7×<Ñ<¸XÀrÓJ×NÑNÈ}Ð^`ÓaˆÜÑJ¡wÓJÈDÓQˆØÒØ!%§¡Ð+@À5È-ÐBXÓ!Y×YÐ[cÕdˆKØ—y‘yÐ!8¸:À{ÐS]ÕG^Ð`iÐkoÐ:pÓq×qˆØ&,¨XÕ&6°{Õ&CÐCˆÔ Ø×'Ñ'¨°TÐ'Ó:×:Ð:Ø×)Ñ)¨#Ó.×.Ò.ñ 8ñ ZÙqá:Ù.ùsX   ‚C2—C(˜AC2Á*C*Á++C2ÂC,Â1C2ÃC.Ã	C2Ã!C0Ã"C2Ã*C2Ã,C2Ã.C2Ã0C2rÆ   c          
     ó,   € V ^8„  d   QhRRRRRRRRR	R
/# )r   Úmethodr   rÈ   zOptional[dict[str, Any]]rÆ   r¦   r/   zOptional[float]r   r<   r   )r   s   "r   r   r`   Ã  s3   € ÷ 3ñ 3 ð 3Ð.Fð 3Ø,ð3Ø>Mð3ØYgñ3r    c             ƒ  ó˜  "  € V P                   f   \        R4      hV P                  V P                  ^,           uqPn        RVRV/pTP                  RV3RV33 UUu/ uF  w  rxV'       g   K  WxbK  	  upp4       \        P
                  ! 4       P                  4       p	W�P                  V&   V P                   P                  \        P                  ! V4      4      G Rj  x€L
   \        P                  ! W”R7      G Rj  x€L
 V P                  P                  VR4       # u uppi  LF L(  T P                  P                  TR4       i ; i5i)z*Send a CDP command and await its response.Nz%supervisor WebSocket is not connectedr²   rH  rÈ   rç   r3   )rs   rˆ   rq   Úupdater  Úget_running_loopÚcreate_futurerr   ÚsendÚjsonÚdumpsr+  Úpop)
rU   rH  rÈ   rÆ   r/   Úcall_idÚpayloadÚkÚvr8   s
   &&&$$     r   rÇ   ÚCDPSupervisor._cdpÃ  s  é € ð �8‰8ÒÜÐFÓGÐGØ&*×&8Ñ&8¸$×:LÑ:LÈqÕ:PÐ#ˆÔ#Ø#'¨°(¸FÐ"CˆØ�‰¨8°VÐ*<¸{ÈJÐ>WÑ)XÔ^Ñ)X¡ Ô\]œ˜šÑ)XÒ^Ô_Ü%×6Ò6Ó8×FÑFÓHˆØ'*×Ñ˜GÑ$Ø�h‰h�m‰mœDŸJšJ wÓ/Ó0×0Ð0ð	3Ü ×)Ò)¨#Ô?×?à×Ñ×#Ñ# G¨TÕ2ùó _ñ 	1á?øà×Ñ×#Ñ# G¨TÕ2üsO   ‚AE
ÁD
Á-D
Á3A+E
ÃD%ÃE
Ã$D) Ã>D'Ã?D) Ä$E
Ä'D) Ä)EÅE
c               ó   € V ^8„  d   QhRR/# r  r   )r   s   "r   r   r`   Ó  s   € ÷ 8ñ 8 $ñ 8r    c           
   ƒ  óp  "  € V P                   f   Q h V P                     Rj  x€L
  pV P                  '       d    R#  \        P                  ! V4      pRT9   dŠ   T P                  P                  TR,          R4      pTe   TP                  4       '       d   K|  RT9   d1   TP                  \        RTR,           RTR,           24      4       K³  TP                  T4       KÆ  T P                  P                  TP                  R4      4      ;p'       g   Kú  T! YP                  R/ 4      TP                  R	4      4      pTf   EK)  TG Rj  x€L
  EK6   EL2  \         d    \
        P                  R4        EK]  i ; i L2ED^R#   \         d"   p\
        P                  R
T4        Rp?R# Rp?ii ; i5i)uW   Continuously dispatch incoming CDP frames (responses â†’ futures, events â†’ handlers).Nz&CDP supervisor: non-JSON frame droppedr²   r;   zCDP error on id=rC   rH  rÈ   rç   zCDP read loop exited: %s)rs   rp   rN  Úloadsr$   r  r6  rr   rP  r  r4  rˆ   Ú
set_resultÚ_EVENT_HANDLERSr°   )rU   ÚrawÚmsgr8   Úhandlerr5   rµ   s   &      r   r0  ÚCDPSupervisor._read_loopÓ  sn  é € à�x‰xÒ#Ð#Ð#ð	8Ø!ŸXšX÷ %ð %�cØ×'×'Ð'ÚðÜŸ*š* S›/�Cð ˜3”;Ø×-Ñ-×1Ñ1°#°dµ)¸TÓB�CØ’{ c§h¡h§j¢jÙ Ø #”~Ø×)Ñ)¬,Ð9IÈ#ÈdÍ)ÈÐTVÐWZÐ[bÕWcÐVdÐ7eÓ*fÖgàŸ™ sÖ+Ø $× 4Ñ 4× 8Ñ 8¸¿¹ÀÓ9JÓ KÐK�W×KÐKÙ$ T¯7©7°8¸RÓ+@À#Ç'Á'È+ÓBVÓW�FØÕ)Ø$Ÿ›ò'%øô
 !ô Ü—L‘LÐ!IÔJÛðúñ %ó' &øô( ô 	8Ü�L‰LÐ3°Q×7Ò7ûð	8üs—   ‚F6”F  F¤E¥F¨F ½F6Á EÁAF ÂA;F Ä)F Å	F ÅFÅF ÅFÅ E>Å9F Å=E>Å>F ÆF ÆF6ÆF3ÆF.Æ(F6Æ.F3Æ3F6zdict[str, Callable[..., Any]]rZ  )rj   rv   ru   ri   rk   rq   rt   rr   rg   rn   rh   ro   rf   rp   rl   rs   rN   r\   r]   rO   )ç      .@)g      @r—   )r(   r)   r*   r+   r,   r   r   rw   r„   r†   r’   rŸ   r¶   rÛ   rÿ   rƒ   r
  r�   r#  r	  r1  rÇ   r0  r   ÚEVENT_HANDLERSr   rZ  rY   r-   r   r    r   r[   r[   b   sð   ‡ ñTð
ÐK`ð Ø+C÷÷@k÷$ õ!õð8ÈTð 8Ø59ð8ØLP÷8ð@5IÈ4ð 5IØ/3ð5IØFJ÷5Iðn/Àð /ÐX\÷ /õf$õ.õ!õõD-õL	/ñ3Ø/3ð3ØPT÷3ð 3õ 8ð:6Ø
 ×
/Ñ
/ð6Ø3E×3TÑ3Tð6€OÐ2÷ r    r[   c                  ó’   € ] tR tRtRtR R ltR R ltR R ltR	R
/R R lltR]	R]
RR/R R lltR R ltR R ltR R ltRtR# )Ú_SupervisorRegistryiõ  ua   Process-global (task_id â†’ supervisor) map with idempotent start/stop (``SUPERVISOR_REGISTRY``).c               ó   € V ^8„  d   QhRR/# r  r   )r   s   "r   r   Ú _SupervisorRegistry.__annotate__ø  s   € ÷ 0ñ 0˜$ñ 0r    c                	óV   € \         P                  ! 4       V n        / V n        / V n        R # r—   )rd   re   Ú_lockÚ_by_taskÚ_home_by_taskrž   s   &r   rw   Ú_SupervisorRegistry.__init__ø  s   € Ü—^’^Ó%ˆŒ
Ø24ˆŒØ-/ˆÖr    c               ó    € V ^8„  d   QhRRRR/# ©r   rO   r   r   zOptional[CDPSupervisor]r   )r   s   "r   r   rd  ý  s   € ÷ .ñ .˜3ð .Ð#:ñ .r    c                	óž   € V P                   ;_uu_ 4        V P                  P                  V4      uuR R R 4       #   + '       g   i     R # ; ir—   )rf  rg  r°   ©rU   rO   s   &&r   r°   Ú_SupervisorRegistry.getý  s)   € Ø�Z�Z‹ZØ—=‘=×$Ñ$ WÓ-÷ �Z�Z‹Zús	   •;»A	c               ó    € V ^8„  d   QhRRRR/# rk  r   )r   s   "r   r   rd    s   € ÷ 4ñ 4˜Cð 4Ð$;ñ 4r    c                	óØ   € V P                   ;_uu_ 4        V P                  P                  VR 4       V P                  P                  VR 4      uuR R R 4       #   + '       g   i     R # ; ir—   )rf  rh  rP  rg  rm  s   &&r   r"  Ú_SupervisorRegistry._pop  sA   € Ø�Z�Z‹ZØ×Ñ×"Ñ" 7¨DÔ1Ø—=‘=×$Ñ$ W¨dÓ3÷ �Z�Z‹Zús   •8AÁA)	r/   r£   c               ó$   € V ^8„  d   QhRRRRRR/# )r   rO   r   r/   r0   r   r   r   )r   s   "r   r   rd    s!   € ÷ 7ñ 7˜sð 7°ð 7Àñ 7r    c               ó"   € ^ RI Hp V! WVR7      # )z¢Public CDP seam for trusted in-process plugins: a handle pinned to this task's
current connection and default page session (``tools.browser_supervisor_capture``).)Úcapturer3   )Ú tools.browser_supervisor_capturert  )rU   rO   r/   rt  s   &&$ r   rt  Ú_SupervisorRegistry.capture  s   € õ 	=á�t¨gÔ6Ð6r    r\   r]   Ústart_timeoutr_  c               ó0   € V ^8„  d   QhRRRRRRRRRRRR	/# )
r   rO   r   rN   r\   r]   r0   rw  r   r[   r   )r   s   "r   r   rd    s9   € ÷ ñ  Cð °#ð Èð Ø',ðØX]ðØivñr    c               ó†  € ^ RI Hp V! 4       pV P                  ;_uu_ 4        V P                  P	                  V4      pVe™   VP
                  VP                  r©V	RJ;'       d5    V	P                  4       ;'       d    V
RJ;'       d    V
P                  4       pVP                  V8X  d   V'       d   VuuRRR4       # V P                  P                  VR4       RRR4       Xe   VP                  4        \        WW4R7      pVP                  VR7       V P                  ;_uu_ 4        V P                  P	                  V4      pVe.   VP                  V8X  d   VP                  4        VuuRRR4       # WÀP                  V&   WpP                  V&   RRR4       V#   + '       g   i     LÊ; i  + '       g   i     T# ; i)z©Idempotently ensure a supervisor runs for ``(task_id, cdp_url)``; one bound to a
different ``cdp_url`` or unhealthy (dead thread / stopped loop) is stopped and replaced.)Úhermes_home_keyN)rO   rN   r\   r]   r3   )Úhermes_constantsrz  rf  rg  r°   rl   rk   r€   r�   rN   rP  r†   r[   r„   rh  )rU   rO   rN   r\   r]   rw  rz  ÚhomeÚexistingÚthreadr7   ÚhealthyÚ
supervisorÚalreadys   &&&$$$        r   Úget_or_startÚ _SupervisorRegistry.get_or_start  sf  € õ 	5ÙÓ ˆØ�Z�Z‹ZØ—}‘}×(Ñ(¨Ó1ˆHØÒ#Ø'×/Ñ/°·±˜Ø ¨Ð,×mÐm°·±Ó1B×mÐmÀtÐSWÐGW×mÐmÐ\`×\kÑ\kÓ\m�Ø×#Ñ# wÔ.·7Ø#÷ ŠZð —‘×!Ñ! '¨4Ô0÷ ð ÒØ�M‰MŒOä"¨7Ø1>ôcˆ
à×Ñ ÐÔ/Ø�Z�Z‹Zà—m‘m×'Ñ'¨Ó0ˆGØÒ" w§¡¸'Ô'AØ—‘Ô!Ø÷ ŠZð &0�M‰M˜'Ñ"Ø*.×Ñ˜wÑ'÷ ð Ð÷- �Zú÷ ŽZð Ðús7   ¢AFÁ<FÂ)FÂ2FÂ>FÄ)AF/Å6F/ÆF,	Æ/G 	c               ó    € V ^8„  d   QhRRRR/# )r   rO   r   r   r_   r   )r   s   "r   r   rd  +  s   € ÷ ñ ˜Cð  Dñ r    c                	óT   € V P                  V4      pVe   VP                  4        R # R # r—   )r"  r†   )rU   rO   r€  s   && r   r†   Ú_SupervisorRegistry.stop+  s%   € Ø—Y‘Y˜wÓ'ˆ
ØÒ!Ø�O‰OÖñ "r    c               ó    € V ^8„  d   QhRRRR/# )r   Úhome_keyr   r   r_   r   )r   s   "r   r   rd  0  s   € ÷ ñ  #ð ¨$ñ r    c                ó  € V P                   ;_uu_ 4        V P                  P                  4        UUu. uF  w  r#W18X  g   K  VNK  	  pppRRR4       X F  pV P                  V4       K  	  R# u uppi   + '       g   i     L2; i)z^Stop the supervisors one profile home started (``/browser connect`` on a multiplexed gateway).N)rf  rh  Úitemsr†   )rU   rˆ  Útaskr|  ÚtasksrO   s   &&    r   Ú	stop_homeÚ_SupervisorRegistry.stop_home0  sb   € à�Z�Z‹ZØ,0×,>Ñ,>×,DÑ,DÔ,FÔ[Ñ,F™j˜dÈ$ÑJZ—T�TÑ,FˆEÑ[÷ ãˆGØ�I‰I�gÖó ùó \÷ �Zús"   •A5³
A/
ÁA/
ÁA5Á/A5Á5B	c               ó   € V ^8„  d   QhRR/# r  r   )r   s   "r   r   rd  7  s   € ÷ ñ ˜$ñ r    c                óF  € V P                   ;_uu_ 4        \        V P                  P                  4       4      pV P                  P	                  4        V P
                  P	                  4        RRR4       X F  pVP                  4        K  	  R#   + '       g   i     L+; i)z<Stop every running supervisor. For shutdown / test teardown.N)rf  r¯   rg  rœ   r�   rh  r†   )rU   rŠ  r€  s   &  r   Ústop_allÚ_SupervisorRegistry.stop_all7  sg   € à�Z�Z‹ZÜ˜Ÿ™×-Ñ-Ó/Ó0ˆEØ�M‰M×ÑÔ!Ø×Ñ×$Ñ$Ô&÷ ó  ˆJØ�O‰OÖó  ÷	 �Zús   •ABÂB 	)rg  rh  rf  N)r(   r)   r*   r+   r,   rw   r°   r"  rt  r   r   r‚  r†   r�  r‘  r-   r   r    r   rb  rb  õ  sQ   † Ùkõ0õ
.õ4ð
7¸÷ 7ðÐOdð Ø/GðØ`d÷õ<õ
÷ñ r    rb  )r!  r[   rH   rb  )1r,   Ú
__future__r   r  rŽ   rN  Úloggingrd   r2  Údataclassesr   Útypingr   r   r   r   r   r	   r
   Ú tools.browser_supervisor_dialogsr   r   r   r   r   r   r   Útools.browser_supervisor_framesr   r   Úwebsockets.asyncio.clientr   ru  r   Ú	getLoggerr(   r  r   r%   rˆ   r'   r9   r?   rE   rH   r[   rb  r!  Ú__all__r   r    r   Ú<module>rœ     sØ   ðñ	õ #ã Û Û Û Û Û Ý !ß L× LÑ L÷÷ ñ ÷ J÷ Ý:å<à	×	Ò	˜8Ó	$€ð &'Ð "õ
"ôI�|ô Iõ'õ)õ1ñ �$Ô÷ð ó ðô$PÐ*Ð,>ô P÷fIñ IñX *Ó+Ð ò `‚r    