§
    þ·Ájÿ…  ã            	      óH  — U d dl mZ d dlZd dlZd dlZd dlmZmZ d dlm	Z	m
Z
 d dlmZmZ d dlmZmZ d dlmZ d dlmZmZmZmZmZ d d	lmZmZmZ d d
lmZmZ d dlm Z  d dl!m"Z" d dl#m$Z$m%Z% d dl&m'Z'm(Z(m)Z) d dl*m+Z+m,Z, d dl-m.Z/ d dl0m1Z1m2Z2m3Z3m4Z4m5Z5 d dl6m7Z7 d dl8m9Z9m:Z:m;Z;m<Z< d dl=m>Z> d dl?m@Z@ d dlAmBZB d dlCmDZD d dlEmFZF  ejG        d¦  «        ZH e"ejI         J                    d¦  «        ¬¦  «        ZK eLejI         J                    dd¦  «        ¦  «        ZM e ejI         J                    dd¦  «        ¦  «        ZN e'ejI         J                    d d!¦  «        ¦  «        ZOejP         Q                    ejP         R                    eS¦  «        d"d#¦  «        ZT e%¦   «         ZU e>ejI         J                    d$d%¦  «        ¦  «        ZV eD¦   «         ZWd& e@eVeUeW¬'¦  «        iZXejI         J                    d(d)¦  «        d*k    r eBeVeW¬'¦  «        eXd+<   d·d.„ZYe	 G d/„ d0¦  «        ¦   «         ZZ G d1„ d2e¦  «        Z[ G d3„ d4e¦  «        Z\ G d5„ d6e¦  «        Z] G d7„ d8e¦  «        Z^i Z_d9e`d:<   d¸d?„Zad@„ Zb e+ e,¦   «         dA„ dB„ eaebdC„ ¦  «        ZcdD„ Zd e2ejI         J                    dEdF¦  «        ¦  «        Ze e1 e3¦   «          e4¦   «         eedG„ eaebed¦  «        ZfdHdHdIœdJ„ZgdK„ ZhdL„ ZidM„ Zjd¹dN„ZkdºdO„ZldP„ ZmdQ„ Zned»dT„¦   «         Zo edUdVeo¬W¦  «        Zpep q                    e9¦  «        d¼dZ„¦   «         Zrd½d]„Zsep J                    d^¦  «        d_„ ¦   «         Ztep u                    d`¦  «        d¾dc„¦   «         Zvep J                    dd¦  «        de„ ¦   «         Zwep u                    dddf¬g¦  «        d¿dj„¦   «         Zxep y                    dkdl¬g¦  «        dÀdn„¦   «         Zzep J                    do¦  «        dp„ ¦   «         Z{ep J                    dq¦  «        dÀdr„¦   «         Z|ep J                    ds¦  «        dÁdu„¦   «         Z}ep u                    dv¦  «        dÁdw„¦   «         Z~ep u                    dxdy¬g¦  «        dÂd{„¦   «         Zep J                    d|¦  «        dÁd}„¦   «         Z€ep u                    d|¦  «        dÃd„¦   «         Z�ep J                    d€¦  «        dÄd�„¦   «         Z‚ep J                    d‚dƒ¬„¦  «        dÅd†„¦   «         Zƒep J                    d‡dƒ¬„¦  «        dÆd‰„¦   «         Z„ep J                    dŠdƒ¬„¦  «        dÆd‹„¦   «         Z…ep J                    dŒ¦  «        dÄd�„¦   «         Z†ep J                    dŽ¦  «        dÇd�„¦   «         Z‡ep J                    d‘¦  «        dÄd’„¦   «         Zˆ	 dÈdÉd•„Z‰	 dÈdÊd–„ZŠdËd™„Z‹dš„ ZŒdÌd›„Z�i ZŽdœ„ Z�ep u                    d�dƒ¬„¦  «         edH¬ž¦  «        fdÍd „¦   «         Z�ep u                    d¡¦  «        dÎd¤„¦   «         Z‘ep u                    d¥¦  «        dÏd§„¦   «         Z’ep u                    d¨¦  «        dÐdª„¦   «         Z“ G d«„ d¬e¦  «        Z” G d­„ d®e¦  «        Z•ep u                    d¯¦  «        dÑd°„¦   «         Z–ep u                    d±¦  «        dÒd²„¦   «         Z—ep ˜                    d³¦  «        dÓd¶„¦   «         Z™dS )Ôé    )ÚannotationsN)ÚasynccontextmanagerÚsuppress)Ú	dataclassÚfield)ÚdatetimeÚtimezone)ÚAnyÚLiteral)Úuuid4)ÚFastAPIÚHeaderÚHTTPExceptionÚ	WebSocketÚWebSocketDisconnect)ÚFileResponseÚRedirectResponseÚJSONResponse)Ú	BaseModelÚField)ÚDeviceCredentialStore)ÚSystemCollector)ÚPiSessionEventÚPiSessionRegistry)ÚTargetStoreÚnormalize_targetÚsplit_target)ÚVoiceManagerÚconfigured_stt)Útrace)ÚSpeechManagerÚSpeechPreferencesÚconfigured_ttsÚHaihubSummaryÚMODES)Úquick_catalog)ÚControlErrorÚInputÚProjectÚSettings)ÚProjectRegistry)Ú	PiAdapter)ÚCodexAdapter)ÚApprovalRegistry)ÚPiApprovalServerzuvicorn.error.device_gatewayÚGATEWAY_SERVER_NAME)ÚhostnameÚGATEWAY_SNAPSHOT_INTERVALÚ2ÚDEVICE_CREDENTIALS_FILEz*~/.config/esp32-device-gateway/device.jsonÚGATEWAY_STATE_FILEz+~/.config/esp32-device-gateway/targets.jsonÚstaticz
admin.htmlÚGATEWAY_PROJECTS_FILEz,~/.config/esp32-device-gateway/projects.jsonÚpi)Ú	approvalsÚGATEWAY_CODEX_ENABLEDÚ0Ú1ÚcodexÚreturnr   c                 ó>   — t          j        t          j        ¦  «        S ©N)r   Únowr	   Úutc© ó    ú`/home/lighthouse/esp32-dev/.cache/speech-downlink-diagnostics-0.5.1/server/device_gateway/app.pyÚutc_nowrF   8   s   € ÝŒ<�œÑ%Ô%Ð%rD   c                  ó`  — e Zd ZU ded<   ded<   ded<   ded<    ed„ ¬¦  «        Zded	<   d
Zded<    ee¬¦  «        Zded<   dZ	ded<    ee
j        d¬¦  «        Zded<    edd¬¦  «        Zded<   dZded<   dZded<    ee¬¦  «        Zded<    ee
j        d¬¦  «        Zded<   d#d"„ZdS )$ÚDeviceÚstrÚ	device_idÚboardÚfirmwarezWebSocket | NoneÚ	websocketc                 ó(   — t          ¦   «         j        S r@   )r   ÚhexrC   rD   rE   ú<lambda>zDevice.<lambda>B   s   € µu±w´w´{€ rD   )Údefault_factoryÚconnection_idTÚboolÚonliner   Ú	last_seenNzdict[str, Any] | NoneÚ
last_eventF)rQ   Úreprzasyncio.LockÚsettings_lock)ÚdefaultrW   zasyncio.Task | NoneÚsettings_taskz
str | NoneÚsettings_idÚ Úlast_agent_statezset[str]ÚcapabilitiesÚ	send_lockr>   údict[str, Any]c                óš   — | j         | j        | j        | j        t	          | j        ¦  «        | j                             ¦   «         | j        dœS )N)rJ   rK   rL   rT   r^   rU   rV   )	rJ   rK   rL   rT   Úsortedr^   rU   Ú	isoformatrV   )Úselfs    rE   ÚpubliczDevice.publicM   sI   € àœØ”ZØœØ”kÝ" 4Ô#4Ñ5Ô5Øœ×1Ò1Ñ3Ô3Øœ/ð
ð 
ð 	
rD   ©r>   r`   )Ú__name__Ú
__module__Ú__qualname__Ú__annotations__r   rR   rT   rF   rU   rV   ÚasyncioÚLockrX   rZ   r[   r]   Úsetr^   r_   re   rC   rD   rE   rH   rH   <   sX  € € € € € € à€N€N�NØ€J€J�JØ€M€M�MØÐÐÑØ˜Ð/BÐ/BÐCÑCÔC€MÐCÐCÐCÑCØ€FÐÐÐÑØ˜%°Ð8Ñ8Ô8€IÐ8Ð8Ð8Ñ8Ø(,€JÐ,Ð,Ð,Ñ,Ø"' %¸¼È5Ð"QÑ"QÔ"Q€MÐQÐQÐQÑQØ).¨°tÀ%Ð)HÑ)HÔ)H€MÐHÐHÐHÑHØ"€KÐ"Ð"Ð"Ñ"ØÐÐÐÐÑØ"˜U°3Ð7Ñ7Ô7€LÐ7Ð7Ð7Ñ7Ø#˜e°G´LÀuÐMÑMÔM€IÐMÐMÐMÑMð	
ð 	
ð 	
ð 	
ð 	
ð 	
rD   rH   c                  ó   — e Zd ZU ded<   dS )ÚApprovalDecisionzLiteral['approve', 'reject']ÚdecisionN©rg   rh   ri   rj   rC   rD   rE   ro   ro   Y   s   € € € € € € Ø*Ð*Ð*Ñ*Ð*Ð*rD   ro   c                  óX   — e Zd ZU  edd¬¦  «        Zded<    edd¬¦  «        Zded<   dS )	ÚDisplayMessageé   éP   ©Ú
min_lengthÚ
max_lengthrI   Útitleiô  ÚbodyN)rg   rh   ri   r   ry   rj   rz   rC   rD   rE   rs   rs   ]   sR   € € € € € € Ø� !°Ð3Ñ3Ô3€EÐ3Ð3Ð3Ñ3Ø� ¨sÐ3Ñ3Ô3€DÐ3Ð3Ð3Ñ3Ð3Ð3rD   rs   c                  ó2   — e Zd ZU  ed¬¦  «        Zded<   dS )ÚTargetSelectionz;^(server|(?:agent:(?:pi|codex)|pi):[A-Za-z0-9._:-]{1,160})$)ÚpatternrI   ÚtargetN©rg   rh   ri   r   r~   rj   rC   rD   rE   r|   r|   b   s1   € € € € € € Ø�%Ð ^Ð_Ñ_Ô_€FÐ_Ð_Ð_Ñ_Ð_Ð_rD   r|   c                  ó   — e Zd ZU ded<   dS )ÚNotificationTestzLiteral['done', 'failed']ÚkindNrq   rC   rD   rE   r�   r�   f   s   € € € € € € Ø#Ð#Ð#Ñ#Ð#Ð#rD   r�   zdict[str, Device]ÚdevicesÚdeviceÚpayloadr`   ÚNonec              ‹  óv   K  — | j         r| j        €t          d¦  «        ‚t          j        | |fi |¤Žƒ d {V —† d S )Núdevice is offline)rT   rM   ÚRuntimeErrorÚspeech_traceÚsend)r„   r…   Útrace_fieldss      rE   Úsend_to_devicer�   m   sZ   è è € ØŒ=ð 0˜FÔ,Ð4ÝÐ.Ñ/Ô/Ð/Ý
Ô
˜F GÐ
<Ð
<¨|Ð
<Ð
<Ð<Ð<Ð<Ð<Ð<Ð<Ð<Ð<Ð<rD   c                ód   — t                                | j        ¦  «        | u o| j        o| j        d uS r@   )rƒ   ÚgetrJ   rT   rM   )r„   s    rE   Úcurrent_devicer�   t   s1   € Ý�;Š;�vÔ'Ñ(Ô(¨FÐ2Ðe°v´}ÐeÈÔIYÐaeÐIeÐerD   c                ó6   — t                                | ¦  «        S r@   ©Útarget_storer�   ©Údids    rE   rP   rP   x   s   € µL×4DÒ4DÀSÑ4IÔ4I€ rD   c                ó    — t          | ¦  «        S r@   )Úadapter_for©Úagents    rE   rP   rP   x   s   € ÕYdÐejÑYkÔYk€ rD   c                 óN   — t          t                               ¦   «         ¦  «        S r@   )rS   r9   Úlist_pendingrC   rD   rE   rP   rP   y   s   € ­Dµ×1GÒ1GÑ1IÔ1IÑ,JÔ,J€ rD   c                óÆ   — t           j                             | j        ¦  «        }t	          t
                               ¦   «         ¦  «        pt	          |o|j        dv ¦  «        S )N)Ú	RECORDINGÚTRANSCRIBINGÚAWAITING_CONFIRMATIONÚSENDING)ÚvoicesÚrequestsr�   rR   rS   r9   r›   Ústate)r„   Úvoices     rE   Úspeech_blockedr¥   |   sd   € ÝŒO×Ò Ô 4Ñ5Ô5€EÝ•	×&Ò&Ñ(Ô(Ñ)Ô)ð  N­T°%ð  3M¸E¼Kð  LMð  =Mñ  .Nô  .Nð  NrD   ÚGATEWAY_SPEECH_FILEz*~/.config/esp32-device-gateway/speech.jsonc                ó6   — t                                | ¦  «        S r@   r’   r”   s    rE   rP   rP   ƒ   s   € •× Ò  Ñ%Ô%€ rD   r\   ©ÚnameÚlatest_activityc          
     ó˜   — t          t                               ¦   «         ¦  «        D ]"}t                               || |||||¦  «         Œ#d S r@   )Úlistrƒ   ÚvaluesÚspeechesÚterminal)r™   Ú
