+
    jHàj¼  ã                  óH  € R t ^ RIHt ^ RIt^ RIt^ RIHtHtHt ^ RI	H
t
Ht ^ RIHt ^ RIHtHt ^ RIHt ^ RIHt ^ R	IHt ^ R
IHt ^ RIHt ^ RIHt ^t^t^t^
t ^t!R¤t"R¤t#Rt$]]%]3,          t&]R¥,          t']R¦,          t(]PR                  ! R]PT                  4      t+]PR                  ! RRPY                  R ] 4       4      ,           R,           ]PT                  4      t-Rt.]PR                  ! R4      t/R]0! RR04      R]0! 0 R§m4      /t1]0! 0 R¨m4      t2]0! RR04      t3]0! 0 R©m4      t4]4R0,          t5Rª U Uu/ uF  w  rV ]4R!0Vm,          bK  	  upp t6R]0! R"04      /t7]0! ]64      t8R#]0! 0 R«m4      R¬3R$]0! R%04      R­3/t9]8R&0]9m,          t: ! R' R(];4      t< ! R) R*]<4      t= ! R+ R,]<4      t>]! R-R.7       ! R/ R04      4       t?]! R-R.7       ! R1 R24      4       t@]! R-R.7       ! R3 R44      4       tA]! R-R.7       ! R5 R64      4       tB]! R-R.7       ! R7 R84      4       tC]! R-R.7       ! R9 R:4      4       tD]! R-R.7       ! R; R<4      4       tE]! ]PŒ                  ]=]PŽ                  R=7      tH]! ]P’                  ]=R>7      tJ]! ]P–                  ]=R>7      tL]! ]Pš                  ]=R>7      tNR? R@ ltORA RB ltPRC RD ltQRER-/RF RG lltRRH RI ltSRJ RK ltTRL RM ltURN RO ltVRP RQ ltWRR RS ltXRT RU ltYRV RW ltZRXR-/RY RZ llt[R[ R\ lt\R] R^ lt]R_ R` lt^Ra Rb lt_Rc Rd lt`Re Rf ltaRg Rh ltbRi Rj ltcRk]`R&]a/]dPË                  ]8]b4      C]dPË                  ]9]c4      CtfRl Rm ltgRn Ro lthRp Rq ltiRr Rs ltjRt Ru ltkRv Rw ltlRx Ry ltmRzR{/R| R} lltnR~ R ltoR€RR�R®/R‚ Rƒ lltpR„ R… ltqR† R‡ ltrRˆ R‰ ltsRŠ R‹ lttRŒ R� ltuRŽRR�R�/R‘ R’ lltvR“ R” ltwR• R– ltxR— R˜ lty]z]d]%]3,          ]{]C,          3,          t|R™ Rš lt}R› Rœ lt~R� Rž ltRŸ R  lt€R]}R]~R]R]€/t�R¡RR R/R¢ R£ llt‚R# u upp i )¯aæ  Deterministic policy for same-gateway hosted-room Discussions.

Pure (no I/O, transport or model knowledge): a frozen local roster plus the complete typed room log yields
at most one next driver task. Discussion coordinates live in deterministic ``TaskIdentity`` values and typed
terminal events rather than a widened driver payload, so a restart reconstructs tasks from durable state.
Callers must reconcile terminal driver rows into publication plans before asking for the next task.
)ÚannotationsN)ÚIterableÚMappingÚSequence)ÚasdictÚ	dataclass)Úpartial)ÚAnyÚLiteral)ÚCONTROL_FRAME_OPENERS)Úhosted_room_driver)Úhosted_rooms)Úhosted_rooms_common)Úvalidate_task_input)Úcompact_jsonzD

[Reply truncated. Ask the Bot to share the full result as a file.]ÚsettledÚfailedÚ	cancelledÚdeferredz@([A-Za-z0-9][A-Za-z0-9._:-]*)z\[(?=Ú|c              #  óD   "  € T F  qP                  R R4      x € K  	  R# 5i)Ú]z\]N)Úreplace)Ú.0Úopeners   & ÚC/home/ubuntu/.hermes/hermes-agent/gateway/hosted_room_discussion.pyÚ	<genexpr>r   .   s   é € ÐWÑAV°vŸ™ s¨E×2Ð2ÓAVùs   ‚ Ú)z[member-quoted zv^d(?P<source>[1-9][0-9]*)\.r(?P<round>[0-2])\.p(?P<position>[0-5])\.s(?P<seen>[1-9][0-9]*)\.m(?P<member>[0-9a-f]{24})$ÚlocalÚkindÚprofileÚpeerÚtextÚ	thread_idúturn.failedÚexecution_generationÚseen_through_seqÚreason_codeúroom.activityúroom.stop_requestedÚ	cancel_idúmessage.memberc                  ó   € ] tR t^PtRtRtR# )ÚDiscussionPolicyErrorz?Base class for invalid policy input or unreconstructable state.© N©Ú__name__Ú
__module__Ú__qualname__Ú__firstlineno__Ú__doc__Ú__static_attributes__r.   ó    r   r-   r-   P   s   † Õ)nr6   r-   c                  ó   € ] tR t^RtRtRtR# )ÚDiscussionValidationErrorzARaised when a room, roster, payload, or typed event is malformed.r.   Nr/   r.   r6   r   r8   r8   R   s   † ÝKr6   r8   c                  ó   € ] tR t^UtRtRtR# )ÚDiscussionReconstructionErrorzERaised when a persisted task cannot be reproduced from durable state.r.   Nr/   r.   r6   r   r:   r:   U   s   † ÝOr6   r:   T)Úfrozenc                  óV   € ] tR t^Yt$ RtR]R&   R]R&   R]R&   RtR]R&   RtR	]R
&   RtR# )ÚDiscussionMemberz6One immutable local or peer member of the hosted room.ÚstrÚ	member_idr    ÚhandleÚ Údisplay_nameNúMapping[str, Any] | NoneÚtargetr.   )	r0   r1   r2   r3   r4   Ú__annotations__rB   rD   r5   r.   r6   r   r=   r=   Y   s)   ‡ á@ØƒNØƒLØƒKØ€L�#ÓØ'+€FÐ$×+r6   r=   c                  óN   € ] tR t^ct$ RtR]R&   R]R&   R]R&   R]R&   R]R	&   R
tR# )ÚDiscussionRoomz6Validated policy projection of one active hosted room.r>   Úroom_idÚnameútuple[DiscussionMember, ...]ÚmembersÚ
gateway_idÚintÚauthority_epochr.   N©r0   r1   r2   r3   r4   rE   r5   r.   r6   r   rG   rG   c   s    ‡ á@ØƒLØ
ƒIØ)Ó)ØƒOØ×r6   rG   c                  ób   € ] tR t^mt$ RtR]R&   R]R&   R]R&   R]R	&   R
]R&   R
]R&   R
]R&   RtR# )ÚDiscussionTaskPlanz@One deterministic member turn compatible with the driver schema.zdriver.TaskIdentityÚidentityúMapping[str, Any]Úpayloadr>   Údiscussion_event_idr=   ÚmemberrM   Úmember_indexÚround_indexr&   r.   NrO   r.   r6   r   rQ   rQ   m   s/   ‡ áJØ!Ó!ØÓØÓØÓØÓØÓØ×r6   rQ   c                  óh   € ] tR t^yt$ RtR]R&   R]R&   RtR]R&   RtR	]R
&   RtR]R&   Rt	R]R&   Rt
R# )ÚDiscussionDecisionz9Current result of replaying one room's Discussion policy.ÚDecisionStatusÚstatusr>   ÚreasonNú
str | NonerU   ú
int | NoneÚsource_event_seqr#   zDiscussionTaskPlan | NoneÚtaskr.   )r0   r1   r2   r3   r4   rE   rU   r`   r#   ra   r5   r.   r6   r   rZ   rZ   y   s;   ‡ áCØÓØƒKØ&*Ð˜Ó*Ø#'Ð�jÓ'Ø €IˆzÓ Ø&*€DÐ
#×*r6   rZ   c                  ód   € ] tR t^„t$ RtR]R&   R]R&   R]R&   R]R&   R]R	&   R
]R&   R R ltRtR# )Ú	EventPlanzDOne idempotent append for :func:`gateway.hosted_rooms.append_event`.r>   Úevent_idr   zMapping[str, str]ÚactorrS   rT   Úauthority_gateway_idrM   rN   c               ó    € V ^8„  d   QhRRRR/# )é   rH   r>   Úreturnúdict[str, Any]r.   )Úformats   "r   Ú__annotate__ÚEventPlan.__annotate__Ž   s   € ÷ 4ñ 4 Sð 4¨^ñ 4r6   c                ó    € RV/\        V 4      C# )zZReturn keyword arguments accepted by ``append_event`` (field order matches the dataclass).rH   )r   )ÚselfrH   s   &&r   Úappend_kwargsÚEventPlan.append_kwargsŽ   s   € à˜7Ð3¤f¨T£lÐ3Ð3r6   r.   N)r0   r1   r2   r3   r4   rE   rp   r5   r.   r6   r   rc   rc   „   s1   ‡ áNØƒMØ
ƒIØÓØÓØÓØÓ÷4ñ 4r6   rc   c                  ó:   € ] tR t^“t$ RtR]R&   R]R&   R]R&   RtR# )	ÚPublicationPlanz9Ordered visible and terminal effects for one driver task.r>   Útask_idÚterminal_kindztuple[EventPlan, ...]Úeventsr.   NrO   r.   r6   r   rs   rs   “   s   ‡ áCØƒLØÓØ!×!r6   rs   c                  óT   € ] tR t^›t$ R]R&   R]R&   R]R&   R]R&   R]R&   R]R	&   R
tR# )Ú_ValidatedEventÚPayloadÚrawrM   Úseqr>   rd   r   re   rT   r.   N)r0   r1   r2   r3   rE   r5   r.   r6   r   rx   rx   ›   s!   ‡ à	ƒLØ	ƒHØƒMØ
ƒIØƒNØ×r6   rx   )ÚerrorÚ	max_chars©r|   c               ó$   € V ^8„  d   QhRRRRRR/# )rh   Úvaluer	   Úlabelr>   ri   rM   r.   )rk   s   "r   rl   rl   «   s&   € ÷ Uñ U˜ð U¨ð U°ñ Ur6   c               ó"   € \        W R 2^R7      # )z must be a positive integer©ÚmessageÚlow©Ú_bounded_int)r€   r�   s   &$r   Ú_positive_intrˆ   «   s   € Ü˜¨Ð0KÐ'LÐRSÔTÐTr6   c               ó(   € V ^8„  d   QhRRRRRRRR/# )rh   r€   r	   r�   r>   ÚmaximumrM   ri   r.   )rk   s   "r   rl   rl   ¯   s.   € ÷ lñ l˜3ð l¨#ð l¸ð lÀñ lr6   c               ó&   € \        W R V 2VR7      # )z" must be an integer between 0 and )r„   Úhighr†   )r€   r�   rŠ   s   &$$r   Ú_zero_based_intr�   ¯   s   € Ü˜¨Ð0RÐSZÐR[Ð'\ÐcjÔkÐkr6   c               ó    € V ^8„  d   QhRRRR/# )rh   rV   r=   ri   r^   r.   )rk   s   "r   rl   rl   ³   s   € ÷ Vñ VÐ%ð V¨*ñ Vr6   c                ó|   € V P                   pV'       d(   VP                  R 4      R8X  d   VP                  R4      # R# )r   r!   Úpeer_idN)rD   Úget©rV   rD   s   & r   Ú_peer_idr“   ³   s2   € Ø�]‰]€Fß$*¨v¯z©z¸&Ó/AÀVÔ/Kˆ6�:‰:�iÓ ÐUÐQUÐUr6   rB   c               ó$   € V ^8„  d   QhRRRRRR/# )rh   rV   r=   rB   Úboolri   rj   r.   )rk   s   "r   rl   rl   ¸   s"   € ÷ ñ Ð*ð ¸Tð È^ñ r6   c               ó¶   € RRRV P                   RV P                  /p\        V 4      ;pe   W2R&   V'       d"   V P                  '       d   V P                  VR&   V# )zZMember actor for the room log; ``connection_id`` (and ``display_name``) only when present.r   rV   Úidr    Úconnection_idrB   )r?   r    r“   rB   )rV   rB   re   r�   s   &$  r   Ú_member_actorr™   ¸   sY   € à�X˜t V×%5Ñ%5°yÀ&Ç.Á.ÐQ€EÜ˜FÓ#Ð#ˆÒ0Ø!(ˆoÑß˜×+×+Ð+Ø &× 3Ñ 3ˆˆnÑØ€Lr6   c               ó   € V ^8„  d   QhRR/# )rh   ri   zfrozenset[str]r.   )rk   s   "r   rl   rl   Â   s   € ÷ ñ ˜nñ r6   c                 ó   € ^ RI Hp  V # )é    ©ÚALL_REASONS)Útools.bot_failure_reasonsrž   r�   s    r   Ú_all_failure_reasonsr    Â   s   € Ý5ØÐr6   c               ó    € V ^8„  d   QhRRRR/# )rh   r€   r	   ri   rj   r.   )rk   s   "r   rl   rl   Ç   s   € ÷ ñ  ð ¨ñ r6   c                óÂ  € \        V R\        R0R7      pR\        VR,          RR7      /pRV9   d   \        VR,          4      VR&   VR,          p\	        V\
        4      '       d$   \        VP                  R4      4      \        8”  d   \        R4      hVP                  4       '       g#   VP                  R4      '       g   \        R	4      hVP                  4       VR&   V# )
