+
    lHàjà:  ã                  ó~  € R t ^ RIHt ^ RIt^ RIt^ RIt^ RIt^ RIHt ^ RI	H
t
Ht ^ RIHtHtHtHtHt ^ RItRtRtRt]! ]]]04      tR	t]
 ! R
 R4      4       t]P4                  ! R4      t]P8                  ! 4       t]P<                  ! RR7      R R l4       tR R lt R R lt!R R lt"R R lt#R6R R llt$R R lt%R R lt&R7R R  llt'](])]*,          ]+],]-]*3,          ]*3,          t.R! R" lt/R# R$ lt0R%t1^t2R& R' lt3R8R(R/R) R* lllt4]P4                  ! R+4      t5R9R, R- llt6R. R/ lt7R0 R1 lt8R2R3/R4 R5 llt9R# ):z–Deferred-tool catalog for tool search: BM25 retrieval over deferrable tool
defs plus the budgeted, byte-stable catalog listing embedded in the bridge.)ÚannotationsN)ÚCounter)Ú	dataclassÚfield)ÚAnyÚDictÚListÚOptionalÚTupleÚtool_searchÚtool_describeÚ	tool_callg      @c                  ój   € ] tR t^t$ RtR]R&   R]R&   R]R&   R]R&   R]R&   ]! ]R	7      tR
]R&   Rt	R# )ÚCatalogEntryzEOne deferrable tool, in a form the bridge tools can search and serve.ÚstrÚnameÚdescriptionúdict[str, Any]ÚschemaÚsourceÚsource_name)Údefault_factoryú	list[str]Ú_tokens© N)
Ú__name__Ú
__module__Ú__qualname__Ú__firstlineno__Ú__doc__Ú__annotations__r   Úlistr   Ú__static_attributes__r   ó    Ú>/home/ubuntu/.hermes/hermes-agent/tools/tool_search_catalog.pyr   r      s0   ‡ áOà
ƒIØÓØÓØƒKØÓÙ¨tÔ4€GˆY×4r#   r   z[A-Za-z0-9]+i @  )Úmaxsizec               ó    € V ^8„  d   QhRRRR/# )é   Útokenr   Úreturnr   )Úformats   "r$   Ú__annotate__r+   +   s   € ÷ 1ñ 1�ð 1˜ñ 1r#   c                ó¤   € \        \        RR4      f    \        P                  ! R4      \        n        \        P                  P	                  V 4      # )zÓStem one token, memoized across stateless catalog rebuilds. Snowball stemmers carry
mutable parsing state and bridge dispatch runs on parallel tool-call threads, so the
stemmer is one-per-thread, created lazily.ÚstemmerNÚenglish)ÚgetattrÚ_thread_localÚsnowballstemmerr-   ÚstemWord)r(   s   &r$   Ú_stemr3   *   s=   € ô
 Œ}˜i¨Ó.Ò6Ü /× 7Ò 7¸	Ó BŒÔÜ× Ñ ×)Ñ)¨%Ó0Ð0r#   c               ó    € V ^8„  d   QhRRRR/# )r'   Útextr   r)   r   r   )r*   s   "r$   r+   r+   4   s   € ÷ Wñ W�Cð W˜Iñ Wr#   c                ó˜   € V '       d=   \         P                  V 4       Uu. uF  p\        VP                  4       4      NK  	  up# . # u upi )z„Lowercase alphanumeric tokens, Snowball-stemmed (English); shared by the index and
