+
    lHàjy'  ã            
       ó  € R t ^ RIt^ RIt^ RIHtHt ^ RIHt ^ RIH	t	 ]P                  ! R4      tR R ltR]! 4       3R R	 lltRR
 R lltRR R lltR R ltR R ltRR R lltR R ltRR R]R]RR RR /tR# ) a˜  Tool-argument type coercion: repair string-typed values the model emitted against a tool's JSON Schema.

Models emit "42" for integers, "true" for booleans, JSON-encoded strings for
arrays/objects (also nested inside containers), and bare scalars where an array
is expected (wrapped in a one-element list). Coercion is schema-guided and
conservative: originals are kept whenever a repair is not unambiguous.
N)ÚAnyÚDict)Úregistry)Úresolve_local_schema_refÚmodel_toolsc                ó€   € V ^8„  d   QhR\         R\        \         \        3,          R\        \         \        3,          /# )é   Ú	tool_nameÚargsÚreturn)ÚstrÚdictr   )Úformats   "Ú7/home/ubuntu/.hermes/hermes-agent/tools/arg_coercion.pyÚ__annotate__r      s6   € ÷ Bñ B¤ð B¬4´´S°­>ð B¼dÄ3ÌÀ8½nñ Bó    c                ó$  € V'       d   \        V\        4      '       g   V# \        P                  ! V 4      pT;'       g    / P	                  R4      ;'       g    / pVP	                  R4      pV'       g   V#  ^ RIHp V! W14      p\        VP                  4       4       EFÚ  w  rgVP	                  V4      pV'       g   K!  \        Wƒ4      pVP	                  R4      p	\        V\        \        34      p
V	R8X  dÅ   VeÁ   V
'       g¹   \        V\        4      '       dq   \        WyVR7      pW·Jd   W±V&   K”  VP                  4       P                  R4      '       d   \         P#                  RW4       V.W&   \         P%                  R	W4       Kì  V.W&   \         P%                  R
\'        V4      P(                  W4       EK  \        V\        4      '       g?   V	R8X  d	   V
'       g   V	R8X  d&   \        V\        4      '       d   \+        WxVR7      W&   EKr  V	'       g   \-        V4      '       g   EKŽ  \        WyVR7      pW·Jg   EK£  W±V&   \        V\        \        \        34      '       g   EKË  \+        W¸VR7      W&   EKÝ  	  V#   \         d     ELi ; i)zOCoerce string-typed args to their JSON-Schema types; originals kept on failure.Ú
parametersÚ
properties)Úunrename_tool_argsÚtypeÚarray©ÚschemaÚ[u¿   coerce_tool_args: %s.%s looks like a JSON array string but could not be parsed â€” model may have emitted a JSON-encoded string instead of a native array. Falling back to single-element list.z7coerce_tool_args: wrapped bare string in list for %s.%sz3coerce_tool_args: wrapped bare %s in list for %s.%sÚobject©Úroot_schema)Ú
isinstancer   r   Ú
get_schemaÚgetÚtools.schema_sanitizerr   Ú	ExceptionÚlistÚitemsr   Útupler   Ú_coerce_valueÚstripÚ
startswithÚloggerÚwarningÚinfor   Ú__name__Ú"_normalize_json_strings_for_schemaÚ_schema_allows_null)r	   r
   r   r   r   r   ÚkeyÚvalueÚprop_schemaÚexpectedÚis_containerÚcoerceds   &&          r   Úcoerce_tool_argsr5      s#  € ç”z $¬×-Ò-Øˆä× Ò  Ó+€FØ—,�,˜B×#Ñ# LÓ1×7Ð7°R€JØ—‘ Ó-€JßØˆðÝ=Ù! *Ó3ˆô ˜4Ÿ:™:›<×(‰