zEValidate and normalize the exact ``message.user`` Discussion payload.zuser payloadÚattachments©r�   ÚrequiredÚoptionalr#   ©r�   r"   úutf-8z*user payload text must be a bounded stringz-user payload must contain text or attachments)Ú_exact_fieldsÚ_USER_PAYLOAD_FIELDSÚ_identifierÚ_message_manifestÚ
isinstancer>   ÚlenÚencodeÚMAX_USER_TEXT_BYTESr8   Ústripr‘   )r€   rT   Ú
normalizedr"   s   &   r   Úvalidate_user_payloadr³   Ç   s½   € ä˜E¨ÔBVÐboÐapÔq€GØ"-¬{¸7À;Õ;OÐWbÔ/cÐ!d€JØ˜ÔÜ$5°g¸mÕ6LÓ$Mˆ
�=Ñ!Ø�6�?€DÜ�dœC× Ò ¤C¨¯©°GÓ(<Ó$=Ô@SÔ$SÜ'Ð(TÓUÐUØ�:‰:�<Š< 
§¡¨}× =Ò =Ü'Ð(WÓXÐXØŸ™›€JˆvÑØÐr6   c               ó    € V ^8„  d   QhRRRR/# )rh   r€   r	   ri   úlist[dict[str, Any]]r.   )rk   s   "r   rl   rl   Ö   s   € ÷ ;ñ ;˜Sð ;Ð%9ñ ;r6   c                óp   € ^ RI Hp  V! V 4      #   \         d   p\        \	        T4      4      ThRp?ii ; i)rœ   )Úvalidate_manifestN)Úgateway.hosted_room_attachmentsr·   Ú
ValueErrorr8   r>   )r€   r·   Úexcs   &  r   r¬   r¬   Ö   s6   € ÝAð;Ù  Ó'Ð'øÜô ;Ü'¬¨C«Ó1°sÐ:ûð;ús   ˆ �5›0°5c          
     ó,   € V ^8„  d   QhRRRRRRRRR	R
/# )rh   r€   r	   r    r>   Úknown_profilesúset[str]ÚindexrM   ri   rj   r.   )rk   s   "r   rl   rl   ß   s8   € ÷ @ñ @ 3ð @°Cð @Èð @ÐZ]ð @Ðbpñ @r6   c               óú  € V f   W9  d   \        RV RV R24      hRRRV/# \        V \        4      '       g   \        RV R24      hV P                  R4      pV\        9  d   \        RV R24      h\        V RV R	V R
2\        V,          R7      p\        VR,          RV R2R7      pVR8X  d4   Wa8w  d   \        RV R24      hW9  d   \        RV RV R24      hRRRV/# Wa8w  d   \        RV R24      hVR,          p\        V\        4      '       d   \        P                  ! RV4      '       g   \        RV R24      hRRR\        VR,          RV R2R7      R\        VR,          RV R2R7      RVRV/# )Númember z
 profile 'z' is not local to this gatewayr   r   r    z target must be an objectz" target kind must be local or peerÚ z target©r�   r¥   z target profiler§   z3 local target profile does not match member profilez2 peer target profile does not match member profileÚcapability_digestz[0-9a-f]{64}z* capability_digest must be a sha256 digestr!   r�   z peer_idÚinstallation_idz installation_id)
