+
    „WÝjBJ ã                   ó   a€ ER Etã0 t R t ^ RIt^ RIHt ]P                  ! 4       '       d   ]P                  ! 4        ^ RIHt ]! 4        ^ RIt^ RIt^ RIt]P                   P#                  ]P                   P%                  ]P                   P'                  ]4      ]P*                  4      4      t]]P                   9  d   ]P                   P/                  ^ ]4       ^ RIHt ^ RIt]P4                  ! 4        R R lt]! ]P8                  R,          4      '       d    ^ R	IHt ]! 4        AR
 R lt!Rs"RR/ ] 3RRRR/] 3RR/ ] 3RR/ ]#3RR/ ] 3RR/ ] 3RR/ ] 33t$R R lt%RRR RR!RR"RR#RR$RR%R/R& R' llt&ERR( R) llt'R* R+ lt(Rs)] ^ k R, R- lt*R. R/ lt+ERR0 R1 llt,R2 R3 lt-]-! 4        ]P\                  ! 4        ]P^                  ! 4       '       d	   ]0! ^ 4      h^ RI1t1^ RI2t2^ RI3t3^ RI4t4^ RI5t5^ R4I6H7t7 ^ R5I8H9t9 ^ R6I:H;t; ^ R7I<H=t= ^ R8I>H?t? ^ R9I@HAtA ^ R:IBHCtC ^ R;IDHEtEHFtF ^ R<IGHHtH ^ R=IIHJtJ ^ R>IKHLtL ^ R?IMHNtN ^ R@IOHPtP ^ RAIQHRtR ^ RBISHTtT ^ RCIUHVtV ^ RDIWHXtX ^ REIYHZtZ ^ RFI[H\t\ ^ RGI]H^t^ ^ RHI_H`t` ^ RIIaHbtb ^ RJIcHdtd ^ RKIeHftf ^ RLIgHhth ^ RMIiHjtj ^ RNIkHltl ^ ROImHntn ^ RPIoHptp ^ RQIqHrtrHsts ^ RRItHutu ^ RSIvHwtw ^ RTIxHyty ^ RUIzH{t{ ^ RVI|H}t} ^ RWI~Ht ^ RXI€H�t� ^ RYI‚Hƒtƒ ^ RZI„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‘ ^ RaI’H“t“ ^ RbI”H•t• ^ RcI–H—t— ^ RdI˜H™t™ ^ ReIšH›t› ^ RfIœH�t� ^ RgIžHŸtŸ ^ RhI H¡t¡ ^ RiI¢H£t£ ^ RjI¤H¥t¥ ^ RkI¦H§t§ ^ RlI¨H©t© ^ RmIªH«t« ^ RnI¬H­t­ ^ RoI®H¯t¯H°t° ^ RpI±H²t² Rq Rr lt³]7! ]EPh                  ! 4       4      tµ]P\                  ! 4        Rst¶Rs·] ^k Rt Ru lt¸Rv Rw lt¹Rx Ry ltºRz R{ lt»R| R} lt¼R~ R lt½R€ R� lt¾R‚ Rƒ lt¿R„ R… ltÀR† R‡ ltÁ]ÂRˆ8X  d[   ]Ã! ]EPˆ                  EP‹                  Rˆ4      R‰R4      ]8X  d1   ]EPˆ                  EP�                  RŠ]EPˆ                  Rˆ,          4       ]Á! 4         ^ R‹IÇHÈtÉ ]É! 4        ]P8                  RŒ,          R�.8X  d&   ^ RŽIÊHËtÌ ]0! ]Ì! ]P8                  R�,          4      4      h]EPš                  R�8X  d    ^ R‘IHÎtÏ ]ÏEP                   ! ]4       ^ R’IÑHÒtÒ ^ R“IÓHÔtÔ ]Ô! ]µR”,          R•7       RtÕ ^ R–IÖH×tØ ]Ò! 4       R—,          tÙ]ÙEPµ                  4       '       dµ   ]Ø! ]Ù4      tÛR˜]EP¸                  9  d^   ]ÛEP‹                  R™/ 4      tÝ]Þ! ]Ý]ß4      '       d<   ]ÝEP‹                  Rš4      tà]àe&   ]á! ]à4      EPÅ                  4       ]EP¸                  R˜&   ]ÛEP‹                  R›/ 4      tã]Þ! ]ã]ß4      '       d   ]ãEP‹                  Rœ4      '       d   R�tÕAÛAÙ ^ RžIäHåtæ ]æ! ]ç! RŸ ]P8                  R,           4       R 4      ER9   d   R£MR¥R¦7       ]Õ'       d    ^ R§IÇHèté ]é! R�R¨7       ^ RIêtê^ RIëtë^ R©IìHìtì ^ RªIíHîtîHïtïHðtðHñtñHòtòHótóHôtôHõtõHötöH÷t÷HøtøHùtùHútúHûtûHütüHýtýHþtþHÿtÿEH Et EHEtEHEt ^ R«EIEHEt ]êEP
                  ! ]Â4      Et^ R¬EIEHEtEH	Et	EH
Et
EHEtEHEtEHEt ^ R­EIEHEtEHEtEHEt ^ R®EIEHEt ^ R¯EIEHEtEHEtEHEtEHEtEHEtEHEtEHEtEHEtEHEtEHEt ^ R°EIEH Et  ^ R±EI!EH"Et"EH#Et#EH$Et$EH%Et%EH&Et&EH'Et'EH(Et(EH)Et)EH*Et*EH+Et+EH,Et, ^ R²EI-EH.Et.EH/Et/EH0Et0EH1Et1EH2Et2EH3Et3EH4Et4EH5Et5EH6Et6EH7Et7EH8Et8EH9Et9EH:Et:EH;Et;EH<Et<EH=Et=EH>Et>EH?Et?EH@Et@EHAEtAEHBEtBEHCEtCEHDEtDEHEEtEEHFEtF ^ R³EIGEHHEtHEHIEtI ^ R´EIGEHJEtJEHKEtKEHLEtLEHMEtMEHNEtNEHOEtOEHPEtPEHQEtQEHREtREHSEtSEHTEtTEHUEtUEHVEtVEHWEtW ^ RµEIXEHYEtY ^ R¶EIXEHZEtZEH[Et[EH\Et\EH]Et]EH^Et^EH_Et_ ^ R·EI`EHaEta ^ R¸EI`EHbEtbEHcEtcEHdEtdEHeEte ^ R¹EIfEHgEtgEHhEthEHiEtiEHjEtjEHkEtkEHlEtl ERRº R» llEtmR¼ R½ lEtnR¾ R¿ lEtoRÀ RÁ lEtpRÂ RÃ lEtqRÄ RÅ lEtrRÆ RÇ lEtsRÈ RÉ lEttRÊ RË lEtuRÌ RÍ lEtvRÎ RÏ lEtwRÐR/RÑ RÒ llEtxRÓ RÔ lEtyRÕ RÖ lEtz]2EPö                  R× 4       Et|RØ RÙ lEt}ERRÚ RÛ llEt~RÜ RÝ lEtRÞ Rß lEt€Rà Rá lEt�Râ Rã lEt‚Rä Rå lEtƒRæ Rç lEt„Rè Ré lEt…Rê Rë lEt†EREt‡Rî EtˆRï Et‰Rð EtŠRñRRòR /Ró Rô llEt‹E]‹! RõRöR÷RøRù7      EtŒE]‹! RúRûRüRýRù7      Et�E]‹! RþRûRÿER Rù7      EtŽE]‹! ERERERERRù7      Et�E]‹! ERERERERRù7      Et�E]‹! ER	ER
ERR�ERER7      Et‘E]‹! ERERERR�ERER7      Et’E]‹! ERERERR�ERER7      Et“E]‹! ERERERR�ERER7      Et”E]‹! ERERERERRù7      Et•E]‹! ERERER R�ER!ER7      Et–E]‹! ER"ER#ER$ER%Rù7      Et—E]‹! ER&ER'ER(ER)Rù7      Et˜E]‹! ER*ER+ER,ER-Rù7      Et™E]‹! ER.ER/ER0R�ER1ER7      EtšE]‹! ER2ER3ER2ER4Rù7      Et›E]‹! ER5ER6ER5ER7Rù7      EtœE]‹! ER8ER9ER8ER:Rù7      Et�E]‹! ER;ER<ER=4      EtžE]‹! ER>ER?ER@4      EtŸE]‹! ERAERBERCR�ERD7      Et ERE Et¡/ ERFERG bERHERI bERJERK bERLERM bERNERO bERPERQ bERRERS bERTERU bERVERW bERXERY bERZER[ bER\ER] bER^ER_ bER`ERa bERbERc bERdERe bERfERg bERhERi /CEt¢ERj ERk lEt£ERl Et¤ERm Et¥ERERn lEt¦ERoR/ERp ERq llEt§ERrERERsERERtERERuER/Et¨] ^k E]¨EPS                  4        U UUu/ uF  w  rV F  q"V bK  	  K  	  uppp Etª] ^k ERv Et«ERw Et¬ERx Et­ERy Et®ERz Et¯ER{ Et°ER|R�/ER} ER~ llEt±ER Et²ER€ Et³ER� ER‚ lEt´ERƒ ER„ lEtµER… ER† lEt¶^ ER‡EI·EH¸Et¸ E]¸! 4       ERˆ 4       Et¹ER‰ ERŠ lEtº^ ER‹EI»EH¼Et¼ ERŒ ER� lEt½ERŽ Et¾ER� ER� lEt¿ER‘ ER’ lEtÀER“ ER” lEtÁER• EtÂERER– lEtÃER— EtÄER˜ EtÅE]Æ! 0 ER™kERškER›kERœkER�kRíkERžkERŸkER kER¡kER¢kER£kER¤kER¥kR¡kR¢kER¦kER§kER¨kER©kERªkER«kER¬kER­kER®kR£kR¤kER¯kER°kER±kER²kER³kER´kERµkER¶kERHkER·kER¸kER¹kRkERºkER»kER¼kER½kER¾kER¿kERÀkERÁkERÂkERÃkERÄkR$kERÅkERÆkERÇkERÈkR"kERÉkERÊkERËkERÌkERÍkERÎkERÏkERÐkERÑkERÒkRìkERÓkERÔkR™kERÕkERÖkER×k4      EtÇERØ ERÙ lEtÈERÚ ERÛ lEtÉERÜ ERÝ lEtÊ0 ERmEtËER¤ERERÞERß03ER«ERàERÞ03/EtÌERá ERâ lEtÍERã ERä lEtÎERå ERæ lEtÏERç ERè lEtÐERé ERê lEtÑERë ERì lEtÒERí ERî lEtÓERï ERð lEtÔERñ ERò lEtÕERó ERô lEtÖERõ Et×ERö ER÷ lEtØERø ERù lEtÙERú ERû lEtÚERü ERý lEtÛERþ ERÿ lEtÜER  ER lEtÝER ER lEtÞER ER lEtßER EtàER EtáER ER	 lEtâER
 tË]ÂRˆ8X  d
   ]Ë! 4        R# R#   ] d   t]P
                  R8w  d   h  RtAELRtAii ; i  ]  d     ELi ; i  ]  d     E	Lïi ; i  ]  d     E	L“i ; i  ]  d     EL¢i ; i  ]  d     ELwi ; i  ]  d     ELmi ; iu uppp i (  a  Hermes CLI - Main entry point.

Usage:
    hermes                     # Interactive chat (default)
    hermes chat / gateway / setup / status / cron / doctor / update / ...
    hermes --version           # Show version and update status
    hermes <cmd> --help        # Per-command help
NÚhermes_bootstrap)Ú_early_recovery)Úsuppress_platform_ver_console)Ú_startup_fastc                ó0   € V ^8„  d   QhR\         R\        /# ©é   ÚargvÚreturn©ÚlistÚbool)Úformats   "ÚCC:\Users\johnn\AppData\Local\hermes\hermes-agent\hermes_cli\main.pyÚ__annotate__r   ?   s   € ÷ Sñ Sœtð S¬ñ Só    c                 óº   € \         ;QJ d0    R  \        P                  ! V 4       4       F  '       g   K   R# 	  R# ! R  \        P                  ! V 4       4       4      # )c              3   óJ   "  € T F  w  rVR 8H  ;'       d    VR8H  x € K  	  R# 5i)ÚgatewayÚrunN© )Ú.0ÚaÚbs   &  r   Ú	<genexpr>Ú'_argv_is_gateway_run.<locals>.<genexpr>@   s'   é € ÐRÑ9Q±°ˆq�I‰~×,Ð, ! u¡*Ô,Ó9Qùs   ‚#•#TF)ÚanyÚ	itertoolsÚpairwise©r	   s   &r   Ú_argv_is_gateway_runr    ?   sA   € ß‹3ÑR¼×9KÒ9KÈDÔ9QÓR�3Œ3ÐRŠ3ÐRˆ3ÑR¼×9KÒ9KÈDÔ9QÓRÓRÐRr   ºé   NN)Úarm_startup_watchdogc                ó(   € V ^8„  d   QhR\         RR/# )r   Úrcr
   N)Úobject)r   s   "r   r   r   M   s   € ÷ Fñ FœFð F tñ Fr   c                óh  € \         P                  \         P                  3 F  p VP                  4        K  	   \
        P                  ! 4        \        P                  ! \        V \        4      '       d	   V 4       R# V f	   ^ 4       R# ^4       R#   \         d     K~  i ; i  \         d     Lai ; i)uÊ  Exit one-shot mode without letting late native finalizers change rc.

The SIGABRT this guards against fires in a native-extension finalizer
during ``Py_FinalizeEx``, *after* the response printed. Flush, shut down
file logging, then ``os._exit`` past finalization. The ``atexit`` chain is
deliberately skipped â€” several handlers re-enter native code that may be
the abort source; stateful cleanup lives in ``_cleanup_oneshot_runtime``.

See #30387, #43055.
N)ÚsysÚstdoutÚstderrÚflushÚ	ExceptionÚloggingÚshutdownÚosÚ_exitÚ
isinstanceÚint)r%   Ústreams   & r   Ú_exit_after_oneshotr4   M   s‰   € ô —:‘:œsŸz™zÓ*ˆð	Ø�L‰LŽNñ +ð
Ü×ÒÔô ‡H‚H”:˜b¤#×&Ò&ˆRÖE°"²*¨QÖEÀ!ÖEøô ô 	Úð	ûô ô Ùðús"   ¥BºB# ÂB ÂB Â#B1Â0B1Fztools.terminal_toolÚcleanup_all_environmentsztools.async_delegationÚinterrupt_allÚreasonzoneshot shutdownztools.browser_tool_lifecycleÚ_emergency_cleanup_all_sessionsztools.mcp_tool_lifecycleÚshutdown_mcp_serverszagent.auxiliary_clientÚshutdown_cached_clientsz"hermes_cli.local_runtime.bootstrapÚshutdown_local_runtimez-hermes_cli.observability.relay_shared_metricsÚshutdown_runtimesc                ó   € V ^8„  d   QhRR/# ©r   r
   Nr   )r   s   "r   r   r   t   s   € ÷ ñ  $ñ r   c                 ó®   € \         '       d   R# Rs ^ RIp \         F(  w  rr4 \        V P	                  V4      V4      ! R/ VB  K*  	  R#   T d     K8  i ; i)u?  Best-effort process-global cleanup before one-shot hard exit.

``run_oneshot`` owns the agent-local cleanup (memory provider, agent.close,
session_db.close â€” all in ``_run_agent``'s finally block). This mirrors the
process-global pieces from ``cli.py:_run_cleanup()`` that would otherwise
be skipped by ``os._exit``.
NTr   )Ú_oneshot_cleanup_doneÚ	importlibÚ_ONESHOT_CLEANUPSÚgetattrÚimport_module)rA   ÚmoduleÚattrÚkwargsÚswallows        r   Ú_cleanup_oneshot_runtimerI   t   s[   € ÷ ÓÙØ ÐÛç):Ñ%ˆ�fð	Ü�I×+Ñ+¨FÓ3°TÔ:ÑD¸VÔDó *;øð ô 	Úð	ús   ¢!A	Á	AÁAÚmodelÚproviderÚtoolsetsÚskillsÚ
usage_fileÚresumeÚ	reasoningc                ó|   € V ^8„  d   QhR\         R\        R\        R\        R\        R\        R\        R\        R	R
/	# )r   ÚpromptrJ   rK   rL   rM   rN   rO   rP   r
   N)Ústrr&   )r   s   "r   r   r   ‰   sd   € ÷ 0 ñ 0 Üð0 ô ð0 ô ð	0 ô
 ð0 ô ð0 ô ð0 ô ð0 ô ð0 ð 
ñ0 r   c                ó  €  ^ RI Hp V! V VVVVVVVR7      p	 \        4        \        V	4       R#   \         d    ^‚p	 L'\         dq   p
T
P                  eM   \        T
P                  \        4      '       g-   \        T
P                  \        P                  R7       ^p	 Rp
?
L‹T
P                  p	 Rp
?
LœRp
?
i\         d-    ^ RIp TP                  4        M  \         d     Mi ; i^p	 LÕi ; i  \        T	4       i ; i)é    )Úrun_oneshot)rJ   rK   rL   rM   rN   rO   rP   N©Úfile)Úhermes_cli.oneshotrV   ÚKeyboardInterruptÚ
SystemExitÚcoder1   r2   Úprintr(   r*   ÚBaseExceptionÚ	tracebackÚ	print_excr,   rI   r4   )rR   rJ   rK   rL   rM   rN   rO   rP   rV   r%   Úexcr_   s   &$$$$$$$    r   Ú_run_and_exit_oneshotrb   ‰   sÚ   € ðÝ2áØØØØØØ!ØØô	
ˆð8 Ü Ô"ô
 	˜BÖøô1 ô ØŠÜô Ø�8‰8Ò¬
°3·8±8¼S×(AÒ(AÜ�#—(‘(¤§¡Õ,Ø�Bà—‘�BûÜô 	ó 	ð	Ø×ÑÕ!øÜô 	Ùð	úàŠð	ûô  	˜BÕúsb   ‚0 ™
C1 °C.¿C.ÁC.Á	AB4Â#B4Â4C.ÃC.ÃCÃC.ÃC&Ã#C.Ã%C&Ã&C.Ã-C.Ã1C>c                ó6   € V ^8„  d   QhR\         R,          RR/# )r   ÚpidNr
   )r2   )r   s   "r   r   r   ¼   s   € ÷ ñ ¤C¨$¥Jð ¸$ñ r   c                ó€   € V e   T M\         P                  ! 4       ^8w  d   R# \        R\        P                  R7       R# )uR  Warn when this process is PID 1 with nothing above it to reap orphans.

The official image's ENTRYPOINT (``docker/entrypoint-dispatch.sh`` -> s6-overlay's
``/init``) is the reaper for orphaned grandchildren (browser tooling, MCP servers, shell
children). A Compose service that overrides ``entrypoint:`` to invoke hermes directly makes
hermes itself PID 1 â€” nothing then ``wait()``s on those orphans and they accumulate as
zombies without bound (#111577). Outside a container a user process is never PID 1, so
this is quiet everywhere else; it mirrors the dispatcher's own non-PID-1 warning.
Na9  [hermes] WARNING: this process is PID 1 with no init above it (entrypoint override?). Orphaned child processes will not be reaped and will accumulate as zombies. Use the image's default ENTRYPOINT (docker/entrypoint-dispatch.sh) instead of overriding it, or run with `docker run --init` / `init: true` in Compose.rW   )r/   Úgetpidr]   r(   r*   )rd   s   &r   Ú_warn_if_unsupervised_pid1rg   ¼   s2   € ð Š‰¤B§I¢I£K°AÔ5ÙÜ	ð	Iô
 �Z‰Z÷r   c                ó   € V ^8„  d   QhRR/# r>   r   )r   s   "r   r   r   Ò   s   € ÷ ñ ˜Dñ r   c                 ój  €  ^ RI p V P                  R4       R#   \         d     Mi ; i^ RIp^ RIp TP	                  4       pTR8X  d+   TP                  RRR7      pTP                  ^R^ ^ ^ 4       R# TR8X  d'   TP                  R	RR7      pTP                  R4       R# R#   \         d     R# i ; i)
u!  Cosmetic: show 'hermes' instead of 'python3.xx' in ps/top/htop.

Order: opt-in ``setproctitle`` dep; ctypes ``prctl(PR_SET_NAME)`` (Linux,
15-char limit); ``pthread_setname_np`` (macOS â€” lldb/top only, not ``ps
aux``); no-op on Windows (the .exe is already ``hermes.exe``). Never fatal.
NÚhermesÚLinuxz	libc.so.6T)Ú	use_errnos   hermesÚDarwinz
libc.dylib)	ÚsetproctitleÚImportErrorÚctypesÚplatformÚsystemÚCDLLÚprctlÚpthread_setname_npr,   )rn   rp   rq   rr   Úlibcs        r   Ú_set_process_titlerw   Ò   sµ   € ðÛà×!Ñ! (Ô+ÙøÜô Ùðúó Ûð	Ø—‘Ó"ˆØ�WÔØ—;‘;˜{°d�;Ó;ˆDØ�J‰J�r˜9 a¨¨AÖ.Ø�xÔØ—;‘;˜|°t�;Ó<ˆDØ×#Ñ# IÖ.ñ  øô ô Úðús#   ‚ ™'¦'³?B# Á4+B# Â#B2Â1B2c                ó$   € V ^8„  d   QhR\         /# ©r   r
   ©rS   )r   s   "r   r   r   ú   s   € ÷ Kñ K¤cñ Kr   c                 ó  € \         P                  P                  R4      p V '       d!   \         P                  P	                  V R4      # \         P                  P	                  \         P                  P                  R4      RR4      # )z=config.yaml of the home this process is currently pointed at.ÚHERMES_HOMEúconfig.yamlÚ~z.hermes)r/   ÚenvironÚgetÚpathÚjoinÚ
expanduser)Úhomes    r   Ú_early_interface_config_pathr…   ú   sR   € ä�:‰:�>‰>˜-Ó(€DßÜ�w‰w�|‰|˜D -Ó0Ð0Ü�7‰7�<‰<œŸ™×*Ñ*¨3Ó/°¸MÓJÐJr   c                ó$   € V ^8„  d   QhR\         /# ry   rz   )r   s   "r   r   r     s   € ÷ ñ ¬ñ r   c                 ól  € \        4       p \        e    \        ^ ,          V 8X  d   \        ^,          # Rp \        P                  P	                  V 4      '       d²   ^ RIp\        V RR7      ;_uu_ 4       pVP                  V4      ;'       g    / pRRR4       XP                  R/ 4      p\        V\        4      '       dM   VP                  R4      p\        V\        4      '       d&   VP                  4       P                  4       R8X  d   RpY3sT#   + '       g   i     L‰; i  \         d    Rp L'i ; i)zŒReturn the configured default interface ("cli"/"tui") via a minimal
YAML read. Best-effort: any error falls back to "cli" (legacy behavior).NÚcliú	utf-8-sig©ÚencodingÚdisplayÚ	interfaceÚtui)r…   Ú_EARLY_INTERFACE_CACHEr/   r�   ÚexistsÚhermes_yamlÚopenÚ	safe_loadr€   r1   ÚdictrS   ÚstripÚlowerr,   )Úcfg_pathÚvalueÚ_yaml_ifaceÚ_fÚrawÚdispÚifaces          r   Ú_config_default_interface_earlyrž     s÷   € ô ,Ó-€HÜÒ)Ô.DÀQÕ.GÈ8Ô.SÜ% aÕ(Ð(Ø€EðÜ�7‰7�>‰>˜(×#Ò#Û-ä�h¨×5Õ5¸Ø!×+Ñ+¨BÓ/×5Ð5°2�÷ 6à—7‘7˜9 bÓ)ˆDÜ˜$¤×%Ò%ØŸ™ Ó-�Ü˜e¤S×)Ò)¨e¯k©k«m×.AÑ.AÓ.CÀuÔ.LØ!�Eð 'Ð.ÐØ€L÷ 6×5ûô ô ØŠðús0   µ$D# ÁD# Á3DÂA<D# ÄD 	ÄD# Ä#D3Ä2D3c                óT   € V ^8„  d   QhR\         \        ,          R,          R\        /# )r   r	   Nr
   )r   rS   r   )r   s   "r   r   r     s#   € ÷ 6ñ 6œ4¤�9 tÕ+ð 6´tñ 6r   c                óî  a € S f   \         P                  R,          o RS 9   d   R# \        P                  P	                  R4      R8X  gA   \
        ;QJ d    V 3R lR	 4       F  '       g   K   RM	  RM! V 3R lR	 4       4      '       d   R#  \         P                  P                  4       '       d%   \         P                  P                  4       '       g   R#  \        4       R8H  #   \         d     R# i ; i)
aÉ  Earliest TUI decision, usable before argparse/config imports.

Precedence: ``--cli`` wins, then ``--tui``/``HERMES_TUI=1``, then a
real-TTY gate, then ``display.interface``. The TTY gate is load-bearing
for headless spawners (kanban workers, cron, pipes running ``chat -q``):
a ``display.interface: tui`` default used to boot the TUI here, whose
no-TTY bail-out exits 0 without doing the task. An explicit ``--tui``
still reaches that informative bail-out.
r!   z--cliFÚ
HERMES_TUIÚ1c              3   ó,   <"  € T F	  qS9   x € K  	  R # 5i©Nr   )r   Úflagr	   s   & €r   r   Ú#_wants_tui_early.<locals>.<genexpr>)  s   øé € Ð1qÑKpÀ4¸$¶,ÓKpùs   ƒTrŽ   )z--tuiz--nativez--tui-native)r(   r	   r/   r   r€   r   ÚstdinÚisattyr)   r,   rž   r   s   fr   Ú_wants_tui_earlyr©     s±   ø€ ð ‚|Ü�x‰x˜�|ˆØ�$„ÙÜ	‡z�z‡~�~�lÓ# sÔ*¯c«cÔ1qÑKpÓ1q¯c¯cªcÔ1qÑKpÓ1q×.qÒ.qÙðÜ—	‘	× Ñ ×"Ò"¤s§z¡z×'8Ñ'8×':Ò':Ùð (;ô +Ó,°Ñ5Ð5øô ô Úðús   Â#C% Â1#C% Ã%C4Ã3C4c                ó   € V ^8„  d   QhRR/# r>   r   )r   s   "r   r   r   9  s   € ÷ ñ  tñ r   c                  ó  € \         P                  P                  R 4      R8X  d   R# \        4       '       g   R#  \         P                  ! ^4      '       g   R# \         P
                  ! ^R4       R#   \         d     R# i ; i)ÚHERMES_TUI_NO_EARLY_DISABLEr¢   NsM   [?1003l[?1002l[?1001l[?1000l[?9l[?1006l[?1005l[?1015l[?1016l[?2029l)r/   r   r€   r©   r¨   ÚwriteÚOSErrorr   r   r   Ú_suppress_mouse_residue_earlyr¯   9  se   € Ü	‡z�z‡~�~Ð3Ó4¸Ô;ÙÜ×ÒÙð
Ü�yŠy˜�|Š|Ùä
�ŠØðGö	
øô
 ô Úðús   ºA1 ÁA1 Á1B Á?B ©ÚPath)ÚOptional)Úbuild_cron_parser)Úbuild_gateway_parser)Úbuild_profile_parser)Úbuild_model_parser)Úbuild_setup_parser)Úbuild_whatsapp_parserÚbuild_whatsapp_cloud_parser)Úbuild_slack_parser)Úbuild_login_parser)Úbuild_logout_parser)Úbuild_auth_parser)Úbuild_status_parser)Úbuild_pause_parser)Úbuild_webhook_parser)Úbuild_hooks_parser)Úbuild_doctor_parser)Úbuild_verify_parser)Úbuild_security_parser)Úbuild_approvals_parser)Úbuild_dump_parser)Úbuild_debug_parser)Úbuild_backup_parser)Úbuild_import_cmd_parser)Úbuild_config_parser)Úbuild_skin_parser)Úbuild_console_parser)Úbuild_update_parser)Úbuild_uninstall_parser)Úbuild_dashboard_parserÚbuild_serve_parser)Úbuild_gui_parser)Úbuild_logs_parser)Úbuild_prompt_size_parser)Úbuild_memory_parser)Úbuild_acp_parser)Úbuild_tools_parser)Úbuild_insights_parser)Úbuild_usage_parser)Úbuild_monitoring_parser)Úbuild_skills_parser)Úbuild_pairing_parser)Úbuild_plugins_parser)Úbuild_mcp_parser)Úbuild_connectors_parser)Úbuild_vault_parser)Úbuild_moa_parser)Úbuild_fallback_parser)Úbuild_worktree_parser)Úbuild_browser_parser)Úbuild_secrets_parser)Úbuild_codex_runtime_parser)Úbuild_egress_parser)Úbuild_migrate_parser)Úbuild_checkpoints_parser)Úbuild_bundles_parser)Úbuild_curator_parser)Úbuild_pets_parser)Úbuild_journey_parser)Úbuild_computer_use_parser)Úbuild_sessions_parserÚcmd_sessions_lazy)Úbuild_completion_parserc                ó(   € V ^8„  d   QhR\         RR/# )r   Úcommand_namer
   Nrz   )r   s   "r   r   r   ›  s   € ÷ 	ñ 	œsð 	 tñ 	r   c                ó¼   € \         P                  P                  4       '       g8   \        RV  R2\         P                  R7       \         P
                  ! ^4       R# R# )zUExit 1 if stdin is not a terminal: curses/input() prompts spin at 100% CPU on a pipe.zError: 'hermes zŒ' requires an interactive terminal.
