+
    lHàjÂ  ã                   óâ   € R t ^ RIt^ RIt^ RIt^ RIHt ^ RIHt Rt]P                  ! R4      t
]P                  ! R]P                  4      t ! R R]4      tR R	 ltR
 R ltR R ltR R ltR# )aÿ  Stdio MCP servers whose native addon was built for a different Node.js (#124264).

Hermes runs every stdio MCP server on its own managed Node, never the user's. A server whose
``.node`` addon was compiled under another Node (typically through the ``~/.npm/_npx`` cache the
user's ``npx`` shares with ours) dies at startup with ``NODE_MODULE_VERSION`` /
``ERR_DLOPEN_FAILED`` and only its stderr says so. This module turns that stderr into an error that
names the remedy: rebuild the server under Hermes's Node.
N)ÚPath)ÚOptionalz '([^'\n]+?\.node)'|(\S+?\.node):zJusing\s+NODE_MODULE_VERSION (\d+)\..*?requires\s+NODE_MODULE_VERSION (\d+)c                   ó   € ] tR t^tRtRtR# )ÚNodeAbiMismatchErrorzžA stdio server's native addon does not load under Hermes's Node. Permanent: every retry
loads the same binary, so the server parks until the user rebuilds it.© N)Ú__name__Ú
__module__Ú__qualname__Ú__firstlineno__Ú__doc__Ú__static_attributes__r   ó    Ú</home/ubuntu/.hermes/hermes-agent/tools/mcp_tool_node_abi.pyr   r      s   † õNr   r   c                óh   € V ^8„  d   QhR\         R\        \        \        ,          \         3,          /# )é   ÚnameÚreturn©ÚstrÚtupler   r   )Úformats   "r   Ú__annotate__r      s,   € ÷ cñ c”3ð cœ5¤¬$¥´Ð!4Õ5ñ cr   c                ó®   €  ^ RI Hp V! V 4      pT'       d+   TP                  '       d   TP                  TP                  3# R#   \         d    Ru # i ; i)zS``(binary, version)`` of Hermes's own node/npm, or ``(None, "")`` when PM has none.)Úinstalled_package©NÚ )Úpmr   Ú	ExceptionÚbinaryÚversion)r   r   Ú	installeds   &  r   Ú_managedr!      sV   € ðÝ(Ù% dÓ+ˆ	÷ 5>À)×BR×BRÐBRˆI×Ñ˜i×/Ñ/Ð0ÐbÐXbÐbøô ô ØŠðús   ‚A ÁAÁAc                óh   € V ^8„  d   QhR\         R\        \        \        ,          \         3,          /# )r   Úmodule_pathr   r   )r   s   "r   r   r   $   s(   € ÷ &ñ &œSð &¤U¬8´D­>¼3Ð+>Õ%?ñ &r   c                ó¦  € \        V 4      P                  p\        V4       UUu. uF  w  r#VR8X  g   K  VNK  	  pppV'       d   VR,          ^,           \        V4      8¼  d   R# VR,          pW^,           ,          pVP	                  R4      '       d,   V^,           \        V4      8  d   V RW^,           ,           2p\        VRV !  V3# u uppi )z•``(project root, package name)`` owning *module_path*: the directory above its innermost
``node_modules`` and the (possibly scoped) package under it.Únode_modulesNÚ@Ú/éÿÿÿÿr   )r   ÚpartsÚ	enumerateÚlenÚ
startswith)r#   r)   ÚiÚpartÚmarksÚatÚpackages   &      r   Ú_package_ofr2   $   s»   € ô �Ó×#Ñ#€EÜ'¨Ô.ÔIÑ.‘7�1°$¸.Ñ2H�QˆQÑ.€EÑIß�E˜"•I •M¤S¨£ZÔ/ØˆØ	ˆr�€BØ˜•F�m€GØ×Ñ˜#×Ò 2¨¥6¬C°«JÔ#6Ø�I˜Q˜u¨!¥V�}˜oÐ.ˆÜ��s˜�Ñ˜gÐ%Ð%ùó Js
   ¤C´Cc          
      ój   € V ^8„  d   QhR\         \        ,          R\        R\        R\        R\        /# )r   Úrootr1   ÚnodeÚnpmr   )r   r   r   )r   s   "r   r   r   2   s:   € ÷ Nñ N”(œ4•.ð N¬3ð N´dð NÄð NÌ#ñ Nr   c                óÄ  € \         P                  R8H  pV'       d   R MR pV e   RV! V4       RV! V 4       2MRpV'       d3   RV! \        VP                  4      R,           4       R	V! V4       R