r8   r­   r   r‘   Ú_TARGET_FIELDSr©   r«   r>   ÚreÚ	fullmatch)r€   r    r¼   r¾   r   rD   Útarget_profileÚdigests   &$$$    r   Ú_validate_member_targetrÊ   ß   sÁ  € Ø‚}ØÔ(Ü+¨g°e°W¸JÀwÀiÐOmÐ,nÓoÐoØ˜ ¨GÐ4Ð4Ü�eœW×%Ò%Ü'¨'°%°Ð8QÐ(RÓSÐSØ�9‰9�VÓ€DØ”>Ô!Ü'¨'°%°Ð8ZÐ([Ó\Ð\Ü˜5¨'°%°¸¸$¸¸wÐ(GÔR`ÐaeÕRfÔg€FÜ  ¨	Õ!2¸GÀEÀ7È/Ð:ZÔ[€NØˆw„ØÔ$Ü+¨g°e°WÐ<oÐ,pÓqÐqØÔ(Ü+¨g°e°W¸JÀwÀiÐOmÐ,nÓoÐoØ˜ ¨GÐ4Ð4ØÔ Ü'¨'°%°Ð8jÐ(kÓlÐlØÐ'Õ(€FÜ�fœc×"Ò"¬"¯,ª,°È×*OÒ*OÜ'¨'°%°Ð8bÐ(cÓdÐdà�˜	¤;¨v°iÕ/@È'ÐRWÐQXÐX`ÐHaÔ#bØœ; vÐ.?Õ'@È'ÐRWÐQXÐXhÐHiÔjØ�>Ð#6¸ð@ð @r6   c               ó(   € V ^8„  d   QhRRRRRRRR/# )	rh   rz   r	   r¾   rM   r¼   r½   ri   r=   r.   )rk   s   "r   rl   rl   ü   s/   € ÷ Nñ N˜#ð N cð N¸8ð NÐHXñ Nr6   c           
     óŠ  aa	€ \        V \        4      '       g   \        R S R24      h\        V 4      \        ,          ;p'       d*   \        R S RRP                  \        V4      4       24      h\        V R S 2\        0 Rm4      \        RR04      R7      o	VV	3R lR 4       w  rEp\        S	P                  R4      WRSR7      p\        S	P                  RR	4      ;p\        4      '       g   \        R S R
24      h\        VP                  4       ;p4      \        P                  8”  d   \        R S R24      h\        WEWhV4      # )rÀ   z must be an objectz  contains cross-gateway fields: ú, rB   rD   r¤   c              3  ó\   <"  € T F!  w  r\        SV,          R S RV 2R7      x € K#  	  R# 5i)rÀ   rÁ   r§   N)r«   )r   Úfieldr�   r¾   rV   s   &  €€r   r   Ú#_validate_member.<locals>.<genexpr>  s6   øé € ð "aá_‰LˆEô 	�F˜5•M¨7°5°'¸¸5¸'Ð)B×CÑCÛ_ùs   ƒ),)r    r¼   r¾   rA   z display_name must be a stringz display_name is too long>   r@   r    r?   ))r?   r—   )r    r    )r@   r@   )r­   r   r8   Ú	frozensetÚ_REMOTE_MEMBER_FIELDSÚjoinÚsortedr©   rÊ   r‘   r>   r®   r±   r   ÚMAX_ACTOR_LABEL_CHARSr=   )
rz   r¾   r¼   Úremote_fieldsr?   r    r@   rD   rB   rV   s
   &f&      @r   Ú_validate_memberr×   ü   s;  ù€ Ü�cœ7×#Ò#Ü'¨'°%°Ð8JÐ(KÓLÐLÜ! #›Ô)>Õ>Ð>€}Ö>Ü'Ø�e�WÐ<¸T¿Y¹YÄvÈmÓG\Ó=]Ð<^Ð_óað 	aäØ�W˜U˜GÐ$¬yÒ9[Ó/\Ü˜N¨HÐ5Ó6ô8€Fõ"aá_ó"aÑ€I˜ô % V§Z¡Z°Ó%9À7ÐqvÔw€FÜ f§j¡j°ÀÓ&DÐD�lÄc×JÒJÜ'¨'°%°Ð8VÐ(WÓXÐXÜ
˜<×-Ñ-Ó/Ð/ˆ<Ó0´<×3UÑ3UÔUÜ'¨'°%°Ð8QÐ(RÓSÐSÜ˜I°ÀfÓMÐMr6   c               ó$   € V ^8„  d   QhRRRRRR/# )rh   r€   r	   Úlocal_profilesúIterable[str]ri   rJ   r.   )rk   s   "r   rl   rl     s"   € ÷ ñ ˜3ð °=ð ÐEañ r6   c               ó  € \        V \        4      '       g   \        R4      h\        \	        V 4      u;8:  d   \
        8:  g   M \        R\         R\
         R24      hV Uu0 uF  p\        VRR7      kK  	  pp. p\        4       pRR0p\        4       p\        V 4       F×  w  r‰\        W˜V4      p
V
P                  P                  R	4      R
8X  d   RMRp\        V
P                  RR7      P                  4       VRV R23V
P                  P                  4       VR3V
P                  P                  4       VR33 F(  w  rÍpWÍ9   d   \        V4      hVP!                  V4       K*  	  VP#                  V
4       KÙ  	  \%        V4      # u upi )z@Validate a frozen 2-6 member roster of profiles on this gateway.zmembers must be a listzmembers must contain between z and z entrieszlocal profiler§   ÚallÚeveryoner   r   ÚprofilesÚtargetsF©Úensure_asciirÀ   z must be uniquezBmember handles must be unique and cannot reserve @all or @everyonezmember ids must be unique)r­   Úlistr8   ÚMIN_DISCUSSION_MEMBERSr®   ÚMAX_DISCUSSION_MEMBERSr«   ÚsetÚ	enumerater×   rD   r‘   r   Úcasefoldr@   r?   ÚaddÚappendÚtuple)r€   rÙ   r    r¼   rK   rß   ÚhandlesÚ
member_idsr¾   rz   rV   ÚuniqueÚkeyÚseenr„   s   &$             r   Úvalidate_rosterrð     st  € ä�eœT×"Ò"Ü'Ð(@ÓAÐAÜ!¤S¨£ZÖIÔ3IÖIÜ'Ø+Ô,BÐ+CÀ5ÔI_ÐH`Ð`hÐiókð 	káQ_Ó`ÑQ_Àg”k '°×AÑQ_€NÐ`Ø&(€GÜ›€GØ 
Ð+€GÜ›5€JÜ Ö&‰
ˆÜ! #¨nÓ=ˆØ%Ÿ}™}×0Ñ0°Ó8¸GÔC‘Èˆä˜&Ÿ-™-°eÔ<×EÑEÓGÈÐT[Ð\bÐ[cÐcrÐRsÐtØ�]‰]×#Ñ#Ó% wÐ0tÐuØ×Ñ×&Ñ&Ó(¨*Ð6QÐRó#TÑˆC�wð Œ{Ü/°Ó8Ð8Ø�H‰H�SŽMñ#Tð 	�‰�vÖñ 'ô �‹>Ðùò! as   Á"Fc               ó$   € V ^8„  d   QhRRRRRR/# )rh   r€   r	   rÙ   rÚ   ri   rG   r.   )rk   s   "r   rl   rl   *  s&   € ÷ Oñ O˜ð O°ð OÀ>ñ Or6   c               ó|  € \        V \        4      '       g   \        R4      hV P                  R4      e   \        R4      h\	        V P                  R4      RR7      p\        V P                  R4      ;p\
        4      '       d   VP                  4       '       g   \        R4      h\        VP                  4       ;p4      \        P                  8”  d   \        R4      h\	        V P                  R	4      R	R7      p\        V P                  R
4      R
R7      p\        V P                  R4      VR7      p\        W#WdV4      # )zDProject a hosted-room row into the strict same-gateway policy shape.zroom must be an objectÚdisbanded_atzroom is disbandedrH   r§   rI   z$room name must be a non-empty stringzroom name is too longrf   rN   rK   ©rÙ   )r­   r   r8   r‘   r«   r>   r±   r®   r   ÚMAX_ROOM_NAME_CHARSrˆ   rð   rG   )r€   rÙ   rH   rI   rL   rN   rK   s   &$     r   Úvalidate_roomrö   *  sø   € ä�eœW×%Ò%Ü'Ð(@ÓAÐAØ‡y�y�Ó Ò,Ü'Ð(;Ó<Ð<Ü˜%Ÿ)™) IÓ.°iÔ@€GÜ˜eŸi™i¨Ó/Ð/�d´×5Ò5¸T¿Z¹Z¿\º\Ü'Ð(NÓOÐOÜ
�4—:‘:“<Ðˆ4Ó ¤<×#CÑ#CÔCÜ'Ð(?Ó@Ð@Ü˜UŸY™YÐ'=Ó>ÐF\Ô]€JÜ# E§I¡IÐ.?Ó$@ÐHYÔZ€OÜ˜eŸi™i¨	Ó2À>ÔR€GÜ˜'¨¸oÓNÐNr6   c               ó    € V ^8„  d   QhRRRR/# )rh   r€   r	   ri   r•   r.   )rk   s   "r   rl   rl   ;  s   € ÷ ]ñ ]˜ð ] ñ ]r6   c                ó¶   € \        T ;'       g    R4      P                  4       pV'       * ;'       g)    \        P                  ! RV\        P                  4      RJ# )z=Return whether a settled member result is Discussion silence.rA   z\(?\s*pass\s*\)?\.?N)r>   r±   rÆ   rÇ   Ú
IGNORECASE)r€   r"   s   & r   Úis_pass_textrú   ;  sC   € äˆu�{ˆ{˜Ó×!Ñ!Ó#€DØŒ8×\Ð\”r—|’|Ð$:¸DÄ"Ç-Á-ÓPÐX\Ð\Ð\r6   Údefault_allc               ó(   € V ^8„  d   QhRRRRRRRR/# )	rh   ÚtextsrÚ   rK   úSequence[DiscussionMember]rû   r•   ri   rJ   r.   )rk   s   "r   rl   rl   A  s2   € ÷ Xñ XØðXØ#=ðXØOSðXà!ñXr6   c               ó  a	€ V Uu/ uF  q3P                   P                  4       VbK  	  pp\        4       o	RpV  Fu  p\        P	                  \        T;'       g    R4      4       FF  pVP                  ^4      P                  4       pVR9   d   RpK-  W„9   g   K5  S	P                  V4       KH  	  Kw  	  V'       g   V'       d   S	'       g   \        V4      # \        ;QJ d    . V	3R lV 4       F  NK  	  5# ! V	3R lV 4       4      # u upi )zCResolve member handles deterministically against the frozen roster.FrA   Tc              3  óh   <"  € T F'  qP                   P                  4       S9   g   K#  Vx € K)  	  R # 5i©N)r@   rç   )r   rV   Ú	mentioneds   & €r   r   Ú#resolve_mentions.<locals>.<genexpr>Q  s%   øé € ÐW¡g˜F·±×1GÑ1GÓ1IÈYÑ1V—’£gùs   ƒ 2¨
2>   rÜ   rÝ   )	r@   rç   rå   Ú_MENTION_REÚfinditerr>   Úgrouprè   rê   )
rý   rK   rû   rV   Ú	by_handlerÝ   r"   Úmatchr@   r  s
   &&$      @r   Úresolve_mentionsr	  A  sÑ   ø€ ñ AHÓHÁ°f—‘×'Ñ'Ó)¨6Ò1Á€IÐHÜ›%€IØ€HÛˆÜ ×)Ñ)¬#¨d¯j¨j°b«/Ö:ˆEØ—[‘[ “^×,Ñ,Ó.ˆFØÐ,Ô,Ø’ØÖ$Ø—‘˜fÖ%ó ;ñ ÷ —K¯	Ü�W‹~ÐßŒ5ÔW¡gÓW�5ÐWˆ5ÔW¡gÓWÓWÐWùò Is   †#Dc               ó$   € V ^8„  d   QhRRRRRR/# )rh   ÚmessagesúSequence[_ValidatedEvent]ÚroomrG   ri   rJ   r.   )rk   s   "r   rl   rl   T  s)   € ÷ qñ qØ'ðqØ/=ðqØB^ñqr6   c                óø  aa€ / o/ oV  F§  pVP                   R8w  d   K  \        VP                  R,          4      pVP                  SV&   \	        \        VP                  R,          4      3VP
                  RR7       F/  pVP                  V8w  g   K  VP                  SVP                  &   K1  	  K©  	  \        ;QJ d"    . VV3R lVP
                   4       F  NK  	  5# ! VV3R lVP
                   4       4      # )zDReturn peers explicitly cited by a Bot and not heard from afterward.r+   r?   r"   F)rû   c              3  ó¶   <"  € T FN  pVP                   S9   g   K  SP                  VP                   ^ 4      SVP                   ,          8:  g   KJ  Vx € KP  	  R# 5i©rœ   N)r?   r‘   )r   rV   Úcited_atÚlast_post_ats   & €€r   r   Ú/_unaddressed_member_mentions.<locals>.<genexpr>a  sU   øé € ð qÙ)�6Ø×Ñ˜xÑ'ô 	Ø,8×,<Ñ,<¸V×=MÑ=MÈqÓ,QÐU]Ð^d×^nÑ^nÕUoÑ,o÷ 	Š›\ùs   ƒA›/AÁ
A)r   r>   rT   r{   r	  rK   r?   rê   )r  r  ÚeventÚ
speaker_idrV   r  r  s   &&   @@r   Ú_unaddressed_member_mentionsr  T  sÙ   ù€ ð  "€HØ#%€LÛˆØ�:‰:Ð)Ô)ÙÜ˜Ÿ™ {Õ3Ó4ˆ
Ø#(§9¡9ˆ�ZÑ Ü&¬¨E¯M©M¸&Õ,AÓ(BÐ'DÀdÇlÁlÐ`e×fˆFØ×Ñ :Ö-Ø-2¯Y©Y�˜×)Ñ)Ó*ó gñ ÷ Œ5õ qØ!Ÿ\š\óq�5ð qˆ5õ qØ!Ÿ\š\óqó qð qr6   c               ó(   € V ^8„  d   QhRRRRRRRR/# )	rh   re   rS   r  rG   r„   r>   ri   ÚNoner.   )rk   s   "r   rl   rl   f  s+   € ÷ 1ñ 1Ð"3ð 1¸>ð 1ÐTWð 1Ð\`ñ 1r6   c                óˆ   € V P                  R 4      R8w  g!   V P                  R4      VP                  8w  d   \        V4      hR# )r   Úgatewayr—   N)r‘   rL   r8   )re   r  r„   s   &&&r   Ú_require_gateway_actorr  f  s7   € Ø‡y�y�Ó˜IÔ%¨¯©°4«¸D¿O¹OÔ)KÜ'¨Ó0Ð0ñ *Lr6   c               ó$   € V ^8„  d   QhRRRRRR/# )rh   r  rG   r?   r	   ri   r=   r.   )rk   s   "r   rl   rl   k  s"   € ÷ ñ ˜ð °3ð Ð;Kñ r6   c                óˆ   a€ \        VR R7      o\        V3R lV P                   4       R4      ;pf   \        RS R24      hV# )r?   r§   c              3  óL   <"  € T F  qP                   S8X  g   K  Vx € K  	  R # 5ir  )r?   )r   Úmr²   s   & €r   r   Ú _member_by_id.<locals>.<genexpr>m  s   øé € ÐM¡<˜a·;±;À*Ñ3LŸš£<ùs   ƒ$š
$Nzunknown Discussion member 'Ú')r«   ÚnextrK   r8   )r  r?   rV   r²   s   && @r   Ú_member_by_idr#  k  sF   ø€ Ü˜Y¨kÔ:€JÜÔM 4§<¢<ÓMÈtÓTÐTˆÒ]Ü'Ð*EÀjÀ\ÐQRÐ(SÓTÐTØ€Mr6   c               ó$   € V ^8„  d   QhRRRRRR/# )rh   rT   rS   r  rG   ri   r  r.   )rk   s   "r   rl   rl   r  s#   € ÷ 5ñ 5Ð(9ð 5Àð 5ÐTXñ 5r6   c                ó$  € \        WP                  R 4      4       \        V P                  R4      R\        ^,
          R7       \        V P                  R4      R\        ^,
          R7       R F  p\        V P                  V4      VR7       K!  	  R# )r?   rW   )r�   rŠ   rX   r§   N)r#   rt   Úturn_idrU   )r#  r‘   r�   rä   ÚMAX_DISCUSSION_ROUNDSr«   )rT   r  rÏ   s   && r   Ú_validate_turn_coordinatesr(  r  si   € Ü�$Ÿ™ KÓ0Ô1Ü�G—K‘K Ó/°~ÔOeÐhiÕOiÕjÜ�G—K‘K Ó.°mÔMbÐefÕMfÕgÛKˆÜ�G—K‘K Ó&¨e×4ó Lr6   c          
     ó,   € V ^8„  d   QhRRRRRRRRRR/# ©	rh   r   r>   rT   ry   re   r  rG   ri   r.   )rk   s   "r   rl   rl   |  s0   € ÷ ñ ˜sð ¨Wð ¸Wð ÈNð Ð_fñ r6   c                ó^   € \        V4      pVP                  R 4      R8w  d   \        R4      hV# )r   Úuserz"message.user requires a user actor)r³   r‘   r8   )r   rT   re   r  s   &&&&r   Ú_validate_user_eventr-  |  s.   € Ü# GÓ,€GØ‡y�y�Ó˜FÔ"Ü'Ð(LÓMÐMØ€Nr6   c          
     ó,   € V ^8„  d   QhRRRRRRRRRR/# r*  r.   )rk   s   "r   rl   rl   ƒ  s1   € ÷ ñ  3ð °ð Àð ÐP^ð Ðcjñ r6   c                ó¨  a€ \        VR \        RR0R7       \        V4      pRV9   d   \        VR,          4      VR&   RV9   dˆ   VR,          p\	        V\
        4      '       d	   V'       g   \        R4      hV Uu. uF  p\        W54      P                  NK  	  pp\        \        V4      4      \        V4      8w  d   \        R4      hWAR&   \        W4       \	        VP                  R4      ;p\        4      '       d(   VP                  4       '       d   \        V4      '       d   \        R4      h\        W1P                  R4      4      p/ \!        VR	R