session_idr£   Ú
final_textr©   rª   r„   s          rE   Úon_agent_terminalr²   †   sT   € Ý•w—~’~Ñ'Ô'Ñ(Ô(ð _ð _ˆÝ×Ò˜& %¨°U¸JÈÈoÑ^Ô^Ð^Ð^ð_ð _rD   c                ó(  — t                                ¦   «         rdt          t                               ¦   «         ¦  «        D ]=}t
                               |¦  «         t                               |¦  «         d |_        Œ>|  	                    ¦   «          d S r@   )
r9   r›   r¬   rƒ   r­   r®   Úcancelr¡   r[   rm   )Úchangedr„   s     rE   Úapprovals_changedr¶   ‹   sw   € Ý×ÒÑÔð &Ý�7Ÿ>š>Ñ+Ô+Ñ,Ô,ð 	&ð 	&ˆFÝ�OŠO˜FÑ#Ô#Ð#Ý�MŠM˜&Ñ!Ô!Ð!Ø!%ˆFÔÐØ‡K‚K�M„M€M€M€MrD   c              ƒ  ó   K  — |d         dk    r'| j         |                     d¦  «        k    rd | _         d S | j        4 ƒd {V —† t          | |¦  «        ƒ d {V —† d d d ¦  «        ƒd {V —† d S # 1 ƒd {V —†swxY w Y   d S )NÚtypeÚsettings_cancelÚ
request_id)r[   r�   rX   Ú_device_settings)r„   Úevents     rE   Údevice_settingsr½   ”   s%  è è € ØˆV„}Ð)Ò)Ð)ØÔ §¢¨<Ñ!8Ô!8Ò8Ð8Èt¸&Ô:LØˆØÔ#ð .ð .ð .ð .ð .ð .ð .ð .Ý˜v uÑ-Ô-Ð-Ð-Ð-Ð-Ð-Ð-Ð-ð.ð .ð .ñ .ô .ð .ð .ð .ð .ð .ð .ð .ð .ð .ð .ð .ð .ð .ð .ð .ð .ð .ð .ð .øøøð .ð .ð .ð .ð .ð .s   ÁA-Á-
A7Á:A7c              ƒ  óê  ‡ ‡‡K  — |                      d¦  «        Št          ‰t          ¦  «        rdt          ‰¦  «        cxk    rdk    sn d S |d         dk    r‰ j        ‰k    rd ‰ _        d S t
                                ‰ j        ¦  «        Št          ‰¦  «        }|st          ‰ d‰ddœ¦  «        ƒ d {V —† d S t           
                    ¦   «         st          ‰ ¦  «        sd S |d         d	k    r‰‰ _        n&‰ j        ‰k    s|                      d
¦  «        ‰k    rd S ˆ ˆˆfd„}	 |\  }}t          |¦  «        }|                     |¦  «        ƒ d {V —†} |¦   «         sd S |d         dk    rE|                     |t          j        |                      di ¦  «        ¦  «        |¬¦  «        ƒ d {V —†}n|                     |¦  «        ƒ d {V —†} |¦   «         sd S |                     t&                                |j        ¦  «        ¦  «        ƒ d {V —†}	t+          |d„ t-          |	d„ d¬¦  «        D ¦   «         ¦  «        } |¦   «         rMt          ‰ t/          d|d         dk    rdnd‰‰|j        dœ|¤Ž¦  «        ƒ d {V —† |d         dk    rd ‰ _        d S d S d S # t2          $ rQ}
 |¦   «         r<t          ‰ d‰t          |
t4          ¦  «        r|
j        nddœ¦  «        ƒ d {V —† Y d }
~
d S Y d }
~
d S d }
~
ww xY w)Nrº   rt   é@   r¸   r¹   Úsettings_errorzNO AGENT SELECTED©r¸   rº   ÚmessageÚsettings_getr~   c                 ó²   •— t          ‰ ¦  «        oG‰ j        ‰k    o<t                               ‰ j        ¦  «        ‰k    ot
                               ¦   «          S r@   )r�   r[   r“   r�   rJ   r9   r›   )r„   Úridr~   s   €€€rE   Úvalidz_device_settings.<locals>.valid¯   st   ø€ Ý˜fÑ%Ô%ð  V¨&Ô*<ÀÒ*Cð  VÍ×HXÒHXÐY_ÔYiÑHjÔHjÐntÒHtð  Võ  ~G÷  ~Tò  ~Tñ  ~Vô  ~Vð  zVð  	VrD   Úsettings_applyÚsettings)Ústill_validc                ó*   — g | ]}|j         ¯	|j         ‘ŒS rC   )Úmodel)Ú.0Úss     rE   ú
<listcomp>z$_device_settings.<locals>.<listcomp>½   s8   € ð  ,Að  ,Að  ,A¸ÐxyÔxð  ,A¨A¬Gð  ,Að  ,Að  ,ArD   c                ó   — | j         S r@   )Ú
updated_at)rÍ   s    rE   rP   z"_device_settings.<locals>.<lambda>½   s
   € ÐYZÔYe€ rD   T)ÚkeyÚreverseÚsettings_updatedÚsettings_state)r¸   rº   r~   r©   zUPDATE FAILEDrC   )r�   Ú