It cannot be run through a pipe or non-interactive subprocess.
Run it directly in your terminal instead.rW   N)r(   r§   r¨   r]   r*   Úexit)rò   s   &r   Ú_require_ttyrõ   ›  sI   € ä�9‰9×Ñ×ÒÜØ˜l˜^ð ,8ð 9ô —‘õ		
ô 	�Š�Žñ r   z^[a-z0-9][a-z0-9_-]{0,63}$c                ó<   € V ^8„  d   QhR\         R\        R\        /# )r   r	   Úindexr
   )r   r2   r   )r   s   "r   r   r   µ  s!   € ÷ ñ œtð ¬Cð ´Dñ r   c                ó†   €  V P                  R^ V4      pV P                  RV^,           V4       R#   \         d     R# i ; i)a  True once argv reaches `hermes mcp add ... --args <command argv>`.

``mcp add --args`` is command-argv passthrough. Flags after that point
belong to the child MCP command (for example Docker MCP Toolkit's
``--profile``), not to Hermes' own profile selector.
ÚmcpÚaddFT)r÷   Ú
ValueError)r	   r÷   Ú	mcp_indexs   && r   Ú_inside_mcp_add_argsrý   µ  sF   € ðØ—J‘J˜u a¨Ó/ˆ	Ø�
‰
�5˜) a�-¨Ô/ñ øô ô Úðús   ‚-1 ±A ¿A c                ó$   € V ^8„  d   QhR\         /# ry   ©r   )r   s   "r   r   r   Ä  s   € ÷ /ñ /¤tñ /r   c                 óJ   € R\         P                  ^ ,          ;'       g    R9  # )a  False when ``sys.argv`` belongs to a test runner rather than a ``hermes`` run.

pytest's own ``-p no:xdist`` reaches ``_scan_profile_flag`` through ``sys.argv`` at import
time; it must stay a silent skip, while a real ``hermes -p 'Work Bot'`` must fail loudly.
ÚpytestÚ )r(   r	   r   r   r   Ú_looks_like_hermes_invocationr  Ä  s   € ð œCŸH™H Q�K×-Ð-¨2Ñ.Ð.r   c                ó(   € V ^8„  d   QhR\         RR/# )r   r˜   r
   Nrz   )r   s   "r   r   r   Í  s   € ÷ ñ ¤cð ¨dñ r   c                 ó¼   € ^ RI Hp \        RV! V 4       2\        P                  R7       \        R\        P                  R7       \        P
                  ! ^4       R# )rU   )Ú_invalid_profile_name_errorúError: rW   z/Run `hermes profile list` to see your profiles.N)Úhermes_cli.profilesr  r]   r(   r*   rô   )r˜   r  s   & r   Ú_exit_invalid_profile_namer	  Í  s;   € Ý?ä	ˆGÑ/°Ó6Ð7Ð
8¼s¿z¹zÕJÜ	Ð
;Ä#Ç*Á*ÕMÜ‡H‚HˆQ†Kr   c                ó0   € V ^8„  d   QhR\         R\        /# )r   r˜   r
   ©rS   r   )r   s   "r   r   r   Õ  s   € ÷ 1ñ 1¤Cð 1¬Dñ 1r   c                ó>   € V P                  R4      ;'       g    RV 9   # )zŽA ``-p`` value that clearly belongs to some other tool (pytest's ``-p no:xdist``, a
third-party ``-p --flag``), never a mistyped profile name.Ú-Ú:©Ú
startswith)r˜   s   &r   Ú_looks_like_option_valuer  Õ  s!   € ð ×Ñ˜CÓ ×0Ð0 C¨5¡LÐ0r   c                ó0   € V ^8„  d   QhR\         R\        /# r   )r   Útuple)r   s   "r   r   r   Û  s   € ÷ (ñ (œTð (¤eñ (r   c                óÀ  € ^ RI Hp V! 4       w  r#^ pRpV\        V 4      8  Edº   W,          pVR8X  g   VR8X  d   \        W4      '       d   EM�VR	9   d    V^,           \        V 4      8  d‰   W^,           ,          pVP	                  4       P                  4       p\        P                  ! \        V4      '       d   V^V3# V'       g-   \        V4      '       g   \        4       '       d   \        V4       MêVP                  R4      '       d9   VP                  R^4      ^,          P	                  4       P                  4       ^V3# RV9  ;'       dY    V^,           \        V 4      8  ;'       d<    Wb9   ;'       g0    Wc9   ;'       d$    W^,           ,          P                  R4      '       * p	V	'       g   VP                  R4      '       g   RpYI'       d   ^M^,          pEKÊ  R
# )u  Find -p/--profile/--profile= in argv -> (name, tokens_consumed, index).

Historically the flag worked even after the subcommand (`hermes chat -p
coder`), so scan broadly; stop at ``--`` and at the `mcp add --args`
passthrough region. The value is normalised (strip + casefold, matching
``profiles.normalize_profile_name``) before validation so ``-p Work`` selects
``work``. A value that cannot be a profile name is rejected so
resolve_profile_env never sys.exits on it; the rejection is explained (exit 2)
only when the flag comes BEFORE the first subcommand token under a real
``hermes`` run â€” after a subcommand, ``-p`` may belong to that subcommand or a
plugin (`hermes kanban ... -p 8080`), and option-looking values (``no:xdist``,
``--flag``) are always a silent skip.
)Útop_level_value_flag_setsFz--z--argsz
--profile=Ú=r  T>   ú-pú	--profile)NrU   N)Úhermes_cli._parserr  Úlenrý   r•   ÚcasefoldÚreÚmatchÚ_PROFILE_NAME_REr  r  r	  r  Úsplit)
r	   r  Úvalue_flagsÚoptional_value_flagsÚiÚsaw_subcommandÚargr›   r˜   Útakes_values
   &         r   Ú_scan_profile_flagr&  Û  s�  € õ =á(AÓ(CÑ%€KØ	€AØ€NØ
Œc�$‹i�-Ø�gˆØ�$Œ;˜3 (œ?Ô/CÀD×/LÒ/LÙØÐ%Ô%¨!¨a­%´#°d³)Ô*;Ø˜1•u•+ˆCØ—I‘I“K×(Ñ(Ó*ˆEÜ�xŠxÔ(¨%×0Ò0Ø˜a �{Ð"ß!Ô*BÀ3×*GÒ*GÔLi×LkÒLkÜ*¨3Ô/ØØ�>‰>˜,×'Ò'Ø—9‘9˜S !Ó$ QÕ'×-Ñ-Ó/×8Ñ8Ó:¸A¸qÐ@Ð@Ø ‘n÷ 
ð 
¨¨Q­´°T³Ñ):÷ 
ð 
ØÑ÷ Qð QØÑ+×OÐO°D¸Q½µK×4JÑ4JÈ3Ó4OÔ0Oð 	÷  3§>¡>°#×#6Ò#6Ø!ˆNØ	–+‰Q 1Õ$‹ØÐr   c                ó>   € V ^8„  d   QhR\         R\         R,          /# )r   Únamer
   Nrz   )r   s   "r   r   r     s"   € ÷ Hñ H¬ð H´°tµñ Hr   c                ó”   € V R8X  d   R# ^ RI HpHp V! 4       pVf   R# VR,          V ,          pV! V4      '       d   \        V4      # R# )a  Resolve `sudo hermes -p <name>` against the invoking user's home.

This runs before argparse, so `--run-as-user` is not available yet. For
sudo invocations the best signal is SUDO_USER: root is only doing the
privileged install/start action; the profile store belongs to the user.
ÚdefaultN)Únamed_profile_is_liveÚsudo_invoker_default_homeÚprofiles)Úhermes_constantsr+  r,  rS   )r(  r+  r,  Ú	sudo_homeÚ	candidates   &    r   Ú_resolve_sudo_user_profile_envr1    sK   € ð ˆyÔÙßQá)Ó+€IØÒÙØ˜JÕ&¨Õ-€IÙ2°9×=Ò=Œ3ˆy‹>ÐGÀ4ÐGr   c                ó0   € V ^8„  d   QhR\         R\        /# r   r   )r   s   "r   r   r     s   € ÷ 4ñ 4¤Dð 4¬Tñ 4r   c                ó¢  € \         P                  P                  R4      '       g&   \         P                  P                  R4      '       d   R# \        R V  4       R4      R8H  pV'       d(   \         P                  P                  R4      '       d   R# \         P                  P                  RR	4      P	                  4       P                  4       R
9   # )u<  A supervisor-launched gateway child must NOT follow the sticky active_profile.

Each supervised slot has a fixed profile identity: named slots pass
``-p <name>`` or pin HERMES_HOME to the profile dir; a bare invocation
means "the root HERMES_HOME profile". If a supervised default-profile
child read active_profile, switching the active profile (dashboard,
``hermes profile use``) would silently redirect the default gateway into
that profile â€” adopting its credentials and double-polling a Telegram
token already owned by that profile's own gateway (#74872).

Markers (see gateway/restart.py ``is_gateway_supervisor_process``):
HERMES_SUPERVISED_CHILD (systemd unit / launchd plist / Windows task),
HERMES_S6_SUPERVISED_CHILD (legacy s6 container), INVOCATION_ID (systemd
service children only â€” consulted ONLY for gateway commands because it is
inherited by every descendant of a systemd-launched process, e.g.
self-hosted CI runners), HERMES_GATEWAY_EXTERNAL_SUPERVISOR (explicit
opt-in). XPC_SERVICE_NAME is deliberately NOT consulted: interactive macOS
terminals set it too.
ÚHERMES_SUPERVISED_CHILDÚHERMES_S6_SUPERVISED_CHILDTc              3   óV   "  € T F  qP                  R 4      '       d   K  Vx € K!  	  R# 5i©r  Nr  )r   r   s   & r   r   Ú,_under_gateway_supervisor.<locals>.<genexpr>.  s   é € ÐD¡d ·,±,¸s×2CŸ1š1£dùó   ‚)Ÿ
)Nr   ÚINVOCATION_IDÚ"HERMES_GATEWAY_EXTERNAL_SUPERVISORr  >   r¢   ÚonÚyesÚtrue)r/   r   r€   Únextr•   r–   )r	   Úis_gateway_cmds   & r   Ú_under_gateway_supervisorrA    sŒ   € ô( 
‡z�z‡~�~Ð/×0Ò0´B·J±J·N±NÐC_×4`Ò4`ÙÜÑD¡dÓDÀdÓKÈyÑX€Nßœ"Ÿ*™*Ÿ.™.¨×9Ò9ÙÜ�:‰:�>‰>Ø,¨bóç�eƒg�e‰e‹gÐ3ñ4ð 4r   c                ó0   € V ^8„  d   QhR\         R\        /# r   r   )r   s   "r   r   r   6  s   € ÷ ñ ¤Tð ¬dñ r   c                ó  € V  Uu. uF  qP                  R4      '       d   K  VNK  	  ppVR,          RR.8w  g   RV 9   d   R# \        P                  P                  RR4      P	                  4       R
9   d   R# ^ R	IHp V! 4       # u upi )a)  A bare ``gateway run`` inside the s6 image names the ``gateway-default`` slot too.

``_maybe_redirect_run_to_s6_supervision`` turns it into a start of the supervised slot for the
current profile, and it is the image's own CMD. Following the sticky ``active_profile`` there
started that profile's named slot on every container boot: the one the boot reconciler just
registered down, because a started named slot is a second gateway beside the multiplexer.
``--no-supervise`` keeps the foreground run, which follows ``active_profile`` as before (#22502).
r  :Nr   Nr   r   z--no-superviseFÚHERMES_GATEWAY_NO_SUPERVISEr  )Ú_s6_running)r¢   r>  r=  )r  r/   r   r€   r–   Úhermes_cli.service_managerrE  )r	   r   ÚwordsrE  s   &   r   Ú_s6_supervised_gateway_runrH  6  st   € ñ Ó6™�1§L¡L°×$5�QˆQ™€EÐ6ØˆR…y�Y Ð&Ô&Ð*:¸dÔ*BÙÜ	‡z�z‡~�~Ð3°RÓ8×>Ñ>Ó@ÐDXÔXÙÝ6Ù‹=Ðùò 7s
   …B¢Bc                ó2   € V ^8„  d   QhR\         R,          /# r>   rz   )r   s   "r   r   r   H  s   € ÷ !ñ !œc D�jñ !r   c                 ó   € \         # )zÃProfile named by a consumed ``-p``/``--profile`` flag, else None.

Sticky ``active_profile`` is not explicit. Desktop launch must not overwrite
its stored profile when the user omitted the flag.
)Ú_explicit_cli_profiler   r   r   Úexplicit_cli_profilerL  H  s
   € ô !Ð r   c                ó   € V ^8„  d   QhRR/# r>   r   )r   s   "r   r   r   Q  s   € ÷ EBñ EB ñ EBr   c                 óà  € Rs \        P                  R,          p \        V 4      w  rpRp\        P
                  P                  RR4      pVf/   V'       d'   \        V4      P                  P                  R8X  d   R# Vf�   \        V 4      '       gŒ   \        P                  ! V 4      '       gp   \        V 4      '       g_    ^ RIHp V! 4       R,          pVP!                  4       '       d4   VP#                  R	R
7      P%                  4       pV'       d   VR8w  d   TpRpVf   R#  ^ RIHp	 V	! V4      p
X
\        P
                  R&   T^ 8”  d   Ts T^ 8”  dL   TeF   T^,           p\        P                  RT \        P                  Yâ,           R ,           \        n        R# R# R#   \&        \(        3 d     L˜i ; i  \.         d°   p\1        T4      p
\3        T4      pT
'       gK   T'       dC   ^ RIHp T! T 4      '       d)   X	! R4      p
\9        RT R2\        P:                  R7       MRT R2pT
'       g5   \9        RT 2\        P:                  R7       \        P<                  ! ^4        Rp?EL<Rp?i\>         d@   p\9        RT 2\        P:                  R7       \        P<                  ! ^4        Rp?EL„Rp?i\@         d+   p\9        RT R2\        P:                  R7        Rp?R# Rp?ii ; i)z:Pre-parse --profile/-p and set HERMES_HOME before imports.Nr!   Fr|   r  r-  )Úget_default_hermes_rootÚactive_profiler‰   rŠ   r*  T)Úresolve_profile_env)Ú!is_stale_profile_recovery_commandzWarning: saved profile 'zI' no longer exists; running this recovery command in the default profile.rW   zSaved profile 'z@' no longer exists. Switch back with: hermes profile use defaultr  z"Warning: profile override failed (z), using default)!rK  r(   r	   r&  r/   r   r€   r±   Úparentr(  rA  r   Úis_desktop_ssh_backend_argvrH  r.  rO  r�   Ú	read_textr•   ÚUnicodeDecodeErrorr®   r  rQ  ÚFileNotFoundErrorr1  rS   Ú hermes_cli.main_profile_recoveryrR  r]   r*   rô   rû   r,   )r	   Úprofile_nameÚconsumeÚprofile_indexÚfrom_sticky_profileÚhermes_home_envrO  Úactive_pathr(  rQ  Úhermes_homera   ÚerrorrR  Ústarts                  r   Ú_apply_profile_overriderb  Q  sg  € ð !ÐÜ�8‰8�B�<€DÜ+=¸dÓ+CÑ(€L˜=ØÐô —j‘j—n‘n ]°BÓ7€OØÒ§´D¸Ó4I×4PÑ4P×4UÑ4UÐYcÔ4cÙàÒÔ%>¸t×%DÒ%DÜ!×=Ò=¸d×CÒCÜ.¨t×4Ò4ð
	Ý@á1Ó3Ð6FÕFˆKØ×!Ñ!×#Ò#Ø"×,Ñ,°kÐ,ÓB×HÑHÓJ�ß˜D IÔ-Ø#'�LØ*.Ð'ð ÒÙðÝ;á)¨,Ó7ˆð4 !,„B‡J�Jˆ}ÑØ�„{Ø ,Ðà�„{�}Ò0Ø Õ!ˆÜ—8‘8˜F˜UÐ#¤c§h¡h¨u­Ð/@Ð&AÕAŒŽñ 1�{øôM #¤GÐ,ô 	Ùð	ûô ô Ü4°\ÓBˆÜ�C“ˆß×2ÝZá0°×6Ò6Ù1°)Ó<�ÜØ.¨|¨nð =Lð LäŸ™öð *¨,¨Ð7wÐx�ßÜ�G˜E˜7Ð#¬#¯*©*Õ5Ü�HŠH�QŒKÿùÜô Ü�˜�uˆo¤C§J¡JÕ/Ü�Š��ŠûÜô äÐ2°3°%Ð7GÐHÌsÏzÉzÕZÝûðúsl   Â?)F! Ã)'F! ÄF! Ä#F8 Æ!F5Æ4F5Æ8K-Ç%I-Ç)I-Ç=5I-È34I-É-K-É:K-É;4J5Ê5K-ËK-ËK(Ë(K-Ú__main__Ú__file__zhermes_cli.main)Úexport_scratch_tmp_env:r"   r   NÚpm©Úmain:r   NNÚwin32)Ú_install_repair©Úget_hermes_home)Úload_hermes_dotenvz.env)Úproject_env)Úload_user_config_effectiver}   ÚHERMES_REDACT_SECRETSÚsecurityÚredact_secretsÚnetworkÚ
force_ipv4T©Úsetup_loggingc              #   óV   "  € T F  qP                  R 4      '       d   K  Vx € K!  	  R# 5ir7  r  ©r   r$  s   & r   r   r   ò  s   é € ÐL¡L˜S¿¹Às×8K—S’S£Lùr9  r  Ú	dashboardÚserveÚguiÚdesktoprˆ   ©Úmode)Úapply_ipv4_preference)Úforce)Údatetime)Ú_model_flow_openrouterÚ_model_flow_nousÚ_model_flow_openai_codexÚ_model_flow_xai_oauthÚ_model_flow_qwen_oauthÚ_model_flow_minimax_oauthÚ_model_flow_customÚ_model_flow_azure_foundryÚ_model_flow_named_customÚ_model_flow_copilotÚ_model_flow_copilot_acpÚ_model_flow_kimiÚ_model_flow_stepfunÚ_model_flow_bedrockÚ_model_flow_vertexÚ_model_flow_api_key_providerÚ_model_flow_anthropicÚ_model_flow_moaÚ_model_flow_ai_gatewayÚ_model_flow_plugin_providerÚ _is_profile_plugin_flow_provider©Ú_model_flow_local)Úcmd_acpÚcmd_insightsÚ
cmd_memoryÚcmd_monitoringÚ
cmd_skillsÚ	cmd_tools)Ú	cmd_slackÚcmd_whatsappÚcmd_whatsapp_cloud)Úis_desktop_owned_backend)
Ú_attach_to_host_backendÚ_finalize_update_outputÚ_find_stale_dashboard_pidsÚ_install_hangup_protectionÚ_is_electron_packaged_web_distÚ)_maybe_setup_dashboard_auth_interactivelyÚ_read_ssh_session_token_fileÚ_report_dashboard_statusÚ_resolve_dashboard_web_distÚ_route_named_profile_dashboard)Ú_respawn_dashboard_processes)Ú_GENERIC_API_KEY_PROVIDERSÚ_aux_config_menuÚ_build_provider_picker_rowsÚ_clear_stale_openai_base_urlÚ_is_profile_api_key_providerÚ_model_choice_save_countÚ_named_custom_provider_mapÚ_offer_reasoning_after_pickÚ_prompt_main_reasoning_effortÚ_prompt_provider_choiceÚ_remove_custom_provider)ÚShimQuarantineErrorÚ_BYTECODE_FINGERPRINT_FILEÚ_desktop_stamp_pathÚ#_detect_broken_lazy_refresh_importsÚ_expected_windows_pe_machinesÚ_hermes_exe_shimsÚ_insert_python_pinÚ_interpreter_scripts_dirÚ!_load_installable_optional_extrasÚ_parse_pe_machineÚ_quarantine_running_hermes_exeÚ#_repair_broken_lazy_refresh_importsÚ_resolve_install_target_pythonÚ_restore_quarantined_exesÚ_run_install_with_heartbeatÚ_run_package_only_installÚ_run_quarantined_installÚ_run_with_idle_timeoutÚ_selfÚ!_verify_console_scripts_installedÚ#_verify_core_dependencies_installedÚ_web_ui_build_neededÚ_windows_native_machineÚ_windows_shim_in_process_chainÚ_write_web_ui_build_stamp)Ú_cleanup_quarantined_exesÚ _recover_update_debts_on_startup)Ú_UPDATE_REEXEC_ENVÚ%_clear_lazy_refresh_incomplete_markerÚ_clear_marker_fileÚ_clear_update_incomplete_markerÚ_is_termux_envÚ_is_windowsÚ_is_windows_npm_pathÚ_lazy_refresh_marker_pathÚ_pytest_owns_live_checkoutÚ(_reexec_dependency_sync_off_windows_shimÚ_resolve_node_runtime_npmÚ_resolve_update_branchÚ_update_marker_pathÚ_venv_scripts_dir©Úcmd_gui)Ú_desktop_build_neededÚ_desktop_dist_existsÚ!_desktop_macos_relaunchable_fixupÚ_desktop_packaged_executableÚ_install_rebuilt_desktop_appÚ_installed_desktop_apps)Ú)_sweep_stale_bytecode_if_checkout_changed)Ú_build_web_uiÚ_nixos_build_envÚ_record_bytecode_fingerprintÚ_run_npm_install_deterministic)Ú_bypass_chat_launchÚ_launch_tuiÚ_pin_kanban_board_envÚ_refuse_unforwarded_tui_flagsÚ_resolve_use_tuiÚ_sync_bundled_skills_quietlyc                ó`   € V ^8„  d   QhR\         \        \        3,          R,          R\        /# )r   ÚenvNr
   )r”   rS   r   )r   s   "r   r   r   –  s'   € ÷ ñ ¬¬S´#¨X­¸Õ(=ð Ìñ r   c                óì   € T ;'       g    \         P                  p\        VP                  RR4      4      p\	        VP                  R4      ;'       g    RV9   ;'       g    VP                  R4      4      # )z<Import-safe Termux check for cold-start-sensitive CLI paths.ÚPREFIXr  ÚTERMUX_VERSIONzcom.termux/files/usrz/data/data/com.termux/)r/   r   rS   r€   r   r  )rö  ÚcheckÚprefixs   &  r   Ú_is_termux_startup_environmentrü  –  sm   € à×Ð”2—:‘:€EÜ�—‘˜8 RÓ(Ó)€FÜØ�	‰	Ð"Ó#÷ 	7ð 	7Ø! VÑ+÷	7ð 	7à×ÑÐ5Ó6óð r   c                óJ   € V ^8„  d   QhR\         R\        R\        R,          /# )r   Ú
common_dirÚrefr
   N©r±   rS   )r   s   "r   r   r   ¡  s%   € ÷ ñ ¤ð ¬Cð ´C¸$µJñ r   c                ó°  €  V R,          P                  RRR7      pTP                  4        F”  pT'       d/   TP                  R4      '       g   TP                  R4      '       d   K;  TP	                  R^4      p\        T4      ^8X  g   K_  T^,          P                  4       T8X  g   K}  T^ ,          P                  4       u # 	  R#   \         d     R# i ; i)	zÅLook up a ref in .git/packed-refs without spawning git.

packed-refs lines look like ``<sha> <ref>`` with optional ``^<sha>``
peel lines and ``#``-prefixed comments / ``# pack-refs with:`` header.
zpacked-refsr‰   Úreplace©r‹   ÚerrorsNÚ#Ú^Ú )rU  r®   Ú
splitlinesr  r  r  r•   )rþ  rÿ  ÚtextÚlineÚpartss   &&   r   Ú_read_packed_refr  ¡  s®   € ðØ˜]Õ*×5Ñ5¸{ÐS\Ð5Ó]ˆð —‘Ö!ˆß�t—‘ s×+Ò+¨t¯©¸s×/CÒ/CÙØ—
‘
˜3 Ó"ˆÜˆu‹:˜Ž?˜u Q�xŸ~™~Ó/°3Ö6Ø˜•8—>‘>Ó#Ò#ñ "ñ øô ô Úðús   ‚C ÃCÃCc                ó>   € V ^8„  d   QhR\         R\        R,          /# )r   Ú	repo_rootr
   Nr   )r   s   "r   r   r   ´  s   € ÷ )ñ )¬dð )´s¸Tµzñ )r   c           	     ó"  € V R,          p VP                  4       '       d�   VP                  RRR7      P                  4        Fj  pVP                  R4      w  r4pVP	                  4       R8X  g   K.  VP	                  4       '       g   KF  WP	                  4       ,          P                  4       p M	  TpVR,          pVP                  4       '       dA    VP                  RRR7      P	                  4       pV'       d   W,          P                  4       pVR,          P                  RRR7      P	                  4       p	V	P                  R	4      '       dš   V	P                  R^4      ^,          P	                  4       p