7      CR\#        V4      /Cp\$        ;QJ d-    V3R lVP'                  4        4       F  '       g   K   RM"	  R	M! V3R lVP'                  4        4       4      '       d   \        R4      hV# u upi )zmessage.member payloadr£   Úrecipient_member_idsr¤   z-recipient_member_ids must be a non-empty listz#recipient_member_ids must be uniquer"   z-message.member text must be a non-pass stringr?   F)rB   r˜   c              3  óP   <"  € T F  w  rSP                  V4      V8g  x € K  	  R # 5ir  )r‘   )r   rî   r€   re   s   &  €r   r   Ú+_validate_member_message.<locals>.<genexpr>–  s"   øé € Ð
FÑ5E¡z sˆ5�9‰9�S‹>˜UÖ"Ó5Eùs   ƒ#&Tz*message.member actor does not match roster)r©   Ú_MEMBER_MESSAGE_FIELDSÚdictr¬   r­   râ   r8   r#  r?   r®   rå   r(  r‘   r>   r±   rú   r™   r“   ÚanyÚitems)	r   rT   re   r  Ú
recipientsÚ	recipientr"   rV   Úexpecteds	   &&f&     r   Ú_validate_member_messager:  ƒ  sv  ø€ Ü�'Ð!9ÔDZØ)Ð+AÐBõDä�7‹m€GØ˜ÔÜ!2°7¸=Õ3IÓ!Jˆ�ÑØ Ô(ØÐ3Õ4ˆ
Ü˜*¤d×+Ò+·:Ü+Ð,[Ó\Ð\ÙPZÓ[ÑPZÀ9”m DÓ4×>Ô>ÑPZˆ
Ð[ÜŒs�:‹Ó¤3 z£?Ô2Ü+Ð,QÓRÐRØ*4Ð&Ñ'Ü˜wÔ-Ü˜gŸk™k¨&Ó1Ð1�d´3×7Ò7¸t¿z¹z¿|º|Ì|Ð\`×OaÒOaÜ'Ð(WÓXÐXÜ˜4§¡¨[Ó!9Ó:€FØ_”- °UÔ;Ð_¸_ÌhÐW]ÓN^Ñ_€Hß
ƒsÔ
F°X·^±^Ô5EÓ
F‡s‡s‚sÔ
F°X·^±^Ô5EÓ
F×FÒFÜ'Ð(TÓUÐUØ€Nùò \s   Á;Gc          
     ó,   € V ^8„  d   QhRRRRRRRRRR/# r*  r.   )rk   s   "r   rl   rl   ›  s1   € ÷ ñ  3ð °ð Àð ÐP^ð Ðcjñ r6   c           
     óp  € \        W R 2\        V ,          \        P                  V \	        4       4      R7       \        W4       \        VP                  R4      RR7       VP                  R4      e   \        V  R24      h\        W#V  R24       V R8X  dq   \        VP                  R4      \        4      '       g   \        R4      hVP                  R	4      pVR,          '       g   \        VR	R7       V# Ve   \        R
4      hV# V R8X  d   RMRp\        VP                  V4      \        4      '       d   W,          P                  4       '       g   \        V  RV R24      hV R8X  d   \        VP                  R4      RR7       V R8X  d)   RV9   d"   VR,          \        4       9  d   \        R4      hV# )ú payloadr¤   r&   r§   r˜   z requires a gateway actorúturn.settledÚpassedz%turn.settled passed must be a booleanÚmessage_event_idz/a passed turn cannot reference a member messager$   r|   r]   rÁ   z must be non-emptyúturn.deferredr%   r'   z>turn.failed reason_code must use the shared failure vocabulary)r©   Ú_TERMINAL_FIELDSÚ_TERMINAL_OPTIONAL_FIELDSr‘   rÑ   r(  rˆ   r8   r  r­   r•   r«   r>   r±   r    )r   rT   re   r  r@  rÏ   s   &&&&  r   Ú_validate_terminal_eventrD  ›  s�  € ÜØ˜˜xÐ(Ô3CÀDÕ3IÜ*×.Ñ.¨t´Y³[ÓAõCô ˜wÔ-Ü�'—+‘+Ð0Ó1Ð9KÕLØ‡y�y�Ó!Ò-Ü'¨4¨&Ð0IÐ(JÓKÐKÜ˜5¨4¨&Ð0IÐ(JÔKØˆ~ÔÜ˜'Ÿ+™+ hÓ/´×6Ò6Ü+Ð,SÓTÐTØ"Ÿ;™;Ð'9Ó:ÐØ�x× Ô ÜÐ(Ð0BÕCð ˆð Ò)Ü+Ð,]Ó^Ð^ØˆØ˜}Ô,‰G°(€EÜ�g—k‘k %Ó(¬#×.Ò.°gµn×6JÑ6J×6LÒ6LÜ'¨4¨&°°%°Ð8JÐ(KÓLÐLØˆÔÜ�g—k‘kÐ"8Ó9ÐAWÕXØˆ}Ô °'Ô!9¸gÀmÕ>TÔ\pÓ\rÔ>rÜ'Ð(hÓiÐiØ€Nr6   c          
     ó,   € V ^8„  d   QhRRRRRRRRRR/# r*  r.   )rk   s   "r   rl   rl   ·  s0   € ÷ ñ  #ð °ð Àð È~ð Ðbiñ r6   c                óü   € \         V ,          w  rE\        W R 2VR7       V R8X  d"   VP                  R4      R9  d   \        R4      hV F  p\	        VP                  V4      VR7       K!  	  \        W#V  R24       V# )r=  rÂ   r(   r\   zinvalid room.activity statusr§   z requires the room gateway>   Úboundedr   )Ú_GATEWAY_EVENT_FIELDSr©   r‘   r8   r«   r  )r   rT   re   r  ÚfieldsÚidentifier_fieldsrÏ   s   &&&&   r   Ú_validate_gateway_eventrK  ·  sy   € Ü 5°dÕ ;Ñ€FÜ�' 6¨Ð!2¸VÕDØˆÔ 7§;¡;¨xÓ#8Ð@VÔ#VÜ'Ð(FÓGÐGÛ"ˆÜ�G—K‘K Ó&¨e×4ñ #ä˜5¨4¨&Ð0JÐ(KÔLØ€Nr6   úmessage.userc               ó(   € V ^8„  d   QhRRRRRRRR/# )	rh   rz   r	   r  rG   Úprevious_seqrM   ri   rx   r.   )rk   s   "r   rl   rl   È  s.   € ÷ iñ i˜ð i ~ð iÀSð iÈ_ñ ir6   c          	     óâ  € \        V \        4      '       g   \        R 4      hV P                  R4      VP                  8w  d   \        R4      h\        V P                  R4      RR7      ;q28:  d   \        R4      h\        V P                  R4      RR7      pV P                  R4      V P                  R	4      V P                  R
4      rvpV\        R3V\        R3V\        R33 F"  w  r‰p
\        W‰4      '       d   K  \        V
4      h	  V\        9   d/   V P                  R4      VP                  8w  d   \        V R24      h\        P                  V4      ;pe
   V! WWWa4      p\        WWEWgR7      # )zroom event must be an objectrH   z&room event belongs to a different roomr{   z	event seqr§   z,room events must be in strict sequence orderrd   r   re   rT   zevent kind must be a stringzevent actor must be an objectzevent payload must be an objectrN   z( authority epoch does not match the room)rz   r{   rd   r   re   rT   )r­   r   r8   r‘   rH   rˆ   r«   r>   Ú_EPOCH_STAMPED_KINDSrN   Ú_EVENT_VALIDATORSrx   )rz   r  rN  r{   rd   r   re   rT   r€   r9  r„   Ú	validators   &$$         r   Ú_validate_eventrS  È  sL  € Ü�cœ7×#Ò#Ü'Ð(FÓGÐGØ
‡w�wˆyÓ˜TŸ\™\Ô)Ü'Ð(PÓQÐQÜ˜SŸW™W U›^°;Ô?Ð?ˆÔPÜ'Ð(VÓWÐWÜ˜3Ÿ7™7 :Ó.°jÔA€HØŸ7™7 6›?¨C¯G©G°GÓ,<¸c¿g¹gÀiÓ>P�€Dà	ŒsÐ1Ð2°U¼GÐEdÐ4eØ	”'Ð<Ð=ó%?Ñ ˆ˜ô ˜%×*Ô*Ü+¨GÓ4Ð4ñ	%?ð
 Ô#Ô#¨¯©Ð0AÓ(BÀd×FZÑFZÔ(ZÜ'¨4¨&Ð0XÐ(YÓZÐZÜ&×*Ñ*¨4Ó0Ð0ˆ	Ò=Ù˜D¨5Ó7ˆÜ˜s°hÐQVÔhÐhr6   c               ó$   € V ^8„  d   QhRRRRRR/# )rh   rv   úSequence[Mapping[str, Any]]r  rG   ri   ztuple[_ValidatedEvent, ...]r.   )rk   s   "r   rl   rl   Ý  s#   € ÷ 	ñ 	Ð9ð 	ÀNð 	ÐWrñ 	r6   c               ó"  € . p\        4       pV  Fs  p\        YAV'       d   VR,          P                  M^ R7      pVP                  V9   d   \	        R4      hVP                  V4       VP                  VP                  4       Ku  	  \        V4      # )é   )r  rN  zroom event ids must be uniqueéÿÿÿÿ)rå   rS  r{   rd   r8   ré   rè   rê   )rv   r  Ú	validatedÚ	event_idsrz   r  s   &$    r   Ú_validated_eventsr[  Ý  sw   € Ø')€IÜ›%€IÛˆÜ ×R[¸YÀr½]×=NÒ=NÐabÔcˆØ�>‰>˜YÔ&Ü+Ð,KÓLÐLØ×Ñ˜ÔØ�‰�e—n‘nÖ%ñ ô �ÓÐr6   c               ó(   € V ^8„  d   QhRRRRRRRR/# )	rh   Ú
room_valuer	   rv   rU  rÙ   rÚ   ri   údict[tuple[str, str], int]r.   )rk   s   "r   rl   rl   é  s2   € ÷ bñ bØðbØ8ðbØMZðbàñbr6   c          
     óB   € \        \        V\        WR7      R7      4      # )zBDerive ``(thread_id, member_id)`` watermarks from terminal events.rô   ©r  )Ú_derive_member_watermarksr[  rö   )r]  rv   rÙ   s   &&$r   Úderive_member_watermarksrb  é  s"   € ô %Ü˜&¤}°ZÔ'_Ô`óbð br6   c               ó    € V ^8„  d   QhRRRR/# )rh   rv   r  ri   r^  r.   )rk   s   "r   rl   rl   ñ  s   € ÷ ñ Ð&?ð ÐD^ñ r6   c                óÎ  aa
€ V  Uu/ uF"  qP                   R 8X  g   K  VP                  VbK$  	  pp/ p/ pV  EF$  oSP                   \        9  d   K  \        SP                  R,          4      pVP                  V4      ;pe|   VP                   R8w  d   \        RV R24      hSP                   R8X  dK   \        SP                  R,          4      \        VP                  R,          4      8:  d   \        RV R24      hSW5&   \        SP                  R,          4      \        SP                  R	,          4      3p\        SP                  R
,          4      pSP                   R8X  d×   SP                  R,          '       g¾   VP                  \        SP                  R,          4      4      o
S
eC   \        ;QJ d     VV
3R lR 4       F  '       g   K   RM	  RM! VV
3R lR 4       4      '       d   \        R4      h\        V3R lV  4       R4      p	V	f   \        R4      hW‰8¼  d   \        VS
P                  4      p\        VP                  V^ 4      V4      WG&   EK'  	  V# u upi )r+   rt   NrA  ztask 'z'' has more than one terminal room eventr%   z%' deferral generation did not advancer#   r?   r&   r>  r?  r@  c              3  ó’   <"  € T F<  pSP                   P                  V4      SP                   P                  V4      8g  x € K>  	  R # 5ir  )rT   r‘   )r   Úfr  r„   s   & €€r   r   Ú,_derive_member_watermarks.<locals>.<genexpr>  s9   øé € ð &oÙHmÀ1�—‘×#Ñ# AÓ&¨%¯-©-×*;Ñ*;¸AÓ*>Ö>ÓHmùs   ƒAATFz2turn.settled references no matching member messagec              3  ó„   <"  € T F5  pVP                   SP                  R ,          8X  g   K'  VP                  x € K7  	  R# 5i)rU   N)rd   rT   r{   )r   Ú	candidater  s   & €r   r   rg    s5   øé € ð #bÁ&°YØ&/×&8Ñ&8¸E¿M¹MÐJ_Õ<`Ñ&`ô $1 9§=¦=Ã&ùs
   ƒ$A ¬A z3turn.settled references no matching user discussion)rt   r?   r#   )r   rd   Ú_TERMINAL_EVENT_KINDSr>   rT   r‘   r8   rM   r5  r"  Úmaxr{   )rv   r  Úmessages_by_idÚterminal_by_taskÚ
watermarksrt   Úpreviousrî   Ú	watermarkÚdiscussion_seqr„   s   &`        @r   ra  ra  ñ  s  ù€ Ù9?Ób¹°Ç:Á:ÐQaÑCaÔ+�e—n‘n eÒ+¹€NÐbØ35ÐØ-/€JÜˆØ�:‰:Ô2Ô2ÙÜ�e—m‘m IÕ.Ó/ˆØ(×,Ñ,¨WÓ5Ð5ˆHÒBØ�}‰} Ô/Ü/°&¸¸	ÐAhÐ0iÓjÐjØ�z‰z˜_Ô,´Ø—‘Ð4Õ5ó27Ü:=¸h×>NÑ>NÐOeÕ>fÓ:gô2hä/°&¸¸	ÐAfÐ0gÓhÐhØ$)ÐÑ!Ü�5—=‘= Õ-Ó.´°E·M±MÀ+Õ4NÓ0OÐPˆÜ˜Ÿ™Ð&8Õ9Ó:ˆ	Ø�:‰:˜Ô'°·±¸h×0GÔ0GØ$×(Ñ(¬¨U¯]©]Ð;MÕ-NÓ)OÓPˆGØŠ§#£#õ &oÙHmó&o§#§#¢#õ &oÙHmó&o÷ #oò #oä/Ð0dÓeÐeÜ!ô #bÁ&ó #bØcgóiˆNàÒ%Ü/Ð0eÓfÐfØÔ*Ü 	¨7¯;©;Ó7�	Ü˜jŸn™n¨S°!Ó4°iÓ@ˆ
Œñ1 ð2 Ðùò9 cs
   ‡I"žI"c               ó    € V ^8„  d   QhRRRR/# )rh   rV   r=   ri   r>   r.   )rk   s   "r   rl   rl     s   € ÷ xñ xÐ+ð x°ñ xr6   c           	     ó$  € \        V P                  ;'       g    R RRV P                  /RR7      p\        P                  ! V P
                   RV P                   RV P                   RV 2P                  4       4      P                  4       R,          # )r   r   r    Frà   Ú :Né   N)	r   rD   r    ÚhashlibÚsha256r?   r@   r¯   Ú	hexdigestr’   s   & r   Ú_member_digestry    sy   € Ü˜&Ÿ-™-×WÐW¨F°G¸YÈÏÉÐ+WÐfkÔl€FÜ�>Š>˜V×-Ñ-Ð.¨b°·±Ð0@ÀÀ6Ç=Á=À/ÐQSÐTZÐS[Ð\×cÑcÓeÓf×pÑpÓrÐsvÕwÐwr6   c               ó$   € V ^8„  d   QhRRRRRR/# )rh   rK   rþ   rX   rM   ri   rJ   r.   )rk   s   "r   rl   rl     s#   € ÷ 7ñ 7Ð/ð 7¸cð 7ÐFbñ 7r6   c                ód   € V '       d   V\        V 4      ,          M^ p\        . WR OV RV O54      # r  )r®   rê   )rK   rX   Úshifts   && r   Ú_rotater}    s4   € ß*1ˆKœ#˜g›,Ö&°q€EÜÐ5�7˜6�?Ð5 W¨V¨e _Ñ5Ó6Ð6r6   c               ó$   € V ^8„  d   QhRRRRRR/# )rh   r  rx   r  rG   ri   r>   r.   )rk   s   "r   rl   rl     s&   € ÷ Pñ P˜?ð P°.ð PÀSñ Pr6   c                óþ   € V P                   R 8X  d   RV P                  R,           2# \        P                  \        V P                  R,          4      pR\        WP                  R,          4      P                   RV 2# )rL  zUser (user): r"   Ú@r?   z: )r   rT   Ú_MEMBER_CONTROL_FRAME_REÚsubÚ_MEMBER_CONTROL_FRAME_RELABELr#  r@   )r  r  r"   s   && r   Ú_format_messager„    sj   € Ø‡z�z�^Ô#Ø˜uŸ}™}¨VÕ4Ð5Ð6Ð6Ü#×'Ñ'Ô(EÀuÇ}Á}ÐU[ÕG\Ó]€DØŒ}˜T§=¡=°Õ#=Ó>×EÑEÐFÀbÈÈÐOÐOr6   ÚsuffixrA   c               ó(   € V ^8„  d   QhRRRRRRRR/# )rh   r€   r	   Ú	max_bytesrM   r…  r>   ri   r.   )rk   s   "r   rl   rl   "  s(   € ÷ 9ñ 9˜sð 9°#ð 9¸sð 9ÈCñ 9r6   c               ó.  € \        T ;'       g    R 4      p\        VP                  R4      ;p4      V8:  d   V# VR\        ^ V\        VP                  R4      4      ,
          4       P	                  RR4      pV'       d	   WR,           # VP                  4       # )rA   r¨   NÚignore)r>   r®   r¯   rk  Údecoder±   )r€   r‡  r…  r"   ÚencodedÚprefixs   &$$   r   Ú_truncate_utf8_textr�  "  s|   € Üˆu�{ˆ{˜Ó€DÜ
�d—k‘k 'Ó*Ð*ˆ7Ó+¨yÔ8ØˆàÐF”s˜1˜i¬#¨f¯m©m¸GÓ.DÓ*EÕEÓFÐG×NÑNÈwÐX`Óa€Fß$ˆ6�?Ð8¨&¯,©,«.Ð8r6   c               ó0   € V ^8„  d   QhRRRRRRRRR	RR
R/# )rh   r  rG   rV   r=   r  r  rp  rM   r&   ri   r>   r.   )rk   s   "r   rl   rl   +  s<   € ÷ ñ ØðØ%5ðØAZðØgjðàðà!ñr6   c                óÔ  a€ V Uu. uF#  qSVP                   u;8  d
   V8:  g   K  M K!  VNK%  	  up\        ) R  pRP                  V3R lV P                   4       4      pRV P                   RSP
                   RT;'       g    R R2RR	.p. ROp	\        R
P                  . VOV	O4      P                  R4      4      p
\        ^ \        P                  V
,
          ^,
          4      p. p\        V4       FŽ  pR\        WP4       2p\        VP                  R4      4      ^,           ;që8”  d>   V'       g#   V^ 8”  d   VP                  \        WÛR7      4       VP                  R4        MVP                  V4       W¾,          pK�  	  VP                  4        \        R
P                  . VOVOV	O4      ;pP                  R4      4      \        P                  8”  d   \!        R4      hV# u upi )NrÍ   c              3  óz   <"  € T F0  qP                   SP                   8w  g   K  R VP                   2x € K2  	  R# 5i)r€  N)r?   r@   )r   ri  rV   s   & €r   r   Ú _build_prompt.<locals>.<genexpr>/  s4   øé € Ðv¹l°×NaÑNaÐek×euÑeuÑNuÔ,˜˜)×*Ñ*Ð+Õ,»lùs   ƒ;¤;z[Discussion: "z"] You are @z, one participant with zno other membersz and the user.rA   z@New messages in this thread since your last turn (oldest first):Ú
r¨   z  )r‡  z-  [Earlier content omitted to fit this turn.]z*Discussion prompt exceeds the driver limit)rA   zRules for this Discussion:zV- Reply with one conversational message only when you have something new worth adding.z>- If you have nothing new to add, reply with exactly "(pass)".zc- Mention a teammate by handle to pull them into the next round; do not repeat points already made.zT- Never reveal content from private conversations. Your reply is published verbatim.)r{   ÚMAX_DISCUSSION_DELTA_LINESrÓ   rK   rI   r@   r®   r¯   rk  ÚdriverÚMAX_PROMPT_BYTESÚreversedr„  ré   r�  Úreverser8   )r  rV   r  rp  r&   r  ÚdeltaÚpeersÚopeningÚrulesÚfixed_bytesÚ	availableÚselectedÚlineÚ
line_bytesÚprompts   $d$$$           r   Ú_build_promptr¢  +  sÂ  ø€ ñ !)ÓV¡�u¸¿	¹	Ö,UÐEUÑ,UŒUÑ,U�U¡ÑVÔYsÐWsÐWtÐu€EØ�I‰IÔv¸d¿lºlÓvÓv€Eà
˜Ÿ™˜ <°·±¨ð ?Ø×+Ð+Ð+Ð,¨Nð	<Ø=?ØJðL€Gò`€Eô �d—i‘iÐ 2 'Ð 2¨EÐ 2Ó3×:Ñ:¸7ÓCÓD€KÜ�A”v×.Ñ.°Õ<¸qÕ@ÓA€IØ€HÜ˜%–ˆØ”O EÓ0Ð1Ð2ˆÜ˜dŸk™k¨'Ó2Ó3°aÕ7Ð7ˆJÔDß 	¨B¤Ø—‘Ô 3°DÔ NÔOØ�O‰OÐKÔLÙØ�‰˜ÔØÕŠ	ñ !ð ×ÑÔÜ
�d—i‘iÐ = 'Ð =¨HÐ =°uÐ =Ó>Ð>ˆF×FÑFÀwÓOÓPÔSY×SjÑSjÔjÜ'Ð(TÓUÐUØ€Mùò7 Ws   †G%¥G%©G%Úinput_contextr£   c               ó@   € V ^8„  d   QhRRRRRRRRR	RR
RRRRRRRRR/
# )rh   r  rG   Údiscussion_eventrx   rV   r=   rW   rM   rX   r&   r¡  r>   r£  rC   r£   rU  ri   rQ   r.   )rk   s   "r   rl   rl   L  so   € ÷ kñ kØðkØ/>ðkØHXðkØhkðkàðkà(+ðkà58ðkð ,ðkð -ð	kð 7Iñ	kr6   c        	        ó˜  € R VP                    RV RV RV R\        V4       2
p	V'       d    \        P                  ! \	        V4      4      p\        RVP                  RVP                  RVR\        P                  ! VP                  R	4      4      P                  4       R
V P                  RVRVRVP                   RVP                  R,          /	Ve   RV/M/ CV'       d   RV/M/ C4      p
\        P                  ! V P                  R\        P                  ! V
P                  R	4      4      P                  4       R,           2\        VP                  R,          4      V	R7      pRVP                  RVP                   RVRVP                   /pV'       d   \	        V4      VR&   Ve   \#        V4      VR&   \%        W¼VP                  W#WE4      # )Údz.rz.pz.sz.mrU   r?   rW   Úprompt_sha256r¨   rH   rX   r&   r`   r#   r£  r£   údtask::Né0   N)rH   rt   r#   r&  Útarget_member_idrÈ   r¡  )r{   ry  r”  Úvalidate_bound_task_manifestrâ   r   rd   r?   rv  rw  r¯   rx  rH   rT   ÚTaskIdentityr>   r    r4  rQ   )r  r¥  rV   rW   rX   r&   r¡  r£  r£   r&  ÚseedrR   rT   s   $$$$$$$$$    r   Ú_make_task_planr¯  L  sÐ  € ð
 Ð"×&Ñ&Ð' r¨+¨°b¸¸ÀbÐIYÐHZÐZ\Ô]kÐlrÓ]sÐ\tÐu€GßÜ×9Ò9¼$¸{Ó:KÓLˆÜØÐ/×8Ñ8¸+Àv×GWÑGWÐYgÐiuØœŸš¨¯©°gÓ(>Ó?×IÑIÓKÈYÐX\×XdÑXdØ�{Ð$6Ð8HÐJ\Ð^n×^rÑ^rØÐ%×-Ñ-¨kÕ:ð	Að
 0=Ò/HˆO˜]Ñ+ÈbðA÷ ,7ˆM˜;Ñ'¸BðAó B€Dô ×"Ò"Ø—‘¨¬w¯~ª~¸d¿k¹kÈ'Ó>RÓ/S×/]Ñ/]Ó/_Ð`cÕ/dÐ.eÐ&fÜÐ&×.Ñ.¨{Õ;Ó<ÀgôO€Hð 	˜F×,Ñ,Ð.>ÀÇÁÐPXÐZ`ØÐ,×0Ñ0ð2€G÷ Ü!% kÓ!2ˆ�ÑØÒ Ü#'¨Ó#6ˆ�Ñ ÜØÐ+×4Ñ4°fÈKókð kr6   c               ó    € V ^8„  d   QhRRRR/# )rh   rY  r  ri   z_ValidatedEvent | Noner.   )rk   s   "r   rl   rl   i  s    € ÷ 