isinstancerI   Úlenr[   r“   rJ   r   r�   r9   r›   r�   r—   Úget_sessionÚupdate_settingsr*   Úmodel_validateÚget_settingsÚlist_sessionsÚproject_registryÚ
project_idr&   rb   Údictr©   Ú	Exceptionr'   Údetail)r„   r¼   ÚparsedrÆ   r™   ÚsidÚadapterÚsessionrÈ   ÚrecentÚexcrÅ   r~   s   `          @@rE   r»   r»   œ   s‰  øøøè è € Ø
�)Š)�LÑ
!Ô
!€CÝ�c�3ÑÔð  q­C°©H¬HÐ':Ð':Ò':Ð':¸Ò':Ð':Ð':Ð':ØˆØˆV„}Ð)Ò)Ð)ØÔ Ò$Ð$Ø!%ˆFÔØˆÝ×Ò˜fÔ.Ñ/Ô/€FÝ˜&Ñ!Ô!€FØð Ý˜VÐ-=È3ÐYlÐ%mÐ%mÑnÔnÐnÐnÐnÐnÐnÐnÐnØˆÝ×ÒÑÔð ¥~°fÑ'=Ô'=ð ØˆØˆV„}˜Ò&Ð&Ø ˆÔÐØ	Ô	˜sÒ	"Ð	" e§i¢i°Ñ&9Ô&9¸VÒ&CÐ&CØˆðVð Vð Vð Vð Vð Vð Vð]Ø‰
ˆˆsÝ˜eÑ$Ô$ˆØ×+Ò+¨CÑ0Ô0Ð0Ð0Ð0Ð0Ð0Ð0ˆØˆu‰wŒwÐ˜˜Ø�Œ=Ð,Ò,Ð,à$×4Ò4°S½(Ô:QÐRW×R[ÒR[Ð\fÐhjÑRkÔRkÑ:lÔ:lÐzÐ4ñ  Aô  Að  Að  Að  Að  Að  Að  AˆHˆHà$×1Ò1°#Ñ6Ô6Ð6Ð6Ð6Ð6Ð6Ð6ˆHØˆu‰wŒwÐ˜˜Ø×,Ò,Õ-=×-AÒ-AÀ'ÔBTÑ-UÔ-UÑVÔVÐVÐVÐVÐVÐVÐVˆÝ  ð  ,Að  ,A½VÀFÐPeÐPeÐosÐ=tÑ=tÔ=tð  ,Añ  ,Aô  ,Añ  Bô  BˆØˆ5‰7Œ7ð 	JÝ  ­ð *NÈÈvÌÐXhÒIhÐIhÐ3EÐ3EÐn~Ø v°G´Lð*Nð *NØDLð*Nð *Nñ Oô Oð Oð Oð Oð Oð Oð Oð Oà�VŒ}Ð.Ò.Ð.ÀT°Ô0BÐ0BÐ0Bð	Jð 	Jð /Ð.øÝð ]ð ]ð ]Øˆ5‰7Œ7ð 	]Ý  Ð1AÈsÝ(2°3½Ñ(EÔ(EÐZ˜#œ*˜*È?ð*\ð *\ñ ]ô ]ð ]ð ]ð ]ð ]ð ]ð ]ð ]ð ]ð ]ð ]ð ]ð ]ð ]ð	]ð 	]ð 	]ð 	]ð 	]ð 	]øøøøð]øøøs'   Ä&9J Å!A6J ÇB8J Ê
K2Ê!A K-Ë-K2c              ƒ  óx  K  — t          t                               ¦   «         ¦  «        D �]}|j        r|j        €Œ	 t          || ¦  «        ƒ d {V —† Œ*# t          $ rÚ t                               |dd¬¦  «         t                               |dd¬¦  «         d |_
        |j        rMt          t          ¦  «        5  |j                             d¬¦  «        ƒ d {V —† d d d ¦  «         n# 1 swxY w Y   d|_        d |_        t          ¦   «         |_        t                               d|j        ¦  «         Y �Œw xY wd S )NFT©ÚnotifyÚforgetéó  ©Úcodez4device %s disconnected while pushing server_snapshot)r¬   rƒ   r­   rT   rM   r�   rß   r®   r´   r¡   r[   r   ÚcloserF   rU   ÚloggerÚwarningrJ   )r…   r„   s     rE   Úbroadcast_server_snapshotrñ   È   s~  è è € Ý•w—~’~Ñ'Ô'Ñ(Ô(ð eñ eˆØŒ}ð 	 Ô 0Ð 8Øð	eÝ  ¨Ñ1Ô1Ð1Ð1Ð1Ð1Ð1Ð1Ð1Ð1øÝð 		eð 		eð 		eÝ�OŠO˜F¨5¸ˆOÑ>Ô>Ð>Ý�MŠM˜&¨°tˆMÑ<Ô<Ð<Ø!%ˆFÔØÔð RÝ�iÑ(Ô(ÐQÐQ°Ô0@×0FÒ0FÈDÐ0FÑ0QÔ0QÐ*QÐ*QÐ*QÐ*QÐ*QÐ*QÐ*QÐQÐQÐQÑQÔQÐQÐQÐQÐQÐQÐQøøøÐQÐQÐQÐQØ!ˆFŒMØ#ˆFÔÝ&™yœyˆFÔÝ�NŠNÐQÐSYÔScÑdÔdÐdÐdÑdð		eøøøðeð es7   ¼AÁA&D7Â9"C'ÃD7Ã'C+Ã+D7Ã.C+Ã/AD7Ä6D7c               ƒ  óð   K  — 	 t                                ¦   «         } t          |                      ¦   «         ¦  «        ƒ d {V —† t	          ¦   «         ƒ d {V —† t          j        t          ¦  «        ƒ d {V —† Œtr@   )Úsystem_collectorÚcollectrñ   Ú
model_dumpÚpush_agent_targetsrk   ÚsleepÚsnapshot_interval_seconds©Úsnapshots    rE   Úmonitor_systemrû   Ú   sŽ   è è € ð7Ý#×+Ò+Ñ-Ô-ˆÝ'¨×(;Ò(;Ñ(=Ô(=Ñ>Ô>Ð>Ð>Ð>Ð>Ð>Ð>Ð>Ý Ñ"Ô"Ð"Ð"Ð"Ð"Ð"Ð"Ð"ÝŒmÕ5Ñ6Ô6Ð6Ð6Ð6Ð6Ð6Ð6Ð6ð	7rD   c            	   ƒ  óž  K  — t          t                               ¦   «         ¦  «        D �]Z} | j        }| j        r| j        s!t          j                             |d ¦  «         Œ9	 t          j         	                    |¦  «        }t           	                    |¦  «        }|rP|�|j
        dk    rCt          | d||r|j
        nddœ¦  «        ƒ d {V —† t          j                             |d ¦  «         |t          j        vr³t                               ¦   «         }|r˜|d         }t                               | ¦  «         t                               | ¦  «         d | _        |j        t          j        |<   t%          j        t          | t                               |¦  «        ¦  «        d¦  «        ƒ d {V —† �Œˆ# t*          $ rÇ t          j                             |d ¦  «         t                               | dd¬	¦  «         t                               | dd¬	¦  «         d | _        d| _        | j        rMt-          t*          ¦  «        5  | j                             d
¬¦  «        ƒ d {V —† d d d ¦  «         n# 1 swxY w Y   d | _        Y �ŒXw xY wt          t0          j                             ¦   «         ¦  «        D ]}t5          |j        ¦  «        ƒ d {V —† Œd S )NÚPENDINGÚapproval_cancelledÚ	CANCELLED)r¸   Úapproval_idr£   r   é   FTrè   rë   rì   )r¬   rƒ   r­   rR   rT   rM   r9   ÚpresentationsÚpopr�   r£   r�   r›   r®   r´   r¡   r[   r   rk   Úwait_forÚwirerß   r   rî   Úpi_sessionsÚsessionsÚpush_selected_pi_sessionr°   )r„   Ú
connectionÚ
current_idÚcurrentÚpendingÚapprovalrä   s          rE   Úsynchronize_approvalsr  â   s7  è è € õ •w—~’~Ñ'Ô'Ñ(Ô(ð $ñ $ˆØÔ)ˆ
ØŒ}ð 	 FÔ$4ð 	ÝÔ#×'Ò'¨
°DÑ9Ô9Ð9Øð	$Ý"Ô0×4Ò4°ZÑ@Ô@ˆJÝ—m’m JÑ/Ô/ˆGØð >˜w˜°'´-À9Ò2LÐ2LÝ$ VÐ6JÐ[eØ.5ÐF˜Wœ]˜]¸;ð.Hð .Hñ Iô Ið Ið Ið Ið Ið Ið Ið IåÔ'×+Ò+¨J¸Ñ=Ô=Ð=Ø¥Ô!8Ð8Ð8Ý#×0Ò0Ñ2Ô2�Øð `Ø& qœz�HÝ—O’O FÑ+Ô+Ð+Ý—M’M &Ñ)Ô)Ð)Ø)-�FÔ&Ø:BÔ:N•IÔ+¨JÑ7Ý!Ô*­>¸&Å)Ç.Â.ÐQYÑBZÔBZÑ+[Ô+[Ð]^Ñ_Ô_Ð_Ð_Ð_Ð_Ð_Ð_Ð_ùøÝð 		$ð 		$ð 		$ÝÔ#×'Ò'¨
°DÑ9Ô9Ð9Ý�OŠO˜F¨5¸ˆOÑ>Ô>Ð>Ý�MŠM˜&¨°tˆMÑ<Ô<Ð<Ø!%ˆFÔØ!ˆFŒMØÔð <Ý�iÑ(Ô(ð <ð <Ø Ô*×0Ò0°dÐ0Ñ;Ô;Ð;Ð;Ð;Ð;Ð;Ð;Ð;ð<ð <ð <ñ <ô <ð <ð <ð <ð <ð <ð <øøøð <ð <ð <ð <à#ˆFÔÐÑð		$øøøõ �Ô,×3Ò3Ñ5Ô5Ñ6Ô6ð ;ð ;ˆÝ& wÔ'9Ñ:Ô:Ð:Ð:Ð:Ð:Ð:Ð:Ð:Ð:ð;ð ;s8   Á#EF1Æ1BJÈ>"I,É JÉ,I0É0JÉ3I0É4
JÊJc              ƒ  óŽ   K  — 	 |                       ¦   «         ƒ d {V —† |                      ¦   «          t          ¦   «         ƒ d {V —† ŒCr@   )ÚwaitÚclearr  ©rµ   s    rE   Úapproval_deliveryr  
  s[   è è € ð&Ø�lŠl‰nŒnÐÐÐÐÐÐÐØ�Š‰ŒˆÝ#Ñ%Ô%Ð%Ð%Ð%Ð%Ð%Ð%Ð%ð&rD   Ú_r   c           	    ó.  ‡K  — t          j        ¦   «         Šˆfd„t          _        dt          v r.t
          t          d         _        t          t          d         _        t          t          t          ¦  «        }|                     ¦   «         ƒ d {V —† t          j        t          ‰¦  «        d¬¦  «        }t          j        t          ¦   «         d¬¦  «        }	 d W V — t                               ¦   «          t                                ¦   «         ƒ d {V —† t"                               ¦   «         ƒ d {V —† |                     ¦   «         ƒ d {V —† t          j        d„ t                               ¦   «         D ¦   «         Ž ƒ d {V —† t)          ¦   «         ƒ d {V —† d t          _        ||fD ]O}|                     ¦   «          t-          t           j        ¦  «        5  |ƒ d {V —† d d d ¦  «         n# 1 swxY w Y   ŒPd S # t                               ¦   «          t                                ¦   «         ƒ d {V —† t"                               ¦   «         ƒ d {V —† |                     ¦   «         ƒ d {V —† t          j        d„ t                               ¦   «         D ¦   «         Ž ƒ d {V —† t)          ¦   «         ƒ d {V —† d t          _        ||fD ]O}|                     ¦   «          t-          t           j        ¦  «        5  |ƒ d {V —† d d d ¦  «         n# 1 swxY w Y   ŒPw xY w)Nc                 ó"   •— t          ‰ ¦  «        S r@   )r¶   r  s   €rE   rP   zlifespan.<locals>.<lambda>  s   ø€ Õ"3°GÑ"<Ô"<€ rD   r=   zapproval-delivery)r©   zsystem-monitorc              3  ó>   K  — | ]}|                      ¦   «         V — Œd S r@   )rî   )rÌ   rã   s     rE   ú	<genexpr>zlifespan.<locals>.<genexpr>#  s*   è è € ÐPÐP°7˜wŸ}š}™œÐPÐPÐPÐPÐPÐPrD   )rk   ÚEventr9   Ú	on_changeÚadaptersÚqueue_codex_activityÚon_activityr²   Úon_terminalr/   rÜ   ÚstartÚcreate_taskr  rû   rî   r®   r¡   Úgatherr­   r  r´   r   ÚCancelledError)r  Úapproval_serverÚdelivery_taskÚmonitor_taskÚtaskrµ   s        @rE   Úlifespanr'    s¶  øè è € åŒm‰oŒo€GØ<Ð<Ð<Ð<…IÔØ•(ÐÐÝ(<��ÔÔ%Ý(9��ÔÔ%Ý&¥yÕ2BÑCÔC€OØ
×
Ò
Ñ
!Ô
!Ð!Ð!Ð!Ð!Ð!Ð!Ð!ÝÔ'Õ(9¸'Ñ(BÔ(BÐI\Ð]Ñ]Ô]€MÝÔ&¥~Ñ'7Ô'7Ð>NÐOÑOÔO€LðØˆˆˆˆå�ŠÑÔÐÝ�nŠnÑÔÐÐÐÐÐÐÐÝ�lŠl‰nŒnÐÐÐÐÐÐÐØ×#Ò#Ñ%Ô%Ð%Ð%Ð%Ð%Ð%Ð%Ð%ÝŒnÐPÐP½h¿oºoÑ>OÔ>OÐPÑPÔPÐQÐQÐQÐQÐQÐQÐQÐQÝ#Ñ%Ô%Ð%Ð%Ð%Ð%Ð%Ð%Ð%Ø"�	ÔØ! =Ð1ð 	ð 	ˆDØ�KŠK‰MŒMˆMÝ�'Ô0Ñ1Ô1ð ð Ø�
�
�
�
�
�
�
ðð ð ñ ô ð ð ð ð ð ð øøøð ð ð ð øð	ð 	øõ 	�ŠÑÔÐÝ�nŠnÑÔÐÐÐÐÐÐÐÝ�lŠl‰nŒnÐÐÐÐÐÐÐØ×#Ò#Ñ%Ô%Ð%Ð%Ð%Ð%Ð%Ð%Ð%ÝŒnÐPÐP½h¿oºoÑ>OÔ>OÐPÑPÔPÐQÐQÐQÐQÐQÐQÐQÐQÝ#Ñ%Ô%Ð%Ð%Ð%Ð%Ð%Ð%Ð%Ø"�	ÔØ! =Ð1ð 	ð 	ˆDØ�KŠK‰MŒMˆMÝ�'Ô0Ñ1Ô1ð ð Ø�
�
�
�
�
�
�
ðð ð ñ ô ð ð ð ð ð ð øøøð ð ð ð øð	øøøsC   ÃG8 Ç	G*Ç*G.	Ç1G.	Ç8C:LË2	L	Ë;LÌLÌLÌLÌLzDevice Lab Gatewayú0.5.0)ry   Úversionr'  ræ   r'   c              ƒ  ó@   K  — t          |j        d|j        i¬¦  «        S )Nrà   )Ústatus_codeÚcontent)r   Ústatusrà   )Úrequestræ   s     rE   Úcontrol_error_handlerr/  /  s"   è è € å C¤J¸À3Ä:Ð8NÐOÑOÔOÐOrD   r™   rI   c                óN   — | t           vrt          dd¦  «        ‚t           |          S )Nzagent adapter not enabledé”  )r  r'   r˜   s    rE   r—   r—   4  s(   € Ø•HÐÐÝÐ6¸Ñ<Ô<Ð<Ý�EŒ?ÐrD   z/api/approvalsc               ƒ  óL   K  — d„ t                                ¦   «         D ¦   «         S )Nc                ó:   — g | ]}|                      d ¬¦  «        ‘ŒS )Újson)Úmode)rõ   )rÌ   r  s     rE   rÎ   z"list_approvals.<locals>.<listcomp><  s)   € ÐVÐVÐV°ˆH×Ò VÐÑ,Ô,ÐVÐVÐVrD   )r9   r›   rC   rD   rE   Úlist_approvalsr6  :  s&   è è € àVÐV½Y×=SÒ=SÑ=UÔ=UÐVÑVÔVÐVrD   z%/api/approvals/{approval_id}/decisionr   Úvaluec              ƒ  ó®   K  — t                                | |j        ¦  «        st          dd¬¦  «        ‚d| t                                | ¦  «        j        dœS )Né™  z'approval is missing or already resolved©r+  rà   T)Úacceptedr   r£   )r9   Úresolverp   r   r�   r£   )r   r7  s     rE   Údecide_approvalr=  ?  sU   è è € å×Ò˜[¨%¬.Ñ9Ô9ð _Ý¨Ð4]Ð^Ñ^Ô^Ð^Ø¨[Å9Ç=Â=ÐQ\ÑC]ÔC]ÔCcÐdÐdÐdrD   z/api/projectsc               ƒ  ó8   K  — t                                ¦   «         S r@   )rÜ   r¬   rC   rD   rE   Úlist_projectsr?  F  s   è è € å× Ò Ñ"Ô"Ð"rD   éÉ   ©r+  Úprojectr)   c              ƒ  ó:   K  — t                                | ¦  «        S r@   )rÜ   Úadd)rB  s    rE   Úadd_projectrE  K  s   è è € å×Ò Ñ(Ô(Ð(rD   z/api/projects/{project_id}éÌ   rÝ   c              ƒ  ó>   K  — t                                | ¦  «         d S r@   )rÜ   Údelete)rÝ   s    rE   Údelete_projectrI  P  s    è è € å×Ò˜JÑ'Ô'Ð'Ð'Ð'rD   z/api/agentsc               ƒ  ó(   K  — d„ t           D ¦   «         S )Nc                ó   — g | ]	}|g d ¢dœ‘Œ
S ))rÛ   Úresume_sessionÚ
send_inputrÚ   Úlist_modelsrØ   )r™   r^   rC   )rÌ   r©   s     rE   rÎ   zlist_agents.<locals>.<listcomp>W  sM   € ð  gð  gð  gð  VZ�dð  -Pð  -Pð  -Pð  Qð  Qð  gð  gð  grD   )r  rC   rD   rE   Úlist_agentsrO  U  s1   è è € ð gð  gõ  ^fð  gñ  gô  gð  grD   z#/api/projects/{project_id}/sessionsc              ƒ  ó�  ‡K  — t                                | ¦  «        Šg i }}t          j        ˆfd„t                               ¦   «         D ¦   «         ddiŽƒ d {V —†}t          t          |¦  «        D ]Q\  }}t          |t          ¦  «        r"t          |t          ¦  «        r|j
        nd||<   Œ<|                     |¦  «         ŒR||dœS )Nc              3  óB   •K  — | ]}|                      ‰¦  «        V — Œd S r@   )rÛ   )rÌ   rã   rB  s     €rE   r  z#project_sessions.<locals>.<genexpr>^  s1   øè è € Ð$eÐ$eÈ W×%:Ò%:¸7Ñ%CÔ%CÐ$eÐ$eÐ$eÐ$eÐ$eÐ$erD   Úreturn_exceptionsTzagent catalog unavailable)r  Úerrors)rÜ   r�   rk   r!  r  r­   ÚziprÕ   rß   r'   rà   Úextend)rÝ   r  rS  Úresultsr©   ÚresultrB  s         @rE   Úproject_sessionsrX  Z  sß   øè è € å×"Ò" :Ñ.Ô.€GØ˜2ˆf€HÝ”NÐ$eÐ$eÐ$eÐ$eÕS[×SbÒSbÑSdÔSdÐ$eÑ$eÔ$eÐ~Ðy}Ð~Ð~Ð~Ð~Ð~Ð~Ð~Ð~€GÝ�H gÑ.Ô.ð $ð $‰ˆˆfÝ�f�iÑ(Ô(ð 	$Ý,6°v½|Ñ,LÔ,LÐm˜6œ=˜=ÐRmˆF�4‰LˆLà�OŠO˜FÑ#Ô#Ð#Ð#Ø ¨FÐ3Ð3Ð3rD   z)/api/agents/{agent}/sessions/{session_id}r°   c              ƒ  óV   K  — t          | ¦  «                             |¦  «        ƒ d {V —†S r@   )r—   r×   ©r™   r°   s     rE   Úget_agent_sessionr[  g  s4   è è € å˜UÑ#Ô#×/Ò/°
