+
    lHàjÉM  ã                  ó¶  € R t ^ RIHt ^ RIHt ^RIHtHtHtH	t	 ^RI
HtHtHt ^RIHt ^RIHt  ! R R]4      t ! R	 R
]4      t ! R R]4      t ! R R]4      t ! R R]4      t ! R R]4      t ! R R]4      t ! R R]4      t ! R R]4      t ! R R]4      t ! R R]4      t ! R R]4      t ! R R ]4      t]! R!]]R"R#7        ! R$ R%]4      t ! R& R']4      t ]! R(]] R)R#7        ! R* R+]4      t! ! R, R-]4      t"]! R.]!]"R/R#7        ! R0 R1]4      t# ! R2 R3]4      t$ ! R4 R5]4      t% ! R6 R7]4      t& ! R8 R9]4      t']! R:]#]'R;R#7        ! R< R=]4      t( ! R> R?]4      t)]! R@](])RAR#7        ! RB RC]4      t* ! RD RE]4      t+]! RF]*]+RGR#7        ! RH RI]4      t, ! RJ RK]4      t-]! RL],]-RMR#7        ! RN RO]4      t. ! RP RQ]4      t/ ! RR RS]4      t0]! RT].]0RUR#7        ! RV RW]4      t1 ! RX RY]4      t2]! RZ]1]2R[R#7        ! R\ R]]4      t3 ! R^ R_]4      t4]! R`]3]4RaR#7        ! Rb Rc]4      t5 ! Rd Re]4      t6 ! Rf Rg]4      t7]! Rh]5]7RiR#7        ! Rj Rk]4      t8 ! Rl Rm]4      t9]! Rn]8]9RoR#7        ! Rp Rq]4      t: ! Rr Rs]4      t;]! Rt]:];RuR#7        ! Rv Rw]4      t< ! Rx Ry]4      t=]! Rz]<]=R{R#7        ! R| R}]4      t> ! R~ R]4      t?]! R€]>]?R�R#7        ! R‚ Rƒ]4      t@ ! R„ R…]4      tA]! R†]@]AR‡R#7        ! Rˆ R‰]4      tB ! RŠ R‹]4      tC]! RŒ]B]CR�R#7        ! RŽ R�]4      tD ! R� R‘]4      tE]! R’]D]ER“R#7        ! R” R•]4      tF ! R– R—]4      tG ! R˜ R™]4      tH]! Rš]G]HR›R#7        ! Rœ R�]4      tI ! Rž RŸ]4      tJ ! R  R¡]4      tK]! R¢]I]KR£R#7        ! R¤ R¥]4      tL ! R¦ R§]4      tM]! R¨]L]MR©R#7        ! Rª R«]4      tN]! R¬]N]R­R#7        ! R® R¯]4      tO ! R° R±]O4      tP ! R² R³]4      tQ ! R´ Rµ]4      tR]! R¶]P]RR·R#7        ! R¸ R¹]O4      tS ! Rº R»]4      tT]! R¼]S]TR½R#7       ]! R¾]O]R¿R#7        ! RÀ RÁ]4      tU]! RÂ]O]URÃR#7       . RÅOtVRÄ# )Æaü  Hosted Group Chat rooms (``groups.*``), cross-connection bot relay (``bot_relay.*``) and the
dashboard browser controller (``browser.controller.*``).