fñ 
fÐ#<ð 
fÐAWñ 
fr6   c                óâ  aa€ \        R V  4       ^ R7      oV  Uu0 uFT  pVP                  R8X  g   K  VP                  P                  R4      R9   g   K8  \	        VP                  R,          4      kKV  	  upoV  Uu/ uF2  qP                  R8X  g   K  \	        VP                  R,          4      VbK4  	  pp\        VV3R l\        VP                  4       R	 R
7       4       R4      # u upi u upi )zHOldest latest-per-thread user message not stopped and not yet completed.c              3  ó^   "  € T F#  qP                   R 8X  g   K  VP                  x € K%  	  R# 5i)r)   N)r   r{   )r   r  s   & r   r   Ú&_pending_discussion.<locals>.<genexpr>k  s    é € Ðg±i¨UÇ:Á:ÐQfÑCfœy˜uŸyžy³iùs   ‚-™-)Údefaultr(   r\   rU   rL  r#   c              3  ót   <"  € T F-  pVP                   S8”  g   K  VP                  S9  g   K)  Vx € K/  	  R # 5ir  )r{   rd   )r   r  Úcompleted_discussion_idsÚstopped_through_seqs   & €€r   r   r³  q  s:   øé € ð _ÙW�%Ø�9‰9Ð*Ñ*ô 	Ø/4¯~©~ÐE]Ñ/]÷ 	ŠÓWùs   ƒ8›8®
8c                ó   € V P                   # r  ©r{   )Úitems   &r   Ú<lambda>Ú%_pending_discussion.<locals>.<lambda>r  s   € ÈdÏhÊhr6   )rî   N>   rG  r   )rk  r   rT   r‘   r>   r"  rÔ   Úvalues)rY  r  Úlatest_by_threadr¶  r·  s   &  @@r   Ú_pending_discussionr¿  i  sð   ù€ äÑg±iÓgÐqrÔsÐá?Hó dÙ?H°eØ�:‰:˜Ñ(ô 	2Ø-2¯]©]×->Ñ->¸xÓ-HÐLbÑ-bô 	2ŒˆE�M‰MÐ/Õ0Ö1¹yñ dÐñ =FógÙ<E°5ÏÉÐWeÑIeÔ.ŒˆE�M‰M˜+Õ&Ó'¨Ò.¹Ið ð gäõ _Ü!Ð"2×"9Ñ"9Ó";ÑAVÕWó_à`dófð fùò dùògs   ›C'³C'Á C'Á<C,Â!C,c               ó$   € V ^8„  d   QhRRRRRR/# )rh   rY  r  Ú
discussionrx   ri   z\tuple[tuple[_ValidatedEvent, ...], tuple[_ValidatedEvent, ...], tuple[_ValidatedEvent, ...]]r.   )rk   s   "r   rl   rl   v  s)   € ÷ oñ oØ(ðoØ6Eðoàañor6   c                ó:  aaa€ \        SP                  R,          4      oV  Uu0 uFQ  pVP                  R8X  g   K  VP                  P                  R4      f   K5  \        VP                  R,          4      kKS  	  upo\        ;QJ d    . VV3R lV  4       F  NK  	  5M! VV3R lV  4       4      pT\        ;QJ d    . V3R lV 4       F  NK  	  5M! V3R lV 4       4      \        ;QJ d    . V3R lV 4       F  NK  	  53# ! V3R lV 4       4      3# u upi )z[Return (thread messages, messages since the discussion, this discussion's member messages).r#   r>  r@  c              3  óÚ   <"  € T F`  pVP                   P                  R 4      S8X  g   K%  VP                  R8X  g'   VP                  R8X  g   KI  VP                  S9   g   K\  Vx € Kb  	  R# 5i)r#   rL  r+   N)rT   r‘   r   rd   )r   r  Úcommitted_member_message_idsr#   s   & €€r   r   Ú#_thread_messages.<locals>.<genexpr>‚  sc   øé € ð eÙ$�%Ø�=‰=×Ñ˜[Ó)¨YÑ6ô 	à�J‰J˜.Ô(Ø—
‘
Ð.Ñ.ô 	ð 49·>±>ÐEaÑ3a÷ 	Š›9ùs   ƒ"A+ªA+ÁA+Á!
A+c              3  ó`   <"  € T F#  qP                   SP                   8¼  g   K  Vx € K%  	  R # 5ir  r¹  ©r   r  rÁ  s   & €r   r   rÅ  ‡  s#   øé € Ð!d±_¨EÏ	É	ÐU_×UcÑUcÑHc§%¢%³_ùs   ƒ.¤
.c              3  ó¦   <"  € T FF  pVP                   R 8X  g   K  VP                  P                  R4      SP                  8X  g   KB  Vx € KH  	  R# 5i)r+   rU   N)r   rT   r‘   rd   rÇ  s   & €r   r   rÅ  ‡  sL   øé € ð loÙ*�%Ø�:‰:Ð)Ñ)ô 	Ø.3¯m©m×.?Ñ.?Ð@UÓ.VÐZd×ZmÑZmÑ.m÷ 	Š›?ùs   ƒA›'AÁ
A)r>   rT   r   r‘   rê   )rY  rÁ  r  Úthread_messagesrÄ  r#   s   &f  @@r   Ú_thread_messagesrÊ  v  s  ú€ ô �J×&Ñ& {Õ3Ó4€Iá<Eó$_Ù<E°5Ø�:‰:˜Ñ'ô 	/Ø,1¯M©M×,=Ñ,=Ð>PÓ,Qô 	/ŒˆE�M‰MÐ,Õ-Ö.¹Iñ$_Ð ÷ ”eõ eÙ$óe—e‘eõ eÙ$óeó e€Oð
 ŸEœEÔ!d±_Ó!dŸE™EÔ!d±_Ó!dÓd×fkÔfkô loÙ*ólo×fkð oð oÐfkô loÙ*óloó goð oð oùò$_s   ¤D¼DÁ Dc               ó$   € V ^8„  d   QhRRRRRR/# )rh   rY  r  Úinitial_watermarksú$Mapping[tuple[str, str], int] | Noneri   r^  r.   )rk   s   "r   rl   rl   Œ  s$   € ÷ ñ Ø(ðØ>bðàñr6   c           	     óX  € T;'       g    / P                  4        UUUu/ uF:  w  w  r#p\        V4      ^ 8¼  g   K  \        V4      \        V4      3\        V4      bK<  	  pppp\        V 4      P                  4        F#  w  rd\	        VP                  V^ 4      V4      WV&   K%  	  V# u upppi )rœ   )r6  rM   r>   ra  rk  r‘   )rY  rÌ  r#   r?   r€   rn  rî   s   &&     r   Ú_effective_watermarksrÏ  Œ  s©   € ð
 /A×.FÐ.FÀB×-MÑ-MÔ-Oõdá-OÑ)Ñ"ˆY EÔSVÐW\ÓS]ÐabÑSbô 	5ŒˆY‹œ˜Y›Ð(¬#¨e«*Ò4Ù-Oð ò dô 0°	Ó:×@Ñ@ÖB‰