Ñ;Ô;Ð;Ð;Ð;Ð;Ð;Ð;Ð;rD   z0/api/agents/{agent}/sessions/{session_id}/resumec              ƒ  ód   K  — t          | ¦  «                             |¦  «        ƒ d {V —†}d| ||dœS )NT)r;  r™   r°   Úresumed)r—   rL  )r™   r°   r]  s      rE   Úresume_agent_sessionr^  l  sF   è è € å Ñ&Ô&×5Ò5°jÑAÔAÐAÐAÐAÐAÐAÐA€GØ u¸JÐSZÐ[Ð[Ð[rD   z//api/agents/{agent}/sessions/{session_id}/inputéÊ   r(   c              ƒ  ób   K  — t          | ¦  «                             ||j        ¦  «        ƒ d {V —†S r@   )r—   rM  Útext©r™   r°   r7  s      rE   Úagent_inputrc  r  s8   è è € å˜UÑ#Ô#×.Ò.¨z¸5¼:ÑFÔFÐFÐFÐFÐFÐFÐFÐFrD   z2/api/agents/{agent}/sessions/{session_id}/settingsc              ƒ  óV   K  — t          | ¦  «                             |¦  «        ƒ d {V —†S r@   )r—   rÚ   rZ  s     rE   rÚ   rÚ   w  s4   è è € å˜UÑ#Ô#×0Ò0°Ñ<Ô<Ð<Ð<Ð<Ð<Ð<Ð<Ð<rD   r*   c              ƒ  óX   K  — t          | ¦  «                             ||¦  «        ƒ d {V —†S r@   )r—   rØ   rb  s      rE   rØ   rØ   |  s6   è è € å˜UÑ#Ô#×3Ò3°JÀÑFÔFÐFÐFÐFÐFÐFÐFÐFrD   z/healthc               ƒ  ón   K  — ddt          d„ t                               ¦   «         D ¦   «         ¦  «        dœS )NÚokr(  c              3  ó$   K  — | ]}|j         V — Œd S r@   )rT   )rÌ   Úds     rE   r  zhealth.<locals>.<genexpr>ƒ  s%   è è € ÐMqÐMqÐ[\ÈaÌhÐMqÐMqÐMqÐMqÐMqÐMqrD   )r-  Úcontrol_versionÚonline_devices)Úsumrƒ   r­   rC   rD   rE   Úhealthrm  �  s:   è è € à¨wÍ#ÐMqÐMqÕ`g×`nÒ`nÑ`pÔ`pÐMqÑMqÔMqÑJqÔJqÐrÐrÐrrD   ú/F)Úinclude_in_schemar   c               ƒ  ó(   K  — t          dd¬¦  «        S )Nú/admini3  rA  )r   rC   rD   rE   Úrootrr  †  s   è è € å˜H°#Ð6Ñ6Ô6Ð6rD   rq  r   c               ƒ  ó2   K  — t          t          d¬¦  «        S )Nz	text/html©Ú
media_type)r   Úadmin_page_pathrC   rD   rE   Ú
admin_pagerw  ‹  s   è è € å�°KÐ@Ñ@Ô@Ð@rD   z/api/admin.jsc               ƒ  ó¨   K  — t          t          j                             t          j                             t
          ¦  «        d¦  «        d¬¦  «        S )Nzadmin.jsztext/javascriptrt  )r   ÚosÚpathÚjoinÚdirnamerv  rC   rD   rE   Úadmin_scriptr}  �  s8   è è € å�œŸš¥R¤W§_¢_µ_Ñ%EÔ%EÀzÑRÔRÐ_pÐqÑqÔqÐqrD   z/serverc               ƒ  óx   K  — t           j        pt                                ¦   «         } |                      ¦   «         S r@   )ró   Úlatestrô   rõ   rù   s    rE   Úserver_statusr€  •  s2   è è € åÔ&ÐDÕ*:×*BÒ*BÑ*DÔ*D€HØ×ÒÑ Ô Ð rD   z/devicesúlist[dict[str, Any]]c               ƒ  óX  K  — g } t          t                               ¦   «         d„ ¬¦  «        D ]{}|                     ¦   «         }t                               |j        ¦  «        |d<   t          j                             |j        |d         ¦  «        |d<   |  	                    |¦  «         Œ|| S )Nc                ó   — | j         S r@   )rJ   )ri  s    rE   rP   zlist_devices.<locals>.<lambda>ž  s   € ¸¼€ rD   )rÑ   r~   Úspeech_mode)
rb   rƒ   r­   re   r“   r�   rJ   r®   ÚpreferencesÚappend)rW  r„   Úitems      rE   Úlist_devicesrˆ  ›  sš   è è € à€FÝ�ŸšÑ)Ô)Ð/DÐ/DÐEÑEÔEð ð ˆØ�}Š}‰ŒˆÝ%×)Ò)¨&Ô*:Ñ;Ô;ˆˆX‰Ý&Ô2×6Ò6°vÔ7GÈÈhÌÑXÔXˆˆ]ÑØ�Š�dÑÔÐÐØ€MrD   z/api/statusc               ƒ  ór  K  — t           j        pt                                ¦   «         } t                               ¦   «         }|D ]K}t
                               d|d         ¦  «        }|r&d|d<   |d         j        dz   |d         j        z   |d<   ŒL|  	                    ¦   «         t          ¦   «         ƒ d {V —†|dœS )	Nr8   r°   ÚWAITING_APPROVALr£   r   ú: Úwaiting_reason)Úserverrƒ   r  )ró   r  rô   r  re   r9   r›   ry   rà   rõ   rˆ  )rú   r  rä   r  s       rE   Úadmin_statusrŽ  ¦  sÍ   è è € åÔ&ÐDÕ*:×*BÒ*BÑ*DÔ*D€HÝ×!Ò!Ñ#Ô#€HØð Tð TˆÝ×(Ò(¨¨w°|Ô/DÑEÔEˆØð 	TØ1ˆG�GÑØ(/°¬
