§
    ¹XÂjÜ…  ã            	      ó<  — 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.m/Z/m0Z0m1Z1m2Z2 d dl3m4Z4 d dl5m6Z6m7Z7m8Z8m9Z9 d dl:m;Z; d dl<m=Z= d dl>m?Z? d dl@mAZA d dlBmCZC  ejD        d¦  «        ZE e"ejF         G                    d¦  «        ¬¦  «        ZH eIejF         G                    dd¦  «        ¦  «        ZJ e ejF         G                    dd¦  «        ¦  «        ZK e'ejF         G                    dd ¦  «        ¦  «        ZLejM         N                    ejM         O                    eP¦  «        d!d"¦  «        ZQ e%¦   «         ZR e;ejF         G                    d#d$¦  «        ¦  «        ZS eA¦   «         ZTd% e=eSeReT¬&¦  «        iZUejF         G                    d'd(¦  «        d)k    r e?eSeT¬&¦  «        eUd*<   d¶d-„ZVe	 G d.„ d/¦  «        ¦   «         ZW G d0„ d1e¦  «        ZX G d2„ d3e¦  «        ZY G d4„ d5e¦  «        ZZ G d6„ d7e¦  «        Z[i Z\d8e]d9<   d·d>„Z^d?„ Z_ e+ e,¦   «         d@„ dA„ e^e_dB„ ¦  «        Z`dC„ Za e/ejF         G                    dDdE¦  «        ¦  «        Zb e. e0¦   «          e1¦   «         ebdF„ e^e_ea¦  «        ZcdGdGdHœdI„ZddJ„ ZedK„ ZfdL„ Zgd¸dM„Zhd¹dN„ZidO„ ZjdP„ ZkedºdS„¦   «         Zl edTdUel¬V¦  «        Zmem n                    e6¦  «        d»dY„¦   «         Zod¼d\„Zpem G                    d]¦  «        d^„ ¦   «         Zqem r                    d_¦  «        d½db„¦   «         Zsem G                    dc¦  «        dd„ ¦   «         Ztem r                    dcde¬f¦  «        d¾di„¦   «         Zuem v                    djdk¬f¦  «        d¿dm„¦   «         Zwem G                    dn¦  «        do„ ¦   «         Zxem G                    dp¦  «        d¿dq„¦   «         Zyem G                    dr¦  «        dÀdt„¦   «         Zzem r                    du¦  «        dÀdv„¦   «         Z{em r                    dwdx¬f¦  «        dÁdz„¦   «         Z|em G                    d{¦  «        dÀd|„¦   «         Z}em r                    d{¦  «        dÂd~„¦   «         Z~em G                    d¦  «        dÃd€„¦   «         Zem G                    d�d‚¬ƒ¦  «        dÄd…„¦   «         Z€em G                    d†d‚¬ƒ¦  «        dÅdˆ„¦   «         Z�em G                    d‰d‚¬ƒ¦  «        dÅdŠ„¦   «         Z‚em G                    d‹¦  «        dÃdŒ„¦   «         Zƒem G                    d�¦  «        dÆd�„¦   «         Z„em G                    d�¦  «        dÃd‘„¦   «         Z…	 dÇdÈd”„Z†	 dÇdÉd•„Z‡dÊd˜„Zˆd™„ Z‰dËdš„ZŠi Z‹d›„ ZŒem r                    dœd‚¬ƒ¦  «         edG¬�¦  «        fdÌdŸ„¦   «         Z�em r                    d ¦  «        dÍd£„¦   «         ZŽem r                    d¤¦  «        dÎd¦„¦   «         Z�em r                    d§¦  «        dÏd©„¦   «         Z� G dª„ d«e¦  «        Z‘ G d¬„ d­e¦  «        Z’em r                    d®¦  «        dÐd¯„¦   «         Z“em r                    d°¦  «        dÑd±„¦   «         Z”em •                    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)Ú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© ó    úW/home/lighthouse/esp32-dev/.cache/network-resilience-0.5.1/server/device_gateway/app.pyÚutc_nowrE   7   s   € ÝŒ<�œÑ%Ô%Ð%rC   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   ÚhexrB   rC   rD   ú<lambda>zDevice.<lambda>A   s   € µu±w´w´{€ rC   )Údefault_factoryÚconnection_idTÚboolÚonliner   Ú	last_seenNzdict[str, Any] | NoneÚ