ˆÜ˜jŸn™n¨S°!Ó4°eÓ<ˆ
‹ñ CàÐùôds
   ŸB%»$B%c               ó$   € V ^8„  d   QhRRRRRR/# )rh   r  rx   rV   r=   ri   rµ   r.   )rk   s   "r   rl   rl   —  s(   € ÷ oñ o˜oð oÐ7Gð oÐL`ñ or6   c                óR  € V P                   R 8X  dW   V P                  R,          VP                  8X  d   . # V P                  P                  R4      pVe   VP                  V9  d   . # V P                  P                  R. 4       Uu. uF  p/ VCRV P                  /CNK  	  up# u upi )r+   r?   r0  r£   rd   )r   rT   r?   r‘   rd   )r  rV   r7  Ú
attachments   &&  r   Ú_event_attachmentsrÓ  —  s–   € Ø‡z�zÐ%Ô%Ø�=‰=˜Õ%¨×)9Ñ)9Ô9ØˆIØ—]‘]×&Ñ&Ð'=Ó>ˆ
ØÒ! f×&6Ñ&6¸jÔ&HØˆIØINÏÉ×IZÑIZÐ[hÐjlÔImÓnÑIm¸:Ð6ˆzÐ6˜: u§~¡~Ô6ÑImÑnÐnùÒns   ÂB$c               ó(   € V ^8„  d   QhRRRRRRRR/# )	rh   r  r  rp  rM   rV   r=   ri   z2tuple[list[_ValidatedEvent], list[dict[str, Any]]]r.   )rk   s   "r   rl   rl   ¡  s+   € ÷ !ñ !Ð";ð !È3ð !Ø 0ð!Ø5gñ!r6   c               ó@  € ^ RI HpHp . p. p^ pV  Fˆ  pVP                  V8:  d   K  \	        W‚4      p	V\        R V	 4       4      ,           p
\        V4      \        V	4      ,           V8”  g   W¤8”  d    WV3# VP                  V4       VP                  V	4       T
pKŠ  	  WV3# )rœ   )ÚMAX_TASK_ATTACHMENTSÚMAX_TASK_ATTACHMENT_BYTESc              3  ó2   "  € T F  qR ,          x € K  	  R# 5i)ÚsizeNr.   )r   rº  s   & r   r   Ú&_bounded_task_delta.<locals>.<genexpr>¬  s   é € Ð@¹° FŸ|š|»ùs   ‚)	r¸   rÖ  r×  r{   rÓ  Úsumr®   ré   Úextend)r  rp  rV   rÖ  r×  rž  r£   rÙ  r  ÚentriesÚ	next_sizes   &$$        r   Ú_bounded_task_deltarß  ¡  s¢   € ç_à&(€HØ(*€KØ€DÛˆØ�9‰9˜	Ô!ÙÜ$ UÓ3ˆØœ3Ñ@¹Ó@Ó@Õ@ˆ	Üˆ{Óœc '›lÕ*Ð-AÔAÀYÔEjØð Ð Ð ð 	�‰˜ÔØ×Ñ˜7Ô#ØŠñ ð Ð Ð r6   rÌ  Úfreeze_input_contextFc               ó0   € V ^8„  d   QhRRRRRRRRR	R
RR/# )rh   r]  r	   rv   rU  rÙ   rÚ   rÌ  rÍ  rà  r•   ri   rZ   r.   )rk   s   "r   rl   rl   µ  sH   € ÷ /Kñ /KØð/KØ8ð/KØMZð/Kà<ð/Kð ð/Kð ,>ñ/Kr6   c               óú  a€ \        WR7      p\        WR7      p\        V4      ;pf   \        RRR7      # \	        VP
                  R,          4      p\        \        VP                  VP                  VR7      p	\        Wg4      w  r«p\        V4      \        8¼  d
   V	! R	R
4      # V Uu0 uF~  pVP                  \        9   g   K  VP
                  P                  R4      VP                  8X  g   KF  \        VP
                  R,          4      \	        VP
                  R,          4      3kK€  	  pp\!        Wc4      p\#        \$        4       EF›  oS^ 8X  d2   \'        \	        VP
                  R,          4      3VP(                  4      M
\+        Wµ4      p\-        \/        VS4      4       FÓ  w  ppVP                  VVP0                  3^ 4      p\3        V
VVR7      w  ppV'       d   SVP0                  3V9   d   V'       g   KZ  VR,          P                  p\5        VVV
VVR7      pT	! RR\7        YWTTSTTTV'       g	   V'       d)   \9        RTRV Uu. uF  qÝP                  NK  	  up/4      MRR7	      R7      u u # 	  \:        ;QJ d    V3R lV 4       F  '       g   K   RM	  RM! V3R lV 4       4      '       g   V	! RR4      u # S\$        ^,
          8X  g   EK“  V	! R	R4      u # 	  \=        R4      hu upi u upi )zEReplay the complete room log and return at most one next member task.rô   r`  NÚidleÚno_pending_user_event)r\   r]   r#   )rU   r`   r#   rG  Úmax_messagesrU   rX   r?   r"   )rp  rV   )r  rV   r  rp  r&   ra   Úmember_turnrp  Ú
event_seqs)	r  r¥  rV   rW   rX   r&   r¡  r£   r£  ©ra   c              3  ób   <"  € T F$  p\        VP                  R ,          4      S8H  x € K&  	  R# 5i)rX   N)rM   rT   )r   r  rX   s   & €r   r   Ú!plan_next_task.<locals>.<genexpr>à  s&   øé € ÐaÑQ`È”3�u—}‘} ]Õ3Ó4¸ÖCÓQ`ùs   ƒ,/TFr   Úsilent_roundÚ
max_roundsz.bounded Discussion loop exhausted unexpectedlyrX  )rö   r[  r¿  rZ   r>   rT   r   rd   r{   rÊ  r®   ÚMAX_DISCUSSION_MESSAGESr   rj  r‘   rM   rÏ  Úranger'  r	  rK   r  ræ   r}  r?   rß  r¢  r¯  r   r5  ÚAssertionError)r]  rv   rÙ   rÌ  rà  r  rY  rÁ  r#   ÚdeciderÉ  Údiscussion_messagesÚmember_messagesr  Ú	terminalsrn  Ú
respondersrW   rV   rp  r˜  r£   r&   r¡  rX   s   &&$$$                   @r   Úplan_next_taskrõ  µ  sÃ  ø€ ô
 ˜ÔC€DÜ! &Ô4€IÜ)¨)Ó4Ð4ˆ