query paths so "issues" matches ``create_issue``.)Ú	_TOKEN_REÚfindallr3   Úlower)r5   r(   s   & r$   Ú	_tokenizer:   4   s>   € ÷ KO¬i×.?Ñ.?ÀÔ.EÓFÑ.E UŒE�%—+‘+“-Ö Ñ.EÑFÐVÐTVÐVùÒFs    "Ac               ó    € V ^8„  d   QhRRRR/# )r'   Útdr   r)   r   )r*   s   "r$   r+   r+   :   s   € ÷ $ñ $ˆNð $˜~ñ $r#   c                ó8   € V P                  R4      ;'       g    / # )z?The ``function`` block of a tool-def (``{}`` when absent/None).Úfunction)Úget)r<   s   &r$   Ú_fnr@   :   s   € à�6‰6�*Ó×#Ð# Ð#r#   c               ó    € V ^8„  d   QhRRRR/# )r'   r   r   r)   r   r   )r*   s   "r$   r+   r+   ?   s   € ÷ ñ ˜#ð  #ñ r#   c                óV   €  ^ RI Hp VP                  V 4      #   \         d     R# i ; i)z¢Registry entry for ``name``; None when unregistered OR the registry raises (lookup
failures must never fail a bridge call). Lazy import: tests patch the registry.©ÚregistryN)Útools.registryrD   Ú	get_entryÚ	Exception)r   rD   s   & r$   Ú_registry_entryrH   ?   s-   € ðÝ+Ø×!Ñ! $Ó'Ð'øÜô Úðús   ‚ ™(§(c               ó    € V ^8„  d   QhRRRR/# )r'   r   r   r)   úOptional[str]r   )r*   s   "r$   r+   r+   I   s   € ÷ 9ñ 9˜Cð 9 Mñ 9r#   c                ób   € \        \        V 4      RR4      p\        V\        4      '       d   V# R# )zSToolset of a registered tool; None when unregistered or malformed (no str toolset).ÚtoolsetN)r/   rH   Ú
isinstancer   ©r   rL   s   & r$   Ú_registry_toolsetrO   I   s,   € ä”o dÓ+¨Y¸Ó=€GÜ  ¬#×.Ò.ˆ7Ð8°DÐ8r#   c               ó$   € V ^8„  d   QhRRRRRR/# )r'   r<   r   Úsource_labelr   r)   r   )r*   s   "r$   r+   r+   O   s&   € ÷ Sñ S˜>ð S¸ð SÀcñ Sr#   c                ó¾  € \        V 4      pVP                  RR4      pVP                  R4      p\        P                  ! RRV4      pV'       d   WP                  4       9  d   TMRpRP                  VP                  R4      ;'       g    / P                  R4      ;'       g    / P                  4       4      pT RT RVP                  RR4      ;'       g    R RV 2# )	uA  Search-text blob: split name words + source label + description + top-level parameter
names (schema bodies are noise with no recall gain). The ``mcp__`` prefix is dropped â€” it
is in every MCP document, so its IDF is ~0. The source label lets a service-name query
("linear") reach a tool whose own name omits the vendor.r   Ú Úmcp__z[_.:-]Ú Ú
parametersÚ
propertiesr   )r@   r?   ÚremoveprefixÚreÚsubÚsplitÚjoinÚkeys)r<   rQ   Úfnr   Ú
name_wordsÚextraÚparam_namess   &&     r$   Ú_entry_search_textrb   O   sÃ   € ô
 