last_eventF)rP   Úreprzasyncio.LockÚsettings_lock)ÚdefaultrV   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)rI   rJ   rK   rS   r]   rT   rU   )	rI   rJ   rK   rS   Úsortedr]   rT   Ú	isoformatrU   )Úselfs    rD   ÚpubliczDevice.publicL   sI   € àœØ”ZØœØ”kÝ" 4Ô#4Ñ5Ô5Øœ×1Ò1Ñ3Ô3Øœ/ð
ð 
ð 	
rC   ©r=   r_   )Ú__name__Ú
__module__Ú__qualname__Ú__annotations__r   rQ   rS   rE   rT   rU   ÚasyncioÚLockrW   rY   rZ   r\   Úsetr]   r^   rd   rB   rC   rD   rG   rG   ;   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ð	
ð 	
ð 	
ð 	
ð 	
ð 	
rC   rG   c                  ó   — e Zd ZU ded<   dS )ÚApprovalDecisionzLiteral['approve', 'reject']ÚdecisionN©rf   rg   rh   ri   rB   rC   rD   rn   rn   X   s   € € € € € € Ø*Ð*Ð*Ñ*Ð*Ð*rC   rn   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_lengthrH   Útitleiô  ÚbodyN)rf   rg   rh   r   rx   ri   ry   rB   rC   rD   rr   rr   \   sR   € € € € € € Ø� !°Ð3Ñ3Ô3€EÐ3Ð3Ð3Ñ3Ø� ¨sÐ3Ñ3Ô3€DÐ3Ð3Ð3Ñ3Ð3Ð3rC   rr   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})$)ÚpatternrH   ÚtargetN©rf   rg   rh   r   r}   ri   rB   rC   rD   r{   r{   a   s1   € € € € € € Ø�%Ð ^Ð_Ñ_Ô_€FÐ_Ð_Ð_Ñ_Ð_Ð_rC   r{   c                  ó   — e Zd ZU ded<   dS )ÚNotificationTestzLiteral['done', 'failed']ÚkindNrp   rB   rC   rD   r€   r€   e   s   € € € € € € Ø#Ð#Ð#Ñ#Ð#Ð#rC   r€   zdict[str, Device]ÚdevicesÚdeviceÚpayloadr_   ÚNonec              ƒ  ó  K  — | j         r| j        €t          d¦  «        ‚| j        4 ƒd {V —† t	          j        | j                             |¦  «        d¦  «        ƒ d {V —† d d d ¦  «        ƒd {V —† d S # 1 ƒd {V —†swxY w Y   d S )Núdevice is offlineé   )rS   rL   ÚRuntimeErrorr^   rj   Úwait_forÚ	send_json)rƒ   r„   s     rD   Úsend_to_devicerŒ   l   sJ  è è € ØŒ=ð 0˜FÔ,Ð4ÝÐ.Ñ/Ô/Ð/ØÔð Gð Gð Gð Gð Gð Gð Gð GÝÔ˜vÔ/×9Ò9¸'ÑBÔBÀAÑFÔFÐFÐFÐFÐFÐFÐFÐFðGð Gð Gñ Gô Gð Gð Gð Gð Gð Gð Gð Gð Gð Gð Gð Gð Gð Gð Gð Gð Gð Gð Gð Gøøøð Gð Gð Gð Gð Gð Gs   ­4A4Á4
A>ÂA>c                ód   — t                                | j        ¦  «        | u o| j        o| j        d uS r?   )r‚   ÚgetrI   rS   rL   )rƒ   s    rD   Úcurrent_devicer�   t   s1   € Ý�;Š;�vÔ'Ñ(Ô(¨FÐ2Ðe°v´}ÐeÈÔIYÐaeÐIeÐerC   c                ó6   — t                                | ¦  «        S r?   ©Útarget_storerŽ   ©Údids    rD   rO   rO   x   s   € µL×4DÒ4DÀSÑ4IÔ4I€ rC   c                ó    — t          | ¦  «        S r?   )Úadapter_for©Úagents    rD   rO   rO   x   s   € ÕYdÐejÑYkÔYk€ rC   c                 óN   — t          t                               ¦   «         ¦  «        S r?   )rR   r8   Úlist_pendingrB   rC   rD   rO   rO   y   s   € ­Dµ×1GÒ1GÑ1IÔ1IÑ,JÔ,J€ rC   c                óÆ   — t           j                             | j        ¦  «        }t	          t
                               ¦   «         ¦  «        pt	          |o|j        dv ¦  «        S )N)Ú	RECORDINGÚTRANSCRIBINGÚAWAITING_CONFIRMATIONÚSENDING)ÚvoicesÚrequestsrŽ   rQ   rR   r8   rš   Ústate)rƒ   Úvoices     rD   Úspeech_blockedr¤   |   sd   € ÝŒO×Ò Ô 4Ñ5Ô5€EÝ•	×&Ò&Ñ(Ô(Ñ)Ô)ð  N­T°%ð  3M¸E¼Kð  LMð  =Mñ  .Nô  .Nð  NrC   ÚGATEWAY_SPEECH_FILEz*~/.config/esp32-device-gateway/speech.jsonc                ó6   — t                                | ¦  «        S r?   r‘   r“   s    rD   rO   rO   ƒ   s   € •× Ò  Ñ%Ô%€ rC   r[   ©ÚnameÚlatest_activityc          
     ó˜   — t          t                               ¦   «         ¦  «        D ]"}t                               || |||||¦  «         Œ#d S r?   )Úlistr‚   ÚvaluesÚspeechesÚterminal)r˜   Ú