Ô(8¸4Ñ(?À'È!Ä*ÔBSÑ(SˆGÐ$Ñ%øà×%Ò%Ñ'Ô'Ý%™œÐ'Ð'Ð'Ð'Ð'Ð'Øðð ð rD   Únotificationú Literal['done', 'failed'] | Nonec           
     ó.  — t                                | ¦  «        }|€ddd| › �| | dddd dœ	S ddd| › �dœ|                     d	¬
¦  «        ¥}t                               d| ¦  «        }|r&d|d<   |d         j        dz   |d         j        z   |d<   |�||d<   |S )NÚagent_stater8   ú	agent:pi:r\   ÚOFFLINEr   )	r¸   r™   r~   r°   r©   Úcwdr£   Úelapsed_secondsrŒ  )r¸   r™   r~   T)Úinclude_historyrŠ  r£   r‹  rŒ  r�  )r  r�   re   r9   r›   ry   rà   )r°   r�  rä   r…   r  s        rE   Úpi_target_payloadr˜  ¶  sã   € õ �oŠo˜jÑ)Ô)€GØ€à!¨DØ. *Ð.Ð.Ø$ØØØØ Ø"ð	
ð 	
ð 		
ð ¨Ø*˜jÐ*Ð*ðð ð �.Š.¨ˆ.Ñ
.Ô
.ð€Gõ
 ×$Ò$ T¨:Ñ6Ô6€GØð PØ-ˆ�ÑØ$+¨A¤JÔ$4°tÑ$;¸gÀa¼jÔ>OÑ$OˆÐ Ñ!ØÐØ".ˆ�ÑØ€NrD   c              ƒ  ó¦  K  — t          d| › �¦  «        ƒ d {V —†}|�||d<   t          t                               ¦   «         ¦  «        D �]}t                               |j        ¦  «        d| › �k    rŒ*	 t          ||¦  «        ƒ d {V —† ŒB# t          $ rº t           
                    |dd¬¦  «         t           
                    |dd¬¦  «         d |_        |j        rMt          t          ¦  «        5  |j                             d¬¦  «        ƒ d {V —† d d d ¦  «         n# 1 swxY w Y   d|_        d |_        t#          ¦   «         |_        Y �Œw xY wd S )Nr“  r�  FTrè   rë   rì   )Úagent_target_payloadr¬   rƒ   r­   r“   r�   rJ   r�   rß   r®   r´   r¡   r[   rM   r   rî   rT   rF   rU   )r°   r�  r…   r„   s       rE   r  r  Ó  s¨  è è € õ )Ð)A°ZÐ)AÐ)AÑBÔBÐBÐBÐBÐBÐBÐB€GØÐ¸< ¨Ñ!8Ý•w—~’~Ñ'Ô'Ñ(Ô(ð )ñ )ˆÝ×Ò˜FÔ,Ñ-Ô-Ð1I¸ZÐ1IÐ1IÒIÐIØð
	)Ý  ¨Ñ1Ô1Ð1Ð1Ð1Ð1Ð1Ð1Ð1Ð1øÝð 	)ð 	)ð 	)Ý�OŠO˜F¨5¸ˆOÑ>Ô>Ð>Ý�MŠM˜&¨°tˆMÑ<Ô<Ð<Ø!%ˆFÔØÔð RÝ�iÑ(Ô(ÐQÐQ°Ô0@×0FÒ0FÈDÐ0FÑ0QÔ0QÐ*QÐ*QÐ*QÐ*QÐ*QÐ*QÐ*QÐQÐQÐQÑQÔQÐQÐQÐQÐQÐQÐQøøøÐQÐQÐQÐQØ!ˆFŒMØ#ˆFÔÝ&™yœyˆFÔÐÑð	)øøøð)ð )s7   Á3B
Â
A&EÃ0"DÄEÄD"Ä"EÄ%D"Ä&$EÅEr¼   r   c              ƒ  óH  K  — t                                | j        ¦  «        }|�|j        sd S ddd| j        › �| j        |j        |j        |j        �|j                             ¦   «         nd dœ}t          t           	                    ¦   «         ¦  «        D �]}t                               |j        ¦  «        d| j        › �k    rŒ/	 t          ||¦  «        ƒ d {V —† ŒG# t          $ rº t                               |dd¬¦  «         t                                |dd¬¦  «         d |_        |j        rMt'          t          ¦  «        5  |j                             d¬	¦  «        ƒ d {V —† d d d ¦  «         n# 1 swxY w Y   d|_        d |_        t-          ¦   «         |_        Y �Œ
w xY wd S )
NÚagent_activityr8   r“  )r¸   r™   r~   r°   Úactivity_typeÚactivityrÐ   FTrè   rë   rì   )r  r�   r°   rª   r�  Úactivity_updated_atrc   r¬   rƒ   r­   r“   rJ   r�   rß   r®   r´   r¡   r[   rM   r   rî   rT   rF   rU   )r¼   rä   r…   r„   s       rE   Úpush_selected_pi_activityr   è  sï  è è € Ý�oŠo˜eÔ.Ñ/Ô/€GØ€˜gÔ5€Øˆà ¨4Ø0˜eÔ.Ð0Ð0ØÔ&Ø Ô.ØÔ+ð Ô*Ð6ð Ô'×1Ò1Ñ3Ô3Ð3àðð €Gõ •w—~’~Ñ'Ô'Ñ(Ô(ð )ñ )ˆÝ×Ò˜FÔ,Ñ-Ô-Ð1O¸UÔ=MÐ1OÐ1OÒOÐOØð
	)Ý  ¨Ñ1Ô1Ð1Ð1Ð1Ð1Ð1Ð1Ð1Ð1øÝð 	)ð 	)ð 	)Ý�OŠO˜F¨5¸ˆOÑ>Ô>Ð>Ý�MŠM˜&¨°tˆMÑ<Ô<Ð<Ø!%ˆFÔØÔð RÝ�iÑ(Ô(ÐQÐQ°Ô0@×0FÒ0FÈDÐ0FÑ0QÔ0QÐ*QÐ*QÐ*QÐ*QÐ*QÐ*QÐ*QÐQÐQÐQÑQÔQÐQÐQÐQÐQÐQÐQøøøÐQÐQÐQÐQØ!ˆFŒMØ#ˆFÔÝ&™yœyˆFÔÐÑð	)øøøð)ð )s7   ÃCÃA&FÅ"E/Å#FÅ/E3Å3FÅ6E3Å7$FÆFc              ƒ  óL  K  — t          | ¦  «        }|sdddœS |\  }}	 t          |¦  «                             |¦  «        ƒ d {V —†}|dk    rEt          t          |¦  «        d¦  «        r(t          |¦  «                             |¦  «        ƒ d {V —† dt          | ¦  «        dœ|                     ¦   «         ¥}|                     dd¦  «                             d	¦  «        d
d …          	                    d	d¬¦  «        |d<   |dk    rCt                               |¦  «        r)|j        r"|                     t          |¦  «        ¦  «         |S # t          $ rM |dk    r+t                               |¦  «        rt          |¦  «        cY S dt          | ¦  «        |||ddd d dœ	cY S w xY w)NÚtarget_stater�  )r¸   r~   r=   Úobserve_sessionr’  Úrecent_textr\   zutf-8i`ðÿÿÚignore)rS  r8   r”  r   )	r¸   r~   r™   r°   r©   r£   r–  rË   Úeffort)r   r—   r×   Úhasattrr£  r   rõ   r�   ÚencodeÚdecoder  ÚliveÚupdater˜  r'   )r~   rá   r™   râ   rä   r…   s         rE   rš  rš    sé  è è € Ý˜&Ñ!Ô!€FØð :Ø%°Ð9Ð9Ð9Ø�J€Eˆ3ðYÝ# EÑ*Ô*×6Ò6°sÑ;Ô;Ð;Ð;Ð;Ð;Ð;Ð;ˆØ�GÒÐ¥­°EÑ(:Ô(:Ð<MÑ NÔ NÐÝ˜eÑ$Ô$×4Ò4°SÑ9Ô9Ð9Ð9Ð9Ð9Ð9Ð9Ð9Ø'Õ1AÀ&Ñ1IÔ1IÐbÐbÈW×M_ÒM_ÑMaÔMaÐbˆØ!(§¢¨]¸2Ñ!>Ô!>×!EÒ!EÀgÑ!NÔ!NÈuÈvÈvÔ!V×!]Ò!]Ð^eÐnvÐ!]Ñ!wÔ!wˆ�ÑØ�DŠ=ˆ=�[Ÿ_š_¨SÑ1Ô1ˆ=°g´lˆ=Ø�NŠNÕ,¨SÑ1Ô1Ñ2Ô2Ð2ØˆøÝð Yð Yð YØ�DŠ=ˆ=�[Ÿ_š_¨SÑ1Ô1ˆ=Ý$ SÑ)Ô)Ð)Ð)Ð)Ø$Õ.>¸vÑ.FÔ.FÈuÐbeØ˜y¸1ÀTÐSWðYð Yð 	Yð 	Yð 	YðYøøøs   ŸD,E Å9F#ÆF#Æ"F#c              ƒ  óÂ  K  — i }t          t                               ¦   «         ¦  «        D �]²}t                               |j        ¦  «        }t          |¦  «        }t          |¦  «        r|r
| r	|| |fk    rŒM	 ||vrt          |¦  «        ƒ d {V —†||<   ||         }t                               |j        ¦  «        |k    st          |¦  «        sŒ¥|rrt          |t          d||d         |d         |                     d¦  «        |                     dd¦  «        |                     dd¦  «        ¬¦  «        ¦  «        ƒ d {V —† nnt          |¦  «        }|d         d	k    r0|j        d
v r'|d         dv r|d                              ¦   «         |d<   |d         |_        t          ||¦  «        ƒ d {V —† �Œ‰# t          $ r t                               d¦  «         Y �Œ°w xY wd S )Nrœ  r   rt   r�  rª   r\   r¤  )r¸   r~   r™   r°   r�  rž  r¤  r=   )ÚRUNNINGrŠ  r£   )ÚDONEÚFAILEDr�  zAgent target delivery failed)r¬   rƒ   r­   r“   r�   rJ   r   r�   rš  r�   rÞ   r]   Úlowerrß   rï   rð   )	r™   râ   rž  Úcacher„   r~   rá   r…   Úoutgoings	            rE   rö   rö     s\  è è € Ø€EÝ•w—~’~Ñ'Ô'Ñ(Ô(ð ;ñ ;ˆÝ×!Ò! &Ô"2Ñ3Ô3ˆÝ˜fÑ%Ô%ˆÝ˜fÑ%Ô%ð 	¨Vð 	¸ð 	À&ÈUÐTWÈLÒBXÐBXØð	;Ø˜UÐ"Ð"Õ:NÈvÑ:VÔ:VÐ4VÐ4VÐ4VÐ4VÐ4VÐ4V E¨&¡MØ˜F”mˆGå×Ò Ô 0Ñ1Ô1°VÒ;Ð;Å>ÐRXÑCYÔCYÐ;Ð[cØð 	7Ý$ V­TÐ7GÈvÐ]cÐdeÔ]fÐrxÐyzÔr{Ø")§+¢+¨oÑ">Ô">ÈÏÊÐTeÐfhÑHiÔHiØ '§¢¨M¸"Ñ =Ô =ð.?ñ .?ô .?ñ @ô @ð @ð @ð @ð @ð @ð @ð @ð @õ   ™=œ=�Ø˜!”9 Ò'Ð'¨FÔ,CÐGeÐ,eÐ,eÐjqÐryÔjzð  Pð  kPð  kPØ/6°wÔ/?×/EÒ/EÑ/GÔ/G�H˜^Ñ,Ø*1°'Ô*:�Ô'Ý$ V¨XÑ6Ô6Ð6Ð6Ð6Ð6Ð6Ð6Ð6ùøÝð 	;ð 	;ð 	;Ý�NŠNÐ9Ñ:Ô:Ð:Ð:Ñ:ð	;øøøð);ð ;s   Á9AF4ÃC"F4Æ4$GÇGc                ó|   ‡ — ˆ fd„}‰ t           vr,t                                |¦   «         ¦  «        t           ‰ <   d S d S )Nc               “  ó  •K  — 	 t          j        d¦  «        ƒ d {V —† t          d‰ ¦  «        ƒ d {V —† t          d‰ d¬¦  «        ƒ d {V —† t                               ‰ d ¦  «         d S # t                               ‰ d ¦  «         w xY w)Ng333333Ã?r=   T)rž  )rk   r÷   rö   Ú_codex_push_tasksr  )râ   s   €rE   Údeliverz%queue_codex_activity.<locals>.deliver;  s°   øè è € ð	-Ý”- Ñ$Ô$Ð$Ð$Ð$Ð$Ð$Ð$Ð$Ý$ W¨cÑ2Ô2Ð2Ð2Ð2Ð2Ð2Ð2Ð2Ý$ W¨c¸DÐAÑAÔAÐAÐAÐAÐAÐAÐAÐAå×!Ò! # tÑ,Ô,Ð,Ð,Ð,øÕ×!Ò! # tÑ,Ô,Ð,Ð,øøøs   …AA* Á*B)rµ  r¡   Úspawn)râ   Úmethodr¶  s   `  rE   r  r  9  sU   ø€ ð-ð -ð -ð -ð -ð Õ#Ð#Ð#Ý!'§¢¨g¨g©i¬iÑ!8Ô!8Õ˜#ÑÐÐð $Ð#rD   z/integrations/pi/events)rY   Úx_device_lab_pi_tokenc              ƒ  ó  K  — t                                |¦  «        st          dd¬¦  «        ‚t                               | ¦  «        }| j        dv r t                               d| j        ¦  «         | j        dk    r5|j	        r.t          d|j        |j        |j        |j        |j        ¬¦  «         | j        dk    rt          | ¦  «        ƒ d {V —† n t!          |j        |j	        ¦  «        ƒ d {V —† d	|                     ¦   «         d
œS )Ni‘  zinvalid Pi integration tokenr:  )Úsession_shutdownÚ	agent_endr8   r¼  r¨   rž  T)r;  rä   )Úcredential_storeÚauthenticate_pir   r  Úapplyr¼   r9   Úcancel_sessionr°   Úpending_notificationr²   r£   r±   r©   rª   r   r  re   )r¼   r¹  rä   s      rE   Úpi_eventrÂ  F  s(  è è € õ
 ×+Ò+Ð,AÑBÔBð TÝ¨Ð4RÐSÑSÔSÐSÝ×Ò Ñ&Ô&€GØ„{Ð7Ð7Ð7Ý× Ò   uÔ'7Ñ8Ô8Ð8Ø„{�kÒ!Ð! gÔ&BÐ!Ý˜$ Ô 2°G´MÀ7ÔCUØ&œ|¸WÔ=Tð	Vñ 	Vô 	Vð 	Và„{�jÒ Ð Ý'¨Ñ.Ô.Ð.Ð.Ð.Ð.Ð.Ð.Ð.Ð.å& wÔ'9¸7Ô;WÑXÔXÐXÐXÐXÐXÐXÐXÐXØ¨¯ªÑ)9Ô)9Ð:Ð:Ð:rD   z/devices/{device_id}/targetrJ   Ú	selectionc              ƒ  óÔ  K  — | t           vrt          dd¬¦  «        ‚t          |j        ¦  «        }t	          |¦  «        }|rM|\  }}|dk    rt
                               |¦  «        s(t          |¦  «                             |¦  «        ƒ d {V —† t           |          }t                               | ¦  «        |k    rBt                               |¦  «         t                               |¦  «         d |_        d|_        t                               | |¦  «         d}t!          |¦  «        �r;	 t#          |¦  «        ƒ d {V —†}t                               | ¦  «        |k    rSt%          ||¦  «        ƒ d {V —† |                     dd¦  «        |_        t                               |¦  «        ƒ d {V —† d}n³# t(          $ r¦ t                               |dd¬	¦  «         t                               |dd¬	¦  «         d |_        |j        rMt-          t(          ¦  «        5  |j                             d
¬¦  «        ƒ d {V —† d d d ¦  «         n# 1 swxY w Y   d|_        d |_        Y nw xY w| ||dœS )Nr1  údevice not foundr:  r8   r\   Fr£   Trè   rë   rì   )rJ   r~   Ú	delivered)rƒ   r   r   r~   r   r  r�   r—   r×   r“   r®   r´   r¡   r[   r]   rm   r�   rš  r�   rÈ   rß   rM   r   rî   rT   )	rJ   rÃ  r~   rá   r™   râ   r„   rÆ  r…   s	            rE   Úselect_targetrÇ  Z  s¯  è è € à�ÐÐÝ¨Ð4FÐGÑGÔGÐGÝ˜iÔ.Ñ/Ô/€FÝ˜&Ñ!Ô!€FØð 6Ø‰
ˆˆsØ˜’�¥+§/¢/°#Ñ"6Ô"6�Ý˜eÑ$Ô$×0Ò0°Ñ5Ô5Ð5Ð5Ð5Ð5Ð5Ð5Ð5Ý�YÔ€FÝ×Ò˜	Ñ"Ô" fÒ,Ð,Ý�Š˜ÑÔÐÝ�Š�fÑÔÐØ!ˆÔØ"$ˆÔÝ×Ò�Y Ñ'Ô'Ð'Ø€IÝ�fÑÔñ $ð	$Ý0°Ñ8Ô8Ð8Ð8Ð8Ð8Ð8Ð8ˆGÝ×Ò 	Ñ*Ô*¨fÒ4Ð4Ý$ V¨WÑ5Ô5Ð5Ð5Ð5Ð5Ð5Ð5Ð5Ø*1¯+ª+°g¸rÑ*BÔ*B�Ô'Ý×'Ò'¨Ñ/Ô/Ð/Ð/Ð/Ð/Ð/Ð/Ð/Ø �	øøÝð 	$ð 	$ð 	$Ý�OŠO˜F¨5¸ˆOÑ>Ô>Ð>Ý�MŠM˜&¨°tˆMÑ<Ô<Ð<Ø!%ˆFÔØÔð RÝ�iÑ(Ô(ÐQÐQ°Ô0@×0FÒ0FÈDÐ0FÑ0QÔ0QÐ*QÐ*QÐ*QÐ*QÐ*QÐ*QÐ*QÐQÐQÐQÑQÔQÐQÐQÐQÐQÐQÐQøøøÐQÐQÐQÐQØ!ˆFŒMØ#ˆFÔÐÐð	$øøøð #¨fÀ9ÐMÐMÐMs8   Ä*BF1 Æ1A&I!È"IÈ9I!ÉI		É	I!ÉI		ÉI!É I!z/devices/{device_id}/messagerÂ   c              ƒ  ó”  K  — t                                | ¦  «        }|€t          dd¬¦  «        ‚|j        r|j        €t          dd¬¦  «        ‚d|j        |j        dœ}	 t          ||¦  «        ƒ d {V —† n2# t          $ r%}d|_        d |_        t          dd	¬¦  «        |‚d }~ww xY wt           
                    d
| ¦  «         d| |dœS )Nr1  rÅ  r:  r9  rˆ   Údisplay_message)r¸   ry   rz   Fúdevice disconnectedz!sent display_message to device %sT)ÚsentrJ   rÂ   )rƒ   r�   r   rT   rM   ry   rz   r�   rß   rï   Úinfo)rJ   rÂ   r„   r…   ræ   s        rE   Úsend_messagerÍ    s  è è € å�[Š[˜Ñ#Ô#€FØ€~Ý¨Ð4FÐGÑGÔGÐGØŒ=ð I˜FÔ,Ð4Ý¨Ð4GÐHÑHÔHÐHà(°7´=È'Ì,ÐWÐW€GðTÝ˜V WÑ-Ô-Ð-Ð-Ð-Ð-Ð-Ð-Ð-Ð-øÝð Tð Tð TØˆŒØˆÔÝ¨Ð4IÐJÑJÔJÐPSÐSøøøøðTøøøõ ‡K‚KÐ3°YÑ?Ô?Ð?Ø y¸WÐEÐEÐEs   Á A7 Á7
B&Â B!Â!B&z&/devices/{device_id}/test-notificationr.  c              ƒ  óš  K  — t                                | ¦  «        }|€t          dd¬¦  «        ‚|j        r|j        €t          dd¬¦  «        ‚	 t          |d|j        dœ¦  «        ƒ d {V —† n2# t          $ r%}d|_        d |_        t          dd	¬¦  «        |‚d }~ww xY wt           	                    d
|j        | ¦  «         d| |j        dœS )Nr1  rÅ  r:  r9  rˆ   Únotification_test)r¸   r‚   FrÊ  z&sent %s notification test to device %sT)rË  rJ   r‚   )
rƒ   r�   r   rT   rM   r�   r‚   rß   rï   rÌ  )rJ   r.  r„   ræ   s       rE   Útest_notificationrÐ  ’  s  è è € å�[Š[˜Ñ#Ô#€FØ€~Ý¨Ð4FÐGÑGÔGÐGØŒ=ð I˜FÔ,Ð4Ý¨Ð4GÐHÑHÔHÐHðTÝ˜VÐ.AÈ7Ì<Ð%XÐ%XÑYÔYÐYÐYÐYÐYÐYÐYÐYÐYøÝð Tð Tð TØˆŒØˆÔÝ¨Ð4IÐJÑJÔJÐPSÐSøøøøðTøøøõ ‡K‚KÐ8¸'¼,È	ÑRÔRÐRØ y¸'¼,ÐGÐGÐGs   ÁA/ Á/
BÁ9 BÂBc                  ó>   — e Zd ZU  edd¬¦  «        Zded<   ded<   dS )	ÚSpeechSelectionrt   é¾   rv   rI   r~   z6Literal['OFF', 'MANUAL', 'AUTO_REPLY', 'AUTO_SUMMARY']r5  Nr   rC   rD   rE   rÒ  rÒ  £  s>   € € € € € € Ø�% 1°Ð5Ñ5Ô5€FÐ5Ð5Ð5Ñ5Ø@Ð@Ð@Ñ@Ð@Ð@rD   rÒ  c                  ó<   — e Zd ZU  edd¬¦  «        Zded<   ddiZdS )	Ú
SpeechTestrt   rÓ  rv   rI   r~   ÚextraÚforbidN)rg   rh   ri   r   r~   rj   Úmodel_configrC   rD   rE   rÕ  rÕ  ¨  s:   € € € € € € Ø�% 1°Ð5Ñ5Ô5€FÐ5Ð5Ð5Ñ5Ø˜XÐ&€L€L€LrD   rÕ  z/api/devices/{device_id}/speechc              ƒ  óà  K  — t                                | ¦  «        }|st          dd¦  «        ‚t                               | ¦  «        t	          |j        ¦  «        k    rt          dd¦  «        ‚t                               |¦  «         t          j         	                    | |j        |j
        ¦  «         t                               |¦  «        ƒ d {V —† |j
        t	          |j        ¦  «        dœS )Nr1  úDevice not foundr9  ú Target changed; refresh settings)r5  r~   )rƒ   r�   r   r“   r   r~   r®   r´   r…  rm   r5  rÈ   ©rJ   r7  r„   s      rE   Úset_speech_moderÝ  ­  s×   è è € å�[Š[˜Ñ#Ô#€FØð 5Ý˜CÐ!3Ñ4Ô4Ð4Ý×Ò˜	Ñ"Ô"Õ&6°u´|Ñ&DÔ&DÒDÐDÝ˜CÐ!CÑDÔDÐDÝ‡O‚O�FÑÔÐÝÔ×Ò˜Y¨¬°e´jÑAÔAÐAÝ
×
Ò
˜FÑ
#Ô
#Ð#Ð#Ð#Ð#Ð#Ð#Ð#Ø”JÕ*:¸5¼<Ñ*HÔ*HÐIÐIÐIrD   z$/api/devices/{device_id}/speech-testc              ƒ  ó>  K  — t                                | ¦  «        }|st          dd¦  «        ‚t                               | ¦  «        t	          |j        ¦  «        k    rt          dd¦  «        ‚t                               |dd¦  «        st          dd¦  «        ‚dd	iS )
Nr1  rÚ  r9  rÛ  Úscreenu   è¯­éŸ³æ’­æ”¾æµ‹è¯•æˆ�åŠŸã€‚zASpeech unavailable, device busy or firmware lacks speech_playbackr;  T)rƒ   r�   r   r“   r   r~   r®   r  rÜ  s      rE   Útest_speechrà  º  s›   è è € å�[Š[˜Ñ#Ô#€FØð 5Ý˜CÐ!3Ñ4Ô4Ð4Ý×Ò˜	Ñ"Ô"Õ&6°u´|Ñ&DÔ&DÒDÐDÝ˜CÐ!CÑDÔDÐDÝ�>Š>˜& (Ð,IÑJÔJð fÝ˜CÐ!dÑeÔeÐeØ˜ÐÐrD   z
/device/wsrM   r   c              ƒ  óâ  ‡	K  — |                       ¦   «         ƒ d {V —† d }	 |                      ¦   «         ƒ d {V —†Š	t          ‰	t          ¦  «        r‰	                     d¦  «        dk    �r…|                      dd¬¦  «        ƒ d {V —† 	 |�ft                               |dd¬¦  «         t                               |dd¬¦  «         d |_	        t          j                             |j        d ¦  «         |�ùt                               |j        ¦  «        |u rÚt                               |dd¬¦  «         t                               |dd¬¦  «         d |_	        |j        rMt#          t$          ¦  «        5  |j                             d	¬
¦  «        ƒ d {V —† d d d ¦  «         n# 1 swxY w Y   d|_        d |_        t)          ¦   «         |_        t,                               d|j        ¦  «         d S d S d S d}t1          ˆ	fd„|D ¦   «         ¦  «        �r…|                      dd¬¦  «        ƒ d {V —† 	 |�ft                               |dd¬¦  «         t                               |dd¬¦  «         d |_	        t          j                             |j        d ¦  «         |�ùt                               |j        ¦  «        |u rÚt                               |dd¬¦  «         t                               |dd¬¦  «         d |_	        |j        rMt#          t$          ¦  «        5  |j                             d	¬
¦  «        ƒ d {V —† d d d ¦  «         n# 1 swxY w Y   d|_        d |_        t)          ¦   «         |_        t,                               d|j        ¦  «         d S d S d S ‰	d         }t2                               |‰	d         ¦  «        �s t,                               d|¦  «         |                      dd¬¦  «        ƒ d {V —† 	 |�ft                               |dd¬¦  «         t                               |dd¬¦  «         d |_	        t          j                             |j        d ¦  «         |�ùt                               |j        ¦  «        |u rÚt                               |dd¬¦  «         t                               |dd¬¦  «         d |_	        |j        rMt#          t$          ¦  «        5  |j                             d	¬
¦  «        ƒ d {V —† d d d ¦  «         n# 1 swxY w Y   d|_        d |_        t)          ¦   «         |_        t,                               d|j        ¦  «         d S d S d S t                               |¦  «        }|�c|j        �\t                               |dd¬¦  «         t                               |dd¬¦  «         |j                             dd¬¦  «        ƒ d {V —† t9          |‰	d         ‰	d         | t          ‰	                     d¦  «        t:          ¦  «        r d„ ‰	                     dg ¦  «        D ¦   «         nt=          ¦   «         ¬¦  «        }|t          |<   t?          |ddi¦  «        ƒ d {V —† t@          j!        pt@           "                    ¦   «         }t?          || #                    ¦   «         ¦  «        ƒ d {V —† tH                               |¦  «        }tK          |¦  «        ƒ d {V —†}t?          ||¦  «        ƒ d {V —† |                     dd¦  «        |_&        t           '                    |¦  «        ƒ d {V —† t           (                    ¦   «          t,                               d|j        |j)        |j*        ¦  «         	 |                      ¦   «         ƒ d {V —†}t          |t          ¦  «        r(t          |                     d¦  «        tV          ¦  «        s!t,                               d|j        ¦  «         Œyt)          ¦   «         |_        |d          ,                    d¦  «        r
d|d         in||_-        |d          ,                    d ¦  «        r#t           .                    ||¦  «        ƒ d {V —† �nr|d          ,                    d!¦  «        rI|d         d"k    rt                               |¦  «         t           .                    ||¦  «        ƒ d {V —† �n|d         d#v rÈ|d         d$k    rt                               |¦  «         |d         d%k    rt_          ||¦  «        ƒ d {V —† �nº|j0        �|j0         1                    ¦   «         r/t           2                    t_          ||¦  «        ¦  «        |_0        �nkt?          |d&|                     d'¦  «        d(d)œ¦  «        ƒ d {V —† �n<|d         d*k    rqt                               |j        ¦  «        |u rO|j        rHt           3                    |                     d+¦  «        |                     d,¦  «        |j        ¬-¦  «         n¿|d         d.k    rKt,                               d/|j        |                     d0d1¦  «        |                     d2d1¦  «        ¦  «         nh|d         d3k    r5t,           4                    d4|j        |                     d5¦  «        ¦  «         n't,                               d6|j        |d         ¦  «         �Œi# tj          $ r Y n)t$          $ r t,           6                    d7¦  «         Y nw xY w|�ft                               |dd¬¦  «         t                               |dd¬¦  «         d |_	        t          j                             |j        d ¦  «         |�ùt                               |j        ¦  «        |u rÚt                               |dd¬¦  «         t                               |dd¬¦  «         d |_	        |j        rMt#          t$          ¦  «        5  |j                             d	¬
¦  «        ƒ d {V —† d d d ¦  «         n# 1 swxY w Y   d|_        d |_        t)          ¦   «         |_        t,                               d|j        ¦  «         d S d S d S # |�ft                               |dd¬¦  «         t                               |dd¬¦  «         d |_	        t          j                             |j        d ¦  «         |�øt                               |j        ¦  «        |u rØt                               |dd¬¦  «         t                               |dd¬¦  «         d |_	        |j        rMt#          t$          ¦  «        5  |j                             d	¬
¦  «        ƒ d {V —† d d d ¦  «         n# 1 swxY w Y   d|_        d |_        t)          ¦   «         |_        t,                               d|j        ¦  «         w w w xY w)8Nr¸   Úhelloið  zfirst message must be hello)rí   ÚreasonFTrè   rë   rì   zdevice %s offline)rJ   Údevice_tokenrK   rL   c              3  ó|   •K  — | ]6}t          ‰                     |¦  «        t          ¦  «         p‰|          V — Œ7d S r@   )rÕ   r�   rI   )rÌ   rÑ   râ  s     €rE   r  z#device_websocket.<locals>.<genexpr>Ñ  sE   øè è € ÐYÐYÈ•:˜eŸiši¨™nœn­cÑ2Ô2Ð2ÐD¸%À¼*°nÐYÐYÐYÐYÐYÐYrD   zinvalid hellorJ   rä  zrejected unauthorized device %szunauthorized deviceiô  zreplaced by a new connectionrK   rL   r^   c                ó<   — h | ]}t          |t          ¦  «        ¯|’ŒS rC   )rÕ   rI   )rÌ   Úvs     rE   ú	<setcomp>z#device_websocket.<locals>.<setcomp>å  s)   € ÐYÐYÐY ÅjÐQRÕTWÑFXÔFXÐY˜!ÐYÐYÐYrD   )rJ   rK   rL   rM   r^   Ú	hello_ackr£   r\   z%device %s online board=%s firmware=%szdevice %s sent invalid event)Úvoice_Ú	settings_Úspeech_rì  rê  Úvoice_start)rÃ   rÇ   r¹   rÃ   r¹   rÀ   rº   zSettings request busyrÁ   Úapproval_responser   rp   )Údevice_connectionÚbutton_eventz,device %s button clicked button=%s action=%sÚbuttonÚunknownÚactionÚ	heartbeatzdevice %s heartbeat uptime=%sÚuptimezdevice %s event type=%szdevice websocket failed)7ÚacceptÚreceive_jsonrÕ   rÞ   r�   rî   r®   r´   r¡   r[   r9   r  r  rR   rƒ   rJ   rM   r   rß   rT   rF   rU   rï   rÌ  Úanyr½  Úauthenticaterð   rH   r¬   rm   r�   ró   r  rô   rõ   r“   rš  r]   rÈ   rµ   rK   rL   rI   Ú
startswithrV   Úhandler½   rZ   Údoner·  r<  Údebugr   Ú	exception)
rM   r„   ÚrequiredrJ   Úpreviousrú   r~   r…   r¼   râ  s
            @rE   Údevice_websocketr  Æ  sÈ  øè è € à
×
Ò
Ñ
Ô
ÐÐÐÐÐÐÐØ €Fðd?Ø×,Ò,Ñ.Ô.Ð.Ð.Ð.Ð.Ð.Ð.ˆÝ˜%¥Ñ&Ô&ð 	¨%¯)ª)°FÑ*;Ô*;¸wÒ*FÑ*FØ—/’/ tÐ4Q�/ÑRÔRÐRÐRÐRÐRÐRÐRÐRØðd ÐÝ�OŠO˜F¨5¸ˆOÑ>Ô>Ð>Ý�MŠM˜&¨°tˆMÑ<Ô<Ð<Ø!%ˆFÔÝÔ#×'Ò'¨Ô(<¸dÑCÔCÐCØÐ¥'§+¢+¨fÔ.>Ñ"?Ô"?À6Ð"IÐ"IÝ�OŠO˜F¨5¸ˆOÑ>Ô>Ð>Ý�MŠM˜&¨°tˆMÑ<Ô<Ð<Ø!%ˆFÔØÔð RÝ�iÑ(Ô(ÐQÐQ°Ô0@×0FÒ0FÈDÐ0FÑ0QÔ0QÐ*QÐ*QÐ*QÐ*QÐ*QÐ*QÐ*QÐQÐQÐQÑQÔQÐQÐQÐQÐQÐQÐQøøøÐQÐQÐQÐQØ!ˆFŒMØ#ˆFÔÝ&™yœyˆFÔÝ�KŠKÐ+¨VÔ-=Ñ>Ô>Ð>Ð>Ð>ð ÐÐ"IÐ"Iðk FˆÝÐYÐYÐYÐYÐPXÐYÑYÔYÑYÔYñ 	Ø—/’/ t°O�/ÑDÔDÐDÐDÐDÐDÐDÐDÐDØðZ ÐÝ�OŠO˜F¨5¸ˆOÑ>Ô>Ð>Ý�MŠM˜&¨°tˆMÑ<Ô<Ð<Ø!%ˆFÔÝÔ#×'Ò'¨Ô(<¸dÑCÔCÐCØÐ¥'§+¢+¨fÔ.>Ñ"?Ô"?À6Ð"IÐ"IÝ�OŠO˜F¨5¸ˆOÑ>Ô>Ð>Ý�MŠM˜&¨°tˆMÑ<Ô<Ð<Ø!%ˆFÔØÔð RÝ�iÑ(Ô(ÐQÐQ°Ô0@×0FÒ0FÈDÐ0FÑ0QÔ0QÐ*QÐ*QÐ*QÐ*QÐ*QÐ*QÐ*QÐQÐQÐQÑQÔQÐQÐQÐQÐQÐQÐQøøøÐQÐQÐQÐQØ!ˆFŒMØ#ˆFÔÝ&™yœyˆFÔÝ�KŠKÐ+¨VÔ-=Ñ>Ô>Ð>Ð>Ð>ð ÐÐ"IÐ"Iða ˜+Ô&ˆ	Ý×,Ò,¨Y¸¸nÔ8MÑNÔNñ 	Ý�NŠNÐ<¸iÑHÔHÐHØ—/’/ tÐ4I�/ÑJÔJÐJÐJÐJÐJÐJÐJÐJØðN ÐÝ�OŠO˜F¨5¸ˆOÑ>Ô>Ð>Ý�MŠM˜&¨°tˆMÑ<Ô<Ð<Ø!%ˆFÔÝÔ#×'Ò'¨Ô(<¸dÑCÔCÐCØÐ¥'§+¢+¨fÔ.>Ñ"?Ô"?À6Ð"IÐ"IÝ�OŠO˜F¨5¸ˆOÑ>Ô>Ð>Ý�MŠM˜&¨°tˆMÑ<Ô<Ð<Ø!%ˆFÔØÔð RÝ�iÑ(Ô(ÐQÐQ°Ô0@×0FÒ0FÈDÐ0FÑ0QÔ0QÐ*QÐ*QÐ*QÐ*QÐ*QÐ*QÐ*QÐQÐQÐQÑQÔQÐQÐQÐQÐQÐQÐQøøøÐQÐQÐQÐQØ!ˆFŒMØ#ˆFÔÝ&™yœyˆFÔÝ�KŠKÐ+¨VÔ-=Ñ>Ô>Ð>Ð>Ð>ð ÐÐ"IÐ"IõW —;’;˜yÑ)Ô)ˆØÐ HÔ$6Ð$BÝ�OŠO˜H¨U¸4ˆOÑ@Ô@Ð@Ý�MŠM˜(¨5¸ˆMÑ>Ô>Ð>ØÔ$×*Ò*°Ð=[Ð*Ñ\Ô\Ð\Ð\Ð\Ð\Ð\Ð\Ð\åØØ˜”.Ø˜:Ô&Øå˜eŸiši¨Ñ7Ô7½Ñ>Ô>ðJÐYÐY U§Y¢Y¨~¸rÑ%BÔ%BÐYÑYÔYÐYÝDGÁEÄEð
ñ 
ô 
ˆð $��	ÑÝ˜V f¨kÐ%:Ñ;Ô;Ð;Ð;Ð;Ð;Ð;Ð;Ð;Ý#Ô*ÐHÕ.>×.FÒ.FÑ.HÔ.HˆÝ˜V X×%8Ò%8Ñ%:Ô%:Ñ;Ô;Ð;Ð;Ð;Ð;Ð;Ð;Ð;Ý×!Ò! )Ñ,Ô,ˆÝ,¨VÑ4Ô4Ð4Ð4Ð4Ð4Ð4Ð4ˆÝ˜V WÑ-Ô-Ð-Ð-Ð-Ð-Ð-Ð-Ð-Ø")§+¢+¨g°rÑ":Ô":ˆÔÝ×Ò Ñ'Ô'Ð'Ð'Ð'Ð'Ð'Ð'Ð'Ý×ÒÑÔÐÝ�ŠØ3°VÔ5EÀvÄ|ÐU[ÔUdñ	
ô 	
ð 	
ð$	XØ#×0Ò0Ñ2Ô2Ð2Ð2Ð2Ð2Ð2Ð2ˆEÝ˜e¥TÑ*Ô*ð µ*¸U¿YºYÀvÑ=NÔ=NÕPSÑ2TÔ2Tð Ý—’Ð=¸vÔ?OÑPÔPÐPØÝ&™yœyˆFÔà;@À¼=×;SÒ;SÐTvÑ;wÔ;wð  !C ¨¨v¬Ð 7Ð 7ð  ~CˆFÔØ�VŒ}×'Ò'¨	Ñ2Ô2ð XÝ—o’o f¨eÑ4Ô4Ð4Ð4Ð4Ð4Ð4Ð4Ð4Ñ4Ø�v”×)Ò)¨(Ñ3Ô3ð XØ˜”= MÒ1Ð1µ8·?²?À6Ñ3JÔ3JÐ3JÝ—m’m F¨EÑ2Ô2Ð2Ð2Ð2Ð2Ð2Ð2Ð2Ñ2Ø�v”Ð"WÐWÐWØ˜”= NÒ2Ð2µH·O²OÀFÑ4KÔ4KÐ4KØ˜”=Ð$5Ò5Ð5Ý)¨&°%Ñ8Ô8Ð8Ð8Ð8Ð8Ð8Ð8Ð8Ñ8àÔ+Ð3°vÔ7K×7PÒ7PÑ7RÔ7RÐ3Ý/5¯|ª|½OÈFÐTYÑ<ZÔ<ZÑ/[Ô/[˜Ô,Ñ,å,¨VÐ=MÐ\a×\eÒ\eÐfrÑ\sÔ\sð  @Wð  6Xð  6Xñ  Yô  Yð  Yð  Yð  Yð  Yð  Yð  Yð  Yñ  YØ�v”Ð"5Ò5Ð5Ý—;’;˜vÔ/Ñ0Ô0°FÐ:Ð:¸v¼}Ð:Ý×%Ò% e§i¢i°Ñ&>Ô&>ÀÇ	Â	È*Ñ@UÔ@UØ8>Ô8Lð &ñ Nô Nð Nøà�v” .Ò0Ð0Ý—’ØBØÔ$Ø—I’I˜h¨	Ñ2Ô2Ø—I’I˜h¨	Ñ2Ô2ñ	ô ð ð ð �v” +Ò-Ð-Ý—’Ð<¸fÔ>NÐPU×PYÒPYÐZbÑPcÔPcÑdÔdÐdÐdå—’Ð5°vÔ7GÈÈvÌÑWÔWÐWñI$	XøõJ ð ð ð ØˆÝð 4ð 4ð 4Ý×ÒÐ2Ñ3Ô3Ð3Ð3Ð3ð4øøøð ÐÝ�OŠO˜F¨5¸ˆOÑ>Ô>Ð>Ý�MŠM˜&¨°tˆMÑ<Ô<Ð<Ø!%ˆFÔÝÔ#×'Ò'¨Ô(<¸dÑCÔCÐCØÐ¥'§+¢+¨fÔ.>Ñ"?Ô"?À6Ð"IÐ"IÝ�OŠO˜F¨5¸ˆOÑ>Ô>Ð>Ý�MŠM˜&¨°tˆMÑ<Ô<Ð<Ø!%ˆFÔØÔð RÝ�iÑ(Ô(ÐQÐQ°Ô0@×0FÒ0FÈDÐ0FÑ0QÔ0QÐ*QÐ*QÐ*QÐ*QÐ*QÐ*QÐ*QÐQÐQÐQÑQÔQÐQÐQÐQÐQÐQÐQøøøÐQÐQÐQÐQØ!ˆFŒMØ#ˆFÔÝ&™yœyˆFÔÝ�KŠKÐ+¨VÔ-=Ñ>Ô>Ð>Ð>Ð>ð ÐÐ"IÐ"Iøð ÐÝ�OŠO˜F¨5¸ˆOÑ>Ô>Ð>Ý�MŠM˜&¨°tˆMÑ<Ô<Ð<Ø!%ˆFÔÝÔ#×'Ò'¨Ô(<¸dÑCÔCÐCØÐ¥'§+¢+¨fÔ.>Ñ"?Ô"?À6Ð"IÐ"IÝ�OŠO˜F¨5¸ˆOÑ>Ô>Ð>Ý�MŠM˜&¨°tˆMÑ<Ô<Ð<Ø!%ˆFÔØÔð RÝ�iÑ(Ô(ÐQÐQ°Ô0@×0FÒ0FÈDÐ0FÑ0QÔ0QÐ*QÐ*QÐ*QÐ*QÐ*QÐ*QÐ*QÐQÐQÐQÑQÔQÐQÐQÐQÐQÐQÐQøøøÐQÐQÐQÐQØ!ˆFŒMØ#ˆFÔÝ&™yœyˆFÔÝ�KŠKÐ+¨VÔ-=Ñ>Ô>Ð>Ð>ð Ð"Iøøøs²   ¡A&k- Å/"FÆF!Æ$F!Ç/;k- Ì"M Í MÍMÎA"k- Ó"T
Ô
TÔTÕVk- ë-
lë7r	 ë9#lìr	 ìlìr	 ð	"p7ð7p;ð>p;ò	C(w.õ1"vöw.öv#ö#w.ö&v#ö'Aw.)r>   r   )r„   rH   r…   r`   r>   r†   )r…   r`   r>   r†   )r>   r†   )r  r   )ræ   r'   )r™   rI   )r   rI   r7  ro   )rB  r)   )rÝ   rI   )r™   rI   r°   rI   )r™   rI   r°   rI   r7  r(   )r™   rI   r°   rI   r7  r*   rf   )r>   r   )r>   r   )r>   r�  r@   )r°   rI   r�  r�  r>   r`   )r°   rI   r�  r�  r>   r†   )r¼   r   r>   r†   )NNF)r¼   r   r¹  rI   r>   r`   )rJ   rI   rÃ  r|   r>   r`   )rJ   rI   rÂ   rs   r>   r`   )rJ   rI   r.  r�   r>   r`   )rJ   rI   r7  rÒ  )rJ   rI   r7  rÕ  )rM   r   r>   r†   )šÚ
__future__r   rk   Úloggingry  Ú
contextlibr   r   Údataclassesr   r   r   r	   Útypingr
   r   Úuuidr   Úfastapir   r   r   r   r   Úfastapi.responsesr   r   r   Úpydanticr   r   Údevice_gateway.authr   Ú device_gateway.collectors.systemr   Údevice_gateway.integrations.pir   r   Údevice_gateway.stater   r   r   Údevice_gateway.voicer   r   Údevice_gateway.speech_tracer    rŠ   Údevice_gateway.speechr!   r"   r#   r$   r%   Údevice_gateway.control.settingsr&   Údevice_gateway.control.modelsr'   r(   r)   r*   Údevice_gateway.control.projectsr+   Údevice_gateway.control.pir,   Údevice_gateway.control.codexr-   Ú device_gateway.control.approvalsr.   Ú"device_gateway.control.pi_approvalr/   Ú	getLoggerrï   Úenvironr�   ró   Úfloatrø   r½  r“   rz  r{  r|  Ú__file__rv  r  rÜ   r9   r  rF   rH   ro   rs   r|   r�   rƒ   rj   r�   r�   r¡   r¥   Úspeech_preferencesr®   r²   r¶   r½   r»   rñ   rû   r  r  r'  ÚappÚexception_handlerr/  r—   r6  Úpostr=  r?  rE  rH  rI  rO  rX  r[  r^  rc  rÚ   rØ   rm  rr  rw  r}  r€  rˆ  rŽ  r˜  r  r   rš  rö   rµ  r  rÂ  rÇ  rÍ  rÐ  rÒ  rÕ  rÝ  rà  rM   r  rC   rD   rE   ú<module>r!     s›  ðØ "Ð "Ð "Ð "Ð "Ð "Ð "à €€€Ø €€€Ø 	€	€	€	Ø 4Ð 4Ð 4Ð 4Ð 4Ð 4Ð 4Ð 4Ø (Ð (Ð (Ð (Ð (Ð (Ð (Ð (Ø 'Ð 'Ð 'Ð 'Ð 'Ð 'Ð 'Ð 'Ø Ð Ð Ð Ð Ð Ð Ð Ø Ð Ð Ð Ð Ð à RÐ RÐ RÐ RÐ RÐ RÐ RÐ RÐ RÐ RÐ RÐ RÐ RÐ RØ JÐ JÐ JÐ JÐ JÐ JÐ JÐ JÐ JÐ JØ %Ð %Ð %Ð %Ð %Ð %Ð %Ð %à 5Ð 5Ð 5Ð 5Ð 5Ð 5Ø <Ð <Ð <Ð <Ð <Ð <Ø LÐ LÐ LÐ LÐ LÐ LÐ LÐ LØ LÐ LÐ LÐ LÐ LÐ LÐ LÐ LÐ LÐ LØ =Ð =Ð =Ð =Ð =Ð =Ð =Ð =Ø =Ð =Ð =Ð =Ð =Ð =Ø hÐ hÐ hÐ hÐ hÐ hÐ hÐ hÐ hÐ hÐ hÐ hÐ hÐ hØ 9Ð 9Ð 9Ð 9Ð 9Ð 9Ø PÐ PÐ PÐ PÐ PÐ PÐ PÐ PÐ PÐ PÐ PÐ PØ ;Ð ;Ð ;Ð ;Ð ;Ð ;Ø /Ð /Ð /Ð /Ð /Ð /Ø 5Ð 5Ð 5Ð 5Ð 5Ð 5Ø =Ð =Ð =Ð =Ð =Ð =Ø ?Ð ?Ð ?Ð ?Ð ?Ð ?ð 
ˆÔ	Ð9Ñ	:Ô	:€Ø"�?¨B¬J¯NªNÐ;PÑ,QÔ,QÐRÑRÔRÐ Ø!˜E "¤*§.¢.Ð1LÈcÑ"RÔ"RÑSÔSÐ Ø(Ð(Ø„J‡N‚NØ!Ø4ñô ñô Ð ð ˆ{Ø„J‡N‚NØØ5ñô ñô €ð ”'—,’,˜rœwŸš¨xÑ8Ô8¸(ÀLÑQÔQ€ØÐÑ!Ô!€Ø"�? 2¤:§>¢>Ð2IÐKyÑ#zÔ#zÑ{Ô{Ð ØÐÑÔ€	Ø�)�)Ð,¨kÀYÐOÑOÔOÐP€Ø„:‡>‚>Ð)¨3Ñ/Ô/°3Ò6Ð6Ø$˜Ð%5ÀÐKÑKÔK€HˆWÑð&ð &ð &ð &ð ð
ð 
ð 
ð 
ð 
ñ 
ô 
ñ „ð
ð8+ð +ð +ð +ð +�yñ +ô +ð +ð4ð 4ð 4ð 4ð 4�Yñ 4ô 4ð 4ð
`ð `ð `ð `ð `�iñ `ô `ð `ð$ð $ð $ð $ð $�yñ $ô $ð $ð  €Ð Ð Ð Ñ ð=ð =ð =ð =ðfð fð fð 
ˆ�n�nÑ&Ô&Ð(IÐ(IÐKkÐKkØ�NÐ$JÐ$Jñ
Lô 
L€ðNð Nð Nð
 'Ð& r¤z§~¢~Ð6KÐMyÑ'zÔ'zÑ{Ô{Ð Øˆ=˜˜Ñ)Ô)¨=¨=©?¬?Ð<NØ%Ð% ~°~À~ñWô W€ð EGÐXZð _ð _ð _ð _ð _ð
ð ð ð.ð .ð .ð)]ð )]ð )]ðXeð eð eð eð$7ð 7ð 7ð 7ð%;ð %;ð %;ðP&ð &ð &ð ðð ð ñ Ôðð4 €gÐ(°'ÀHÐMÑMÔM€ð ×Ò�|Ñ$Ô$ðPð Pð Pñ %Ô$ðPðð ð ð ð ‡‚Ð	ÑÔðWð Wñ ÔðWð ‡‚Ð
1Ñ2Ô2ðeð eð eñ 3Ô2ðeð ‡‚ˆÑÔð#ð #ñ Ôð#ð ‡‚ˆ/ s€Ñ+Ô+ð)ð )ð )ñ ,Ô+ð)ð ‡‚Ð(°c€Ñ:Ô:ð(ð (ð (ñ ;Ô:ð(ð ‡‚ˆÑÔðgð gñ Ôðgð ‡‚Ð	.Ñ/Ô/ð	4ð 	4ð 	4ñ 0Ô/ð	4ð ‡‚Ð	4Ñ5Ô5ð<ð <ð <ñ 6Ô5ð<ð ‡‚Ð
<Ñ=Ô=ð\ð \ð \ñ >Ô=ð\ð
 ‡‚Ð
;È€ÑMÔMðGð Gð Gñ NÔMðGð ‡‚Ð	=Ñ>Ô>ð=ð =ð =ñ ?Ô>ð=ð ‡‚Ð
>Ñ?Ô?ðGð Gð Gñ @Ô?ðGð ‡‚ˆÑÔðsð sð sñ Ôðsð ‡‚ˆ €Ñ&Ô&ð7ð 7ð 7ñ 'Ô&ð7ð ‡‚ˆ U€Ñ+Ô+ðAð Að Añ ,Ô+ðAð ‡‚ˆ¨E€Ñ2Ô2ðrð rð rñ 3Ô2ðrð ‡‚ˆÑÔð!ð !ð !ñ Ôð!ð
 ‡‚ˆÑÔðð ð ñ Ôðð ‡‚ˆÑÔðð ð ñ Ôðð  GKðð ð ð ð ð< GKð)ð )ð )ð )ð )ð*)ð )ð )ð )ð@Yð Yð Yð*;ð ;ð ;ð ;ð4 Ð ð
9ð 
9ð 
9ð ‡‚Ð
#°u€Ñ=Ô=ð "( °Ð!3Ñ!3Ô!3ð;ð ;ð ;ð ;ñ >Ô=ð;ð& ‡‚Ð
'Ñ(Ô(ð!Nð !Nð !Nñ )Ô(ð!NðH ‡‚Ð
(Ñ)Ô)ðFð Fð Fñ *Ô)ðFð$ ‡‚Ð
2Ñ3Ô3ðHð Hð Hñ 4Ô3ðHð Að Að Að Að A�iñ Aô Að Að
'ð 'ð 'ð 'ð '�ñ 'ô 'ð 'ð
 ‡‚Ð
+Ñ,Ô,ð	Jð 	Jð 	Jñ -Ô,ð	Jð ‡‚Ð
0Ñ1Ô1ðð ð ñ 2Ô1ðð ‡‚ˆ|ÑÔðg?ð g?ð g?ñ Ôðg?ð g?ð g?rD   