Ò=Ü!¨Ð8OÔPÐPÜ�J×&Ñ& {Õ3Ó4€IÜÜ°
×0CÑ0CÐV`×VdÑVdØô€Fô =MÈYÓ<cÑ9€O¨/Ü
ˆ?ÓÔ6Ô6Ù�i Ó0Ð0áZcótÙZcÐQVØ�:‰:Ô.Ñ.ô 	MØ38·=±=×3DÑ3DÐEZÓ3[Ð_i×_rÑ_rÑ3rô 	MŒˆU�]‰]˜=Õ)Ó	*¬C°·±¸kÕ0JÓ,KÓLÑZcð ð tô ' yÓE€JÜÔ2×3ˆð S^ÐabÔRbÔœc *×"4Ñ"4°VÕ"<Ó=Ð?ÀÇÁÔNÜ-Ð.AÓHð 	ô %.¬g°jÀ+Ó.NÖ$OÑ ˆL˜&Ø"Ÿ™¨	°6×3CÑ3CÐ'DÀaÓHˆIÜ!4°_ÐPYÐbhÔ!iÑˆE�;ß˜k¨6×+;Ñ+;Ð<À	ÔI×R]ÙØ$ R�yŸ}™}ÐÜ"Ø &°?ÈiØ!1ô3ˆFñ ˜& -´oØ¸vÐT`Ø'Ð:JÐSYÐgrç+¯{ô  3°KÀÈLÑrwÓZxÑrwÐin×[dÔ[dÑrwÑZxÐ3yÔzØ@Dô	7Gô Hô Hñ %P÷ ‹sÔaÑQ`Óa�s�sŠsÔaÑQ`Óa×aÒaÙ˜) ^Ó4Ò4ØÔ/°!Õ3×3Ù˜) \Ó2Ò2ñ5 4ô6 ÐIÓ
JÐJùò?tùò2 [ys   Â(K3Ã'K3Ã0<K3ÉK8.c          
     ó,   € V ^8„  d   QhRRRRRRRRR	R
/# )rh   r]  r	   rv   rU  ra   rS   rÙ   rÚ   ri   rQ   r.   )rk   s   "r   rl   rl   ç  s4   € ÷ ;ñ ;Øð;Ø8ð;Ø@Qð;Øfsð;àñ;r6   c               óÆ	  aaaa€ \        WR7      p\        WR7      pVP                  R4      VP                  R4      rv\        V\        P
                  4      '       d   \        V\        4      '       g   \        R4      h\        V4      p\        P                  Tu;8:  d+   \        P                  \        P                  ,          8:  g   M \        R4      h\        P                  VP                  4      ;p	f   \        R4      h\        V	P                  R	4      4      oVP                  R
4      S8w  d   \        R4      h\!        V3R lV 4       R4      p
V
f   \        R4      hVP"                  VP"                  8w  g#   VP$                  V
P&                  R,          8w  d   \        R4      hVP                  R4      VP                  R4      uoo\!        VV3R lVP(                   4       R4      pVe    \+        V4      V	P                  R4      8w  d   \        R4      h\        VP                  R4      ;p\,        4      '       d   VP/                  4       '       g   \        R4      h\1        VP3                  R4      4      \        P4                  8”  d   \        R4      hRpRV9   Ed     \7        VR,          4      pTR,          R',          \        T	P                  R4      4      8w  d   \        R4      hT Uu0 uFN  pTP:                  R(9   g   K  TP&                  P                  R4      TP$                  8X  g   KB  TP<                  kKP  	  upo\>        ;QJ d&    T3R lTR,           4       F  '       g   K   RM	  RM! T3R lTR,           4       4      '       d   \        R 4      h. pR!V9   d_   Vf   \        R"4      hV Uu/ uF  qÿP<                  VbK  	  ppVR,           UUu. uF  p\A        VV,          V4       F  pVNK  	  K!  	  ppp\C        WJV\        V	P                  R#4      4      \        V	P                  R$4      4      \        V	P                  R4      4      VVVR%7	      pVPD                  V8w  g$   \G        VP&                  4      \G        V4      8w  d   \        R&4      hV#   \8         d   p\        \-        T4      4      ThRp?ii ; iu upi u upi u uppi ))zAReconstruct and verify one persisted driver task after a restart.rô   r`  rR   rT   z,driver task has no valid identity or payloadz!driver task payload shape changedNz&turn_id is not a Discussion coordinateÚsourcer`   z(task source event does not match turn_idc              3  ór   <"  € T F,  qP                   S8X  g   K  VP                  R 8X  g   K(  Vx € K.  	  R# 5i)rL  N)r{   r   )r   Úer`   s   & €r   r   Ú(reconstruct_task_plan.<locals>.<genexpr>ù  s+   øé € Ðf¡)˜Q¯u©uÐ8HÑ/H”qÈQÏVÉVÐWeÑMe—q’q£)ùs   ƒ7š7­
7z!task source user event is missingr#   z,task identity does not match its room threadrÈ   r«  c              3  ó|   <"  € T F1  pVP                   S8X  g   K  Se   VP                  S8X  g   K-  Vx € K3  	  R # 5ir  )r    r?   )r   r  r    r«  s   & €€r   r   rû  ÿ  s=   øé € ð cÙˆaØ�9‰9˜Ñô 	
Ø%5Ò%=ÀÇÁÐP`ÑA`÷ 	
Š“<ùs   ƒ<›<²
<rV   z)task target member does not match turn_idr¡  ztask prompt is missingr¨   z$task prompt exceeds the driver limitr£  rç  rï   z!task input does not match turn_idc              3  ó,   <"  € T F	  qS9  x € K  	  R # 5ir  r.   )r   r{   Úmessage_seqss   & €r   r   rû    s   øé € ÐNÑ2M¨3˜,Ö&Ó2Mùs   ƒTFztask input message is missingr£   z-attachment task requires frozen input_contextÚpositionÚround)	r  r¥  rV   rW   rX   r&   r¡  r£  r£   z/driver task failed deterministic reconstructionrX  >   rL  r+   )$rö   r[  r‘   r­   r”  r­  r   r:   rÑ   Ú_TASK_PAYLOAD_REQUIRED_FIELDSÚ_TASK_PAYLOAD_OPTIONAL_FIELDSÚ_TURN_ID_RErÇ   r&  rM   r  r"  rH   r#   rT   rK   ry  r>   r±   r®   r¯   r•  r   r¹   r   r{   r5  rÓ  r¯  rR   r4  )r]  rv   ra   rÙ   r  rY  rR   rT   rI  r  rÁ  rV   r¡  r£  rº   r  r£   Úby_seqr{   rº  Úreconstructedrþ  r    r`   r«  s   &&&$                 @@@@r   Úreconstruct_task_planr  ç  s%  û€ ô ˜ÔC€DÜ! &Ô4€IØŸ™ Ó,¨d¯h©h°yÓ.AˆgÜ�h¤× 3Ñ 3×4Ò4¼JÀwÔPW×<XÒ<XÜ+Ð,ZÓ[Ð[Ü�wÓ€FÜ×/Ñ/°6ö UÜ×,Ñ,¬v×/SÑ/SÕSöUä+Ð,OÓPÐPÜ×&Ñ& x×'7Ñ'7Ó8Ð8ˆÒAÜ+Ð,TÓUÐUÜ˜5Ÿ;™; xÓ0Ó1ÐØ‡{�{Ð%Ó&Ð*:Ô:Ü+Ð,VÓWÐWÜÔf¡)ÓfÐhlÓm€JØÒÜ+Ð,OÓPÐPØ×Ñ˜4Ÿ<™<Ô'¨8×+=Ñ+=À×ASÑASÐT_ÕA`Ô+`Ü+Ð,ZÓ[Ð[Ø '§¡Ð,<Ó =¸w¿{¹{ÐK]Ó?^Ð€GÐÜõ cØ—<’<ócàdhój€Fð ‚~œ¨Ó/°5·;±;¸xÓ3HÔHÜ+Ð,WÓXÐXÜ §¡¨HÓ 5Ð5�f´s×;Ò;À6Ç<Á<Ç>Â>Ü+Ð,DÓEÐEÜ
ˆ6�=‰=˜Ó!Ó"¤V×%<Ñ%<Ô<Ü+Ð,RÓSÐSØ€MØ˜'Õ!ð	CÜ/°¸Õ0HÓIˆMð ˜Õ& rÕ*¬c°%·+±+¸fÓ2EÓ.FÔFÜ/Ð0SÓTÐTÙ/8ó R©y eØ Ÿ:™:Ð)KÑKô "à!ŸM™M×-Ñ-¨kÓ:¸h×>PÑ>PÑPô "˜Ÿ	œ	©yñ Rˆ÷ ‹3ÔN°-ÀÖ2MÓN�3�3Š3ÔN°-ÀÖ2MÓN×NÒNÜ/Ð0OÓPÐPØ(*€KØ˜ÔØÒ Ü/Ð0_Ó`Ð`Ù09Ó:±	 u—)‘)˜UÒ"±	ˆÐ:Ø'4°\Ö'Bô LÑ'B Ü#5°f¸SµkÀ6Ö#J˜4ó Ù#Jñ Ñ'Bˆñ Lä#Ø°vÌCÐPU×P[ÑP[Ð\fÓPgÓLhÜ˜Ÿ™ GÓ,Ó-ÄÀEÇKÁKÐPVÓDWÓ@XÐagØ#°ô>€Mð ×Ñ Ô)¬T°-×2GÑ2GÓ-HÌDÐQXËMÔ-YÜ+Ð,]Ó^Ð^ØÐøô- ô 	CÜ/´°C³Ó9¸sÐBûð	CüòRùò ;ùóLs6   Ê*R+ Ë8SÌ'SÌ<SÏSÏ'%SÒ+SÒ6SÓSc               ó    € V ^8„  d   QhRRRR/# )rh   ra   rQ   ri   rj   r.   )rk   s   "r   rl   rl   %  s   € ÷ Pñ PÐ.ð P°>ñ Pr6   c                óþ   € RV P                   RV P                  P                  RV P                  RV P                  RV P
                  P                  RV P
                  P                  RV P
                  P                  /# )zFThe coordinate fields every member message and terminal event carries.rU   r?   rW   rX   rt   r#   r&  )	rU   rV   r?   rW   rX   rR   rt   r#   r&  rè  s   &r   Ú_turn_coordinatesr	  %  sl   € ð 	˜t×7Ñ7¸ÀdÇkÁk×F[ÑF[Ø˜×)Ñ)¨=¸$×:JÑ:JÈIÐW[×WdÑWd×WlÑWlØ�T—]‘]×,Ñ,¨i¸¿¹×9NÑ9NðPð Pr6   c               ó(   € V ^8„  d   QhRRRRRRRR/# )rh   Úresultr	   rÏ   r>   Úfallbackri   r.   )rk   s   "r   rl   rl   -  s(   € ÷ 1ñ 1˜3ð 1¨#ð 1¸ð 1Àñ 1r6   c               ó   € \        V \        4      '       d=   VR 8w  g   V P                  R 4      e   V P                  V4      MV P                  R4      p \        T ;'       g    R4      P	                  4       ;'       g    T# )r|   r"   rA   )r­   r   r‘   r>   r±   )r  rÏ   r  s   &$$r   Ú_terminal_textr  -  sc   € Ü�&œ'×"Ò"Ø&+¨wÔ&6¸&¿*¹*ÀWÓ:MÒ:Y�—‘˜EÔ"Ð_e×_iÑ_iÐjpÓ_qˆÜˆv�|ˆ|˜Ó×"Ñ"Ó$×0Ð0¨Ð0r6   c               ó0   € V ^8„  d   QhRRRRRRRRR	RR
R/# )rh   r  r	   ra   rQ   r  rG   r@  r>   Ú_ri   ÚEffectsr.   )rk   s   "r   rl   rl   8  s<   € ÷ 
/ñ 
/Øð
/Ø,ð
/Ø4Bð
/ØVYð
/Ø`cð
/Øhoñ
/r6   c          
     ó  € \        \        V R RR7      \        \        R7      p\	        V4      '       d	   RRRR/. 3# RVRR/\        VR	\        VP                  4      / \        V4      CR V/CVP                  VP                  R
7      .3# )r"   rA   ©rÏ   r  )r‡  r…  r@  Nr?  TFr+   ©rd   r   re   rT   rf   rN   )r�  r  ÚMAX_MEMBER_TEXT_BYTESÚ_TRUNCATED_REPLY_NOTICErú   rc   r™   rV   r	  rL   rN   )r  ra   r  r@  r  r"   s   &$$$, r   Ú_settled_effectsr  8  sœ   € äÜ�v V°bÔ9ÔEZÜ&ô(€Dô �D×ÒØ" D¨(°DÐ9¸2Ð=Ð=ØÐ 0°(¸EÐBÄYØ!Ð(8ÄÈdÏkÉkÓ@ZØ9Ô$ TÓ*Ð9¨F°DÑ9ÐPT×P_ÑP_Ø×,Ñ,ôF.ð E/ð /ð /r6   c               ó$   € V ^8„  d   QhRRRRRR/# )rh   r  r	   r  ri   r  r.   )rk   s   "r   rl   rl   E  s&   € ÷ Añ A˜Cð A cð A¨gñ Ar6   c                ó2  € \        V R RR7      p^ RIHp \        V \        4      '       dL   \        V P                  R4      ;'       g    V P                  R4      ;'       g    R4      P                  4       MRpV\        4       9   d   TMV! V4      pR VRV/. 3# )r|   zmember turn failedr  )Úclassify_agent_errorr'   r]   rA   )	r  rŸ   r  r­   r   r>   r‘   r±   r    )r  r  Ú
error_textr  Úsupplied_reasonr'   s   &,    r   Ú_failed_effectsr  E  sŠ   € Ü ¨gÐ@TÔU€JÝ>äPZÐ[aÔcj×PkÒPkŒˆF�J‰J�}Ó%×CÐC¨¯©°HÓ)=×CÐCÀÓD×JÑJÔLÐqsð à%4Ô8LÓ8NÔ%N‘/ÑThÐisÓTt€KØ�Z °Ð<¸bÐ@Ð@r6   c               ó(   € V ^8„  d   QhRRRRRRRR/# )rh   r  r	   Únewer_same_threadr•   r  ri   r  r.   )rk   s   "r   rl   rl   N  s.   € ÷ dñ d˜sð d¸$ð dÀSð dÈWñ dr6   c               óB   € V'       d   R R/. 3# R \        V R RR7      /. 3# )r]   Úsuperseded_by_newer_user_eventzmember turn cancelledr  ©r  )r  r  r  s   &$,r   Ú_cancelled_effectsr#  N  s1   € ßØÐ:Ð;¸RÐ?Ð?Ø”n V°8ÐF]Ô^Ð_ÐacÐcÐcr6   c               ó(   € V ^8„  d   QhRRRRRRRR/# )rh   r  r	   r%   r_   r  ri   r  r.   )rk   s   "r   rl   rl   T  s/   € ÷ Pñ P˜cð P¸Jð PÈSð PÐU\ñ Pr6   c               ó.   € \        V R RR7      pRVR V/. 3# )r]   Úmember_unavailabler  r%   r"  )r  r%   r  r]   s   &$, r   Ú_deferred_effectsr'  T  s&   € Ü˜F¨(Ð=QÔR€FØ"Ð$8¸(ÀFÐKÈRÐOÐOr6   r  c               ó8   € V ^8„  d   QhRRRRRRRRR	RR
RRRRR/# )rh   r]  r	   rv   rU  ra   rQ   r\   ÚTerminalKindr  r%   r_   rÙ   rÚ   ri   rs   r.   )rk   s   "r   rl   rl   ^  sV   € ÷ !nñ !nØð!nØ8ð!nØ@Rð!nØ_kð!nàð!nà.8ð!nàQ^ð!nàcrñ!nr6   c               óŽ  a€ \        WR7      p\        WR7      pSP                  P                  VP                  8g  R3SP                  VP
                  9  R3V\        9  R33 F  w  ršV	'       g   K  \        V
4      h	  VR8X  d   \        VR^R7       \        ;QJ d    V3R	 lV 4       F  '       g   K   R
M	  RM! V3R	 lV 4       4      pV'       d
   VR8w  d   RMTpSP                  P                  P                  R4      pVR8X  d	   RV RV 2MRV 2p\        V,          ! VSVRV 2VVR7      w  ppRV 2pVP                  \        VVRRRVP                  // \        S4      CRSP                   /CVCVP                  VP"                  R7      4       \%        SP                  P                  V\'        V4      R7      # )a	  Plan idempotent room effects for one terminal driver task.

A newer user event in the same thread supersedes a late result: the task stays terminal in driver state,
but only a deterministic cancellation is published so stale prose and its watermark cannot hide it.
rô   r`  z task belongs to a different roomz'task member is not in the frozen rosterz#invalid terminal publication statusr   z5deferred publication requires an execution generationrƒ   c              3  ó  <"  € T F  pVP                   R 8H  ;'       dd    VP                  \        SP                  R,          4      8„  ;'       d3    VP                  P	                  R4      SP
                  P                  8H  x € K�  	  R# 5i)rL  r`   r#   N)r   r{   rM   rT   r‘   rR   r#   )r   r  ra   s   & €r   r   Ú#plan_publication.<locals>.<genexpr>p  s{   øé € ð ^áS\È%ð 	�
‰
�nÑ$÷ 	Fð 	F¨¯©´S¸¿¹ÐFXÕ9YÓ5ZÑ)Z÷ 	Fð 	FØ�M‰M×Ñ˜kÓ*¨d¯m©m×.EÑ.EÑEô	FÛS\ùs   ƒB
ž0B
Á;B
TFr   r©  z
ddeferred:z:gz
dterminal:z	dmessage:)ra   r  r@  r  r%   zturn.r   r  r—   r&   r  )rt   ru   rv   )rö   r[  rR   rH   rV   rK   Ú_TERMINAL_EFFECTSr8   r‡   r5  rt   Úremoveprefixré   rc   rL   r	  r&   rN   rs   rê   )r]  rv   ra   r\   r  r%   rÙ   r  rY  r   r„   r  Úeffective_statusrÉ   Úterminal_event_idÚextraÚeffectsru   s   &&f$$$$           r   Úplan_publicationr3  ^  sÛ  ø€ ô ˜ÔC€DÜ! &Ô4€Ià	�‰×	Ñ	 $§,¡,Ñ	.Ð0RÐSØ	�‰˜DŸL™LÑ	(Ð*SÐTØ	Ô(Ñ	(Ð*OÐPóR‰ˆ÷ ‰6Ü+¨GÓ4Ð4ñRð �ÔÜÐ)Ð3jÐpqÕrß›ô ^áS\ó^ŸŸšô ^áS\ó^ó ^Ð÷ 6GÈ6ÐU_ÔK_¡kÐekÐØ�]‰]×"Ñ"×/Ñ/°Ó9€Fà9IÈZÔ9Wˆ*�V�H˜BÐ3Ð4Ñ5Ð_iÐjpÐiqÐ]rð ä&Ð'7Ö8Ø�T ¸À6À(Ð7KÐ_pØ1ô3�N€Eˆ7ð Ð,Ð-Ð.€MØ‡N�N”9Ø"¨¸vÀyÐRVÐX\×XgÑXgÐ>hØ_Ô$ TÓ*Ð_Ð,>À×@UÑ@UÑ_ÐY^Ð_Ø!Ÿ_™_¸d×>RÑ>RôTô Uô  4§=¡=×#8Ñ#8ÈÔ^cÐdkÓ^lÔmÐmr6   i   )rã  ra   r   rG  )r   r   r   r   >   r   r�   r    rÄ   rÃ   >   ÚrouteÚconnectionIdÚremoteSourceÚsourceScopedr˜   ÚsourceMissingÚtargetProfileÚconnectionKindrÈ   ÚconnectionLabelÚconnection_kindÚsourceReachableÚconnection_label>   rt   r&  r?   r#   rX   rW   rU   ))r>  )r@  r?  )r$   r~   )zturn.cancelled)r]   )rA  )r%   r]   >   r\   r#   r'   rU   )r'   r#   rU   )r*   r.   )ƒr4   Ú
__future__r   rv  rÆ   Úcollections.abcr   r   r   Údataclassesr   r   Ú	functoolsr   Útypingr	   r
   Úagent.prompt_builderr   r  r   r”  r   r   ÚcommonÚgateway.hosted_room_task_inputr   Úgateway.hosted_rooms_commonr   rä   rã   r'  rí  r“  r°   r  r  r>   ry   r[   r)  Úcompilerù   r  rÓ   r�  rƒ  r  rÑ   rÅ   rÒ   rª   Ú_TURN_COORDINATE_FIELDSr3  rB  rC  rj  rH  rP  r¹   r-   r8   r:   r=   rG   rQ   rZ   rc   rs   rx   Ú