session_idr¢   Ú
final_textr¨   r©   rƒ   s          rD   Úon_agent_terminalr±   †   sT   € Ý•w—~’~Ñ'Ô'Ñ(Ô(ð _ð _ˆÝ×Ò˜& %¨°U¸JÈÈoÑ^Ô^Ð^Ð^ð_ð _rC   c                ó(  — t                                ¦   «         rdt          t                               ¦   «         ¦  «        D ]=}t
                               |¦  «         t                               |¦  «         d |_        Œ>|  	                    ¦   «          d S r?   )
r8   rš   r«   r‚   r¬   r­   Úcancelr    rZ   rl   )Úchangedrƒ   s     rD   Úapprovals_changedrµ   ‹   sw   € Ý×ÒÑÔð &Ý�7Ÿ>š>Ñ+Ô+Ñ,Ô,ð 	&ð 	&ˆFÝ�OŠO˜FÑ#Ô#Ð#Ý�MŠM˜&Ñ!Ô!Ð!Ø!%ˆFÔÐØ‡K‚K�M„M€M€M€MrC   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)rZ   rŽ   rW   Ú_device_settings)rƒ   Úevents     rD   Ú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¹   rs   é@   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�   rZ   r’   rŽ   rI   r8   rš   )rƒ   Úridr}   s   €€€rD   Ú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rC   Úsettings_applyÚsettings)Ústill_validc                ó*   — g | ]}|j         ¯	|j         ‘ŒS rB   )Úmodel)Ú.0Úss     rD   ú
<listcomp>z$_device_settings.<locals>.<listcomp>½   s8   € ð  ,Að  ,Að  ,A¸ÐxyÔxð  ,A¨A¬Gð  ,Að  ,Að  ,ArC   c                ó   — | j         S r?   )Ú
updated_at)rÌ   s    rD   rO   z"_device_settings.<locals>.<lambda>½   s
   € ÐYZÔYe€ rC   T)ÚkeyÚreverseÚsettings_updatedÚsettings_state)r·   r¹   r}   r¨   zUPDATE FAILEDrB   )rŽ   Ú