ˆR‹€BØ�6‰6�&˜"Ó€DØ×Ñ˜WÓ%€DÜ—’˜	 3¨Ó-€Jß(¨\×AQÑAQÓASÔ-S‰LÐY[€EØ—(‘(˜RŸV™V LÓ1×7Ð7°R×<Ñ<¸\ÓJ×PÐPÈb×VÑVÓXÓY€KØˆ\˜˜5˜'  2§6¡6¨-¸Ó#<×#BÐ#BÀÐ"CÀ1À[ÀMÐRÐRr#   c               ó    € V ^8„  d   QhRRRR/# )r'   r   r   r)   ztuple[str, str]r   )r*   s   "r$   r+   r+   ]   s   € ÷ Hñ H˜3ð H ?ñ Hr#   c                ób   € \        V 4      pVf   R# VP                  R4      '       d   RV3# RV3# )z=Return (source_kind, source_name) for a registered tool name.úmcp-ÚmcpÚplugin)ÚotherrS   )rO   Ú
startswithrN   s   & r$   Ú_classify_sourcerj   ]   s<   € ä Ó%€GØ‚ØÐØ×'Ñ'¨×/Ò/ˆE¸wÐGÐG°X¸wÐGÐGr#   c               ó    € V ^8„  d   QhRRRR/# )r'   Ú	tool_defsúlist[dict[str, Any]]r)   úlist[CatalogEntry]r   )r*   s   "r$   r+   r+   e   s   € ÷ ñ Ð1ð Ð6Hñ r#   c                óB  € . pV  F–  p\        V4      pVP                  RR4      pV'       g   K*  \        V4      w  rVV'       d   \        V4      MRpTP	                  \        YCP                  RR4      ;'       g    RW%V\        \        W'4      4      R7      4       K˜  	  V# )zHBuild the deferred-tool catalog from the deferrable subset of tool-defs.r   rS   r   )r   r   r   r   r   r   )r@   r?   rj   Ú_listing_group_labelÚappendr   r:   rb   )rl   Úcatalogr<   r^   r   r   r   rQ   s   &       r$   Úbuild_catalogrs   e   s�   € à"$€GÛˆÜ�‹WˆØ�v‰v�f˜bÓ!ˆßÙÜ.¨tÓ4Ñˆç<GÔ+¨KÔ8ÈRˆØ�‰”|Ø§6¡6¨-¸Ó#<×#BÐ#BÀÈ2Ø#¬YÔ7IÈ"Ó7[Ó-\ô^ö 	_ñ ð €Nr#   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'   Úquery_tokensr   Ú
doc_tokensÚdoc_lengthsz	list[int]Úavg_dlÚfloatÚdoc_freqúdict[str, int]Ún_docsÚintÚk1Úbr)   r   )r*   s   "r$   r+   r+   v   sQ   € ÷ ñ ˜ið °Yð ÈYð ØðØ)7ðØADðØJOðàðà$)ñr#   c                óÒ  € Rp\        V4      p	\        V4      p
V  FÈ  pVP                  V^ 4      V
P                  V^ 4      rÜV'       g   K0  V'       g   K:  \        P                  ! ^W\,
          R,           VR,           ,          ,           4      pWŽV,          V^,           ,          WÖ^V,
          Wy,          \        VR4      ,          ,           ,          ,           ,          ,          pKÊ  	  V# )u‘   Standard BM25 for one query against one document (inlined; the catalog is bounded â€”
typically < 500 tools â€” so a dependency is not worth it).g        ç      à?g      ð?)Úlenr   r?   ÚmathÚlogÚmax)ru   rv   rw   rx   rz   r|   r~   r   ÚscoreÚdlÚdoc_tfÚqÚdfÚtfÚidfs   &&&&&&&&       r$   Ú_bm25_scorer�   v   s°   € ð
 €EÜ	ˆZ‹€BÜ�ZÓ €FÛˆØ—‘˜a Ó# V§Z¡Z°°1Ó%5ˆBß‰2—"‘"Ü—(’(˜1 ¥¨cÕ 1°b¸3µhÕ?Õ?Ó@ˆCØ˜2•X  a¥Õ(¨B°q¸1µu¸q½vÌÈFÐTWÓHXÕ?XÕ7XÕ1YÕ,YÕZÕZŠEñ	 ð
 €Lr#   c               ó    € V ^8„  d   QhRRRR/# )r'   rr   rn   r)   Ú_CorpusStatsr   )r*   s   "r$   r+   r+   ‰   s   € ÷ =ñ =Ð-ð =°,ñ =r#   c                óð   € V  Uu. uF  p\        VP                  4      NK  	  pp\        V4      \        \        V4      ^4      ,          p\	        R V  4       4      pW#\        V4      \        V 4      3# u upi )zACompute the BM25 statistics shared by every query over a catalog.c              3  ó\   "  € T F"  p\        VP                  4       F  q"x € K  	  K$  	  R # 5i©N)Úsetr   )Ú.0ÚentryÚtoks   &  r$   Ú	<genexpr>Ú _corpus_stats.<locals>.<genexpr>�   s"   é € ÐN©˜u¼3¸u¿}¹}Ö;M°C”sÑ;M‘s«ùs   ‚*,)r‚   r   Úsumr…   r   Údict)rr   r•   rw   rx   rz   s   &    r$   Ú_corpus_statsr›   ‰   sd   € á3:Ó;±7¨%”3�u—}‘}Ö%±7€KÐ;Ü�Ó¤¤C¨Ó$4°aÓ 8Õ8€FÜÑN©ÓNÓN€HØ¤ X£´°G³Ð<Ð<ùò <s   …A3c               ó(   € V ^8„  d   QhRRRRRRRR/# )	r'   ru   r   rz   r{   r|   r}   r)   r   r   )r*   s   "r$   r+   r+   ‘   s)   € ÷ 'ñ '˜ið '°>ð 'È3ð 'ÐSVñ 'r#   c                ó2   aa€ R VV3R llp\        WR7      # )aG  The query token with the highest IDF: the word that names the intent. ``send``,