W3 FJ  pWº,          pVP                  4       '       g   K#  R
V
 RVP                  RRR7      P	                  4        2u # 	  \        Wj4      pV'       d	   R
V
 RV 2# R
V
 R2# RV	 2#   \         d     Lêi ; i  \         d     R# i ; i)z9Return a cheap checkout fingerprint without spawning git.ú.gitr‰   r  r  r  ÚgitdirÚ	commondirÚHEADzref:zgit:z:unresolvedz	git:HEAD:N)Úis_filerU  r  Ú	partitionr•   Úresolver�   r®   r  r  r  )r  Úgit_dirr
  ÚkeyÚ_r˜   rþ  Úcommondir_fileÚrelÚheadrÿ  r0  Úref_fileÚ
packed_shas   &             r   Ú_read_git_revision_fingerprintr  ´  sæ  € à˜&Õ €Gð&Ø�?‰?×ÒØ×)Ñ)°;ÀyÐ)ÓQ×\Ñ\Ö^�Ø $§¡¨sÓ 3‘�˜Ø—9‘9“; (Ö*¨u¯{©{¯}¬}Ø(¯;©;«=Õ8×AÑAÓC�GÙñ	 _ð ˆ
Ø  ;Õ.ˆØ× Ñ ×"Ò"ðØ$×.Ñ.¸ÈIÐ.ÓV×\Ñ\Ó^�ßØ")¥-×!8Ñ!8Ó!:�Jð ˜&Õ ×+Ñ+°[ÈÐ+ÓS×YÑYÓ[ˆØ�?‰?˜6×"Ò"Ø—*‘*˜S !Ó$ QÕ'×-Ñ-Ó/ˆCð &Ó2�	Ø$�?�Ø—?‘?×$Ô$Ø! #  a¨×(:Ñ(:ÀKÐXaÐ(:Ó(b×(hÑ(hÓ(jÐ'kÐlÒlñ 3ô *¨*Ó:ˆJßØ˜c˜U ! J <Ð0Ð0ð ˜#˜˜kÐ*Ð*Ø˜4˜&Ð!Ð!øô' ô Ùðûô( ô Úðúsm   ‹G? ¡A
G? Á0G? ÂAG? Ã(G. Ã;G. Ä>G? ÅAG? Æ(G? ÇG? Ç#G? Ç)G? Ç.G<Ç9G? Ç;G<Ç<G? Ç?HÈHc                ó$   € V ^8„  d   QhR\         /# ry   rz   )r   s   "r   r   r   à  s   € ÷ 1ñ 1¬Cñ 1r   c                 ó6  € \        \        4      p V '       d   V # ^ RIHp V! 4       pVP                  ;'       g    VP
                  p\        R,          p VP                  4       pRV RVP                   RVP                   2#   \         d
    RT R2u # i ; i)z=Cheap invalidation key for Termux bundled-skill startup sync.)Úget_version_inforM   zskills:r  z:missing)
r  ÚPROJECT_ROOTÚhermes_cli.version_infor"  ÚcommitÚderived_versionÚstatÚst_mtime_nsÚst_sizer®   )Úgit_fpr"  Úversion_infoÚcode_identityÚ
skills_dirr'  s         r   Ú"_termux_bundled_skills_fingerprintr.  à  s•   € ä+¬LÓ9€FßØˆÝ8á#Ó%€LØ ×'Ñ'×GÐG¨<×+GÑ+G€MÜ Õ(€Jð1Ø�‰Ó ˆØ˜˜ q¨×)9Ñ)9Ð(:¸!¸D¿L¹L¸>ÐJÐJøÜô 1Ø˜˜ xÐ0Ò0ð1ús   Á.B ÂBÂBc                ó$   € V ^8„  d   QhR\         /# ry   r°   )r   s   "r   r   r   ñ  s   € ÷ Gñ G¬4ñ Gr   c                  ó2   € \        4       R ,          R,          # )rM   z.termux_bundled_sync_stamprk  r   r   r   Ú!_termux_bundled_skills_stamp_pathr1  ñ  s   € ÜÓ˜xÕ'Ð*FÕFÐFr   c                ó$   € V ^8„  d   QhR\         /# ry   rÿ   )r   s   "r   r   r   õ  s   € ÷ 	ñ 	¬Dñ 	r   c                  ó  € \        4       '       g   R # \        P                  P                  R4      R8X  d   R #  \	        4       p V P                  RR7      P                  4       \        4       8g  #   \         d     R # i ; i)TÚHERMES_TERMUX_FORCE_SKILLS_SYNCr¢   r‰   rŠ   )	rü  r/   r   r€   r1  rU  r•   r.  r®   ©Ústamps    r   Ú"_termux_bundled_skills_sync_neededr7  õ  si   € Ü)×+Ò+ÙÜ	‡z�z‡~�~Ð7Ó8¸CÔ?ÙðÜ1Ó3ˆØ�‰¨ˆÓ4×:Ñ:Ó<Ô@bÓ@dÑdÐdøÜô Úðús   º4A/ Á/A>Á=A>c                ó   € V ^8„  d   QhRR/# r>   r   )r   s   "r   r   r     s   € ÷ ñ ¨Dñ r   c                  óâ   € \        4       '       g   R #  \        4       p V P                  P                  RRR7       V P	                  \        4       R,           RR7       R #   \         d     R # i ; i)NT)ÚparentsÚexist_okÚ
úutf-8rŠ   )rü  r1  rS  ÚmkdirÚ
write_textr.  r®   r5  s    r   Ú"_mark_termux_bundled_skills_syncedr@    s`   € Ü)×+Ò+ÙðÜ1Ó3ˆØ�‰×Ñ 4°$ÐÔ7Ø×ÑÔ;Ó=ÀÕDÈwÐÖWøÜô Úðús   ”A	A ÁA.Á-A.c                ó$   € V ^8„  d   QhR\         /# ry   rÿ   )r   s   "r   r   r     s   € ÷ ñ ¬$ñ r   c                 ó|   € \        4       '       d   \        4       '       g   R# ^ RIHp  V ! RR7       \	        4        R# )a  Sync bundled skills, but skip unchanged Termux checkouts cheaply.

Hashing every bundled skill is safe but expensive on older Android
storage. The git/ref stamp keeps post-update correctness: a changed
checkout revision forces one real sync, then later starts skip it.
F©Úsync_skillsT)Úquiet)rü  r7  Útools.skills_syncrD  r@  rC  s    r   Ú _sync_bundled_skills_for_startuprG    s-   € ô &×'Ò'Ô0R×0TÒ0TÙå-á�dÕÜ&Ô(Ùr   c                ó$   € V ^8„  d   QhR\         /# ry   rÿ   )r   s   "r   r   r     s   € ÷ Cñ C¬dñ Cr   c                  ój   € \        4       '       g   R # \        P                  P                  R4      R8H  # )TÚHERMES_TERMUX_PREFETCH_UPDATESr¢   )rü  r/   r   r€   r   r   r   Ú$_termux_should_prefetch_update_checkrK    s'   € Ü)×+Ò+ÙÜ�:‰:�>‰>Ð:Ó;¸sÑBÐBr   c                ó<   € V ^8„  d   QhR\         R\        R\        /# )r   Úenv_fileÚprovider_env_varsr
   )r±   Úsetr   )r   s   "r   r   r   #  s!   € ÷ ñ ¤tð Äð Ìñ r   c                óÒ  € V P                  4       '       g   R#  V P                  RR7      P                  4        F—  pVP                  4       pVP	                  R4      '       g   RV9  d   K3  VP                  R4      pVP                  R4      w  r4pVP                  4       V9   g   Ko  VP                  4       P                  R4      '       g   K–   R# 	  R#   \         d     R# i ; i)	zETrue if ~/.hermes/.env assigns a non-empty value to any provider key.Fr‰   rŠ   r  r  zexport z'"T)r�   rU  r  r•   r  Úremoveprefixr  r,   )rM  rN  r
  r  r  Úvals   &&    r   Ú_dotenv_has_provider_keyrS  #  sÂ   € à�?‰?×ÒÙð
Ø×&Ñ&°Ð&Ó<×GÑGÖIˆDØ—:‘:“<ˆDØ�‰˜s×#Ò# s°$¤ÙØ×$Ñ$ YÓ/ˆDØŸ.™.¨Ó-‰KˆC�CØ�y‰y‹{Ð/Ö/°C·I±I³K×4EÑ4EÀe×4LÔ4LÚñ Jñ øô ô ØÙðús$   šB
C Â)"C ÃC ÃC ÃC&Ã%C&c                ó<   € V ^8„  d   QhR\         R\        R\        /# )r   Ú	auth_fileÚstrict_profile_scoper
   )r±   r   )r   s   "r   r   r   5  s"   € ÷ ñ ¤Tð Ì4ð ÔTXñ r   c                óè  € ^ RI Hp V P                  4       '       g   R#  \        P                  ! V P                  RR7      4      pVP                  R4      pTP                  \        T;'       g    R4      P                  4       P                  4       4      pV'       dB   V'       d   V'       d   VP                  R8X  g!   \        V! V4      P                  R4      4      # R#   \         d     R# i ; i)	z`True if auth.json's active provider is logged in (api_key providers ignored under strict scope).)Úget_auth_statusFr‰   rŠ   Úactive_providerr  Úapi_keyÚ	logged_in)Úhermes_cli.authrX  r�   ÚjsonÚloadsrU  r€   rS   r•   r–   Ú	auth_typer   r,   )rU  ÚregistryrV  rX  ÚauthÚactiveÚactive_configs   &&&    r   Ú_auth_store_logged_inrd  5  s¿   € å/à×Ñ×ÒÙð	Ü�zŠz˜)×-Ñ-°{Ð-ÓCÓDˆØ—‘Ð+Ó,ˆØ Ÿ™¤S¨¯¨°2Ó%6×%<Ñ%<Ó%>×%DÑ%DÓ%FÓGˆßß §]°}×7NÑ7NÐR[Ô7[ä™¨Ó/×3Ñ3°KÓ@ÓAÐAñ øô ô ØÙðús*    AC" Á0.C" ÂC" Â'C" Â/0C" Ã"C1Ã0C1rV  c                ó0   € V ^8„  d   QhR\         R\         /# )r   rV  r
   rÿ   )r   s   "r   r   r   H  s   € ÷ Yñ Y¼$ð YÌ4ñ Yr   c                ó  aaaa€ ^ RI HpHpHpHp ^ RIHpHo V! 4       pVP                  R4      o\        S\        4      '       d   SMRp\        S\        4      '       dB   SP                  R4      ;'       g    Rp\        V\        4      '       d   ^ RI Hp V! V4      w  ry\        V4      P                  4       pT;'       d    WqP                  RR4      8g  p
0 RmpVP                  4        F1  pVP                  R8X  g   K  VP!                  VP"                  4       K3  	  V '       d#   ^ RIHp V! 4       ;'       g    / P                  oM\(        P*                  o\,        ;QJ d    V3R	 lV 4       F  '       g   K   R
M	  RM! V3R	 lV 4       4      '       d   R
# \/        V! 4       V4      '       d   R
# \1        V! 4       R,          WP4      '       d   R
# \        S\        4      '       dC   \,        ;QJ d    V3R lR 4       F  '       g   K   R
M	  RM! V3R lR 4       4      '       d   R
# V '       gc    \,        ;QJ d.    VV3R lVP3                  4        4       F  '       g   K   R
M#	  RM! VV3R lVP3                  4        4       4      '       d   R
#  V
'       dJ   V '       gB    ^ RIHpHp V! 4       pV'       d(   V! V4      '       g   VP                  R4      '       d   R
# R# R#   \4         d     L`i ; i  \4         d     R# i ; i)u=  Check if at least one inference provider is usable. Never creates one: the Nous free tier
counts only once its identity exists, and the boot bootstrap (``hermes_cli.free_tier_bootstrap``)
creates it at boot (a first connector use can too); ``cmd_chat`` runs the bootstrap before asking.

``strict_profile_scope``: the caller has bound a NAMED profile's home and
secret scope and wants an answer for that profile only â€” launch-process
env and host-wide fallbacks (gh auth, Claude Code credentials) must not
make it appear ready. Unscoped callers keep the legacy behavior.
)ÚDEFAULT_CONFIGÚget_env_pathrl  Úload_config)ÚPROVIDER_REGISTRYrX  rJ   r  r*  )Úsplit_model_config_defaultrZ  )Úcurrent_secret_scopec              3   ó4   <"  € T F  pS! V4      x € K  	  R # 5ir¤   r   )r   ÚvÚread_provider_envs   & €r   r   Ú/_has_any_provider_configured.<locals>.<genexpr>t  s   øé € Ð
;Ñ): AÑ˜Q×ÐÓ):ùs   ƒTFz	auth.jsonc              3   óv   <"  € T F.  pSP                  V4      ;'       g    R P                  4       x € K0  	  R# 5i)r  N)r€   r•   )r   ÚkÚ	model_cfgs   & €r   r   rp  �  s2   øé € ð +Ù2U¨Qˆ�‰�qÓ	×	Ð	˜R×&Ñ&×(Ð(Ó2Uùs   ƒ9 9c              3   ó¸   <"  € T FO  w  rVP                   R 8X  g   K  S! V4      ;oP                  R4      ;'       d    SP                  R4      R8g  x € KQ  	  R# 5i)rZ  r[  Ú
key_sourceÚkeylessN)r_  r€   )r   rd   ÚpconfigrX  Ústatuss   &  €€r   r   rp  ‰  sa   øé € ð ñ %>‘L�CØ×$Ñ$¨	Ñ1ô:™?¨3Ó/Ð/�×4Ñ4°[ÓA÷ :ð :Ø—J‘J˜|Ó,°	Ñ9ô:ã$=ùs   ƒA�A½A)Úread_claude_code_credentialsÚis_claude_code_token_validÚrefreshToken>   ÚOPENAI_API_KEYÚANTHROPIC_TOKENÚOPENAI_BASE_URLÚANTHROPIC_API_KEYÚOPENROUTER_API_KEY©rK   Úbase_urlrZ  )Úhermes_cli.configrg  rh  rl  ri  r\  rj  rX  r€   r1   rS   r”   rk  r•   Úvaluesr_  ÚupdateÚapi_key_env_varsÚagent.secret_scoperl  r/   Úgetenvr   rS  rd  Úitemsr,   Úagent.anthropic_credentialsry  rz  )rV  rg  rh  rl  ri  rj  ÚcfgÚ_model_namerk  r  Ú_has_hermes_configrN  rw  rl  ry  rz  ÚcredsrX  rs  ro  rx  s   $                @@@@r   Ú_has_any_provider_configuredr�  H  sg  û€ ÷ ]Ó\ßBá
‹-€CØ—‘˜Ó €IÜ)¨)´S×9Ò9‘)¸r€KÜ�)œT×"Ò"Ø—m‘m IÓ.×4Ð4°"ˆÜ�k¤4×(Ò(ÝDÙ7¸ÓD‰NˆKÜ�kÓ"×(Ñ(Ó*€Kð %×WÐW¨×8JÑ8JÈ7ÐTVÓ8WÑ)WÐòÐð %×+Ñ+Ö-ˆØ×Ñ 	Ö)Ø×$Ñ$ W×%=Ñ%=Ö>ñ .÷ Ý;á1Ó3×9Ð9°r×>Ñ>ÑäŸI™IÐß
ƒsÔ
;Ñ):Ó
;‡s‡s‚sÔ
;Ñ):Ó
;×;Ò;ÙÜ¡£Ð0A×BÒBÙô
 ™_Ó.°Õ<Ð>O×fÒfÙô �)œT×"Ò"§s£sô +Ù2Uó+§s§s¢sô +Ù2Uó+÷ (ò (ñ ÷  ð		ß‹sõ ð %6×$;Ñ$;Ô$=ó�s�sŠsõ ð %6×$;Ñ$;Ô$=ó÷ ò ñ ð÷ ×"6ð		ßlá0Ó2ˆEßÙ*¨5×1Ò1°U·Y±Y¸~×5NÒ5Náó øô# ô 	Ùð	ûô ô 	Øáð	ús<   È8
K, É#K, É),K, Ê*K= ËK= ËK= Ë,K:Ë9K:Ë=LÌLc                ó   € V ^8„  d   QhRR/# r>   r   )r   s   "r   r   r   ¤  s   € ÷ Sñ S°tñ Sr   c                ób  € \        V RR4      ;'       g    RP                  4       p\        V RR4      ;'       g    RP                  4       pV'       g   V'       g   R#  ^ RIHp ^ RIHpHp  T! 4       pR	 pT! T4      pT! TP                  R4      4      p	T! TP                  R
4      4      p
T;'       g*    T	P                  R4      ;'       g    RP                  4       pT'       g   R# T;'       g    T	P                  R4      ;'       g    RP                  4       p T! TTT	P                  R4      ;'       g    RT	P                  R4      ;'       g    RR7      pT'       g   R# \        P                  P                  4       pT'       g¹   T
P                  R4      RJ d¤   T Uu. uF  qÿP                  R8X  g   K  TNK  	  ppT'       dy   \        P                  P!                  T! T4      R,           4       \        P                  P!                  R4       T Uu. uF  qÿP                  R8w  g   K  TNK  	  ppT'       g   R# T! T4      pT'       gª   \        P                  P!                  TR,           4       \"        ;QJ d    R T 4       F  '       g   K   RM	  RM! R T 4       4      '       d    \        P                  P!                  R4       \        P                  P!                  R4       \%        ^4      h\        P                  P!                  TR,           4        \'        R4      P                  4       P)                  4       pTR9  d+   \        P                  P!                  R4       \%        ^4      hR#   \         d"   p\        P                  RT4        Rp?R# Rp?ii ; i  \         d$   p\        P                  RT4       / p Rp?ELbRp?ii ; i  \         d#   p\        P                  RYËT4        Rp?R# Rp?ii ; iu upi u upi   \*        \,        3 d    Rp Lâi ; i)z@Guard startup -m/--provider overrides before the first API call.rJ   Nr  rK   ©ri  )Úcombined_messageÚselection_warningsz(startup model cost guard unavailable: %sz2startup model cost guard could not load config: %sc                 ó6   € \        V \        4      '       d   V # / # r¤   )r1   r”   )rn  s   &r   Ú<lambda>Ú;_confirm_startup_expensive_model_override.<locals>.<lambda>º  s   € œ: a¬×.Ò.�aÐ6°BÐ6r   rq  r*  r‚  rZ  r�  z-startup model cost guard failed for %s/%s: %sÚ(allow_data_training_tiers_noninteractiveTÚdata_policyr<  zfProceeding in non-interactive mode because security.allow_data_training_tiers_noninteractive is true.
c              3   ó>   "  € T F  qP                   R 8H  x € K  	  R# 5i)r™  N)Úkind)r   Úwarnings   & r   r   Ú<_confirm_startup_expensive_model_override.<locals>.<genexpr>ä  s   é € ÐE¹H°�|‰|˜}Ö,»Hùs   ‚Fz†To acknowledge data-training tiers for unattended runs, set security.allow_data_training_tiers_noninteractive to true in config.yaml.
zuRefusing this startup model override in non-interactive mode. Run interactively and confirm if you intend to use it.
z*Use this model for this invocation? [y/N] zModel override cancelled.
>   Úyr=  )rC   r•   rƒ  ri  Ú!hermes_cli.model_selection_guardsr“  r”  r,   Úloggerrœ  r€   r(   r§   r¨   r›  r*   r­   r   r[   Úinputr–   ÚEOFErrorrZ   )ÚargsÚexplicit_modelÚexplicit_providerri  r“  r”  ra   ÚconfigÚ_dictrs  Úsecurity_cfgrJ   rK   ÚwarningsÚis_interactiveÚwÚacknowledgedÚmessageÚreplys   &                  r   Ú)_confirm_startup_expensive_model_overrider¯  ¤  sY  € ä˜d G¨TÓ2×8Ð8°b×?Ñ?ÓA€NÜ   z°4Ó8×>Ð>¸B×EÑEÓGÐß×"3ÙðÝ1÷	
ðÙ“ˆñ 7€EÙ�6‹]€FÙ�f—j‘j Ó)Ó*€IÙ˜Ÿ™ JÓ/Ó0€Là×FÐF˜yŸ}™}¨YÓ7×=Ð=¸2×DÑDÓF€EßÙØ!×DÐD Y§]¡]°:Ó%>×DÐDÀ"×KÑKÓM€Hðñ &ØØØ—m‘m JÓ/×5Ð5°2Ø—]‘] 9Ó-×3Ð3°ô	
ˆ÷ Ùô —Y‘Y×%Ñ%Ó'€Nß˜l×.Ñ.Ð/YÓZÐ^bÓbÙ#+ÓG¡8˜a¯v©v¸Ñ/FŸ˜¡8ˆÐGßÜ�J‰J×ÑÑ-¨lÓ;¸dÕBÔCÜ�J‰J×ÑðOôñ $,ÓG¡8˜a¯v©v¸Ñ/FŸ˜¡8ˆHÐGßÙá˜xÓ(€GßÜ�
‰
×Ñ˜ 4�Ô(ß‹3ÑE¹HÓE�3�3Š3ÑE¹HÓE×EÒEÜ�J‰J×Ñð$ôô
 	�
‰
×ÑðGô	
ô ˜‹mÐä‡J�J×Ñ�W˜t•^Ô$ðÜÐBÓC×IÑIÓK×QÑQÓSˆð �LÔ Ü�
‰
×ÑÐ6Ô7Ü˜‹mÐñ !øôI ô Ü�‰ÐAÀ3ÔGÝûðûô ô Ü�‰ÐKÈSÔQØŽûðûô* ô Ü�‰ÐFÈÐY\Ô]Ýûðüò Hùò Høô, Ô'Ð(ô ØŠðús~   ÁM> Á-N- ÄO Ä:O ÅO Æ%PÆ<PÈPÈ2PÌ$'P Í>N*Î	N%Î%N*Î-OÎ8OÏOÏPÏ)PÐPÐP.Ð-P.c                ó:   € V ^8„  d   QhR\         \        ,          /# ry   )r²   rS   )r   s   "r   r   r   ú  s   € ÷ ñ ¤¬¥ñ r   c            
     ó„  €  \         P                  ! . RORRRR^RR7      p V P                  ^ 8X  dX   V P                  P	                  4       '       d8   \
        P                  P                  V P                  P	                  4       4      #  \
        P                  ! 4       #   \         d     L#i ; i  \         d     R# i ; i)u  The current workspace identity for cwd-scoped resume.

Git repo root when CWD is inside a repo (so all sessions across its
subdirs/worktrees group together), else the CWD itself. Returns None when
neither can be determined â€” callers fall back to the global MRU then.
Tr=  r  F)Úcapture_outputr	  r‹   r  Útimeoutrú  N)Úgitz	rev-parsez--show-toplevel)
Ú
subprocessr   Ú
returncoder)   r•   r/   r�   Úabspathr,   Úgetcwd)Úresults    r   Ú_resolve_workspace_keyrº  ú  s¡   € ð	Ü—’Ú3Ø d°WÀYÐXYØô
ˆð
 ×Ñ Ô! f§m¡m×&9Ñ&9×&;Ò&;Ü—7‘7—?‘? 6§=¡=×#6Ñ#6Ó#8Ó9Ð9ðÜ�yŠy‹{Ðøô ô Ùðûô ô Úðús*   ‚AB Á6B Â
B0 ÂB-Â,B-Â0B?Â>B?c               #  ón  "  € Rp  ^ RI Hp V! \        4       R,          RR7      p  ^ RIHp V e	   V! V 4      MRx € V e    V P                  4        R# R#   \         d     L=i ; i  \         d     L7i ; i  \         d     R# i ; i  T e$    T P                  4        i   \         d     i i ; ii ; i5i)u‚  Yield a read-only ``SessionDB`` (lazy import, so test patches on ``hermes_state``
intercept). Every caller is a lookup (last session, title â†’ id, recorded cwd), so it
never opens a writer beside the one the CLI acquires from the registry a moment later.
Open failures yield None and any error raised by the ``with`` body is swallowed â€”
callers fall through to their ``return None``.N)Ú	SessionDBzstate.dbT)Údb_pathÚ	read_only)ÚSurfaceLabelReader)Úhermes_stater¼  rl  r,   Ú hermes_cli.gateway_session_storer¿  Úclose)Údbr¼  r¿  s      r   Ú_session_dbrÄ    sÂ   é € ð 
€BðÝ*áœÓ0°:Õ=ÈÔNˆðåGØ(*ªÑ  Ô$¸DÒ@ð Š>ðØ—‘–
ñ øô ô Ùðûô ô Ùðûô ô Úðûð Š>ðØ—‘•
øÜô Ùðúð üs˜   ‚B5†A ¦A& ¼B5ÁA7 ÁB5ÁA#Á B5Á"A#Á#B5Á&A4Á1B	 Á3A4Á4B	 Á7BÂB5ÂBÂB5Â	B2ÂB ÂB2Â B.Â+B2Â-B.Â.B2Â2B5c                óF   € V ^8„  d   QhR\         R\        \        ,          /# )r   Úuse_tuir
   )r   r²   rS   )r   s   "r   r   r   -  s   € ÷ ñ ¤ð ¬´#­ñ r   c                ój   € \        V '       d   RMRR7      pV'       g   V '       d   \        RR7      pV# )zMMRU session for the active interface; a TUI launch falls back to the CLI MRU.rŽ   rˆ   )Úsource)Ú_resolve_last_session)rÆ  Úlast_ids   & r   Ú_latest_session_idrË  -  s$   € ä#·G©5ÀÔG€Gß—wÜ'¨uÔ5ˆØ€Nr   c                óF   € V ^8„  d   QhR\         R\        \         ,          /# )r   rÈ  r
   ©rS   r²   )r   s   "r   r   r   5  s   € ÷ ñ ¤#ð ´(¼3µ-ñ r   c           	     ó‚  € V R8X  d   ^ RI Hp \        V4      p \        4       ;_uu_ 4       p\	        4       pV'       d8   VP                  V ^VRR7      pV'       d   V^ ,          R,          uuRRR4       # VP                  V ^RR7      pV'       d   V^ ,          R,          MRuuRRR4       #   + '       g   i     R# ; i)aT  Look up the most recently-used session ID for a source.