identifierÚMAX_IDENTIFIER_CHARSr«   Úexact_fieldsr©   Úbounded_intr‡   r"   Ú_textrˆ   r�   r“   r™   r    r³   r¬   rÊ   r×   rð   rö   rú   r	  r  r  r#  r(  r-  r:  rD  rK  r4  ÚfromkeysrQ  rS  r[  rb  ra  ry  r}  r„  r�  r¢  r¯  r¿  rÊ  rÏ  rÓ  rß  rõ  r  r	  r  rê   râ   r  r  r  r#  r'  r-  r3  )r   r1  s   00r   Ú<module>rP     s-  ðñõ #ã Û 	ß 7Ñ 7ß )Ý ß å 6Ý 0Ý  Ý 1Ý >Ý 4ð Ð ØÐ ØÐ ØÐ ØÐ ØÐ Ø!Ð ØbÐ à
�#�s�(Õ
€ØÐ=Õ>€ØÐCÕD€à�jŠjÐ:¸B¿M¹MÓJ€ð Ÿ:š:Øˆs�x‰xÑWÑAVÓWÓWÕWÐZ]Õ]Ø‡M�MóÐ ð !2Ð Ø�jŠjð"ó#€ð ‰Y˜ 	Ð*Ó+Ø
‰IÒ\Ó]ð_€ñ "ò #tó uÐ ñ ! &¨+Ð!6Ó7Ð Ù#ÚlónÐ à0°F°8Õ;Ð ñU`ôañU`Á[ÀT€DÐ
!Ð%7Ð$@¸%Ð$@Õ
@Ò@ñ U`òaÐ ð +©I°}°oÓ,FÐGÐ Ù!Ð"2Ó3Ð ð ÙÒOÓPØ;ð=ð ™I { mÓ4°nÐEð	GÐ ð
 -Ð0@Ð/YÐCXÐ/YÕYÐ ô o˜JÔ nôLÐ 5ô LôPÐ$9ô Pñ �$Ô÷,ð ,ó ð,ñ �$Ô÷ð ó ðñ �$Ô÷ð ó ðñ �$Ô÷+ð +ó ð+ñ �$Ô÷4ð 4ó ð4ñ �$Ô÷"ð "ó ð"ñ �$Ô÷ð ó ðñ �f×'Ñ'Ð/HÐTZ×ToÑToÔp€Ù˜×+Ñ+Ð3LÔM€Ù�v×)Ñ)Ð1JÔK€Ù�—‘Ð#<Ô=€õUõlõVð
ÀD÷ õõ
õ;õ@õ:Nõ(õ4Oõ"]ðXØVZ÷Xõ&qõ$1õ
õ5õõõ0õ8ð Ð(Ð*:Ð<TðEà
‡m�mÐ)Ð+CÓDðEð ‡m�mÐ)Ð+BÓCðEÐ õiõ*	õbõõ@xõ
7õ
Pð9ÀR÷ 9õðBkð /3ðkð 02÷	kõ:
fõoõ,õoõ!ð(/Kà?Cð/Kð "'÷/Kõd;õ|Põ1ð ��S˜#�X•  Y¥Ð/Õ
0€õ
/õAõdõPð Ð ¨?¸KÐI[ØÐ!ð#Ð ð
!nàð!nà;?÷!nñ !nùó{as   Ä7P