``read``, ``create`` sit in dozens of tool documents and separate nothing; ``gmail``,
``github``, ``incident`` sit in a few and separate everything. A document without this
token answered a different question, however many common tokens it shares.c               ó    € V ^8„  d   QhRRRR/# )r'   r(   r   r)   ry   r   )r*   s   "r$   r+   Ú!_gate_token.<locals>.__annotate__–   s   € ÷ >ñ >�Cð >˜Eñ >r#   c                óš   <€ SP                  V ^ 4      p\        P                  ! ^SV,
          R,           VR,           ,          ,           4      # )é    r�   )r?   rƒ   r„   )r(   rŠ   rz   r|   s   & €€r$   Ú_idfÚ_gate_token.<locals>._idf–   s9   ø€ Ø�\‰\˜% Ó#ˆÜ�xŠx˜˜V b�[¨3Õ.°2¸µ8Õ<Õ<Ó=Ð=r#   ©Úkey)r…   )ru   rz   r|   r¢   s   &ff r$   Ú_gate_tokenr¦   ‘   s   ù€ ÷
>ñ >ô ˆ|Ô&Ð&r#   r�   c               ó    € V ^8„  d   QhRRRR/# )r'   Úanswerable_term_countr}   r)   r   )r*   s   "r$   r+   r+   ¨   s   € ÷ Fñ F°3ð F¸3ñ Fr#   c                ó^   € V \         8  d   ^# \        P                  ! V \        ,          4      # )z’How many of a query's ANSWERABLE unique terms a document must match to be offered:
one below the engagement floor, else at least half, rounded up.)Ú!MIN_ANSWERABLE_TERMS_FOR_COVERAGErƒ   ÚceilÚMIN_QUERY_TERM_COVERAGE)r¨   s   &r$   Ú_required_term_coverager­   ¨   s&   € ð Ô@Ô@ÙÜ�9Š9Ð*Ô-DÕDÓEÐEr#   Úcorpus_statsc          
     ó,   € V ^8„  d   QhRRRRRRRRR	R/# )
r'   rr   rn   Úqueryr   Úlimitr}   r®   zOptional[_CorpusStats]r)   r   )r*   s   "r$   r+   r+   °   s2   € ÷  *ñ  *Ð.ð  *°sð  *À3ð  *Ø!7ð *ØCUñ *r#   c               óÄ  aaaa€ V '       d   V^ 8”  d   \        V4      M. pV'       g   . # T;'       g    \        V 4      pV^,          p\        WEV^,          4      oV Uu0 uF  qeP                  V^ 4      ^ 8”  g   K  VkK  	  upo\	        \        S4      4      oVP                  4       P                  4       oR VVVV3R llpV  Uu. uFU  q‡! V4      '       g   K  VP                  P                  4       S8X  d   \        R4      M\        WHP                  .VO5!  V3NKW  	  p	pV	P                  R RR7       V	RV  U
Uu. uF  w  r«VNK	  	  upp
# u upi u upi u upp
i )ag  Top-``limit`` catalog entries for ``query`` by BM25 (exact name match ranks first).