Scoped to the current workspace first (git repo root, else cwd) so
``hermes -c`` from repo A continues repo A's last session rather than the
global MRU. Falls back to the unscoped MRU when no session matches the
current workspace, preserving the old behaviour for fresh directories.
rˆ   )ÚCLI_FAMILY_SOURCEST)rÈ  ÚlimitÚworkspace_keyÚskip_launch_stubsÚidN)rÈ  rÐ  rÒ  )Úagent.session_sourcerÏ  ÚsortedrÄ  rº  Úsearch_sessions)rÈ  rÏ  rÃ  Úws_keyÚsessionss   &    r   rÉ  rÉ  5  s™   € ð �„Ý;ÜÐ*Ó+ˆÜ	�Œ˜"Ü'Ó)ˆßØ×)Ñ)°¸qÐPVÐjnÐ)ÓoˆHßØ •{ 4Õ(÷ 
Šð ×%Ñ%¨V¸1ÐPTÐ%ÓUˆß$,ˆx˜�{˜4Ö °$÷ 
��‰ñ ús   «/B-ÁB-Á5B-ÂB-Â-B>	c                óF   € V ^8„  d   QhR\         R\        \         ,          /# )r   Ú
name_or_idr
   rÍ  )r   s   "r   r   r   M  s   € ÷ ñ ¬sð ´xÄµ}ñ r   c                ó˜  € \        4       ;_uu_ 4       pVP                  V 4      pV'       d
   VR,          MVP                  V 4      pV'       g)   V P                  R4      '       d   VP	                  V 4      pV'       d    VP                  V4      ;'       g    TpVuuRRR4       #   \         d     Li ; i  + '       g   i     R# ; i)zÍResolve a session title or ID to a session ID (None if neither matches).

A compression root is followed forward to its latest continuation so an
old root ID (exit summary, notes) resumes at the live tip.
rÓ  zlocal-N)rÄ  Úget_sessionÚresolve_session_by_titler  Úresolve_session_idÚget_compression_tipr,   )rÚ  rÃ  ÚsessionÚresolved_ids   &   r   Ú_resolve_session_by_name_or_idrâ  M  s¤   € ô 
�Œ˜"à—.‘. Ó,ˆß'.�g˜d–m°B×4OÑ4OÐPZÓ4[ˆß˜z×4Ñ4°X×>Ò>à×/Ñ/°
Ó;ˆKßðØ ×4Ñ4°[ÓA×PÐPÀ[�ð ÷ 
Šøô ô Ùðú÷ 
Žñ úsA   “;B8ÁB8Á&B8Â B'ÂB'ÂB8Â'B5Â2B8Â4B5Â5B8Â8C		c                óF   € V ^8„  d   QhR\         R\        \         ,          /# )r   Útitler
   rÍ  )r   s   "r   r   r   e  s   € ÷ ñ ¤#ð ¬(´3­-ñ r   c                óp   €  ^ RI Hp V! V 4      #   \         d    \        P	                  RT 4        R# i ; i)a×  Create a fresh titled session (``chat -c <title> --create-if-missing``).

The gateway is the single writer: it creates the session and records the title with user
provenance, so auto-titling never overwrites it (gateway_session_store.create_titled_session).

Used by ``chat -c <title> --create-if-missing`` (#86794): programmatic callers (plugins, scripts) that
want "send to this named thread, making it if needed" get a deterministic outcome instead of a silent
no-op.
©Úcreate_titled_sessionz"Failed to create titled session %rN)rÁ  rç  r,   r   Ú	exception)rä  rç  s   & r   Ú_create_titled_sessionré  e  s:   € ð	ÝJÙ$ UÓ+Ð+øÜô ô
 	×ÑÐ=¸uÔEÚðús   ‚ �!5´5c                ó(   € V ^8„  d   QhR\         RR/# ©r   rÆ  r
   Nrÿ   )r   s   "r   r   r   {  s   € ÷ K ñ K ¬Dð K °Tñ K r   c               óÖ  € \        V RR4      pV'       EdÀ   \        V RR4      '       Egª   \        V\        4      '       dê   \        V4      pV'       d	   W0n        R# \        V RR4      '       dj   V'       d   \        V4      pM^ RIHp V! V4      pV'       d	   W@n        R# \        RV R2\        P                  R	7       \        P                  ! ^4       R# \        RV R
2\        P                  R	7       \        R\        P                  R	7       \        P                  ! ^4       R# \        V RR4      '       d   \        R\        P                  R	7        ^ RIHp V! 4       pV'       d	   Wpn        R# \        V4      pV'       d	   W€n        R# V'       d   RMRp	\        RV	 R2\        P                  R	7       \        P                  ! ^4       R# R# R#   \         d    Rp L�i ; i)af  Resolve ``-c/--continue`` into ``args.resume``.

``-c <name>``: resolve by title/ID; on miss fail loudly on **stderr** (exit
1) so programmatic callers see it even under quiet mode, or with
``--create-if-missing`` create a fresh titled session. Bare ``-c``: this
terminal's breadcrumb session if valid, else the MRU session.

Handles both forms: See #86794.
Úcontinue_lastNrO   Úcreate_if_missingFræ  zNo session found matching 'z0' and a new titled session could not be created.rW   z'.zyUse 'hermes sessions list' to see available sessions, or pass --create-if-missing to start a new session with that title.zL--create-if-missing requires a session name: `-c <name> --create-if-missing`)Úresolve_breadcrumb_sessionÚTUIÚCLIúNo previous zb session to continue. Start a new one with `hermes`, or list sessions with `hermes sessions list`.)rC   r1   rS   râ  rO   ré  rÁ  rç  r]   r(   r*   rô   Úhermes_cli.terminal_breadcrumbsrï  r,   rË  )
r£  rÆ  Úcontinue_valÚresolvedÚnew_sidrç  rï  Ú	_crumb_idrÊ  r›  s
   &$        r   Ú_resolve_continue_argrø  {  s�  € ô ˜4 °$Ó7€Lß€|œG D¨(°D×9Ó9Ü�l¤C×(Ò(Ü5°lÓCˆHßØ&–Ü˜Ð2°E×:Ò:÷ Ü4°\ÓB‘GåVÙ3°LÓA�GßØ")–KäØ5°l°^ð DEð Eä ŸZ™Zõô
 —H’H˜Q–KäÐ3°L°>ÀÐDÌ3Ï:É:ÕVÜðWäŸ™õô
 —’˜–ô
 �tÐ0°%×8Ò8äð6äŸ™õð
!ÝVá6Ó8�	÷ Ø'–ô -¨WÓ5�ßØ")–Kç$+™5°�DÜØ& t fð -Rð Rä ŸZ™Zõô
 —H’H˜Q–KñA :�|øô` ô !Ø ’	ð!ús   ÅG ÇG(Ç'G(c                ó   € V ^8„  d   QhRR/# r>   r   )r   s   "r   r   r   É  s   € ÷ ñ ˜4ñ r   c                óž  € \        V RR4      pV'       g   R# ^ RIHp \        P                  P                  \        P                  P                  V! V4      4      4      p\        P                  P                  V4      '       g%   \        RV 24       \        P                  ! ^4        \        P                  ! V4       \        P                  P                  RR4      P                  4       '       d   V\        P                  R&   R	V n        R#   \         d2   p\        RT RT 24       \        P                  ! ^4        Rp?L‡Rp?ii ; i)
zV--in DIR: chdir first so workspace-scoped lookups key off DIR; pins the session there.Úin_dirN)Ú_msys_to_windows_pathz!Error: --in directory not found: z#Error: cannot enter --in directory ú: ÚTERMINAL_CWDr  T)rC   Útools.environments.localrü  r/   r�   r·  rƒ   Úisdirr]   r(   rô   Úchdirr®   r   r€   r•   Úno_restore_cwd)r£  rû  rü  Ú_target_dirÚes   &    r   Ú_apply_in_dirr  É  sì   € ä�T˜8 TÓ*€FßÙõ ?ä—'‘'—/‘/¤"§'¡'×"4Ñ"4Ñ5JÈ6Ó5RÓ"SÓT€KÜ�7‰7�=‰=˜×%Ò%ÜÐ1°&°Ð:Ô;Ü�Š�ŒðÜ
�Š�Ôô 
‡z�z‡~�~�n bÓ)×/Ñ/×1Ò1Ø%0Œ�
‰
�>Ñ"Ø€DÖøô ô ÜÐ3°F°8¸2¸a¸SÐAÔBÜ�Š��‰ûðús   Â*D ÄEÄ'EÅEc                ó(   € V ^8„  d   QhR\         RR/# rë  rÿ   )r   s   "r   r   r   ç  s   € ÷ 2Cñ 2C¬dð 2C°tñ 2Cr   c           	     ó  € \        V 4       \        V RR4      p\        V\        4      '       dz   VP	                  4       P                  4       R8X  dW   \        V4      pV'       d   W0n        M<V'       d   RMRp\        RV R24       \        R4       \        P                  ! ^4       \        WR	7       ^ R
IHpHp V! V 4       \        V RR4      pV'       d   \        V4      ;'       g    TV n        V! V 4       \        V RR4      '       Edh   \        V RR4      '       EgR   \        V RR4      '       Eg<   \!        4       ;_uu_ 4       pVP#                  V P                  4      ;'       g    / P%                  R4      ;'       g    RP	                  4       p	V	'       dK   \&        P(                  P+                  V	4      '       g&   \        RV	 R\&        P,                  ! 4        24       M€V	'       dy   \&        P(                  P/                  V	4      \&        P(                  P/                  \&        P,                  ! 4       4      8w  d%   \&        P0                  ! V	4       \        RV	 24       RRR4       R# R# R# R#   + '       g   i     R# ; i)uÞ  Normalize --in / --resume / --continue on ``args`` before agent init.

Order matters: ``--in DIR`` chdirs first so workspace-scoped "latest"/-c
lookups key off DIR (and pins the session there, skipping cwd restore);
then ``--resume latest`` â†’ MRU id, ``--continue`` â†’ ``--resume``,
``--resume @claude/@codex`` â†’ imported session id, title â†’ id; finally
cd back into a resumed session's recorded cwd (best-effort, opt-out via
--no-restore-cwd, skipped under --worktree).
rO   NÚlatestrð  rñ  rò  z session found to resume.z5Use 'hermes sessions list' to see available sessions.)rÆ  )Úimport_foreign_resumeÚrecreate_resumed_tui_worktreer  FÚworktreeÚcwdr  u$   âš  session's recorded dir is gone (z); staying in u   â†ª restored workspace dir: )r  rC   r1   rS   r•   r–   rË  rO   r]   r(   rô   rø  Úhermes_cli.main_resume_argsr	  r
  râ  rÄ  rÜ  r€   r/   r�   r   r¸  Úrealpathr  )
r£  rÆ  Ú_resume_rawÚ_last_idr›  r	  r
  Ú
resume_valrÃ  Ú
_saved_cwds
   &&        r   Ú_resolve_chat_session_argsr  ç  sÖ  € ô �$Ôô ˜$ ¨$Ó/€KÜ�+œs×#Ò#¨×(9Ñ(9Ó(;×(AÑ(AÓ(CÀxÔ(OÜ% gÓ.ˆßØ"�Kç#‘5¨ˆDÜ�L  Ð&?Ð@ÔAÜÐIÔJÜ�HŠH�QŒKä˜$Õ0ç`Ù˜$Ôä˜˜x¨Ó.€Jßä4°ZÓ@×NÐNÀJˆŒá! $Ô'ô
 	��h ×%Ó%Ü˜Ð.°×6Ó6Ü˜˜j¨%×0Ó0ä�]Œ]˜bØŸ>™>¨$¯+©+Ó6×<Ð<¸"×AÑAÀ%ÓH×NÐNÈB×UÑUÓWˆJß¤"§'¡'§-¡-°
×";Ò";ÜÐ<¸Z¸LÈÔWY×W`ÒW`ÓWbÐVcÐdÕeß¤§¡× 0Ñ 0°Ó <ÄÇÁ×@PÑ@PÔQS×QZÒQZÓQ\Ó@]Ô ]Ü—’˜Ô$ÜÐ4°Z°LÐAÔB÷ ‰]ñ 1ñ 7ñ 	&÷ �]ˆ]ús%   Å	;I8ÆI8Æ$I8Ç,I8Ç0A8I8É8J		c                ó   € V ^8„  d   QhRR/# r>   r   )r   s   "r   r   r     s   € ÷ ñ  $ñ r   c                 óÄ  €  ^ RI Hp HpHpHp ^ RIHp V! V! 4       4      pV'       d¦   \        P                  P                  R\        V4       RV R24       V F,  p\        P                  P                  RV! V4       R24       K.  	  \        P                  P                  RV  R	24       \        P                  P                  R
4       R# R#   \         d     R# i ; i)zMOne-shot xAI retirement warning on stderr; non-blocking, never fails startup.)ÚMIGRATION_GUIDE_URLÚRETIREMENT_DATEÚfind_retired_xai_refsÚformat_issuer’  u   [33mâš  xAI retires z model(s) in your config on z:[0m
u     [33mâš [0m r<  z  [2mMigration guide: z[0m
z,  [2mRun 'hermes doctor' for details.[0m

N)Úhermes_cli.xai_retirementr  r  r  r  rƒ  ri  r(   r*   r­   r  r,   )r  r  r  r  Ú_load_config_for_xai_checkÚ_retired_xai_refsÚ_refs          r   Ú_warn_retired_xai_modelsr    sÕ   € ð÷	
ó 	
õ 	Pá1Ñ2LÓ2NÓOÐßÜ�J‰J×ÑØ*¬3Ð/@Ó+AÐ*Bð C%Ø%4Ð$5°ZðAôó *�Ü—
‘
× Ñ Ð#8¹ÀdÓ9KÐ8LÈBÐ!OÖPñ *ä�J‰J×ÑÐ9Ð:MÐ9NÈiÐXÔYÜ�J‰J×ÑÐSÖTñ øô ô Úðús   ‚&C ©B#C ÃCÃCc                ó   € V ^8„  d   QhRR/# r>   r   )r   s   "r   r   r   5  s   € ÷ 0ñ 0¨ñ 0r   c                 óH  € \        4       '       d    ^ RIHp Hp V! 4        V ! 4        R R lpR R lpV! 4       '       d   T! 4         ^ RIHp RVn        R# \        P                  ! VRRR	7      P                  4        R#   \         d     Lfi ; i  \         d     R# i ; i)
uf  Kick off the update-check/banner prefetch and the bundled-skills sync.

Update check is opt-in on Termux (it imports rich/prompt_toolkit in the
foreground and competes for CPU on single-core devices). The skills sync
is idempotent and hash-gated (~120-170ms of rglob/hashing) so it normally
runs in a daemon thread â€” skill loading happens at agent init, long after.
The ONE exception is an unseeded ~/.hermes/skills: there the banner
prefetch races the sync and caches an empty index ("No skills installed"
on the very first launch), so the first run syncs in the foreground and
drops the banner's skills cache.
)Úprefetch_banner_dataÚprefetch_update_checkc                ó$   € V ^8„  d   QhR\         /# ry   rÿ   )r   s   "r   r   Ú5_start_chat_background_prefetch.<locals>.__annotate__J  s   € ÷ ñ ¤Tñ r   c                  óÌ   €  ^ RI Hp  \        V ! 4       4      R,          pVP                  4       '       g   R# \	        VP                  R4      R4      RJ #   \         d     R# i ; i)rU   rk  rM   TzSKILL.mdNF)rƒ  rl  r±   Úis_dirr?  Úrglobr,   )rl  r-  s     r   Ú_skills_dir_is_unseededÚ@_start_chat_background_prefetch.<locals>._skills_dir_is_unseededJ  s]   € ð	Ý9Ü™oÓ/Ó0°8Õ;ˆJØ×$Ñ$×&Ò&ÙÜ˜
×(Ñ(¨Ó4°dÓ;¸tÐCÐCøÜô 	Úð	ús   ‚3A ·A ÁA#Á"A#c                ó   € V ^8„  d   QhRR/# r>   r   )r   s   "r   r   r$  T  s   € ÷ ñ ˜Tñ r   c                  ó@   €  \        4        R #   \         d     R # i ; ir¤   )rG  r,   r   r   r   Ú_skills_sync_bgÚ8_start_chat_background_prefetch.<locals>._skills_sync_bgT  s   € ð	Ü,Ö.øÜô 	Úð	ús   ‚
 ŽœNzbundled-skills-syncT)Útargetr(  Údaemon)
rK  Úhermes_cli.bannerr!  r"  r,   ÚbannerÚ_available_skills_cacheÚ	threadingÚThreadra  )r!  r"  r(  r,  Ú_banner_mods        r   Ú_start_chat_background_prefetchr6  5  s’   € ô ,×-Ò-ð	ßUá!Ô#Ù Ô"õõñ × Ò ÙÔð	Ý3Ø26ˆKÖ/ô 	×ÒØ"Ð)>Àtô	
ç
‰%Ž'øô= ô 	Ùð	ûô2 ô 	Úð	ús#   ’B Á	B ÂBÂBÂB!Â B!c                ó   € V ^8„  d   QhRR/# r>   r   )r   s   "r   r   r   h  s   € ÷ ñ  Dñ r   c                óÔ  € \        4        \        R4       \        4        \        R4       \        4        ^ RIHpHp V! 4       '       g   V! R4       \        P
                  ! ^4        \        R4      P                  4       P                  4       pVR	9   d   \        V 4       R# \        4        \        R4       \        P
                  ! ^4       R#   \        \        3 d    Rp LVi ; i)
zKNo provider configured: offer `hermes setup` (TTY) or exit 1 with guidance.zLIt looks like Hermes isn't configured yet -- no API keys or providers found.z  Run:  hermes setup)Úis_interactive_stdinÚ#print_noninteractive_setup_guidancez;No interactive TTY detected for the first-run setup prompt.zRun setup now? [Y/n] ÚnNz4You can run 'hermes setup' at any time to configure.>   r  rž  r=  )r]   Úhermes_cli.setupr9  r:  r(   rô   r¡  r•   r–   r¢  rZ   Ú	cmd_setup)r£  r9  r:  r®  s   &   r   Ú_first_run_setup_guardr>  h  s»   € ä	„GÜ	ØVôô 
„GÜ	Ð
 Ô!Ü	„G÷ñ
  ×!Ò!Ù+ØIô	
ô 	�Š�ŒðÜÐ-Ó.×4Ñ4Ó6×<Ñ<Ó>ˆð Ð Ô Ü�$ŒÙÜ	„GÜ	Ð
@ÔAÜ‡H‚HˆQ†Køô Ô'Ð(ô ØŠðús   Á)'C ÃC'Ã&C'r  Úcheckpointsc                ó‚  € ^ RI Hp V! V 4      '       g   \        V 4      '       d#   ^ RIHp \
        P                  ! V! V 4      4       \        V 4       \        V 4       \        V 4       \        V 4      pV'       d   \        V 4       \        W4       \        4        \        4       pV'       g   V'       g   \        V 4       R# \!        4        \#        V RR4      '       d   R\$        P&                  R&   \#        V RR4      '       d   R\$        P&                  R	&   \#        V R
R4      '       d1   V P(                  \$        P&                  R&   R\$        P&                  R&   \+        4        ^ RIHp V'       d	   V! V 4       \1        V 4       \2         UUu/ uF  w  rgV\#        WV4      bK  	  pppV'       dZ   \5        VP7                  R4      3R\#        V RR4      R\#        V RR4      ;'       g    RR\#        V RR4      R\#        V RR4      /VB  ^ RIHp	 V	! V 4       \#        V RR4      p
RV P<                  R\#        V RR4      RV P>                  RV P@                  R\C        \#        V RR4      4      R\#        V RR4      R\#        V RR4      R\#        V RR4      ;'       g    T
R\#        V RR4      ;'       g    T
R\#        V RR4      /
\2        R%,            UUu/ uF  w  rgV\#        WV4      bK  	  uppCpVPE                  4        UUu/ uF  w  rlVf   K  WlbK  	  ppp ^ R I#H$p ^ R!I%H&p V! R"4       V! R&/ VB  R# u uppi u uppi u uppi   \N         d0   p\Q        R#T 24       \
        P                  ! ^4        Rp?R# Rp?i\R         d1   p^ R$I*H+p T! T4      '       d   \
        P                  ! ^4       h Rp?ii ; i)'zRun interactive chat CLI.)Ústream_json_requested©Úlaunch_gateway_chatNÚyoloFr¢   ÚHERMES_YOLO_MODEÚignore_rulesÚHERMES_IGNORE_RULESrÈ  ÚHERMES_SESSION_SOURCEÚHERMES_SESSION_SOURCE_EXPLICIT)Úoffer_consent_before_chatrO   Útui_devÚnative_modeÚ
tui_nativerJ   Úaccept_hooks)Ú_read_query_fileÚ	safe_moderP   rL   ÚqueryÚoneshotÚoneshot_exitÚ
run_budgetÚoutput_formatr	  Úignore_user_configÚcompactrg  ©Úbegin_processrˆ   r  )Úemit_partial_update_hint))rZ  N)r‚  Nr   ),Úhermes_cli.stream_jsonrA  rï  Úhermes_cli.gateway_chat_startuprC  r(   rô   Ú_apply_safe_modeÚ_apply_user_config_bypassÚ!_guard_noninteractive_user_configró  rò  r  r  r�  r>  r6  rC   r/   r   rÈ  rñ  Ú/hermes_cli.observability.shared_metrics_consentrJ  r¯  Ú_CHAT_PASSTHROUGHrð  ÚpopÚhermes_cli.main_query_filerO  rJ   rL   rQ  r   r‰  rˆ   rh  Ú/hermes_cli.observability.shared_metrics_processrY  rû   r]   ro   r.  rZ  )r£  rA  rC  rÆ  Úprovider_configuredrJ  rr  ÚdÚpassthroughrO  rP  rG   rn  Úcli_mainrY  r  rZ  s   &                r   Úcmd_chatri  ’  sB  € å<ñ ˜T×"Ò"Ô&9¸$×&?Ò&?ÝGÜ�ŠÑ$ TÓ*Ô+Ü�TÔÜ˜dÔ#Ü% dÔ+Ü˜tÓ$€GßÜ% dÔ+ä˜tÔ-äÔô 7Ó8Ðß×.Ü˜tÔ$Ùä#Ô%ô ˆt�V˜U×#Ò#Ø),Œ�
‰
Ð%Ñ&ô ˆt�^ U×+Ò+Ø,/Œ�
‰
Ð(Ñ)äˆt�X˜t×$Ò$Ø.2¯k©kŒ�
‰
Ð*Ñ+ð 8;Œ�
‰
Ð3Ñ4äÔÝY÷ Ù! $Ô'Ü-¨dÔ3å6GÔHÑ6G©d¨a�1”g˜d qÓ)Ò)Ñ6G€KÑHßÜØ�O‰O˜HÓ%ñ	
ä˜D )¨UÓ3ð	
ô    l°EÓ:×BÐB¸dð	
ô ˜$ ¨Ó.ð		
ô
 !  ~°uÓ=ð	
ð ò	
õ <Ù�TÔä˜˜k¨5Ó1€Ià�—‘Ø”W˜T ;°Ó5Ø�D—M‘MØ�—‘Ø”4œ  n°eÓ<Ó=Ø”g˜d L°$Ó7Øœ  ¸Ó?Øœ  n°eÓ<×IÐIÀ	Øœg dÐ,@À%ÓH×UÐUÈIØ”7˜4 ¨EÓ2ðô /@ÐBiÖ.iÔ
jÑ.i¡d aˆ1Œg�d˜qÓ!Ò!Ñ.iÒ
jð€Fð  &Ÿ|™|œ~Ô?™~‘t�q°ŒdˆaŠd™~€FÑ?ðÝ(ÝQá�eÔÙÑ�6ÔùóG Iùó4 kùã?øô ô Ü�˜�sˆmÔÜ�Š��ŠûÜô 
õ 	>á# A×&Ò&Ü�HŠH�QŒKØûð
úsB   ÆL9ËL?ÌMÌMÌM ÍN>Í$N Î N>ÎN>Î+N9Î9N>c                ó"   € ^ RI Hp V! V 4       R# )zGateway management commands.)Úgateway_commandN)Úhermes_cli.gatewayrk  )r£  rk  s   & r   Úcmd_gatewayrm  ü  s   € õ
 3á�DÖr   c                óv   € ^ RI Hp V! V 4      p\        V\        4      '       d   V^ 8w  d   \	        V4      hR# R# )z1Local OpenAI-compatible proxy to OAuth providers.)Ú	cmd_proxyN)Úhermes_cli.proxy.cliro  r1   r2   r[   )r£  Ú
_cmd_proxyr%   s   &  r   ro  ro    s6   € õ =á	�DÓ	€BÜ�"”c×Ò˜r QœwÜ˜‹nÐñ  'Ñr   Úforward_returnÚdocc          
      óT   € V ^8„  d   QhR\         R\         R\         R\        R\         /# )r   r(  rE   rF   rr  rs  r  )r   s   "r   r   r     s0   € ÷ ñ œ3ð ¬ð ´3ð Ì4ð Ô^añ r   c               óZ   aaa€ VVV3R lpV ;Vn         Vn        T;'       g    RVn        V# )a  A ``hermes <cmd>`` handler that hands ``args`` to ``<module>.<attr>``.

Imports at CALL time so fast paths never pay for it and
``patch("<module>.<attr>")`` keeps intercepting. ``forward_return``
surfaces the return code to ``main()`` (kanban/project/mcp propagate).
c                 óf   <€ ^ RI p\        VP                  S4      S4      ! V 4      pS'       d   V# R# )rU   N)rA   rC   rD   )r£  rA   r¹  rF   rr  rE   s   &  €€€r   Ú_cmdÚ_forward_command.<locals>._cmd  s/   ø€ Ûä˜×0Ñ0°Ó8¸$Ô?ÀÓEˆß'ˆvÐ1¨TÐ1r   N)Ú__name__Ú__qualname__Ú__doc__)r(  rE   rF   rr  rs  rw  s   &ffd$ r   Ú_forward_commandr|    s+   ú€ ÷2ð )-Ð,€D„M�DÔ%Ø—;�;˜$€D„LØ€Kr   r=  zhermes_cli.setupÚrun_setup_wizardzInteractive setup wizard.)rs  Ú	cmd_loginzhermes_cli.authÚlogin_commandz(Authenticate Hermes CLI with a provider.Ú
cmd_logoutÚlogout_commandzClear provider authentication.Úcmd_authzhermes_cli.auth_commandsÚauth_commandzManage pooled credentials.Ú
cmd_statuszhermes_cli.statusÚshow_statuszShow status of all components.Úcmd_cronzhermes_cli.cronÚcron_commandzCron job management.)rr  rs  Úcmd_webhookzhermes_cli.webhookÚwebhook_commandz Webhook subscription management.Ú
cmd_kanbanzhermes_cli.kanbanÚkanban_commandz"Multi-profile collaboration board.Úcmd_projectzhermes_cli.projects_cmdÚprojects_commandz1Manage projects (named, multi-folder workspaces).Ú	cmd_hookszhermes_cli.hooksÚhooks_commandz%Shell-hook inspection and management.Ú
cmd_doctorzhermes_cli.doctorÚ
run_doctorz%Check configuration and dependencies.Úcmd_dumpzhermes_cli.dumpÚrun_dumpz)Dump setup summary for support/debugging.Ú	cmd_debugzhermes_cli.debugÚ	run_debugz!Debug tools (share report, etc.).Úcmd_skinzhermes_cli.skin_cmdÚskin_commandz#Skin management (list / use / set).Ú
cmd_importzhermes_cli.backupÚ
run_importz(Restore a Hermes backup from a zip file.Úcmd_dashboard_registerzhermes_cli.dashboard_registerz?Register a self-hosted dashboard OAuth client with Nous Portal.Úcmd_gateway_enrollzhermes_cli.gateway_enrollz4Enroll a self-hosted gateway with a relay connector.Úcmd_prompt_sizezhermes_cli.prompt_sizez?Show a byte/char breakdown of the system prompt + tool schemas.Úcmd_pairingzhermes_cli.pairingÚpairing_commandÚcmd_pluginszhermes_cli.plugins_cmdÚplugins_commandÚcmd_mcpzhermes_cli.mcp_configÚmcp_command)rr  c                ó(  a € \        R4       \        S RR4      '       d    ^ RIHp V! 4        \	        R4       ^ RIHp ^ RIH	p V! R4      ;_uu_ 4        V! R	V 3R
 lRR7       RRR4       R#   \
         d     LCi ; i  + '       g   i     R# ; i)uK   Select default model â€” starts with provider selection, then model picker.rJ   ÚrefreshF)Úclear_provider_models_cachez  Cleared model picker cache.)Úprovider_setup_surface)Ú run_setup_action_with_navigationÚ	cli_modelzModel & Providerc                  ó   <€ \        S R 7      # ©©r£  )Úselect_provider_and_modelr«  s   €r   r–  Úcmd_model.<locals>.<lambda>I  s   ø€ Ô(AÀtÕ(Lr   ú
No change.)Úcancelled_messageN)
rõ   rC   Úhermes_cli.modelsr¥  r]   r,   Ú-hermes_cli.observability.shared_metrics_setupr¦  r<  r§  )r£  r¥  r¦  r§  s   f   r   Ú	cmd_modelr²  :  s~   ø€ ä�ÔÜˆt�Y ×&Ò&ð	ÝEÙ'Ô)ÜÐ1Ô2õ UÝAá	 ×	,Õ	,Ù(ØÔ LÐ`lõ	
÷ 
-Ñ	,øô ô 	Ùð	ú÷
 