ˆØ —n‘n SÓ)ˆßÙÜ.¨{ÓGˆØ—?‘? 6Ó*ˆÜ! %¬$´¨Ó7ˆð �wÔ 5Ò#4¿\Ü˜%¤×%Ò%Ü'¨ÀÔL�ØÓ'Ø '˜‘IÙØ—;‘;“=×+Ñ+¨C×0Ò0Ü—N‘Nð $Jð LUô[ð #˜G�‘	Ü—‘ÐUÐW`ÔfÙØ˜ˆD‰IÜ�K‰KÐMÌtÐTYË{×OcÑOcÐenÔtÚä˜%¤×%Ò%à˜GÔ#¯¸(ÀhÔ:NÔS]Ð^cÔei×SjÒSjÜ>Ø°Jô�‘	ò ßÔ 3°K× @Ò @ÚÜ ¸ÔDˆØÖØ�‰IÜ˜'¤D¬%´Ð#6×7Õ7Ü>Ø°jô�”	ñW )ð^ €Køôe ô Úðús   Á8J  Ê JÊJc          
      ój   € V ^8„  d   QhR\         R\        R\         R\        \        ,          R\        /# )r   r   Úkindr   Úseen_schema_idsr   )r   r   Ú	frozensetÚintÚbool)r   s   "r   r   r   Z   s>   € ÷ =ñ =Üð=ä
ð=ô ð=ô œs•^ð	=ô
 
ñ=r   c                óœ  a aaaa€ \        S \        4      '       g   R# \        S 4      S9   d   R# S\        S 4      0,          oSf   S o\        S S4      o S P	                  R4      pVS8X  g   \        V\
        4      '       d
   SV9   d   R# \        ;QJ d#    VVVV V3R lR 4       F  '       g   K   R# 	  R# ! VVVV V3R lR 4       4      # )zYTrue when *schema* permits JSON type *kind* via ``type`` or any anyOf/oneOf/allOf branch.Fr   Tc              3   óò   <"  € T Fl  p\        SP                  V4      ;o\        4      ;'       d?    \        ;QJ d!    VVV3R  lS 4       F  '       g   K   RM	  RM! VVV3R  lS 4       4      x € Kn  	  R# 5i)c              3   ó@   <"  € T F  p\        VSSS4      x € K  	  R # 5i©N)Ú_schema_accepts_kind)Ú.0Úbr7   r   r8   s   & €€€r   Ú	<genexpr>Ú1_schema_accepts_kind.<locals>.<genexpr>.<genexpr>m   sC   øé € ð  KZñ  QYð  LMÔK_Ð`aÐcgÐitð  wF÷  LGð  LGó  QYùs   ƒTFN©r   r    r#   Úany)rA   Ú	union_keyÚbranchesr7   r   r   r8   s   & €€€€€r   rC   Ú'_schema_accepts_kind.<locals>.<genexpr>m   sz   øé € ð =Ù ;�9ô  f§j¡j°Ó&;Ð;˜(¼TÓB÷  Zð  ZÇsÃsö  KZñ  QYó  KZÇsÇsÂsö  KZñ  QYó  KZó  HZô  ZÛ ;ùs   ƒ,A7°A7¼A7Á"A7)ÚanyOfÚoneOfÚallOf)r   r   Úidr   r    r#   rF   )r   r7   r   r8   ÚtrH   s   ffff @r   r@   r@   Z   sº   ü€ ô �fœd×#Ò#ÙÜ	ˆ&ƒz�_Ô$Ùà%¬¨F«¨Õ4€OØÒØˆÜ% f¨kÓ:€FØ�
‰
�6Ó€AØˆD„y”Z ¤4×(Ò(¨T°Q¬YÙß‹3÷ =ð =Ù ;ó=�3Œ3ð =Š3ð =ˆ3÷ =ð =Ù ;ó=ó =ð =r   c                óH   € V ^8„  d   QhR\         R\         R\         R\         /# )r   r0   r   r   r   )r   )r   s   "r   r   r   q   s0   € ÷ 9ñ 9Üð9äð9ô ð9ô 	ñ	9r   c           	     ó’  a€ \        V\        4      '       g   V # Vf   Tp\        W4      p\        V \        4      '       dÂ   V P	                  4       p\        VRV4      p\        VRV4      pV'       d   VP                  R4      '       g"   V'       d   VP                  R4      '       g   V #  \        P                  ! V4      p\        T\        4      '       d	   T'       g!   \        T\        4      '       d	   T'       g   T # Tp \        V \        4      '       d™   VP                  R4      p\        V\        4      '       g   V # V  Uu. uF  p\        W‡VR7      NK  	  upo\        ;QJ d&    R \        SV 4       4       F  '       g   K   RM	  R	M! R \        SV 4       4       4      '       d   S# T # \        V \        4      '       dä   VP                  R
4      p	\        V	\        4      '       g   V # \        V 4      oV	P!                  4        F;  w  r«W 9   g   K  \        V\        4      '       g   K%  \        W
,          W²R7      SV
&   K=  	  \        ;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   S# T # V #   \        \        3 d    T u # i ; iu upi )aw  Recursively parse JSON-encoded strings where the schema expects array/object.

Schema-guided: a string is only parsed when its schema position expects a
container, so legitimate JSON-looking ``type: string`` fields survive.
Returns the same object when nothing changed (identity = cheap no-op check).

Ported from cline/cline#11803, adapted to hermes-agent's coercion layer.
r   r   r   Ú{r$   r   c              3   ó,   "  € T F
  w  rWJx € K  	  R # 5ir?   © )rA   ÚnÚos   &  r   rC   Ú5_normalize_json_strings_for_schema.<locals>.<genexpr>œ   s   é € ÐA±©¨˜!�*³ùs   ‚TFr   c              3   ó>   <"  € T F  w  rSV,          VJx € K  	  R # 5ir?   rS   )rA   ÚkÚvÚouts   &  €r   rC   rV   ¨   s   øé € ÐD±m©d¨a˜#˜a�&¨�/³mùs   ƒ)r   r   r   r   r'   r@   r(   ÚjsonÚloadsÚ
ValueErrorÚ	TypeErrorr#   r    r-   rF   Úzipr$   )r0   r   r   ÚtrimmedÚexpects_arrayÚexpects_objectÚparsedÚitems_schemaÚitemÚpropsrX   r1   rZ   s   &&&         @r   r-   r-   q   s(  ø€ ô �fœd×#Ò#ØˆØÒØˆÜ% fÓ:€Fä�%œ×ÒØ—+‘+“-ˆÜ,¨V°W¸kÓJˆÜ-¨f°hÀÓLˆß 7×#5Ñ#5°c×#:Ò#:ÇÐSZ×SeÑSeÐfi×SjÒSjØˆLð	Ü—Z’Z Ó(ˆFô ˜F¤D×)Ò)¯mÄÈFÔTX×AYÒAY×^lØˆLØˆä�%œ×ÒØ—z‘z 'Ó*ˆÜ˜,¬×-Ò-ØˆLñ
 ó	
ñ �ô /Ø°÷ñ ñ	
ˆ÷ “cÑA´°S¸%´ÓA—c—c’cÑA´°S¸%´ÓA×AÒAˆsÐLÀuÐLä�%œ×ÒØ—
‘
˜<Ó(ˆÜ˜%¤×&Ò&ØˆLÜ�5‹kˆØ#Ÿk™kžm‰NˆAØŽzœj¨´d×;Ô;Ü;Ø•H˜kô��A“ñ ,÷
 “cÔD°e·k±k´mÓD—c—c’cÔD°e·k±k´mÓD×DÒDˆsÐOÈ%ÐOà€Løô= œIÐ&ô 	ØŠLð	üò
s   Â,J+ ÅKÊ+KË Kc                ó>   € V ^8„  d   QhR\         R\        R,          /# )r   r0   r   N)r   r   )r   s   "r   r   r   ­   s"   € ÷ Zñ Zœð Z´T¸Dµ[ñ Zr   c                ón  a aa€ \        S4      '       d&   S P                  4       P                  4       R8X  d   R# \        V\        4      '       d   \        VVV 3R lV 4       S 4      # \        P                  V4      pVe	   V! S 4      # VR8X  d&   S P                  4       P                  4       R8X  d   R# S # )zRCoerce string *value* to *expected_type* (str or union list); original on failure.ÚnullNc              3   óT   <"  € T F  p\        SVSR 7      ;oSJg   K  Sx € K  	  R# 5i)r   N)r&   )rA   rN   Úrr   r0   s   & €€€r   rC   Ú _coerce_value.<locals>.<genexpr>³   s*   øé € Ðl¡˜1´}ÀUÈAÐV\Ô7]Ð2]°!ÐfkÐ1k—Q’Q£ùs   ƒ(ž
()r.   r'   Úlowerr   r#   ÚnextÚ_SCALAR_COERCERSr    )r0   Úexpected_typer   Úcoercerrk   s   f&f @r   r&   r&   ­   s‘   ú€ ä˜6×"Ò" u§{¡{£}×':Ñ':Ó'<ÀÔ'FÙä�-¤×&Ò&ÜÖl¡ÓlÐnsÓtÐtä×"Ñ" =Ó1€GØÒÙ�u‹~ÐØ  FÔ*¨u¯{©{«}×/BÑ/BÓ/DÈÔ/Nˆ4ÐYÐTYÐYr   c                ó>   € V ^8„  d   QhR\         R,          R\        /# )r   r   Nr   )r   r;   )r   s   "r   r   r   »   s   € ÷ 4ñ 4¤ t¥ð 4´ñ 4r   c                óJ  a a€ \        S \        4      '       g   R# S P                  R4      pVR8X  g   \        V\        4      '       d
   RV9   d   R# S P                  R4      RJ d   R# \        ;QJ d     V V3R lR 4       F  '       g   K   R# 	  R# ! V V3R lR 4       4      # )z9True when a JSON Schema fragment explicitly permits null.Fr   ri   TÚnullablec              3   óÞ   <"  € T Fb  p\        SP                  V4      ;o\        4      ;'       d5    \        ;QJ d    R  S 4       F  '       g   K   RM	  RM! R  S 4       4      x € Kd  	  R# 5i)c              3   óz   "  € T F1  p\        V\        4      ;'       d    VP                  R 4      R8H  x € K3  	  R# 5i)r   ri   N)r   r   r    )rA   rY   s   & r   rC   Ú0_schema_allows_null.<locals>.<genexpr>.<genexpr>Å   s1   é € ÐYÑPXÈ1”z !¤TÓ*×FÐF¨q¯u©u°V«}ÀÑ/FÔFÓPXùs   ‚;ž;TFNrE   )rA   rG   r   Úvariantss   & €€r   rC   Ú&_schema_allows_null.<locals>.<genexpr>Ä   s_   øé € ð 4á 2�9ô  f§j¡j°Ó&;Ð;˜(¼TÓB÷ Zð Zß“3ÑYÑPXÓY—3—3’3ÑYÑPXÓYÓYôZã 2ùs   ƒ,A-°A-¼A-ÁA-)rJ   rK   )r   r   r    r#   rF   )r   Úschema_typerx   s   f @r   r.   r.   »   sŽ   ù€ ä�fœd×#Ò#ÙØ—*‘*˜VÓ$€KØ�fÔ¤¨K¼×!>Ò!>À6È[ÔCXÙØ‡z�z�*Ó Ó%Ùß‹3õ 4á 2ó4�3Œ3ð 4Š3ð 4ˆ3õ 4á 2ó4ó 4ð 4r   c                ó0   € V ^8„  d   QhR\         R\        /# )r   r0   Úexpected_python_type)r   r   )r   s   "r   r   r   É   s   € ÷ ñ œð ´4ñ r   c                ó^  € VP                   p \        P                  ! V 4      p\        Y14      '       d   \
        P                  RT4       T# \
        P                  R\        T4      P                   T4       T #   \        \        3 d#   p\
        P                  RY$4       T u Rp?# Rp?ii ; i)zUjson.loads *value* when the schema expects array/object; original string on mismatch.zIcoerce_tool_args: failed to parse string as JSON for expected type %s: %sNz5coerce_tool_args: coerced string to %s via json.loadsuL   coerce_tool_args: JSON-parsed value is %s, expected %s â€” skipping coercion)
r,   r[   r\   r]   r^   r)   r*   r   Údebugr   )r0   r|   Únamerc   Úexcs   &&   r   Ú_coerce_jsonr�   É   s�   € à×(Ñ(€DðÜ—’˜EÓ"ˆô �&×/Ò/Ü�‰ÐLÈdÔSØˆÜ
‡N�NÐaÜ˜“<×(Ñ(¨$ô0à€Løô œ	Ð"ô Ü�‰ÐbÐdhÔnØ�ûðús   ŽA9 Á9B,Â
B'Â!B,Â'B,c                ó0   € V ^8„  d   QhR\         R\        /# )r   r0   Úinteger_only)r   r;   )r   s   "r   r   r   Ù   s   € ÷ Cñ Cœ#ð C¬Tñ Cr   c                óà   €  \        V 4      pY"8w  g   T\        R4      \        R4      39   d   T # T\        T4      8X  d   \        T4      # T'       d   T # T#   \        \        3 d    T u # i ; i)z^Parse *value* as a number; original string on failure, inf/nan, or decimals when integer_only.Úinfz-inf)Úfloatr]   ÚOverflowErrorr:   )r0   rƒ   Úfs   && r   Ú_coerce_numberr‰   Ù   sk   € ðÜ�%‹Lˆð 	„v�”u˜U“|¤U¨6£]Ð3Ô3ØˆØœ#˜a›&”[Œ3ˆq‹6ÐB¯| eÐBÀÐBøô	 œÐ&ô ØŠðús   ‚A ÁA-Á,A-c                ó$   € V ^8„  d   QhR\         /# )r   r0   )r   )r   s   "r   r   r   ä   s   € ÷ Lñ Lœ3ñ Lr   c                óf   € RRRR/P                  V P                  4       P                  4       V 4      # )zCParse "true"/"false" (case-insensitive); original string otherwise.ÚtrueTÚfalseF)r    r'   rm   )r0   s   &r   Ú_coerce_booleanrŽ   ä   s-   € à�D˜' 5Ð)×-Ñ-¨e¯k©k«m×.AÑ.AÓ.CÀUÓKÐKr   Úintegerc                 ó   € \        V R R7      # )T)rƒ   )r‰   ©rY   s   &r   Ú<lambda>r’   ë   s   € œ¨¸Õ=r   ÚnumberÚbooleanr   c                 ó"   € \        V \        4      # r?   )r�   r#   r‘   s   &r   r’   r’   î   s   € ”| A¤tÔ,r   r   c                 ó"   € \        V \        4      # r?   )r�   r   r‘   s   &r   r’   r’   ï   s   € œ Q¬Ô-r   r?   )F)Ú__doc__r[   ÚloggingÚtypingr   r   Útools.registryr   r!   r   Ú	getLoggerr)   r5   r9   r@   r-   r&   r.   r�   r‰   rŽ   ro   rS   r   r   Ú<module>rœ      s‹   ðñó Û ß å #Ý ;ð 
×	Ò	˜=Ó	)€õBðP Ù&/£k÷	=÷.9÷xZõ4õ÷ CõLð Ñ=ØˆnØˆØÑ,ØÑ-ðÒ r   