Admission is by the query's rarest token (:func:`_gate_token`), not by ``score > 0``:
BM25 is additive over the tokens a document shares with the query, so on a large catalog
``score > 0`` admits one-token matches and fills every slot with them (measured: "send
gmail email" returned 5 incident tools that only shared ``email``). A token no document
carries admits nothing; the caller's empty-group hint tells the model to retry without it.
Long queries additionally need :func:`_required_term_coverage` of their answerable terms.c               ó    € V ^8„  d   QhRRRR/# )r'   r•   r   r)   Úboolr   )r*   s   "r$   r+   Ú$search_catalog.<locals>.__annotate__Ä   s   € ÷ ^ñ ^˜ð ^¨$ñ ^r#   c                ó¼   <a€ V P                   P                  4       S8X  d   R# \        V P                  4      oSS9   ;'       d    \	        V3R lS 4       4      S8¬  # )zRCarries the intent word AND enough of the answerable terms (exact name is exempt).Tc              3  ó8   <"  € T F  qS9   g   K  ^x € K  	  R# 5i)é   Nr   )r”   ÚtÚtokenss   & €r$   r—   Ú4search_catalog.<locals>._admitted.<locals>.<genexpr>É   s   øé € Ð%K±¨AÀF¹{§a¢a³ùs   ƒ�
)r   r9   r“   r   r™   )r•   rº   Ú
answerableÚ
exact_nameÚgateÚrequired_termss   &@€€€€r$   Ú	_admittedÚ!search_catalog.<locals>._admittedÄ   sK   ù€ à�:‰:×ÑÓ Ô+ÙÜ�U—]‘]Ó#ˆØ�v‰~×]Ð]¤#Ô%K±Ó%KÓ"KÈ~Ñ"]Ð]r#   Úinfc                ó   € V ^ ,          # )r¡   r   )Úxs   &r$   Ú<lambda>Ú search_catalog.<locals>.<lambda>Ï   s   € ˜a ždr#   T)r¥   ÚreverseN)r:   r›   r¦   r?   r­   r‚   Ústripr9   r   ry   r�   r   Úsort)rr   r°   r±   r®   ru   rz   r¹   rÀ   r•   ÚscoredÚ_Úer¼   r½   r¾   r¿   s   &&&$        @@@@r$   Úsearch_catalogrÍ   °   s>  û€ ÷ (/°5¸1´9”9˜UÔ#À"€LßØˆ	Ø×9Ð9¤=°Ó#9€LØ˜A�€HÜ�|¨|¸A­Ó?€DÙ)ÓD™\˜¯\©\¸!¸QÓ-?À!Ñ-C—!�!™\ÑD€JÜ,¬S°«_Ó=€NØ—‘“×$Ñ$Ó&€J÷^ó ^ñ ó2ñ ˆE 	¨%× 0ô	N˜Ÿ™×)Ñ)Ó+¨zÔ9ŒˆuŒÜ˜,¯©ÐE¸ÓEÀuó	Náð ð 2ð ‡K�K‘N¨D€KÔ1Ø   %™.Ô)™.‘$�!‹A™.Ò)Ð)ùò! Eùò2ùó
 *s   Á EÁ=EÃEÃAEÅEz-(?<!\be\.g)(?<!\bi\.e)(?<!\betc)[.!?](?=\s|$)c               ó$   € V ^8„  d   QhRRRRRR/# )r'   r   r   Ú	max_charsr}   r)   r   )r*   s   "r$   r+   r+   ×   s!   € ÷ *ñ *˜Sð *¨Sð *¸#ñ *r#   c                óZ  € RP                  T ;'       g    RP                  4       4      p\        P                  V4      pV'       d   VRVP	                  4        MTp\        V4      V8:  d   V# VRV pRV9   d   VP                  R^4      ^ ,          MTpVP                  R4      R,           # )zÕFirst sentence of a tool description, clipped to ``max_chars`` on a word boundary.