-×	,Ð	,ús   ¡A/ ÁB Á/A=Á<A=Â B	Ú
openrouterc                 ó   € \        W4      # r¤   )r‚  ©ÚcÚmr   s   &&&r   r–  r–  R  ó
   € Ô"8¸Ô">r   Úmoac                 ó   € \        W4      # r¤   )r“  rµ  s   &&&r   r–  r–  S  s	   € œ?¨1Ô0r   z
ai-gatewayc                 ó   € \        W4      # r¤   )r”  rµ  s   &&&r   r–  r–  T  r¸  r   Únousc                 ó   € \        WVR 7      # rª  )rƒ  rµ  s   &&&r   r–  r–  U  s   € Ô,¨Q¸Õ:r   zopenai-codexc                 ó   € \        W4      # r¤   )r„  rµ  s   &&&r   r–  r–  V  s
   € Ô$<¸QÔ$Br   z	xai-oauthc                 ó   € \        WVR 7      # rª  )r…  rµ  s   &&&r   r–  r–  W  s   € Ô!6°qÀ!Õ!Dr   z
qwen-oauthc                 ó   € \        W4      # r¤   )r†  rµ  s   &&&r   r–  r–  X  r¸  r   zminimax-oauthc                 ó   € \        WVR 7      # rª  )r‡  rµ  s   &&&r   r–  r–  Y  s   € Ô%>¸qÈ!Õ%Lr   zcopilot-acpc                 ó   € \        W4      # r¤   )rŒ  rµ  s   &&&r   r–  r–  Z  s
   € Ô#:¸1Ô#@r   Úcopilotc                 ó   € \        W4      # r¤   )r‹  rµ  s   &&&r   r–  r–  [  ó
   € Ô2°1Ô8r   Úcustomc                 ó   € \        V 4      # r¤   )rˆ  rµ  s   &&&r   r–  r–  \  s
   € Ô0°Ô3r   Úllamacppc                 ó   € \        W4      # r¤   r—  rµ  s   &&&r   r–  r–  ]  s
   € Ô 1°!Ô 7r   Ú	anthropicc                 ó   € \        W4      # r¤   )r’  rµ  s   &&&r   r–  r–  ^  s
   € Ô!6°qÔ!<r   zkimi-codingc                 ó   € \        W4      # r¤   )r�  rµ  s   &&&r   r–  r–  _  s
   € Ô#3°AÔ#9r   Ústepfunc                 ó   € \        W4      # r¤   )rŽ  rµ  s   &&&r   r–  r–  `  rÅ  r   Úbedrockc                 ó   € \        W4      # r¤   )r�  rµ  s   &&&r   r–  r–  a  rÅ  r   Úvertexc                 ó   € \        W4      # r¤   )r�  rµ  s   &&&r   r–  r–  b  s
   € Ô0°Ô6r   zazure-foundryc                 ó   € \        W4      # r¤   )r‰  rµ  s   &&&r   r–  r–  c  s
   € Ô%>¸qÔ%Dr   c                ó0   € V ^8„  d   QhR\         R\         /# )r   Úurlr
   rz   )r   s   "r   r   r   g  s   € ÷ 6ñ 6œð 6¤ñ 6r   c                 ó‚   € \        T ;'       g    R 4      P                  4       P                  R4      P                  4       # )r  Ú/)rS   r•   Úrstripr–   )rÕ  s   &r   Ú_norm_base_urlrÙ  g  s/   € Üˆs�yˆy�b‹>×ÑÓ!×(Ñ(¨Ó-×3Ñ3Ó5Ð5r   c                ód  aaa€ ^ RI HpHpHp ^ RIHpHp ^ RIHoH	p	 Rp
VR8X  d^   \        V\        4      '       dH   \        VP                  RR4      4      oS'       d%   \        V3R lVP                  4        4       R4      p
V
'       g®   VR8w  d§   V	! VV P                  R	4      V! V 4      4      pVeu   VP                   p
VP"                  R8X  dW   \%        T
;'       g    R4      P'                  4       P)                  4       o\        VV3R lVP                  4        4       V
4      p
M\+        RV R24       V
'       g
    V! R4      p
V
R8X  d   V! R4      '       d   Rp
V
#   T dF   pTP,                  R8X  d   \+        R4       MTR8X  d   \+        RT! T4       R24       R
p
 R
p?L`R
p?ii ; i)u$  Provider slug currently in effect (the picker's default row), or None.

Order: a saved custom provider whose base_url matches model.base_url â†’
the configured/env provider (named custom â†’ canonical map key) â†’ auto
detection. Unknown/unauthenticated providers warn and fall back to auto.
)Ú	AuthErrorÚformat_auth_errorÚresolve_provider)Úget_compatible_custom_providersÚget_env_value)Úcustom_provider_aliasesÚresolve_provider_fullr  rÆ  r‚  c              3   óp   <"  € T F+  w  r\        VP                  R R4      4      S8X  g   K'  Vx € K-  	  R# 5i)r‚  r  N)rÙ  r€   )r   rr  ÚinfoÚcurrent_bases   &  €r   r   Ú+_resolve_active_provider.<locals>.<genexpr>{  s5   øé € ð NÑ"=‘w�qÜ" 4§8¡8¨J¸Ó#;Ó<ÀÑL÷ ’Ó"=ùs   ƒ$6¬
6ÚautoÚ	providersNzuser-configc           	   3   óŒ   <"  € T F9  w  rSS! VP                  R R4      VP                  RR4      4      9   g   K5  Vx € K;  	  R# 5i)r(  r  Úprovider_keyN)r€   )r   rr  rã  rà  Ú	requesteds   &  €€r   r   rå  Š  sJ   øé € ð NÑ&A™7˜1Ø!Ñ%<ØŸ™ &¨"Ó-¨t¯x©x¸ÈÓ/Kó&Mñ M÷ ’QÓ&Aùs
   ƒ2Aº
AzWarning: Unknown provider 'z‹'. Check 'hermes model' for available providers, or run 'hermes doctor' to diagnose config issues. Falling back to auto provider detection.Úno_provider_configureduU   No provider is set up yet â€” pick one below. (Nous Portal works without an API key.)z	Warning: z) Falling back to auto provider detection.r³  r~  )r\  rÛ  rÜ  rÝ  rƒ  rÞ  rß  Úhermes_cli.providersrà  rá  r1   r”   rÙ  r€   r?  r‰  rÓ  rÈ  rS   r•   r–   r]   r\   )r¦  rs  Úeffective_providerÚcustom_provider_maprÛ  rÜ  rÝ  rÞ  rß  rá  rb  Ú
active_defra   rä  rà  rê  s   &&&&         @@@r   Ú_resolve_active_providerrð  k  s¢  ú€ ÷ OÑNßPßSà€FØ˜XÔ%¬*°YÄ×*EÒ*EÜ% i§m¡m°JÀÓ&CÓDˆßÜôNÐ"5×";Ñ";Ô"=ó NàóˆF÷
 Ð(¨FÔ2Ù*ØØ�J‰J�{Ó#Ù+¨FÓ3ó
ˆ
ð
 Ò!Ø—]‘]ˆFØ× Ñ  MÔ1Ü § ¨"Ó-×3Ñ3Ó5×;Ñ;Ó=�	ÜõNÐ&9×&?Ñ&?Ô&Aó Nð ó	�øô Ø-Ð.@Ð-Að BCð Cô÷
 ð		Ù% fÓ-ˆFð �Ô¡-Ð0A×"BÒ"BØˆØ€Møð ô 	Ø�x‰xÐ3Ô3ô ÐmÕnØ# vÔ-Ü˜	Ñ"3°CÓ"8Ð!9Ð9bÐcÔdØ�Fûð	ús   ÅE# Å#F/Å*;F*Æ*F/c           	     ó¬  € \        WW#4      w  rE\        V UUu. uF  w  rgqgNK	  	  uppVR7      pVe   WH,          ^ ,          R8X  d   R# WH,          w  ršpV'       g   V	# \        V Uu. uF  qÂP                  WÌ4      NK  	  upW9   d   VP                  V4      M^ RV
P	                  R^4      ^ ,           R2R7      pVf   R# W½,          # u uppi u upi )zPProvider picker (+ group member sub-picker) -> concrete slug, or None on cancel.)r*  NÚcancelzSelect u    â–¸z
 provider:)r*  rä  )r°  r·  r€   r÷   r  )r¦  rb  Úprovider_labelsrî  ÚorderedÚdefault_idxr  ÚlabelÚprovider_idxÚselected_keyÚgroup_labelÚselected_membersr·  Ú
member_idxs   &&&&          r   Ú_pick_providerrü  §  së   € ô 7Ø˜óÑ€Gô +Ù")Ô*¡'‘;�1˜QŠ¡'Ò*Øô€Lð Ò˜wÕ4°QÕ7¸8ÔCÙØ29Õ2GÑ/€LÐ/ßØÐô )Ù,<Ó=Ñ,< q×	Ñ	˜QÖ	"Ñ,<Ñ=Ø28Ô2LÐ ×&Ñ& vÔ.ÐRSØ˜×)Ñ)¨&°!Ó4°QÕ7Ð8¸
ÐCô€Jð
 Ò%ˆ4ÐGÐ+;Õ+GÐGùó 	+ùò 	>s   ™C
Á(Cc                ó´  a€ ^ RI Hp V! 4       pVP                  R4      p\        V\        4      '       d   VP                  RR4      MTpT;'       g    Rp\        V\        4      '       d   VP                  R4      MRpT;'       g!    \
        P                  ! R4      ;'       g    R	p\        V4      p\        W#Wg4      p^ R
I	H
p	 \	        V	4      p
V'       d   W‡9   d   Wx,          R,          pMV'       d   V
P                  Wˆ4      MRp\        4        \        RV 24       \        RV 24       \        4        \        W(W§4      oSf   \        R4       R# SR8X  d   \        4        R# SR8X  d   \        YH;'       g    R4       R# \        4       p^ RIHp V! S4      ;_uu_ 4        \$        P                  S4      pVf   \'        S4      '       d   V3R lpVe   V! W$V 4       MŸSP)                  R4      '       g   SV9   dF   \        V! 4       4      P                  S4      pVf   \        R4        RRR4       R# \+        W/4       M<SR8X  d   \-        V4       M)S\.        9   g   \1        S4      '       d   \3        VSV4       RRR4       \5        WL4       SR9  d&   SP)                  R4      '       g   \7        4        R# R# R#   + '       g   i     LI; i)a   Core provider selection + model picking logic.

Shared by ``cmd_model`` (``hermes model``) and the setup wizard
(``setup_model_provider`` in setup.py).  Handles the full flow:
provider picker, credential prompting, model selection, and config
persistence.
r’  rJ   r*  r  z	(not set)rK   NÚHERMES_INFERENCE_PROVIDERræ  )Ú_PROVIDER_LABELSr(  Únonez  Current model:    z  Active provider:  r®  z
aux-configrP   )Úcli_provider_setupc                 ó   <€ \        V SV4      # r¤   )r•  )r¶  r·  r   Úselected_providers   &&&€r   r–  Ú+select_provider_and_model.<locals>.<lambda>û  s   ø€ Ô#>¸qÐBSÐUVÔ#Wr   zcustom:zyWarning: the selected saved custom provider is no longer available. It may have been removed from config.yaml. No change.úremove-custom>   rò  rÆ  r  )rƒ  ri  r€   r1   r”   r/   rˆ  r´  rð  r°  rÿ  r]   rü  r¯  r¶  r³  r±  r  Ú_PROVIDER_MODEL_FLOWSr–  r  rŠ  r¸  r®  r²  r‘  rµ  r±  )r£  ri  r¦  rs  Úcurrent_modelÚconfig_providerrí  Ú_custom_provider_maprb  rÿ  ró  Úactive_labelÚsaves_beforer  ÚflowÚprovider_infor  s   &               @r   r¬  r¬  Á  sv  ø€ õ .á‹]€FØ—
‘
˜7Ó#€IÜ4>¸yÌ$×4OÒ4O�I—M‘M )¨RÔ0ÐU^€MØ!×0Ð0 [€Mô 4>¸iÌ×3NÒ3N�i—m‘m JÔ/ÐTX€OØ(×\Ð\¬B¯IªIÐ6QÓ,R×\Ð\ÐV\Ðô 6°fÓ=ÐÜ% fÐ9KÓb€Få2äÐ+Ó,€Oß�&Ô0Ø+Õ3°FÕ;‰ç>D�×*Ñ*¨6Ô:È&ˆä	„GÜ	Ð   Ð
0Ô1Ü	Ð   Ð
/Ô0Ü	„Gä& v°Ó]ÐØÒ ÜˆlÔÙØ˜LÔ(ÜÔÙØ˜KÔ'ä% m·\°\¸rÔBÙô
 ,Ó-€LÝPÙ	Ð-×	.Õ	.Ü$×(Ñ(Ð):Ó;ˆØŠ<Ô<Ð=N×OÒOäWˆDØÒÙ�¨Õ-à×(Ñ(¨×3Ò3Ø Ð$8Ô8ä6±{³}ÓE×IÑIÐJ[Ó\ˆMØÒ$ÜðLôð ÷# 
/Ñ	.ô$ % VÕ;Ø /Ô1Ü# FÕ+àÔ!;Ô;Ü+Ð,=×>Ò>ä(¨Ð1BÀMÔR÷3 
/ô6   Ô<ð
 ð !ô ð  ×*Ñ*¨9×5Ò5Ü$Ö&ñ 6ñ	÷A 
/×	.ús   Æ(AKÇ>6KÈ>AKËK	Úexclude_pidsc                ó–   € V ^8„  d   QhR\         \        ,          R,          R\        \        \        \        \        3,          ,          /# )r   r  Nr
   )rO  r2   r   r  rS   )r   s   "r   r   r     s7   € ÷ ñ ´3´sµ8¸dµ?ð ÌdÔSXÔY\Ô^aÔcfÐYfÕSgÕNhñ r   c                 ó   € . # r¤   r   )r  s   $r   Ú_detect_venv_python_processesr    s	   € ð €Ir   zhermes_cli.update_cmdzhermes_cli.old_updater_depszhermes_cli.update_cmd_maintzhermes_cli.dashboard_procsc                óÚ   € V R8X  d   ^ RI Hp MO\        P                  V 4      pVf   \	        R\
        : RV : 24      h^ RIp\        VP                  V4      V 4      pV\        4       V &   V# )zOResolve the frozen updater surface on first read (see _FROZEN_UPDATER_SURFACE).Ú_write_update_incomplete_marker)Ústop_for_relaunchNzmodule z has no attribute )
Úhermes_cli._old_updaterr  Ú_FROZEN_ATTR_SOURCESr€   ÚAttributeErrorry  rA   rC   rD   Úglobals)r(  r˜   rE   rA   s   &   r   Ú__getattr__r  O  sf   € àÐ0Ô0ÞFä%×)Ñ)¨$Ó/ˆØŠ>Ü  7¬8©,Ð6HÈÉÐ!QÓRÐRÛä˜	×/Ñ/°Ó7¸Ó>ˆØ„GƒIˆd�OØ€Lr   c                óJ   € ^ RI Hp \        P                  ! V! V 4      4       R# )z0Detect a project's run recipe and smoke-test it.)Úrun_verify_commandN)Úhermes_cli.verify_cmdr  r(   rô   )r£  r  s   & r   Ú
cmd_verifyr  ^  s   € å8ä‡H‚HÑ Ó%Ö&r   c                ó  € \        V RR4      pVR9   d8   ^ RIHp V! V 4      p\        P                  ! \        T;'       g    ^ 4      4       \        RV 2\        P                  R7       \        P                  ! ^4       R# )z$Dispatch `hermes security <subcmd>`.Úsecurity_commandN)Úcmd_security_auditzunknown security subcommand: rW   )ÚauditN)rC   Úhermes_cli.security_auditr   r(   rô   r2   r]   r*   )r£  Úsubr   r\   s   &   r   Úcmd_securityr$  e  s_   € ä
�$Ð*¨DÓ
1€CØ
ˆoÔÝ@ñ " $Ó'ˆÜ�Š”�T—Y�Y˜Q“Ô Ü	Ð)¨#¨Ð
/´c·j±jÕAÜ‡H‚HˆQ†Kr   c                ó^   € ^ RI Hp V! V 4      pV'       d   \        P                  ! V4       V# )z%Dispatch `hermes approvals <subcmd>`.)Úapprovals_command)Úhermes_cli.approvals_suggestr&  r(   rô   )r£  r&  rx  s   &  r   Úcmd_approvalsr(  r  s#   € å>á˜tÓ$€FßÜ�Š�ÔØ€Mr   c                ó¾   € ^ RI Hp  V! V 4       R#   \         d@   p\        RT 2\        P
                  R7       \        P                  ! ^4        Rp?R# Rp?ii ; i)zConfiguration management.)Úconfig_commandu   âœ— rW   N)rƒ  r*  ÚRuntimeErrorr]   r(   r*   rô   )r£  r*  ra   s   &  r   Ú
cmd_configr,  |  sE   € å0ðÙ�tÖøÜô ô 	��S�Eˆl¤§¡Õ,Ü�Š��Šûð	ús   ˆ ’A�4AÁAc                ó¢   € ^ RI Hp \        V RR4      '       d   VP                  V 4       R# VP	                  V 4      '       g   \        ^4      hR# )z,Back up Hermes home directory to a zip file.)ÚbackupÚquickFN)Ú
hermes_clir.  rC   Úrun_quick_backupÚ
run_backupr[   )r£  r.  s   & r   Ú
cmd_backupr3  ‰  sB   € å!äˆt�W˜e×$Ò$Ø×Ñ Ö%Ø×Ñ˜t×$Ò$Ü˜‹mÐñ %r   Úcheck_updatesc                ó(   € V ^8„  d   QhR\         RR/# )r   r4  r
   Nrÿ   )r   s   "r   r   r   “  s   € ÷ Gñ G¬$ð G¸$ñ Gr   c                 ó4   € \         P                  ! V R 7       R# )©r4  N)r   Úprint_fast_version_infor7  s   $r   Ú_print_version_infor9  “  s   € ä×)Ò)¸×Fr   c                ó   € \        RR7       R# )z!Show version (--version/-V flag).Tr7  N)r9  r«  s   &r   Úcmd_versionr;  ˜  s
   € ä d×+r   c                óR  € \        V RR4      '       d-   ^ RIHp \        \        P
                  ! V! 4       4      4       R# \        V RR4      '       dB   \        V RR4      '       g   \        V RR4      '       g   \        R4       ^ R	IHp V! V 4       R# \        V R
R4      '       dB   \        V RR4      '       g   \        V RR4      '       g   \        R4       ^ RIH	p V! V 4       R# \        V RR4      '       g   \        V RR4      '       g   \        R4       ^ RIH
p V! V 4       R# )zÅUninstall Hermes Agent (or just the Chat GUI with --gui).

``--yes`` paths run from the desktop app's non-interactive cleanup scripts,
so the TTY gate applies only when we actually need to prompt.
Úgui_summaryF)Úgui_install_summaryNÚdatar=  Údry_runzuninstall --data)Úrun_data_uninstallr{  zuninstall --gui)Úrun_gui_uninstallÚ	uninstall)Úrun_uninstall)rC   Úhermes_cli.gui_uninstallr>  r]   r]  Údumpsrõ   Úhermes_cli.uninstallrA  rB  rD  )r£  r>  rA  rB  rD  s   &    r   Úcmd_uninstallrH  �  sä   € ô ˆt�] E×*Ò*Ý@äŒd�jŠjÑ,Ó.Ó/Ô0Ùäˆt�V˜U×#Ò#Ü�t˜U E×*Ò*´7¸4ÀÈE×3RÒ3RÜÐ+Ô,Ý;á˜4Ô Ùäˆt�U˜E×"Ò"Ü�t˜U E×*Ò*´7¸4ÀÈE×3RÒ3RÜÐ*Ô+Ý:á˜$ÔÙä�4˜ ×&Ò&¬w°t¸YÈ×/NÒ/NÜ�[Ô!Ý2á�$Ör   c                ó0   € V ^8„  d   QhR\         R\        /# )r   Úrootr
   )r±   r2   )r   s   "r   r   r   Á  s   € ÷ ñ ¤ð ¬ñ r   c                ó^  € ^ p\         P                  ! V 4       Fz  w  r#pV Uu. uF  pVR9  g   K  VNK  	  upVR&   \         P                  P                  V4      R8X  g   KJ   \        P
                  ! V4       V^,          pVP                  4        K|  	  V# u upi   \         d     L(i ; i)u�   Remove all __pycache__ dirs under *root* (stale .pyc â†’ ImportError after updates).

Returns the number of directories removed.
:NNNÚ__pycache__>   ÚvenvÚnode_modulesr  ú.venvú
.worktrees)r/   Úwalkr�   ÚbasenameÚshutilÚrmtreer®   Úclear)rJ  ÚremovedÚdirpathÚdirnamesr  rf  s   &     r   Ú_clear_bytecode_cacherY  Á  s­   € ð
 €GÜ "§¢¨¦Ñˆ˜1ñ ó
á�ØÐOÑO÷ ˆAÙñ
ˆ�‰ô
 �7‰7×Ñ˜GÓ$¨Ö5ðÜ—’˜gÔ&Ø˜1•�ð �N‰NÖñ !.ð €Nùò
øô ô Ùðús   £	B±BÁ$BÂB,Â+B,c                ó4   € V ^8„  d   QhR\         R\        RR/# )r   r\   r7   r
   N)r2   rS   )r   s   "r   r   r   ×  s!   € ÷ ñ ¤3ð ´ð ¸ñ r   c                óH   €  ^ RI Hp V! W4       R#   \         d     R# i ; i)zNBest-effort receipt close at the command boundary; no-op if already finalized.)Úfinalize_pending_update_receiptN)Úhermes_cli.update_receiptr\  r,   )r\   r7   r\  s   && r   Ú_finalize_update_receiptr^  ×  s'   € ð	õ
 	Ná'¨Ö5øÜô Úðús   ‚ ’! !c                ó$   € V ^8„  d   QhR\         /# ry   rÿ   )r   s   "r   r   r   å  s   € ÷ Cñ C¤tñ Cr   c                óÂ  a € ^ RI HpHp ^ RIHp ^ RIHp V! S \        4      '       d   \        P                  ! ^ 4       V! 4       '       dU   V! R4       \        ;QJ d    V 3R lR 4       F  '       g   K   R	M	  R
M! V 3R lR 4       4      '       g   V! RRR7       R	# \        S RR
4      '       d   ^ RIHpHp V! V! 4       4       R	# \        S RR
4      '       dQ   ^ RIp^ RIHpHp	 V	! 4       p
\'        VP(                  ! V
^R7      4       V
'       d   \        P                  ! V4       R	# ^ RIHpHp V! \        4      pVe4   \'        VP0                  4       V! V4       \        P                  ! ^4       \        S RR
4      '       dU   \3        S 4      p^ RIHp T! RRVR\9        \        S RR4      4      /\        S RR4      '       d   RS P:                  /M/ B  R	# R
# )zTManaged-install refusal, --plan, admission gate, --check. True = nothing more to do.)Ú
is_managedÚmanaged_error)Úhandle_metadata_args©Ú_record_stopzupdate Hermes Agentc              3   ó>   <"  € T F  p\        SVR 4      x € K  	  R# 5i)FN)rC   )r   r¥   r£  s   & €r   r   Ú,_update_preflight_handled.<locals>.<genexpr>ï  s   øé € ÐaÑ:`°$”7˜4  u×-Ð-Ó:`ùs   ƒÚplanrú  Úlist_venv_holdersTFÚmanaged_installÚrefused©Úwithout_receipt)Úcollect_runtime_inventoryÚprint_update_planN)ÚVENV_HOLDERS_EXITri  )Úindent)Úevaluate_update_admissionÚrecord_refusal_receipt)Ú_cmd_update_checkÚbranchÚbranch_explicitÚchannel)rh  rú  ri  r   )rƒ  ra  rb  Úhermes_cli.update_channelrc  Úhermes_cli.update_cmd_commonre  r#  r(   rô   r   rC   Úhermes_cli.update_inventoryrn  ro  r]  Úhermes_cli.update_cmd_windowsrp  ri  r]   rF  Úhermes_cli.update_contractrr  rs  r­  rß  Úhermes_cli.update_cmdrt  r   rw  )r£  ra  rb  rc  re  rn  ro  r]  rp  ri  Úholdersrr  rs  Úrefusalru  rt  s   f               r   Ú_update_preflight_handledr€  å  sv  ø€ ç;Ý>Ý9á˜D¤,×/Ò/Ü�Š�ŒÙ‡|‚|ÙÐ+Ô,ß‹sÔaÑ:`Óa�s�sŠsÔaÑ:`Óa×aÒaÙÐ*¸IÕFÙô
 ˆt�V˜U×#Ò#÷	
ñ
 	Ñ3Ó5Ô6ÙäˆtÐ(¨%×0Ò0ó 	çVá#Ó%ˆÜˆd�jŠj˜¨Ô+Ô,ßÜ�HŠHÐ&Ô'Ù÷ñ
 (¬Ó5€GØÒÜˆg�o‰oÔÙ˜wÔ'Ü�Š�Œäˆt�W˜e×$Ò$ä'¨Ó-ˆÝ;áñ 	
Øð	
ä ¤¨¨x¸Ó!>Ó?ð	
ô -4°D¸)ÀT×,JÒ,J�	˜4Ÿ<™<Ñ(ÐPRò	
ñ
 Ùr   )Úupdate_receipt_scopec                ó
  € Rp^ RI Hp V! \        4       \        V 4      '       d   R# \	        V RR4      p\        VR7      p^ RIHpHpH	p V! \        R7      pVP                  4       '       gM   \        V! VP                  4      4       \        V4       ^ R	IHp	 V	! R
RR7       \         P"                  ! V4       ^ RIHp
 ^ RIHp R R lp V
! WR7       ^ RIHp \1        ^ V4        TPK                  4        \        T4       R#   T\2        \4        P6                  3 dk   pT! 4       p\        T;'       g    RT 24       \1        ^\9        T4      P:                   RT 24       T'       d   ^ RIHp T! R4       \A        ^4      ThRp?i\@         d…   p\C        TPD                  \F        4      '       d   TPD                  M^pT'       d   T! 4       ;p'       d   \        T4       \1        TRT R24       T'       d   T'       d   ^ RIHp T! R4       h Rp?i\H         dA   pT'       d   ^ RIHp T! R4       \1        ^\9        T4      P:                   RT 24       h Rp?ii ; i  TPK                  4        \        T4       i ; i)zQUpdate Hermes Agent: hangup protection + update lock around ``_cmd_update_impl``.T)Úretarget_to_owning_installNr   F)Úgateway_mode)ÚUPDATE_EXIT_CONCURRENTÚ
UpdateLockÚdescribe_holder©Úinstall_rootrd  Ú	lock_heldrk  rl  )Ú_cmd_update_impl)ÚInstallErrorc                ó2   € V ^8„  d   QhR\         R,          /# r>   rz   )r   s   "r   r   Ú cmd_update.<locals>.__annotate__Q	  s   € ÷ Iñ Iœc D�jñ Ir   c                  ól   € \         P                  P                  R 4      p V e   V P                  4       # R# )zhermes_cli.update_custodyN)r(   Úmodulesr€   Úrefusal_notice)Úcustodys    r   Ú_custody_refusalÚ$cmd_update.<locals>._custody_refusalQ	  s0   € ô —+‘+—/‘/Ð"=Ó>ˆØ+2Ò+>ˆw×%Ñ%Ó'ÐHÀDÐHr   )ÚCOMMAND_BOUNDARY_STOP_REASONu   âœ— Update failed: rý  )Ú_write_gateway_update_exit_codez	sys.exit(Ú))&Ú hermes_cli.update_owning_installrƒ  r#  r€  rC   r¦  Úhermes_cli.update_lockr…  r†  r‡  Úacquirer]   Úholderr¤  ry  re  r(   rô   r}  r‹  rf  rŒ  r]  r•  r^  r®   rµ  ÚSubprocessErrorÚtypery  Úhermes_cli.update_cmd_fleetr–  r[   r1   r\   r2   r^   Úrelease)r£  Ú_hermes_current_updater_framerƒ  r„  Ú_update_io_stater…  r†  r‡  Ú_update_lockre  r‹  rŒ  r“  r•  ra   r  r–  Ú_update_exitÚ_codeÚ_update_excs   &                   r   Ú
cmd_updater¦  .	  s  € ð %)Ð!ÝKáœ|Ô,Ü  ×&Ò&ÙÜ˜4 ¨EÓ2€Lä1¸|ÔLÐ÷ñ ñ ¬<Ô8€LØ×Ñ×!Ò!Ü‰o˜l×1Ñ1Ó2Ô3ÜÐ 0Ô1Ý=Ù�[°)Õ<Ü�ŠÐ'Ô(å6ÝõIð%2Ù˜Õ9õ< 	Kä  Ð$@ÕAð 	×ÑÔÜÐ 0Ö1øðG œ'¤:×#=Ñ#=Ð>ô %Ù"Ó$ˆÜˆg×4Ð4Ð.¨s¨eÐ4Ô5Ü  ¤t¨C£y×'9Ñ'9Ð&:¸"¸S¸EÐ$BÔCßÝSÙ+¨EÔ2ä˜‹m Ð$ûÜô ô &0°×0AÑ0AÄ3×%GÒ%G�×!Ò!ÈQˆßÑ!1Ó!3Ð3�gÖ3Ü�'ŒNÜ  ¨)°E°7¸!Ð(<Ô=ßŸEÝSÙ+¨EÔ2àûÜô ßÝSÙ+¨EÔ2Ü  ¤t¨KÓ'8×'AÑ'AÐ&BÀ"À[ÀMÐ$RÔSØûðûð 	×ÑÔÜÐ 0Õ1úsa   Ã	D ÃI% ÄI"Ä"A%FÆI"ÆI"Æ5HÇHÇ*HÈHÈI"È!I"È";IÉI"É"I% É%Jc                ó0   € V ^8„  d   QhR\         R\         /# r   )r   )r   s   "r   r   r   €	  s   € ÷ $ñ $¤dð $¬tñ $r   c                óz  € 0 RkRkRkRkRkRkRkRkR	kR
kRkRkRkRkRkRkRkRkRkRkRkRkRkRkRkRkRkRkRkRkRkR kR!kR"kR#kR$kR%kR&kR'kR(kR)kp0 R,mp. p^ pV\        V 4      8  dÏ   W,          pWR9   d¥   VP                  V4       V^,          p. pV\        V 4      8  dM   W,          P                  R*4      '       g0   W,          V9  d#   VP                  W,          4       V^,          pK\  V'       d#   VP                  R+P                  V4      4       KÀ  KÂ  VP                  V4       V^,          pKÞ  V# )-uã   Join unquoted multi-word session names after -c/--continue and -r/--resume.

``hermes -c Pokemon Agent Dev`` â†’ ``['-c', 'Pokemon Agent Dev']``; tokens
are collected until the next flag (``-*``) or known top-level subcommand.
ÚchatrJ   r   ÚsetupÚwhatsappúwhatsapp-cloudÚloginÚlogoutra  rx  ÚcronÚdoctorr¦  ÚpairingrM   Útoolsrù   rØ  Úinsightsr…  rC  Úprofilery  rz  r|  r{  ÚhonchoÚclawÚpluginsrq  ÚacpÚwebhookÚpeerÚmemoryÚdumpÚdebugr.  ÚimportÚ
completionÚlogsÚusager  r  >   ú-cú-rú--resumeú
--continue)r  Úappendr  r‚   )r	   Ú_SUBCOMMANDSÚ_SESSION_FLAGSr¹  r"  Útokenr  s   &      r   Ú_coalesce_session_name_argsrÊ  €	  sL  € ðØðØðØ"ðØ$+ðØ-7ðØ9IðØKRðØT\ðàðàðà ðà"*ðà,4ðà6?ðàAIðàKRðàTYðð 	ðð ðð !)ðð +6ðð 8Aðð CNðð PWðð 	ð	ð ð	ð #ð	ð %+ð	ð -6ð	ð 8Bð	ð DIð	ð KTð	ð V\ð	ð
 	ðð
 ðð
 "ðð
 $,ðð
 .6ðð
 8Dðð
 FLðð
 NUð€Lò <€Nà€FØ	€AØ
Œc�$‹iŒ-Ø•ˆØÔ"Ø�M‰M˜%Ô Ø��FˆAàˆEà”C˜“I”Ø�×*Ñ*¨3×/Ò/Ø•G <Ô/à—‘˜T�WÔ%Ø�Q•’ßØ—‘˜cŸh™h u›oÖ.ñ ð �M‰M˜%Ô Ø��FŠAØ€Mr   ©Úcmd_profilec                ó   € V ^8„  d   QhRR/# r>   r   )r   s   "r   r   r   ª	  s   € ÷ /ñ /°Dñ /r   c                ó  € V'       d2   \        V RR4      '       g   \        V RR4      '       d   \        R4      h\        V RR4      '       d!   \        4        \        P                  ! ^ 4       \        V RR4      '       dƒ   ^ RIHp \        V! 4       4      p\        VR7      '       g"   \        R4       \        P                  ! ^ 4       ^ RI
Hp V! R	VR
7      p\        P                  ! VR,          '       d   ^M^ 4       R# R# )zO--status / --stop: report or kill running dashboards and exit (no deps needed).rx  FÚstopz?--ssh-session-token-file cannot be used with --status or --stoprk  )Ú
scope_homez7No hermes dashboard processes running for this profile.)Ú_kill_stale_dashboard_processeszrequested via --stop)r7   rÐ  ÚfailedN)rC   r[   rª  r(   rô   r.  rl  rS   r¥  r]   Úhermes_cli.dashboard_procsrÑ  )r£  Ú
token_filerl  Úown_homerÑ  r¹  s   &&    r   Ú_dashboard_lifecycle_flagsrÖ  ª	  s¾   € ç”w˜t X¨u×5Ò5¼ÀÀvÈu×9UÒ9UÜÐZÓ[Ð[Üˆt�X˜u×%Ò%Ü Ô"Ü�Š�ŒÜˆt�V˜U×#Ò#õ 	5ä‘Ó(Ó)ˆÜ)°X×>Ó>ÜÐKÔLÜ�HŠH�QŒKõ
 	Oá0Ð8NÐ[cÔdˆÜ�Š�f˜X×&Ô&‘¨AÖ.ñ! $r   c           	     ó„  € V'       d'   ^ RI HpHp  V! \        \	        V RR4      4      R7       \	        V RR4      pV'       d)   \        P                  ! R	V4      '       g   \        R
4      hV'       d   V'       g   \        R4      hV#   T d0   p\        RT 2\        P                  R7       \        ^4      ThRp?ii ; i)z<Headless-serve argument checks -> ssh_owner_nonce (or None).©ÚInvalidUserConfigErrorÚrequire_parseable_user_configrV  F©rV  r  rW   NÚssh_owner_noncez[0-9a-f]{16}z5--ssh-owner-nonce must be 16 lowercase hex charactersz8--ssh-session-token-file is only valid with hermes serve)rƒ  rÙ  rÚ  r   rC   r]   r(   r*   r[   r  Ú	fullmatch)r£  Úheadless_backendrÔ  rÙ  rÚ  ra   rÜ  s   &&&    r   Ú_dashboard_validate_serve_argsrß  Ä	  s¥   € ÷ ÷	
ð
	)Ù)Ü#'¬°Ð6JÈEÓ(RÓ#Sõô ˜dÐ$5°tÓ<€OßœrŸ|š|¨O¸_×MÒMÜÐPÓQÐQß×*ÜÐSÓTÐTØÐøð &ô 	)Ü�G˜C˜5�/¬¯
©
Õ3Ü˜Q“- SÐ(ûð	)ús   ’B	 Â	B?Â*B:Â:B?c                ó   € V ^8„  d   QhRR/# r>   r   )r   s   "r   r   r   ß	  s   € ÷ 6ñ 6¸ñ 6r   c                ó,  € \        4       pV '       gX   V'       gP   \        \        P                  P	                  RR4      4      '       d!   \        P                  P                  RR4       V '       g#   \        P                  P                  RR4       R# R# )uà  Strip Desktop-inherited env that hijacks a standalone launch.

Desktop Electron spawns its backend with HERMES_DESKTOP=1 plus
HERMES_WEB_DIST=<packaged app.asar[/unpacked]/dist> (and often
HERMES_SERVE_HEADLESS=1). A shell inheriting those then running
`hermes dashboard` would serve the desktop renderer ("Desktop IPC bridge
is unavailable", #52945) or disable the SPA. Only Electron-packaged
WEB_DIST contamination is stripped from browser dashboards â€” caller-managed
overrides (dev / custom builds) must still work, while headless `serve`
keeps the packaged path used by the Desktop backend. Headless `serve`
re-sets HERMES_SERVE_HEADLESS itself.

The Desktop's legacy fallback spawn (`dashboard --no-open`, taken when the
`serve --help` probe times out on a cold host) is not headless yet must keep
its packaged dist: it is told apart by the per-spawn
HERMES_DASHBOARD_SESSION_TOKEN, which the terminal pane never receives and
the terminal tool's env policy strips from agent children.
ÚHERMES_WEB_DISTr  NÚHERMES_SERVE_HEADLESS)Ú_is_desktop_owned_backendr§  r/   r   r€   rb  )rÞ  Údesktop_owned_childs   & r   Ú_dashboard_sanitize_desktop_envræ  ß	  s\   € ô& 4Ó5Ðçß#Ü*¬2¯:©:¯>©>Ð:KÈRÓ+P×QÒQä
�
‰
�‰Ð(¨$Ô/ßÜ
�
‰
�‰Ð.°Ö5ñ r   c                ó   € V ^8„  d   QhRR/# r>   r   )r   s   "r   r   r   ý	  s   € ÷ ñ  Tñ r   c                 óè   €  ^ RI p ^ RIpR#   \         d[   p^ RIHpHp \        T! T4      ;'       g    T! RRR4      4       \        RT 24       \        P                  ! ^4        Rp?R# Rp?ii ; i)an  Exit with the right message when the dashboard's web-server packages can't import.

A plain missing-package ImportError gets the standard repair guidance; the
``DLL load failed ... _ssl`` signature of Windows Smart App Control blocking the
embedded runtime gets the policy guidance instead, so users stop looping on
repair for a block repair can never lift (#63796).N)Úmissing_optional_deps_messageÚsmart_app_control_block_messagery  z*its web-server packages (fastapi, uvicorn)Úallz	Details: )	ÚfastapiÚuvicornro   Úhermes_cli.main_dep_hintsré  rê  r]   r(   rô   )rì  rí  r  ré  rê  s        r   Ú_require_dashboard_web_depsrï  ý	  sm   € ðÛÝøÜô 	÷	
ô
 	Ñ-¨aÓ0÷ Nð NÑ4QØÐEÀuó5Nô 	Oä�	˜!˜ˆoÔÜ�Š��Šûð	ús   ‚ ŒA1—AA,Á,A1c                ó$   € V ^8„  d   QhR\         /# ry   rÿ   )r   s   "r   r   r   
  s   € ÷ Nñ N¼$ñ Nr   c                óf  €  ^ RI Hp V! RR7       \        4        \	        4         ^ RIHp V! 4        \        W4        ^ RI
Hp V! 4        \        4       pV'       d   V'       d   R#  ^ RIHpHp V'       d   V! \        RR7       R# V! \        RRR7        R#   \         d     L—i ; i  \         d    \        P                  RRR7        L�i ; i  \         d)   p\        R	T 2\        P                  R
7        Rp?L¶Rp?ii ; i  \         d    \        P                  RRR7        R# i ; i)z„Deps check, skills seed, terminal env bridge, plugins, MCP discovery.

Returns ``start_mcp_discovery_after_bind`` for start_server.
ru  r{  r}  )Úapply_terminal_config_to_envu9   terminal config â†’ env bridge failed for dashboard/serveT©Úexc_info)Údiscover_pluginsu   âš  Plugin discovery failed: rW   N)Údefer_background_mcp_discoveryÚstart_background_mcp_discoveryzdashboard-mcp-discovery©r   Úthread_name)r   rù  Údelayz9Background MCP tool discovery failed at dashboard startupF)Úhermes_loggingrv  r,   rï  rô  rƒ  rò  r   r½  r«  Úhermes_cli.pluginsrõ  r]   r(   r*   rä  Úhermes_cli.mcp_startuprö  r÷  )	r£  rÞ  Ú_setup_logging_guirò  rõ  ra   r|  rö  r÷  s	   &&       r   Ú_dashboard_prepare_runtimerÿ  
  s(  € ðÝFÙ Õ&ô  Ô!ô !Ô"ð$õ 	Cá$Ô&ô
   Ô7ðFÝ7ÙÔô" (Ó)€GßŸGÙð
÷	
÷
 Ù*´&ÐF_Õ`ñ ñ +´&ÐF_ÐgkÖlñ øôI ô Ùðûô* ô $Ü�‰ÐPØ"ð 	ö 	$ð$ûô ô Fô 	Ð-¨c¨UÐ3¼#¿*¹*×EÒEûðFûô: ô 