isinstancerH   ÚlenrZ   r’   rI   r   rŒ   r8   rš   r�   r–   Úget_sessionÚupdate_settingsr)   Úmodel_validateÚget_settingsÚlist_sessionsÚproject_registryÚ
project_idr%   ra   Údictr¨   Ú	Exceptionr&   Údetail)rƒ   r»   ÚparsedrÅ   r˜   ÚsidÚadapterÚsessionrÇ   ÚrecentÚexcrÄ   r}   s   `          @@rD   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¬   rS   rL   rŒ   rÞ   r­   r³   r    rZ   r   ÚcloserE   rT   ÚloggerÚwarningrI   )r„   rƒ   s     rD   Ú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_targetsrj   ÚsleepÚsnapshot_interval_seconds©Úsnapshots    rD   Úmonitor_systemrú   Ú   sŽ   è è € ð7Ý#×+Ò+Ñ-Ô-ˆÝ'¨×(;Ò(;Ñ(=Ô(=Ñ>Ô>Ð>Ð>Ð>Ð>Ð>Ð>Ð>Ý Ñ"Ô"Ð"Ð"Ð"Ð"Ð"Ð"Ð"ÝŒmÕ5Ñ6Ô6Ð6Ð6Ð6Ð6Ð6Ð6Ð6ð	7rC   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   rˆ   FTrç   rê   rë   )r«   r‚   r¬   rQ   rS   rL   r8   ÚpresentationsÚpoprŽ   r¢   rŒ   rš   r­   r³   r    rZ   rÿ   rj   rŠ   ÚwirerÞ   r   rí   Úpi_sessionsÚsessionsÚpush_selected_pi_sessionr¯   )rƒ   Ú
connectionÚ
current_idÚcurrentÚpendingÚapprovalrã   s          rD   Ú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    rD   Úapproval_deliveryr  
  s[   è è € ð&Ø�lŠl‰nŒnÐÐÐÐÐÐÐØ�Š‰ŒˆÝ#Ñ%Ô%Ð%Ð%Ð%Ð%Ð%Ð%Ð%ð&rC   Ú_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   €rD   rO   zlifespan.<locals>.<lambda>  s   ø€ Õ"3°GÑ"<Ô"<€ rC   r<   zapproval-delivery)r¨   zsystem-monitorc              3  ó>   K  — | ]}|                      ¦   «         V — Œd S r?   )rí   )rË   râ   s     rD   ú	<genexpr>zlifespan.<locals>.<genexpr>#  s*   è è € ÐPÐP°7˜wŸ}š}™œÐPÐPÐPÐPÐPÐPrC   )rj   ÚEventr8   Ú	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        @rD   Ú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)rx   Úversionr$  rå   r&   c              ƒ  ó@   K  — t          |j        d|j        i¬¦  «        S )Nrß   )Ústatus_codeÚcontent)r   Ústatusrß   )Úrequestrå   s     rD   Úcontrol_error_handlerr,  /  s"   è è € å C¤J¸À3Ä:Ð8NÐOÑOÔOÐOrC   r˜   rH   c                óN   — | t           vrt          dd¦  «        ‚t           |          S )Nzagent adapter not enabledé”  )r  r&   r—   s    rD   r–   r–   4  s(   € Ø•HÐÐÝÐ6¸Ñ<Ô<Ð<Ý�EŒ?ÐrC   z/api/approvalsc               ƒ  óL   K  — d„ t                                ¦   «         D ¦   «         S )Nc                ó:   — g | ]}|                      d ¬¦  «        ‘ŒS )Újson)Úmode)rô   )rË   r
  s     rD   rÍ   z"list_approvals.<locals>.<listcomp><  s)   € ÐVÐVÐV°ˆH×Ò VÐÑ,Ô,ÐVÐVÐVrC   )r8   rš   rB   rC   rD   Úlist_approvalsr3  :  s&   è è € àVÐV½Y×=SÒ=SÑ=UÔ=UÐVÑVÔVÐVrC   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¢   )r8   Úresolvero   r   rŽ   r¢   )rÿ   r4  s     rD   Údecide_approvalr:  ?  sU   è è € å×Ò˜[¨%¬.Ñ9Ô9ð _Ý¨Ð4]Ð^Ñ^Ô^Ð^Ø¨[Å9Ç=Â=ÐQ\ÑC]ÔC]ÔCcÐdÐdÐdrC   z/api/projectsc               ƒ  ó8   K  — t                                ¦   «         S r?   )rÛ   r«   rB   rC   rD   Úlist_projectsr<  F  s   è è € å× Ò Ñ"Ô"Ð"rC   éÉ   ©r(  Úprojectr(   c              ƒ  ó:   K  — t                                | ¦  «        S r?   )rÛ   Úadd)r?  s    rD   Úadd_projectrB  K  s   è è € å×Ò Ñ(Ô(Ð(rC   z/api/projects/{project_id}éÌ   rÜ   c              ƒ  ó>   K  — t                                | ¦  «         d S r?   )rÛ   Údelete)rÜ   s    rD   Údelete_projectrF  P  s    è è € å×Ò˜JÑ'Ô'Ð'Ð'Ð'rC   z/api/agentsc               ƒ  ó(   K  — d„ t           D ¦   «         S )Nc                ó   — g | ]	}|g d ¢dœ‘Œ
S ))rÚ   Úresume_sessionÚ
send_inputrÙ   Úlist_modelsr×   )r˜   r]   rB   )rË   r¨   s     rD   rÍ   zlist_agents.<locals>.<listcomp>W  sM   € ð  gð  gð  gð  VZ�dð  -Pð  -Pð  -Pð  Qð  Qð  gð  gð  grC   )r  rB   rC   rD   Úlist_agentsrL  U  s1   è è € ð gð  gõ  ^fð  gñ  gô  gð  grC   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â   r?  s     €rD   r  z#project_sessions.<locals>.<genexpr>^  s1   øè è € Ð$eÐ$eÈ W×%:Ò%:¸7Ñ%CÔ%CÐ$eÐ$eÐ$eÐ$eÐ$eÐ$erC   Úreturn_exceptionsTzagent catalog unavailable)r  Úerrors)rÛ   rŽ   rj   r  r  r¬   ÚziprÔ   rÞ   r&   rß   Úextend)rÜ   r  rP  Úresultsr¨   Úresultr?  s         @rD   Úproject_sessionsrU  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Ð3rC   z)/api/agents/{agent}/sessions/{session_id}r¯   c              ƒ  óV   K  — t          | ¦  «                             |¦  «        ƒ d {V —†S r?   )r–   rÖ   ©r˜   r¯   s     rD   Úget_agent_sessionrX  g  s4   è è € å˜UÑ#Ô#×/Ò/°
Ñ;Ô;Ð;Ð;Ð;Ð;Ð;Ð;Ð;rC   z0/api/agents/{agent}/sessions/{session_id}/resumec              ƒ  ód   K  — t          | ¦  «                             |¦  «        ƒ d {V —†}d| ||dœS )NT)r8  r˜   r¯   Úresumed)r–   rI  )r˜   r¯   rZ  s      rD   Úresume_agent_sessionr[  l  sF   è è € å Ñ&Ô&×5Ò5°jÑAÔAÐAÐAÐAÐAÐAÐA€GØ u¸JÐSZÐ[Ð[Ð[rC   z//api/agents/{agent}/sessions/{session_id}/inputéÊ   r'   c              ƒ  ób   K  — t          | ¦  «                             ||j        ¦  «        ƒ d {V —†S r?   )r–   rJ  Útext©r˜   r¯   r4  s      rD   Úagent_inputr`  r  s8   è è € å˜UÑ#Ô#×.Ò.¨z¸5¼:ÑFÔFÐFÐFÐFÐFÐFÐFÐFrC   z2/api/agents/{agent}/sessions/{session_id}/settingsc              ƒ  óV   K  — t          | ¦  «                             |¦  «        ƒ d {V —†S r?   )r–   rÙ   rW  s     rD   rÙ   rÙ   w  s4   è è € å˜UÑ#Ô#×0Ò0°Ñ<Ô<Ð<Ð<Ð<Ð<Ð<Ð<Ð<rC   r)   c              ƒ  óX   K  — t          | ¦  «                             ||¦  «        ƒ d {V —†S r?   )r–   r×   r_  s      rD   r×   r×   |  s6   è è € å˜UÑ#Ô#×3Ò3°JÀÑFÔFÐFÐFÐFÐFÐFÐFÐFrC   z/healthc               ƒ  ón   K  — ddt          d„ t                               ¦   «         D ¦   «         ¦  «        dœS )NÚokr%  c              3  ó$   K  — | ]}|j         V — Œd S r?   )rS   )rË   Úds     rD   r  zhealth.<locals>.<genexpr>ƒ  s%   è è € ÐMqÐMqÐ[\ÈaÌhÐMqÐMqÐMqÐMqÐMqÐMqrC   )r*  Úcontrol_versionÚonline_devices)Úsumr‚   r¬   rB   rC   rD   Úhealthrj  �  s:   è è € à¨wÍ#ÐMqÐMqÕ`g×`nÒ`nÑ`pÔ`pÐMqÑMqÔMqÑJqÔJqÐrÐrÐrrC   ú/F)Úinclude_in_schemar   c               ƒ  ó(   K  — t          dd¬¦  «        S )Nú/admini3  r>  )r   rB   rC   rD   Úrootro  †  s   è è € å˜H°#Ð6Ñ6Ô6Ð6rC   rn  r   c               ƒ  ó2   K  — t          t          d¬¦  «        S )Nz	text/html©Ú
media_type)r   Úadmin_page_pathrB   rC   rD   Ú
admin_pagert  ‹  s   è è € å�°KÐ@Ñ@Ô@Ð@rC   z/api/admin.jsc               ƒ  ó¨   K  — t          t          j                             t          j                             t
          ¦  «        d¦  «        d¬¦  «        S )Nzadmin.jsztext/javascriptrq  )r   ÚosÚpathÚjoinÚdirnamers  rB   rC   rD   Úadmin_scriptrz  �  s8   è è € å�œŸš¥R¤W§_¢_µ_Ñ%EÔ%EÀzÑRÔRÐ_pÐqÑqÔqÐqrC   z/serverc               ƒ  óx   K  — t           j        pt                                ¦   «         } |                      ¦   «         S r?   )rò   Úlatestró   rô   rø   s    rD   Úserver_statusr}  •  s2   è è € åÔ&ÐDÕ*:×*BÒ*BÑ*DÔ*D€HØ×ÒÑ Ô Ð rC   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?   )rI   )rf  s    rD   rO   zlist_devices.<locals>.<lambda>ž  s   € ¸¼€ rC   )rÐ   r}   Úspeech_mode)