V 2pM!RV! VP                  4       RV! V4       R
V 2pV f   RV 2# V P                  P                  R8w  d   V# V'       d   RV! V 4       2M
RV! V 4       2pV RV 2# )zùThe fix in the host shell's syntax: delete an npx cache entry (Hermes's npx reinstalls it on the
next start) or rebuild with Hermes's npm, Hermes's Node first on PATH because npm's shebang and its
lifecycle scripts both run the first ``node`` there.Úntc                 óT   € R \        V 4      P                  R R4      ,           R ,           # )Ú'z'')r   Úreplace©Úps   &r   Ú<lambda>Ú_remedy.<locals>.<lambda>7   s   € �3œ˜Q›Ÿ™¨¨TÓ2Õ2°SÖ8r   c                 ó@   € \         P                  ! \        V 4      4      # ©N)ÚshlexÚquoter   r<   s   &r   r>   r?   7   s   € ÔUZ×U`ÒU`ÔadÐefÓagÔUhr   Ú z
 --prefix r   z$env:Path = Ú;z + $env:Path; & z rebuildzPATH=z	:"$PATH" z&in the server's package directory run Ú_npxzRemove-Item -Recurse -Force zrm -rf z. (Hermes reinstalls it on the next start), or )Úosr   r   Úparent)	r4   r1   r5   r6   ÚwindowsÚqÚtargetÚrebuildÚdeletes	   &&&&     r   Ú_remedyrN   2   s÷   € ô �g‰g˜‰o€Gß=DÒ	8ÑKh€AØ48Ò4Dˆq‘�7“�˜J¡q¨£w iÑ0È"€FßØ ¡¤3 t§{¡{Ó#3°cÕ#9Ó!:Ð ;Ð;KÉAÈcËFÈ8ÐS[Ð\bÐ[cÐd‰à™!˜DŸK™K›.Ð)¨±Q°s³V°H¸HÀVÀHÐMˆØ‚|Ø7¸°yÐAÐAØ‡{�{×Ñ˜6Ô!Øˆß9@Ð+©A¨d«G¨9Ñ5ÈÑPQÐRVÓPWÈyÐFY€FØˆXÐCÀGÀ9ÐMÐMr   c                óR   € V ^8„  d   QhR\         R\         R\        \        ,          /# )r   Úserver_nameÚstderr_textr   )r   r   r   )r   s   "r   r   r   E   s,   € ÷ Pñ P¤ð P´#ð P¼(ÔCWÕ:Xñ Pr   c           
     óø  a€ S'       dI   \         ;QJ d#    V3R l\         4       F  '       g   K   RM	  RM! V3R l\         4       4      '       g   R# \        P                  S4      pV'       d+   VP	                  ^4      ;'       g    VP	                  ^4      MRp\
        P                  S4      p\        R4      w  rV\        R4      w  rxV'       d   RV 2P                  4       MR	p	V'       d*   R
VP	                  ^4       RV	 RVP	                  ^4       2MRV	 2p
RT
 RT;'       g    R R2pVe   Vf   \        V RV  R24      # V'       d   \        V4      MRw  rÍ\        V R\        WÍWW4       24      # )z_The remedy-naming error for a server whose stderr shows a native-addon load failure, else None.c              3   ó,   <"  € T F	  qS9   x € K  	  R # 5irA   r   )Ú.0ÚmarkerrQ   s   & €r   Ú	<genexpr>Ú!node_abi_error.<locals>.<genexpr>G   s   øé € Ð!SÁl¸F¨KÖ"7Ãlùs   ƒTFNr   r5   r6   zHermes's Node zHermes's NodezNODE_MODULE_VERSION z; z needs zit does not load under z,native addon built for a different Node.js (z): zsee logs/mcp-stderr.logzF. Hermes runs MCP servers on its own Node; rebuild the server under itzP: install Hermes's Node with `hermes pm install npm`, then run `hermes mcp test Ú`z: r   )ÚanyÚ_ABI_MARKERSÚ_MODULE_PATHÚsearchÚgroupÚ_ABI_VERSIONSr!   Ústripr   r2   rN   )rP   rQ   ÚfoundÚmoduleÚversionsr5   Únode_versionr6   Ú_ÚoursÚbuiltÚheadr4   r1   s   &f            r   Únode_abi_errorrh   E   s]  ø€ çŸc›cÔ!SÅlÓ!SŸcŸcšcÔ!SÅlÓ!S×SÒSÙÜ×Ñ Ó,€Eß38ˆe�k‰k˜!‹n×.Ð. §¡¨A£ø¸b€FÜ×#Ñ# KÓ0€HÜ! &Ó)Ñ€DÜ�e‹_�F€Cß6Bˆ^˜L˜>Ð*×0Ñ0Ô2È€Dß]eÐ# H§N¡N°1Ó$5Ð#6°b¸¸¸gÀhÇnÁnÐUVÓFWÐEXÑYØ+¨D¨6Ð2ð 
ð ;¸5¸'ÀÀV×EhÐEhÐOhÐDið jSð S€Dà‚|�s’{Ü# t fð -8Ø8C°}ÀAð%Gó Hð 	Hç+1”K Ô'°z�M€DÜ 4 &¨¬7°4À$Ó+LÐ*MÐ NÓOÐOr   )ÚNODE_MODULE_VERSIONÚERR_DLOPEN_FAILED)r   rG   ÚrerB   Úpathlibr   Útypingr   rZ   Úcompiler[   ÚDOTALLr^   ÚRuntimeErrorr   r!   r2   rN   rh   r   r   r   Ú<module>rq      sl   ðñó 
Û 	Û Ý Ý à;€Ø�zŠzÐ=Ó>€Ø—
’
ÐhÐjl×jsÑjsÓt€ôN˜<ô Nõ
cõ&õN÷&Pr   