Ü�‰ØGØð 	õ 	
ñ ð
úsW   ‚B ¦B, ¿C Á)D
 Á9D
 Â	D
 ÂB)Â(B)Â,"CÃCÃDÃDÄDÄ
"D0Ä/D0c                ój  € \        V RR4      p\        W4       \        V RR4      p\        WV4      p\        V4       \	        W4       \        WW14       ^ RIHp V! 4        V'       d   \        V4      MRp\        W4      p^ RI
Hp ^ RIHp \        V 4       V'       d   ^ RIHp	 V	! R	4       T! V P"                  V P$                  V P&                  '       * \        V R
R4      \        V RR4      ;'       g    RT\        V RR4      TTTV'       d   \)        V4      P*                  V,          MRR7       R# )zGStart the web UI server, or (with --stop/--status) manage running ones.Ússh_session_token_fileNrÞ  F)Úapply_nofile_soft_limit)ÚBACKEND_LOCK_NAME)Ústart_serverrX  rz  ÚinsecureÚopen_profiler  Úisolated)ÚhostÚportÚopen_browserÚallow_publicÚinitial_profileÚheadlessr  Ússh_session_tokenrÜ  Ústart_mcp_discovery_after_bindÚssh_lock_path)rC   rÖ  rß  ræ  r£  r¬  Úhermes_cli.resource_limitsr  r©  rÿ  rÓ  r  Úhermes_cli.web_serverr  r¨  rd  rY  r  r	  Úno_openr±   rS  )
r£  Ú_token_fileÚ_headless_backendÚ_ssh_owner_noncer  Ú_ssh_session_tokenÚ_mcp_discovery_after_bindr  r  rY  s
   &         r   Úcmd_dashboardr  d
  s  € ä˜$Ð 8¸$Ó?€KÜ˜tÔ1ô
   Ð&8¸%Ó@ÐÜ5°dÈ{Ó[ÐÜ#Ð$5Ô6ä˜DÔ4Ü" 4Ð<LÔZõ CáÔçFQÔ5°kÔBÐW[ÐÜ :¸4Ó SÐå<Ý2ô .¨dÔ3ßÝQÙ�gÔñ Ø�Y‰YØ�Y‰YØŸ™Ô%Ü˜T :¨uÓ5Ü  n°bÓ9×?Ð?¸RØ"Ü˜˜z¨5Ó1Ø,Ø(Ø'@çFQ”d˜;Ó'×.Ñ.Ð1BÖBÐW[÷r   c                ó´   € ^ RI Hp \        V RR4      pRVP                  RVP                  /P                  W2P                  4      p\        V! V4      4       R# )zPrint shell completion script.)r¿  ÚshellÚbashÚzshÚfishN)r0  r¿  rC   Úgenerate_zshÚgenerate_fishr€   Úgenerate_bashr]   )r£  Úparserr¿  r  Úgenerates   &&   r   Úcmd_completionr$  ž
  sP   € å%ä�D˜' 6Ó*€EØ�z×.Ñ.°¸
×8PÑ8PÐQ×UÑUØ×'Ñ'ó€Hô 
‰(�6Ó
Ör   c                ó  € ^ RI HpHp \        V RR4      ;'       g    RpVR8X  d
   V! 4        R# V! V\        V R^24      \        V RR4      \        V R	R4      \        V R
R4      \        V RR4      \        V RR4      R7       R# )z!View and filter Hermes log files.)Útail_logÚ	list_logsÚlog_nameÚagentr   NÚlinesÚfollowFÚlevelrà  ÚsinceÚ	component)Ú	num_linesr+  r,  rà  r-  r.  )Úhermes_cli.logsr&  r'  rC   )r£  r&  r'  r(  s   &   r   Úcmd_logsr1  ©
  s~   € ç3ä�t˜Z¨Ó1×<Ð<°W€Hà�6ÔÙŒÙáØÜ˜$ ¨Ó,Ü�t˜X uÓ-Ü�d˜G TÓ*Ü˜˜i¨Ó.Ü�d˜G TÓ*Ü˜$ ¨TÓ2÷r   c                ó   € ^ RI Hp V! 4       # )z%Open the safe Hermes command console.)Úrun_console_repl)Úhermes_cli.console_enginer3  )r£  r3  s   & r   Úcmd_consoler5  ¾
  s   € å:áÓÐr   r¸  Ú	approvalsra  r.  Úbundleszcodex-runtimer¿  zcomputer-useÚ
connectorsr¦  Úconsoler¯  Úcuratorr½  r°  r¼  ÚegressÚfallbackr   Úhooksr¾  r³  Úkanbanr­  r®  rÀ  Úlsprù   r»  ÚmigrateÚjourneyzmemory-graphÚlearningÚ
monitoringr±  Úpauserº  Úpetsr·  Úportalr´  ÚprojectÚproxyzprompt-sizeÚsendrØ  rª  ÚskinÚslackrx  r²  rC  r…  rÁ  Úvaultr¹  r«  r¬  r©  ÚsecretsÚbrowserÚverifyÚhelpc                ó2   € V ^8„  d   QhR\         R,          /# r>   rz   )r   s   "r   r   r   á
  s   € ÷ 	%ñ 	%¤ d¥
ñ 	%r   c                 ón   € ^ RI Hp  V ! \        P                  R,          4      pV'       d
   V^ ,          # R# )zéFirst non-flag, non-flag-value token in ``sys.argv[1:]`` (skips values of known flags).

Not a full argparse simulation: an unknown ``--foo bar`` may classify
``bar`` as positional, which at worst forces a one-time plugin discovery.
)Úcommand_argvr!   N)r  rS  r(   r	   )rS  r£  s     r   Ú_first_positional_argvrT  á
  s*   € õ 0áœŸ™ �Ó%€Dßˆ4��7Ð$ Ð$r   c                ó$   € V ^8„  d   QhR\         /# ry   rÿ   )r   s   "r   r   r   í
  s   € ÷ Cñ C¤dñ Cr   c                 ó@   € \        4       p V RJ;'       d
    V \        9  # )u  True when the CLI might be invoking a plugin-registered subcommand.

False skips plugin discovery at argparse setup (~500-650ms). An unknown
first token could be a plugin command OR a chat prompt â€” either way
discovery is needed; for a prompt its cost amortizes over the agent run.
N)rT  Ú_BUILTIN_SUBCOMMANDS)Úfirsts    r   Ú_plugin_cli_discovery_neededrY  í
  s%   € ô #Ó$€EØ˜Ð×BÐB Ô.BÑ!BÐBr   c                ó6   € V ^8„  d   QhR\         R,          RR/# )r   rò   Nr
   rz   )r   s   "r   r   r   ø
  s   € ÷ 
ñ 
¼¸t½ð 
Èñ 
r   c                óÒ   € V '       g   R#  ^ RI Hp VP                  V 4       R#   \         d7   p\        P
                  ! \        4      P                  RT T4        Rp?R# Rp?ii ; i)a\  Materialize the deferred platform whose top-level CLI command matches.

Bundled platforms are *deferred* entries (no gateway SDK imports at
startup), so a platform's ``register_cli_command`` side effect only runs
on import; ``discover_plugins()`` alone leaves ``hermes photon`` failing
with ``invalid choice``. Importing just the matching platform keeps
startup cheap.

On the unknown-top-level-command slow path, ``discover_plugins()`` records the deferred loader but does
not import it, so the CLI registration never happens and ``hermes photon`` fails with argparse ``invalid
choice`` (issue #54678).
N)Úplatform_registryz2Deferred platform CLI resolution failed for %s: %s)Úgateway.platform_registryr\  r€   r,   r-   Ú	getLoggerry  r½  )rò   r\  ra   s   &  r   Ú&_resolve_deferred_platform_cli_commandr_  ø
  sW   € ÷ Ùð	
Ý?à×Ñ˜lÖ+øÜô 
Ü×Òœ(Ó#×)Ñ)Ø@ØØ÷	
ò 	
ûð
ús   Œ% ¥A&°+A!Á!A&r   Útickrk  c                ó$   € V ^8„  d   QhR\         /# ry   rÿ   )r   s   "r   r   r     s   € ÷ "ñ "¤ñ "r   c                 óØ   € \        V 4      '       d   R # \        V RR 4      '       g%   \        P                  P	                  R4      R8X  d   R# \        V RR4      R9  d   R # \        V 4      # )FrŽ   r¡   r¢   TÚcommandN¾   Nr©  )rï  rC   r/   r   r€   ró  r«  s   &r   Ú_is_tui_chat_launchre    sW   € Ü˜4× Ò ÙÜˆt�U˜E×"Ò"¤b§j¡j§n¡n°\Ó&BÀcÔ&IÙô ˆt�Y Ó%¨^Ô;ÙÜ˜DÓ!Ð!r   c                ó$   € V ^8„  d   QhR\         /# ry   rÿ   )r   s   "r   r   r   ,  s   € ÷ Jñ J¬ñ Jr   c                óŠ   € \         P                  V P                  R4      w  r\        T;'       d    \	        WR4      V9   4      # )zETrue for ``cron run/tick``, ``gateway run`` (see _AGENT_SUBCOMMANDS).N)NN)Ú_AGENT_SUBCOMMANDSr€   rc  r   rC   )r£  Ú	_sub_attrÚ_sub_sets   &  r   Ú_agent_subcommand_selectedrk  ,  s:   € ä,×0Ñ0°·±¸|ÓLÑ€IÜ�	×HÐHœg d°tÓ<ÀÑHÓIÐIr   c                ó$   € V ^8„  d   QhR\         /# ry   rÿ   )r   s   "r   r   r   2  s   € ÷ Rñ R¬Dñ Rr   c                 óP   € \        V 4      '       * ;'       d    V P                  R9   # )N¾   NÚrlr©  )re  rc  r«  s   &r   Ú_should_background_mcp_startuprp  2  s"   € Ü" 4Ó(Ô(×QÐQ¨T¯\©\Ð=QÑ-QÐQr   c                ó$   € V ^8„  d   QhR\         /# ry   rÿ   )r   s   "r   r   r   6  s   € ÷ *ñ *¤4ñ *r   c                ó    € V P                   R9   # )aq  Every ``hermes`` / ``hermes chat`` turn (classic view, ``-q``, ``-z``, TUI) executes in the
gateway, which discovers and owns MCP servers itself. Discovery in this client only spawns a
second copy of every server and holds the cross-process discovery lock the cold-starting gateway
then waits on (measured 2.0 s with one stdio server) for tools nothing here ever calls.rd  )rc  r«  s   &r   Ú_chat_runs_at_gatewayrs  6  s   € ð
 �<‰<˜>Ñ)Ð)r   c                ó   € V ^8„  d   QhRR/# r>   r   )r   s   "r   r   r   >  s   € ÷ P