``e.g.``/``i.e.``/``etc.`` do not end a sentence; whitespace normalization and the regex
search stay linear-time on hostile input.rU   rS   Nz,;: u   â€¦)r\   r[   Ú_SENTENCE_END_REÚsearchÚendr‚   ÚrsplitÚrstrip)r   rÏ   r5   ÚmÚclippeds   &&   r$   Ú_short_descrØ   ×   s–   € ð �8‰8�[×&Ð& B×-Ñ-Ó/Ó0€DÜ×Ñ Ó%€Aßˆ4��—‘“‰> D€DÜ
ˆ4ƒy�IÔØˆØ�:�IÐ€GØ+.°'¬>ˆg�n‰n˜S !Ó$ QÖ'¸w€GØ�>‰>˜&Ó! EÕ)Ð)r#   c               ó    € V ^8„  d   QhRRRR/# )r'   r   r   r)   r   )r*   s   "r$   r+   r+   å   s   € ÷ &ñ & cð &¨cñ &r#   c                ó<   € T ;'       g    RpVP                  R4      # )zLHuman-facing group heading for a toolset, e.g. ``mcp-github`` -> ``github``.rh   re   )rX   )r   Úlabels   & r$   rp   rp   å   s    € à×"Ð"˜7€EØ×Ñ˜fÓ%Ð%r#   c               ó   € V ^8„  d   QhRR/# )r'   r)   rm   r   )r*   s   "r$   r+   r+   ë   s   € ÷ ñ Ð!5ñ r#   c            	     óF  € ^ RI Hp  ^ RIHp ^ RIHp / pVP                  4        FX  pVP                  P                  R4      '       g   K&  VP                  VP                  R,          . 4      P                  V4       KZ  	  . p\        V4       F�  pV P                  V4      f   K  W6,          p\        ;QJ d    R V 4       F  '       g   K   RM	  RM! R V 4       4      '       d   K\  V! V4      pVf   Kj  Vw  ršpVP                  R	VR
\        V4      RV/4       K‘  	  V# )zNReturn deterministic summaries for declared MCP servers hidden by their check.)Údeclaration)Úunavailable_detailsrC   re   :é   NNc              3  ó~   "  € T F3  qP                   R J ;'       g    \        VP                  4       4      x € K5  	  R # 5ir’   )Úcheck_fnr´   )r”   r•   s   & r$   r—   Ú*hidden_declared_sources.<locals>.<genexpr>ú   s.   é € ÐUÉWÀE�~‰~ Ð%×?Ð?¬¨e¯n©nÓ.>Ó)?Ô?ËWùs   ‚=›"=TFr   Ú
tool_countÚunavailable)Úhermes_platformrÞ   Útools.mcp_livenessrß   rE   rD   Úget_all_entriesrL   ri   Ú
setdefaultrq   ÚsortedÚlookupÚanyr‚   )rÞ   rß   rD   Úgroupedr•   ÚrowsÚserver_nameÚentriesÚdetailsÚ_declÚ_currentÚsentences               r$   Úhidden_declared_sourcesrõ   ë   sò   € å+Ý6Ý'à$&€GØ×)Ñ)Ö+ˆØ�=‰=×#Ñ# F×+Ô+Ø×Ñ˜uŸ}™}¨RÕ0°"Ó5×<Ñ<¸UÖCñ ,ð "$€DÜ˜g–ˆØ×Ñ˜kÓ*Ò2ÙØÕ&ˆß‹3ÑUÉWÓU�3�3Š3ÑUÉWÓU×UÒUÙÙ% kÓ2ˆØŠ?ÙØ$+Ñ!ˆ˜Ø�‰�V˜[¨,¼¸G»ÀmÐU]Ð^Ö_ñ 'ð €Kr#   Ú
max_tokensi   c               ó$   € V ^8„  d   QhRRRRRR/# )r'   Ú
deferrablerm   rö   r}   r)   ztuple[Optional[str], str]r   )r*   s   "r$   r+   r+     s)   € ÷ @ñ @Ø$ð@Ø58ð@ØD]ñ@r#   c          
     ó  aaaaa€ / oV  F�  p\        V4      pVP                  RR4      pV'       g   K*  \        \        V4      ^,          4      pSP	                  V. 4      P                  V\        VP                  RR4      4      34       Kƒ  	  \        4       oS'       g   S'       g   R# R V3R lloR\         R\         R2oR	 VVVVV3R
 llpR F%  pS Uu/ uF  qˆVbK  	  p	pV! V	4      p