Handlers: ``tui_gateway/methods_groups.py``, ``tui_gateway/methods_bot_relay.py``,
``tui_gateway/methods_browser_control.py``. Room / event / page shapes are produced by
``gateway/hosted_rooms.py`` (``_room_from_row`` / ``_event_from_row`` / ``read_events``) and
``gateway/hosted_room_replicas.py``; the RoomLink catalog by ``gateway/hosted_room_peer.py``.
)Úannotations)ÚField)Ú	JsonValueÚParamsÚResultÚWireEnum)ÚOkResultÚ	OpenModelÚProfileParams)Úmethod)ÚApprovalChoicec                  ób   € ] tR t^t$ RtRtR]R&   RtR]R&   RtR]R&   Rt	R]R&   Rt
R]R	&   R
tR# )Ú
RoomMemberz‚One roster row (``hosted_room_discussion.validate_roster``); legacy rooms may carry
pre-normalisation rows, so the set stays open.Nú
str | NoneÚ	member_idÚprofileÚhandleÚdisplay_nameúdict[str, JsonValue] | NoneÚtarget© )Ú__name__Ú
__module__Ú__qualname__Ú__firstlineno__Ú__doc__r   Ú__annotations__r   r   r   r   Ú__static_attributes__r   ó    ÚK/home/ubuntu/.hermes/hermes-agent/tui_gateway/contracts/groups_bot_relay.pyr   r      s<   ‡ ñ6ð !€IˆzÓ Ø€GˆZÓØ€FˆJÓØ#€L�*Ó#Ø*.€FÐ'×.r   r   c                  ó,   € ] tR t^!t$ R]R&   R]R&   RtR# )Ú	RoomActorÚstrÚkindÚidr   N©r   r   r   r   r   r   r   r   r   r!   r!   !   s   ‡ Ø
ƒIØ‡Gr   r!   c                  ó~   € ] tR t^&t$ RtR]R&   R]R&   R]R&   R]R&   R]R	&   R
tR]R&   R]R&   R]R&   RtR]R&   RtR
# )Ú	RoomEventz-``gateway/hosted_rooms.py::_event_from_row``.r"   Úroom_idÚintÚseqÚevent_idr#   r!   ÚactorNú
int | NoneÚauthority_epochúdict[str, JsonValue]ÚpayloadÚfloatÚ
created_atFÚboolÚ
idempotentr   )	r   r   r   r   r   r   r.   r4   r   r   r   r   r'   r'   &   s?   ‡ Ù7àƒLØ	ƒHØƒMØ
ƒIØÓØ"&€O�ZÓ&Ø!Ó!ØÓØ€J�×r   r'   c                  óÎ   € ] tR t^4t$ RtR]R&   R]R&   R]R&   R]R&   R]R	&   R]R
&   R]R&   R]R&   RtR]R&   RtR]R&   RtR]R&   Rt	R]R&   Rt
R]R&   RtR]R&   RtR]R&   RtR# )ÚRoomz£``gateway/hosted_rooms.py::_room_from_row`` plus the branch-only keys ``create`` (legacy
adoption), ``state`` (``authority_claim``) and ``rename`` (``event``) add.r"   r(   Únameúlist[RoomMember]ÚmembersÚauthority_gateway_idr)   r.   Úrevisionr1   r2   Ú
updated_atFr3   r4   Núfloat | NoneÚdisbanded_atr-   Ú
latest_seqúbool | NoneÚadoptedúRoomEvent | NoneÚclaim_eventÚauthority_claimÚeventr   )r   r   r   r   r   r   r4   r>   r?   rA   rC   rD   rE   r   r   r   r   r6   r6   4   s€   ‡ ñRð ƒLØ
ƒIØÓØÓØÓØƒMØÓØÓØ€J�ÓØ!%€L�,Ó%Ø!€J�
Ó!Ø€Gˆ[ÓØ$(€KÐ!Ó(Ø(,€OÐ%Ó,Ø"€EÐ×"r   r6   c                  ó,   € ] tR t^It$ R]R&   R]R&   RtR# )ÚRoomAuthorityr"   Ú
gateway_idr)   Úepochr   Nr%   r   r   r   rG   rG   I   s   ‡ ØƒOØ‡Jr   rG   c                  óŒ   € ] tR t^Nt$ RtRtR]R&   RtR]R&   RtR]R&   Rt	R]R&   Rt
R]R	&   ]P                  R
R/,          tRtR# )ÚRoomMemberInputzQA roster row as the client proposes it; ``validate_roster`` owns the exact rules.Nr   r   r   r   r   r   r   ÚextraÚallowr   )r   r   r   r   r   r   r   r   r   r   r   r   Úmodel_configr   r   r   r   rK   rK   N   sM   ‡ Ù[à €IˆzÓ Ø€GˆZÓØ€FˆJÓØ#€L�*Ó#Ø*.€FÐ'Ó.Ø×&Ñ&¨'°7Ð);Õ;„Lr   rK   c                  ó&   € ] tR t^Yt$ RtR]R&   RtR# )Ú
RoomParamsz(Any method addressed at one hosted room.r"   r(   r   N©r   r   r   r   r   r   r   r   r   r   rP   rP   Y   s
   ‡ Ù2à‡Lr   rP   c                  óX   € ] tR t^bt$ RtR]R&   R]R&   R]R&   R]R&   R]R	&   R]R