ñ P
 Dñ P
r   c                ó–  € \        V RR4      '       d   R\        P                  R&   V P                  R9   d   \	        V 4      '       d   R# \        V 4       \        V 4       \        V 4       V P                  \        9   g   \        V 4      '       g   R# \        \        V RR4      4      p\        V 4      '       g    \        V 4      '       g    ^ RIHp V! 4         ^ RIHp V! \        V RR4      4       \        V 4      '       d   V'       d   R\        P                  R&   R# \+        V 4      '       d    ^ RIHp V! \         RR7        ^ RIHp ^ RIHp ^ RIHp V! 4       pV! W�V P                  R9   R7       V'       d   V P                  R8X  d   ^ RIHp	 V	! 4        V! V4       R#   \         d    \         P#                  RR	R
7        Lói ; i  \         d    \         P)                  RR	R
7        ELi ; i  \         d    \         P)                  RR	R
7        LÖi ; i  \         d    \         P)                  RR	R
7        R# i ; i)zCDiscover plugins/MCP/hooks for commands that can run an agent turn.rD  Fr¢   rE  NrN  )Ú!start_background_plugin_discoveryz&plugin discovery failed at CLI startupTró  )Úset_mcp_server_filterrL   zMCP server filter setup failedÚHERMES_ACCEPT_HOOKS)r÷  zcli-mcp-discoveryrø  z3Background MCP tool discovery failed at CLI startupr’  )Úregister_from_config)rN  Úinteractiver   )Úaccept_for_processz-shell-hook registration failed at CLI startuprd  rn  )rC   r/   r   rc  rï  r]  r^  r_  Ú_AGENT_COMMANDSrk  r   re  rs  rü  rv  r,   r   rœ  rý  rw  r½  rp  r÷  rƒ  ri  Úagent.shell_hooksry  Úagent.outbound_webhooksr{  )
r£  Ú_accept_hooksrv  rw  r÷  ri  ry  Úregister_outbound_webhooksÚ
_hooks_cfgr{  s
   &         r   Ú_prepare_agent_startupr‚  >  së  € ô ˆt�V˜U×#Ò#Ø),Œ�
‰
Ð%Ñ&Ø‡|�|�~Ô%Ô*=¸d×*CÒ*Cñ 	Ü�TÔÜ˜dÔ#Ü% dÔ+à�L‰LœOÔ+Ô/IÈ$×/OÒ/OÙäœ  ~°uÓ=Ó>€MÜ ×%Ò%Ô)>¸t×)DÒ)Dð	ÝLñ
 .Ô/ðFÝ@áœg d¨J¸Ó=Ô>ô
 ˜T×"Ò"ßØ03ŒB�J‰JÐ,Ñ-ÙÜ% d×+Ò+ð	ÝMá*ÜØ/õð
Ý1Ý:Ý^á “]ˆ
Ù˜ZÐQU×Q]ÑQ]ÐauÑQuÕvß˜TŸ\™\¨YÔ6Ý<ÙÔ Ù" :Ö.øôY ô 	Ü�N‰NØ8Øð ö ð	ûô ô FÜ�‰Ð5Àˆ×EðFûô  ô 	Ü�L‰LØEØð ö ð	ûô  ô 
Ü�‰Ø;Øð 	÷ 	
ð
úsI   ÃF) ÃG Ä4G: Å	AH" Æ)"GÇGÇ"G7Ç6G7Ç:"HÈHÈ""IÉIc                ó   € V ^8„  d   QhRR/# r>   r   )r   s   "r   r   r   ‘  s   € ÷ ,ñ ,˜dñ ,r   c                 ó¢   € \        V R R4      '       g   R# R\        P                  R&   R\        P                  R&   R\        P                  R&   R# )rP  FNr¢   ÚHERMES_SAFE_MODEÚHERMES_IGNORE_USER_CONFIGrG  ©rC   r/   r   r«  s   &r   r]  r]  ‘  sA   € Ü�4˜ e×,Ò,ÙØ%(„B‡J�JÐ!Ñ"Ø.1„B‡J�JÐ*Ñ+Ø(+„B‡J�JÐ$Ó%r   c                ó   € V ^8„  d   QhRR/# r>   r   )r   s   "r   r   r   ™  s   € ÷ 6ñ 6 tñ 6r   c                óV   € \        V RR4      '       d   R\        P                  R&   R# R# )zAApply the explicit config bypass before any startup config reads.rV  Fr¢   r†  Nr‡  r«  s   &r   r^  r^  ™  s&   € äˆtÐ)¨5×1Ò1Ø25Œ�
‰
Ð.Ó/ñ 2r   c                ó   € V ^8„  d   QhRR/# r>   r   )r   s   "r   r   r   Ÿ  s   € ÷ 1ñ 1¨tñ 1r   c           	     ó¢  € \        V RR4      '       d   R# \        \        V RR4      4      ;'       g    \        \        V RR4      4      pV'       g   R# ^ RIHpHp  T! \        \        V RR4      ;'       g    \        V RR4      4      R	7       RT n	        R#   T d0   p\        R
T 2\        P                  R7       \        ^4      ThRp?ii ; i)zFFail closed before a non-interactive invocation initializes providers.Ú _noninteractive_config_validatedFNrR  rQ  rØ  rV  rP  rÛ  r  rW   T)
rC   r   rƒ  rÙ  rÚ  r]   r(   r*   r[   rŒ  )r£  Úis_noninteractiverÙ  rÚ  ra   s   &    r   r_  r_  Ÿ  sÉ   € äˆtÐ7¸×?Ò?Ùô 	ŒW�T˜9 dÓ+Ó,÷ 	.ð 	.Ü”˜˜g tÓ,Ó-ð ÷ Ù÷ð
	%Ù%Ü#Ü˜Ð2°EÓ:÷ 5ð 5Ü˜4 ¨eÓ4ó õ	
ð -1€DÖ)øð	 "ô %Ü�˜�uˆo¤C§J¡JÕ/Ü˜‹m Ð$ûð%ús   ÁB Á8B ÂCÂ*C	Ã	Cc                ó   € V ^8„  d   QhRR/# r>   r   )r   s   "r   r   r   ¾  s   € ÷ )ñ ) Dñ )r   c                óZ   € R F$  w  r\        W4      '       d   K  \        WV4       K&  	  R# )zCFill the chat-parser attrs cmd_chat reads when chat was not parsed.N)©rQ  N)rJ   N©rK   N©rL   N)ÚverboseF©rO   N)rí  N©r  F)ÚhasattrÚsetattr)r£  rF   r*  s   &  r   Ú_set_chat_arg_defaultsr˜  ¾  s'   € ó	‰ˆô �t×"Ô"Ü�D Ö(ó	r   c                ó   € V ^8„  d   QhRR/# r>   r   )r   s   "r   r   r   Î  s   € ÷ (ñ ( Dñ (r   c                óJ   € ^ RI Hp \        P                  ! V! V 4      4       R# )z‹Top-level --oneshot / -z: single-shot mode, stdout = final response only.

Bypasses cli.py entirely; the transport launcher never returns.
rB  N)r\  rC  r(   rô   )r£  rC  s   & r   Ú_run_oneshot_from_argsr›  Î  s   € õ
 DÜ‡H‚HÑ  Ó&Ö'r   c                 óR   € ^ RI Hp  V ! 4       w  rpVP                  \        R7       V# )zOTop-level + chat parser only (no subcommand tree); chat dispatches to cmd_chat.©Úbuild_top_level_parser©Úfunc)r  rž  Úset_defaultsri  )rž  r"  Ú_subparsersÚchat_parsers       r   Ú_light_chat_parserr¤  ×  s(   € å9á'=Ó'?Ñ$€F˜Ø×Ñ¤(ÐÔ+Ø€Mr   c                ó   € V ^8„  d   QhRR/# r>   r   )r   s   "r   r   r   à  s   € ÷ ñ  tñ r   c                ó€   € V P                   '       g   V P                  '       d   V P                  f
   RV n        R# R# R# )zDTop-level --resume/--continue with no subcommand is a chat shortcut.Nr©  )rO   rí  rc  r«  s   &r   Ú_promote_top_level_resumer§  à  s/   € à��ˆ�t×)×)Ð)¨t¯|©|Ò/CØˆŽñ 0DÑ)r   c                ó$   € V ^8„  d   QhR\         /# ry   rÿ   )r   s   "r   r   r   æ  s   € ÷ $ñ $¤ñ $r   c                 óæ  € \         P                  P                  R4      R8X  d   R# \        P                  R,          p V '       d   V ^ ,          R8w  g   RV 9   g   RV 9   d   R#  ^ RIHp V! 4       '       d   R#  \        \        RRR	7      p TP                  T R,          4      w  r4T'       d   R# \        T4       R
#   \         d     R# i ; i  \        P                  \        3 d     R# i ; i)a  Dispatch an unambiguous built-in ``serve`` without the full CLI tree.

Desktop runs this on every cold start; building every other parser costs
thousands of filesystem-backed lookups on Windows. Unknown or global
arguments fall back to normal parsing so error reporting is unchanged.
Ú HERMES_DISABLE_FAST_SERVE_LAUNCHr¢   Fr!   rz  ú-hú--help©Úget_container_exec_info)r  Úadd_helpÚexit_on_errorT)r/   r   r€   r(   r	   rƒ  r®  r,   rÐ   r  Úparse_known_argsÚargparseÚArgumentErrorrû   ©r	   r®  r"  r£  Úunknowns        r   Ú_try_fast_serve_launchr¶  æ  sÖ   € ô 
‡z�z‡~�~Ð8Ó9¸SÔ@Ùä�8‰8�B�<€Dß�4˜•7˜gÔ%¨°¬¸ÀTÔ9IÙðÝ=á"×$Ò$Ùð %ô
  Ü#ØØô€Fð
Ø×/Ñ/°°RµÓ9‰ˆ÷ Ùä�$ÔÙøô! ô Úðûô ×"Ñ"¤JÐ/ô Úðús$   Á%B? ÂC Â?CÃCÃC0Ã/C0c                ó$   € V ^8„  d   QhR\         /# ry   rÿ   )r   s   "r   r   r     s   € ÷ 1ñ 1œtñ 1r   c                 óò  € \         P                  P                  R4      R8X  d   R# \        P                  R,          p RV 9   g   RV 9   d   R#  ^ RIHp V! 4       '       d   R#  \        T 4      '       d   R# \        4       R9  d   R# \        4       p TP                  \        T 4      4      w  r4T'       d   R# \        TR	R4      '       d   R# \        TR
R4      R9  d   R# \        TRR4      '       d   R\         P                  R&   \        T4       \        TRR4      '       d   \!        T4       \#        T4       \%        T4       \'        T4       R#   \         d     R# i ; i  \         d     R# i ; i)u—  Fast path for unambiguous interactive chat launches (all hosts).

Building all ~40 subcommand parsers costs ~140ms the chat path never
uses. Bails out (False) whenever the invocation is not certainly a chat
launch â€” subcommand positional, ``--help``, unknown flags. Mirrors
``_try_termux_fast_cli_launch`` minus the Termux deferred startup; kept
separate so phone-tuned behavior doesn't leak to desktops.
ÚHERMES_DISABLE_FAST_CHAT_LAUNCHr¢   Fr!   r«  r¬  r­  NÚversionrc  rD  rE  rR  Trd  )r/   r   r€   r(   r	   rƒ  r®  r,   r©   rT  r¤  r±  rÊ  r[   rC   r‚  r›  r§  r˜  ri  r´  s        r   Ú_try_fast_chat_launchr»    sC  € ô 
‡z�z‡~�~Ð7Ó8¸CÔ?ÙÜ�8‰8�B�<€DØˆt„|�x 4Ô'ÙðÝ=Ù"×$Ò$Ùð %ô
 ˜×ÒÙÜÓ ~Ô5ÙäÓ!€FðØ×/Ñ/Ô0KÈDÓ0QÓR‰ˆ÷ ÙÜˆt�Y ×&Ò&ÙÜˆt�Y Ó%¨^Ô;Ùäˆt�V˜U×#Ò#Ø),Œ�
‰
Ð%Ñ&Ü˜4Ô äˆt�Y ×%Ò%Ü˜tÔ$ä˜dÔ#Ü˜4Ô ÜˆT„NÙøô= ô Úðûô ô Úðús$   ÁE ÂE' ÅE$Å#E$Å'E6Å5E6c                ó$   € V ^8„  d   QhR\         /# ry   rÿ   )r   s   "r   r   r   A  s   € ÷ 3ñ 3¤Tñ 3r   c                 ó*  € \        4       '       g   R# \        P                  P                  R4      R8X  d   R# \        P
                  R,          p RV 9   g   RV 9   d   R# \        V 4      '       d   R# \        P                  ! V 4      '       d   \        RR7       R# \        4       p\        ;QJ d    R	 V  4       F  '       g   K   RM	  RM! R	 V  4       4      pV'       g
   VR9  d   R# \        4       pVP                  \        V 4      4      p\        VRR4      '       d   \        RR7       R# \        VRR
4      '       d   \!        V4       \#        V4       \%        V4       VP&                  R9   dž   \)        V4       \        VRR
4      '       gh   \        VRR
4      '       gU   RVn        R\        P                  R&   R\        P                  R&   \        VRR4      '       d   R\        P                  R&   M\!        V4       \-        V4       R# R# )zHRun obvious Termux non-TUI chat/oneshot/version paths on a light parser.FÚHERMES_TERMUX_DISABLE_FAST_CLIr¢   r!   r«  r¬  Tr7  c              3   óx   "  € T F0  pVR 8H  ;'       g    VR8H  ;'       g    VP                  R4      x € K2  	  R# 5i)z-zz	--oneshotz
--oneshot=Nr  rx  s   & r   r   Ú._try_termux_fast_cli_launch.<locals>.<genexpr>S  s<   é € ð áˆCð 	ˆt‰×IÐI�s˜kÑ)×IÐI¨S¯^©^¸LÓ-IÔIÛùs   ‚:“: :Nrº  rR  rQ  ÚimageÚHERMES_DEFER_AGENT_STARTUPÚHERMES_FAST_STARTUP_BANNERrN  rx  rd  )rü  r/   r   r€   r(   r	   r©   r   Úis_global_fast_version_argvr9  rT  r   r¤  Ú
parse_argsrÊ  rC   r‚  r›  r§  rc  r˜  rW  ri  )r	   rX  Úhas_oneshotr"  r£  s        r   Ú_try_termux_fast_cli_launchrÇ  A  s›  € ä)×+Ò+ÙÜ	‡z�z‡~�~Ð6Ó7¸3Ô>Ùä�8‰8�B�<€DØˆt„|�x 4Ô'ÙÜ˜×ÒÙä×0Ò0°×6Ò6Ü¨$Õ/Ùä"Ó$€Eß“#ñ áó—#—#’#ñ áóó €K÷ ˜5¨Ô6ÙäÓ!€FØ×ÑÔ8¸Ó>Ó?€Däˆt�Y ×&Ò&Ü¨$Õ/Ùäˆt�Y ×%Ò%Ü˜tÔ$Ü˜tÔ$ä˜dÔ#Ø‡|�|�~Ô%Ü˜tÔ$Ü�t˜W d×+Ò+´G¸DÀ'È4×4PÒ4PàˆDŒLØ7:ŒB�J‰JÐ3Ñ4Ø7:ŒB�J‰JÐ3Ñ4Ü�t˜^¨U×3Ò3Ø47”—
‘
Ð0Ñ1øä" 4Ô(Ü�ŒÙár   c                ó$   € V ^8„  d   QhR\         /# ry   rÿ   )r   s   "r   r   r   w  s   € ÷  ñ  ¤Tñ  r   c                 ó>  € \        4       '       g   R# R\        P                  R,          9   g   R\        P                  R,          9   d   R# \        \        P                  R,          4      p V '       g   R# \	        4       pVR
9  d   R# \        4       pVP                  \        \        P                  R,          4      4      p\        VRR4      '       g   \        VRR4      '       d   R# \        VRR4      R
9  d   R# \        V4      '       g   R# \        V4       R	# )z×Launch obvious Termux TUI invocations before building every subparser.

`hermes --tui` is the hot path on phones and the TUI immediately execs
Node, so the full parser's command-module imports are pure waste there.
Fr«  r!   r¬  Nrº  rR  rc  Trd  )rü  r(   r	   r©   rT  r¤  rÅ  rÊ  rC   ró  ri  )Ú	wants_tuirX  r"  r£  s       r   Ú_try_termux_fast_tui_launchrË  w  sÑ   € ô *×+Ò+ÙàŒs�x‰x˜�|Ô˜x¬3¯8©8°B­<Ô7Ùä ¤§¡¨"¥Ó.€IßÙä"Ó$€EØ�NÔ"ÙäÓ!€FØ×ÑÔ8¼¿¹À"½ÓFÓG€Dô ˆt�Y ×&Ò&¬'°$¸	À4×*HÒ*HÙÜˆt�Y Ó%¨^Ô;ÙÜ˜D×!Ò!ÙäˆT„NÙr   c                ó   € V ^8„  d   QhRR/# r>   r   )r   s   "r   r   r   š  s   € ÷ 2ñ 2˜dñ 2r   c                 ó†   € \         P                  P                  RR4       \         P                  P                  RR4       R# )uR  Advertise the agent harness to child processes.

``AI_AGENT`` is the cross-agent standard (huggingface_hub reads it); the
value must be our id in the public agent-harness registry
(``hermes-agent``) â€” matching is exact. ``HERMES_AGENT`` is the
Hermes-specific marker. setdefault: never clobber an outer harness.

``AI_AGENT`` is the emerging cross-agent standard (huggingface_hub's agent detection reads it; pi and
other agents set it â€” earendil-works/pi#7493) so generic tooling can attribute subprocesses to the
harness that spawned them. Hermes running inside another agent's terminal).
ÚAI_AGENTzhermes-agentÚHERMES_AGENTr>  N)r/   r   Ú
setdefaultr   r   r   Ú_advertise_agent_envrÑ  š  s,   € ô ‡J�J×Ñ˜* nÔ5Ü‡J�J×Ñ˜.¨&Ö1r   c                ó   € V ^8„  d   QhRR/# r>   r   )r   s   "r   r   r   ª  s   € ÷ 
@ñ 
@¸ñ 
@r   c                ó  € V P                  VR,          VR,          VP                  RR4      \        R4      P                  R7      pVR,          ! V4       VP                  R4      e   VP	                  VR,          R
7       R	# R	# )zCRegister one plugin-provided top-level command from its descriptor.r(  rP  Údescriptionr  r²  )rP  rÔ  Úformatter_classÚsetup_fnÚ
handler_fnNrŸ  )Ú
add_parserr€   Ú
__import__ÚRawDescriptionHelpFormatterr¡  )Ú
subparsersÚcmd_infoÚplugin_parsers   && r   Ú_attach_plugin_cli_commandrÞ  ª  s|   € à×)Ñ)Ø�ÕØ�fÕØ—L‘L °Ó3Ü" :Ó.×JÑJð	 *ó €Mð ˆZÖ˜Ô'Ø‡|�|�LÓ!Ò-Ø×"Ñ"¨°Õ(>Ð"Ö?ñ .r   c                ó   € V ^8„  d   QhRR/# r>   r   )r   s   "r   r   r   ·  s   € ÷ Sñ S°ñ Sr   c                ó&  € \        4       '       g   R#  ^ RIHp ^ RIHpHp ^ RIHp V! \        4       4       \        4       pV! 4        F&  p\        W4       VP                  VR,          4       K(  	  V! 4        \        \        4       4       V! 4       P                  P                  4        F  pVR,          V9  g   K  \        W4       K   	  R#   \         d6   p\         P"                  ! \$        4      P'                  RT4        Rp?R# Rp?ii ; i)uÑ   Register plugin-provided top-level commands (each plugin builds its own argparse tree).

Skipped when the invocation targets a known built-in â€” eagerly importing
every bundled plugin module costs 500-650ms.
N)Údiscover_plugin_cli_commands)rõ  Úget_plugin_manager)Úrecover_for_commandr(  zPlugin CLI discovery failed: %s)rY  Úplugins.memoryrá  rü  rõ  râ  Úhermes_cli.left_core_migrationrã  rT  rO  rÞ  rú   r_  Ú_cli_commandsr„  r,   r-   r^  ry  r½  )rÛ  rá  rõ  râ  rã  Úseen_plugin_commandsrÜ  Ú_excs   &       r   Ú_register_plugin_cli_commandsré  ·  s×   € ô (×)Ò)ÙðSÝ?ßKÝFáÔ2Ó4Ô5Ü"›uÐÙ4Ö6ˆHÜ& zÔ<Ø ×$Ñ$ X¨fÕ%5Ö6ñ 7ñ 	Ôô 	/Ô/EÓ/GÔHÙ*Ó,×:Ñ:×AÑAÖCˆHØ˜ÕÐ';Ö;Ü*¨:Ö@ó Døô ô SÜ×Òœ(Ó#×)Ñ)Ð*KÈT×RÒRûðSús   ”B&C Â?C ÃDÃ*DÄDc                 ó	  € ^ RI Hp  V ! 4       w  rpVP                  \        R7       \	        V\
        R7       \        V4       \        V4       \        V4       \        V4       \        V4       \        V4       \        V4       \        V4       \        V\        \         \"        R7        ^ RIHp V! V4       \/        V\0        R7       \3        V\4        R	7       \7        V\8        R
7       \;        V\<        R7       ^ RIH p V! V4       \C        V\D        R7       \G        V\H        R7       \K        V\L        R7       \O        V\P        R7       \S        V4       \U        V\V        R7       \Y        V\Z        R7       ^ RI.H/p V! V4       ^ RI0H1p V! V4       ^ RI2H3p	 V	! V4      P                  \h        R7       ^ RI5H3p
 V
! V4      P                  \l        R7       \o        V\p        R7       \s        V\t        R7       \w        V\x        R7       \{        V\|        R7       \        V\€        R7       \ƒ        V\„        R7       \‡        V\ˆ        R7       \‹        V\Œ        R7       \�        V4       \‘        V\’        R7       \•        V\–        R7       \™        V\š        R 7       \�        V\ž        R!7       \¡        V\¢        R"7       \¥        V\¦        R#7       \©        V4       \«        V\¬        R$7       \¯        V4       \±        V4       \³        V4       \µ        V4       \·        V\¸        R%7       \»        V\¼        R&7       \¿        V4       \Á        V\Â        R'7       \Å        V4       \Ç        V\È        R(7       \Ë        V\Ì        R)7       \Ï        V4       \Ñ        V\Ò        R*7       \Õ        V4       \×        V\Ø        R+7       \Û        V\Ü        R,7       \ß        V\à        R-7       \ã        V\ä        R.7       \ç        V\è        VR/7       \ë        V\ì        \î        R07       \ñ        V\ò        R17       \õ        V\ö        R27       \ù        V\ú        R37       W3#   \(         d"   p\*        P-                  RT4        Rp?EL¿Rp?ii ; i)4zùBuild the full ``hermes`` argparse tree -> ``(parser, subparsers)``.

Registration ORDER is the ``hermes --help`` order; keep it stable. Groups
live in ``hermes_cli/subcommands/<group>.py`` with handlers injected so
those modules never import main.
r�  rŸ  )r²  )rm  ro  r›  )Úregister_subparserzLSP CLI registration failed: %sN)r=  )r   )r¡  )rŸ  )Úregister_send_subparser)r~  )r€  )r‚  )r„  )r†  )rˆ  )Úbuild_peer_parser)rØ  )Úbuild_parser)rŽ  )r�  )r  )r$  )r(  )r’  )r”  )r3  )r˜  )r,  )r–  )r5  )r�  )r�  )rŸ  )r›  )rž  )r¡  )Úcmd_sessions)rš  )rœ  )r¦  )rH  )r™  rË  )r$  r"  )r  rš  râ  )r1  )rœ  )~r  rž  r¡  ri  r¶   r²  rà   rá   râ   rã   rä   ræ   rç   rå   r´   rm  ro  r›  Úagent.lsp.clirë  r,   r   r½  r·   r=  r¸   r   r¹   r¡  rº   rŸ  Úhermes_cli.send_cmdrì  r»   r~  r¼   r€  r½   r‚  r¾   r„  r¿   r³   r†  rÀ   rˆ  Úhermes_cli.subcommands.peerrí  Úhermes_cli.portal_clirØ  Úhermes_cli.kanbanrî  rŠ  Úhermes_cli.projects_cmdrŒ  rÁ   rŽ  rÂ   r�  rÃ   r  rÄ   r$  rÅ   r(  rÆ   r’  rÇ   r”  rÈ   r3  rè   rÉ   r˜  rÊ   r,  rË   r–  rÌ   r5  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Î   rH  rÕ   r™  rµ   rÌ  rð   r$  rÏ   r  rš  rÑ   rã  rÒ   r1  rÓ   rœ  )rž  r"  rÛ  r£  Ú_lsp_registerÚ_lsp_errrì  rí  Ú_add_portal_parserÚ_build_kanban_parserÚ_build_project_parsers              r   Ú_build_cli_parserrû  Ö  s  € õ :á&<Ó&>Ñ#€F˜Ø×Ñ¤(ÐÔ+ä�z¬YÕ7Ü�ZÔ Ü˜*Ô%Ü˜*Ô%Ü˜Ô$Ü˜Ô$ä˜
Ô#Ü˜Ô$Ü˜zÔ*ÜØ¤´yÔUgõð
BÝEÙ�jÔ!ô �z¬YÕ7Ü˜*´<Õ@Ü 
Ô?QÕRÜ�z¬YÕ7å;Ù˜JÔ'ä�z¬YÕ7Ü˜
¬zÕ:Ü�j¬8Õ4Ü˜
¬zÕ:Ü�zÔ"Ü�j¬8Õ4Ü˜´Õ=å=Ù�jÔ!åFÙ�zÔ"åFÙ˜Ó$×1Ñ1´zÐ1ÔBåMÙ˜*Ó%×2Ñ2¼Ð2ÔDä�z¬YÕ7Ü˜
¬zÕ:Ü˜
¬zÕ:Ü˜*´<Õ@Ü˜:´]ÕCÜ�j¬8Õ4Ü�z¬YÕ7Ü˜
¬zÕ:Ü˜ZÔ(Ü˜J´:Õ>Ü˜
¬zÕ:Ü�j¬8Õ4Ü˜´Õ=Ü˜´Õ=Ü˜
¬zÕ:Ü˜Ô$Ü˜´Õ=ä! *Ô-ä˜Ô$Ü�jÔ!Ü˜Ô$Ü˜
¬zÕ:Ü�z¬YÕ7Ü˜jÔ)Ü�Z¬Õ1Ü˜JÔ'Ü˜*Ô3DÕEÜ˜*´<Õ@Ü�zÔ"Ü˜J´~ÕFÜ�zÔ"Ü˜
¬zÕ:Ü˜:´]ÕCÜ�Z¬Õ1Ü˜´Õ=Ü˜J´~ÈfÕUÜØÜ#Ü5õô �Z¬Õ1Ü�j¬8Õ4Ü˜Z¼ÕIØÐÐøô_ ô BÜ�‰Ð6¸×AÒAûðBús   Â,Q ÑQ>ÑQ9Ñ9Q>c           	     óv  a€ ^ RI p\        V4      p\        VR4      '       d$   \        VP                  P                  4       4      M	\        4       o\        ;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'       g   RVn        V P                  V4      # ^ RI	H
pHp RVn        VP                  4       p V! VP                  4       4      ;_uu_ 4        V! V4      ;_uu_ 4        V P                  V4      p	RRR4       RRR4       \        TP!                  4       RR7       X	#   + '       g   i     L5; i  + '       g   i     L@; i  \         dP   p
T
P                  ^ 8X  d   \        TP!                  4       RR7       h RTn        T P                  T4      u Rp
?
# Rp
?
ii ; i)	u’  Parse ``argv`` with the bpo-9338 subparser-routing workaround.