V
f   K"  W§3u # 	  \        SV3R lR7       Fu  pRX	V&   V! V	4      p
V
f   K  T
\        ;QJ d*    R V	P                  4        4       F  '       d   K   RM	  RM! R V	P                  4        4       4      '       d   R3u # R3u # 	  R# u upi )u  Render the deferred-catalog manifest: ``- name: short desc`` lines grouped per source.
Returns ``(text, form)``; form is ``"full"``, ``"names"``, ``"mixed"`` (oversized servers
collapsed to a name + count line), ``"groups"`` (every server summarized) or ``"none"``
(over budget even summarized -> text is None). Ordering is deterministic (sorted groups
and tools) so the block is byte-stable â€” the request prefix stays cacheable. Degradation
is PER SERVER, largest first: one huge server must not cost a small one its listing.r   rS   r   c               ó$   € V ^8„  d   QhRRRRRR/# )r'   rÛ   r   Úmoder)   r   )r*   s   "r$   r+   Ú5build_catalog_listing_with_form.<locals>.__annotate__  s!   € ÷  ñ  ˜Cð   sð  ¨sñ  r#   c                ó:  <€ \        SV ,          4      pVR8X  d   V  R\        V4       R\         R2# V  R\        V4       R2.pVR8X  d   VP                  R V 4       4       M'VP	                  R	P                  R
 V 4       4      4       RP                  V4      # )z>Render one server's block. mode: 'full' | 'names' | 'summary'.Úsummaryú (u+    tools â€” names not listed; discover via `z`)z tools (z):Úfullc              3  óP   "  € T F  w  rV'       d	   R V RV 2MR V 2x € K  	  R# 5i)z- z: Nr   )r”   r   Údescs   &  r$   r—   ÚHbuild_catalog_listing_with_form.<locals>.render_group.<locals>.<genexpr>   s.   é € Ð^ÑX]É*È$·˜2˜d˜V 2 d VÑ,¸B¸t¸f¸+ÔEÓX]ùs   ‚$&z, c              3  ó*   "  € T F	  w  rVx € K  	  R # 5ir’   r   )r”   r   rË   s   &  r$   r—   r  "  s   é € Ð"=±u©G¨D¥4³uùó   ‚Ú
)rê   r‚   ÚTOOL_SEARCH_NAMEÚextendrq   r\   )rÛ   rû   ÚtoolsÚlinesÚgroupss   &&  €r$   Úrender_groupÚ5build_catalog_listing_with_form.<locals>.render_group  sœ   ø€ ä�v˜e•}Ó%ˆØ�9ÔØ�g˜R¤ E£
˜|ð ,%Ü%5Ð$6°bð:ð ;à�7˜(¤3 u£: ,¨bÐ1Ð2ˆØ�6Œ>Ø�L‰LÑ^ÑX]Ó^Õ^à�L‰L˜Ÿ™Ñ"=±uÓ"=Ó=Ô>Ø�y‰y˜ÓÐr#   z)Deferred tool catalog (call schemas via `z`, invoke via `z`):c               ó    € V ^8„  d   QhRRRR/# )r'   Úmodeszdict[str, str]r)   rJ   r   )r*   s   "r$   r+   rü   (  s   € ÷ Vñ V ð V°=ñ Vr#   c           
     ó  <€ S Uu/ uF  qS
! WV,          4      bK  	  ppS Uu/ uFT  pVR ,          VP                  R4      e!   VR ,           RVR,           RVR,           R2MVR ,           RVR,           R2bKV  	  pp\        W$,          4       Uu. uF  pW9   d	   W!,          MWA,          NK  	  ppRP                  S.V,           4      p\        P                  ! \        V4      \        ,          4      S	8:  d   V# R# u upi u upi u upi )	r   rä   Nrÿ   z tools unavailable: rå   Ú)z (tools unavailable: r  )r?   rê   r\   rƒ   r«   r‚   ÚCHARS_PER_TOKEN)r  rÛ   Úavailable_blocksÚrowÚunavailable_blocksÚblocksr5   r  Úheaderrö   r  rå   s   &      €€€€€r$   Úassemble_if_fitsÚ9build_catalog_listing_with_form.<locals>.assemble_if_fits(  s3  ø€ ÙRXÓYÑRXÈ¡<°¸Uµ|Ó#DÒDÑRXÐÐYñ #ó
ñ #�ð ��Kà—7‘7˜<Ó(Ò4ð �v•;�-˜r # lÕ"3Ð!4Ð4HÈÈ]ÕI[ÐH\Ð\]Ñ^à˜F��}Ð$9¸#¸mÕ:LÐ9MÈQÐOòPñ
 #ð 	ð 