&   RtR# )ÚRoomExecutionPolicyzF``gateway/hosted_room_execution_policy.py::execution_policy_mapping``.r)   Úversionr"   Útarget_profileú	list[str]Úenabled_toolsetsÚapproval_modeÚmax_iterationsÚpolicy_digestr   NrQ   r   r   r   rS   rS   b   s(   ‡ ÙPàƒLØÓØÓØÓØÓØ×r   rS   c                  óP   € ] tR t^mt$ RtR]R&   RtR]R&   RtR]R&   RtR]R&   R	t	R# )
ÚRoomLinkEndpointzl``GatewayRoomCatalog.endpoint_mapping``: ``url``/``transport_security`` when available,
``reason`` when not.r3   Ú	availableNr   ÚurlÚtransport_securityÚreasonr   )
r   r   r   r   r   r   r^   r_   r`   r   r   r   r   r\   r\   m   s-   ‡ ñð ƒOØ€CˆÓØ%)Ð˜
Ó)Ø€FˆJ×r   r\   c                  óz   € ] tR t^wt$ RtR]R&   R]R&   R]R&   R]R	&   R]R
&   R]R&   R]R&   R]R&   RtR]R&   RtR# )ÚRoomLinkCatalogz?``gateway/hosted_room_peer.py::GatewayRoomCatalog.as_mapping``.r"   Úinstallation_idz	list[int]Úprotocol_versionsrV   Ú
link_modesr3   Úpersistent_processÚtextÚattachmentsrS   Úexecution_policyÚcatalog_digestNúRoomLinkEndpoint | NoneÚendpointr   )r   r   r   r   r   r   rl   r   r   r   r   rb   rb   w   s?   ‡ ÙIàÓØ Ó ØÓØÓØ
ƒJØÓØ)Ó)ØÓØ(,€HÐ%×,r   rb   c                  ó^   € ] tR t^…t$ RtR]R&   RtR]R&   RtR]R&   RtR	]R
&   Rt	R]R&   Rt
R# )ÚRoomLinkStatuszU``enabled`` with ``profile``/``catalog``/``endpoint``, or disabled with a ``reason``.r3   ÚenabledNr   r   zRoomLinkCatalog | NoneÚcatalogrk   rl   r`   r   )r   r   r   r   r   r   r   rp   rl   r`   r   r   r   r   rn   rn   …   s4   ‡ Ù_àƒMØ€GˆZÓØ&*€GÐ#Ó*Ø(,€HÐ%Ó,Ø€FˆJ×r   rn   c                  ó   € ] tR t^’tRtR# )ÚGroupsCapabilitiesParamsr   N©r   r   r   r   r   r   r   r   rr   rr   ’   ó   † Ûr   rr   c                  óv   € ] tR t^–t$ R]R&   R]R&   R]R&   R]R&   R]R	&   R
]R&   R
]R&   R]R&   RtR]R&   RtR# )ÚGroupsCapabilitiesResultr)   Úprotocol_versionr3   Údriverrf   r"   r:   rn   Ú	room_linkrV   ÚfeaturesÚmethodsÚmax_log_limitNúlist[str] | NoneÚseatable_profilesr   )r   r   r   r   r   r~   r   r   r   r   rv   rv   –   s?   ‡ ØÓØƒLØÓØÓØÓØÓØÓØÓð +/ÐÐ'×.r   rv   zgroups.capabilitiesz>Describe the hosted-room protocol implemented by this gateway.)ÚparamsÚresultÚdocc                  óB   € ] tR t^¬t$ RtR]R&   RtR]R&   RtR]R&   RtR# )ÚGroupsListParamsNr@   Úinclude_disbandedr-   ÚlimitÚoffsetr   )	r   r   r   r   r„   r   r…   r†   r   r   r   r   rƒ   rƒ   ¬   s!   ‡ Ø%)Ð�{Ó)Ø€Eˆ:ÓØ€FˆJ×r   rƒ   c                  ó0   € ] tR t^²t$ R]R&   RtR]R&   RtR# )ÚGroupsListResultz
list[Room]ÚroomsNr-   Únext_offsetr   )r   r   r   r   r   rŠ   r   r   r   r   rˆ   rˆ   ²   s   ‡ ØÓØ"€K�×"r   rˆ   zgroups.listz?List rooms hosted by this gateway, most recently changed first.c                  óD   € ] tR t^»t$ R]R&   R]R&   R]R&   RtR]R&   R	tR# )
ÚGroupsCreateParamsr"   r(   r7   úlist[RoomMemberInput]r9   Nr   r:   r   )r   r   r   r   r   r:   r   r   r   r   rŒ   rŒ   »   s   ‡ ØƒLØ
ƒIØ"Ó"à'+Ð˜*×+r   rŒ   c                  ó"   € ] tR t^Ãt$ R]R&   RtR# )ÚGroupsCreateResultr6   Úroomr   Nr%   r   r   r   r�   r�   Ã   ó   ‡ Ø
‡Jr   r�   zgroups.createzWCreate a hosted room idempotently; authority is this gateway's stable install identity.c                  ó&   € ] tR t^Ët$ RtR]R&   RtR# )ÚGroupsStateParamsNr@   r„   r   )r   r   r   r   r„   r   r   r   r   r   r“   r“   Ë   s   ‡ Ø%)Ð�{×)r   r“   c                  ó6   € ] tR t^Ït$ R]R&   R]R&   R]R&   RtR# )ÚPeerRouteStatusr"   r(   r   Ústatusr   Nr%   r   r   r   r•   r•   Ï   s   ‡ ØƒLØƒNØ‡Kr   r•   c                  ó0   € ] tR t^Õt$ RtR]R&   R]R&   RtR# )ÚRoomMemberActivityzJOne live room task: ``status`` is ``queued``, ``running`` or ``stopping``.r"   r   r–   r   NrQ   r   r   r   r˜   r˜   Õ   s   ‡ ÙTàƒNØ‡Kr   r˜   c                  ót   € ] tR t^Üt$ RtR]R&   R]R&   R]R&   R]R&   R]R	&   ]! ]R
7      tR]R&   R]R&   Rt	R# )ÚRoomDriverStatusa	  ``HostedRoomService.status(room_id)``; ``pending_actions`` rows are ``{kind: retry, task_id}``
or the driver's approval action (``kind: approval`` + run/session/approval context).
``member_activity`` lists live tasks in admission order (absent from older gateways).r3   ÚrunningÚworkingÚblockedzdict[str, int]Úcountszlist[dict[str, JsonValue]]Úpending_actions)Údefault_factoryzlist[RoomMemberActivity]Úmember_activityzlist[PeerRouteStatus]Úpeer_routesr   N)
r   r   r   r   r   r   r   Úlistr¡   r   r   r   r   rš   rš   Ü   s;   ‡ ñ]ð ƒMØƒMØƒMØÓØ/Ó/Ù05ÀdÔ0K€OÐ-ÓKØ&×&r   rš   c                  ó0   € ] tR t^êt$ R]R&   RtR]R&   RtR# )ÚGroupsStateResultr6   r�   NzRoomDriverStatus | NoneÚdriver_statusr   )r   r   r   r   r   r¦   r   r   r   r   r¥   r¥   ê   s   ‡ Ø
ƒJØ-1€MÐ*×1r   r¥   zgroups.statezTOne hosted room's replay cursor and fenced authority state, plus live driver status.c                  ó0   € ] tR t^öt$ RtR]R&   R]R&   RtR# )ÚGroupsSendParamsNr   r+   r/   r0   r   )r   r   r   r   r+   r   r   r   r   r   r¨   r¨   ö   s   ‡ Ø€HˆjÓØ!×!r   r¨   c                  óL   € ] tR t^ût$ R]R&   RtR]R&   RtR]R&   RtR]R	&   R
tR# )ÚGroupsSendResultr'   rE   Nr   Úclient_event_idTr3   ÚacceptedÚdriver_startedr   )	r   r   r   r   r   r«   r¬   r­   r   r   r   r   rª   rª   û   s&   ‡ ØÓØ"&€O�ZÓ&Ø€HˆdÓØ€N�D×r   rª   zgroups.sendzLAppend one inert message.user event idempotently; the actor is server-owned.c                  ó,   € ] tR tRt$ R]R&   R]R&   RtR# )ÚGroupsRenameParamsi  r"   r+   r7   r   Nr%   r   r   r   r¯   r¯     s   ‡ ØƒMØ
‡Ir   r¯   c                  ó"   € ] tR tRt$ R]R&   RtR# )ÚGroupsRenameResulti  r6   r�   r   Nr%   r   r   r   r±   r±     r‘   r   r±   zgroups.renamez8Rename one hosted room atomically with its replay event.c                  óB   € ] tR tRt$ RtR]R&   RtR]R&   RtR]R&   RtR# )	ÚGroupsLogParamsi  Nr-   Ú	since_seqr…   r@   r„   r   )	r   r   r   r   r´   r   r…   r„   r   r   r   r   r³   r³     s!   ‡ Ø €IˆzÓ Ø€Eˆ:ÓØ%)Ð�{×)r   r³   c                  óN   € ] tR tRt$ RtR]R&   R]R&   R]R&   R]R	&   R
]R&   RtR# )ÚGroupsLogResulti  ua   ``gateway/hosted_rooms.py::read_events`` page â€” also the ``page`` ``groups.replicate`` ingests.zlist[RoomEvent]Úeventsr)   Úcursorr?   r3   Úhas_morerG   Ú	authorityr   NrQ   r   r   r   r¶   r¶     s    ‡ ÙkàÓØƒKØƒOØƒNØ×r   r¶   z
groups.logzLA monotonic room-log delta after since_seq, bounded by count and page bytes.c                  ó&   € ] tR tRt$ RtR]R&   RtR# )ÚGroupsDisbandParamsi*  Nr   Ú	cancel_idr   ©r   r   r   r   r½   r   r   r   r   r   r¼   r¼   *  ó   ‡ Ø €Iˆz× r   r¼   c                  óR   € ] tR tRt$ R]R&   R]R&   R]R&   RtR	]R
&   RtR]R&   RtR# )ÚRoomTombstonei.  r"   r(   r1   r>   r3   r4   Nr@   Úhistory_expiredrB   rE   r   )r   r   r   r   r   rÂ   rE   r   r   r   r   rÁ   rÁ   .  s(   ‡ ØƒLØÓØÓØ#'€O�[Ó'Ø"€EÐ×"r   rÁ   c                  ó"   € ] tR tRt$ R]R&   RtR# )ÚGroupsDisbandResulti6  rÁ   Ú	tombstoner   Nr%   r   r   r   rÄ   rÄ   6  s   ‡ Ø×r   rÄ   zgroups.disbandzXPermanently tombstone a hosted room id after stopping its work and revoking peer routes.c                  ó&   € ] tR tRt$ RtR]R&   RtR# )ÚGroupsStopParamsi>  Nr   r½   r   r¾   r   r   r   rÇ   rÇ   >  r¿   r   rÇ   c                  ó"   € ] tR tRt$ R]R&   RtR# )ÚGroupsStopResultiB  r)   Ú	cancelledr   Nr%   r   r   r   rÉ   rÉ   B  s   ‡ Ø‡Nr   rÉ   zgroups.stopz:Durably cancel queued or running work for one hosted room.c                  óJ   € ] tR tRt$ R]R&   R]R&   R]R&   R]R&   R]R	&   R
tR# )ÚGroupsApproveParamsiJ  r"   r   Útask_idr)   Úexecution_generationr   ÚchoiceÚ
request_idr   Nr%   r   r   r   rÌ   rÌ   J  s   ‡ ØƒNØƒLØÓØÓØ‡Or   rÌ   c                  ó4   € ] tR tRt$ RtRtR]R&   R]R&   RtR	# )
ÚGroupsApproveResultiR  zU``result`` is the local ``approval.respond`` answer or the peer's run-action receipt.Tr3   Úapprovedr/   r€   r   N)r   r   r   r   r   rÓ   r   r   r   r   r   rÒ   rÒ   R  s   ‡ Ù_à€HˆdÓØ × r   rÒ   zgroups.approvezIResolve one exact pending approval raised by a local or peer room member.c                  ó"   € ] tR tRt$ R]R&   RtR# )ÚGroupsRetryParamsi]  r"   rÍ   r   Nr%   r   r   r   rÕ   rÕ   ]  s   ‡ Ø‡Lr   rÕ   c                  ó^   € ] tR tRt$ R]R&   R]R&   R]R&   R]R&   R]R&   R]R	&   R]R
&   RtR# )ÚRoomTaskReceiptia  r"   r(   rÍ   Ú	thread_idÚturn_idr–   r)   rÎ   Úcancel_generationr   Nr%   r   r   r   r×   r×   a  s'   ‡ ØƒLØƒLØƒNØƒLØƒKØÓØ×r   r×   c                  ó0   € ] tR tRt$ RtR]R&   R]R&   RtR# )	ÚGroupsRetryResultik  Tr3   Úretriedr×   Útaskr   N)r   r   r   r   rÝ   r   r   r   r   r   rÜ   rÜ   k  s   ‡ Ø€GˆTÓØ
×r   rÜ   zgroups.retryzCRetry one indeterminate room task after explicit user confirmation.c                  ó6   € ] tR tRt$ R]R&   R]R&   R]R&   RtR	# )
ÚGroupsReplicateParamsiw  r"   Ú	room_namer�   r9   r/   Úpager   Nr%   r   r   r   rà   rà   w  s   ‡ ØƒNØ"Ó"Ø
×r   rà   c                  óJ   € ] tR tRt$ R]R&   R]R&   R]R&   R]R&   R	]R
&   RtR# )ÚGroupsReplicateResulti}  r"   r(   r)   Ú
stored_seqÚingestedrG   rº   r3   Ú	caught_upr   Nr%   r   r   r   rä   rä   }  s   ‡ ØƒLØƒOØƒMØÓØ‡Or   rä   zgroups.replicatezSPersist one authority-stamped replay page into the local replica store; idempotent.c                  ó   € ] tR tRtRtR# )ÚGroupsReplicaStateParamsi‰  r   Nrs   r   r   r   ré   ré   ‰  rt   r   ré   c                  ór   € ] tR tRt$ R]R&   R]R&   R]R&   R]R&   R	]R
&   R	]R&   R	]R&   R]R&   R]R&   RtR# )ÚGroupsReplicaStateResulti�  r"   r(   r7   r8   r9   rG   rº   r)   Úlast_seqr?   Úevent_bytesr1   r2   r<   r   Nr%   r   r   r   rë   rë   �  s4   ‡ ØƒLØ
ƒIØÓØÓØƒMØƒOØÓØÓØ×r   rë   zgroups.replica_statez@The local replica's coverage and authority lineage for one room.c                  ó4   € ] tR tRt$ RtR]R&   RtR]R&   RtR# )ÚGroupsPromoteParamsi�  Nr@   Úconfirmr   r`   r   )r   r   r   r   rð   r   r`   r   r   r   r   rï   rï   �  s   ‡ Ø€Gˆ[ÓØ€FˆJ×r   rï   c                  ó^   € ] tR tRt$ R]R&   R]R&   R]R&   R]R&   R]R&   R]R	&   R]R
&   RtR# )ÚGroupsPromoteResulti¢  r"   r(   r:   r)   r.   Úprevious_gateway_idÚprevious_epochÚ	claim_seqr?   r   Nr%   r   r   r   rò   rò   ¢  s)   ‡ ØƒLØÓØÓØÓØÓØƒNØ‡Or   rò   zgroups.promotezOContinue a replicated room on this gateway at epoch + 1; requires confirm=true.c                  ó,   € ] tR tRt$ R]R&   R]R&   RtR# )ÚGroupsDemoteParamsi°  r"   Úobserved_gateway_idr)   Úobserved_epochr   Nr%   r   r   r   r÷   r÷   °  s   ‡ ØÓØ×r   r÷   c                  ó@   € ] tR tRt$ R]R&   R]R&   R]R&   R]R&   R	tR
# )ÚGroupsDemoteResultiµ  r"   r(   r:   r)   r.   r3   r4   r   Nr%   r   r   r   rû   rû   µ  s   ‡ ØƒLØÓØÓØ×r   rû   zgroups.demotezGFence this gateway's stale room authority against a proven newer epoch.c                  óz   € ] tR tRt$ RtR]R&   RtR]R&   RtR]R&   RtR]R&   Rt	R]R	&   Rt
R]R
&   RtR]R&   RtR# )ÚGroupsPeerInviteParamsiÃ  Nr   r(   Úhome_install_idr:   r-   r.   r   Úgrant_idr=   Úttl_secondsr   )r   r   r   r   r(   r   rþ   r:   r.   r   rÿ   r   r   r   r   r   rý   rý   Ã  sI   ‡ Ø€GˆZÓØ"&€O�ZÓ&Ø'+Ð˜*Ó+Ø"&€O�ZÓ&Ø €IˆzÓ Ø€HˆjÓØ $€K�×$r   rý   c                  ó@   € ] tR tRt$ R]R&   R]R&   R]R&   R]R&   R	tR
# )ÚGroupsPeerInviteResultiÍ  r"   ÚgrantrU   rb   rp   r\   rl   r   Nr%   r   r   r   r  r  Í  s   ‡ ØƒJØÓØÓØ×r   r  zgroups.peer.invitezFMint one target-issued room/profile grant for a prospective room home.c                  ó"   € ] tR tRt$ R]R&   RtR# )ÚGroupsPeerRevokeParamsiØ  r"   r  r   Nr%   r   r   r   r  r  Ø  ó   ‡ Ø‡Jr   r  c                  ó&   € ] tR tRt$ RtR]R&   RtR# )ÚGroupsPeerRevokeResultiÜ  Tr3   Úrevokedr   N)r   r   r   r   r	  r   r   r   r   r   r  r  Ü  s   ‡ Ø€GˆT×r   r  zgroups.peer.revokez=Revoke one target-issued grant using its exact profile scope.c                  óf   € ] tR tRt$ R]R&   R]R&   R]R&   R]R&   R]R&   R	tR
]R&   R	tR
]R&   RtR	# )ÚGroupsPeerRegisterParamsiä  r"   r   Ú
target_urlrU   r  r/   rp   Nr   Úcancellation_scope_idÚtrace_idr   )r   r   r   r   r   r  r  r   r   r   r   r  r  ä  s2   ‡ ØƒNØƒOØÓØƒJØ!Ó!Ø(,Ð˜:Ó,Ø€Hˆj×r   r  c                  óN   € ] tR tRt$ RtR]R&   R]R&   R]R&   R]R&   R]R	&   R
tR# )ÚGroupsPeerRegisterResultiî  Tr3   Ú
registeredr"   Úmoder_   Útarget_install_idrU   r   N)r   r   r   r   r  r   r   r   r   r   r  r  î  s#   ‡ Ø€J�ÓØ
ƒIØÓØÓØ×r   r  zgroups.peer.registerz:Register and probe one scoped peer route on the room home.c                  ó¨   € ] tR tRt$ RtRtR]R&   RtR]R&   RtR]R&   Rt	R]R&   Rt
R]R	&   RtR]R
&   RtR]R&   ]P                  RR/,          tRtR# )ÚRelayAgentRowiý  z�A roster row the Desktop pushes (``tools/bot_relay.py::_normalize_roster_row``); invalid
rows are dropped server-side, so the shape stays open.Nr   r   r   Úconnection_idÚconnection_labelÚtitleÚdescriptionr@   ÚonlinerL   rM   r   )r   r   r   r   r   r   r   r   r  r  r  r  r  r   rN   r   r   r   r   r  r  ý  se   ‡ ñ>ð €GˆZÓØ€FˆJÓØ $€M�:Ó$Ø#'Ð�jÓ'Ø€Eˆ:ÓØ"€K�Ó"Ø€FˆKÓØ×&Ñ&¨'°7Ð);Õ;„Lr   r  c                  ó&   € ] tR tRt$ RtR]R&   RtR# )ÚBotRelayRosterSyncParamsi  Nzlist[RelayAgentRow] | NoneÚagentsr   )r   r   r   r   r  r   r   r   r   r   r  r    s   ‡ Ø)-€FÐ&×-r   r  c                  ó"   € ] tR tRt$ R]R&   RtR# )ÚBotRelayRosterSyncResulti  r)   Úcountr   Nr%   r   r   r   r  r    r  r   r  zbot_relay.roster.syncz[Replace this gateway's view of agents on other connections; answers the accepted row count.c                  ó   € ] tR tRtRtR# )ÚBotRelayOutboxDrainParamsi  r   Nrs   r   r   r   r"  r"    rt   r   r"  c                  ól   € ] tR tRt$ RtR]R&   R]R&   R]R&   R]R&   R]R	&   R]R
&   R]R&   R]R&   RtR# )ÚRelayEnvelopei  z)``tools/bot_relay.py::enqueue_envelope``.r"   r$   zint | floatr2   Úfrom_profileÚfrom_handleÚtarget_connectionrU   Útarget_handleÚmessager   NrQ   r   r   r   r$  r$    s3   ‡ Ù3àƒGØÓØÓØÓØÓØÓØÓØ‡Lr   r$  c                  ó"   € ] tR tRt$ R]R&   RtR# )ÚBotRelayOutboxDrainResulti(  zlist[RelayEnvelope]Ú	envelopesr   Nr%   r   r   r   r+  r+  (  s   ‡ Ø"×"r   r+  zbot_relay.outbox.drainzPAtomically claim every pending cross-connection envelope queued on this gateway.c                  óZ   € ] tR tRt$ RtR]R&   R]R&   RtR]R&   RtR]R	&   RtR]R
&   Rt	R# )ÚBotRelayDeliverParamsi0  zb``profile`` here is the TARGET profile on this gateway (also what the desktop route wrapper adds).r"   r   r)  Nr   r%  r&  Úfrom_connectionr   )
r   r   r   r   r   r   r%  r&  r/  r   r   r   r   r.  r.  0  s-   ‡ ÙlàƒLØƒLØ#€L�*Ó#Ø"€K�Ó"Ø"&€O�Z×&r   r.  c                  ó"   € ] tR tRt$ R]R&   RtR# )ÚBotRelayDeliverResulti:  r"   Úreplyr   Nr%   r   r   r   r1  r1  :  r  r   r1  zbot_relay.deliverz^Deliver a relayed DM into a Bot Chat on this gateway and return the one-turn reply (blocking).c                  óL   € ] tR tRt$ R]R&   RtR]R&   RtR]R&   RtR]R&   R	tR# )
ÚBotRelayReplyParamsiB  r"   r$   Nr   r2  Úerrorr`   r   )	r   r   r   r   r   r2  r5  r`   r   r   r   r   r4  r4  B  s%   ‡ ØƒGØ€Eˆ:ÓØ€Eˆ:ÓØ€FˆJ×r   r4  zbot_relay.replyz\Write a relayed reply and/or typed error for an envelope so the sender-side waiter resolves.c                  ó&   € ] tR tRt$ RtR]R&   RtR# )ÚBrowserControllerParamsiP  zFEvery controller call names the session the controller is attached to.r"   Ú
session_idr   NrQ   r   r   r   r7  r7  P  s
   ‡ ÙPà‡Or   r7  c                  óV   € ] tR tRt$ R]R&   R]R&   RtR]R&   RtR]R	&   RtR
]R&   RtR# )ÚBrowserControllerRegisterParamsiV  r"   Úcontroller_idÚbrowser_profile_idNr}   ÚcapabilitiesúJsonValue | Nonerw   r   Úprincipal_idr   )	r   r   r   r   r   r=  rw   r?  r   r   r   r   r:  r:  V  s/   ‡ ØÓØÓØ%)€LÐ"Ó)Ø)-ÐÐ&Ó-à#€L�*×#r   r:  c                  ó^   € ] tR tRt$ R]R&   R]R&   R]R&   R]R&   R]R&   R]R&   R	]R
&   RtR# )ÚControllerScopei_  r"   r?  Ú
profile_idr8  r;  r<  Útransport_familyrV   r=  r   Nr%   r   r   r   rA  rA  _  s*   ‡ ØÓØƒOØƒOØÓØÓØÓØ×r   rA  c                  ó"   € ] tR tRt$ R]R&   RtR# )ÚBrowserControllerRegisterResultii  rA  Úscoper   Nr%   r   r   r   rE  rE  i  s   ‡ Ø×r   rE  zbrowser.controller.registerzVAttach this connection as the browser controller for one session; fails closed (4403).c                  óL   € ] tR tRt$ R]R&   RtR]R&   RtR]R&   RtR]R&   R	tR# )
ÚBrowserControllerResultParamsir  r"   Ú
command_idNr>  Úokr€   r5  r   )	r   r   r   r   r   rJ  r€   r5  r   r   r   r   rH  rH  r  s(   ‡ ØƒOØ€BÐÓØ#€FÐÓ#Ø"€EÐ×"r   rH  c                  ó"   € ] tR tRt$ R]R&   RtR# )ÚBrowserControllerResultResultiy  r3   r¬   r   Nr%   r   r   r   rL  rL  y  s   ‡ Ø‡Nr   rL  zbrowser.controller.resultz_Deliver one command result to the broker; accepted is false for unknown or settled command ids.zbrowser.controller.heartbeatzJAcknowledge a heartbeat only for this transport's own attached controller.c                  ó&   € ] tR tRt$ RtR]R&   RtR# )ÚBrowserControllerDetachResulti†  Tr3   Údetachedr   N)r   r   r   r   rO  r   r   r   r   r   rN  rN  †  s   ‡ Ø€Hˆd×r   rN  zbrowser.controller.detachzFHard-detach only the controller owned by this authenticated transport.N)r¶   r$  r6   rG   r'   rb   r   rK   )Wr   Ú
__future__r   Úpydanticr   Úbaser   r   r   r   Úcommonr   r	   r
   Úregistryr   Úserver_requestsr   r   r!   r'   r6   rG   rK   rP   rS   r\   rb   rn   rr   rv   rƒ   rˆ   rŒ   r�   r“   r•   r˜   rš   r¥   r¨   rª   r¯   r±   r³   r¶   r¼   rÁ   rÄ   rÇ   rÉ   rÌ   rÒ   rÕ   r×   rÜ   rà   rä   ré   rë   rï   rò   r÷   rû   rý   r  r  r  r  r  r  r  r  r"  r$  r+  r.  r1  r4  r7  r:  rA  rE  rH  rL  rN  Ú__all__r   r   r   Ú<module>rW     s¦  ðñõ #å ç 5Ó 5ß 6Ñ 6Ý Ý +ô
/�ô /ô�ô ô
�ô ô#ˆ6ô #ô*�Fô ô
<�fô <ô�ô ô˜&ô ô�vô ô-�fô -ô�Vô ô	˜}ô 	ô/˜vô /ñ ÐÐ%=ÐF^ØKõMô�}ô ô#�vô #ñ
 €}Ð-Ð6FØLõNô,˜ô ,ô˜ô ñ €Ð1Ð:LØdõfô*˜
ô *ô�fô ô˜ô ô'�vô 'ô2˜ô 2ñ
 €~Ð/Ð8IØaõcô"�zô "ô
 �vô  ñ €}Ð-Ð6FØYõ[ô˜ô ô
˜ô ñ €Ð1Ð:LØEõGô*�jô *ô�fô ñ €|˜O°OØYõ[ô!˜*ô !ô#�Fô #ô˜&ô ñ ÐÐ 3Ð<OØeõgô!�zô !ô�vô ñ €}Ð-Ð6FØGõIô˜*ô ô!˜&ô !ñ ÐÐ 3Ð<OØVõXô˜
ô ô�fô ô˜ô ñ
 €~Ð/Ð8IØPõRô˜Jô ô˜Fô ñ ÐÐ"7Ð@UØ`õbô	˜zô 	ô	˜vô 	ñ ÐÐ&>ÐG_ØMõOô˜*ô ô
˜&ô ñ ÐÐ 3Ð<OØ\õ^ô˜ô ô
˜ô ñ €Ð1Ð:LØTõVô%˜]ô %ô˜Vô ñ ÐÐ$:ÐCYØSõUô˜]ô ô˜Vô ñ ÐÐ$:ÐCYØJõLô ˜zô  ô˜vô ñ ÐÐ&>ÐG_ØGõIô<�Fô <ô.˜}ô .ô˜vô ñ ÐÐ'?ÐH`Øhõjô	 ô 	ô
�Iô 
ô# ô #ñ ÐÐ(AÐJcØ]õ_ô'˜Fô 'ô˜Fô ñ ÐÐ#8ÐAVØkõmô˜-ô ñ ÐÐ!4¸XØiõkô˜fô ô$Ð&=ô $ô�fô ô fô ñ Ð$Ð-LØ-Øcõeô
#Ð$;ô #ô Fô ñ Ð"Ð+HØ+Ølõnñ
 Ð%Ð.EÈhØWõYô Fô ñ Ð"Ð+BÐKhØSõUò‚r   