ra   r‚   r¬   rd   r’   rŽ   rI   r­   ÚpreferencesÚappend)rT  rƒ   Úitems      rD   Úlist_devicesr…  ›  sš   è è € à€FÝ�ŸšÑ)Ô)Ð/DÐ/DÐEÑEÔEð ð ˆØ�}Š}‰ŒˆÝ%×)Ò)¨&Ô*:Ñ;Ô;ˆˆX‰Ý&Ô2×6Ò6°vÔ7GÈÈhÌÑXÔXˆˆ]ÑØ�Š�dÑÔÐÐØ€MrC   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 )	Nr7   r¯   ÚWAITING_APPROVALr¢   r   ú: Úwaiting_reason)Úserverr‚   r  )rò   r|  ró   r  rd   r8   rš   rx   rß   rô   r…  )rù   r  rã   r	  s       rD   Ú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Ð$Ñ%øà×%Ò%Ñ'Ô'Ý%™œÐ'Ð'Ð'Ð'Ð'Ð'Øðð ð rC   Ú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_stater7   ú	agent:pi:r[   ÚOFFLINEr   )	r·   r˜   r}   r¯   r¨   Úcwdr¢   Úelapsed_secondsr‰  )r·   r˜   r}   T)Úinclude_historyr‡  r¢   rˆ  r‰  rŒ  )r  rŽ   rd   r8   rš   rx   rß   )r¯   rŒ  rã   r„   r	  s        rD   Ú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ˆÐ Ñ!ØÐØ".ˆ�ÑØ€NrC   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Ž   rI   rŒ   rÞ   r­   r³   r    rZ   rL   r   rí   rS   rE   rT   )r¯   rŒ  r„   rƒ   s       rD   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_activityr7   r�  )r·   r˜   r}   r¯   Úactivity_typeÚactivityrÏ   FTrç   rê   rë   )r  rŽ   r¯   r©   rš  Úactivity_updated_atrb   r«   r‚   r¬   r’   rI   rŒ   rÞ   r­   r³   r    rZ   rL   r   rí   rS   rE   rT   )r»   rã   r„   rƒ   s       rD   Ú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)rP  r7   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         rD   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   rs   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Ž   rI   r   r�   r—  rŒ   rÝ   r\   ÚlowerrÞ   rî   rï   )	r˜   rá   r›  Úcacherƒ   r}   rà   r„   Úoutgoings	            rD   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›  )rj   rö   rõ   Ú_codex_push_tasksr  )rá   s   €rD   Ú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   `  rD   r  r  9  sU   ø€ ð-ð -ð -ð -ð -ð Õ#Ð#Ð#Ý!'§¢¨g¨g©i¬iÑ!8Ô!8Õ˜#ÑÐÐð $Ð#rC   z/integrations/pi/events)rX   Ú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 tokenr7  )Úsession_shutdownÚ	agent_endr7   r¹  r§   r›  T)r8  rã   )Úcredential_storeÚauthenticate_pir   r  Úapplyr»   r8   Úcancel_sessionr¯   Úpending_notificationr±   r¢   r°   r¨   r©   r�  r  rd   )r»   r¶  rã   s      rD   Ú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Ð:Ð:Ð:rC   z/devices/{device_id}/targetrI   Ú	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 )Nr.  údevice not foundr7  r7   r[   Fr¢   Trç   rê   rë   )rI   r}   Ú	delivered)r‚   r   r   r}   r   r  rŽ   r–   rÖ   r’   r­   r³   r    rZ   r\   rl   r�   r—  rŒ   rÇ   rÞ   rL   r   rí   rS   )	rI   rÀ  r}   rà   r˜   rá   rƒ   rÃ  r„   s	            rD   Ú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 )Nr.  rÂ  r7  r6  r‡   Údisplay_message)r·   rx   ry   Fúdevice disconnectedz!sent display_message to device %sT)ÚsentrI   rÁ   )r‚   rŽ   r   rS   rL   rx   ry   rŒ   rÞ   rî   Úinfo)rI   rÁ   rƒ   r„   rå   s        rD   Ú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 )Nr.  rÂ  r7  r6  r‡   Únotification_test)r·   r�   FrÇ  z&sent %s notification test to device %sT)rÈ  rI   r�   )
r‚   rŽ   r   rS   rL   rŒ   r�   rÞ   rî   rÉ  )rI   r+  rƒ   rå   s       rD   Ú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 )	ÚSpeechSelectionrs   é¾   ru   rH   r}   z6Literal['OFF', 'MANUAL', 'AUTO_REPLY', 'AUTO_SUMMARY']r2  Nr~   rB   rC   rD   rÏ  rÏ  £  s>   € € € € € € Ø�% 1°Ð5Ñ5Ô5€FÐ5Ð5Ð5Ñ5Ø@Ð@Ð@Ñ@Ð@Ð@rC   rÏ  c                  ó<   — e Zd ZU  edd¬¦  «        Zded<   ddiZdS )	Ú
SpeechTestrs   rÐ  ru   rH   r}   ÚextraÚforbidN)rf   rg   rh   r   r}   ri   Úmodel_configrB   rC   rD   rÒ  rÒ  ¨  s:   € € € € € € Ø�% 1°Ð5Ñ5Ô5€FÐ5Ð5Ð5Ñ5Ø˜XÐ&€L€L€LrC   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 )Nr.  úDevice not foundr6  ú Target changed; refresh settings)r2  r}   )r‚   rŽ   r   r’   r   r}   r­   r³   r‚  rl   r2  rÇ   ©rI   r4  rƒ   s      rD   Ú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ÐIrC   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 )
Nr.  r×  r6  rØ  Úscreenu   è¯­éŸ³æ’­æ”¾æµ‹è¯•æˆ�åŠŸã€‚zASpeech unavailable, device busy or firmware lacks speech_playbackr8  T)r‚   rŽ   r   r’   r   r}   r­   r  rÙ  s      rD   Ú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Ø˜ÐÐrC   z
/device/wsrL   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)rI   Údevice_tokenrJ   rK   c              3  ó|   •K  — | ]6}t          ‰                     |¦  «        t          ¦  «         p‰|          V — Œ7d S r?   )rÔ   rŽ   rH   )rË   rÐ   rß  s     €rD   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ÐYrC   zinvalid hellorI   rá  zrejected unauthorized device %szunauthorized deviceiô  zreplaced by a new connectionrJ   rK   r]   c                ó<   — h | ]}t          |t          ¦  «        ¯|’ŒS rB   )rÔ   rH   )rË   Úvs     rD   ú	<setcomp>z#device_websocket.<locals>.<setcomp>å  s)   € ÐYÐYÐY ÅjÐQRÕTWÑFXÔFXÐY˜!ÐYÐYÐYrC   )rI   rJ   rK   rL   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ÿ   ro   )Ú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    rZ   r8   r   r  rQ   r‚   rI   rL   r   rÞ   rS   rE   rT   rî   rÉ  Úanyrº  Úauthenticaterï   rG   r«   rl   rŒ   rò   r|  ró   rô   r’   r—  r\   rÇ   r´   rJ   rK   rH   Ú
startswithrU   Úhandler¼   rY   Údoner´  r9  Údebugr   Ú	exception)
rL   rƒ   ÚrequiredrI   Úpreviousrù   r}   r„   r»   rß  s
            @rD   Ú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ƒ   rG   r„   r_   r=   r…   )r„   r_   r=   r…   )r=   r…   )r  r   )rå   r&   )r˜   rH   )rÿ   rH   r4  rn   )r?  r(   )rÜ   rH   )r˜   rH   r¯   rH   )r˜   rH   r¯   rH   r4  r'   )r˜   rH   r¯   rH   r4  r)   re   )r=   r   )r=   r   )r=   r~  r?   )r¯   rH   rŒ  r�  r=   r_   )r¯   rH   rŒ  r�  r=   r…   )r»   r   r=   r…   )NNF)r»   r   r¶  rH   r=   r_   )rI   rH   rÀ  r{   r=   r_   )rI   rH   rÁ   rr   r=   r_   )rI   rH   r+  r€   r=   r_   )rI   rH   r4  rÏ  )rI   rH   r4  rÒ  )rL   r   r=   r…   )—Ú
__future__r   rj   Úloggingrv  Ú
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.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’   rw  rx  ry  Ú__file__rs  r  rÛ   r8   r  rE   rG   rn   rr   r{   r€   r‚   ri   rŒ   r�   r    r¤   Úspeech_preferencesr­   r±   rµ   r¼   rº   rð   rú   r  r  r$  ÚappÚexception_handlerr,  r–   r3  Úpostr:  r<  rB  rE  rF  rL  rU  rX  r[  r`  rÙ   r×   rj  ro  rt  rz  r}  r…  r‹  r•  r  r�  r—  rõ   r²  r  r¿  rÄ  rÊ  rÍ  rÏ  rÒ  rÚ  rÝ  rL   rþ  rB   rC   rD   ú<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ñ $ô $ð $ð  €Ð Ð Ð Ñ ðGð Gð Gð Gð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?rC   