ô  Ð 0Õ EÔFó
áF�ð (-Ô'@ÐÖ#ÐFXÕF_Ò_ÙFð 	ð 
ð �y‰y˜&˜ FÕ*Ó+ˆÜ—y’y¤ T£¬_Õ!<Ó=ÀÔKˆtÐUÐQUÐUùò Zùò
ùò
s   †D ¤ADÂD
c                ó.   <€ \        S! V R 4      4      ) V 3# )Únames)r‚   )Úlblr  s   &€r$   rÅ   Ú1build_catalog_listing_with_form.<locals>.<lambda>?  s   ø€ ´±LÀÀgÓ4NÓ0OÐ/OÐQTÑ.Ur#   r¤   rþ   c              3  ó*   "  € T F	  qR 8H  x € K  	  R# 5i)rþ   Nr   )r”   rÖ   s   & r$   r—   Ú2build_catalog_listing_with_form.<locals>.<genexpr>C  s   é € Ð(PÁ¸A¨i®Ãùr  FTr  Úmixed)NÚnone)r   r  )r@   r?   rp   rj   ré   rq   rØ   rõ   ÚTOOL_DESCRIBE_NAMEÚTOOL_CALL_NAMErê   ÚallÚvalues)rø   rö   r<   r^   r   rÛ   r  rû   r  r  r5   r  r  r  rå   s   &d         @@@@r$   Úbuild_catalog_listing_with_formr&    st  ü€ ð 02€FÛˆÜ�‹WˆØ�v‰v�f˜bÓ!ˆß‰4ä(Ô)9¸$Ó)?ÀÕ)BÓCˆEØ×Ñ˜e RÓ(×/Ñ/°´{À2Ç6Á6È-ÐY[ÓC\Ó7]Ð0^Ö_ñ ô *Ó+€KßŸ+ØÐ÷ ð  ðÜ$Ð% _´^Ð4DÀCðI€F÷Vô Vó" "ˆÙ&,Ó-¡f˜s�d’¡fˆÐ-Ù Ó&ˆØÔØ�:Òñ	 "ô �fÔ"U×VˆØˆˆc‰
Ù Ó&ˆØÔØ§S£SÑ(PÀÇÁÄÓ(P§S§S¢SÑ(PÀÇÁÄÓ(P×%PÒ%P˜Ð]Ò]ÐV]Ð]Ò]ñ	 Wð
 Ðùò .s   ÃF	)rS   )g      ø?g      è?)é   )é<   ):r   Ú
__future__r   Ú	functoolsrƒ   rY   Ú	threadingÚcollectionsr   Údataclassesr   r   Útypingr   r   r   r	   r
   r1   r  r"  r#  Ú	frozensetÚBRIDGE_TOOL_NAMESr  r   Úcompiler7   Úlocalr0   Ú	lru_cacher3   r:   r@   rH   rO   rb   rj   rs   r�   Útupler!   r}   ry   rš   r   r�   r›   r¦   r¬   rª   r­   rÍ   rÑ   rØ   rp   rõ   r&  r   r#   r$   Ú<module>r5     s^  ðñOõ #ã Û Û 	Û Ý ß (ß 3Õ 3ã ð !Ð Ø$Ð Ø€ÙÐ/Ð1CÀ^ÐTÓUÐ à€ð ÷5ð 5ó ð5ð �JŠJ�Ó'€	Ø—’Ó!€ð ×Ò˜UÔ#ô1ó $ð1õWõ$õ
õ9÷SõHõ÷"ð  �T˜#•Y  t¨C°¨H¥~°sÐ:Õ;€õ=õ'ð& Ð Ø$%Ð !õFñ *Ø:>÷ *ð  *ðH —:’:ÐNÓOÐ ÷*õ&õð2@Ø;?÷@ñ @r#   