On Python <3.11 argparse fails to route subcommand tokens when the parent
has nargs='?' optionals (--continue): "unrecognized arguments: model". When
argv holds a known subcommand token, set subparsers.required=True to force
routing; if that fails (``hermes -c model`` â€” 'model' is the session name)
fall back to the default behaviour.
NÚchoicesc              3   ó^   <"  € T F"  qP                  R 4      '       d   K  VS9   x € K$  	  R# 5ir7  r  )r   ÚtÚ_known_cmdss   & €r   r   Ú"_parse_cli_args.<locals>.<genexpr>U  s%   øé € ð Ù"1˜Q¿¹Àc×9JÔˆˆ[Ö£/ùs   ƒ- -TF)Úredirect_stderrÚredirect_stdoutr  )Úend)ÚiorÊ  r–  rO  rý  Úkeysr   ÚrequiredrÅ  Ú
contextlibr  r  ÚStringIOr[   r\   r]   Úgetvalue)r"  rÛ  r	   Ú_ioÚ_processed_argvÚ_has_cmd_tokenr  r  Úspeculative_stdoutr£  ra   r   s   &&&        @r   Ú_parse_cli_argsr  F  sQ  ø€ ó ä1°$Ó7€Oä*1°*¸i×*HÒ*HŒˆJ×Ñ×#Ñ#Ó%Ô&ÌcËeð ÷ “Sô Ù"1ó—S—S’Sô Ù"1óó €N÷ Ø#ˆ
ÔØ× Ñ  Ó1Ð1ç;à€JÔØŸ™›Ðð	2Ù˜SŸ\™\›^×,Õ,©oÐ>P×.QÕ.QØ×$Ñ$ _Ó5ˆD÷ /R×,ô 
Ð
×
%Ñ
%Ó
'¨RÕ0Ø€K÷ /R×.Qú×,×,ûäô 2Ø�8‰8�qŒ=ÜÐ$×-Ñ-Ó/°RÕ8Øà#ˆ
ÔØ× Ñ  Ó1Õ1ûð2úsU   Ã
E Ã(EÃ9D8	ÄEÄE Ä8EÅEÅE	ÅE ÅE ÅF8Å)AF3Æ-F8Æ3F8c                ó   € V ^8„  d   QhRR/# r>   r   )r   s   "r   r   r   n  s   € ÷ ñ ˜dñ r   c                óH   € \        V 4       \        V 4       \        V 4       R# )zNo subcommand given: run chat.N)r§  r˜  ri  r«  s   &r   Ú_default_to_chatr  n  s   € ä˜dÔ#Ü˜4Ô ÜˆT†Nr   c                 ó†  € \        4        \        4        \        4         ^ RIHp  V ! 4        ^ RIHp V'       dA   \        P                  P                  RR4       \        P                  P                  RR4       ^ RIHp V! 4         \        4        \        4        \        4        \!        4       R8w  d   ^ R	IHp ^ R
IHp V! V! 4       4        ^ RIHp ^ R
IHp V! V! 4       4      pV'       d   \/        RV 2\0        P2                  R7       \=        4       '       d   R# \?        4       '       d   R# \A        4       '       d   R# \C        4       '       d   R# \E        4       w  r‰^ RI#H$p
 T
! 4       pT'       d;   ^ RI%H&p T! T\0        PN                  R,          4       \0        PP                  ! ^4       \S        Y‰\0        PN                  R,          4      pTPT                  '       d   \W        T4       R# \Y        TRR4      '       d   R\        P                  R&   \[        T4       \Y        TRR4      '       d   \]        T4       ^ RI/H0p T! TPb                  4       TPb                  f   \e        T4       R# \g        TR4      '       dK   TPi                  T4      p\k        T\l        4      '       d"   T^ 8w  d   \0        PP                  ! T4       R# R# R# TPo                  4        R#   \
         d     ELÃi ; i  \
         d     ELoi ; i  \
         d0    ^ RIpTP6                  ! \8        4      P;                  RRR7        EL0i ; i)z Main entry point for hermes CLI.)Úconfigure_windows_stdio)Ú_stdio_repairedÚ
PYTHONUTF8r¢   ÚPYTHONIOENCODINGr=  )Úinstall_truststorer…  )Úmaybe_run_boot_bootstraprˆ  )Úcheck_runtimeu   âš  rW   Nzpm startup check failedTró  r­  )Úexec_in_containerr!   rD  FrE  rR  )Úset_process_surfacer   )8rw   rg   rÑ  Úhermes_cli.stdior  r,   r0  r  r/   r   rÐ  Úagent.ssl_verifyr  rÒ  rê  rÓ  rT  Úhermes_cli.boot_bootstrapr  Úpm.pathsr‰  Úhermes_cli.venv_syncr  r]   r(   r*   r-   r^  ry  r½  rË  rÇ  r¶  r»  rû  rƒ  r®  Úhermes_cli.main_containerr  r	   rô   r  rº  r;  rC   r‚  r›  Ú0hermes_cli.observability.shared_metrics_disabledr  rc  r  r–  r   r1   r2   Ú
print_help)r  r  r  r  r‰  r  Úproblemr-   r"  rÛ  r®  Úcontainer_infor  r£  r  r%   s                   r   rh  rh  u  sh  € äÔÜÔ ÜÔðÝ<ÙÔ!õ
 +ßÜ
�
‰
×Ñ˜l¨CÔ0Ü
�
‰
×ÑÐ0°'Ô:õ 4áÔðÜ!Ô#ô .Ô/ä$Ô&äÓ 8Ô+ÝFÝ)Ù ¡£Ô0ð
TÝ6Ý)á¡£Ó/ˆßÜ�D˜˜	Ð"¬¯©Õ4ô #×$Ò$ÙÜ"×$Ò$ÙÜ×ÒÙÜ×ÒÙä*Ó,Ñ€Fõ
 :á,Ó.€NßÝ?á˜.¬#¯(©(°2­,Ô7Ü�Š�Œä˜6¬s¯x©x¸­|Ó<€Dà‡|‡|€|Ü�DÔÙô ˆt�V˜U×#Ò#Ø),Œ�
‰
Ð%Ñ&ô
 ˜4Ô äˆt�Y ×%Ò%Ü˜tÔ$åTÙ˜Ÿ™Ô%à‡|�|ÒÜ˜ÔÙô ˆt�V×ÒØ�Y‰Y�t‹_ˆÜ�bœ#×Ò 2¨¤7Ü�HŠH�RŽLñ $+Ñð 	×ÑÖøôK ô Úðûô& ô Úðûô, ô TÛà×Òœ(Ó#×)Ñ)Ð*CÈdÐ)×SðTús;    K" Â	
K4 Ã L Ã1L Ë"K1Ë0K1Ë4LÌLÌ6M Ì?M c                óT  € V ^8„  d   Qh/ ^ \         9   d"   \        \        \        3,          R,          ;R&   ^\         9   d   \        R,          ;R&   ^\         9   d(   \        \        \        \        R3,          3,          ;R&   ^\         9   d   \        \        \        3,          ;R&   # )r   Nr�   rK  .Ú_FROZEN_UPDATER_SURFACEr  )Ú__conditional_annotations__r  rS   r”   )r   s   "r   r   r      s“   € ÷ ñ ÷j 6Ò 5œœc¤3˜h�¨$Õ.Ñ 5ñk÷` )Ò (”s˜T•zÑ (ña÷TAò œœc¤5¬¨c¨¥?Ð2Õ3ñ ñUA÷PBò ”dœ3¤˜8•nñ òQBr   r¤   >   r{  rz  r|  ry  )rˆ   )r‘  r’  )rM   N)r“  N)rE  Fr�  )rÁ  Nr”  r•  )r?  F)Úpass_session_idF)Ú	max_turnsN)Ú_assess_parked_branch_switchÚ(_cold_start_windows_gateway_after_updateÚ_discard_stashed_changesÚ(_filter_non_gateway_concurrent_instancesÚ_fleet_probe_expected_runtimesÚ_get_origin_urlÚ_park_stashed_changesÚ"_pause_windows_gateways_for_updateÚ _print_parked_branch_kept_noticeÚ!_print_parked_branch_skip_warningÚ _refresh_bootstrap_cache_scriptsÚ"_refresh_windows_gateway_launchersÚ_restore_stashed_changesÚ%_resume_windows_gateways_after_updateÚ_run_logged_subprocessÚ_run_pre_update_backupÚ_stash_local_changes_if_neededÚ_sync_with_upstream_if_neededÚ_venv_launcher_ancestorsÚ%_wait_for_windows_update_gateway_exitÚ!_warn_orphaned_update_autostashes)Ú_capture_active_lazy_featuresÚ_handoff_reapable_backend_pidsÚ_ledger_manual_serve_holdersÚ_ledger_reapable_backend_pidsÚ_leftover_pausable_gateway_pidsÚ_npm_lockfile_changedÚ_orphaned_desktop_backend_pidsÚ_refresh_active_lazy_featuresÚ,_refresh_active_memory_provider_dependenciesÚ_relaunch_stopped_servesÚ_stop_process_trees)Ú_purge_stale_hermes_modulesÚ_reload_updated_runtime_modules)Ú#_detect_concurrent_hermes_instancesrÑ  >   Nro  r¸  r©  (ä  r)  r{  r   ÚModuleNotFoundErrorra   r(  r0  r   Ú_early_recovery_modÚrestore_interrupted_pullÚrelaunch_after_restoreÚhermes_cli._subprocess_compatr   r/   r  r(   r�   r  r‚   Údirnamerd  ÚpardirÚ_bootstrap_rootÚinsertr   r   Únormalize_hermes_home_envr    r	   Úhermes_startup_watchdogr#   Ú_arm_swr,   r4   r@   r^   rB   rI   rb   rg   rw   r�   r…   rž   r©   r¯   Úensure_project_root_on_pathÚtry_fast_versionr[   r²  r  r]  rS  rµ  Úpathlibr±   Útypingr²   Úhermes_cli.subcommands.cronr³   Úhermes_cli.subcommands.gatewayr´   Úhermes_cli.subcommands.profilerµ   Úhermes_cli.subcommands.modelr¶   Úhermes_cli.subcommands.setupr·   Úhermes_cli.subcommands.whatsappr¸   r¹   Úhermes_cli.subcommands.slackrº   Úhermes_cli.subcommands.loginr»   Úhermes_cli.subcommands.logoutr¼   Úhermes_cli.subcommands.authr½   Úhermes_cli.subcommands.statusr¾   Úhermes_cli.subcommands.pauser¿   Úhermes_cli.subcommands.webhookrÀ   Úhermes_cli.subcommands.hooksrÁ   Úhermes_cli.subcommands.doctorrÂ   Úhermes_cli.subcommands.verifyrÃ   Úhermes_cli.subcommands.securityrÄ   Ú hermes_cli.subcommands.approvalsrÅ   Úhermes_cli.subcommands.dumprÆ   Úhermes_cli.subcommands.debugrÇ   Úhermes_cli.subcommands.backuprÈ   Ú!hermes_cli.subcommands.import_cmdrÉ   Úhermes_cli.subcommands.configrÊ   Úhermes_cli.subcommands.skinrË   Úhermes_cli.subcommands.consolerÌ   Úhermes_cli.subcommands.updaterÍ   Ú hermes_cli.subcommands.uninstallrÎ   Ú hermes_cli.subcommands.dashboardrÏ   rÐ   Úhermes_cli.subcommands.guirÑ   Úhermes_cli.subcommands.logsrÒ   Ú"hermes_cli.subcommands.prompt_sizerÓ   Úhermes_cli.subcommands.memoryrÔ   Úhermes_cli.subcommands.acprÕ   Úhermes_cli.subcommands.toolsrÖ   Úhermes_cli.subcommands.insightsr×   Úhermes_cli.subcommands.usagerØ   Ú!hermes_cli.subcommands.monitoringrÙ   Úhermes_cli.subcommands.skillsrÚ   Úhermes_cli.subcommands.pairingrÛ   Úhermes_cli.subcommands.pluginsrÜ   Úhermes_cli.subcommands.mcprÝ   Ú!hermes_cli.subcommands.connectorsrÞ   Úhermes_cli.subcommands.vaultrß   Úhermes_cli.subcommands.moarà   Úhermes_cli.subcommands.fallbackrá   Úhermes_cli.subcommands.worktreerâ   Úhermes_cli.subcommands.browserrã   Úhermes_cli.subcommands.secretsrä   Ú$hermes_cli.subcommands.codex_runtimerå   Úhermes_cli.subcommands.egressræ   Úhermes_cli.subcommands.migraterç   Ú"hermes_cli.subcommands.checkpointsrè   Úhermes_cli.subcommands.bundlesré   Úhermes_cli.subcommands.curatorrê   Úhermes_cli.subcommands.petsrë   Úhermes_cli.subcommands.journeyrì   Ú#hermes_cli.subcommands.computer_userí   Úhermes_cli.subcommands.sessionsrî   rï   Ú!hermes_cli.subcommands.completionrð   rõ   Úproject_root_strr#  r  rK  rý   r  r	  r  r&  r1  rA  rH  rL  rb  ry  rC   r�  r€   rÐ  r.  re  Ú_export_scratch_tmp_envÚpm.clirh  Ú_pm_mainrq   rj  Ú_install_repair_modÚensure_windows_bin_launchersrƒ  rl  Úhermes_cli.env_loaderrm  Ú_FORCE_IPV4_EARLYÚhermes_cli.config_effectivero  Ú_load_effective_earlyÚ	_cfg_pathr�   Ú_early_cfg_rawr   Ú_early_sec_cfgr1   r”   Ú_early_redactrS   r–   Ú_early_net_cfgrû  rv  Ú_setup_loggingr?  r  Ú_apply_ipv4r-   r3  r�  Úhermes_cli.model_setup_flowsr‚  rƒ  r„  r…  r†  r‡  rˆ  r‰  rŠ  r‹  rŒ  r�  rŽ  r�  r�  r‘  r’  r“  r”  r•  r–  Ú"hermes_cli.model_setup_flows_localr˜  r^  r   Úhermes_cli.main_agent_cmdsr™  rš  r›  rœ  r�  rž  Úhermes_cli.main_platform_setuprŸ  r   r¡  Úhermes_cli.process_identityr¢  rä  Úhermes_cli.main_dashboardr£  r¤  r¥  r¦  r§  r¨  r©  rª  r«  r¬  r­  Úhermes_cli.main_provider_setupr®  r¯  r°  r±  r²  r³  r´  rµ  r¶  r·  r¸  Úhermes_cli.old_updater_mainr¹  rº  r»  r¼  r½  r¾  r¿  rÀ  rÁ  rÂ  rÃ  rÄ  rÅ  rÆ  rÇ  rÈ  rÉ  rÊ  rË  rÌ  rÍ  rÎ  rÏ  rÐ  rÑ  Úhermes_cli.main_install_repairrÒ  rÓ  rÔ  rÕ  rÖ  r×  rØ  rÙ  rÚ  rÛ  rÜ  rÝ  rÞ  rß  rà  rá  Úhermes_cli.main_desktoprã  rä  rå  ræ  rç  rè  ré  Úhermes_cli.main_web_buildrê  rë  rì  rí  rî  Úhermes_cli.main_tui_launchrï  rð  rñ  rò  ró  rô  rü  r  r  r.  r1  r7  r@  rG  rK  rS  rd  r�  r¯  rº  ÚcontextmanagerrÄ  rË  rÉ  râ  ré  rø  r  r  r  r6  r>  ra  ri  rm  ro  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,  r3  r9  r;  rH  rY  r^  r€  r]  r�  r¦  rÊ  Úhermes_cli.profile_cmdrÌ  rÖ  rß  ræ  rï  rÿ  r  r$  r1  r5  Ú	frozensetrW  rT  rY  r_  r|  rh  re  rk  rp  rs  r‚  r]  r^  r_  r˜  r›  r¤  r§  r¶  r»  rÇ  rË  rÑ  rÞ  ré  rû  r  r  r   )rE   ÚattrsrF   r)  s   000@r   Ú<module>r»     s¼  øð÷ð ðÛõ >à×/Ò/×1Ò1Ø×.Ò.Ô0õ
 Há Ô ã 	Û 	Û 
ð —'‘'×"Ñ" 2§7¡7§<¡<°·±·±ÀÓ0IÈ2Ï9É9Ó#UÓV€Ø˜#Ÿ(™(Ô"Ø‡H�H‡O�O�A�Ô'Ý $Û ð × 'Ò 'Ô )õSñ ˜Ÿ™ �×%Ò%ðÝKáŒ	Øõ
Fð. Ð ð Ð6¸¸IÐFØ˜°Ð;MÐ0NÐPYÐZØ#Ð%FÈÈIÐVØÐ!7¸¸]ÐKØÐ8¸"¸iÐHà)Ð+CÀRÈÐSà4Ð6IÈ2ÈyÐYð
Ð õð*0 ð ð0 ð ð	0 ð
 ð0 ð ð0 ð ð0 ð ð0 ð ÷0 ÷fð õ,ðJ 26Ð Ó 5õKõ÷26ð 6õ<ñ$ Ô ð × )Ò )Ô +ð ×!Ò!×#Ò#Ù
�Q‹-Ðã Û Û Û Û Ý Ý õ :Ý ?Ý ?Ý ;Ý ;ç ^Ý ;Ý ;Ý =Ý 9Ý =Ý ;Ý ?Ý ;Ý =Ý =Ý AÝ CÝ 9Ý ;Ý =Ý EÝ =Ý 9Ý ?Ý =Ý Cß WÝ 7Ý 9Ý GÝ =Ý 7Ý ;Ý AÝ ;Ý EÝ =Ý ?Ý ?Ý 7Ý EÝ ;Ý 7Ý AÝ AÝ ?Ý ?Ý KÝ =Ý ?Ý GÝ ?Ý ?Ý 9Ý ?Ý Iß TÝ Eõ	ñ �M×2Ó2Ó4Ó5€Ø × )Ò )Ô +ð 1Ð ð %)Ð Ó (õõ/õõ1õ(õVHõ$4õ<õ$!õEBðP ˆzÔ™g c§k¢k§o¢o°jÓ&AÀ:ÈtÓTÐX`Ô`ð ‡K‚K×ÒÐ,¨c¯kªk¸*Õ.EÔFÙ Ô ð	ÝRáÔð
 ‡8�8ˆC…=�T�FÔÝ'á
‘X˜cŸh™h r�lÓ+Ó
,Ð,ð" ‡<‚<�7ÔðÝEà×8Ó8¸ÔIõ .Ý 4ñ
 ˜|¨fÕ4Õ 5ð Ð ð	õ `áÓ! MÕ1€IØ×Ò×ÒÙ.¨yÓ9ˆØ"¨"¯*ª*Ô4Ø+×/Ò/°
¸BÓ?ˆNÙ˜.¨$×/Ò/Ø .× 2Ò 2Ð3CÓ D�Ø Ò,Ù:=¸mÓ:L×:RÒ:RÓ:T�B—J’JÐ6Ñ7Ø'×+Ò+¨I°rÓ:ˆÙ�n d×+Ò+°×0BÒ0BÀ<×0PÒ0PØ $ÐØØð	Ý>áñ ÑL C§H¡H¨R¦LÓLÈbÓQÙ7ô8ñ ð õ÷ ðÝIá˜$Õó Û Ý ÷÷ ÷ ÷ ÷ ÷ ó ÷. AÐ @Ø	×	Ó	˜8Ó	$�÷÷ ÷ ô ÷÷ ð ÷
 ^Ð ]÷÷ ÷ ÷ ÷ ô ÷ð ÷÷ ÷ ÷ ÷ ÷ ð ÷÷ ÷ ÷ ÷ ÷ ÷ ÷ ÷ ÷ ÷ ÷ ÷ ð ÷6 gÔ f÷÷ ÷ ÷ ÷ ÷ ÷ ô ÷ ð ÷÷ ÷ ô ÷ð ÷÷ ô ÷÷ ÷ ô ÷ñ öö&)öX1ö"Gö	ööö"Cöö$ð&YÀ÷ Yð YöxSölð. ×Òñó ñö6÷ñ ö0ö0ö,K ö\ö<2Cöjö20öfñDÑ ógóTóðÐRWð Ðdf÷ ð ò& ˜[Ð*<Ð>PÐVqÔr�	Ú˜[Ð*;¸_ÐR|Ô}�	Ú˜lÐ,=Ð?OÑUuÔv�
Ú™JÑ(BÁNÑXtÔu�Ú™lÑ,?ÁÑTtÔu�
Ú™JÑ(9¹>ÐZ^ÑdzÕ{�Ú™}Ñ.BÑDUÐfjñ  qSõ  T�Ú™lÑ,?ÑAQÐbfñ  mQõ  R�
Ú™}Ñ.GÑI[Ðlpñ  wjõ  k�Ú™[Ñ*<¹oÑSzÔ{�	Ú™lÑ,?ÁÐ^bñ  iPõ  Q�
Ú™JÑ(9¹:ÑKvÔw�Ú™[Ñ*<¹kÑOrÔs�	Ú™JÑ(=¹~ÑSxÔy�Ú™lÑ,?ÁÐ^bñ  iSõ  T�
Ú)Ñ*BÑDcÑe}ñ  DEô  FÑ Ú%Ñ&:Ñ<WÑYmñ  tjô  kÑ Ú"Ñ#4Ñ6NÑPañ  hiô  j�Ú™}Ñ.BÑDUÓV�Ú™}Ñ.FÑHYÓZ�Ú
™9Ñ&=¹}Ð]aÕ
b�ô
ð.ÙÒ>ðá	Ò0ðñ Ò>ðñ Ò:ð	ñ
 ÒBðñ ÒDðñ Ò>ðñ ÒLðñ Ò@ðñ Ò8ðñ Ò3ðñ Ò7ðñ Ò<ðñ Ò9ðñ Ò8ðñ  Ò8ð!ñ" Ò6ð#ñ$ ÒDñ%Ñ ÷,6ð 6ô9ôxH÷4['ñ|ÀT÷ ò ñ ñ ñ "ñ $ñ "ñ $ñ !ñ #ð57Ñ ó ñ> '>×&CÒ&CÔ&Eõ(Ù&E‘]�VÓRWÈ$ˆ&‚LÑRW�DÑ&Eó(Ñ ó ô
ô'ô
ôô
ôñG°÷ Gò Gô
,ô
!÷Hð ÷,ð ÷Cð C÷L ;Ñ :ò ÓòM2ó ñM2÷b$ð $÷N /Ñ .÷/ð /ô4÷66ð 6÷<ð ÷,Nð Nôb7÷tôô*ò !ðÙðÙðÙ"ðÙ$,ðÙ.7ðØ9FðÙHWðÙYeðáðá$ðñ 	ðñ ðñ $ðñ &/ðð 1<ðð >Eðñ GNðñ PXðñ 	ð	ñ ð	ñ %ð	ñ '0ð	ñ 29ð	ñ ;Cð	ñ EOð	ð
 	ðð
 ðñ
 #ðñ
 %,ðñ
 .6ðñ
 8>ðñ
 @Eðñ
 GLðñ
 NVðñ
 Xaðñ
 chðñ 	ðñ "ðñ $.ðð 	ðñ ðñ  )ðñ +2ðñ 4:ðñ <Bðñ DMðñ OWðñ Ybðñ 	ðñ ðñ 	ðð 	ðñ 	ðñ ðñ $ðñ 	ðð ðñ "ðñ $,ðñ .5ðñ 7Bðñ DLðñ 	ðñ ðñ 	ðñ ðñ  0ðð 2<ðñ >Dðñ FOðð Q[ðñ 	ðñ  	ð!ñ$ 	ð%óÑ ÷0	%ð 	%÷Cð C÷
ð 
ó6 .�á
‰^™e¡V˜_Ð-ÙÑ!¡E 7Ð+ðÑ ÷"ð "÷$Jð J÷Rð R÷*ð *÷P
ð P
÷f,ð ,÷6ð 6÷1ð 1÷>)ð )÷ (ð (ô÷ð ÷$ð $÷N1ð 1÷h3ð 3÷l ð  ÷F2ð 2÷ 
@ð 
@÷Sð Sô>mô`%÷Pð óoðd ˆzÔÙ†Fñ øðmn ô Ø
‡x�xÐ%Ô%Øõ &ûðûðp ô Úðûðv ô 	Úð	ûð: ô ÚðûðL ô 	Úð	ûð  ô 	Úð	ûð ô ÚðüôT*(s¢   Œw> Äx% Ñx3 Òy Ó*y Ô;y Ô>Ay Öy Ö3y Ö88y ×9y+ ì<y9÷>x"øxøx"ø%x0ø/x0ø3x>ø=x>ùyùyùyùyùy(ù'y(ù+y6ù5y6