§
    ¦¨îi¡¡ ã                   óB  — U d Z ddlZddlZddlZddlZddlZddlmZ ddlm	Z	 dÅd„Z
deddfd„Z ee¦  «        j        j                             ¦   «         Zej                             d ee¦  «        ¦  «         dÅd	„Z e¦   «          dd
lmZ ddlmZ  eedz  ¬¦  «         	 dej        vrºddlZ e¦   «         dz  Ze                     ¦   «         r” eed¬¦  «        5 Z ej        e¦  «        pi                       di ¦  «        Z!ddd¦  «         n# 1 swxY w Y    e"e!e#¦  «        r<e!                      d¦  «        Z$e$�% ee$¦  «         %                    ¦   «         ej        d<   [![n# e&$ r Y nw xY w	 ddl'm(Z)  e)d¬¦  «         n# e&$ r Y nw xY w	 ddlm*Z+ ddl,m-Z.  e+¦   «         Z/e/                      di ¦  «        Z0 e"e0e#¦  «        r!e0                      d¦  «        r e.d¬¦  «         [/[0n# e&$ r Y nw xY wddl1Z1ddl2Z3ddl4m4Z4 ddl5m6Z6m7Z7 ddl,m8Z8m9Z9  e1j:        e;¦  «        Z<defd „Z=de>fd!„Z?d"e@de	e         fd#„ZAdÆd$ede	e         fd%„ZBdÇd'e@d(ed)e>fd*„ZCd+e#d,e@fd-„ZDd.ede	e         fd/„ZEd0e	e         ddfd1„ZFd2ede>fd3„ZGd4ede	e         fd5„ZHd4ede>fd6„ZId4ede>fd7„ZJdÅd8„ZKd4ed9e>deLe@e         ef         fd:„ZM	 	 	 	 dÈd;e	e         d9e>d<e	e         d=e	e         fd>„ZNd?„ ZOd@„ ZPdA„ ZQdB„ ZRdC„ ZSdÉdD„ZTdE„ ZUg dF¢ZVe@eLeeef                  eWdG<   dHe#defdI„ZXdJdJdJdKœdLed=ed<edMedNeddfdO„ZYdeZfdP„Z[dÅdQ„Z\dLeddfdR„Z]	 dÊdLedSedTe@dUeddf
dV„Z^dLedHe#ddfdW„Z_ddXœdY„Z`dÊdZ„ZadÊd[„ZbdËd\„ZcdÊd]„Zdd^d_gZedÊd`„ZfdÊda„Zgdb„ ZhdMedefdc„ZidÊdd„Zj	 dÌde„ZkdÊdf„Zldg„ Zmdh„ ZnddilompZp defdj„Zqdkeddfdl„ZrdÊdm„ZsdÊdn„ZtdÊdo„ZudÊdp„ZvdMedefdq„Zwdredefds„ZxdÊdt„ZydÊdu„ZzdÊdv„Z{dÊdw„Z|dx„ Z}dÊdy„Z~dz„ Zd{„ Z€d|„ Z�d}„ Z‚d~„ Zƒd„ Z„d€„ Z…d�„ Z†d‚„ Z‡dƒ„ Zˆd„„ Z‰d…„ ZŠd†„ Z‹d‡„ ZŒdˆ„ Z�d‰„ ZŽd2edeZfdŠ„Z�dÍdŒed�edŽe�defd�„Z‘d&d�œd‘ed’e>de>fd“„Z’d”„ Z“d•e@e         d–ede	e         fd—„Z”d•e@e         d–ed˜ede	e         fd™„Z•	 dÉd˜edše	e         ddfd›„Z–	 	 dÎd•e@e         d–ed˜edœe>de>f
d�„Z—h dž£Z˜dŸZ™d Zšd•e@e         d–ede	e         fd¡„Z›d¢e	e         de>fd£„Zœd•e@e         d–ede>fd¤„Z�d•e@e         d–ede>fd¥„Zžd•e@e         d–ed¦ed§edeZf
d¨„ZŸde>fd©„Z dª„ Z¡d•e@e         d–ede>fd«„Z¢d•e@e         d–eddfd¬„Z£d­„ Z¤de@e         fd®„Z¥dd¯œd°e@e         d±e#eef         dz  ddfd²„Z¦dÅd³„Z§ G d´„ dµ¦  «        Z¨dÇd¶e>fd·„Z©d¸„ Zªd¹„ Z«dÅdº„Z¬d»„ Z­d¶e>fd¼„Z®d½e@de@fd¾„Z¯d¿„ Z°dÀ„ Z±dÉdÁ„Z²dÂ„ Z³dÃ„ Z´e;dÄk    r e´¦   «          dS dS )Ïuö	  
Hermes CLI - Main entry point.

Usage:
    hermes                     # Interactive chat (default)
    hermes chat                # Interactive chat
    hermes gateway             # Run gateway in foreground
    hermes gateway start       # Start gateway as service
    hermes gateway stop        # Stop gateway service
    hermes gateway status      # Show gateway status
    hermes gateway install     # Install gateway service
    hermes gateway uninstall   # Uninstall gateway service
    hermes setup               # Interactive setup wizard
    hermes logout              # Clear stored authentication
    hermes status              # Show status of all components
    hermes cron                # Manage cron jobs
    hermes cron list           # List cron jobs
    hermes cron status         # Check if cron scheduler is running
    hermes doctor              # Check configuration and dependencies
    hermes honcho setup                    # Configure Honcho AI memory integration
    hermes honcho status                   # Show Honcho config and connection status
    hermes honcho sessions                 # List directory â†’ session name mappings
    hermes honcho map <name>               # Map current directory to a session name
    hermes honcho peer                     # Show peer names and dialectic settings
    hermes honcho peer --user NAME         # Set user peer name
    hermes honcho peer --ai NAME           # Set AI peer name
    hermes honcho peer --reasoning LEVEL   # Set dialectic reasoning level
    hermes honcho mode                     # Show current memory mode
    hermes honcho mode [hybrid|honcho|local]  # Set memory mode
    hermes honcho tokens                   # Show token budget settings
    hermes honcho tokens --context N       # Set session.context() token cap
    hermes honcho tokens --dialectic N     # Set dialectic result char cap
    hermes honcho identity                 # Show AI peer identity representation
    hermes honcho identity <file>          # Seed AI peer identity from a file (SOUL.md etc.)
    hermes honcho migrate                  # Step-by-step migration guide: OpenClaw native â†’ Hermes + Honcho
    hermes version             Show version
    hermes update              Update to latest version
    hermes uninstall           Uninstall Hermes Agent
    hermes acp                 Run as an ACP server for editor integration
    hermes sessions browse     Interactive session picker with search

    hermes claw migrate --dry-run  # Preview migration without changes
é    N)ÚPath)ÚOptionalÚreturnc                 óL   — |                       ddt          j        d¬¦  «         dS )zzAttach the ``--accept-hooks`` flag.  Shared across every agent
    subparser so the flag works regardless of CLI position.ú--accept-hooksÚ
store_truezuAuto-approve unseen shell hooks without a TTY prompt (equivalent to HERMES_ACCEPT_HOOKS=1 / hooks_auto_accept: true).©ÚactionÚdefaultÚhelpN)Úadd_argumentÚargparseÚSUPPRESS)Úparsers    ú1/home/div/.hermes/hermes-agent/hermes_cli/main.pyÚ_add_accept_hooks_flagr   6   s=   € ð ×ÒØØÝÔ!ðOð ñ ô ð ð ð ó    Úcommand_namec                 ó¬   — t           j                             ¦   «         s5t          d| › d�t           j        ¬¦  «         t          j        d¦  «         dS dS )a  Exit with a clear error if stdin is not a terminal.

    Interactive TUI commands (hermes tools, hermes setup, hermes model) use
    curses or input() prompts that spin at 100% CPU when stdin is a pipe.
    This guard prevents accidental non-interactive invocation.
    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.©Úfileé   N)ÚsysÚstdinÚisattyÚprintÚstderrÚexit)r   s    r   Ú_require_ttyr   D   sk   € õ Œ9×ÒÑÔð Ýð9˜lð 9ð 9ð 9õ ”ð		
ñ 	
ô 	
ð 	
õ 	Œ�‰Œˆˆˆðð r   c                  óº  — t           j        dd…         } d}d}t          | ¦  «        D ]c\  }}|dv r%|dz   t          | ¦  «        k     r| |dz            }d} n6|                     d¦  «        r |                     dd¦  «        d         }d} nŒd|€r	 ddlm}  |¦   «         d	z  }|                     ¦   «         r2| 	                    ¦   «          
                    ¦   «         }|r
|d
k    r|}d}n# t          t          f$ r Y nw xY w|��T	 ddlm}  ||¦  «        }	n‚# t          t           f$ r<}
t#          d|
› �t           j        ¬¦  «         t          j        d¦  «         Y d}
~
n:d}
~
wt(          $ r*}
t#          d|
› d�t           j        ¬¦  «         Y d}
~
dS d}
~
ww xY w|	t*          j        d<   |dk    r¬t          | ¦  «        D ]ž\  }}|dv r>|dz   }t           j        d|…         t           j        ||z   d…         z   t           _         dS |                     d¦  «        r>|dz   }t           j        d|…         t           j        |dz   d…         z   t           _         dS Œ›dS dS dS )zAPre-parse --profile/-p and set HERMES_HOME before module imports.r   Nr   )z	--profilez-pé   z
--profile=ú=©Úget_default_hermes_rootÚactive_profiler   )Úresolve_profile_envúError: r   z"Warning: profile override failed (z), using defaultÚHERMES_HOME)r   ÚargvÚ	enumerateÚlenÚ
startswithÚsplitÚhermes_constantsr$   ÚexistsÚ	read_textÚstripÚUnicodeDecodeErrorÚOSErrorÚhermes_cli.profilesr&   Ú
ValueErrorÚFileNotFoundErrorr   r   r   Ú	ExceptionÚosÚenviron)r)   Úprofile_nameÚconsumeÚiÚargr$   Úactive_pathÚnamer&   Úhermes_homeÚexcÚstarts               r   Ú_apply_profile_overriderC   c   s  € åŒ8�A�B�BŒ<€DØ€LØ€Gõ ˜D‘/”/ð ð ‰ˆˆ3ØÐ%Ð%Ð%¨!¨a©%µ#°d±)´)Ò*;Ð*;Ø  A¡œ;ˆLØˆGØˆEØ�^Š^˜LÑ)Ô)ð 	ØŸ9š9 S¨!Ñ,Ô,¨QÔ/ˆLØˆGØˆEð	ð Ðð
	Ø@Ð@Ð@Ð@Ð@Ð@à1Ð1Ñ3Ô3Ð6FÑFˆKØ×!Ò!Ñ#Ô#ð  Ø"×,Ò,Ñ.Ô.×4Ò4Ñ6Ô6�Øð  ˜D IÒ-Ð-Ø#'�LØ�GøøÝ"¥GÐ,ð 	ð 	ð 	ØˆDð	øøøð Ñð	Ø?Ð?Ð?Ð?Ð?Ð?à-Ð-¨lÑ;Ô;ˆKˆKøÝÕ-Ð.ð 	ð 	ð 	Ý�/˜C�/�/­¬
Ð3Ñ3Ô3Ð3ÝŒH�Q‰KŒKˆKˆKˆKˆKˆKˆKøøøøÝð 	ð 	ð 	åØJ°SÐJÐJÐJÝ”Zðñ ô ð ð ˆFˆFˆFˆFˆFøøøøð	øøøð %0�Œ
�=Ñ!à�QŠ;ˆ;Ý# D™/œ/ð ð ‘��3ØÐ-Ð-Ð-Ø ™E�EÝ"œx¨¨¨Ô/µ#´(¸5À7¹?Ð;LÐ;LÔ2MÑM•C”HØ�E�EØ—^’^ LÑ1Ô1ð Ø ™E�EÝ"œx¨¨¨Ô/µ#´(¸5À1¹9¸;¸;Ô2GÑG•C”HØ�E�Eðð/  Ðð" ˆ;ðð s7   ÂAC) Ã)C=Ã<C=ÄD ÄFÄ'2EÅFÅ+FÆF©Úget_hermes_home)Úload_hermes_dotenvú.env)Úproject_envÚHERMES_REDACT_SECRETSzconfig.yamlúutf-8©ÚencodingÚsecurityÚredact_secrets)Úsetup_loggingÚcli)Úmode©Úload_config)Úapply_ipv4_preferenceÚnetworkÚ
force_ipv4T)Úforce)Údatetime)Ú__version__Ú__release_date__)ÚAI_GATEWAY_BASE_URLÚOPENROUTER_BASE_URLc                 óF  — | sdS t          j        ¦   «         | z
  }|dk     rdS |dk     rt          |dz  ¦  «        › d�S |dk     rt          |dz  ¦  «        › d�S |dk     rd	S |d
k     rt          |dz  ¦  «        › d�S t          j        | ¦  «                             d¦  «        S )zBFormat a timestamp as relative time (e.g., '2h ago', 'yesterday').ú?é<   zjust nowi  zm agoi€Q zh agoi £ Ú	yesterdayi€:	 zd agoz%Y-%m-%d)Ú_timeÚtimeÚintrX   ÚfromtimestampÚstrftime)ÚtsÚdeltas     r   Ú_relative_timerh   Þ   sÄ   € àð ØˆsÝŒJ‰LŒL˜2Ñ€EØˆr‚z€zØˆzØˆt‚|€|Ý�e˜b‘j‘/”/Ð(Ð(Ð(Ð(Øˆu‚}€}Ý�e˜d‘lÑ#Ô#Ð*Ð*Ð*Ð*Øˆv‚~€~Øˆ{Øˆv‚~€~Ý�e˜e‘mÑ$Ô$Ð+Ð+Ð+Ð+ÝÔ! "Ñ%Ô%×.Ò.¨zÑ:Ô:Ð:r   c                  ó°  — ddl m} m}m} ddlm} ddl m} |                     dd¦  «        } |¦   «         }|                     d¦  «        }t          |t          ¦  «        r*|                     d¦  «        pd 
                    ¦   «         }n,t          |t          ¦  «        r| 
                    ¦   «         }nd}|o||k    }	ddlm}
 h d	£}|
                     ¦   «         D ]'}|j        d
k    r|                     |j        ¦  «         Œ(t#          d„ |D ¦   «         ¦  «        rdS  | ¦   «         }|                     ¦   «         rÄ	 |                     ¦   «                              ¦   «         D ]‹}| 
                    ¦   «         }|                     d¦  «        sd|vrŒ0|                     d¦  «        \  }}}| 
                    ¦   «          
                    d¦  «        }| 
                    ¦   «         |v r|r dS ŒŒn# t.          $ r Y nw xY w	 |
                     ¦   «         D ]4\  }}|j        d
k    rŒ ||¦  «        }|                     d¦  «        r dS Œ5n# t.          $ r Y nw xY w |¦   «         dz  }|                     ¦   «         rv	 ddl}|                     |                     ¦   «         ¦  «        }|                     d¦  «        }|r" ||¦  «        }|                     d¦  «        rdS n# t.          $ r Y nw xY wt          |t          ¦  «        rƒ|                     d¦  «        pd 
                    ¦   «         }|                     d¦  «        pd 
                    ¦   «         }|                     d
¦  «        pd 
                    ¦   «         }|s|s|rdS |	rH	 ddlm}m}  |¦   «         }|r" ||¦  «        s|                     d¦  «        rdS n# t.          $ r Y nw xY wdS )z3Check if at least one inference provider is usable.r   )Úget_env_pathrE   rS   )Úget_auth_status)ÚDEFAULT_CONFIGÚmodelÚ r   )ÚPROVIDER_REGISTRY>   ÚOPENAI_API_KEYÚANTHROPIC_TOKENÚOPENAI_BASE_URLÚANTHROPIC_API_KEYÚOPENROUTER_API_KEYÚapi_keyc              3   ó>   K  — | ]}t          j        |¦  «        V — Œd S ©N)r8   Úgetenv)Ú.0Úvs     r   ú	<genexpr>z/_has_any_provider_configured.<locals>.<genexpr>  s*   è è € Ð
3Ð
3˜A�2Œ9�Q‰<Œ<Ð
3Ð
3Ð
3Ð
3Ð
3Ð
3r   Tú#r"   z'"Ú	logged_inz	auth.jsonNÚactive_providerÚproviderÚbase_url)Úread_claude_code_credentialsÚis_claude_code_token_validÚrefreshTokenF)Úhermes_cli.configrj   rE   rS   Úhermes_cli.authrk   rl   ÚgetÚ
isinstanceÚdictr1   Ústrro   ÚvaluesÚ	auth_typeÚupdateÚapi_key_env_varsÚanyr/   r0   Ú
splitlinesr,   Ú	partitionr7   ÚitemsÚjsonÚloadsÚagent.anthropic_adapterr�   r‚   )rj   rE   rS   rk   rl   Ú_DEFAULT_MODELÚcfgÚ	model_cfgÚ_model_nameÚ_has_hermes_configro   Úprovider_env_varsÚpconfigÚenv_fileÚlineÚkeyÚ_ÚvalÚprovider_idÚstatusÚ	auth_filer’   ÚauthÚactiveÚcfg_providerÚcfg_base_urlÚcfg_api_keyr�   r‚   Úcredss                                 r   Ú_has_any_provider_configuredrª   ð   sà  € àLÐLÐLÐLÐLÐLÐLÐLÐLÐLØ/Ð/Ð/Ð/Ð/Ð/ð 1Ð0Ð0Ð0Ð0Ð0à#×'Ò'¨°Ñ4Ô4€NØ
ˆ+‰-Œ-€CØ—’˜Ñ Ô €IÝ�)�TÑ"Ô"ð Ø —}’} YÑ/Ô/Ð5°2×<Ò<Ñ>Ô>ˆˆÝ	�I�sÑ	#Ô	#ð Ø—o’oÑ'Ô'ˆˆàˆØ$ÐF¨¸Ò)FÐð
 2Ð1Ð1Ð1Ð1Ð1ðð ð Ðð %×+Ò+Ñ-Ô-ð ?ð ?ˆØÔ 	Ò)Ð)Ø×$Ò$ WÔ%=Ñ>Ô>Ð>øÝ
Ð
3Ð
3Ð!2Ð
3Ñ
3Ô
3Ñ3Ô3ð Øˆtð ˆ|‰~Œ~€HØ‡‚ÑÔð ð
	Ø ×*Ò*Ñ,Ô,×7Ò7Ñ9Ô9ð  ð  �Ø—z’z‘|”|�Ø—?’? 3Ñ'Ô'ð ¨3°d¨?¨?ØØ"Ÿnšn¨SÑ1Ô1‘��Q˜Ø—i’i‘k”k×'Ò'¨Ñ.Ô.�Ø—9’9‘;”;Ð"3Ð3Ð3¸Ð3Ø˜4˜4øð øõ ð 	ð 	ð 	ØˆDð	øøøðØ$5×$;Ò$;Ñ$=Ô$=ð 	ð 	Ñ ˆK˜ØÔ  IÒ-Ð-ØØ$�_ [Ñ1Ô1ˆFØ�zŠz˜+Ñ&Ô&ð Ø�t�tðð		øõ ð ð ð Øˆðøøøð  �Ñ!Ô! KÑ/€IØ×ÒÑÔð ð
	ØˆKˆKˆKà—:’:˜i×1Ò1Ñ3Ô3Ñ4Ô4ˆDØ—X’XÐ/Ñ0Ô0ˆFØð  Ø(˜¨Ñ0Ô0�Ø—:’:˜kÑ*Ô*ð  Ø˜4øøÝð 	ð 	ð 	ØˆDð	øøøõ �)�TÑ"Ô"ð Ø!Ÿš jÑ1Ô1Ð7°R×>Ò>Ñ@Ô@ˆØ!Ÿš jÑ1Ô1Ð7°R×>Ò>Ñ@Ô@ˆØ —}’} YÑ/Ô/Ð5°2×<Ò<Ñ>Ô>ˆØð 	˜<ð 	¨;ð 	Ø�4ð
 ð ð	ðð ð ð ð ð ð ð ð
 1Ð0Ñ2Ô2ˆEØð Ø*Ð*¨5Ñ1Ô1ðØ5:·Y²Y¸~Ñ5NÔ5Nðð �tøøÝð 	ð 	ð 	ØˆDð	øøøð ˆ5sW   Ä?B/G2 Ç0G2 Ç2
G?Ç>G?ÈAI ÉI É
IÉIÉ?A"K$ Ë$
K1Ë0K1Î4O Ï
OÏOÚsessionsc                 óš  ‡ ‡‡‡‡— ‰ st          d¦  «         dS 	 ddlŠdgŠd„ Šd„ Šˆˆˆˆˆ fd„}‰                     |¦  «         ‰d         S # t          $ r Y nw xY wt          d¦  «         t	          ‰ ¦  «        D ]ä\  }}|                     d¦  «        pd	                     ¦   «         }|                     d
¦  «        pd	                     ¦   «         }|p	|p|d         }t          |¦  «        dk    r|dd…         dz   }t          |                     d¦  «        ¦  «        }|                     dd	¦  «        dd…         }t          d|dz   d›d|d›d|d›d|› �¦  «         Œå	 	 t          dt          ‰ ¦  «        › d�¦  «                             ¦   «         }	|	r|	 
                    ¦   «         dv rdS t          |	¦  «        dz
  }
d|
cxk    rt          ‰ ¦  «        k     rn n‰ |
         d         S t          dt          ‰ ¦  «        › d�¦  «         n@# t          $ r t          d¦  «         Y n%t          t          f$ r t          ¦   «          Y dS w xY wŒì)a  Interactive curses-based session browser with live search filtering.

    Returns the selected session ID, or None if cancelled.
    Uses curses (not simple_term_menu) to avoid the ghost-duplication rendering
    bug in tmux/iTerm when arrow keys are used.
    úNo sessions found.Nr   c                 óÎ  — |                       d¦  «        pd                     ¦   «         }|                       d¦  «        pd                     ¦   «         }|                       dd¦  «        dd…         }t          |                       d¦  «        ¦  «        }| d         dd	…         }d
}t          d||z
  ¦  «        }|r|d|…         }	n|r|d|…         }	n|}	|	d|› �›d|d›d|d›d|› �S )z!Format a session row for display.Útitlern   ÚpreviewÚsourceNé   Úlast_activeÚidé   é-   é   ú<ú  ú<10ú<5ú )r†   r1   rh   Úmax)
ÚsÚmax_xr¯   r°   r±   r³   ÚsidÚ
fixed_colsÚ
name_widthr?   s
             r   Ú_format_rowz+_session_browse_picker.<locals>._format_rows  s  € à—U’U˜7‘^”^Ð) r×0Ò0Ñ2Ô2ˆEØ—u’u˜YÑ'Ô'Ð-¨2×4Ò4Ñ6Ô6ˆGØ—U’U˜8 RÑ(Ô(¨¨!¨Ô,ˆFÝ(¨¯ª¨}Ñ)=Ô)=Ñ>Ô>ˆKØ�D”'˜#˜2˜#”,ˆCð -ˆJÝ˜R ¨Ñ!3Ñ4Ô4ˆJàð Ø˜[˜j˜[Ô)��Øð Ø˜{ 
˜{Ô+��à�àÐP˜ZÐPÐPÐPÐP¨KÐPÐPÐP¸vÐPÐPÐPÈ3ÐPÐPÐPr   c                 ó€  — |                      ¦   «         }||                      d¦  «        pd                      ¦   «         v p||                      d¦  «        pd                      ¦   «         v pT||                      dd¦  «                              ¦   «         v p*||                      d¦  «        pd                      ¦   «         v S )z?Check if a session matches the search query (case-insensitive).r¯   rn   r°   r´   r±   )Úlowerr†   )r¾   ÚqueryÚqs      r   Ú_matchz&_session_browse_picker.<locals>._match‰  s°   € à—’‘”ˆAà�a—e’e˜G‘n”nÐ*¨×1Ò1Ñ3Ô3Ð3ð 8Ø˜Ÿš˜yÑ)Ô)Ð/¨R×6Ò6Ñ8Ô8Ð8ð8à˜Ÿš˜d B™œ×-Ò-Ñ/Ô/Ð/ð8ð ˜Ÿš˜x™œÐ.¨B×5Ò5Ñ7Ô7Ð7ð	r   c           
      óæ  •‡— ‰                      d¦  «         ‰                     ¦   «         r“‰                     ¦   «          ‰                     ¦   «          ‰                     d‰j        d¦  «         ‰                     d‰j        d¦  «         ‰                     d‰j        d¦  «         ‰                     ddd¦  «         d}d}dŠt          ‰¦  «        }	 |  	                    ¦   «          |  
                    ¦   «         \  }}|d
k     s|dk     rS	 |                      ddd¦  «         n# ‰j        $ r Y nw xY w|                      ¦   «          |                      ¦   «          d S ‰r:d‰› d�}‰j        }‰                     ¦   «         r|‰                     d¦  «        z  }n5d}‰j        }‰                     ¦   «         r|‰                     d¦  «        z  }	 |                      dd||dz
  |¦  «         n# ‰j        $ r Y nw xY wd}t%          d||z
  ¦  «        }	ddd|	› �›ddd›ddd›dd› �}
	 ‰                     ¦   «         r‰                     d¦  «        n‰j        }|                      dd|
|dz
  |¦  «         n# ‰j        $ r Y nw xY w|dz
  }|dk     rd}|s7	 d}|                      dd||dz
  ‰j        ¦  «         �n:# ‰j        $ r Y �n-w xY w|t)          |¦  «        k    rt)          |¦  «        dz
  }|dk     rd}||k     r|}n|||z   k    r||z
  dz   }t+          t-          |t/          t)          |¦  «        ||z   ¦  «        ¦  «        ¦  «        D ]¦\  }}|dz   }||dz
  k    r n’||         }||k    rdnd}| ‰||dz
  ¦  «        z   }‰j        }||k    r3‰j        }‰                     ¦   «         r|‰                     d¦  «        z  }	 |                      |d||dz
  |¦  «         Œ—# ‰j        $ r Y Œ£w xY w|dz
  }|rPd|dz   › dt)          |¦  «        › d�}t)          |¦  «        t)          ‰¦  «        k     r|d t)          ‰¦  «        › d!�z  }nd"t)          ‰¦  «        › d�}	 |                      |d||dz
  ‰                     ¦   «         r‰                     d¦  «        n‰j        ¦  «         n# ‰j        $ r Y nw xY w|                      ¦   «          |                      ¦   «         }|‰j        fv r|r|dz
  t)          |¦  «        z  }ní|‰j        fv r|r|dz   t)          |¦  «        z  }nË|‰j        d#d$fv r|r||         d%         ‰d<   d S |d&k    r‰rdŠt          ‰¦  «        }d}d}nŒd S |‰j        d'dfv r2‰r/‰d d…         Š‰rˆˆfd(„‰D ¦   «         }nt          ‰¦  «        }d}d}nL|t;          d)¦  «        k    r‰sd S d*|cxk    rd+k    r(n n%‰t=          |¦  «        z  Šˆˆfd,„‰D ¦   «         }d}d}�Œ)-Nr   r   éÿÿÿÿr!   é   é   é   rn   Té   é(   zTerminal too smallu     Browse sessions â€” filter: u   â–ˆuM     Browse sessions â€” â†‘â†“ navigate  Enter select  Type to filter  Esc quitr¶   r·   z   zTitle / Previewr¸   r¹   ÚActiverº   ÚSrcr»   r¼   ÚIDz  No sessions match the filter.õ    â†’ ú/ú	 sessionsz (filtered from ú)z  0/é
   é   r´   é   é   c                 ó,   •— g | ]} ‰|‰¦  «        ¯|‘ŒS © rÜ   ©ry   r¾   rÈ   Úsearch_texts     €€r   ú
<listcomp>zB_session_browse_picker.<locals>._curses_browse.<locals>.<listcomp>%  s*   ø€ Ð'VÐ'VÐ'V¨a¸v¸vÀaÈÑ?UÔ?UÐ'V¨Ð'VÐ'VÐ'Vr   rÇ   é    é~   c                 ó,   •— g | ]} ‰|‰¦  «        ¯|‘ŒS rÜ   rÜ   rÝ   s     €€r   rß   zB_session_browse_picker.<locals>._curses_browse.<locals>.<listcomp>/  s*   ø€ ÐNÐNÐN a°v°v¸aÀÑ7MÔ7MÐN ÐNÐNÐNr   )Úcurs_setÚ
has_colorsÚstart_colorÚuse_default_colorsÚ	init_pairÚCOLOR_GREENÚCOLOR_YELLOWÚ
COLOR_CYANÚlistÚclearÚgetmaxyxÚaddstrÚerrorÚrefreshÚgetchÚA_BOLDÚ
color_pairÚaddnstrr½   ÚA_DIMr+   r*   ÚrangeÚminÚA_NORMALÚKEY_UPÚKEY_DOWNÚ	KEY_ENTERÚKEY_BACKSPACEÚordÚchr)ÚstdscrÚcursorÚscroll_offsetÚfilteredÚmax_yr¿   ÚheaderÚheader_attrrÁ   rÂ   Ú
col_headerÚdim_attrÚvisible_rowsÚmsgÚdraw_ir<   Úyr¾   ÚarrowÚrowÚattrÚfooter_yÚfooterrž   rÞ   rÃ   rÈ   ÚcursesÚresult_holderr«   s                           @€€€€€r   Ú_curses_browsez._session_browse_picker.<locals>._curses_browse“  sº  øø€ Ø�OŠO˜AÑÔÐØ× Ò Ñ"Ô"ð +Ø×"Ò"Ñ$Ô$Ð$Ø×)Ò)Ñ+Ô+Ð+Ø× Ò   FÔ$6¸Ñ;Ô;Ð;Ø× Ò   FÔ$7¸Ñ<Ô<Ð<Ø× Ò   FÔ$5°rÑ:Ô:Ð:Ø× Ò   A rÑ*Ô*Ð*àˆFØˆMØˆKÝ˜H‘~”~ˆHðO&Ø—’‘”�Ø%ŸšÑ0Ô0‘��uØ˜1’9�9 ¨¢
 
ðØŸš a¨Ð,@ÑAÔAÐAÐAøØ!œ<ð ð ð Ø˜ðøøøà—N’NÑ$Ô$Ð$Ø—L’L‘N”N�NØ�Fð ð 	<ØN¸kÐNÐNÐN�FØ"(¤-�KØ×(Ò(Ñ*Ô*ð <Ø# v×'8Ò'8¸Ñ';Ô';Ñ;˜øàl�FØ"(¤-�KØ×(Ò(Ñ*Ô*ð <Ø# v×'8Ò'8¸Ñ';Ô';Ñ;˜ðØ—N’N 1 a¨°¸±¸KÑHÔHÐHÐHøØ”|ð ð ð Ø�Dðøøøð 1�
Ý   U¨ZÑ%7Ñ8Ô8�
ØgÐ#4Ðg°zÐgÐgÐgÐgÀhÐgÐgÐgÐV[ÐgÐgÐgÐaeÐgÐg�
ðà06×0AÒ0AÑ0CÔ0CÐU˜×)Ò)¨!Ñ,Ô,Ð,ÈÌð ð —N’N 1 a¨°U¸Q±YÀÑIÔIÐIÐIøØ”|ð ð ð Ø�Dðøøøð  % q™y�Ø !Ò#Ð#Ø#$�Lð  ð $!ðØ?˜ØŸš q¨!¨S°%¸!±)¸V¼\ÑJÔJÐJÑJøØ!œ<ð ð ð Ø™ðøøøð ¥ X¡¤Ò.Ð.Ý!$ X¡¤°Ñ!2˜Ø ’z�zØ!"˜Ø Ò-Ð-Ø(.˜˜Ø =°<Ñ#?Ò?Ð?Ø(.°Ñ(=ÀÑ(A˜å%.ÝØ)Ý¥ H¡¤¨}¸|Ñ/KÑLÔLñô ñ&ô &ð !ð !™	˜ ð # Q™J˜Ø ¨¡	š>˜>Ø!˜EØ$ QœK˜Ø+,°ª;¨;  ¸E˜Ø# k k°!°U¸Q±YÑ&?Ô&?Ñ?˜Ø%œ˜Ø š;˜;Ø#)¤=˜DØ%×0Ò0Ñ2Ô2ð =Ø $¨×(9Ò(9¸!Ñ(<Ô(<Ñ < ð!Ø"ŸNšN¨1¨a°°e¸a±iÀÑFÔFÐFÐFøØ%œ|ð !ð !ð !Ø ˜Dð!øøøð ! 1™9�Øð =ØG &¨1¡*ÐGÐG­s°8©}¬}ÐGÐGÐG�FÝ˜8‘}”}¥s¨8¡}¤}Ò4Ð4ØÐ"EµS¸±]´]Ð"EÐ"EÐ"EÑE˜øà<¥C¨¡M¤MÐ<Ð<Ð<�Fð	Ø—N’NØ ØØØ ™	Ø06×0AÒ0AÑ0CÔ0CÐU˜×)Ò)¨!Ñ,Ô,Ð,ÈÌñô ð ð øð ”|ð ð ð Ø�Dðøøøð —’Ñ Ô Ð Ø—l’l‘n”n�à˜6œ=Ð*Ð*Ð*Øð >Ø"(¨1¡*µ°H±´Ñ!=˜øØ˜Vœ_Ð.Ð.Ð.Øð >Ø"(¨1¡*µ°H±´Ñ!=˜øØ˜VÔ-¨r°2Ð6Ð6Ð6Øð BØ+3°FÔ+;¸DÔ+A˜ aÑ(Ø�FØ˜B’Y�YØ"ð à&(˜Ý#'¨¡>¤>˜Ø!"˜Ø()˜˜ð ˜Ø˜VÔ1°3¸Ð:Ð:Ð:Ø"ð *Ø&1°#°2°#Ô&6˜Ø&ð 6Ø'VÐ'VÐ'VÐ'VÐ'V°8Ð'VÑ'VÔ'V˜H˜Hå'+¨H¡~¤~˜HØ!"˜Ø()˜øØ�C ™HœH’_�_¨[�_Ø�FØ˜3Ð%Ð%Ò%Ð% #Ò%Ð%Ð%Ð%Ð%à¥3 s¡8¤8Ñ+�KØNÐNÐNÐNÐN¨8ÐNÑNÔN�HØ�FØ$%�Mñ_O&sn   ÄD% Ä%
D2Ä1D2ÇG. Ç.
G;Ç:G;È(AI5 É5
JÊJÊ#J: Ê:
KËKÏO$Ï$
O1Ï0O1ÑA
R* Ò*
R7Ò6R7z:
  Browse sessions  (enter number to resume, q to cancel)
r¯   rn   r°   r´   é2   é/   ú...r³   r±   r²   r¹   r   z>3ú. ú<50rº   Tz
  Select [1-ú]: )rÇ   Úquitr   z  Invalid selection. Enter 1-z or q to cancel.z/  Invalid input. Enter a number or q to cancel.)r   r  Úwrapperr7   r*   r†   r1   r+   rh   ÚinputrÅ   rc   r5   ÚKeyboardInterruptÚEOFError)r«   r  r<   r¾   r¯   r°   Úlabelr³   Úsrcr    ÚidxrÃ   rÈ   r  r  s   `          @@@@r   Ú_session_browse_pickerr"  b  s  øøøøø€ ð ð ÝÐ"Ñ#Ô#Ð#ØˆtðIØˆˆˆà˜ˆð	Qð 	Qð 	Qð,	ð 	ð 	ð^	&ð ^	&ð ^	&ð ^	&ð ^	&ð ^	&ð ^	&ð ^	&ð ^	&ð@ 	�Š�~Ñ&Ô&Ð&Ø˜QÔÐøåð ð ð Øˆðøøøõ 
Ð
HÑIÔIÐIÝ˜(Ñ#Ô#ð Fð F‰ˆˆ1Ø—’�w‘”Ð% 2×,Ò,Ñ.Ô.ˆØ—5’5˜Ñ#Ô#Ð) r×0Ò0Ñ2Ô2ˆØÐ+˜Ð+ A d¤GˆÝˆu‰:Œ:˜Š?ˆ?Ø˜#˜2˜#”J Ñ&ˆEÝ$ Q§U¢U¨=Ñ%9Ô%9Ñ:Ô:ˆØ�eŠe�H˜bÑ!Ô! " 1 "Ô%ˆÝÐD�1�q‘5ÐDÐDÐD˜uÐDÐDÐD¨KÐDÐDÐD¸sÐDÐDÑEÔEÐEÐEðð	ÝÐ;­¨X©¬Ð;Ð;Ð;Ñ<Ô<×BÒBÑDÔDˆCØð ˜#Ÿ)š)™+œ+Ð)>Ð>Ð>Ø�tÝ�c‘(”(˜Q‘,ˆCØ�CÐ'Ð'Ò'Ð'�#˜h™-œ-Ò'Ð'Ð'Ð'Ð'Ø ”} TÔ*Ð*ÝÐQµ#°h±-´-ÐQÐQÐQÑRÔRÐRÐRøÝð 	Eð 	Eð 	EÝÐCÑDÔDÐDÐDÐDÝ!¥8Ð,ð 	ð 	ð 	Ý‰GŒGˆGØ�4�4ð	øøøðs6   š2A Á
AÁAÅ"A
H Æ.<H Ç+ H ÈI	È'I	ÉI	r±   c                 óÀ   — 	 ddl m}  |¦   «         }|                     | d¬¦  «        }|                     ¦   «          |r|d         d         S n# t          $ r Y nw xY wdS )z0Look up the most recent session ID for a source.r   ©Ú	SessionDBr   )r±   Úlimitr´   N)Úhermes_stater%  Úsearch_sessionsÚcloser7   )r±   r%  Údbr«   s       r   Ú_resolve_last_sessionr+  U  sŠ   € ð	Ø*Ð*Ð*Ð*Ð*Ð*àˆY‰[Œ[ˆØ×%Ò%¨V¸1Ð%Ñ=Ô=ˆØ
�Š‰
Œ
ˆ
Øð 	%Ø˜A”;˜tÔ$Ð$ð	%øåð ð ð Øˆðøøøàˆ4s   ‚A
A Á
AÁAFÚcmdÚbackendÚvia_sudoc                 óÞ   — 	 t          j        | ddd¬¦  «        S # t           j        $ rC |rd|› �n|}t          d|› d|› d�t          j        ¬¦  «         t	          j        d	¦  «         Y d
S w xY w)z¸Run a container inspect probe, returning the CompletedProcess.

    Catches TimeoutExpired specifically for a human-readable message;
    all other exceptions propagate naturally.
    Té   ©Úcapture_outputÚtextÚtimeoutzsudo zError: timed out waiting for z to respond.
The z+ daemon may be unresponsive or starting up.r   r   N)Ú
subprocessÚrunÚTimeoutExpiredr   r   r   r   )r,  r-  r.  r  s       r   Ú_probe_containerr8  d  s°   € ð	ÝŒ~˜c°$¸TÈ2ÐNÑNÔNÐNøÝÔ$ð ð ð Ø%-Ð:Ð!˜Ð!Ð!Ð!°7ˆÝðH¨Eð Hð HØðHð Hð Hå”ð	
ñ 	
ô 	
ð 	
õ
 	Œ�‰Œˆˆˆˆðøøøs   ‚ šAA,Á+A,Úcontainer_infoÚcli_argsc                 óL  — | d         }| d         }| d         }| d         }t          j        |¦  «        }|s3t          d|› d�t          j        ¬¦  «         t          j        d¦  «         d	}t          |d
dd|g|¦  «        }|j        dk    rðt          j        d¦  «        }|r�t          |d|d
dd|g|d¬¦  «        }	|	j        dk    rjt          d|› d|› d|› d|› dt          j	        dd¦  «        › d|› dd 
                    |¦  «        › �t          j        ¬¦  «         t          j        d¦  «         nKt          d|› d|› dd 
                    |¦  «        › �t          j        ¬¦  «         t          j        d¦  «         t          j                             ¦   «         }
|
rdgndg}g }dD ]?}t          j                             |¦  «        }|r|                     d |› d!|› �g¦  «         Œ@|r|d|gn|g}|d"gz   |z   d#|gz   |z   ||gz   |z   }t          j        |d         |¦  «         d	S )$a  Replace the current process with a command inside the managed container.

    Probes whether sudo is needed (rootful containers), then os.execvp
    into the container. On success the Python process is replaced entirely
    and the container's exit code becomes the process exit code (OS semantics).
    On failure, OSError propagates naturally.

    Args:
        container_info: dict with backend, container_name, exec_user, hermes_bin
        cli_args: the original CLI arguments (everything after 'hermes')
    r-  Úcontainer_nameÚ	exec_userÚ
hermes_binr'   z. not found on PATH. Cannot route to container.r   r   NÚinspectz--formatÚokr   Úsudoú-nT)r.  zError: container 'z' not found via zL.

The container is likely running as root. Your user cannot see it
because z7 uses per-user namespaces. Grant passwordless
sudo for u¨    â€” the -n (non-interactive) flag is required
because a password prompt would hang or break piped commands.

On NixOS:

  security.sudo.extraRules = [{
    users = [ "ÚUSERz	your-userz"" ];
    commands = [{ command = "z<"; options = [ "NOPASSWD" ]; }];
  }];

Or run: sudo hermes r¼   z<.
The container may be running under root. Try: sudo hermes z-itú-i)ÚTERMÚ	COLORTERMÚLANGÚLC_ALLú-er"   Úexecz-u)ÚshutilÚwhichr   r   r   r   r8  Ú
returncoder8   rx   Újoinr   r   r9   r†   ÚextendÚexecvp)r9  r:  r-  r<  r=  r>  ÚruntimeÚ	sudo_pathÚprobeÚprobe2Úis_ttyÚ	tty_flagsÚ	env_flagsÚvarr    Ú
cmd_prefixÚexec_cmds                    r   Ú_exec_in_containerr[  v  s'  € ð ˜YÔ'€GØ#Ð$4Ô5€NØ˜{Ô+€IØ Ô-€JåŒl˜7Ñ#Ô#€GØð ÝØM�gÐMÐMÐMÝ”ð	
ñ 	
ô 	
ð 	
õ 	Œ�‰Œˆð
 €IÝØ	�)˜Z¨¨~Ð>Øñô €Eð Ô˜1ÒÐÝ”L Ñ(Ô(ˆ	Øð  	Ý%Ø˜D '¨9°jÀ$ÈÐWØØðñ ô ˆFð
 Ô  AÒ%Ð%Ýð@¨ð @ð @Èð @ð @ð  'ð@ð @ð !(ð	@ð @õ ')¤i°¸Ñ&DÔ&Dð@ð @ð 6=ð@ð @ð ,/¯8ª8°HÑ+=Ô+=ð@ð @õ œð!ñ ô ð õ$ ”˜‘”�øåðb ^ð bð bÀWð bð bØMPÏXÊXÐV^ÑM_ÔM_ðbð bå”Zðñ ô ð õ
 ŒH�Q‰KŒKˆKåŒY×ÒÑÔ€FØ!Ð-���¨ v€Ià€IØ6ð 5ð 5ˆÝŒj�nŠn˜SÑ!Ô!ˆØð 	5Ø×Ò˜d s N N¨S N NÐ3Ñ4Ô4Ð4øà/8ÐG�)˜T 7Ð+Ð+¸w¸i€JàØˆ(ñ	à
ñ	ð �Ð
ñ	ð ñ		ð
 ˜:Ð
&ñ	'ð ñ	ð õ „Iˆh�qŒk˜8Ñ$Ô$Ð$Ð$Ð$r   Ú
name_or_idc                 ó8  — 	 ddl m}  |¦   «         }|                     | ¦  «        }d}|r	|d         }n|                     | ¦  «        }|r)	 |                     |¦  «        p|}n# t
          $ r Y nw xY w|                     ¦   «          |S # t
          $ r Y nw xY wdS )aX  Resolve a session name (title) or ID to a session ID.

    - If it looks like a session ID (contains underscore + hex), try direct lookup first.
    - Otherwise, treat it as a title and use resolve_session_by_title (auto-latest).
    - Falls back to the other method if the first doesn't match.
    - If the resolved session is a compression root, follow the chain forward
      to the latest continuation. Users who remember the old root ID (e.g.
      from an exit summary printed before the bug fix, or from notes) get
      resumed at the live tip instead of a stale parent with no messages.
    r   r$  Nr´   )r'  r%  Úget_sessionÚresolve_session_by_titleÚget_compression_tipr7   r)  )r\  r%  r*  ÚsessionÚresolved_ids        r   Ú_resolve_session_by_name_or_idrc  Ó  sæ   € ðØ*Ð*Ð*Ð*Ð*Ð*àˆY‰[Œ[ˆð —.’. Ñ,Ô,ˆØ%)ˆØð 	BØ! $œ-ˆKˆKð ×5Ò5°jÑAÔAˆKàð 	ðØ ×4Ò4°[ÑAÔAÐPÀ[��øÝð ð ð Ø�ðøøøð 	�Š‰
Œ
ˆ
ØÐøÝð ð ð Øˆðøøøàˆ4s6   ‚A	B
 ÁA$ Á#B
 Á$
A1Á.B
 Á0A1Á1B
 Â

BÂBÚ
session_idc                 óÆ  — | pt          d¬¦  «        }|sdS d}	 ddlm}  |¦   «         }|                     |¦  «        }|s	 |�|                     ¦   «          dS dS |                     |¦  «        }t          |                     d¦  «        pd¦  «        }t          |                     d¦  «        pd¦  «        }t          |                     d¦  «        pd¦  «        }t          |                     d	¦  «        pd¦  «        }	t          |                     d
¦  «        pd¦  «        }
t          |                     d¦  «        pd¦  «        }||z   |	z   |
z   |z   }n)# t          $ r Y |�|                     ¦   «          dS dS w xY w	 |�|                     ¦   «          n# |�|                     ¦   «          w w xY wt          ¦   «          t          d¦  «         t          d|› �¦  «         |rt          d|› d�¦  «         t          ¦   «          t          d|› �¦  «         |rt          d|› �¦  «         t          d|› �¦  «         t          d|› d|› d|› d|	|
z   › d|› d�¦  «         dS )z/Print a shell-visible epilogue after TUI exits.Útui©r±   Nr   r$  Úmessage_countÚinput_tokensÚoutput_tokensÚcache_read_tokensÚcache_write_tokensÚreasoning_tokenszResume this session with:z  hermes --tui --resume z  hermes --tui -c "ú"zSession:        zTitle:          zMessages:       zTokens:         z (in z, out z, cache z, reasoning rÖ   )
r+  r'  r%  r^  r)  Úget_session_titlerc   r†   r7   r   )rd  Útargetr*  r%  ra  r¯   rh  ri  rj  rk  rl  rm  Útotal_tokenss                r   Ú_print_tui_exit_summaryrr  û  s  € àÐ>Õ0¸Ð>Ñ>Ô>€FØð Øˆà	€BðØ*Ð*Ð*Ð*Ð*Ð*àˆY‰[Œ[ˆØ—.’. Ñ(Ô(ˆØð 	Øð& ˆ>Ø�HŠH‰JŒJˆJˆJˆJð ˆ>ð# ×$Ò$ VÑ,Ô,ˆÝ˜GŸKšK¨Ñ8Ô8Ð=¸AÑ>Ô>ˆÝ˜7Ÿ;š; ~Ñ6Ô6Ð;¸!Ñ<Ô<ˆÝ˜GŸKšK¨Ñ8Ô8Ð=¸AÑ>Ô>ˆÝ §¢Ð,?Ñ @Ô @Ð EÀAÑFÔFÐÝ  §¢Ð-AÑ!BÔ!BÐ!GÀaÑHÔHÐÝ˜wŸ{š{Ð+=Ñ>Ô>ÐCÀ!ÑDÔDÐàØñàñ ð !ñ!ð ñ	ð 	ˆøõ ð ð ð Øàˆ>Ø�HŠH‰JŒJˆJˆJˆJð ˆ>ðøøøð 	ð ˆ>Ø�HŠH‰JŒJˆJøøð ˆ>Ø�HŠH‰JŒJˆJˆJð øøøõ 
�G„G€GÝ	Ð
%Ñ&Ô&Ð&Ý	Ð
- VÐ
-Ð
-Ñ.Ô.Ð.Øð .ÝÐ, EÐ,Ð,Ð,Ñ-Ô-Ð-Ý	�G„G€GÝ	Ð
%˜VÐ
%Ð
%Ñ&Ô&Ð&Øð *ÝÐ( Ð(Ð(Ñ)Ô)Ð)Ý	Ð
,˜]Ð
,Ð
,Ñ-Ô-Ð-Ý	ð	YØð	Yð 	YØ*ð	Yð 	YØ2?ð	Yð 	Yà"Ð%7Ñ7ð	Yð 	YàEUð	Yð 	Yð 	Yñô ð ð ð s0   š'E ÁC;E ÅF Å
E>Å"F Å=E>Å>F ÆF2Úrootc                 ó$  — | dz  dz  dz  dz  }|                      ¦   «         sdS | dz  }|                      ¦   «         sdS | dz  dz  }|                      ¦   «         sdS |                     ¦   «         j        |                     ¦   «         j        k    S )	zYTrue when @hermes/ink is missing or node_modules is behind package-lock.json (post-pull).Únode_modulesz@hermesÚinkúpackage.jsonTúpackage-lock.jsonFz.package-lock.json)Úis_fileÚstatÚst_mtime)rs  rv  ÚlockÚmarkers       r   Ú_tui_need_npm_installr~  /  s˜   € à
�Ñ
 )Ñ
+¨eÑ
3°nÑ
D€CØ�;Š;‰=Œ=ð ØˆtØÐ%Ñ%€DØ�<Š<‰>Œ>ð ØˆuØ�NÑ"Ð%9Ñ9€FØ�>Š>ÑÔð ØˆtØ�9Š9‰;Œ;Ô &§+¢+¡-¤-Ô"8Ò8Ð8r   Útui_dirc                 ó  — t           j                             d¦  «        }|r:t          |¦  «        }|dz  dz                       ¦   «         rt          |¦  «        s|S | dz  dz                       ¦   «         rt          | ¦  «        s| S dS )zTDirectory whose dist/entry.js we should run: HERMES_TUI_DIR first, else repo ui-tui.ÚHERMES_TUI_DIRÚdistúentry.jsN)r8   r9   r†   r   r/   r~  )r  ÚenvÚps      r   Ú_find_bundled_tuir†  =  s“   € å
Œ*�.Š.Ð)Ñ
*Ô
*€CØ
ð Ý�‰IŒIˆØ�‰J˜Ñ#×+Ò+Ñ-Ô-ð 	Õ6KÈAÑ6NÔ6Nð 	ØˆHØ�&Ñ˜:Ñ%×-Ò-Ñ/Ô/ð Õ8MÈgÑ8VÔ8Vð ØˆØˆ4r   c                 óT  ‡	— t          | ¦  «        rdS | dz  dz  }|                     ¦   «         sdS |                     ¦   «         j        }t	          ddh¦  «        Š	t          j        | d¬¦  «        D ]x\  }}}ˆ	fd„|D ¦   «         |d d …<   |D ]\}|                     d¦  «        rEt
          j         	                    t
          j         
                    ||¦  «        ¦  «        |k    r  dS Œ]ŒydD ];}| |z  }|                     ¦   «         r |                     ¦   «         j        |k    r dS Œ<d	S )
NTr‚  rƒ  ru  ©Útopdownc                 ó   •— g | ]}|‰v¯|‘Œ	S rÜ   rÜ   ©ry   ÚdÚskips     €r   rß   z%_tui_build_needed.<locals>.<listcomp>R  ó   ø€ Ð<Ð<Ð<˜Q¨a°t¨m¨m�q¨m¨m¨mr   ©z.tsz.tsx)rw  rx  ztsconfig.jsonztsconfig.build.jsonF)Ú_hermes_ink_bundle_staler/   rz  r{  Ú	frozensetr8   ÚwalkÚendswithÚpathÚgetmtimerN  )
r  ÚentryÚdist_mÚdirpathÚdirnamesÚ	filenamesÚfnÚmetaÚmpr�  s
            @r   Ú_tui_build_neededrž  I  sO  ø€ Ý Ñ(Ô(ð ØˆtØ�fÑ˜zÑ)€EØ�<Š<‰>Œ>ð ØˆtØ�ZŠZ‰\Œ\Ô"€FÝ�n fÐ-Ñ.Ô.€DÝ(*¬°ÀÐ(FÑ(FÔ(Fð  ð  Ñ$ˆ�˜9Ø<Ð<Ð<Ð< (Ð<Ñ<Ô<ˆ���‰Øð 	 ð 	 ˆBØ�{Š{˜?Ñ+Ô+ð  Ý”7×#Ò#¥B¤G§L¢L°¸"Ñ$=Ô$=Ñ>Ô>ÀÒGÐGØ˜4˜4˜4øð	 ðð ð ˆð �t‰^ˆØ�9Š9‰;Œ;ð 	˜2Ÿ7š7™9œ9Ô-°Ò6Ð6Ø�4�4øØˆ5r   c                 ó6  ‡	— | dz  dz  }|dz  dz  }|                      ¦   «         sdS |                     ¦   «         j        }t          ddh¦  «        Š	t	          j        |d¬¦  «        D ]x\  }}}ˆ	fd„|D ¦   «         |d d …<   |D ]\}|                     d	¦  «        rEt          j                             t          j         	                    ||¦  «        ¦  «        |k    r  dS Œ]Œy|d
z  }|                      ¦   «         r|                     ¦   «         j        |k    rdS dS )NÚpackagesz
hermes-inkr‚  zink-bundle.jsTru  rˆ  c                 ó   •— g | ]}|‰v¯|‘Œ	S rÜ   rÜ   r‹  s     €r   rß   z,_hermes_ink_bundle_stale.<locals>.<listcomp>k  rŽ  r   r�  rw  F)
r/   rz  r{  r‘  r8   r’  r“  r”  r•  rN  )
r  Úink_rootÚbundleÚbmr˜  r™  rš  r›  r�  r�  s
            @r   r�  r�  c  s6  ø€ Ø˜Ñ# lÑ2€HØ˜Ñ Ñ0€FØ�=Š=‰?Œ?ð ØˆtØ	�Š‰ŒÔ	€BÝ�n fÐ-Ñ.Ô.€DÝ(*¬°À$Ð(GÑ(GÔ(Gð  ð  Ñ$ˆ�˜9Ø<Ð<Ð<Ð< (Ð<Ñ<Ô<ˆ���‰Øð 	 ð 	 ˆBØ�{Š{˜?Ñ+Ô+ð  Ý”7×#Ò#¥B¤G§L¢L°¸"Ñ$=Ô$=Ñ>Ô>ÀÒCÐCØ˜4˜4˜4øð	 ð 
�NÑ	"€BØ	‡y‚y�{„{ð �r—w’w‘y”yÔ)¨BÒ.Ð.ØˆtØˆ5r   c                  ó’  — t          j        d¦  «        rt          j        d¦  «        rdS t          j                             d¦  «        rdS t
          dz  dz  dz  } |                      ¦   «         sdS t          j                             d¦  «        p"t          t          j	        ¦   «         d	z  ¦  «        }	 t          j        d
dd| › d�gi t          j        ¥d|i¥ddd¬¦  «        }n# t          t          j        f$ r Y dS w xY wt          j                             dd¦  «                             t          j        ¦  «        }g }|j        pd                     ¦   «         }|r9|                     t          |¦  «                             ¦   «         j        ¦  «         |                     t          |¦  «        dz  dz  t          j	        ¦   «         dz  dz  g¦  «         |D ]?}t          |¦  «        }|                     ¦   «         r||vr|                     d|¦  «         Œ@t          j                             |¦  «        t          j        d<   dS )uz  Make sure `node` + `npm` are on PATH for the TUI.

    If either is missing and scripts/lib/node-bootstrap.sh is available, source
    it and call `ensure_node` (fnm/nvm/proto/brew/bundled cascade). After
    install, capture the resolved node binary path from the bash subprocess
    and prepend its directory to os.environ["PATH"] so shutil.which finds the
    new binaries in this Python process â€” regardless of which version manager
    was used (nvm, fnm, proto, brew, or the bundled fallback).

    Idempotent no-op when node+npm are already discoverable. Set
    ``HERMES_SKIP_NODE_BOOTSTRAP=1`` to disable auto-install.
    ÚnodeÚnpmNÚHERMES_SKIP_NODE_BOOTSTRAPÚscriptsÚlibznode-bootstrap.shr(   z.hermesÚbashú-czsource "z+" >&2 && ensure_node >&2 && command -v nodeTF)r„  r2  r3  ÚcheckÚPATHrn   Úbinz.localr   )rK  rL  r8   r9   r†   ÚPROJECT_ROOTry  r‰   r   Úhomer5  r6  r3   ÚSubprocessErrorr-   ÚpathsepÚstdoutr1   ÚappendÚresolveÚparentrO  Úis_dirÚinsertrN  )Úhelperr@   ÚresultÚpartsÚextrasÚresolvedÚextrar¾   s           r   Ú_ensure_tui_noderÀ  v  s6  € õ „|�FÑÔð ¥¤¨UÑ 3Ô 3ð ØˆÝ	„z‡~‚~Ð2Ñ3Ô3ð Øˆå˜IÑ%¨Ñ-Ð0CÑC€FØ�>Š>ÑÔð Øˆå”*—.’. Ñ/Ô/ÐOµ3µt´y±{´{ÀYÑ7NÑ3OÔ3O€Kðõ ”àØØN˜6ÐNÐNÐNðð
 ;•2”:Ð:˜}¨kÐ:Ð:ØØØð

ñ 

ô 

ˆˆøõ •ZÔ/Ð0ð ð ð Øˆˆðøøøõ ŒJ�NŠN˜6 2Ñ&Ô&×,Ò,­R¬ZÑ8Ô8€EØ€Fà”Ð# ×*Ò*Ñ,Ô,€HØð 7Ø�Š•d˜8‘n”n×,Ò,Ñ.Ô.Ô5Ñ6Ô6Ð6à
‡M‚M•4˜Ñ$Ô$ vÑ-°Ñ5µt´y±{´{ÀXÑ7MÐPUÑ7UÐVÑWÔWÐWàð ð ˆÝ�‰JŒJˆØ�<Š<‰>Œ>ð 	˜a u˜n˜nØ�LŠL˜˜AÑÔÐøÝœŸš¨Ñ/Ô/…B„JˆvÑÐÐs   Â50C& Ã&D Ã?D Útui_devc           
      óÜ  — t          ¦   «          dt          dt          fd„}|s}t          j                             d¦  «        }|r\t          |¦  «        }|dz  dz                       ¦   «         r3t          |¦  «        s$ |d¦  «        }|t          |dz  dz  ¦  «        g|fS  |d¦  «        }t          | ¦  «        �rt          j                             d	¦  «        st          d
¦  «         t          j
        |dddddgt          | ¦  «        t          j        t          j        di t          j        ¥ddi¥¬¦  «        }|j        dk    r~|j        pd                     ¦   «         }d                     |                     ¦   «         dd…         ¦  «        }	t          d¦  «         |	rt          |	¦  «         t%          j        d¦  «         |�rt)          | ¦  «        r¾t          j
        |ddddgt          | ¦  «        dd¬¦  «        }|j        dk    r‰|j        pd› |j        pd› �                     ¦   «         }
d                     |
                     ¦   «         dd…         ¦  «        }	t          d ¦  «         |	rt          |	¦  «         t%          j        d¦  «         | d!z  d"z  d#z  }|                     ¦   «         rt          |¦  «        d$g| fS |d%g| fS t-          | ¦  «        r¼t          j
        |ddgt          | ¦  «        dd¬¦  «        }|j        dk    r‰|j        pd› |j        pd› �                     ¦   «         }
d                     |
                     ¦   «         dd…         ¦  «        }	t          d&¦  «         |	rt          |	¦  «         t%          j        d¦  «         t/          | ¦  «        }|s#t          d'¦  «         t%          j        d¦  «          |d¦  «        }|t          |dz  dz  ¦  «        g|fS )(uT   TUI: --dev â†’ tsx src; else node dist (HERMES_TUI_DIR or ui-tui, build when stale).r¯  r   c                 óL  — | dk    rat           j                             d¦  «        }|r@t           j                             |¦  «        r!t          j        |t           j        ¦  «        r|S t          j        | ¦  «        }|s&t          | › d�¦  «         t          j        d¦  «         |S )Nr¦  ÚHERMES_NODEu.    not found â€” install Node.js to use the TUI.r   )r8   r9   r†   r”  ÚisfileÚaccessÚX_OKrK  rL  r   r   r   )r¯  Úenv_noder”  s      r   Ú	_node_binz!_make_tui_argv.<locals>._node_bin³  s•   € Ø�&Š=ˆ=Ý”z—~’~ mÑ4Ô4ˆHØð  �BœGŸNšN¨8Ñ4Ô4ð  ½¼À8ÍRÌWÑ9UÔ9Uð  Ø�ÝŒ|˜CÑ Ô ˆØð 	Ý�SÐHÐHÐHÑIÔIÐIÝŒH�Q‰KŒKˆKØˆr   r�  r‚  rƒ  r¦  r§  ÚHERMES_QUIETu   Installing TUI dependenciesâ€¦Úinstallú--silentú	--no-fundú
--no-auditú--progress=falseTÚCIÚ1)Úcwdr´  r   r3  r„  r   rn   ú
éâÿÿÿNznpm install failed.r   r6  Úbuildz--prefixzpackages/hermes-ink©rÒ  r2  r3  z@hermes/ink build failed.ru  z.binÚtsxzsrc/entry.tsxrB   zTUI build failed.z'TUI build did not produce dist/entry.js)rÀ  r‰   r8   r9   r†   r   r/   r~  r   r5  r6  ÚDEVNULLÚPIPErM  r   r1   rN  r�   r   r   r�  r´  rž  r†  )r  rÁ  rÉ  Úext_dirr…  r¦  r§  r»  Úerrr°   Úcombinedr×  rs  s                r   Ú_make_tui_argvrÝ  ¯  s#  € åÑÔÐð	•sð 	�sð 	ð 	ð 	ð 	ð ð ?Ý”*—.’.Ð!1Ñ2Ô2ˆØð 	?Ý�W‘”ˆAØ�F‘
˜ZÑ'×/Ò/Ñ1Ô1ð ?Õ:OÐPQÑ:RÔ:Rð ?Ø �y Ñ(Ô(�Ø�c ! f¡*¨zÑ"9Ñ:Ô:Ð;¸QÐ>Ð>à
ˆ)�EÑ
Ô
€CÝ˜WÑ%Ô%ñ ÝŒz�~Š~˜nÑ-Ô-ð 	4ÝÐ2Ñ3Ô3Ð3Ý”Ø�)˜Z¨°lÐDVÐWÝ�G‘”ÝÔ%Ý”?ØØ)•2”:Ð)˜t SÐ)Ð)ð
ñ 
ô 
ˆð Ô Ò!Ð!Ø”=Ð& B×-Ò-Ñ/Ô/ˆCØ—i’i §¢Ñ 0Ô 0°°°Ô 6Ñ7Ô7ˆGÝÐ'Ñ(Ô(Ð(Øð Ý�g‘”�ÝŒH�Q‰KŒKˆKàñ 'Ý# GÑ,Ô,ð 	Ý”^Ø�e˜W jÐ2GÐHÝ˜‘L”LØ#Øð	ñ ô ˆFð Ô  AÒ%Ð%Ø$œmÐ1¨rÐH°6´=Ð3FÀBÐHÐH×NÒNÑPÔP�ØŸ)š) H×$7Ò$7Ñ$9Ô$9¸#¸$¸$Ô$?Ñ@Ô@�ÝÐ1Ñ2Ô2Ð2Øð #Ý˜'‘N”N�NÝ”˜‘”�Ø˜Ñ&¨Ñ/°%Ñ7ˆØ�:Š:‰<Œ<ð 	8Ý˜‘H”H˜oÐ.°Ð7Ð7Ø�Wˆ~˜wÐ&Ð&å˜Ñ!Ô!ð Ý”Ø�%˜Ð!Ý�G‘”ØØð	
ñ 
ô 
ˆð Ô Ò!Ð!Ø œ-Ð-¨2ÐD¨v¬}Ð/BÀÐDÐD×JÒJÑLÔLˆHØ—i’i × 3Ò 3Ñ 5Ô 5°c°d°dÔ ;Ñ<Ô<ˆGÝÐ%Ñ&Ô&Ð&Øð Ý�g‘”�ÝŒH�Q‰KŒKˆKå˜WÑ%Ô%€DØð ÝÐ7Ñ8Ô8Ð8ÝŒ�‰Œˆàˆ9�VÑÔ€DØ•#�d˜V‘m jÑ0Ñ1Ô1Ð2°DÐ8Ð8r   Úresume_session_idrm   r   c                 ó~  — t           dz  }t          j                             ¦   «         }t          j                             dt          t           ¦  «        ¦  «        |d<   |                     dt          j        ¦  «         |                     dt          j	        ¦   «         ¦  «         |r
||d<   ||d<   |r
||d<   ||d<   |                     d	d
¦  «         
                    ¦   «         }t          d„ |D ¦   «         ¦  «        s|                     d¦  «         d|vr|                     d¦  «         d                     |¦  «        |d	<   | r| |d<   t          ||¦  «        \  }}	 t          j        |t          |¦  «        |¬¦  «        }	n# t"          $ r d}	Y nw xY w|	dv rt%          | ¦  «         t          j        |	¦  «         dS )z%Replace current process with the TUI.úui-tuiÚHERMES_PYTHON_SRC_ROOTÚHERMES_PYTHONÚ
HERMES_CWDÚHERMES_MODELÚHERMES_INFERENCE_MODELÚHERMES_TUI_PROVIDERÚHERMES_INFERENCE_PROVIDERÚNODE_OPTIONSrn   c              3   ó@   K  — | ]}|                      d ¦  «        V — ŒdS )z--max-old-space-size=N©r,   )ry   Úts     r   r{   z_launch_tui.<locals>.<genexpr>"  s/   è è € ÐFÐF¸ˆq�|Š|Ð3Ñ4Ô4ÐFÐFÐFÐFÐFÐFr   z--max-old-space-size=8192z--expose-gcr¼   ÚHERMES_TUI_RESUME)rÒ  r„  é‚   )r   rí  N)r°  r8   r9   Úcopyr†   r‰   Ú
setdefaultr   Ú
executableÚgetcwdr-   rŽ   rµ  rN  rÝ  r5  Úcallr  rr  r   )
rÞ  rÁ  rm   r   r  r„  Ú_tokensr)   rÒ  Úcodes
             r   Ú_launch_tuirõ    sÔ  € õ ˜XÑ%€Gå
Œ*�/Š/Ñ
Ô
€CÝ$&¤J§N¢NØ ¥#¥lÑ"3Ô"3ñ%ô %€CÐ Ñ!ð ‡N‚N�?¥C¤NÑ3Ô3Ð3Ø‡N‚N�<¥¤¡¤Ñ-Ô-Ð-Øð .Ø#ˆˆNÑØ(-ˆÐ$Ñ%Øð 4Ø%-ˆÐ!Ñ"Ø+3ˆÐ'Ñ(ð �gŠg�n bÑ)Ô)×/Ò/Ñ1Ô1€GÝÐFÐF¸gÐFÑFÔFÑFÔFð 4Ø�ŠÐ2Ñ3Ô3Ð3Ø˜GÐ#Ð#Ø�Š�}Ñ%Ô%Ð%ØŸ(š( 7Ñ+Ô+€CˆÑØð 5Ø#4ˆÐÑ å˜w¨Ñ0Ô0�I€Dˆ#ðÝŒ˜t­¨S©¬°sÐ;Ñ;Ô;ˆˆøÝð ð ð Øˆˆˆðøøøð ˆxÐÐÝÐ 1Ñ2Ô2Ð2å„HˆT�N„N€N€N€Ns   Å$F ÆFÆFc                 ó|	  — t          | dd¦  «        p"t          j                             d¦  «        dk    }t          | dd¦  «        }|rÛt          | dd¦  «        sÊt	          |t
          ¦  «        rPt          |¦  «        }|r|| _        nœt          d|› d	�¦  «         t          d
¦  «         t          j
        d¦  «         ne|rdnd}t          |¬¦  «        }|s|dk    rt          d¬¦  «        }|r|| _        n-|rdnd}t          d|› d�¦  «         t          j
        d¦  «         t          | dd¦  «        }|rt          |¦  «        }|r|| _        t          ¦   «         �st          ¦   «          t          d¦  «         t          ¦   «          t          d¦  «         t          ¦   «          ddlm}m}	  |¦   «         s |	d¦  «         t          j
        d¦  «         	 t!          d¦  «                             ¦   «                              ¦   «         }
n# t&          t(          f$ r d}
Y nw xY w|
dv rt+          | ¦  «         dS t          ¦   «          t          d¦  «         t          j
        d¦  «         	 ddlm}  |¦   «          n# t0          $ r Y nw xY w	 ddlm}  |d¬¦  «         n# t0          $ r Y nw xY wt          | dd¦  «        rdt          j        d <   t          | d!d¦  «        rdt          j        d"<   t          | d#d¦  «        rdt          j        d$<   t          | d%d¦  «        r| j        t          j        d&<   |rOt9          t          | dd¦  «        t          | d'd¦  «        t          | d(d¦  «        t          | d)d¦  «        ¬*¦  «         dd+lm} | j        t          | d)d¦  «        | j         t          | d,d¦  «        | j!        t          | d-d¦  «        | j"        t          | d.d¦  «        t          | dd¦  «        t          | d/d¦  «        t          | d0d¦  «        t          | d1d¦  «        t          | d2d¦  «        t          | d#d¦  «        t          | d!d¦  «        d3œ}d4„ | #                    ¦   «         D ¦   «         }	  |d6i |¤Ž dS # tH          $ r1}t          d5|› �¦  «         t          j
        d¦  «         Y d}~dS d}~ww xY w)7zRun interactive chat CLI.rf  FÚ
HERMES_TUIrÑ  Úcontinue_lastNÚresumezNo session found matching 'ú'.z5Use 'hermes sessions list' to see available sessions.r   rP   rg  ÚTUIÚCLIzNo previous z session found to continue.zLIt looks like Hermes isn't configured yet -- no API keys or providers found.z  Run:  hermes setupr   )Úis_interactive_stdinÚ#print_noninteractive_setup_guidancez;No interactive TTY detected for the first-run setup prompt.zRun setup now? [Y/n] Ún©rn   r  Úyesz4You can run 'hermes setup' at any time to configure.)Úprefetch_update_check©Úsync_skillsT©ÚquietÚyoloÚHERMES_YOLO_MODEÚignore_user_configÚHERMES_IGNORE_USER_CONFIGÚignore_rulesÚHERMES_IGNORE_RULESr±   ÚHERMES_SESSION_SOURCErÁ  rm   r   )rÁ  rm   r   ©ÚmainÚskillsr  ÚimageÚworktreeÚcheckpointsÚpass_session_idÚ	max_turns)rm   r   Útoolsetsr  Úverboser  rÆ   r  rù  r  r  r  r  r  r	  c                 ó   — i | ]
\  }}|®||“ŒS rw   rÜ   )ry   Úkrz   s      r   ú
<dictcomp>zcmd_chat.<locals>.<dictcomp>À  s   € Ð?Ð?Ð?‘t�q˜!°°ˆa�°°°r   r'   rÜ   )%Úgetattrr8   r9   r†   r‡   r‰   rc  rù  r   r   r   r+  rª   Úhermes_cli.setuprý  rþ  r  r1   rÅ   r  r  Ú	cmd_setupÚhermes_cli.bannerr  r7   Útools.skills_syncr  r±   rõ  rP   r  rm   r  r  rÆ   r‘   r5   )ÚargsÚuse_tuiÚcontinue_valr¾  r±   Úlast_idÚkindÚ
resume_valrý  rþ  Úreplyr  r  Úcli_mainÚkwargsÚes                   r   Úcmd_chatr*  6  s±  € å�d˜E 5Ñ)Ô)ÐP­R¬Z¯^ª^¸LÑ-IÔ-IÈSÒ-P€Gõ ˜4 °$Ñ7Ô7€LØð �G D¨(°DÑ9Ô9ð Ý�l¥CÑ(Ô(ð 	å5°lÑCÔCˆHØð Ø&�”�åÐD°LÐDÐDÐDÑEÔEÐEÝÐMÑNÔNÐNÝ”˜‘”��ð &Ð0�U�U¨5ˆFÝ+°6Ð:Ñ:Ô:ˆGØð >˜v¨š˜Ý/°uÐ=Ñ=Ô=�Øð Ø%�”�à 'Ð2�u�u¨U�ÝÐF TÐFÐFÐFÑGÔGÐGÝ”˜‘”�õ ˜˜x¨Ñ.Ô.€JØð #Ý1°*Ñ=Ô=ˆØð 	#Ø"ˆDŒKõ
 (Ñ)Ô)ñ Ý‰ŒˆÝØZñ	
ô 	
ð 	
õ 	‰ŒˆÝÐ$Ñ%Ô%Ð%Ý‰Œˆð	
ð 	
ð 	
ð 	
ð 	
ð 	
ð 	
ð 	
ð
 $Ð#Ñ%Ô%ð 	Ø/Ð/ØMñô ð õ ŒH�Q‰KŒKˆKð	ÝÐ1Ñ2Ô2×8Ò8Ñ:Ô:×@Ò@ÑBÔBˆEˆEøÝÕ+Ð,ð 	ð 	ð 	ØˆEˆEˆEð	øøøàÐ$Ð$Ð$Ý�d‰OŒOˆOØˆFÝ‰ŒˆÝÐDÑEÔEÐEÝŒ�‰ŒˆðØ;Ð;Ð;Ð;Ð;Ð;àÐÑÔÐÐøÝð ð ð ØˆðøøøðØ1Ð1Ð1Ð1Ð1Ð1àˆ˜$ÐÑÔÐÐøÝð ð ð Øˆðøøøõ ˆt�V˜UÑ#Ô#ð -Ø),�Œ
Ð%Ñ&õ ˆtÐ)¨5Ñ1Ô1ð 6Ø25�Œ
Ð.Ñ/õ
 ˆt�^ UÑ+Ô+ð 0Ø,/�Œ
Ð(Ñ)õ ˆt�X˜tÑ$Ô$ð :Ø.2¬k�Œ
Ð*Ñ+àð 
ÝÝ�D˜( DÑ)Ô)Ý˜D )¨UÑ3Ô3Ý˜$ ¨Ñ.Ô.Ý˜T :¨tÑ4Ô4ð		
ñ 	
ô 	
ð 	
ð %Ð$Ð$Ð$Ð$Ð$ð ”Ý˜D *¨dÑ3Ô3Ø”MÝ˜$ ¨$Ñ/Ô/Ø”<Ý˜˜w¨Ñ.Ô.Ø”Ý˜˜w¨Ñ-Ô-Ý˜$ ¨$Ñ/Ô/Ý˜D *¨eÑ4Ô4Ý˜t ]°EÑ:Ô:Ý" 4Ð):¸EÑBÔBÝ˜T ;°Ñ5Ô5Ý  n°eÑ<Ô<Ý% dÐ,@À%ÑHÔHðð €Fð$ @Ð?˜vŸ|š|™~œ~Ð?Ñ?Ô?€FðØˆÐÐ�6ÐÐÐÐÐøÝð ð ð Ýˆm˜ˆmˆmÑÔÐÝŒ�‰ŒˆˆˆˆˆˆˆøøøøðøøøsN   Ç3H ÈH!È H!É+I< É<
J	ÊJ	ÊJ  Ê 
J-Ê,J-Ñ6R  Ò 
R;Ò
&R6Ò6R;c                 ó(   — ddl m}  || ¦  «         dS )zGateway management commands.r   )Úgateway_commandN)Úhermes_cli.gatewayr,  )r   r,  s     r   Úcmd_gatewayr.  É  ó*   € à2Ð2Ð2Ð2Ð2Ð2à€O�DÑÔÐÐÐr   c           	      óB  — t          d¦  «         ddlm}m} t	          ¦   «          t	          d¦  «         t	          d¦  «          |d¦  «        pd}|�sït	          ¦   «          t	          d¦  «         t	          ¦   «          t	          d	¦  «         t	          d
¦  «         t	          d¦  «         t	          ¦   «          t	          d¦  «         t	          d¦  «         t	          d¦  «         t	          ¦   «          	 t          d¦  «                             ¦   «         }n'# t          t          f$ r t	          d¦  «         Y dS w xY w|dk    rà |dd¦  «         d}t	          d¦  «         t	          ¦   «          t	          d¦  «         t	          d¦  «         t	          d¦  «         t	          d¦  «         t	          d¦  «         t	          d¦  «         t	          d¦  «         t	          d¦  «         t	          d¦  «         t	          d¦  «         t	          d¦  «         t	          d¦  «         n< |dd ¦  «         d }t	          d!¦  «         n|}|dk    rd"nd#}t	          d$|› �¦  «         t	          ¦   «           |d%¦  «        }|r(| 	                    ¦   «         d&k    rt	          d'¦  «         n |d%d&¦  «         t	          d(¦  «          |d)¦  «        pd}|rât	          d*|› �¦  «         	 t          d+¦  «                             ¦   «         }	n# t          t          f$ r d,}	Y nw xY w|	 	                    ¦   «         d-v r}|dk    r"t          d.¦  «                             ¦   «         }
n!t          d/¦  «                             ¦   «         }
|
r2 |d)|
 
                    d0d¦  «        ¦  «         t	          d1|
› �¦  «         nªt	          ¦   «          |dk    r1t	          d2¦  «         t          d3¦  «                             ¦   «         }
n!t          d/¦  «                             ¦   «         }
|
r3 |d)|
 
                    d0d¦  «        ¦  «         t	          d4|
› �¦  «         nt	          d5¦  «         t          t          ¦  «                             ¦   «         j        d6         }|d7z  d8z  }|d9z  }|                     ¦   «         st	          d:|› �¦  «         dS |d;z                       ¦   «         �s t	          d<¦  «         t!          j        d=¦  «        }|st	          d>¦  «         dS 	 t%          j        |d?d@dAdBgt)          |¦  «        t$          j        t$          j        dC¬D¦  «        }n # t          $ r t	          dE¦  «         Y dS w xY w|j        dk    rn|j        pd                     ¦   «         }|r/dF                     |                     ¦   «         dGd…         ¦  «        ndH}t	          dI¦  «         t	          |¦  «         dS t	          dJ¦  «         nt	          dK¦  «         t7          ¦   «         dz  dLz  }|                     dCdC¬M¦  «         |dNz                       ¦   «         r¾t	          dO¦  «         	 t          dP¦  «                             ¦   «         }	n# t          t          f$ r d,}	Y nw xY w|	 	                    ¦   «         d-v r=t!          j        |dC¬Q¦  «         |                     dCdC¬M¦  «         t	          dR¦  «         n t	          dS¦  «         t	          dT¦  «         dS t	          ¦   «          t	          dU¦  «         |dk    rt	          dV¦  «         t	          dW¦  «         nt	          dX¦  «         t	          ¦   «          t	          dY¦  «         t	          dU¦  «         t	          ¦   «          	 t%          j        dZt)          |¦  «        d[d\t)          |¦  «        gt)          |¦  «        ¬]¦  «         n# t          $ r Y nw xY wt	          ¦   «          |dNz                       ¦   «         �rt	          d^¦  «         t	          ¦   «          |dk    rZt	          d_¦  «         t	          d`¦  «         t	          da¦  «         t	          db¦  «         t	          ¦   «          t	          dc¦  «         nht	          d_¦  «         t	          d`¦  «         t	          dd¦  «         t	          de¦  «         t	          ¦   «          t	          dc¦  «         t	          df¦  «         t	          ¦   «          t	          dg¦  «         dS t	          dh¦  «         dS )izESet up WhatsApp: choose mode, configure, install bridge, pair via QR.Úwhatsappr   ©Úget_env_valueÚsave_env_valueu   âš• WhatsApp Setupú2==================================================ÚWHATSAPP_MODErn   z&How will you use WhatsApp with Hermes?z&  1. Separate bot number (recommended)uF        People message the bot's number directly â€” cleanest experience.zH     Requires a second phone number with WhatsApp installed on a device.z   2. Personal number (self-chat)z/     You message yourself to talk to the agent.z3     Quick to set up, but the UX is less intuitive.z  Choose [1/2]: z
Setup cancelled.NrÑ  Úbotu     âœ“ Mode: separate bot numberu›     â”Œâ”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”�u9     â”‚  Getting a second number for the bot:           â”‚u9     â”‚                                                 â”‚u9     â”‚  Easiest: Install WhatsApp Business (free app)  â”‚u9     â”‚  on your phone with a second number:            â”‚u;     â”‚    â€¢ Dual-SIM: use your 2nd SIM slot            â”‚u<     â”‚    â€¢ Google Voice: free US number (voice.google) â”‚u;     â”‚    â€¢ Prepaid SIM: $3-10, verify once            â”‚u9     â”‚  WhatsApp Business runs alongside your personal â”‚u;     â”‚  WhatsApp â€” no second phone needed.             â”‚u›     â””â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”˜z	self-chatu'     âœ“ Mode: personal number (self-chat)zseparate bot numberzpersonal number (self-chat)u   
âœ“ Mode: ÚWHATSAPP_ENABLEDÚtrueu   âœ“ WhatsApp is already enabledu   âœ“ WhatsApp enabledÚWHATSAPP_ALLOWED_USERSu   âœ“ Allowed users: z
  Update allowed users? [y/N] rÿ  ©r  r  z<  Phone numbers that can message the bot (comma-separated): z(  Your phone number (e.g. 15551234567): r¼   u     âœ“ Updated to: z+  Who should be allowed to message the bot?z4  Phone numbers (comma-separated, or * for anyone): u     âœ“ Allowed users set: uF     âš  No allowlist â€” the agent will respond to ALL incoming messagesr   r©  zwhatsapp-bridgez	bridge.jsu    
âœ— Bridge script not found at ru  uM   
â†’ Installing WhatsApp bridge dependencies (this can take a few minutes)...r§  u5     âœ— npm not found on PATH â€” install Node.js firstrË  rÍ  rÎ  rÏ  T)rÒ  r´  r   r3  u   
  âœ— Install cancelledrÓ  rÔ  z(no output)u     âœ— npm install failed:u     âœ“ Dependencies installedu)   âœ“ Bridge dependencies already installedra  ©ÚparentsÚexist_okz
creds.jsonu#   âœ“ Existing WhatsApp session foundz8
  Re-pair? This will clear the existing session. [y/N] ©Úignore_errorsu     âœ“ Session clearedu'   
âœ“ WhatsApp is configured and paired!z(  Start the gateway with: hermes gatewayu–   â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€u0   ðŸ“± Open WhatsApp (or WhatsApp Business) on thez*   phone with the BOT's number, then scan:u,   ðŸ“± Open WhatsApp on your phone, then scan:u0      Settings â†’ Linked Devices â†’ Link a Devicer¦  z--pair-onlyú	--session)rÒ  u!   âœ“ WhatsApp paired successfully!z  Next steps:z)    1. Start the gateway:  hermes gatewayz2    2. Send a message to the bot's WhatsApp numberz)    3. The agent will reply automaticallyu;     Tip: Agent responses are prefixed with 'âš• Hermes Agent'u)       2. Open WhatsApp â†’ Message Yourselfu.       3. Type a message â€” the agent will replyz4  so you can tell them apart from your own messages.z1  Or install as a service: hermes gateway installuG   âš  Pairing may not have completed. Run 'hermes whatsapp' to try again.)r   r„   r3  r4  r   r  r1   r  r  rÅ   Úreplacer   Ú__file__r¶  r=  r/   rK  rL  r5  r6  r‰   rØ  rÙ  rM  r   rN  r�   rE   ÚmkdirÚrmtree)r   r3  r4  Úcurrent_modeÚchoiceÚwa_modeÚ
mode_labelÚcurrentÚcurrent_usersÚresponseÚphoneÚproject_rootÚ
bridge_dirÚbridge_scriptr§  r»  rÛ  r°   Úsession_dirs                      r   Úcmd_whatsapprR  Ð  s	
  € å�ÑÔÐØ?Ð?Ð?Ð?Ð?Ð?Ð?Ð?å	�G„G€GÝ	Ð
ÑÔÐÝ	ˆ(�O„O€Oð !�= Ñ1Ô1Ð7°R€LØñ .+Ý‰ŒˆÝÐ6Ñ7Ô7Ð7Ý‰ŒˆÝÐ6Ñ7Ô7Ð7ÝÐVÑWÔWÐWÝØVñ	
ô 	
ð 	
õ 	‰ŒˆÝÐ0Ñ1Ô1Ð1ÝÐ?Ñ@Ô@Ð@ÝÐCÑDÔDÐDÝ‰Œˆð	ÝÐ-Ñ.Ô.×4Ò4Ñ6Ô6ˆFˆFøÝÕ+Ð,ð 	ð 	ð 	ÝÐ&Ñ'Ô'Ð'ØˆFˆFð	øøøð �SŠ=ˆ=ØˆN˜?¨EÑ2Ô2Ð2ØˆGÝÐ3Ñ4Ô4Ð4Ý‰GŒGˆGÝð  pñ  qô  qð  qÝÐMÑNÔNÐNÝÐMÑNÔNÐNÝÐMÑNÔNÐNÝÐMÑNÔNÐNÝÐOÑPÔPÐPÝÐPÑQÔQÐQÝÐOÑPÔPÐPÝÐMÑNÔNÐNÝÐMÑNÔNÐNÝÐOÑPÔPÐPÝð  pñ  qô  qð  qð  qàˆN˜?¨KÑ8Ô8Ð8Ø!ˆGÝÐ;Ñ<Ô<Ð<Ð<àˆà%,°Ò%5Ð%5Ð!Ð!Ð;Xð 	õ 	Ð)˜ZÐ)Ð)Ñ*Ô*Ð*õ 
�G„G€GØˆmÐ.Ñ/Ô/€GØð &�7—=’=‘?”? fÒ,Ð,ÝÐ/Ñ0Ô0Ð0Ð0àˆÐ)¨6Ñ2Ô2Ð2ÝÐ$Ñ%Ô%Ð%ð "�MÐ":Ñ;Ô;ÐA¸r€MØð \ÝÐ3 MÐ3Ð3Ñ4Ô4Ð4ð	ÝÐ?Ñ@Ô@×FÒFÑHÔHˆHˆHøÝÕ+Ð,ð 	ð 	ð 	ØˆHˆHˆHð	øøøà�>Š>ÑÔ˜|Ð+Ð+Ø˜%ÒÐÝØRñô ç’%‘'”'ð �õ ÐHÑIÔI×OÒOÑQÔQ�Øð 4Ø�Ð7¸¿ºÀsÈBÑ9OÔ9OÑPÔPÐPÝÐ2¨5Ð2Ð2Ñ3Ô3Ð3øå‰ŒˆØ�eÒÐÝÐ?Ñ@Ô@Ð@ÝØFñô çŠe‰gŒgð ˆEõ ÐDÑEÔE×KÒKÑMÔMˆEØð 	\ØˆNÐ3°U·]²]À3ÈÑ5KÔ5KÑLÔLÐLÝÐ5¨eÐ5Ð5Ñ6Ô6Ð6Ð6åÐZÑ[Ô[Ð[õ �‘>”>×)Ò)Ñ+Ô+Ô3°AÔ6€LØ 	Ñ)Ð,=Ñ=€JØ Ñ,€Mà×ÒÑ!Ô!ð ÝÐA°-ÐAÐAÑBÔBÐBØˆà˜Ñ'×/Ò/Ñ1Ô1ñ ;ÝÐ^Ñ_Ô_Ð_ÝŒl˜5Ñ!Ô!ˆØð 	ÝÐIÑJÔJÐJØˆFð
	Ý”^Ø�i ¨lÐ<NÐOÝ˜
‘O”OÝ!Ô)Ý!”Øðñ ô ˆFˆFøõ !ð 	ð 	ð 	ÝÐ-Ñ.Ô.Ð.ØˆFˆFð	øøøð Ô Ò!Ð!Ø”=Ð& B×-Ò-Ñ/Ô/ˆCØ;>ÐQ�d—i’i §¢Ñ 0Ô 0°°°Ô 6Ñ7Ô7Ð7ÀMˆGÝÐ-Ñ.Ô.Ð.Ý�'‰NŒNˆNØˆFÝÐ,Ñ-Ô-Ð-Ð-åÐ9Ñ:Ô:Ð:õ "Ñ#Ô# jÑ0°9Ñ<€KØ×Ò˜d¨TÐÑ2Ô2Ð2à�lÑ"×*Ò*Ñ,Ô,ð ÝÐ3Ñ4Ô4Ð4ð	ÝØKñô çŠe‰gŒgð ˆHøõ Õ+Ð,ð 	ð 	ð 	ØˆHˆHˆHð	øøøà�>Š>ÑÔ˜|Ð+Ð+ÝŒM˜+°TÐ:Ñ:Ô:Ð:Ø×Ò d°TÐÑ:Ô:Ð:ÝÐ)Ñ*Ô*Ð*Ð*åÐ<Ñ=Ô=Ð=ÝÐ<Ñ=Ô=Ð=ØˆFõ 
�G„G€GÝ	ˆ*ÑÔÐØ�%ÒÐÝÐ@ÑAÔAÐAÝÐ:Ñ;Ô;Ð;Ð;åÐ<Ñ=Ô=Ð=Ý	�G„G€GÝ	Ð
<Ñ=Ô=Ð=Ý	ˆ*ÑÔÐÝ	�G„G€GðÝŒØ•S˜Ñ'Ô'¨¸ÅSÈÑEUÔEUÐVÝ�J‘”ð	
ñ 	
ô 	
ð 	
ð 	
øõ ð ð ð Øˆðøøøõ 
�G„G€GØ�lÑ"×*Ò*Ñ,Ô,ñ YÝÐ1Ñ2Ô2Ð2Ý‰ŒˆØ�eÒÐÝ�/Ñ"Ô"Ð"ÝÐ=Ñ>Ô>Ð>ÝÐFÑGÔGÐGÝÐ=Ñ>Ô>Ð>Ý‰GŒGˆGÝÐOÑPÔPÐPÐPå�/Ñ"Ô"Ð"ÝÐ=Ñ>Ô>Ð>ÝÐ=Ñ>Ô>Ð>ÝÐBÑCÔCÐCÝ‰GŒGˆGÝÐOÑPÔPÐPÝÐHÑIÔIÐIÝ‰ŒˆÝÐAÑBÔBÐBÐBÐBåÐWÑXÔXÐXÐXÐXs[   Ã6!D Ä D<Ä;D<Ë!!L ÌLÌLÔ?U ÕU,Õ+U,Ù!Y; Ù;ZÚZÞA_ ß
_#ß"_#c                 ó(   — ddl m}  || ¦  «         dS )zInteractive setup wizard.r   )Úrun_setup_wizardN)r  rT  )r   rT  s     r   r  r  �  s+   € à1Ð1Ð1Ð1Ð1Ð1àÐ�TÑÔÐÐÐr   c                 óD   — t          d¦  «         t          | ¬¦  «         dS )uK   Select default model â€” starts with provider selection, then model picker.rm   ©r   N)r   Úselect_provider_and_modelrV  s    r   Ú	cmd_modelrX  ¤  s'   € å�ÑÔÐÝ 4Ð(Ñ(Ô(Ð(Ð(Ð(r   c           	      óp  ‡#‡$‡%— ddl mŠ%mŠ#m} ddlmŠ$m}m} ddlm	}  |¦   «         }| 
                    d¦  «        }t          |t          ¦  «        r| 
                    dd¦  «        }|pd}d	}| 
                    d¦  «        }t          |t          ¦  «        r| 
                    d
¦  «        }|pt          j        d¦  «        pd}	 ‰$|¦  «        }
d	}|	dk    rC ||	| 
                    d¦  «        |
¦  «        }|�|j        }nd|	› d�}t!          d|› d�¦  «         |€E	  ‰%d¦  «        }n8# ‰#$ r0}|	dk    r ||¦  «        }t!          d|› d�¦  «         d	}Y d	}~nd	}~ww xY w|dk    r |d¦  «        rd}ddlm}m} t          |¦  «        }|r| 
                    ||¦  «        nd}t!          ¦   «          t!          d|› �¦  «         t!          d|› �¦  «         t!          ¦   «          d„ |D ¦   «         }dt          t(          t          t(          t(          f         f         fˆ#ˆ$ˆ%fd„} ||¦  «        }|                     ¦   «         D ]�\  }}|d         }|d         }|                     dd¦  «                             dd¦  «                             d ¦  «        }| 
                    dd¦  «        }|rd!|› �nd}|                     ||› d"|› d#|› �f¦  «         Œ‘g }d}|D ]Q\  }}|r3||k    r-|                     ||› d$�f¦  «         t3          |¦  «        d%z
  }Œ:|                     ||f¦  «         ŒR|                     d&¦  «         t          | 
                    d'¦  «        t4          ¦  «        o!t7          | 
                    d'¦  «        ¦  «        } | r|                     d(¦  «         |                     d)¦  «         |                     d*¦  «         t9          d+„ |D ¦   «         |¬,¦  «        }!|!�||!         d         d-k    rt!          d.¦  «         d	S ||!         d         }"|"d/k    rt;          ¦   «          d	S |"dk    rt=          ||¦  «         �nÂ|"d0k    rt?          ||¦  «         �nª|"d1k    rtA          ||| ¬2¦  «         �n�|"d3k    rtC          ||¦  «         �nx|"d4k    rtE          ||¦  «         �n`|"d5k    rtG          ||¦  «         �nH|"d6k    rtI          ||¦  «         �n0|"d7k    rtK          ||¦  «         �n|"dk    rtM          |¦  «         �n|" '                    d8¦  «        s|"|v rJ | |¦   «         ¦  «         
                    |"¦  «        }|€t!          d9¦  «         d	S tQ          ||¦  «         nž|"d:k    rtS          |¦  «         nˆ|"d;k    rtU          ||¦  «         nq|"d<k    rtW          ||¦  «         nZ|"d=k    rtY          ||¦  «         nC|"d>k    rt[          ||¦  «         n,|"d?k    rt]          ||¦  «         n|"d@v rt_          ||"|¦  «         |"dAvr%|" '                    d8¦  «        sta          ¦   «          d	S d	S d	S )Ba  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   )Úresolve_providerÚ	AuthErrorÚformat_auth_error)Úget_compatible_custom_providersrS   r3  )Úresolve_provider_fullrm   r   rn   z	(not set)Nr   rç  ÚautoÚ	providerszUnknown provider 'zb'. Check 'hermes model' for available providers, or run 'hermes doctor' to diagnose config issues.z	Warning: z) Falling back to auto provider detection.Ú
openrouterrr   Úcustom)ÚCANONICAL_PROVIDERSÚ_PROVIDER_LABELSÚnonez  Current model:    z  Active provider:  c                 ó*   — g | ]}|j         |j        f‘ŒS rÜ   )ÚslugÚtui_desc)ry   r…  s     r   rß   z-select_provider_and_model.<locals>.<listcomp>÷  s!   € ÐGÐGÐG¨a�a”f˜aœjÐ)ÐGÐGÐGr   r   c                 óT  •‡— ddl m} i Š |¦   «         }dt          dt          dt          dt          dd f
ˆfd„}|                     d	¦  «        }t	          |t
          ¦  «        r{|D ]x}t	          |t          ¦  «        sŒ ||                     dd
¦  «        d
|                     dd
¦  «        p|                     dd
¦  «        |                     dd
¦  «        ¦  «         Œy|                     d¦  «        }t	          |t          ¦  «        r’|                     ¦   «         D ]}\  }}t	          |t          ¦  «        sŒ ||                     dd
¦  «        p|||                     dd
¦  «        p|                     dd
¦  «        |                     dd
¦  «        ¦  «         Œ~dt          dt          dt          dt          fˆfd„}i }	 ‰| ¦  «        D �]]}
t	          |
t          ¦  «        sŒ|
                     d¦  «        pd
                     ¦   «         }|
                     d¦  «        pd
                     ¦   «         }|r|sŒpd| 	                    ¦   «          
                    dd¦  «        z   }|
                     d¦  «        pd
                     ¦   «         }|r	  ‰|¦  «         n# ‰$ r |}Y nw xY w|||
                     dd
¦  «        |
                     dd
¦  «        |
                     dd
¦  «        |
                     dd
¦  «        | ||||
                     dd
¦  «        ¦  «        dœ|	|<   �Œ_|	S )Nr   )Úread_raw_configr?   Úprovider_keyrm   ru   r   c                 ó„  •— t          |pd¦  «                             ¦   «         }d|vrd S t          | pd¦  «                             ¦   «         } t          |pd¦  «                             ¦   «         }t          |pd¦  «                             ¦   «         }| rS‰                     |                      ¦   «         f|¦  «         ‰                     |                      ¦   «         |f|¦  «         |rU‰                     |                     ¦   «         f|¦  «         ‰                     |                     ¦   «         |f|¦  «         d S d S )Nrn   ú${)r‰   r1   rï  rÅ   )r?   rk  rm   ru   ÚtemplateÚraw_api_key_refss        €r   Ú_record_rawzRselect_provider_and_model.<locals>._named_custom_provider_map.<locals>._record_raw  sE  ø€ õ ˜7˜= bÑ)Ô)×/Ò/Ñ1Ô1ˆHØ˜8Ð#Ð#Ø�Ý�t�z˜r‘?”?×(Ò(Ñ*Ô*ˆDÝ˜|Ð1¨rÑ2Ô2×8Ò8Ñ:Ô:ˆLÝ˜˜ Ñ$Ô$×*Ò*Ñ,Ô,ˆEð
 ð MØ ×+Ò+¨T¯ZªZ©\¬\¨O¸XÑFÔFÐFØ ×+Ò+¨T¯ZªZ©\¬\¸5Ð,AÀ8ÑLÔLÐLØð Ø ×+Ò+¨\×-?Ò-?Ñ-AÔ-AÐ,CÀXÑNÔNÐNØ ×+Ò+Ø!×'Ò'Ñ)Ô)¨5Ð1°8ñô ð ð ð ðð r   Úcustom_providersrn   Údefault_modelr`  c                 ól  •— t          | pd¦  «                             ¦   «                              ¦   «         }t          |pd¦  «                             ¦   «                              ¦   «         }t          |pd¦  «                             ¦   «         }||f|f||f|ffD ]}|d         r|‰v r
‰|         c S ŒdS )Nrn   r   ©r‰   r1   rÅ   )r?   rk  rm   Úname_lcÚpkey_lcÚidentityro  s         €r   Ú_lookup_refzRselect_provider_and_model.<locals>._named_custom_provider_map.<locals>._lookup_ref9  sÌ   ø€ Ý˜$˜* "‘o”o×+Ò+Ñ-Ô-×3Ò3Ñ5Ô5ˆGÝ˜,Ð,¨"Ñ-Ô-×3Ò3Ñ5Ô5×;Ò;Ñ=Ô=ˆGÝ˜˜ Ñ$Ô$×*Ò*Ñ,Ô,ˆEà˜%Ð Ø�
Ø˜%Ð Ø�
ð	ð 6ð 6�ð ˜A”;ð 6 8Ð/?Ð#?Ð#?Ø+¨HÔ5Ð5Ð5Ð5øØ�2r   r€   úcustom:r¼   ú-Úkey_envÚapi_mode)r?   r€   ru   r{  rm   r|  rk  Úapi_key_ref)r„   rj  r‰   r†   r‡   rë   rˆ   r‘   r1   rÅ   rB  )r–   rj  Úraw_cfgrp  Úraw_listÚ	raw_entryÚraw_providersÚraw_keyrx  Úcustom_provider_mapr–  r?   r€   rž   rk  ro  r[  r]  rZ  s                  @€€€r   Ú_named_custom_provider_mapz=select_provider_and_model.<locals>._named_custom_provider_mapù  sÊ  øø€ Ø5Ð5Ð5Ð5Ð5Ð5ð .0ÐØ!�/Ñ#Ô#ˆð	Ýð	åð	õ ð	õ ð		ð
 ð	ð 	ð 	ð 	ð 	ð 	ð2 —;’;Ð1Ñ2Ô2ˆÝ�h¥Ñ%Ô%ð 
	Ø%ð 	ð 	�	Ý! )­TÑ2Ô2ð ØØ�Ø—M’M &¨"Ñ-Ô-ØØ—M’M '¨2Ñ.Ô.ð :Ø —}’} _°bÑ9Ô9Ø—M’M )¨RÑ0Ô0ñô ð ð ð  Ÿš KÑ0Ô0ˆÝ�m¥TÑ*Ô*ð 
	Ø&3×&9Ò&9Ñ&;Ô&;ð 	ð 	Ñ"�˜Ý! )­TÑ2Ô2ð ØØ�Ø—M’M &¨"Ñ-Ô-Ð8°ØØ—M’M '¨2Ñ.Ô.ð :Ø —}’} _°bÑ9Ô9Ø—M’M )¨RÑ0Ô0ñô ð ð ð	�cð 	µð 	½Sð 	ÅSð 	ð 	ð 	ð 	ð 	ð 	ð !ÐØ4Ð4°SÑ9Ô9ð 	ñ 	ˆEÝ˜e¥TÑ*Ô*ð ØØ—I’I˜fÑ%Ô%Ð+¨×2Ò2Ñ4Ô4ˆDØŸ	š	 *Ñ-Ô-Ð3°×:Ò:Ñ<Ô<ˆHØð ˜xð ØØ˜dŸjšj™lœl×2Ò2°3¸Ñ<Ô<Ñ<ˆCØ!ŸIšI nÑ5Ô5Ð;¸×BÒBÑDÔDˆLØð 'ð'Ø$Ð$ \Ñ2Ô2Ð2Ð2øØ ð 'ð 'ð 'Ø&�C�C�Cð'øøøð Ø$Ø Ÿ9š9 Y°Ñ3Ô3Ø Ÿ9š9 Y°Ñ3Ô3ØŸš 7¨BÑ/Ô/Ø!ŸIšI j°"Ñ5Ô5Ø ,Ø*˜{Ø˜,¨¯	ª	°'¸2Ñ(>Ô(>ñ ô  ð(ð (Ð Ñ$Ñ$ð #Ð"s   ÊJÊJ&Ê%J&r?   r€   úhttps://úhttp://rÔ   õ    â€” ú (rÖ   õ     â†� currently activer   )rb  z$Custom endpoint (enter URL manually)rq  )úremove-customzRemove a saved custom provider)ú
aux-configzConfigure auxiliary models...)ÚcancelzLeave unchangedc                 ó   — g | ]\  }}|‘ŒS rÜ   rÜ   ©ry   rŸ   r  s      r   rß   z-select_provider_and_model.<locals>.<listcomp>„  s   € Ð'Ð'Ð'‘8�1�eˆÐ'Ð'Ð'r   ©r   rŒ  ú
No change.r‹  ú
ai-gatewayÚnousrV  úopenai-codexú
qwen-oauthúgoogle-gemini-cliúcopilot-acpÚcopilotry  zyWarning: the selected saved custom provider is no longer available. It may have been removed from config.yaml. No change.rŠ  Ú	anthropicúkimi-codingÚstepfunÚbedrockúazure-foundry)ÚgeminiÚdeepseekÚxaiÚzaiúkimi-coding-cnÚminimaxú
minimax-cnÚkilocodeúopencode-zenúopencode-goÚalibabaÚhuggingfaceÚxiaomiÚarceeÚnvidiaúollama-cloud)rb  rŒ  rŠ  )1r…   rZ  r[  r\  r„   r]  rS   r3  Úhermes_cli.providersr^  r†   r‡   rˆ   r8   rx   r´   r   Úhermes_cli.modelsrc  rd  r‰   r‘   rB  Úrstriprµ  r+   rë   ÚboolÚ_prompt_provider_choiceÚ_aux_config_menuÚ_model_flow_openrouterÚ_model_flow_ai_gatewayÚ_model_flow_nousÚ_model_flow_openai_codexÚ_model_flow_qwen_oauthÚ_model_flow_google_gemini_cliÚ_model_flow_copilot_acpÚ_model_flow_copilotÚ_model_flow_customr,   Ú_model_flow_named_customÚ_remove_custom_providerÚ_model_flow_anthropicÚ_model_flow_kimiÚ_model_flow_stepfunÚ_model_flow_bedrockÚ_model_flow_azure_foundryÚ_model_flow_api_key_providerÚ_clear_stale_openai_base_url)&r   r\  rS   r3  r^  ÚconfigÚcurrent_modelÚconfig_providerr—   Úeffective_providerÚcompatible_custom_providersr¥   Ú
active_defÚwarningrA   rc  rd  Úprovider_labelsÚactive_labelÚall_providersr„  Ú_custom_provider_maprž   Úprovider_infor?   r€   Ú	short_urlÚsaved_modelÚ
model_hintÚorderedÚdefault_idxr  Ú_has_saved_custom_listÚprovider_idxÚselected_providerr[  r]  rZ  s&                                      @@@r   rW  rW  ª  sy  øøø€ ðð ð ð ð ð ð ð ð ð ð
ð ð ð ð ð ð ð ð ð ð
 ;Ð:Ð:Ð:Ð:Ð:àˆ[‰]Œ]€FØ—J’J˜wÑ'Ô'€MÝ�-¥Ñ&Ô&ð 9Ø%×)Ò)¨)°RÑ8Ô8ˆØ!Ð0 [€Mð €OØ—
’
˜7Ñ#Ô#€IÝ�)�TÑ"Ô"ð 4Ø#Ÿ-š-¨
Ñ3Ô3ˆð 	ÐK�2œ9Ð%@ÑAÔAÐKÀVð ð #BÐ"AÀ&Ñ"IÔ"IÐØ€FØ˜VÒ#Ð#Ø*Ð*ØØ�JŠJ�{Ñ#Ô#Ø'ñ
ô 
ˆ
ð
 Ð!Ø”]ˆFˆFðÐ%7ð ð ð ð õ
 ÐP˜gÐPÐPÐPÑQÔQÐQØ€~ð	Ø%Ð% fÑ-Ô-ˆFˆFøØð 	ð 	ð 	Ø! VÒ+Ð+Ø+Ð+¨CÑ0Ô0�ÝÐT 'ÐTÐTÐTÑUÔUÐUØˆFˆFˆFˆFˆFˆFøøøøð		øøøð �ÒÐ - -Ð0AÑ"BÔ"BÐØˆàGÐGÐGÐGÐGÐGÐGÐGåÐ+Ñ,Ô,€OØ:@ÐL�?×&Ò& v¨vÑ6Ô6Ð6Àf€Lå	�G„G€GÝ	Ð
0 Ð
0Ð
0Ñ1Ô1Ð1Ý	Ð
/ Ð
/Ð
/Ñ0Ô0Ð0Ý	�G„G€Gð HÐGÐ3FÐGÑGÔG€Mði#­4µµT½#½s¸(´^Ð0CÔ+Dð i#ð i#ð i#ð i#ð i#ð i#ð i#ð i#ðX 6Ð5Øñô Ðð 3×8Ò8Ñ:Ô:ð Ið IÑˆˆ]Ø˜VÔ$ˆØ  Ô,ˆØ×$Ò$ Z°Ñ4Ô4×<Ò<¸YÈÑKÔK×RÒRÐSVÑWÔWˆ	Ø#×'Ò'¨°Ñ4Ô4ˆØ.9ÐAÐ*˜[Ð*Ð*Ð*¸rˆ
Ø×Ò˜c dÐ#FÐ#F¨iÐ#FÐ#F¸*Ð#FÐ#FÐGÑHÔHÐHÐHð €GØ€KØ#ð )ð )‰
ˆˆUØð 	)�c˜V’m�mØ�NŠN˜C EÐ!AÐ!AÐ!AÐBÑCÔCÐCÝ˜g™,œ,¨Ñ*ˆKˆKà�NŠN˜C ˜<Ñ(Ô(Ð(Ð(à‡N‚NÐEÑFÔFÐFÝ'¨¯
ª
Ð3EÑ(FÔ(FÍÑMÔMð ÕRVØ�
Š
Ð%Ñ&Ô&ñSô SÐð ð LØ�ŠÐJÑKÔKÐKØ‡N‚NÐBÑCÔCÐCØ‡N‚NÐ0Ñ1Ô1Ð1å*Ø'Ð'˜wÐ'Ñ'Ô'Øðñ ô €Lð Ð˜w |Ô4°QÔ7¸8ÒCÐCÝˆlÑÔÐØˆà Ô-¨aÔ0Ðà˜LÒ(Ð(ÝÑÔÐØˆð ˜LÒ(Ð(Ý˜v }Ñ5Ô5Ð5Ñ5Ø	˜lÒ	*Ð	*Ý˜v }Ñ5Ô5Ð5Ñ5Ø	˜fÒ	$Ð	$Ý˜ °TÐ:Ñ:Ô:Ð:Ñ:Ø	˜nÒ	,Ð	,Ý  ¨Ñ7Ô7Ð7Ñ7Ø	˜lÒ	*Ð	*Ý˜v }Ñ5Ô5Ð5Ñ5Ø	Ð1Ò	1Ð	1Ý% f¨mÑ<Ô<Ð<Ñ<Ø	˜mÒ	+Ð	+Ý ¨Ñ6Ô6Ð6Ñ6Ø	˜iÒ	'Ð	'Ý˜F MÑ2Ô2Ð2Ñ2Ø	˜hÒ	&Ð	&Ý˜6Ñ"Ô"Ð"Ñ"à×$Ò$ YÑ/Ô/ð*OàÐ 4Ð4Ð4à2Ð2°;°;±=´=ÑAÔA×EÒEÐFWÑXÔXˆØÐ ÝðHñô ð ð ˆFÝ  ¨Ñ7Ô7Ð7Ð7Ø	˜oÒ	-Ð	-Ý Ñ'Ô'Ð'Ð'Ø	˜kÒ	)Ð	)Ý˜f mÑ4Ô4Ð4Ð4Ø	˜mÒ	+Ð	+Ý˜ Ñ/Ô/Ð/Ð/Ø	˜iÒ	'Ð	'Ý˜F MÑ2Ô2Ð2Ð2Ø	˜iÒ	'Ð	'Ý˜F MÑ2Ô2Ð2Ð2Ø	˜oÒ	-Ð	-Ý! &¨-Ñ8Ô8Ð8Ð8Ø	ð ð 
ð 
õ$ 	% VÐ->ÀÑNÔNÐNð ð !ð ð ð  ×*Ò*¨9Ñ5Ô5ð	õ
 	%Ñ&Ô&Ð&Ð&Ð&ðð ð ð s   ÄD* Ä*EÄ/&EÅEc                  ó²  — ddl m} m}m}  |¦   «         }|                     di ¦  «        }t          |t          ¦  «        r<|                     d¦  «        pd                     ¦   «                              ¦   «         }nd}|dk    s|sdS  | d¦  «        }|rB |dd¦  «         t          t          |¦  «        d	k    rd
|dd	…         › d�nd
|› d�¦  «         dS dS )aQ  Remove OPENAI_BASE_URL from ~/.hermes/.env if the active provider is not 'custom'.

    After a provider switch, a leftover OPENAI_BASE_URL causes auxiliary
    clients (compression, vision, delegation) with provider:auto to route
    requests to the old custom endpoint instead of the newly selected
    provider.  See issue #5161.
    r   )r3  r4  rS   rm   r   rn   rb  Nrr   rÏ   z.Cleared stale OPENAI_BASE_URL from .env (was: z...)rÖ   )r„   r3  r4  rS   r†   r‡   rˆ   r1   rÅ   r   r+   )r3  r4  rS   r–   r—   r   Ú	stale_urls          r   rÄ  rÄ  Ü  s)  € ð MÐLÐLÐLÐLÐLÐLÐLÐLÐLà
ˆ+‰-Œ-€CØ—’˜ Ñ$Ô$€IÝ�)�TÑ"Ô"ð Ø—M’M *Ñ-Ô-Ð3°×:Ò:Ñ<Ô<×BÒBÑDÔDˆˆàˆà�8ÒÐ 8ÐØˆà�Ð/Ñ0Ô0€IØð 
ØˆÐ(¨"Ñ-Ô-Ð-Ýå�9‰~Œ~ Ò"Ð"ð R¸YÀsÈÀs¼^ÐQÐQÐQÐQàNÀ)ÐNÐNÐNñ	
ô 	
ð 	
ð 	
ð 	
ð
ð 
r   ))ÚvisionÚVisionzimage/screenshot analysis)ÚcompressionÚCompressionzcontext summarization)Úweb_extractzWeb extractzweb page summarization)Úsession_searchzSession searchzpast-conversation recall)ÚapprovalÚApprovalzsmart command approval)ÚmcpÚMCPzMCP tool reasoning)Útitle_generationzTitle generationzsession titles)Ú
skills_hubz
Skills hubzskills search/installÚ
_AUX_TASKSÚtask_cfgc                 óP  — t          | t          ¦  «        sdS t          |                      d¦  «        pd¦  «                             ¦   «         }t          |                      d¦  «        pd¦  «                             ¦   «         pd}t          |                      d¦  «        pd¦  «                             ¦   «         }|rM|                     dd¦  «                             dd¦  «                             d¦  «        }d	|› d
�|rd|› �ndz   S |dk    rd|rd|› �ndz   S |r|› d|› �S |S )z;Render the current aux config for display in the task menu.r_  r€   rn   r   rm   r…  r†  rÔ   zcustom (rÖ   õ    Â· )r‡   rˆ   r‰   r†   r1   rB  r¯  )rè  r€   r   rm   Úshorts        r   Ú_format_aux_currentrì    sC  € å�h¥Ñ%Ô%ð ØˆvÝ�8—<’< 
Ñ+Ô+Ð1¨rÑ2Ô2×8Ò8Ñ:Ô:€HÝ�8—<’< 
Ñ+Ô+Ð5¨vÑ6Ô6×<Ò<Ñ>Ô>ÐHÀ&€HÝ�—’˜WÑ%Ô%Ð+¨Ñ,Ô,×2Ò2Ñ4Ô4€EØð GØ× Ò  ¨RÑ0Ô0×8Ò8¸ÀBÑGÔG×NÒNÈsÑSÔSˆØ"˜%Ð"Ð"Ð"¸Ð&E n¨U n n nÀ2ÑFÐFØ�6ÒÐØ¨5Ð8˜ ˜˜˜°bÑ9Ð9Øð (ØÐ'Ð' Ð'Ð'Ð'Ø€Or   rn   ©rm   r€   ru   Útaskr€   ru   c                ó<  — ddl m}m}  |¦   «         }|                     di ¦  «        }t	          |t
          ¦  «        si }||d<   |                     | i ¦  «        }	t	          |	t
          ¦  «        si }	|	|| <   ||	d<   |pd|	d<   |pd|	d<   |pd|	d<    ||¦  «         d	S )
u  Persist an auxiliary task's provider/model to config.yaml.

    Only writes the four routing fields â€” timeout, download_timeout, and any
    other task-specific settings are preserved untouched. The main model
    config (``model.default``/``model.provider``) is never modified.
    r   ©rS   Úsave_configÚ	auxiliaryr   rn   rm   r€   ru   N)r„   rS   rñ  rï  r‡   rˆ   )
rî  r   rm   r€   ru   rS   rñ  r–   Úauxr–  s
             r   Ú_save_aux_choicerô  %  s×   € ð ;Ð:Ð:Ð:Ð:Ð:Ð:Ð:à
ˆ+‰-Œ-€CØ
�.Š.˜ bÑ
)Ô
)€CÝ�c�4Ñ Ô ð ØˆØˆˆKÑØ�NŠN˜4 Ñ$Ô$€EÝ�e�TÑ"Ô"ð ØˆØˆˆD‰	Ø €Eˆ*ÑØ�[˜b€Eˆ'�NØ ˜ B€Eˆ*ÑØ�} "€Eˆ)ÑØ€K�ÑÔÐÐÐr   c                  ó¸  — ddl m} m}  | ¦   «         }|                     di ¦  «        }t	          |t
          ¦  «        si }||d<   d}t          D ]€\  }}}|                     |i ¦  «        }t	          |t
          ¦  «        si }|||<   d}	|                     d¦  «        dvrd|d<   d}	d	D ]}
|                     |
¦  «        rd
||
<   d}	Œ|	r|dz  }Œ� ||¦  «         |S )zDReset every known aux task back to auto/empty. Returns number reset.r   rð  rò  Fr   )Nrn   r_  r_  Trí  rn   r   )r„   rS   rñ  rï  r‡   rˆ   rç  r†   )rS   rñ  r–   ró  Úcountrî  Ú_nameÚ_descr–  ÚchangedÚfields              r   Ú_reset_aux_to_autorû  E  s,  € à:Ð:Ð:Ð:Ð:Ð:Ð:Ð:à
ˆ+‰-Œ-€CØ
�.Š.˜ bÑ
)Ô
)€CÝ�c�4Ñ Ô ð ØˆØˆˆKÑØ€EÝ(ð ð Ñˆˆe�UØ—’˜t RÑ(Ô(ˆÝ˜%¥Ñ&Ô&ð 	ØˆEØˆC�‰IØˆØ�9Š9�ZÑ Ô Ð(:Ð:Ð:Ø &ˆE�*ÑØˆGØ5ð 	ð 	ˆEØ�yŠy˜ÑÔð Ø!��e‘Ø�øàð 	Ø�Q‰JˆEøØ€K�ÑÔÐØ€Lr   c                  óö  — ddl m}  	  | ¦   «         }t          |                     d¦  «        t          ¦  «        r|                     di ¦  «        ni }t          ¦   «          t          d¦  «         t          ¦   «          t          d¦  «         t          d¦  «         t          d¦  «         t          d	¦  «         t          d
¦  «         t          ¦   «          t          d„ t          D ¦   «         ¦  «        dz   }t          d„ t          D ¦   «         ¦  «        dz   }g }t          D ] \  }}}t          |                     |¦  «        t          ¦  «        r|                     |i ¦  «        ni }	t          |	¦  «        }
| 	                    |¦  «        › d|z   dz    	                    |¦  «        › |
› �}| 
                    ||f¦  «         Œ¡| 
                    d¦  «         | 
                    d¦  «         t          d„ |D ¦   «         d¬¦  «        }|€dS ||         d         }|dk    rdS |dk    rCt          ¦   «         }|rt          d|› d�¦  «         nt          d¦  «         t          ¦   «          �Œct          |¦  «         �Œs)uÁ   Top-level auxiliary-model picker â€” choose a task to configure.

    Loops until the user picks "Back" so multiple tasks can be configured
    without returning to the main provider menu.
    r   rR   Trò  u(     Auxiliary models â€” side-task routingz@  Side tasks (vision, compression, web extraction, etc.) defaultu@     to your main chat model.  "auto" means "use my main model" â€”z>  Hermes only falls back to a lightweight backend (OpenRouter,z<  Nous Portal) if the main model is unavailable.  Override az@  task below if you want it pinned to a specific provider/model.c              3   ó<   K  — | ]\  }}}t          |¦  «        V — Œd S rw   ©r+   )ry   rŸ   r?   s      r   r{   z#_aux_config_menu.<locals>.<genexpr>z  s.   è è € Ð>Ð>¡Z Q¨¨a•s˜4‘y”yÐ>Ð>Ð>Ð>Ð>Ð>r   r!   c              3   ó<   K  — | ]\  }}}t          |¦  «        V — Œd S rw   rþ  )ry   rŸ   Údescs      r   r{   z#_aux_config_menu.<locals>.<genexpr>{  s.   è è € Ð>Ð>¡Z Q¨¨4•s˜4‘y”yÐ>Ð>Ð>Ð>Ð>Ð>r   rÌ   ú(rÖ   )Ú	__reset__zReset all to auto)Ú__back__ÚBackc                 ó   — g | ]\  }}|‘ŒS rÜ   rÜ   rŽ  s      r   rß   z$_aux_config_menu.<locals>.<listcomp>†  s   € Ð+Ð+Ð+‘x�q˜%ˆUÐ+Ð+Ð+r   r�  Nr  r  zReset z auxiliary task(s) to auto.z-All auxiliary tasks were already set to auto.)r„   rS   r‡   r†   rˆ   r   r½   rç  rì  Úljustrµ  r±  rû  Ú_aux_select_for_task)rS   r–   ró  Úname_colÚdesc_colÚentriesÚtask_keyr?   r   rè  rJ  r  r!  rž   rÿ  s                  r   r²  r²  c  s£  € ð .Ð-Ð-Ð-Ð-Ð-ð+"Øˆk‰mŒmˆÝ*4°S·W²W¸[Ñ5IÔ5IÍ4Ñ*PÔ*PÐXˆc�gŠg�k 2Ñ&Ô&Ð&ÐVXˆå‰ŒˆÝÐ8Ñ9Ô9Ð9Ý‰ŒˆÝÐPÑQÔQÐQÝÐTÑUÔUÐUÝÐNÑOÔOÐOÝÐLÑMÔMÐMÝÐPÑQÔQÐQÝ‰Œˆõ Ð>Ð>µ:Ð>Ñ>Ô>Ñ>Ô>ÀÑBˆÝÐ>Ð>µ:Ð>Ñ>Ô>Ñ>Ô>ÀÑBˆØ)+ˆÝ$.ð 	.ð 	.Ñ ˆH�d˜DÝ0:¸3¿7º7À8Ñ;LÔ;LÍdÑ0SÔ0SÐ[�s—w’w˜x¨Ñ,Ô,Ð,ÐY[ˆHÝ)¨(Ñ3Ô3ˆGØ—z’z (Ñ+Ô+ÐZ¨c°D©j¸3Ñ.>×-EÒ-EÀhÑ-OÔ-OÐZÐQXÐZÐZˆEØ�NŠN˜H eÐ,Ñ-Ô-Ð-Ð-Ø�ŠÐ9Ñ:Ô:Ð:Ø�ŠÐ,Ñ-Ô-Ð-å%Ø+Ð+ 7Ð+Ñ+Ô+°Qð
ñ 
ô 
ˆð ˆ;ØˆFØ�cŒl˜1ŒoˆØ�*ÒÐØˆFØ�+ÒÐÝ"Ñ$Ô$ˆAØð GÝÐ=˜qÐ=Ð=Ð=Ñ>Ô>Ð>Ð>åÐEÑFÔFÐFÝ‰GŒGˆGÙå˜SÑ!Ô!Ð!ñW+"r   c                 óÆ  ‡ — ddl m} ddlm}  |¦   «         }t	          |                     d¦  «        t          ¦  «        r|                     di ¦  «        ni }t	          |                     ‰ ¦  «        t          ¦  «        r|                     ‰ i ¦  «        ni }t          |                     d¦  «        pd¦  «                             ¦   «         pd}t          |                     d¦  «        pd¦  «                             ¦   «         }t          |                     d	¦  «        pd¦  «                             ¦   «         }t          ˆ fd
„t          D ¦   «         ‰ ¦  «        }		  ||¬¦  «        }
n+# t          $ r}t          d|› �¦  «         g }
Y d}~nd}~ww xY wg }|dk    r|sdnd}|                     dd|› �g f¦  «         |
D ]�}|                     dd¦  «        }|                     d¦  «        p|}|                     dd¦  «        }|                     d¦  «        pg }|rd|› d�nd}||k    r|sdnd}|                     ||› |› |› �t          |¦  «        f¦  «         Œž|rdnd}|                     dd|› �g f¦  «         |                     ddg f¦  «         t          ¦   «          t          d|	› dt          |¦  «        › �¦  «         t          ¦   «          t!          d„ |D ¦   «         d¬¦  «        }|€dS ||         \  }}}|dk    rdS |dk    r(t#          ‰ dddd¬¦  «         t          |	› d �¦  «         dS |dk    rt%          ‰ |¦  «         dS t'          ‰ |||¦  «         dS )!ui  Pick a provider + model for a single auxiliary task and persist it.

    Uses ``list_authenticated_providers()`` to only show providers the user
    has already configured. This avoids re-running OAuth/credential flows
    inside the aux picker â€” users set up new providers through the normal
    ``hermes model`` flow, then route aux tasks to them here.
    r   rR   )Úlist_authenticated_providersrò  r   r_  rm   rn   r€   c              3   ó0   •K  — | ]\  }}}|‰k    ¯|V — Œd S rw   rÜ   ©ry   rž   r?   rŸ   rî  s       €r   r{   z'_aux_select_for_task.<locals>.<genexpr>«  ó-   øè è € ÐLÐL¡, # t¨QÀÀtÂÀ˜ÀÀÀÀÐLÐLr   )Úcurrent_providerz*Could not detect authenticated providers: Nu     â†� currentÚ__auto__zauto (recommended)rg  r?   Útotal_modelsÚmodelsr‡  z modelsÚ
__custom__zCustom endpoint (direct URL)r  r  z  Configure u    â€” current: c                 ó   — g | ]\  }}}|‘Œ	S rÜ   rÜ   rŽ  s      r   rß   z(_aux_select_for_task.<locals>.<listcomp>Ë  s   € Ð"DÐ"DÐ"D©[¨Q°°q 5Ð"DÐ"DÐ"Dr   r�  ©r   rm   r€   ru   z: reset to auto.)r„   rS   Úhermes_cli.model_switchr  r‡   r†   rˆ   r‰   r1   Únextrç  r7   r   rµ  rë   rì  r±  rô  Ú_aux_flow_custom_endpointÚ_aux_flow_provider_model)rî  rS   r  r–   ró  rè  r  rÆ  Úcurrent_base_urlÚdisplay_namer`  rA   r
  Úauto_markerr…  rg  r?   Útotalr  rÓ  r}  Úcustom_markerr!  Ú_labels   `                       r   r  r  ™  sù  ø€ ð .Ð-Ð-Ð-Ð-Ð-ØDÐDÐDÐDÐDÐDà
ˆ+‰-Œ-€CÝ&0°·²¸Ñ1EÔ1EÅtÑ&LÔ&LÐ
Tˆ#�'Š'�+˜rÑ
"Ô
"Ð
"ÐRT€CÝ$.¨s¯wªw°t©}¬}½dÑ$CÔ$CÐKˆs�wŠw�t˜RÑ Ô Ð È€HÝ˜8Ÿ<š<¨
Ñ3Ô3Ð=°vÑ>Ô>×DÒDÑFÔFÐPÈ&ÐÝ˜Ÿš WÑ-Ô-Ð3°Ñ4Ô4×:Ò:Ñ<Ô<€MÝ˜8Ÿ<š<¨
Ñ3Ô3Ð9°rÑ:Ô:×@Ò@ÑBÔBÐåÐLÐLÐLÐLµ*ÐLÑLÔLÈdÑSÔS€LðØ0Ð0ÐBRÐSÑSÔSˆ	ˆ	øÝð ð ð ÝÐ@¸3Ð@Ð@ÑAÔAÐAØˆ	ˆ	ˆ	ˆ	ˆ	ˆ	øøøøðøøøð 13€Gà%5¸Ò%?Ð%?ÐHXÐ%?�/�/Ð^`€KØ‡N‚N�JÐ B°[Ð BÐ BÀBÐGÑHÔHÐHàð Lð LˆØ�uŠu�V˜RÑ Ô ˆØ�uŠu�V‰}Œ}Ð$ ˆØ—’�n aÑ(Ô(ˆØ—’�x‘”Ð& BˆØ/4Ð<Ð+˜UÐ+Ð+Ð+Ð+¸"ˆ
Ø$(Ð,<Ò$<Ð$<ÐEUÐ$<��Ð[]ˆØ�Š˜ Ð; zÐ;°6Ð;Ð;½TÀ&¹\¼\ÐJÑKÔKÐKÐKð (8Ð?�O�O¸R€MØ‡N‚N�LÐ"PÀÐ"PÐ"PÐRTÐUÑVÔVÐVØ‡N‚N�J ¨Ð+Ñ,Ô,Ð,å	�G„G€GÝ	Ð
T˜Ð
TÐ
TÕ5HÈÑ5RÔ5RÐ
TÐ
TÑUÔUÐUÝ	�G„G€Gå
!Ð"DÐ"D¸GÐ"DÑ"DÔ"DÈaÐ
PÑ
PÔ
P€CØ
€{ØˆØ" 3œ<Ñ€Dˆ&�&àˆzÒÐØˆàˆzÒÐÝ˜¨°bÀ2ÈrÐRÑRÔRÐRÝ�Ð/Ð/Ð/Ñ0Ô0Ð0Øˆàˆ|ÒÐÝ! $¨Ñ1Ô1Ð1Øˆõ ˜T 4¨°Ñ?Ô?Ð?Ð?Ð?s   ÅE+ Å+
FÅ5FÆFÚprovider_slugÚcurated_modelsrÆ  c                 óx  ‡ — ddl m} ddlm} t	          ˆ fd„t
          D ¦   «         ‰ ¦  «        }i }	  ||¦  «        pi }n# t          $ r i }Y nw xY wt          |¦  «        }|spt          d|› d�¦  «         t          d¦  «         	 t          d¦  «         
                    ¦   «         }	n&# t          t          f$ r t          ¦   «          Y d	S w xY w|	pd
}
n! ||||¬¦  «        }
|
€t          d¦  «         d	S t          ‰ ||
pd
d
d
¬¦  «         |
rt          |› d|› d|
› �¦  «         d	S t          |› d|› d�¦  «         d	S )zHPrompt for a model under an already-authenticated provider, save to aux.r   )Ú_prompt_model_selection)Úget_pricing_for_providerc              3   ó0   •K  — | ]\  }}}|‰k    ¯|V — Œd S rw   rÜ   r  s       €r   r{   z+_aux_flow_provider_model.<locals>.<genexpr>ê  r  r   zNo curated model list for ú.z;Enter a model slug manually (blank = use provider default):zModel: Nrn   ©rÆ  Úpricingr�  r  ú: rê  z (provider default model))r…   r%  r®  r&  r  rç  r7   rë   r   r  r1   r  r  rô  )rî  r"  r#  rÆ  r%  r&  r  r*  Ú
model_listr    Úselecteds   `          r   r  r  à  sê  ø€ ð 8Ð7Ð7Ð7Ð7Ð7Ø:Ð:Ð:Ð:Ð:Ð:åÐLÐLÐLÐLµ*ÐLÑLÔLÈdÑSÔS€Lð €GðØ*Ð*¨=Ñ9Ô9Ð?¸RˆˆøÝð ð ð Øˆˆˆðøøøõ �nÑ%Ô%€Jð
 ð ÝÐ;¨=Ð;Ð;Ð;Ñ<Ô<Ð<ÝÐKÑLÔLÐLð	Ý˜	Ñ"Ô"×(Ò(Ñ*Ô*ˆCˆCøÝ!¥8Ð,ð 	ð 	ð 	Ý‰GŒGˆGØˆFˆFð	øøøð �9˜"ˆˆà*Ð*Ø m¸Wð
ñ 
ô 
ˆð ÐÝ�,ÑÔÐØˆFå�T M¸¸ÀRØ ¨"ð.ñ .ô .ð .àð KÝ�Ð>Ð> Ð>Ð>°HÐ>Ð>Ñ?Ô?Ð?Ð?Ð?å�ÐIÐI ÐIÐIÐIÑJÔJÐJÐJÐJs#   ²A  Á AÁAÂ!B( Â(CÃ
Cc                 ó¤  ‡ — ddl }t          ˆ fd„t          D ¦   «         ‰ ¦  «        }t          |                     d¦  «        pd¦  «                             ¦   «         }t          |                     d¦  «        pd¦  «                             ¦   «         }t          ¦   «          t          d|› �¦  «         t          d¦  «         t          ¦   «          	 |rd	|› d
�nd}t          |¦  «                             ¦   «         }n&# t          t          f$ r t          ¦   «          Y dS w xY w|p|}|st          d¦  «         dS 	 |rd|› d
�nd}t          |¦  «                             ¦   «         }	n&# t          t          f$ r t          ¦   «          Y dS w xY w|	p|}		 |                      d¦  «                             ¦   «         }
n&# t          t          f$ r t          ¦   «          Y dS w xY wt          ‰ d|	||
¬¦  «         |                     dd¦  «                             dd¦  «                             d¦  «        }t          |› d|› d�|	rd|	› �ndz   ¦  «         dS )zHPrompt for a direct OpenAI-compatible base_url + optional api_key/model.r   Nc              3   ó0   •K  — | ]\  }}}|‰k    ¯|V — Œd S rw   rÜ   r  s       €r   r{   z,_aux_flow_custom_endpoint.<locals>.<genexpr>  r  r   r€   rn   rm   z  Custom endpoint for zH  Provide an OpenAI-compatible base URL (e.g. http://localhost:11434/v1)ú
Base URL [r  z
Base URL: zNo URL provided. No change.zModel slug (optional) [zModel slug (optional): z0API key (optional, blank = use OPENAI_API_KEY): rb  r  r…  r†  rÔ   z
: custom (rÖ   rê  )Úgetpassr  rç  r‰   r†   r1   r   r  r  r  rô  rB  r¯  )rî  rè  r1  r  r  rÆ  Ú
url_promptÚurlÚmodel_promptrm   ru   rÑ  s   `           r   r  r    s±  ø€ à€N€N€NåÐLÐLÐLÐLµ*ÐLÑLÔLÈdÑSÔS€LÝ˜8Ÿ<š<¨
Ñ3Ô3Ð9°rÑ:Ô:×@Ò@ÑBÔBÐÝ˜Ÿš WÑ-Ô-Ð3°Ñ4Ô4×:Ò:Ñ<Ô<€Må	�G„G€GÝ	Ð
1 <Ð
1Ð
1Ñ2Ô2Ð2Ý	Ð
TÑUÔUÐUÝ	�G„G€GðØ;KÐ]Ð7Ð"2Ð7Ð7Ð7Ð7ÐQ]ˆ
Ý�JÑÔ×%Ò%Ñ'Ô'ˆˆøÝ�xÐ(ð ð ð Ý‰ŒˆØˆˆðøøøð Ð
!Ð!€CØð ÝÐ+Ñ,Ô,Ð,ØˆðØGTÐsÐC°ÐCÐCÐCÐCÐZsˆÝ�lÑ#Ô#×)Ò)Ñ+Ô+ˆˆøÝ�xÐ(ð ð ð Ý‰ŒˆØˆˆðøøøð Ð"�]€EðØ—/’/Ð"TÑUÔU×[Ò[Ñ]Ô]ˆˆøÝ�xÐ(ð ð ð Ý‰ŒˆØˆˆðøøøõ Ø�x u°sÀGðñ ô ð ð —’˜J¨Ñ+Ô+×3Ò3°I¸rÑBÔB×IÒIÈ#ÑNÔN€IÝ	ˆ\Ð
1Ð
1 YÐ
1Ð
1Ð
1ÀuÐ5T°^¸E°^°^°^ÐRTÑ
UÑVÔVÐVÐVÐVs6   Ã+C= Ã=D ÄD Ä;+E' Å'F
Æ	F
Æ'F: Æ:GÇGr�  c          	      óÈ  — 	 ddl m}  |d| |¦  «        }|dk    rt          ¦   «          |S n# t          $ r Y nw xY wt          d¦  «         t	          | d¦  «        D ]*\  }}|dz
  |k    rdnd}t          d|› d|› d|› �¦  «         Œ+t          ¦   «          	 	 t          d
t          | ¦  «        › d|dz   › d�¦  «                             ¦   «         }|s|S t          |¦  «        dz
  }d|cxk    rt          | ¦  «        k     rn n|S t          dt          | ¦  «        › �¦  «         n@# t          $ r t          d¦  «         Y n%t          t          f$ r t          ¦   «          Y dS w xY wŒÏ)zíShow provider selection menu with curses arrow-key navigation.

    Falls back to a numbered list when curses is unavailable (e.g. piped
    stdin, non-TTY environments).  Returns the selected index, or None
    if the user cancels.
    r   )Ú_curses_prompt_choicezSelect provider:r   u   â†’r¼   r¹   r  Tú
Choice [1-z] (ú): úPlease enter 1-úPlease enter a numberN)r  r6  r   r7   r*   r  r+   r1   rc   r5   r  r  )Úchoicesr   r6  r!  r<   Úcr}  r    s           r   r±  r±  ;  sê  € ðØ:Ð:Ð:Ð:Ð:Ð:à#Ð#Ð$6¸ÀÑIÔIˆØ�!Š8ˆ8Ý‰GŒGˆGØˆJð øõ ð ð ð Øˆðøøøõ 
Ð
ÑÔÐÝ˜' 1Ñ%Ô%ð &ð &‰ˆˆ1Ø˜a™% 7Ò*Ð*��°ˆÝÐ$�6Ð$Ð$˜AÐ$Ð$ Ð$Ð$Ñ%Ô%Ð%Ð%Ý	�G„G€Gðð	ÝÐF¥S¨¡\¤\ÐFÐF°gÀ±kÐFÐFÐFÑGÔG×MÒMÑOÔOˆCØð Ø�Ý�c‘(”(˜Q‘,ˆCØ�CÐ&Ð&Ò&Ð&�#˜g™,œ,Ò&Ð&Ð&Ð&Ð&Ø�
ÝÐ2¥C¨¡L¤LÐ2Ð2Ñ3Ô3Ð3Ð3øÝð 	+ð 	+ð 	+ÝÐ)Ñ*Ô*Ð*Ð*Ð*Ý!¥8Ð,ð 	ð 	ð 	Ý‰GŒGˆGØ�4�4ð	øøøðs0   ‚(, ¬
9¸9Â;D# Ã0D# ÄD# Ä#E Ä>E ÅE c                 ó^  — ddl m}m}m} ddlm}m}  |d¦  «        }|s»t          d¦  «         t          d¦  «         t          ¦   «          	 ddl}|                     d¦  «         	                    ¦   «         }	n&# t          t          f$ r t          ¦   «          Y dS w xY w|	st          d	¦  «         dS  |d|	¦  «         t          d
¦  «         t          ¦   «          ddlm}
m}  |
d¬¦  «        } |dd¬¦  «        } ||||¬¦  «        }|r’ ||¦  «         ddlm}m}  |¦   «         }|                     d¦  «        }t%          |t&          ¦  «        s|rd|ini }||d<   d|d<   t(          |d<   d|d<    ||¦  «          |¦   «          t          d|› d�¦  «         dS t          d¦  «         dS )z5OpenRouter provider: ensure API key, then pick model.r   ©r%  Ú_save_model_choiceÚdeactivate_providerr2  rt   z!No OpenRouter API key configured.z&Get one at: https://openrouter.ai/keysNz)OpenRouter API key (or Enter to cancel): ú
Cancelled.úAPI key saved.)Ú	model_idsr&  T©Úforce_refreshra  r)  rð  rm   r   r   r€   Úchat_completionsr|  úDefault model set to: z (via OpenRouter)r�  )r…   r%  r?  r@  r„   r3  r4  r   r1  r1   r  r  r®  rC  r&  rS   rñ  r†   r‡   rˆ   r\   )rÅ  rÆ  r%  r?  r@  r3  r4  ru   r1  rž   rC  r&  Úopenrouter_modelsr*  r-  rS   rñ  r–   rm   s                      r   r³  r³  b  s…  € ðð ð ð ð ð ð ð ð ð ð
 @Ð?Ð?Ð?Ð?Ð?Ð?Ð?àˆmÐ0Ñ1Ô1€GØð ÝÐ1Ñ2Ô2Ð2ÝÐ6Ñ7Ô7Ð7Ý‰Œˆð	ØˆNˆNˆNà—/’/Ð"MÑNÔN×TÒTÑVÔVˆCˆCøÝ!¥8Ð,ð 	ð 	ð 	Ý‰GŒGˆGØˆFˆFð	øøøð ð 	Ý�,ÑÔÐØˆFØˆÐ+¨SÑ1Ô1Ð1ÝÐÑÔÐÝ‰ŒˆàEÐEÐEÐEÐEÐEÐEÐEà!˜	°Ð5Ñ5Ô5Ðð 'Ð& |À4ÐHÑHÔH€Gà&Ð&Ø¨Àðñ ô €Hð ð ØÐ˜8Ñ$Ô$Ð$ð 	?Ð>Ð>Ð>Ð>Ð>Ð>Ð>àˆk‰mŒmˆØ—’˜Ñ Ô ˆÝ˜%¥Ñ&Ô&ð 	!Ø*/Ð7�Y Ð&Ð&°RˆEØ ˆC�‰LØ(ˆˆjÑÝ/ˆˆjÑØ.ˆˆjÑØˆ�CÑÔÐØÐÑÔÐÝÐB xÐBÐBÐBÑCÔCÐCÐCÐCåˆlÑÔÐÐÐs   Á+A9 Á9BÂBc                 ó|  — ddl m}m}m} ddlm}m}  |d¦  «        }|sÊt          d¦  «         t          d¦  «         t          d¦  «         t          ¦   «          	 ddl}|                     d	¦  «         	                    ¦   «         }	n&# t          t          f$ r t          ¦   «          Y dS w xY w|	st          d
¦  «         dS  |d|	¦  «         t          d¦  «         t          ¦   «          ddlm}
m}  |
d¬¦  «        } |dd¬¦  «        } ||||¬¦  «        }|r’ ||¦  «         ddlm}m}  |¦   «         }|                     d¦  «        }t%          |t&          ¦  «        s|rd|ini }||d<   d|d<   t(          |d<   d|d<    ||¦  «          |¦   «          t          d|› d�¦  «         dS t          d¦  «         dS )zIVercel AI Gateway provider: ensure API key, then pick model with pricing.r   r>  r2  ÚAI_GATEWAY_API_KEYz(No Vercel AI Gateway API key configured.z^Create API key here: https://vercel.com/d?to=%2F%5Bteam%5D%2F%7E%2Fai-gateway&title=AI+Gatewayz/Add a payment method to get $5 in free credits.Nz)AI Gateway API key (or Enter to cancel): rA  rB  )Úai_gateway_model_idsr&  TrD  r‘  r)  rð  rm   r   r   r€   rF  r|  rG  z (via Vercel AI Gateway)r�  )r…   r%  r?  r@  r„   r3  r4  r   r1  r1   r  r  r®  rK  r&  rS   rñ  r†   r‡   rˆ   r[   )rÅ  rÆ  r%  r?  r@  r3  r4  ru   r1  rž   rK  r&  Úmodels_listr*  r-  rS   rñ  r–   rm   s                      r   r´  r´  �  s�  € ðð ð ð ð ð ð ð ð ð ð
 @Ð?Ð?Ð?Ð?Ð?Ð?Ð?àˆmÐ0Ñ1Ô1€GØð ÝÐ8Ñ9Ô9Ð9ÝÐnÑoÔoÐoÝÐ?Ñ@Ô@Ð@Ý‰Œˆð	ØˆNˆNˆNà—/’/Ð"MÑNÔN×TÒTÑVÔVˆCˆCøÝ!¥8Ð,ð 	ð 	ð 	Ý‰GŒGˆGØˆFˆFð	øøøð ð 	Ý�,ÑÔÐØˆFØˆÐ+¨SÑ1Ô1Ð1ÝÐÑÔÐÝ‰ŒˆàPÐPÐPÐPÐPÐPÐPÐPà&Ð&°TÐ:Ñ:Ô:€KØ&Ð& |À4ÐHÑHÔH€Gà&Ð&Ø =¸'ðñ ô €Hð ð ØÐ˜8Ñ$Ô$Ð$à>Ð>Ð>Ð>Ð>Ð>Ð>Ð>àˆk‰mŒmˆØ—’˜Ñ Ô ˆÝ˜%¥Ñ&Ô&ð 	!Ø*/Ð7�Y Ð&Ð&°RˆEØ ˆC�‰LØ(ˆˆjÑÝ/ˆˆjÑØ.ˆˆjÑØˆ�CÑÔÐØÐÑÔÐÝÐI xÐIÐIÐIÑJÔJÐJÐJÐJåˆlÑÔÐÐÐs   Á+B ÂB+Â*B+c                 ó
  — ddl m}m}m}m}m}m}m}	m}
m	} ddl
m}m}m}m} ddlm}  |d¦  «        }|r|                     d¦  «        �sQt%          d¦  «         t%          ¦   «          	 t'          j        t+          |dd	¦  «        t+          |d
d	¦  «        t+          |dd	¦  «        t+          |dd	¦  «        t-          t+          |dd¦  «        ¦  «        t+          |dd	¦  «        pdt+          |dd	¦  «        t-          t+          |dd¦  «        ¦  «        ¬¦  «        } |
||d         ¦  «         	  |¦   «         pi } ||¦  «         n# t.          $ r Y nw xY wnE# t0          $ r t%          d¦  «         Y d	S t.          $ r}t%          d|› �¦  «         Y d	}~d	S d	}~ww xY wd	S ddlm}m}m}m}  |¦   «         }|st%          d¦  «         d	S 	  |d¬¦  «        }ní# t.          $ rà}t=          ||¦  «        o|j        }t=          ||¦  «        r |	|¦  «        ntA          |¦  «        }|r€t%          d|› �¦  «         t%          d¦  «         	 t'          j        d	d	d	d	ddd	d¬¦  «        } |
||d         ¦  «         n)# t.          $ r}t%          d|› �¦  «         Y d	}~nd	}~ww xY wY d	}~d	S t%          d|› �¦  «         Y d	}~d	S d	}~ww xY w |d¦  «        } |¦   «         }g } |r |||d¬¦  «        \  }} |s| st%          d ¦  «         d	S d!}!	  |d¦  «        }"|"r|"                     d"d!¦  «        }!n# t.          $ r Y nw xY w|rE|sCt%          d#¦  «         | r0dd$l m!}# |!p|# "                    d%¦  «        }$t%          d&|$› d'�¦  «         d	S t%          d(tG          |¦  «        › d)�¦  «          ||||| |!¬*¦  «        }%|%�rK ||%¦  «         |                     d+d!¦  «        }& |d|&¦  «         |                      d,¦  «        }'t=          |'tH          ¦  «        rtI          |'¦  «        }(nBt=          |'t@          ¦  «        r+|' %                    ¦   «         rd-|' %                    ¦   «         i}(ni }(d|(d.<   |%|(d-<   |&r-|& %                    ¦   «         r|& "                    d%¦  «        |(d+<   n|( &                    d+d	¦  «         |(| d,<    |d/¦  «        r |d/d!¦  «          |d0d!¦  «          || ¦  «         t%          d1|%› d2�¦  «          || ¦  «         d	S t%          d3¦  «         d	S )4z8Nous Portal provider: ensure logged in, then pick model.r   )	Úget_provider_auth_stater%  r?  Ú_update_config_for_providerÚ resolve_nous_runtime_credentialsr[  r\  Ú_login_nousro   )r3  rS   rñ  r4  )Úprompt_enable_tool_gatewayr’  Úaccess_tokenz.Not logged into Nous Portal. Starting login...Ú
portal_urlNÚinference_urlÚ	client_idÚscopeÚ
no_browserFr4  ç      .@Ú	ca_bundleÚinsecure)rT  rU  rV  rW  rX  r4  rZ  r[  úLogin cancelled or failed.úLogin failed: )Úget_curated_nous_model_idsr&  Úcheck_nous_free_tierÚpartition_nous_models_by_tierz,No curated models available for Nous Portal.i,  )Úmin_key_ttl_secondszSession expired: z&Re-authenticating with Nous Portal...
zRe-login failed: zCould not verify credentials: T)Ú	free_tierz4No models available for Nous Portal after filtering.rn   Úportal_base_urlz#No free models currently available.)ÚDEFAULT_NOUS_PORTAL_URLrÔ   zUpgrade at z to access paid models.zShowing õ=    curated models â€” use "Enter custom model name" for others.)rÆ  r*  Úunavailable_modelsrT  r€   rm   r   r   rr   rp   rG  z (via Nous Portal)r�  )'r…   rN  r%  r?  rO  rP  r[  r\  rQ  ro   r„   r3  rS   rñ  r4  Úhermes_cli.nous_subscriptionrR  r†   r   r   Ú	Namespacer  r°  r7   Ú
SystemExitr®  r^  r&  r_  r`  r‡   Úrelogin_requiredr‰   rd  r¯  r+   rˆ   r1   Úpop))rÅ  rÆ  r   rN  r%  r?  rO  rP  r[  r\  rQ  ro   r3  rS   rñ  r4  rR  ÚstateÚ	mock_argsÚ
_refreshedrA   r^  r&  r_  r`  rC  r©   Úreloginr	  Ú	login_excr*  rb  rf  Ú_nous_portal_urlÚ_nous_staterd  Ú_urlr-  rU  Úcurrent_model_cfgr—   s)                                            r   rµ  rµ  Ö  s£  € ð
ð 
ð 
ð 
ð 
ð 
ð 
ð 
ð 
ð 
ð 
ð 
ð 
ð 
ð 
ð 
ð 
ð 
ð 
ð 
ð 
ð 
ðð ð ð ð ð ð ð ð ð ð ð ð HÐGÐGÐGÐGÐGà#Ð# FÑ+Ô+€EØð ˜Ÿ	š	 .Ñ1Ô1ñ ÝÐ>Ñ?Ô?Ð?Ý‰Œˆð	Ý Ô*Ý" 4¨°tÑ<Ô<Ý% d¨O¸TÑBÔBÝ! $¨°TÑ:Ô:Ý˜d G¨TÑ2Ô2Ý¥¨¨l¸EÑ BÔ BÑCÔCÝ  i°Ñ6Ô6Ð>¸$Ý! $¨°TÑ:Ô:Ý�g d¨J¸Ñ>Ô>Ñ?Ô?ð	ñ 	ô 	ˆIð ˆK˜	Ð#4°VÔ#<Ñ=Ô=Ð=ðØ(˜[™]œ]Ð0¨b�
Ø*Ð*¨:Ñ6Ô6Ð6Ð6øÝð ð ð Ø�ðøøøøøåð 	ð 	ð 	ÝÐ.Ñ/Ô/Ð/ØˆFˆFÝð 	ð 	ð 	ÝÐ( 3Ð(Ð(Ñ)Ô)Ð)ØˆFˆFˆFˆFˆFøøøøð	øøøð 	ˆð
ð ð ð ð ð ð ð ð ð ð ð ð +Ð*Ñ,Ô,€IØð ÝÐ<Ñ=Ô=Ð=ØˆðØ0Ð0ÀVÐLÑLÔLˆˆøÝð ð ð Ý˜S )Ñ,Ô,ÐE°Ô1EˆÝ(2°3¸	Ñ(BÔ(BÐPÐÐ Ñ$Ô$Ð$ÍÈCÉÌˆØð 	ÝÐ+ cÐ+Ð+Ñ,Ô,Ð,ÝÐ;Ñ<Ô<Ð<ð7Ý$Ô.Ø#Ø"&Ø"ØØ$Ø Ø"Ø"ð	ñ 	ô 	�	ð �˜IÐ'8¸Ô'@ÑAÔAÐAÐAøÝð 7ð 7ð 7ÝÐ5¨)Ð5Ð5Ñ6Ô6Ð6Ð6Ð6Ð6Ð6Ð6øøøøð7øøøàˆFˆFˆFˆFˆFÝÐ4¨sÐ4Ð4Ñ5Ô5Ð5Øˆˆˆˆˆøøøøð-øøøð2 'Ð& vÑ.Ô.€Gð %Ð$Ñ&Ô&€Ið %'ÐØð 
Ø(EÐ(EØ�w¨$ð)
ñ )
ô )
Ñ%ˆ	Ð%ð ð Ð/ð ÝÐDÑEÔEÐEØˆð ÐðØ-Ð-¨fÑ5Ô5ˆØð 	FØ*ŸšÐ/@À"ÑEÔEÐøøÝð ð ð Øˆðøøøð ð ˜ð ÝÐ3Ñ4Ô4Ð4Øð 	?Ø?Ð?Ð?Ð?Ð?Ð?à$Ð?Ð(?×GÒGÈÑLÔLˆDÝÐ= Ð=Ð=Ð=Ñ>Ô>Ð>Øˆå	Ø`•3�y‘>”>Ð`Ð`Ð`ñô ð ð 'Ð&ØØ#ØØ-Ø#ðñ ô €Hð ñ ØÐ˜8Ñ$Ô$Ð$àŸ	š	 *¨bÑ1Ô1ˆØ#Ð# F¨MÑ:Ô:Ð:Ø"ŸJšJ wÑ/Ô/ÐÝÐ'­Ñ.Ô.ð 	ÝÐ.Ñ/Ô/ˆIˆIÝÐ)­3Ñ/Ô/ð 	Ð4E×4KÒ4KÑ4MÔ4Mð 	Ø"Ð$5×$;Ò$;Ñ$=Ô$=Ð>ˆIˆIàˆIØ &ˆ	�*ÑØ'ˆ	�)ÑØð 	,˜]×0Ò0Ñ2Ô2ð 	,Ø$1×$8Ò$8¸Ñ$=Ô$=ˆI�jÑ!Ð!à�MŠM˜* dÑ+Ô+Ð+Ø#ˆˆw‰àˆ=Ð*Ñ+Ô+ð 	1ØˆNÐ,¨bÑ1Ô1Ð1ØˆNÐ+¨RÑ0Ô0Ð0Øˆ�FÑÔÐÝÐC xÐCÐCÐCÑDÔDÐDà"Ð" 6Ñ*Ô*Ð*Ð*Ð*åˆlÑÔÐÐÐsž   Á*CE Ä-E ÅE Å
EÅE ÅEÅE ÅFÅ2	FÅ;FÆFÇG Ç
J>ÇA$J9É.I2É1J9É2
JÉ<JÊJ9ÊJÊJ9Ê!J9Ê9J>Ì#L' Ì'
L4Ì3L4c                 óô  — ddl m}m}m}m}m}m}m} ddlm	}	  |¦   «         }
|
 
                    d¦  «        �r_t          d¦  «         t          ¦   «          t          d¦  «         t          d¦  «         t          d¦  «         t          ¦   «          	 t          d	¦  «                             ¦   «         }n# t          t          f$ r d
}Y nw xY w|dk    r¼t          d¦  «         t          ¦   «          	 t!          j        ¦   «         } |||d         d¬¦  «         nE# t$          $ r t          d¦  «         Y dS t&          $ r}t          d|› �¦  «         Y d}~dS d}~ww xY w |¦   «         }
|
 
                    d¦  «        st          d¦  «         dS n’|dk    rdS n‰t          d¦  «         t          ¦   «          	 t!          j        ¦   «         } |||d         ¦  «         nE# t$          $ r t          d¦  «         Y dS t&          $ r}t          d|› �¦  «         Y d}~dS d}~ww xY wd}	  |¦   «         }| 
                    d¦  «        r| 
                    d¦  «        }n# t&          $ r Y nw xY w|s7	 ddl m}  |¦   «         }| 
                    d¦  «        }n# t&          $ r Y nw xY w |	|¬¦  «        } |||¬¦  «        }|r, ||¦  «          |d|¦  «         t          d|› d�¦  «         dS t          d¦  «         dS )z9OpenAI Codex provider: ensure logged in, then pick model.r   )Úget_codex_auth_statusr%  r?  rO  Ú_login_openai_codexro   ÚDEFAULT_CODEX_BASE_URL)Úget_codex_model_idsr}   u     OpenAI Codex credentials: âœ“ú    1. Use existing credentialsú'    2. Reauthenticate (new OAuth login)ú    3. Cancelú  Choice [1/2/3]: rÑ  Ú2z&Starting a fresh OpenAI Codex login...r“  T)Úforce_new_loginr\  Nr]  zLogin failed.Ú3z/Not logged into OpenAI Codex. Starting login...ru   )Ú!resolve_codex_runtime_credentials)rS  ©rÆ  rG  z (via OpenAI Codex)r�  )r…   rv  r%  r?  rO  rw  ro   rx  Úhermes_cli.codex_modelsry  r†   r   r  r1   r  r  r   rh  ri  r7   r�  )rÅ  rÆ  rv  r%  r?  rO  rw  ro   rx  ry  r¢   rG  rm  rA   Ú_codex_tokenÚ_codex_statusr�  Ú_codex_credsÚcodex_modelsr-  s                       r   r¶  r¶  ‚	  sO  € ðð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð <Ð;Ð;Ð;Ð;Ð;à"Ð"Ñ$Ô$€FØ‡z‚z�+ÑÔñ -ÝÐ/Ñ0Ô0Ð0Ý‰ŒˆÝÐ/Ñ0Ô0Ð0ÝÐ7Ñ8Ô8Ð8ÝˆoÑÔÐÝ‰Œˆð	ÝÐ/Ñ0Ô0×6Ò6Ñ8Ô8ˆFˆFøÝ!¥8Ð,ð 	ð 	ð 	ØˆFˆFˆFð	øøøð �SŠ=ˆ=ÝÐ:Ñ;Ô;Ð;Ý‰GŒGˆGðÝ$Ô.Ñ0Ô0�	Ø#Ð#ØØ% nÔ5Ø$(ðñ ô ð ð øõ
 ð ð ð ÝÐ2Ñ3Ô3Ð3Ø��Ýð ð ð ÝÐ, sÐ,Ð,Ñ-Ô-Ð-Ø�����øøøøðøøøð +Ð*Ñ,Ô,ˆFØ—:’:˜kÑ*Ô*ð Ý�oÑ&Ô&Ð&Ø�ðð �sŠ]ˆ]ØˆFð õ 	Ð?Ñ@Ô@Ð@Ý‰Œˆð	Ý Ô*Ñ,Ô,ˆIØÐ 	Ð+<¸^Ô+LÑMÔMÐMÐMøÝð 	ð 	ð 	ÝÐ.Ñ/Ô/Ð/ØˆFˆFÝð 	ð 	ð 	ÝÐ( 3Ð(Ð(Ñ)Ô)Ð)ØˆFˆFˆFˆFˆFøøøøð	øøøð €LðØ-Ð-Ñ/Ô/ˆØ×Ò˜[Ñ)Ô)ð 	8Ø(×,Ò,¨YÑ7Ô7ˆLøøÝð ð ð Øˆðøøøàð ð	ØIÐIÐIÐIÐIÐIà<Ð<Ñ>Ô>ˆLØ'×+Ò+¨IÑ6Ô6ˆLˆLøÝð 	ð 	ð 	ØˆDð	øøøð 'Ð&°LÐAÑAÔA€Là&Ð& |À=ÐQÑQÔQ€HØð ØÐ˜8Ñ$Ô$Ð$Ø#Ð# NÐ4JÑKÔKÐKÝÐD xÐDÐDÐDÑEÔEÐEÐEÐEåˆlÑÔÐÐÐsr   Â!B4 Â4C
Ã	C
Ã1'D ÄEÄ5	EÄ>EÅEÆ6%G ÇHÇ8	HÈHÈHÈ$4I É
I&É%I&É,%J Ê
JÊJúqwen3-coder-pluszqwen3-coderc                 óÂ  — ddl m}m}m}m}m}m} ddlm}  |¦   «         }	|	 	                    d¦  «        sƒt          d¦  «         t          d¦  «         |	 	                    d¦  «        }
|
rt          d|
› �¦  «         |	 	                    d	¦  «        r%t          d
|	 	                    d	¦  «        › �¦  «         dS d}	  |d¬¦  «        } ||d         |d         ¦  «        }n# t          $ r Y nw xY w|st          t          ¦  «        }|p|r|d         nd} |||¬¦  «        }|r, ||¦  «          |d|¦  «         t          d|› d�¦  «         dS t          d¦  «         dS )zAQwen OAuth provider: reuse local Qwen CLI login, then pick model.r   )Úget_qwen_auth_statusÚ resolve_qwen_runtime_credentialsr%  r?  rO  ÚDEFAULT_QWEN_BASE_URL©Úfetch_api_modelsr}   zNot logged into Qwen CLI OAuth.zRun: qwen auth qwen-oauthr£   zExpected credentials file: rï   r'   NT)Úrefresh_if_expiringru   r€   rˆ  r‚  r”  rG  z (via Qwen OAuth)r�  )r…   rŠ  r‹  r%  r?  rO  rŒ  r®  rŽ  r†   r   r7   rë   Ú_DEFAULT_QWEN_PORTAL_MODELS)Ú_configrÆ  rŠ  r‹  r%  r?  rO  rŒ  rŽ  r¢   r£   r  r©   r   r-  s                  r   r·  r·  â	  s  € ðð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð 3Ð2Ð2Ð2Ð2Ð2à!Ð!Ñ#Ô#€FØ�:Š:�kÑ"Ô"ð ÝÐ/Ñ0Ô0Ð0ÝÐ)Ñ*Ô*Ð*Ø—J’J˜{Ñ+Ô+ˆ	Øð 	=ÝÐ;°	Ð;Ð;Ñ<Ô<Ð<Ø�:Š:�gÑÔð 	3ÝÐ1˜FŸJšJ wÑ/Ô/Ð1Ð1Ñ2Ô2Ð2Øˆð €FðØ0Ð0ÀTÐJÑJÔJˆØ!Ð! %¨	Ô"2°E¸*Ô4EÑFÔFˆˆøÝð ð ð Øˆðøøøàð 3ÝÕ1Ñ2Ô2ˆàÐL¨VÐ K  q¤	 	Ð9K€GØ&Ð& v¸WÐEÑEÔE€HØð ØÐ˜8Ñ$Ô$Ð$Ø#Ð# LÐ2GÑHÔHÐHÝÐB xÐBÐBÐBÑCÔCÐCÐCÐCåˆlÑÔÐÐÐs   Â<$C! Ã!
C.Ã-C.c                 ój  — ddl m}m}m}m}m}m} ddlm} t          ¦   «          t          d¦  «         t          d¦  «         t          d¦  «         t          d¦  «         t          ¦   «          	 t          d¦  «                             ¦   «                              ¦   «         }	n'# t          t          f$ r t          d	¦  «         Y d
S w xY w|	dvrt          d	¦  «         d
S  |¦   «         }
|
                     d¦  «        sK	 ddlm}m}  |¦   «         } |d|¬¦  «         n*# t&          $ r}t          d|› �¦  «         Y d
}~d
S d
}~ww xY w	  |d¬¦  «        }|                     dd¦  «        }|rt          d|› �¦  «         nt          d¦  «         n*# t&          $ r}t          d|› �¦  «         Y d
}~d
S d
}~ww xY wt)           |j        d¦  «        pg ¦  «        }|p|r|d         nd} |||¬¦  «        }|r, ||¦  «          |d|¦  «         t          d|› d�¦  «         d
S t          d¦  «         d
S )už  Google Gemini OAuth (PKCE) via Cloud Code Assist â€” supports free AND paid tiers.

    Flow:
      1. Show upfront warning about Google's ToS stance (per opencode-gemini-auth).
      2. If creds missing, run PKCE browser OAuth via agent.google_oauth.
      3. Resolve project context (env -> config -> auto-discover -> free tier).
      4. Prompt user to pick a model.
      5. Save to ~/.hermes/config.yaml.
    r   )Ú!DEFAULT_GEMINI_CLOUDCODE_BASE_URLÚget_gemini_oauth_auth_statusÚ(resolve_gemini_oauth_runtime_credentialsr%  r?  rO  ©Ú_PROVIDER_MODELSuH   âš   Google considers using the Gemini CLI OAuth client with third-partyz@   software a policy violation. Some users have reported accountzC   restrictions. You can use your own API key via 'gemini' providerz"   for the lowest-risk experience.z"Continue with OAuth login? [y/N]: rA  N>   r  r  r}   )Úresolve_project_id_from_envÚstart_oauth_flowT)Úforce_reloginÚ
project_idzOAuth login failed: FrD  r›  rn   z  Using GCP project: uT     No GCP project configured â€” free tier will be auto-provisioned on first request.z&Failed to resolve Gemini credentials: r•  zgemini-3-flash-previewr‚  rG  z( (via Google Gemini OAuth / Code Assist)r�  )r…   r“  r”  r•  r%  r?  rO  r®  r—  r   r  r1   rÅ   r  r  r†   Úagent.google_oauthr˜  r™  r7   rë   )r‘  rÆ  r“  r”  r•  r%  r?  rO  r—  Úproceedr¢   r˜  r™  Úenv_projectrA   r©   r›  r  r   r-  s                       r   r¸  r¸  
  sO  € ðð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð 3Ð2Ð2Ð2Ð2Ð2å	�G„G€GÝ	Ð
TÑUÔUÐUÝ	Ð
LÑMÔMÐMÝ	Ð
OÑPÔPÐPÝ	Ð
.Ñ/Ô/Ð/Ý	�G„G€GðÝÐ<Ñ=Ô=×CÒCÑEÔE×KÒKÑMÔMˆˆøÝÕ'Ð(ð ð ð ÝˆlÑÔÐØˆˆðøøøð �lÐ"Ð"ÝˆlÑÔÐØˆà)Ð)Ñ+Ô+€FØ�:Š:�kÑ"Ô"ð ð	ØXÐXÐXÐXÐXÐXÐXÐXà5Ð5Ñ7Ô7ˆKØÐ¨4¸KÐHÑHÔHÐHÐHøÝð 	ð 	ð 	ÝÐ.¨Ð.Ð.Ñ/Ô/Ð/ØˆFˆFˆFˆFˆFøøøøð	øøøð
Ø8Ð8ÀuÐMÑMÔMˆØ—Y’Y˜|¨RÑ0Ô0ˆ
Øð 	ÝÐ6¨*Ð6Ð6Ñ7Ô7Ð7Ð7åØfñô ð øøõ ð ð ð ÝÐ<°sÐ<Ð<Ñ=Ô=Ð=Øˆˆˆˆˆøøøøðøøøõ Ð&Ð"Ô&Ð':Ñ;Ô;ÐA¸rÑBÔB€FØÐR¨VÐ Q  q¤	 	Ð9Q€GØ&Ð& v¸WÐEÑEÔE€HØð 	ØÐ˜8Ñ$Ô$Ð$Ø#Ð#ØÐ!Bñ	
ô 	
ð 	
õ 	ØW XÐWÐWÐWñ	
ô 	
ð 	
ð 	
ð 	
õ 	ˆlÑÔÐÐÐsC   Á03B$ Â$ CÃCÄ D  Ä 
EÄ*EÅEÅAF Æ
F9ÆF4Æ4F9c           
      ób  ‡— ddl m}m} ddlm}m}m}  |d¦  «        pd} |d¦  «        pd}t          d¦  «         |rt          d|› �¦  «         |rt          d	|d
d…         › d�¦  «         t          ¦   «          	 t          d|pd› d�¦  «         	                    ¦   «         }dd
l
}	|	 
                    d|r|d
d…         dz   nd› d�¦  «         	                    ¦   «         }
n'# t          t          f$ r t          d¦  «         Y d
S w xY w|s|st          d¦  «         d
S |p|}|                     d¦  «        st          d|› d�¦  «         d
S |
p|}|                     d¦  «                             ¦   «         Št!          ˆfd„dD ¦   «         ¦  «        }|rõ‰                     d¦  «        sàt          ¦   «          t          d¦  «         t          d¦  «         t          d|                     d¦  «        › d�¦  «         	 t          d¦  «         	                    ¦   «                              ¦   «         }n# t          t          f$ r d}Y nw xY w|d v r.|                     d¦  «        dz   }|r|}t          d!|› �¦  «         t          ¦   «          dd"lm}  |||¦  «        }|                     d#¦  «        r;|                     d$¦  «        r&t          d%|d$         › d&�¦  «         |d$         }|r|}nÞ|                     d'¦  «        �Lt          d(|                     d)¦  «        › d*t+          |                     d'¦  «        pg ¦  «        › d+�¦  «         n}t          d,|                     d)¦  «        › d-�¦  «         |                     d.¦  «        rB|d.         }|                     d¦  «        rt          d/|› �¦  «         nt          d0|› �¦  «         d}|                     d'¦  «        pg }	 t+          |¦  «        d1k    r{t          d2|d         › �¦  «         t          d3¦  «         	                    ¦   «                              ¦   «         }|d v r
|d         }�nt          d4¦  «         	                    ¦   «         }nüt+          |¦  «        d1k    rÈt          d5¦  «         t-          |d1¦  «        D ]\  }}t          d6|› d7|› �¦  «         Œt          d8t+          |¦  «        › d9�¦  «         	                    ¦   «         }|                     ¦   «         rCd1t1          |¦  «        cxk    rt+          |¦  «        k    rn n|t1          |¦  «        d1z
           }n&|r|}n!t          d4¦  «         	                    ¦   «         }t          d:¦  «         	                    ¦   «         }t3          |¦  «        }t          d;|› d�¦  «         	                    ¦   «         p|}n'# t          t          f$ r t          d¦  «         Y d
S w xY wd
}|rz	 t1          |                     d<d¦  «                             d=d>¦  «                             d?d>¦  «        ¦  «        }|dk    rd
}n%# t6          $ r t          d@|› dA�¦  «         d
}Y nw xY w|r± ||¦  «          |¦   «         }|                     dB¦  «        }t9          |t:          ¦  «        s|rdC|ini }||dB<   dD|dE<   ||dF<   |r||dG<   |                     dHd
¦  «          ||¦  «          |¦   «          t;          |¦  «        | dB<   t          dI|› dJ|› dK�¦  «         n{|s|
r
 |¦   «          |                      dB¦  «        }t9          |t:          ¦  «        s|rdC|ini }dD|dE<   ||dF<   |r||dG<   |                     dHd
¦  «         || dB<   t          dL¦  «         t?          |||pd||¬M¦  «         d
S )NzÃCustom endpoint: collect URL, API key, and model name.

    Automatically saves the endpoint to ``custom_providers`` in config.yaml
    so it appears in the provider menu on subsequent runs.
    r   ©r?  r@  )r3  rS   rñ  rr   rn   rp   z0Custom OpenAI-compatible endpoint configuration:z  Current URL: z  Current key: NrÍ   r  zAPI base URL [ze.g. https://api.example.com/v1r  ú	API key [Úoptionalú
Cancelled.zNo URL provided. Cancelled.©r†  r…  úInvalid URL: ú& (must start with http:// or https://)rÔ   c              3   ó    •K  — | ]}|‰v V — Œ	d S rw   rÜ   )ry   ÚhÚ
_url_lowers     €r   r{   z%_model_flow_custom.<locals>.<genexpr>ˆ
  s;   øè è € ð ð àð 	
ˆZˆðð ð ð ð ð r   )Ú	localhostú	127.0.0.1z0.0.0.0z:11434z:8080z:5000z/v1z+  Hint: Did you mean to add /v1 at the end?z@  Most local model servers (Ollama, vLLM, llama.cpp) require it.z  e.g. z  Add /v1? [Y/n]: rÿ  r   z  Updated URL: )Úprobe_api_modelsÚused_fallbackÚresolved_base_urlz)Warning: endpoint verification worked at zL/models, not the exact URL you entered. Saving the working base URL instead.r  zVerified endpoint via Ú
probed_urlrˆ  z model(s) visible)z,Warning: could not verify this endpoint via z. Hermes will still save it.Úsuggested_base_urlz8  If this server expects /v1 in the path, try base URL: z-  If /v1 should not be in the base URL, try: r   z  Detected model: z  Use this model? [Y/n]: z&Model name (e.g. gpt-4, llama-3-70b): z  Available models:ú    r  z  Select model [1-z] or type name: z8Context length in tokens [leave blank for auto-detect]: zDisplay name [ú,r  Ú000ÚKzInvalid context length: u    â€” will auto-detect.rm   r   rb  r   r€   ru   r|  rG  ú (via rÖ   zFEndpoint saved. Use `/model` in chat or `hermes model` to set a model.)Úcontext_lengthr?   ) r…   r?  r@  r„   r3  rS   rñ  r   r  r1   r1  r  r  r,   r¯  rÅ   rŽ   r“  r®  r¬  r†   r+   r*   Úisdigitrc   Ú_auto_provider_namerB  r5   r‡   rˆ   rk  Ú_save_custom_provider) rÅ  r?  r@  r3  rS   rñ  Úcurrent_urlÚcurrent_keyr€   r1  ru   Úeffective_urlÚeffective_keyÚ_looks_localÚ_add_v1r¬  rS  Ú	suggestedÚ
model_nameÚdetected_modelsÚconfirmr<   ÚmÚpickÚcontext_length_strÚdefault_namer  r¶  r–   rm   Ú_caller_modelr©  s                                   @r   r»  r»  X
  sâ	  ø€ ð HÐGÐGÐGÐGÐGÐGÐGØIÐIÐIÐIÐIÐIÐIÐIÐIÐIà�-Ð 1Ñ2Ô2Ð8°b€KØ�-Ð 0Ñ1Ô1Ð7°R€Kå	Ð
<Ñ=Ô=Ð=Øð /ÝÐ- Ð-Ð-Ñ.Ô.Ð.Øð 6ÝÐ4 ¨B¨Q¨B¤Ð4Ð4Ð4Ñ5Ô5Ð5Ý	�G„G€GðÝØR˜[ÐMÐ,MÐRÐRÐRñ
ô 
ç
Š%‰'Œ'ð 	ð 	ˆˆˆà—/’/ØS°;ÐN˜ B Q Bœ¨%Ñ/Ð/ÀJÐSÐSÐSñ
ô 
ç
Š%‰'Œ'ð 	ˆøõ �xÐ(ð ð ð ÝˆnÑÔÐØˆˆðøøøð ð ˜Kð ÝÐ+Ñ,Ô,Ð,Øˆð Ð+ €MØ×#Ò#Ð$;Ñ<Ô<ð ÝÐS˜mÐSÐSÐSÑTÔTÐTØˆàÐ*˜{€Mð
 ×%Ò% cÑ*Ô*×0Ò0Ñ2Ô2€JÝð ð ð ð àRðñ ô ñ ô €Lð ð ˜J×/Ò/°Ñ6Ô6ð Ý‰ŒˆÝÐ<Ñ=Ô=Ð=ÝÐQÑRÔRÐRÝÐ6˜×,Ò,¨SÑ1Ô1Ð6Ð6Ð6Ñ7Ô7Ð7ð	ÝÐ0Ñ1Ô1×7Ò7Ñ9Ô9×?Ò?ÑAÔAˆGˆGøÝ!¥8Ð,ð 	ð 	ð 	ØˆGˆGˆGð	øøøàÐ&Ð&Ð&Ø)×0Ò0°Ñ5Ô5¸Ñ=ˆMØð )Ø(�ÝÐ3 MÐ3Ð3Ñ4Ô4Ð4Ý‰Œˆà2Ð2Ð2Ð2Ð2Ð2àÐ˜]¨MÑ:Ô:€EØ‡y‚y�Ñ!Ô!ð S e§i¢iÐ0CÑ&DÔ&Dð SÝðS¸Ð>QÔ8Rð Sð Sð Sñ	
ô 	
ð 	
ð Ð1Ô2ˆØð 	%Ø$ˆHøØ	�Š�8Ñ	Ô	Ð	(ÝðC U§Y¢Y¨|Ñ%<Ô%<ð Cð CÝ�E—I’I˜hÑ'Ô'Ð-¨2Ñ.Ô.ðCð Cð Cñ	
ô 	
ð 	
ð 	
õ
 	ð*¸5¿9º9À\Ñ;RÔ;Rð *ð *ð *ñ	
ô 	
ð 	
ð �9Š9Ð)Ñ*Ô*ð 	SØÐ2Ô3ˆIØ×!Ò! %Ñ(Ô(ð SÝØZÈyÐZÐZñô ð ð õ ÐQÀiÐQÐQÑRÔRÐRð €JØ—i’i Ñ)Ô)Ð/¨R€OðÝˆÑÔ 1Ò$Ð$ÝÐ; °qÔ'9Ð;Ð;Ñ<Ô<Ð<ÝÐ7Ñ8Ô8×>Ò>Ñ@Ô@×FÒFÑHÔHˆGØÐ*Ð*Ð*Ø,¨QÔ/�
‘
å"Ð#KÑLÔL×RÒRÑTÔT�
�
Ý�Ñ!Ô! AÒ%Ð%ÝÐ'Ñ(Ô(Ð(Ý! /°1Ñ5Ô5ð 'ð '‘��1Ý�o˜Q�o�o !�o�oÑ&Ô&Ð&Ð&ÝØK¥S¨Ñ%9Ô%9ÐKÐKÐKñô çŠe‰gŒgð ð �|Š|‰~Œ~ð " !¥s¨4¡y¤yÐ"HÐ"HÒ"HÐ"HµC¸Ñ4HÔ4HÒ"HÐ"HÐ"HÐ"HÐ"HØ,­S°©Y¬Y¸©]Ô;�
�
Øð "Ø!�
øåÐGÑHÔH×NÒNÑPÔPˆJå"ØFñ
ô 
ç
Š%‰'Œ'ð 	õ
 +¨=Ñ9Ô9ˆÝÐ?¨lÐ?Ð?Ð?Ñ@Ô@×FÒFÑHÔHÐXÈLˆˆøÝ�xÐ(ð ð ð ÝˆnÑÔÐØˆˆðøøøð €NØð "ð
	"Ý Ø"×*Ò*¨3°Ñ3Ô3ß’˜˜eÑ$Ô$ß’˜˜eÑ$Ô$ñô ˆNð
  Ò"Ð"Ø!%�øøÝð 	"ð 	"ð 	"ÝÐWÐ-?ÐWÐWÐWÑXÔXÐXØ!ˆNˆNˆNð	"øøøð ð &XØÐ˜:Ñ&Ô&Ð&ð ˆk‰mŒmˆØ—’˜Ñ Ô ˆÝ˜%¥Ñ&Ô&ð 	!Ø*/Ð7�Y Ð&Ð&°RˆEØ ˆC�‰LØ$ˆˆjÑØ)ˆˆjÑØð 	-Ø,ˆE�)ÑØ�	Š	�*˜dÑ#Ô#Ð#Øˆ�CÑÔÐØÐÑÔÐõ ˜u™+œ+ˆˆw‰åÐI zÐIÐI¸ÐIÐIÐIÑJÔJÐJÐJàð 	"�wð 	"ØÐÑ!Ô!Ð!ð Ÿ
š
 7Ñ+Ô+ˆÝ˜-­Ñ.Ô.ð 	PØ:GÐO˜Y¨Ð6Ð6ÈRˆMØ$,ˆ�jÑ!Ø$1ˆ�jÑ!Øð 	5Ø'4ˆM˜)Ñ$Ø×Ò˜* dÑ+Ô+Ð+Ø'ˆˆw‰ÝÐVÑWÔWÐWõ ØØØÐ�bØ%Øðñ ô ð ð ð sK   Á=A%C# Ã# DÄDÇ=3H1 È1IÉIÏ$G!W × W*×)W*×2AY ÙY(Ù'Y(c                 ól  — ddl }|                      dd¦  «                             dd¦  «                             d¦  «        }|                     dd|¦  «        }|                     d¦  «        d         }d|v sd	|v rd
|› d�}n1d|                     ¦   «         v rd|› d�}n|                     ¦   «         }|S )zþGenerate a display name from a custom endpoint URL.

    Returns a human-friendly label like "Local (localhost:11434)" or
    "RunPod (xyz.runpod.io)".  Used as the default when prompting the
    user for a display name during custom endpoint setup.
    r   Nr…  rn   r†  rÔ   z/v1/?$rª  r«  zLocal (rÖ   ÚrunpodzRunPod ()ÚrerB  r¯  Úsubr-   rÅ   Ú
capitalize)r€   rË  Úcleanr?   s       r   r¸  r¸    sË   € ð €I€I€Ià×Ò˜Z¨Ñ,Ô,×4Ò4°YÀÑCÔC×JÒJÈ3ÑOÔO€EØ�FŠF�9˜b %Ñ(Ô(€EØ�;Š;�sÑÔ˜AÔ€DØ�dÐÐ˜k¨TÐ1Ð1Ø ˜Ð Ð Ð ˆˆØ	�T—Z’Z‘\”\Ð	!Ð	!Ø!˜$Ð!Ð!Ð!ˆˆà�ŠÑ Ô ˆØ€Kr   c                 óª  — t          |                      dd¦  «        pd¦  «                             ¦   «         }|r|S t          |                      dd¦  «        pd¦  «                             ¦   «         }|r=t          |                      dd¦  «        pd¦  «                             ¦   «         sd|› d�S t          |pd¦  «                             ¦   «         S )zDReturn the value that should be persisted for a custom provider key.r}  rn   r{  ru   rm  ú})r‰   r†   r1   )rÐ  Úresolved_api_keyr}  r{  s       r   Ú%_custom_provider_api_key_config_valuerÒ  3  sÕ   € å�m×'Ò'¨°rÑ:Ô:Ð@¸bÑAÔA×GÒGÑIÔI€KØð ØÐå�-×#Ò# I¨rÑ2Ô2Ð8°bÑ9Ô9×?Ò?ÑAÔA€GØð !•s˜=×,Ò,¨Y¸Ñ;Ô;ÐA¸rÑBÔB×HÒHÑJÔJð !Ø �WÐ Ð Ð Ð åÐÐ% 2Ñ&Ô&×,Ò,Ñ.Ô.Ð.r   c                 óü  — ddl m}m}  |¦   «         }|                     d¦  «        pg }t	          |t
          ¦  «        sg }|D ]Ï}	t	          |	t          ¦  «        r¸|	                     dd¦  «                             d¦  «        |                      d¦  «        k    rxd}
|r |	                     d¦  «        |k    r||	d<   d	}
|r=|r;|	                     d
i ¦  «        }t	          |t          ¦  «        si }d|i||<   ||	d
<   d	}
|
r||d<    ||¦  «          dS ŒÐ|st          | ¦  «        }|| dœ}	|r||	d<   |r||	d<   |r|r	|d|ii|	d
<   | 	                    |	¦  «         ||d<    ||¦  «         t          d|› d�¦  «         dS )u  Save a custom endpoint to custom_providers in config.yaml.

    Deduplicates by base_url â€” if the URL already exists, updates the
    model name and context_length but doesn't add a duplicate entry.
    Uses *name* when provided, otherwise auto-generates from the URL.
    r   rð  rq  r€   rn   rÔ   Frm   Tr  r¶  N)r?   r€   ru   u%     ðŸ’¾ Saved to custom providers as "z" (edit in config.yaml))r„   rS   rñ  r†   r‡   rë   rˆ   r¯  r¸  rµ  r   )r€   ru   rm   r¶  r?   rS   rñ  r–   r`  r–  rù  Ú
models_cfgs               r   r¹  r¹  @  s#  € ð ;Ð:Ð:Ð:Ð:Ð:Ð:Ð:à
ˆ+‰-Œ-€CØ—’Ð*Ñ+Ô+Ð1¨r€IÝ�i¥Ñ&Ô&ð Øˆ	ð ð ð ˆÝ�e�TÑ"Ô"ð 	 u§y¢y°¸RÑ'@Ô'@×'GÒ'GØñ(
ô (
à�_Š_˜SÑ!Ô!ò("ð ("ð ˆGØð ˜Ÿš 7Ñ+Ô+¨uÒ4Ð4Ø!&��g‘Ø�Øð ˜ð Ø"ŸYšY x°Ñ4Ô4�
Ý! *­dÑ3Ô3ð $Ø!#�JØ%5°~Ð$F�
˜5Ñ!Ø",��h‘Ø�Øð !Ø*3�Ð&Ñ'Ø�˜CÑ Ô Ð ØˆFˆFøð ð -Ý" 8Ñ,Ô,ˆà xÐ0Ð0€EØð #Ø"ˆˆiÑØð Øˆˆg‰Øð F�ð FØ Ð#3°^Ð"DÐEˆˆh‰à×Ò�UÑÔÐØ'€CÐÑØ€K�ÑÔÐÝ	Ð
O°$Ð
OÐ
OÐ
OÑPÔPÐPÐPÐPr   c                 ó  — ddl m}m} ddlm}m}m}m} ddlm	} ddl
}	|                      di ¦  «        }
t          |
t          ¦  «        rd|
                     d¦  «        dk    rKt          |
                     d	d
¦  «        pd
¦  «        }t          |
                     dd
¦  «        pd
¦  «        }nd
}d
} |d¦  «        pd
}t          ¦   «          t          d¦  «         t          d¦  «         t          ¦   «          t          d¦  «         t          d¦  «         t          d¦  «         t          d¦  «         t          ¦   «          |rt          d|› �¦  «         |r|dk    rdnd}t          d|› �¦  «         |rt          d|dd…         › d�¦  «         t          ¦   «          	 t!          d|pd› d�¦  «                             ¦   «         }n'# t$          t&          f$ r t          d¦  «         Y dS w xY w|p|                     d¦  «        }|st          d ¦  «         dS |                     d!¦  «        st          d"|› d#�¦  «         dS t          ¦   «          	 |	 
                    d$|r|dd…         dz   nd%› d�¦  «                             ¦   «         }n'# t$          t&          f$ r t          d¦  «         Y dS w xY w|p|}|st          d&¦  «         dS t          ¦   «          t          d'¦  «         |                     ||¦  «        }t/          |j        ¦  «        }|j        pd
}|r^|dk    rdnd}t          d(|› �¦  «         |j        rt          d)|j        › d*�¦  «         |r t          d+t7          |¦  «        › d,�¦  «         nÔt          d-|j        › �¦  «         t          ¦   «          t          d.¦  «         t          d/¦  «         t          d0¦  «         t          d1¦  «         t          d2¦  «         	 |d3k    rd4nd5}t!          d6|› d7�¦  «                             ¦   «         p|}n'# t$          t&          f$ r t          d¦  «         Y dS w xY w|d4k    rd3nd}t          ¦   «          d
}|�rSt          d8¦  «         t9          |dd9…         d:¬;¦  «        D ]\  }}t          d<|d=›d>|› �¦  «         Œt7          |¦  «        d9k    r#t          d?t7          |¦  «        d9z
  › d@�¦  «         t          ¦   «          	 t!          dA|p|d         › d�¦  «                             ¦   «         }n'# t$          t&          f$ r t          d¦  «         Y dS w xY w|s|p|d         }n¼|                     ¦   «         rQd:t=          |¦  «        cxk    r!t?          t7          |¦  «        d9¦  «        k    rn n|t=          |¦  «        d:z
           }nW|}nT	 t!          dB|pdC› d�¦  «                             ¦   «         }n'# t$          t&          f$ r t          d¦  «         Y dS w xY w|p|}|st          dD¦  «         dS |                      |||¦  «        } |d|¦  «          |¦   «         }|                     d¦  «        } t          | t          ¦  «        s| rdE| ini } | |d<   d| d<   || d	<   || d<   || dE<   |r|| dF<    ||¦  «          |¦   «          t          | ¦  «        | d<    |dG¦  «        r |dGd
¦  «          |dH¦  «        r |dHd
¦  «         |dk    rdnd}t          ¦   «          t          dI¦  «         t          dJ|› �¦  «         t          dK|› �¦  «         t          dL|› �¦  «         |rt          dM|dN›dO�¦  «         nt          dP¦  «         t          ¦   «          dS )Qu.  Azure Foundry provider: configure endpoint, API mode, API key, and model.

    Azure Foundry supports both OpenAI-style (``/v1/chat/completions``) and
    Anthropic-style (``/v1/messages``) endpoints.  The wizard auto-detects
    the transport and available models when possible:

    * URLs ending in ``/anthropic`` â†’ Anthropic Messages API.
    * Successful ``GET <base>/models`` probe â†’ OpenAI-style + populates
      a picker with the returned deployment / model IDs.
    * Anthropic Messages probe fallback when ``/models`` fails.
    * Manual entry when every probe fails (private endpoints, etc.).

    Context lengths for the chosen model are resolved via the standard
    :func:`agent.model_metadata.get_model_context_length` chain
    (models.dev, provider metadata, hardcoded family fallbacks).
    r   r   ©r3  r4  rS   rñ  )Úazure_detectNrm   r   rœ  r€   rn   r|  ÚAZURE_FOUNDRY_API_KEYzAzure Foundry Configurationr5  z9Azure Foundry can host models with either OpenAI-style orz6Anthropic-style API endpoints.  Hermes will probe yourz6endpoint to auto-detect the transport and the deployedzmodels when possible.z  Current endpoint: rF  zOpenAI-stylezAnthropic-stylez  Current API mode: z  Current API key:  rÍ   r  zAPI endpoint URL [z5e.g. https://your-resource.openai.azure.com/openai/v1r  r£  rÔ   z$No endpoint URL provided. Cancelled.r¤  r¥  r¦  r¡  ÚrequiredzNo API key provided. Cancelled.u;   â—� Probing endpoint to auto-detect transport and models...u   âœ“ Detected API transport: z    (rÖ   u
   âœ“ Found z# deployed model(s) on this endpointu   âš  Auto-detection incomplete: z7Select the API format your Azure Foundry endpoint uses:z.  1. OpenAI-style  (POST /v1/chat/completions)z:     For: GPT models, Llama, Mistral, and most open modelsz)  2. Anthropic-style  (POST /v1/messages)z9     For: Claude models deployed via Anthropic API formatÚanthropic_messagesr~  rÑ  zAPI format [1/2] (r8  z"Available models on this endpoint:é   r   )rB   r¹   z>2r  z
  ... and z' more (type name manually if not shown)z+Pick by number, or type a deployment name [zModel / deployment name [ze.g. gpt-5.4, claude-sonnet-4-6z"No model name provided. Cancelled.r   r¶  rr   rp   u   âœ“ Azure Foundry configured:z    Endpoint:       z    API mode:       z    Model:          z    Context length: r²  z tokenszA    Context length: not auto-detected (will fall back at runtime))!r…   r?  r@  r„   r3  r4  rS   rñ  Ú
hermes_clir×  r1  r†   r‡   rˆ   r‰   r   r  r1   r  r  r¯  r,   Údetectrë   r  r|  Úreasonr+   r*   r·  rc   r÷   Úlookup_context_length)!rÅ  rÆ  r?  r@  r3  r4  rS   rñ  r×  r1  r—   r  Úcurrent_api_modeÚcurrent_api_keyÚ_lblr€   r¼  ru   r½  Ú	detectionÚdiscovered_modelsr|  rI  Údefault_choiceÚmode_choiceÚeffective_modelr<   ÚmidrÅ  rÁ  Úctx_lenr–   rm   s!                                    r   rÂ  rÂ  w  s”	  € ð" HÐGÐGÐGÐGÐGÐGÐGØYÐYÐYÐYÐYÐYÐYÐYÐYÐYÐYÐYØ'Ð'Ð'Ð'Ð'Ð'Ø€N€N€Nð —
’
˜7 BÑ'Ô'€IÝ�)�TÑ"Ô"ð  y§}¢}°ZÑ'@Ô'@ÀOÒ'SÐ'SÝ˜yŸ}š}¨Z¸Ñ<Ô<ÐBÀÑCÔCÐÝ˜yŸ}š}¨Z¸Ñ<Ô<ÐBÀÑCÔCÐÐàÐØÐà#�mÐ$;Ñ<Ô<ÐBÀ€Oå	�G„G€GÝ	Ð
'Ñ(Ô(Ð(Ý	ˆ(�O„O€OÝ	�G„G€GÝ	Ð
EÑFÔFÐFÝ	Ð
BÑCÔCÐCÝ	Ð
BÑCÔCÐCÝ	Ð
!Ñ"Ô"Ð"Ý	�G„G€Gàð 9ÝÐ7Ð%5Ð7Ð7Ñ8Ô8Ð8Øð -Ø!1Ð5GÒ!GÐ!Gˆ~ˆ~ÐM^ˆÝÐ+ TÐ+Ð+Ñ,Ô,Ð,Øð ?ÝÐ= _°R°a°RÔ%8Ð=Ð=Ð=Ñ>Ô>Ð>Ý	�G„G€GðÝØqÐ!1Ð!lÐ5lÐqÐqÐqñ
ô 
ç
Š%‰'Œ'ð 	ˆøõ �xÐ(ð ð ð ÝˆnÑÔÐØˆˆðøøøð Ð1Ð!1×9Ò9¸#Ñ>Ô>€MØð ÝÐ4Ñ5Ô5Ð5ØˆØ×#Ò#Ð$;Ñ<Ô<ð ÝÐS˜mÐSÐSÐSÑTÔTÐTØˆõ 
�G„G€GðØ—/’/Ø[°ÐV˜¨¨¨Ô+¨eÑ3Ð3ÈJÐ[Ð[Ð[ñ
ô 
ç
Š%‰'Œ'ð 	ˆøõ �xÐ(ð ð ð ÝˆnÑÔÐØˆˆðøøøð Ð.˜€MØð ÝÐ/Ñ0Ô0Ð0Øˆõ 
�G„G€GÝ	Ð
GÑHÔHÐHØ×#Ò# M°=ÑAÔA€Iå#'¨	Ô(8Ñ#9Ô#9ÐØÔ&Ð,¨"€Hàð VØ'/Ð3EÒ'EÐ'E�^�^ÐK\ˆ
ÝÐ9¨ZÐ9Ð9Ñ:Ô:Ð:ØÔð 	/ÝÐ-˜)Ô*Ð-Ð-Ð-Ñ.Ô.Ð.Øð 	\ÝÐZ�sÐ#4Ñ5Ô5ÐZÐZÐZÑ[Ô[Ð[øåÐB°	Ô0@ÐBÐBÑCÔCÐCÝ‰ŒˆÝÐGÑHÔHÐHÝÐ>Ñ?Ô?Ð?ÝÐJÑKÔKÐKÝÐ9Ñ:Ô:Ð:ÝÐIÑJÔJÐJð	Ø$4Ð8LÒ$LÐ$L˜S˜SÐRUˆNÝÐ H°^Ð HÐ HÐ HÑIÔI×OÒOÑQÔQÐcÐUcˆKˆKøÝ!¥8Ð,ð 	ð 	ð 	Ý�.Ñ!Ô!Ð!ØˆFˆFð	øøøð ,7¸#Ò+=Ð+=Ð'Ð'ÐCUˆõ 
�G„G€GØ€OØñ 6ÝÐ2Ñ3Ô3Ð3ÝÐ 1°#°2°#Ô 6¸aÐ@Ñ@Ô@ð 	&ð 	&‰FˆAˆsÝÐ$�qÐ$Ð$Ð$˜sÐ$Ð$Ñ%Ô%Ð%Ð%ÝÐ Ñ!Ô! BÒ&Ð&ÝÐc�sÐ#4Ñ5Ô5¸Ñ:ÐcÐcÐcÑdÔdÐdÝ‰Œˆð	ÝØh¸mÐ>cÐO`ÐabÔOcÐhÐhÐhñô çŠe‰gŒgð ˆDøõ "¥8Ð,ð 	ð 	ð 	Ý�.Ñ!Ô!Ð!ØˆFˆFð	øøøð ð 	#Ø+ÐCÐ/@ÀÔ/CˆOˆOØ�\Š\‰^Œ^ð 	# ¥S¨¡Y¤YÐ QÐ QÒ QÐ Qµ#µcÐ:KÑ6LÔ6LÈbÑ2QÔ2QÒ QÐ QÐ QÐ QÐ QØ/µ°D±	´	¸A±Ô>ˆOˆOà"ˆOˆOð	ÝØc¨MÐ,^Ð=^ÐcÐcÐcñô çŠe‰gŒgð ˆJøõ "¥8Ð,ð 	ð 	ð 	Ý�.Ñ!Ô!Ð!ØˆFˆFð	øøøð %Ð5¨ˆàð ÝÐ2Ñ3Ô3Ð3Øˆð ×0Ò0Ø˜¨ñô €Gð
 €NÐ*¨MÑ:Ô:Ð:à
ˆ+‰-Œ-€CØ�GŠG�GÑÔ€EÝ�e�TÑ"Ô"ð Ø&+Ð3�˜EÐ"Ð"°ˆØˆˆG‰à'€Eˆ*ÑØ%€Eˆ*ÑØ €Eˆ*ÑØ&€Eˆ)ÑØð *Ø")ˆÐÑà€K�ÑÔÐØÐÑÔÐÝ˜5‘k”k€Fˆ7�Oð €}Ð&Ñ'Ô'ð .ØˆÐ(¨"Ñ-Ô-Ð-Ø€}Ð%Ñ&Ô&ð -ØˆÐ'¨Ñ,Ô,Ð,à#+Ð/AÒ#AÐ#A��ÐGX€JÝ	�G„G€GÝ	Ð
)Ñ*Ô*Ð*Ý	Ð
0 Ð
0Ð
0Ñ1Ô1Ð1Ý	Ð
- Ð
-Ð
-Ñ.Ô.Ð.Ý	Ð
2 Ð
2Ð
2Ñ3Ô3Ð3Øð SÝÐ7 WÐ7Ð7Ð7Ð7Ñ8Ô8Ð8Ð8åÐQÑRÔRÐRÝ	�G„G€G€G€GsZ   Æ!'G	 Ç	 G-Ç,G-É:J Ê J2Ê1J2Ï-1P Ð QÑQÓ,-T Ô T>Ô=T>Ö7'W × XØXc           
      óè  — ddl m}m}  |¦   «         }|                     d¦  «        pg }t	          |t
          ¦  «        r|st          d¦  «         dS t          d¦  «         g }|D ]¾}t	          |t          ¦  «        r…|                     dd¦  «        }|                     d	d
¦  «        }|                     dd
¦  «                             dd
¦  «         	                    d¦  «        }	| 
                    |› d|	› d�¦  «         Œœ| 
                    t          |¦  «        ¦  «         Œ¿| 
                    d¦  «         	 ddlm}
  |
d„ |D ¦   «         ddddddd¬¦  «        }|                     ¦   «         }ddlm}  |¦   «          t          ¦   «          nÊ# t"          t$          t&          t(          j        f$ r¥ t-          |d¦  «        D ]\  }}t          d|› d|› �¦  «         Œt          ¦   «          	 t/          dt1          |¦  «        › d�¦  «                             ¦   «         }|rt5          |¦  «        dz
  nd}n# t6          t8          t:          f$ r d}Y nw xY wY nw xY w|�|t1          |¦  «        k    rt          d ¦  «         dS |                     |¦  «        }||d<    ||¦  «         t	          |t          ¦  «        r|                     dd¦  «        nt          |¦  «        }t          d!|› d"�¦  «         dS )#z=Let the user remove a saved custom provider from config.yaml.r   rð  rq  zNo custom providers configured.NzRemove a custom provider:
r?   Úunnamedr€   rn   r…  r†  rÔ   rˆ  rÖ   ÚCancel©ÚTerminalMenuc                 ó   — g | ]}d |› �‘ŒS ©r¹   rÜ   )ry   r<  s     r   rß   z+_remove_custom_provider.<locals>.<listcomp>W  s   € Ð'Ð'Ð'˜!ˆX�!ˆXˆXÐ'Ð'Ð'r   ú-> )Úfg_redÚbold)rò  TFzSelect provider to remove:©Úcursor_indexÚmenu_cursorÚmenu_cursor_styleÚmenu_highlight_styleÚcycle_cursorÚclear_screenr¯   ©Úflush_stdinr   r¹   r  r7  r  r�  u   âœ… Removed "z" from custom providers.)r„   rS   rñ  r†   r‡   rë   r   rˆ   rB  r¯  rµ  r‰   Úsimple_term_menurî  ÚshowÚhermes_cli.curses_uirü  ÚImportErrorÚNotImplementedErrorr3   r5  r²  r*   r  r+   r1   rc   r5   r  r  rk  )rÅ  rS   rñ  r–   r`  r;  r–  r?   r3  rÑ  rî  Úmenur!  rü  r<   r<  r    ÚremovedÚremoved_names                      r   r½  r½  <  s^  € à:Ð:Ð:Ð:Ð:Ð:Ð:Ð:à
ˆ+‰-Œ-€CØ—’Ð*Ñ+Ô+Ð1¨r€IÝ�i¥Ñ&Ô&ð ¨ið ÝÐ/Ñ0Ô0Ð0Øˆå	Ð
'Ñ(Ô(Ð(à€GØð 'ð 'ˆÝ�e�TÑ"Ô"ð 	'Ø—9’9˜V YÑ/Ô/ˆDØ—)’)˜J¨Ñ+Ô+ˆCØŸš J°Ñ3Ô3×;Ò;¸IÀrÑJÔJ×QÒQÐRUÑVÔVˆIØ�NŠN˜dÐ2Ð2 iÐ2Ð2Ð2Ñ3Ô3Ð3Ð3à�NŠN�3˜u™:œ:Ñ&Ô&Ð&Ð&Ø‡N‚N�8ÑÔÐðØ1Ð1Ð1Ð1Ð1Ð1àˆ|Ø'Ð'˜wÐ'Ñ'Ô'ØØØ0Ø!,ØØØ.ð	
ñ 	
ô 	
ˆð �iŠi‰kŒkˆØ4Ð4Ð4Ð4Ð4Ð4àˆ‰ŒˆÝ‰ŒˆˆøÝÕ,­gµzÔ7QÐRð ð ð Ý˜g qÑ)Ô)ð 	!ð 	!‰DˆAˆqÝ�-�q�-�-˜A�-�-Ñ Ô Ð Ð Ý‰Œˆð	ÝÐ6¥S¨¡\¤\Ð6Ð6Ð6Ñ7Ô7×=Ò=Ñ?Ô?ˆCØ"%Ð/•#�c‘(”(˜Q‘,�,¨4ˆCˆCøÝÕ-­xÐ8ð 	ð 	ð 	ØˆCˆCˆCð	øøøøøðøøøð €{�c�S ™^œ^Ò+Ð+ÝˆlÑÔÐØˆà�mŠm˜CÑ Ô €GØ'€CÐÑØ€K�ÑÔÐå*4°W½dÑ*CÔ*CÐUˆ�Š�F˜IÑ&Ô&Ð&ÍÈWÉÌð õ 
Ð
@˜,Ð
@Ð
@Ð
@ÑAÔAÐAÐAÐAs9   Ä:AF ÆAIÇ,AH5È4IÈ5IÉIÉIÉIÉIc                 óp  ‡— ddl m}m} ddlm}m} ddlm} |d         }|d         }|                     dd¦  «        }	|                     d	d¦  «        }
|                     d
d¦  «        }|                     dd¦  «        Š|                     d¦  «        pd 	                    ¦   «         }|
s"|r t          j                             |d¦  «        }
t          ||
¦  «        }t          d|› �¦  «         t          d|› �¦  «         ‰rt          d‰› �¦  «         t          ¦   «          t          d¦  «          ||
|d|	pd¬¦  «        }|�rd}‰r‰|v r|                     ‰¦  «        }t          dt          |¦  «        › d�¦  «         	 ddlm} ˆfd„|D ¦   «         dgz   } |||dddddd|› d�¬ ¦  «        }|                     ¦   «         }dd!lm}  |¦   «          t          ¦   «          |�|t          |¦  «        k    rt          d"¦  «         dS ||         }�n# t*          t,          t.          t0          j        f$ �r) t5          |d#¦  «        D ]&\  }}|‰k    rd$nd}t          d%|› d&|› |› �¦  «         Œ't          d%t          |¦  «        d#z   › d'�¦  «         t          ¦   «          	 t7          d(t          |¦  «        d#z   › d)�¦  «         	                    ¦   «         }|st          d"¦  «         Y dS t9          |¦  «        d#z
  }|dk     s|t          |¦  «        k    rt          d"¦  «         Y dS ||         }n.# t:          t<          t>          f$ r t          d*¦  «         Y Y dS w xY wY nÑw xY w‰r_t          d+¦  «         	 t7          d,‰› d)�¦  «         	                    ¦   «         p‰}n“# t<          t>          f$ r t          d*¦  «         Y dS w xY wt          d-¦  «         	 t7          d.¦  «         	                    ¦   «         }n'# t<          t>          f$ r t          d*¦  «         Y dS w xY w|st          d/¦  «         dS  ||¦  «          |¦   «         }|                     d¦  «        }tA          |tB          ¦  «        s|rd0|ini }||d<   |r2||d1<   | "                    dd¦  «         | "                    d	d¦  «         nd2|d1<   ||d<   |r||d	<   |                     dd¦  «        }|r||d<   n| "                    dd¦  «          ||¦  «          |¦   «          |rð |¦   «         }|                     d3¦  «        }tA          |tB          ¦  «        r»|                     |¦  «        }tA          |tB          ¦  «        r‘||d4<   |r<tG          |                     d	d¦  «        pd¦  «         	                    ¦   «         s||d	<   |r<tG          |                     d
d¦  «        pd¦  «         	                    ¦   «         s||d
<   ||d3<    ||¦  «         ntI          |||¦  «         t          d5|› �¦  «         t          d6|› d7|› d8�¦  «         dS )9a  Handle a named custom provider from config.yaml custom_providers list.

    Always probes the endpoint's /models API to let the user pick a model.
    If a model was previously saved, it is pre-selected in the menu.
    Falls back to the saved model if probing fails.
    r   r   rð  r�  r?   r€   r|  rn   ru   r{  rm   rk  z  Provider: z  URL:      z  Current:  zFetching available models...g       @N)r4  r|  zFound z model(s):
rí  c                 ó2   •— g | ]}|‰k    rd |› d�nd |› �‘ŒS )r¹   ú
 (current)rÜ   )ry   rÄ  rÒ  s     €r   rß   z,_model_flow_named_custom.<locals>.<listcomp>©  sG   ø€ ð ð ð ØIJ a¨;Ò&6Ð&6Ð"�QÐ"Ð"Ð"Ð"¸HÀ¸H¸Hðð ð r   z  Cancelrñ  ©Úfg_greenró  ©r	  TFzSelect model from ú:rô  rû  rA  r   r  r¹   r  z. Cancelr7  r  r£  z%Could not fetch models from endpoint.zModel name [z@Could not fetch models from endpoint. Enter model name manually.úModel name: zNo model specified. Cancelled.r   r   rb  r`  rr  u   
âœ… Model set to: z   Provider: rˆ  rÖ   )%r…   r?  r@  r„   rS   rñ  r®  rŽ  r†   r1   r8   r9   rÒ  r   Úindexr+   rý  rî  rþ  rÿ  rü  r   r  r3   r5  r²  r*   r  rc   r5   r  r  r‡   rˆ   rk  r‰   r¹  ) rÅ  rÐ  r?  r@  rS   rñ  rŽ  r?   r€   r|  ru   r{  rk  Úconfig_api_keyr  rÕ  rî  Ú
menu_itemsr  r!  rü  rÁ  r<   rÄ  Úsuffixr    r–   rm   Úcustom_api_modeÚproviders_cfgÚprovider_entryrÒ  s                                   @r   r¼  r¼  |  sÕ  ø€ ð HÐGÐGÐGÐGÐGÐGÐGØ:Ð:Ð:Ð:Ð:Ð:Ð:Ð:Ø2Ð2Ð2Ð2Ð2Ð2à˜Ô €DØ˜ZÔ(€HØ× Ò  ¨RÑ0Ô0€HØ×Ò 	¨2Ñ.Ô.€GØ×Ò 	¨2Ñ.Ô.€GØ×#Ò# G¨RÑ0Ô0€KØ!×%Ò% nÑ5Ô5Ð;¸×BÒBÑDÔD€Lð ð .�wð .Ý”*—.’. ¨"Ñ-Ô-ˆÝ:¸=È'ÑRÔR€Nå	Ð
˜Ð
Ð
Ñ Ô Ð Ý	Ð
#˜Ð
#Ð
#Ñ$Ô$Ð$Øð ,ÝÐ*˜[Ð*Ð*Ñ+Ô+Ð+Ý	�G„G€Gå	Ð
(Ñ)Ô)Ð)ØÐØ� 3ØÐ!˜Tðñ ô €Fð
 ñ BØˆØð 	4˜;¨&Ð0Ð0Ø Ÿ,š, {Ñ3Ô3ˆKåÐ0•s˜6‘{”{Ð0Ð0Ð0Ñ1Ô1Ð1ð+	Ø5Ð5Ð5Ð5Ð5Ð5ðð ð ð ØNTðñ ô à�ñˆJð  �<ØØ(Ø!Ø"6Ø%2Ø!Ø"Ø2¨4Ð2Ð2Ð2ð	ñ 	ô 	ˆDð —)’)‘+”+ˆCØ8Ð8Ð8Ð8Ð8Ð8àˆK‰MŒMˆMÝ‰GŒGˆGØˆ{˜c¥S¨¡[¤[Ò0Ð0Ý�lÑ#Ô#Ð#Ø�Ø œˆJ‰JøÝÕ0µ'½:Ô;UÐVð 	ñ 	ð 	Ý! &¨!Ñ,Ô,ð -ð -‘��1Ø)*¨kÒ)9Ð)9˜˜¸r�ÝÐ+˜1Ð+Ð+ Ð+ 6Ð+Ð+Ñ,Ô,Ð,Ð,ÝÐ0•s˜6‘{”{ Q‘Ð0Ð0Ð0Ñ1Ô1Ð1Ý‰GŒGˆGðÝÐ=­¨V©¬°q©Ð=Ð=Ð=Ñ>Ô>×DÒDÑFÔF�Øð Ý˜,Ñ'Ô'Ð'Ø�F�FÝ˜#‘h”h ‘l�Ø˜’7�7˜c¥S¨¡[¤[Ò0Ð0Ý˜,Ñ'Ô'Ð'Ø�F�FØ# Cœ[�
�
øÝÕ 1µ8Ð<ð ð ð Ý�nÑ%Ô%Ð%Ø���ðøøøð �
ð	øøøð& 
ð ÝÐ5Ñ6Ô6Ð6ð	ÝÐ>¨kÐ>Ð>Ð>Ñ?Ô?×EÒEÑGÔGÐVÈ;ˆJˆJøÝ!¥8Ð,ð 	ð 	ð 	Ý�.Ñ!Ô!Ð!ØˆFˆFð	øøøõ 	ÐPÑQÔQÐQð	Ý˜~Ñ.Ô.×4Ò4Ñ6Ô6ˆJˆJøÝ!¥8Ð,ð 	ð 	ð 	Ý�.Ñ!Ô!Ð!ØˆFˆFð	øøøð ð 	ÝÐ2Ñ3Ô3Ð3ØˆFð Ð�zÑ"Ô"Ð"à
ˆ+‰-Œ-€CØ�GŠG�GÑÔ€EÝ�e�TÑ"Ô"ð Ø&+Ð3�˜EÐ"Ð"°ˆØˆˆG‰Øð .Ø(ˆˆjÑØ�	Š	�*˜dÑ#Ô#Ð#Ø�	Š	�)˜TÑ"Ô"Ð"Ð"à$ˆˆjÑØ$ˆˆjÑØð 	.Ø-ˆE�)Ñà#×'Ò'¨
°BÑ7Ô7€OØð $Ø+ˆˆjÑÐà�	Š	�*˜dÑ#Ô#Ð#Ø€K�ÑÔÐØÐÑÔÐð ð DØˆk‰mŒmˆØŸš Ñ,Ô,ˆÝ�m¥TÑ*Ô*ð 		!Ø*×.Ò.¨|Ñ<Ô<ˆNÝ˜.­$Ñ/Ô/ð !Ø2<�˜Ñ/Ø!ð ?­#¨n×.@Ò.@ÀÈBÑ.OÔ.OÐ.UÐSUÑ*VÔ*V×*\Ò*\Ñ*^Ô*^ð ?Ø0>�N 9Ñ-Øð 8¥3 ~×'9Ò'9¸)ÀRÑ'HÔ'HÐ'NÈBÑ#OÔ#O×#UÒ#UÑ#WÔ#Wð 8Ø07�N 9Ñ-Ø#0��KÑ Ø�˜CÑ Ô Ð øõ 	˜h¨¸
ÑCÔCÐCå	Ð
- Ð
-Ð
-Ñ.Ô.Ð.Ý	Ð
-˜$Ð
-Ð
- (Ð
-Ð
-Ð
-Ñ.Ô.Ð.Ð.Ð.so   ÆBH ÈH ÈBM!Ê!AL0Ë*:L0Ì'L0Ì/M!Ì0&MÍM!ÍMÍM!Í M!Í6'N Î OÏOÏ!O7 Ï7 PÐPr–  c                 óê   — |                       d¦  «        }t          |t          ¦  «        rHt          |                      d¦  «        pd¦  «                             ¦   «                              ¦   «         S dS )NÚagentÚreasoning_effortrn   )r†   r‡   rˆ   r‰   r1   rÅ   )rÅ  Ú	agent_cfgs     r   Ú_current_reasoning_effortr    sc   € Ø—
’
˜7Ñ#Ô#€IÝ�)�TÑ"Ô"ð LÝ�9—=’=Ð!3Ñ4Ô4Ð:¸Ñ;Ô;×AÒAÑCÔC×IÒIÑKÔKÐKØˆ2r   Úeffortc                 ór   — |                       d¦  «        }t          |t          ¦  «        si }|| d<   ||d<   d S )Nr  r  )r†   r‡   rˆ   )rÅ  r  r  s      r   Ú_set_reasoning_effortr    sD   € Ø—
’
˜7Ñ#Ô#€IÝ�i¥Ñ&Ô&ð $Øˆ	Ø#ˆˆw‰Ø$*€IÐ Ñ!Ð!Ð!r   c           
      óÞ  ‡‡‡‡— t          t                               d„ | D ¦   «         ¦  «        ¦  «        ŠdŠˆfd„‰D ¦   «         }|                     ˆfd„‰D ¦   «         ¦  «         |sdS ˆfd„Šd}d}‰d	k    rt	          |¦  «        }n6‰|v r|                     ‰¦  «        }nd
|v r|                     d
¦  «        }nd}	 ddlm} ˆfd„|D ¦   «         }|                     d|› �¦  «         |                     d|› �¦  «          |||dddddd¬¦  «        }| 	                    ¦   «         }	ddl
m}
  |
¦   «          |	€dS t          ¦   «          |	t	          |¦  «        k     r||	         S |	t	          |¦  «        k    rd	S dS # t          t          t          t           j        f$ r Y nw xY wt          d¦  «         t%          |d¦  «        D ]#\  }}t          d|› d ‰|¦  «        › �¦  «         Œ$t	          |¦  «        }t          d|dz   › d|› �¦  «         t          d|dz   › d|› �¦  «         t          ¦   «          	 	 t'          d|dz   › d�¦  «                             ¦   «         }|sdS t+          |¦  «        }	d|	cxk    r|k    rn n||	dz
           S |	|dz   k    rd	S |	|dz   k    rdS t          d|dz   › �¦  «         n2# t,          $ r t          d¦  «         Y nt.          t0          f$ r Y dS w xY wŒ¶)zOPrompt for a reasoning effort. Returns effort, 'none', or None to keep current.c              3   ó¾   K  — | ]X}t          |¦  «                             ¦   «         ¯#t          |¦  «                             ¦   «                              ¦   «         V — ŒYd S rw   rt  )ry   r  s     r   r{   z5_prompt_reasoning_effort_selection.<locals>.<genexpr>*  sk   è è € ð 
ð 
Ø,2ÅÀVÁÄ×ARÒARÑATÔATð
Ý�‰KŒK×ÒÑÔ×%Ò%Ñ'Ô'ð
ð 
ð 
ð 
ð 
ð 
r   )ÚminimalÚlowÚmediumÚhighÚxhighc                 ó   •— g | ]}|‰v ¯|‘Œ	S rÜ   rÜ   )ry   r  Údedupeds     €r   rß   z6_prompt_reasoning_effort_selection.<locals>.<listcomp>/  s#   ø€ ÐIÐIÐI˜&°vÀÐ7HÐ7HˆvÐ7HÐ7HÐ7Hr   c              3   ó$   •K  — | ]
}|‰v¯|V — Œd S rw   rÜ   )ry   r  Úcanonical_orders     €r   r{   z5_prompt_reasoning_effort_selection.<locals>.<genexpr>0  s-   øè è € ÐQÐQ˜f°6ÀÐ3PÐ3P�6Ð3PÐ3PÐ3PÐ3PÐQÐQr   Nc                 ó   •— | ‰k    r| › d�S | S )Nu     â†� currently in userÜ   )r  Úcurrent_efforts    €r   r!  z2_prompt_reasoning_effort_selection.<locals>._label4  s"   ø€ Ø�^Ò#Ð#ØÐ4Ð4Ð4Ð4Øˆr   zDisable reasoningzSkip (keep current)re  r   r   rí  c                 ó,   •— g | ]}d  ‰|¦  «        › �‘ŒS rð  rÜ   )ry   r  r!  s     €r   rß   z6_prompt_reasoning_effort_selection.<locals>.<listcomp>H  s*   ø€ Ð?Ð?Ð?¨VÐ(˜˜˜v™œÐ(Ð(Ð?Ð?Ð?r   r¹   rñ  r  r
  TFzSelect reasoning effort:rô  rû  r   r  r!   r7  z] (default: keep current): r9  r:  )rë   rˆ   ÚfromkeysrO  r+   r  rý  rî  rµ  rþ  rÿ  rü  r   r   r  r3   r5  r²  r*   r  r1   rc   r5   r  r  )Úeffortsr(  rÔ  Údisable_labelÚ
skip_labelrÕ  rî  r;  r  r!  rü  r<   r  rÿ  rG  r!  r&  r$  s    `             @@@r   Ú"_prompt_reasoning_effort_selectionr.  '  s  øøøø€ åÝ�Šð 
ð 
Ø6=ð
ñ 
ô 
ñ 	
ô 	
ñô €Gð
 D€OØIÐIÐIÐI OÐIÑIÔI€GØ‡N‚NÐQÐQÐQÐQ¨ÐQÑQÔQÑQÔQÐQØð Øˆtðð ð ð ð ð
 (€MØ&€Jà˜ÒÐÝ˜'‘l”lˆˆØ	˜7Ð	"Ð	"Ø—m’m NÑ3Ô3ˆˆØ	�WÐ	Ð	Ø—m’m HÑ-Ô-ˆˆàˆðØ1Ð1Ð1Ð1Ð1Ð1à?Ð?Ð?Ð?°wÐ?Ñ?Ô?ˆØ�ŠÐ+˜MÐ+Ð+Ñ,Ô,Ð,Ø�ŠÐ(˜JÐ(Ð(Ñ)Ô)Ð)Øˆ|ØØ$ØØ2Ø!.ØØØ,ð	
ñ 	
ô 	
ˆð �iŠi‰kŒkˆØ4Ð4Ð4Ð4Ð4Ð4àˆ‰ŒˆØˆ;Ø�4Ý‰ŒˆØ•�W‘”ÒÐØ˜3”<ÐØ•#�g‘,”,ÒÐØ�6ØˆtøÝÕ,­gµzÔ7QÐRð ð ð Øˆðøøøõ 
Ð
$Ñ%Ô%Ð%Ý˜w¨Ñ*Ô*ð *ð *‰	ˆˆ6ÝÐ(�1Ð(Ð(˜˜˜v™œÐ(Ð(Ñ)Ô)Ð)Ð)ÝˆG‰Œ€AÝ	Ð
'ˆq�1‰uÐ
'Ð
'˜Ð
'Ð
'Ñ(Ô(Ð(Ý	Ð
$ˆq�1‰uÐ
$Ð
$˜
Ð
$Ð
$Ñ%Ô%Ð%Ý	�G„G€Gðð	ÝÐJ¨¨A©ÐJÐJÐJÑKÔK×QÒQÑSÔSˆFØð Ø�tÝ�f‘+”+ˆCØ�Cˆ}ˆ}Š}ˆ}˜1Š}ˆ}ˆ}ˆ}ˆ}Ø˜s Q™wÔ'Ð'Ø�a˜!‘eŠ|ˆ|Ø�vØ�a˜!‘eŠ|ˆ|Ø�tÝÐ+ A¨¡EÐ+Ð+Ñ,Ô,Ð,Ð,øÝð 	+ð 	+ð 	+ÝÐ)Ñ*Ô*Ð*Ð*Ð*Ý!¥8Ð,ð 	ð 	ð 	Ø�4�4ð	øøøðsO   ÃA=F  Å (F  Å)F  Æ "F%Æ$F%È:*J< É&)J< Ê	J< Ê	J< Ê&J< Ê<K+ËK+Ë*K+c                 ó@  — ddl m}m}m}m}m} ddlm}m}m	}	 ddl
m}
m}m}m}m} d}||         } ||¦  «        }|                     dd¦  «        }|                     dd¦  «        }|�s¤t#          d	¦  «         t#          ¦   «          t#          d
¦  «         t#          d¦  «         t#          d¦  «         t#          d¦  «         t#          d¦  «         t#          ¦   «          t#          d¦  «         t#          d¦  «         t#          d¦  «         t#          d¦  «         t#          ¦   «          	 t%          d¦  «                             ¦   «         }n&# t(          t*          f$ r t#          ¦   «          Y dS w xY w|dk    rz	 ddlm}  |¦   «         }|r* |d|¦  «         t#          d¦  «         t#          ¦   «          nt#          d¦  «         dS �n# t0          $ r}t#          d|› �¦  «         Y d}~dS d}~ww xY w|dk    rÌ	 ddl}|                     d¦  «                             ¦   «         }n&# t(          t*          f$ r t#          ¦   «          Y dS w xY w|st#          d¦  «         dS 	 ddlm}  ||¦  «        \  }}|st#          d|› �¦  «         dS n# t6          $ r Y nw xY w |d|¦  «         t#          d ¦  «         t#          ¦   «          nt#          d¦  «         dS  ||¦  «        }|                     dd¦  «        }|                     dd¦  «        }nV|d!v rt#          d"|dd#…         › d$|› d%�¦  «         n%|d&k    rt#          d'¦  «         nt#          d(¦  «         t#          ¦   «          |j        } ||¦  «        }|rd)„ |D ¦   «         n |
||¦  «        } ||||¬*¦  «        p|} |r-d+„ |D ¦   «         }!t#          d,t;          |!¦  «        › d-�¦  «         n5t=          j        |g ¦  «        }!|!rt#          d.¦  «         t#          d/¦  «         |!r ||!| ¬0¦  «        }"n<	 t%          d1¦  «                             ¦   «         }"n# t(          t*          f$ r d}"Y nw xY w|"�r; ||"||¬*¦  «        p|"}" |¦   «         }#t?          |#¦  «        }$ ||"||¬*¦  «        }%d}&|%r$t#          d2|"› d3�¦  «         tA          |%|$¬4¦  «        }& ||"¦  «          |¦   «         }'|'                     d5¦  «        }(tC          |(tD          ¦  «        s|(rd6|(ini }(|(|'d5<   ||(d7<   ||(d8<    ||"||¬*¦  «        |(d9<   |&�tG          |'|&¦  «          |	|'¦  «          |¦   «          t#          d:|"› d;|j$        › d%�¦  «         |%r-|&d<k    rt#          d=¦  «         dS |&rt#          d>|&› �¦  «         dS dS dS t#          d?¦  «         dS )@zAGitHub Copilot flow using env vars, gh CLI, or OAuth device code.r   )ro   r%  r?  r@  Ú$resolve_api_key_provider_credentials)r4  rS   rñ  )rŽ  Úfetch_github_model_catalogÚgithub_model_reasoning_effortsÚcopilot_model_api_modeÚnormalize_copilot_model_idr—  ru   rn   r±   z.No GitHub token configured for GitHub Copilot.z  Supported token types:uL       â†’ OAuth token (gho_*)          via `copilot login` or device code flowuI       â†’ Fine-grained PAT (github_pat_*)  with Copilot Requests permissionu=       â†’ GitHub App token (ghu_*)     via environment variableuA       âœ— Classic PAT (ghp_*)          NOT supported by Copilot APIz
  Options:z1    1. Login with GitHub (OAuth device code flow)z    2. Enter a token manuallyr|  z  Choice [1-3]: NrÑ  )Úcopilot_device_code_loginÚCOPILOT_GITHUB_TOKENz  Copilot token saved.z  Login cancelled or failed.z  Login failed: r~  z   Token (COPILOT_GITHUB_TOKEN): ú  Cancelled.)Úvalidate_copilot_tokenõ     âœ— z  Token saved.)ÚGITHUB_TOKENÚGH_TOKENz  GitHub token: rÍ   u	   ... âœ“ (rÖ   zgh auth tokenu*     GitHub token: âœ“ (from `gh auth token`)u     GitHub token: âœ“c                 ód   — g | ]-}|                      d ¦  «        ¯|                      d d¦  «        ‘Œ.S ©r´   rn   ©r†   ©ry   Úitems     r   rß   z'_model_flow_copilot.<locals>.<listcomp>é  s5   € ÐBÐBÐB °4·8²8¸D±>´>ÐBˆ�Š�$˜Ñ	Ô	ÐBÐBÐBr   ©Úcatalogru   c                 ó   — g | ]}|¯|‘ŒS rÜ   rÜ   )ry   Úmodel_ids     r   rß   z'_model_flow_copilot.<locals>.<listcomp>ö  s   € ÐGÐGÐG 8¸hÐG�hÐGÐGÐGr   ú  Found ú model(s) from GitHub CopilotõL     âš  Could not auto-detect models from GitHub Copilot â€” showing defaults.ú?    Use "Enter custom model name" if you do not see your model.r‚  r  r¹   z supports reasoning controls.)r(  rm   r   r   r€   r|  rG  rµ  re  z"Reasoning disabled for this model.zReasoning effort set to: r�  )%r…   ro   r%  r?  r@  r0  r„   r4  rS   rñ  r®  rŽ  r1  r2  r3  r4  r†   r   r  r1   r  r  Úhermes_cli.copilot_authr5  r7   r1  r8  r   Úinference_base_urlr+   r—  r  r.  r‡   rˆ   r  r?   ))rÅ  rÆ  ro   r%  r?  r@  r0  r4  rS   rñ  rŽ  r1  r2  r3  r4  r¡   r›   r©   ru   r±   rG  r5  ÚtokenrA   r1  Únew_keyr8  Úvalidr	  Úeffective_baserB  Úlive_modelsÚnormalized_current_modelr,  r-  Úinitial_cfgr(  Úreasoning_effortsÚselected_effortr–   rm   s)                                            r   rº  rº    s8  € ðð ð ð ð ð ð ð ð ð ð ð ð ð ð KÐJÐJÐJÐJÐJÐJÐJÐJÐJðð ð ð ð ð ð ð ð ð ð ð ð ð ð €KØ Ô,€Gà0Ð0°Ñ=Ô=€EØ�iŠi˜	 2Ñ&Ô&€GØ�YŠY�x Ñ$Ô$€Fàñ KÝÐ>Ñ?Ô?Ð?Ý‰ŒˆÝÐ(Ñ)Ô)Ð)ÝØZñ	
ô 	
ð 	
õ 	ÐYÑZÔZÐZÝÐMÑNÔNÐNÝÐQÑRÔRÐRÝ‰ŒˆÝˆlÑÔÐÝÐAÑBÔBÐBÝÐ-Ñ.Ô.Ð.ÝˆoÑÔÐÝ‰Œˆð	ÝÐ-Ñ.Ô.×4Ò4Ñ6Ô6ˆFˆFøÝ!¥8Ð,ð 	ð 	ð 	Ý‰GŒGˆGØˆFˆFð	øøøð �SŠ=ˆ=ðØMÐMÐMÐMÐMÐMà1Ð1Ñ3Ô3�Øð Ø"�NÐ#9¸5ÑAÔAÐAÝÐ2Ñ3Ô3Ð3Ý‘G”G�G�GåÐ8Ñ9Ô9Ð9Ø�Fñ øõ ð ð ð ÝÐ.¨Ð.Ð.Ñ/Ô/Ð/Ø�����øøøøðøøøð �sŠ]ˆ]ðØ���à!Ÿ/š/Ð*LÑMÔM×SÒSÑUÔU��øÝ%¥xÐ0ð ð ð Ý‘”�Ø��ðøøøð ð Ý�nÑ%Ô%Ð%Ø�ðØJÐJÐJÐJÐJÐJà3Ð3°GÑ<Ô<‘
��sØð Ý˜. 3˜.˜.Ñ)Ô)Ð)Ø�Fðøõ ð ð ð Ø�ðøøøàˆNÐ1°7Ñ;Ô;Ð;ÝÐ"Ñ#Ô#Ð#Ý‰GŒGˆGˆGå�.Ñ!Ô!Ð!ØˆFà4Ð4°[ÑAÔAˆØ—)’)˜I rÑ*Ô*ˆØ—’˜8 RÑ(Ô(ˆˆàÐ1Ð1Ð1ÝÐD W¨R¨a¨R¤[ÐDÐD¸6ÐDÐDÐDÑEÔEÐEÐEØ�Ò&Ð&ÝÐ>Ñ?Ô?Ð?Ð?åÐ'Ñ(Ô(Ð(Ý‰ŒˆàÔ/€Nà(Ð(¨Ñ1Ô1€Gð ð	7ÐBÐB¨ÐBÑBÔBÐBàÐ˜g ~Ñ6Ô6ð ð 	#Ð"ØØØð	
ñ 	
ô 	
ð 	ð
 ð ð ð 	UØGÐG¨{ÐGÑGÔGˆ
ÝÐG�˜Z™œÐGÐGÐGÑHÔHÐHÐHå%Ô)¨+°rÑ:Ô:ˆ
Øð 	UÝØ^ñô ð õ ÐSÑTÔTÐTàð Ø*Ð*ØÐ&>ð
ñ 
ô 
ˆˆð	Ý˜^Ñ,Ô,×2Ò2Ñ4Ô4ˆHˆHøÝ!¥8Ð,ð 	ð 	ð 	ØˆHˆHˆHð	øøøð ñ 1à&Ð&ØØØðñ ô ð ð
 ð 	ð "�k‘m”mˆÝ2°;Ñ?Ô?ˆØ:Ð:ØØØð
ñ 
ô 
Ðð
 ˆØð 	ÝÐ>�xÐ>Ð>Ð>Ñ?Ô?Ð?Ý@Ø!°.ðñ ô ˆOð 	Ð˜8Ñ$Ô$Ð$àˆk‰mŒmˆØ—’˜Ñ Ô ˆÝ˜%¥Ñ&Ô&ð 	!Ø*/Ð7�Y Ð&Ð&°RˆEØ ˆC�‰LØ'ˆˆjÑØ*ˆˆjÑØ2Ð2ØØØð
ñ 
ô 
ˆˆjÑð
 Ð&Ý! # Ñ7Ô7Ð7Øˆ�CÑÔÐØÐÑÔÐåÐF xÐFÐF°w´|ÐFÐFÐFÑGÔGÐGØð 	EØ &Ò(Ð(ÝÐ:Ñ;Ô;Ð;Ð;Ð;Ø ð EÝÐC°/ÐCÐCÑDÔDÐDÐDÐDð		Eð 	EðEð Eõ 	ˆlÑÔÐÐÐsa   Ä,!E ÅE1Å0E1Å;AG
 Ç

G1ÇG,Ç,G1Ç;+H' È'I
É	I
É!(J Ê
JÊJÐ!P8 Ð8QÑQc                 óÚ  — ddl m}m}m}m}m}m}m} ddlm	}	m
}
 ddlm}m} ~ d}||         } ||¦  «        }|                     d¦  «        p|                     d¦  «        pd}|                     d	¦  «        p|j        }t!          d
¦  «         t!          d¦  «         t!          d¦  «         t!          d|› �¦  «         t!          d|› �¦  «         t!          ¦   «          	  ||¦  «        }n9# t"          $ r,}t!          d|› �¦  «         t!          d¦  «         Y d}~dS d}~ww xY w|                     d	¦  «        p|}d}	  |d¦  «        }|                     dd¦  «        }n# t"          $ r Y nw xY w |	|¦  «        } |
|||¬¦  «        p|}|r-d„ |D ¦   «         }t!          dt%          |¦  «        › d�¦  «         n5t'          j        dg ¦  «        }|rt!          d¦  «         t!          d¦  «         |r |||¬¦  «        }n<	 t)          d¦  «                             ¦   «         }n# t,          t.          f$ r d}Y nw xY w|st!          d¦  «         dS  |
|||¬¦  «        p|} ||¦  «          |¦   «         }|                     d¦  «        }t1          |t2          ¦  «        s|rd|ini }||d<   ||d<   ||d	<   d |d!<    ||¦  «          |¦   «          t!          d"|› d#|j        › d$�¦  «         dS )%z4GitHub Copilot ACP flow using the local Copilot CLI.r   )ro   r%  r?  r@  Ú$get_external_process_provider_statusr0  Ú-resolve_external_process_provider_credentials)r1  r4  rð  r–  Úresolved_commandÚcommandr—  r€   z?  GitHub Copilot ACP delegates Hermes turns to `copilot --acp`.zB  Hermes currently starts its own ACP subprocess for each request.zH  Hermes uses your selected model as a hint for the Copilot ACP session.z  Command: z  Backend marker: õ     âš  z[  Set HERMES_COPILOT_ACP_COMMAND or COPILOT_CLI_PATH if Copilot CLI is installed elsewhere.Nrn   ru   rA  c                 ód   — g | ]-}|                      d ¦  «        ¯|                      d d¦  «        ‘Œ.S r=  r>  r?  s     r   rß   z+_model_flow_copilot_acp.<locals>.<listcomp>~  s5   € ÐOÐOÐO¨TÀÇÂÈÁÄÐO�d—h’h˜t RÑ(Ô(ÐOÐOÐOr   rE  rF  rG  rH  r‚  r  r�  rm   r   r   rF  r|  rG  rµ  rÖ   )r…   ro   r%  r?  r@  rU  r0  rV  r®  r1  r4  r„   rS   rñ  r†   rJ  r   r7   r+   r—  r  r1   r  r  r‡   rˆ   r?   )rÅ  rÆ  ro   r%  r?  r@  rU  r0  rV  r1  r4  rS   rñ  r¡   r›   r¢   rW  rN  r©   rA   Úcatalog_api_keyÚcatalog_credsrB  rP  r,  r-  r–   rm   s                               r   r¹  r¹  >  s„  € ðð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ðð ð ð ð ð ð ð ð ;Ð:Ð:Ð:Ð:Ð:Ð:Ð:àà€KØ Ô,€Gà1Ð1°+Ñ>Ô>€Fà�
Š
Ð%Ñ&Ô&ÐL¨&¯*ª*°YÑ*?Ô*?ÐLÀ9ð ð —Z’Z 
Ñ+Ô+ÐI¨wÔ/I€Nå	Ð
KÑLÔLÐLÝ	Ð
NÑOÔOÐOÝ	Ð
TÑUÔUÐUÝ	Ð
*Ð(Ð
*Ð
*Ñ+Ô+Ð+Ý	Ð
/˜~Ð
/Ð
/Ñ0Ô0Ð0Ý	�G„G€GðØ=Ð=¸kÑJÔJˆˆøÝð ð ð Ýˆn�sˆnˆnÑÔÐÝØiñ	
ô 	
ð 	
ð 	ˆˆˆˆˆøøøøðøøøð —Y’Y˜zÑ*Ô*Ð<¨n€Nà€OðØ<Ð<¸YÑGÔGˆØ'×+Ò+¨I°rÑ:Ô:ˆˆøÝð ð ð Øˆðøøøð )Ð(¨Ñ9Ô9€Gà"Ð"ØØØ#ð	
ñ 	
ô 	
ð 	ð
 ð ð ð 	UØOÐO°WÐOÑOÔOˆ
ÝÐG�˜Z™œÐGÐGÐGÑHÔHÐHÐHå%Ô)¨)°RÑ8Ô8ˆ
Øð 	UÝØ^ñô ð õ ÐSÑTÔTÐTàð 	Ø*Ð*ØØ2ð
ñ 
ô 
ˆˆð
	Ý˜^Ñ,Ô,×2Ò2Ñ4Ô4ˆHˆHøÝ!¥8Ð,ð 	ð 	ð 	ØˆHˆHˆHð	øøøð ð ÝˆlÑÔÐØˆð 	#Ð"ØØØ#ð	
ñ 	
ô 	
ð 	ð
 ð ð Ð�xÑ Ô Ð à
ˆ+‰-Œ-€CØ�GŠG�GÑÔ€EÝ�e�TÑ"Ô"ð Ø&+Ð3�˜EÐ"Ð"°ˆØˆˆG‰Ø#€Eˆ*ÑØ&€Eˆ*ÑØ*€Eˆ*ÑØ€K�ÑÔÐØÐÑÔÐå	Ð
B 8Ð
BÐ
B°7´<Ð
BÐ
BÐ
BÑCÔCÐCÐCÐCs<   Ã!C- Ã-
D#Ã7!DÄD#Å !E" Å"
E/Å.E/È!H$ È$H:È9H:c                 ó¸  — ddl m}m}m}m}m} ddlm}m}m	}	m
}
 d}||         }|j        r|j        d         nd}|j        pd}d}|j        D ]&} ||¦  «        pt          j        |d¦  «        }|r nŒ'|s¯t          d|j        › d�¦  «         |r”	 ddl}|                     |› d	�¦  «                             ¦   «         }n&# t&          t(          f$ r t          ¦   «          Y dS w xY w|st          d
¦  «         dS  |||¦  «         |}t          d¦  «         t          ¦   «          n1t          d|j        › d|dd…         › d�¦  «         t          ¦   «          |                     d¦  «        }|r|}t          d|› �¦  «         n|j        }t          d|› �¦  «         |r ||¦  «        r ||d¦  «         t          ¦   «          |rg d¢}nt/          j        dg ¦  «        }|r |||¬¦  «        }n<	 t3          d¦  «                             ¦   «         }n# t&          t(          f$ r d}Y nw xY w|rŸ ||¦  «          |	¦   «         }|                     d¦  «        }t5          |t6          ¦  «        s|rd|ini }||d<   ||d<   ||d<   |                     dd¦  «          |
|¦  «          |¦   «          |rdnd}t          d|› d|› d �¦  «         dS t          d!¦  «         dS )"u  Kimi / Moonshot model selection with automatic endpoint routing.

    - sk-kimi-* keys   â†’ api.kimi.com/coding/v1  (Kimi Coding Plan)
    - Other keys        â†’ api.moonshot.ai/v1      (legacy Moonshot)

    No manual base URL prompt â€” endpoint is determined by key prefix.
    r   )ro   ÚKIMI_CODE_BASE_URLr%  r?  r@  rÖ  r™  rn   úNo ú API key configured.Nú (or Enter to cancel): rA  rB  r¹   ú
 API key: rÍ   õ   ... âœ“zsk-kimi-u$     Detected Kimi Coding Plan key â†’ u     Using Moonshot endpoint â†’ )z	kimi-k2.6z	kimi-k2.5zkimi-for-codingzkimi-k2-thinkingzkimi-k2-thinking-turboÚmoonshotr‚  zEnter model name: rm   r   r   r€   r|  zKimi CodingÚMoonshotrG  rµ  rÖ   r�  )r…   ro   r^  r%  r?  r@  r„   r3  r4  rS   rñ  r�   Úbase_url_env_varr8   rx   r   r?   r1  r1   r  r  r,   rJ  r—  r†   r  r‡   rˆ   rk  )rÅ  rÆ  ro   r^  r%  r?  r@  r3  r4  rS   rñ  r¡   r›   r{  Úbase_url_envÚexisting_keyÚevr1  rL  Úis_coding_planrN  r,  r-  r–   rm   Úendpoint_labels                             r   r¿  r¿  ¯  sA  € ðð ð ð ð ð ð ð ð ð ð ð ð ð ðð ð ð ð ð ð ð ð ð ð ð ð  €KØ Ô,€GØ-4Ô-EÐMˆgÔ& qÔ)Ð)È2€GØÔ+Ð1¨r€Lð €LØÔ&ð ð ˆØ$�} RÑ(Ô(Ð=­B¬I°b¸"Ñ,=Ô,=ˆØð 	ØˆEð	ð ð ÝÐ6�G”LÐ6Ð6Ð6Ñ7Ô7Ð7Øð 	ðØ���à!Ÿ/š/¨WÐ*MÐ*MÐ*MÑNÔN×TÒTÑVÔV��øÝ%¥xÐ0ð ð ð Ý‘”�Ø��ðøøøð ð Ý�lÑ#Ô#Ð#Ø�ØˆN˜7 GÑ,Ô,Ð,Ø"ˆLÝÐ"Ñ#Ô#Ð#Ý‰GŒGˆGøåÐD�7”<ÐDÐD¨<¸¸¸Ô+;ÐDÐDÐDÑEÔEÐEÝ‰Œˆð "×,Ò,¨ZÑ8Ô8€NØð AØ+ˆÝÐE°^ÐEÐEÑFÔFÐFÐFà Ô3ˆÝÐ?¨~Ð?Ð?Ñ@Ô@Ð@àð )˜˜ lÑ3Ô3ð )Øˆ�| RÑ(Ô(Ð(Ý	�G„G€Gð ð :ð
ð 
ð 
ˆ
ˆ
õ &Ô)¨*°bÑ9Ô9ˆ
àð Ø*Ð*¨:À]ÐSÑSÔSˆˆð	ÝÐ1Ñ2Ô2×8Ò8Ñ:Ô:ˆHˆHøÝ!¥8Ð,ð 	ð 	ð 	ØˆHˆHˆHð	øøøð ð ØÐ˜8Ñ$Ô$Ð$ð ˆk‰mŒmˆØ—’˜Ñ Ô ˆÝ˜%¥Ñ&Ô&ð 	!Ø*/Ð7�Y Ð&Ð&°RˆEØ ˆC�‰LØ'ˆˆjÑØ*ˆˆjÑØ�	Š	�*˜dÑ#Ô#Ð#Øˆ�CÑÔÐØÐÑÔÐà*8ÐH˜˜¸jˆÝÐH xÐHÐH°~ÐHÐHÐHÑIÔIÐIÐIÐIåˆlÑÔÐÐÐs$   Â.C  Ã C#Ã"C#Ç/!H ÈH'È&H'c                 ób   — | pd                      ¦   «                              ¦   «         }d|v rdS dS )z>Infer the current StepFun region from the configured endpoint.rn   zapi.stepfun.comÚchinaÚinternational)r1   rÅ   )r€   Ú
normalizeds     r   Ú_infer_stepfun_regionrp    s8   € à�.˜b×'Ò'Ñ)Ô)×/Ò/Ñ1Ô1€JØ˜JÐ&Ð&ØˆwØˆ?r   Úregionc                 ó&   — ddl m}m} | dk    r|n|S )Nr   )ÚSTEPFUN_STEP_PLAN_CN_BASE_URLÚSTEPFUN_STEP_PLAN_INTL_BASE_URLrm  )r…   rs  rt  )rq  rs  rt  s      r   Ú_stepfun_base_url_for_regionru  &  sG   € ðð ð ð ð ð ð ð ð �WÒÐð 	&Ð%à,ðr   c                 ó°  — ddl m}m}m}m} ddlm}m}m}m	}	 ddl
m}
 d}||         }|j        r|j        d         nd}|j        pd}d}|j        D ]&} ||¦  «        pt          j        |d¦  «        }|r nŒ'|s¯t!          d|j        › d�¦  «         |r”	 dd	l}|                     |› d
�¦  «                             ¦   «         }n&# t(          t*          f$ r t!          ¦   «          Y d	S w xY w|st!          d¦  «         d	S  |||¦  «         |}t!          d¦  «         t!          ¦   «          n1t!          d|j        › d|d	d…         › d�¦  «         t!          ¦   «          d}|r  ||¦  «        pt          j        |d¦  «        }|s`|                      d¦  «        }t/          |t0          ¦  «        r6t3          |                     d¦  «        pd¦  «                             ¦   «         }t5          |p|j        ¦  «        }ddt9          d¦  «        › d�fddt9          d¦  «        › d�fg}g }|D ]>\  }}||k    r|                     d||› d�f¦  «         Œ'|                     ||f¦  «         Œ?|                     d¦  «         t?          d„ |D ¦   «         ¦  «        }|�||         d         dk    rt!          d¦  «         d	S ||         d         }t9          |¦  «        }|r |||¦  «          |
||¦  «        }|r+|}t!          dtA          |¦  «        › d|j        › d�¦  «         n/tC          j        |g ¦  «        }|rt!          d |j        › d!�¦  «         |r |||¬"¦  «        }n<	 tE          d#¦  «                             ¦   «         }n# t(          t*          f$ r d	}Y nw xY w|r° ||¦  «          |¦   «         } |                      d¦  «        }!t/          |!t0          ¦  «        s|!rd$|!ini }!|!| d<   ||!d%<   ||!d<   |! #                    d&d	¦  «          |	| ¦  «          |¦   «          t1          |!¦  «        | d<   t!          d'|› d(|j        › d�¦  «         d	S t!          d¦  «         d	S ))z6StepFun Step Plan flow with region-specific endpoints.r   ©ro   r%  r?  r@  rÖ  r�  rš  rn   r_  r`  Nra  rA  rB  r¹   rb  rÍ   rc  rm   r€   rn  zInternational (rÖ   rm  zChina (r‰  )rŒ  rì  c                 ó   — g | ]\  }}|‘ŒS rÜ   rÜ   rŽ  s      r   rß   z'_model_flow_stepfun.<locals>.<listcomp>r  s   € Ð)PÐ)PÐ)P±H°A°u¨%Ð)PÐ)PÐ)Pr   rŒ  r�  rE  ú model(s) from ú APIz$  Could not auto-detect models from u,    API â€” showing Step Plan fallback catalog.r‚  r  r   r   r|  rG  rµ  )$r…   ro   r%  r?  r@  r„   r3  r4  rS   rñ  r®  rŽ  r�   rf  r8   rx   r   r?   r1  r1   r  r  r†   r‡   rˆ   r‰   rp  rJ  ru  r¹  rµ  r±  r+   r—  r  rk  )"rÅ  rÆ  ro   r%  r?  r@  r3  r4  rS   rñ  rŽ  r¡   r›   r{  rg  rh  ri  r1  rL  Úcurrent_baser—   Úcurrent_regionÚregion_choicesÚordered_regionsÚ
region_keyr  Ú
region_idxÚselected_regionrN  rO  r,  r-  r–   rm   s"                                     r   rÀ  rÀ  3  sÛ  € ðð ð ð ð ð ð ð ð ð ð ð ð ZÐYÐYÐYÐYÐYÐYÐYÐYÐYÐYÐYØ2Ð2Ð2Ð2Ð2Ð2à€KØ Ô,€GØ-4Ô-EÐMˆgÔ& qÔ)Ð)È2€GØÔ+Ð1¨r€Là€LØÔ&ð ð ˆØ$�} RÑ(Ô(Ð=­B¬I°b¸"Ñ,=Ô,=ˆØð 	ØˆEð	ð ð ÝÐ6�G”LÐ6Ð6Ð6Ñ7Ô7Ð7Øð 	ðØ���Ø!Ÿ/š/¨WÐ*MÐ*MÐ*MÑNÔN×TÒTÑVÔV��øÝ%¥xÐ0ð ð ð Ý‘”�Ø��ðøøøð ð Ý�lÑ#Ô#Ð#Ø�ØˆN˜7 GÑ,Ô,Ð,Ø"ˆLÝÐ"Ñ#Ô#Ð#Ý‰GŒGˆGøåÐD�7”<ÐDÐD¨<¸¸¸Ô+;ÐDÐDÐDÑEÔEÐEÝ‰Œˆà€LØð RØ$�} \Ñ2Ô2ÐQµb´iÀÈbÑ6QÔ6QˆØð HØ—J’J˜wÑ'Ô'ˆ	Ý�i¥Ñ&Ô&ð 	HÝ˜yŸ}š}¨ZÑ8Ô8Ð>¸BÑ?Ô?×EÒEÑGÔGˆLÝ*¨<Ð+U¸7Ô;UÑVÔV€Nð 
Ð\Õ,HÈÑ,YÔ,YÐ\Ð\Ð\Ð]Ø	ÐDÕ8¸ÑAÔAÐDÐDÐDÐEð€Nð €OØ+ð 8ð 8Ñˆ
�EØ˜Ò'Ð'Ø×"Ò" 1 z°eÐ3SÐ3SÐ3SÐ&TÑUÔUÐUÐUà×"Ò" J°Ð#6Ñ7Ô7Ð7Ð7Ø×ÒÐ/Ñ0Ô0Ð0å(Ð)PÐ)PÀÐ)PÑ)PÔ)PÑQÔQ€JØÐ˜_¨ZÔ8¸Ô;¸xÒGÐGÝˆlÑÔÐØˆà% jÔ1°!Ô4€OÝ1°/ÑBÔB€NØð 5Øˆ�| ^Ñ4Ô4Ð4à"Ð" <°Ñ@Ô@€KØð 	Ø ˆ
ÝÐK�˜Z™œÐKÐK¸¼ÐKÐKÐKÑLÔLÐLÐLå%Ô)¨+°rÑ:Ô:ˆ
Øð 	Ýð6°w´|ð 6ð 6ð 6ñô ð ð
 ð Ø*Ð*¨:À]ÐSÑSÔSˆˆð	Ý˜^Ñ,Ô,×2Ò2Ñ4Ô4ˆHˆHøÝ!¥8Ð,ð 	ð 	ð 	ØˆHˆHˆHð	øøøð ð ØÐ˜8Ñ$Ô$Ð$àˆk‰mŒmˆØ—’˜Ñ Ô ˆÝ˜%¥Ñ&Ô&ð 	!Ø*/Ð7�Y Ð&Ð&°RˆEØ ˆC�‰LØ'ˆˆjÑØ*ˆˆjÑØ�	Š	�*˜dÑ#Ô#Ð#Øˆ�CÑÔÐØÐÑÔÐå˜u™+œ+ˆˆw‰ÝÐF xÐFÐF°w´|ÐFÐFÐFÑGÔGÐGÐGÐGåˆlÑÔÐÐÐs$   Â.C ÃC'Ã&C'Í!M< Í<NÎNc                 ó  — ddl m}m}m} ddlm}m}m}m}	 ddl	m
}
 d|› d�} |d¦  «        pd}|rt          d	|d
d…         › d�¦  «         n£t          d|› �¦  «         t          ¦   «          	 dd
l}|                     d	¦  «                             ¦   «         }n&# t          t          f$ r t          ¦   «          Y d
S w xY w|st          d¦  «         d
S  |	d|¦  «         |}t          d¦  «         t          ¦   «           |
j        dg ¦  «        }t          dt#          |¦  «        › d�¦  «         |r |||¬¦  «        }n<	 t%          d¦  «                             ¦   «         }n# t          t          f$ r d
}Y nw xY w|rú ||¦  «          |¦   «         }|                     d¦  «        }t'          |t(          ¦  «        s|rd|ini }||d<   d|d<   ||d<   |                     dd
¦  «         |                     di ¦  «        }t'          |t(          ¦  «        si }||d<   ||d<    |	d|¦  «          |	d|¦  «          ||¦  «          |¦   «          t          d|› d|› d �¦  «         t          d|› �¦  «         d
S t          d!¦  «         d
S )"uç   Bedrock API Key mode â€” uses the OpenAI-compatible bedrock-mantle endpoint.

    For developers who don't have an AWS account but received a Bedrock API Key
    from their AWS admin. Works like any OpenAI-compatible endpoint.
    r   r>  )rS   rñ  r3  r4  r–  zhttps://bedrock-mantle.z.api.aws/v1ÚAWS_BEARER_TOKEN_BEDROCKrn   z  Bedrock API Key: Né   rc  z  Endpoint: r7  õ     âœ“ API key saved.r›  ú
  Showing z curated modelsr‚  ú  Model ID: rm   r   rb  r   r€   r|  rq  rp   rr   ú  Default model set to: z (via Bedrock API Key, rÖ   ú  No change.)r…   r%  r?  r@  r„   rS   rñ  r3  r4  r®  r—  r   r1  r1   r  r  r†   r+   r  r‡   rˆ   rk  )rÅ  rq  rÆ  r%  r?  r@  rS   rñ  r3  r4  r—  Úmantle_base_urlrh  r1  ru   r,  r-  r–   rm   Úbedrock_cfgs                       r   Ú_model_flow_bedrock_api_keyrŒ  ¤  s¬  € ðð ð ð ð ð ð ð ð ð ð
ð ð ð ð ð ð ð ð ð ð ð ð 3Ð2Ð2Ð2Ð2Ð2àC°ÐCÐCÐC€Oð !�=Ð!;Ñ<Ô<ÐBÀ€LØð &ÝÐ> L°°"°Ô$5Ð>Ð>Ð>Ñ?Ô?Ð?Ð?åÐ.˜_Ð.Ð.Ñ/Ô/Ð/Ý‰Œˆð	ØˆNˆNˆNà—o’oÐ&;Ñ<Ô<×BÒBÑDÔDˆGˆGøÝ!¥8Ð,ð 	ð 	ð 	Ý‰GŒGˆGØˆFˆFð	øøøð ð 	Ý�.Ñ!Ô!Ð!ØˆFØˆÐ1°7Ñ;Ô;Ð;ØˆÝÐ$Ñ%Ô%Ð%Ý	�G„G€Gð &Ð!Ô% i°Ñ4Ô4€JÝ	Ð
7•s˜:‘”Ð
7Ð
7Ð
7Ñ8Ô8Ð8àð Ø*Ð*¨:À]ÐSÑSÔSˆˆð	Ý˜^Ñ,Ô,×2Ò2Ñ4Ô4ˆHˆHøÝ!¥8Ð,ð 	ð 	ð 	ØˆHˆHˆHð	øøøð ð ØÐ˜8Ñ$Ô$Ð$ð ˆk‰mŒmˆØ—’˜Ñ Ô ˆÝ˜%¥Ñ&Ô&ð 	!Ø*/Ð7�Y Ð&Ð&°RˆEØ ˆC�‰LØ$ˆˆjÑØ+ˆˆjÑØ�	Š	�*˜dÑ#Ô#Ð#ð —g’g˜i¨Ñ,Ô,ˆÝ˜+¥tÑ,Ô,ð 	ØˆKØ &ˆ�HÑØ$ˆˆI‰ð 	ˆÐ'¨Ñ6Ô6Ð6ØˆÐ(¨/Ñ:Ô:Ð:àˆ�CÑÔÐØÐÑÔÐåÐS¨ÐSÐSÈ&ÐSÐSÐSÑTÔTÐTÝÐ.˜_Ð.Ð.Ñ/Ô/Ð/Ð/Ð/åˆnÑÔÐÐÐs$   Á/+B ÂB>Â=B>Å!E# Å#E9Å8E9c                 ó
  ‡‡ — ddl m}m}m} ddlm}m} ddlm} 	 ddl	m
}m}	m}
m} n=# t          $ r0 t          d¦  «         t          d¦  «         t          ¦   «          Y dS w xY w |¦   «         s,t          d	¦  «         t          d
¦  «         t          ¦   «           |	¦   «         }|rt          d|› d�¦  «         nt          d¦  «         t          ¦   «           |
¦   «         }	 t!          d|› d�¦  «                             ¦   «         }n&# t$          t&          f$ r t          ¦   «          Y dS w xY w|p|}t          d¦  «         t          ¦   «          t          d¦  «         t          d¦  «         t          d¦  «         t          d¦  «         t          d¦  «         t          ¦   «          	 t!          d¦  «                             ¦   «         }n&# t$          t&          f$ r t          ¦   «          Y dS w xY w|dk    rt)          | ||¦  «         dS t          d|› d�¦  «          ||¦  «        }|�rid}d}g }|D ]W}|d         Š t+          ˆ fd„|D ¦   «         ¦  «        rŒ&t+          ˆ fd„|D ¦   «         ¦  «        rŒB|                     |¦  «         ŒXt/          ¦   «         }|D ]^}|d         Š ‰                      d¦  «        r?d ‰ d!d…         v r‰                      d d"¦  «        d"         n‰ }|                     |¦  «         Œ_g }|D ]9}|d         Š ‰                      d¦  «        s‰ |v rŒ$|                     |¦  «         Œ:g d#¢Šˆfd$„}|                     |¬%¦  «         d&„ |D ¦   «         }t          d't9          |¦  «        › d(t9          |¦  «        › d)�¦  «         nE |j        d*g ¦  «        }|r!t          d+t9          |¦  «        › d,�¦  «         nt          d-¦  «         dS |r |||¬.¦  «        }n<	 t!          d/¦  «                             ¦   «         }n# t$          t&          f$ r d}Y nw xY w|rÔ ||¦  «          |¦   «         }|                     d0¦  «        }t=          |t>          ¦  «        s|rd1|ini }||d0<   d*|d2<   d3|› d4�|d5<   |                      d6d¦  «         |                     d*i ¦  «        }t=          |t>          ¦  «        si }||d7<   ||d*<    ||¦  «          |¦   «          t          d8|› d9|› d:�¦  «         dS t          d;¦  «         dS )<u$  AWS Bedrock provider: verify credentials, pick region, discover models.

    Uses the native Converse API via boto3 â€” not the OpenAI-compatible endpoint.
    Auth is handled by the AWS SDK default credential chain (env vars, profile,
    instance role), so no API key prompt is needed.
    r   r>  rð  r–  )Úhas_aws_credentialsÚresolve_aws_auth_env_varÚresolve_bedrock_regionÚdiscover_bedrock_modelsu.     âœ— boto3 is not installed. Install it with:z    pip install boto3Nu<     âš  No AWS credentials detected via environment variables.zE  Bedrock will use boto3's default credential chain (IMDS, SSO, etc.)z  AWS credentials: u    âœ“z<  AWS credentials: boto3 default chain (instance role / SSO)z  AWS Region [r  ú  Choose authentication method:z)    1. IAM credential chain (recommended)zB       Works with EC2 instance roles, SSO, env vars, aws configurez    2. Bedrock API Keyu<          Enter your Bedrock API Key directly â€” also supportsz5       team scenarios where an admin distributes keysz  Choice [1]: r~  z  Discovering models in r  )z
stability.zcohere.embedztwelvelabs.zus.stability.zus.cohere.embedzus.twelvelabs.zglobal.cohere.embedzglobal.twelvelabs.)Ú	safeguardÚvoxtralzpalmyra-visionr´   c              3   óB   •K  — | ]}‰                      |¦  «        V — Œd S rw   rê  )ry   r…  rè  s     €r   r{   z&_model_flow_bedrock.<locals>.<genexpr>T  s/   øè è € Ð@Ð@¨�3—>’> !Ñ$Ô$Ð@Ð@Ð@Ð@Ð@Ð@r   c              3   óD   •K  — | ]}|‰                      ¦   «         v V — Œd S rw   ©rÅ   )ry   r¾   rè  s     €r   r{   z&_model_flow_bedrock.<locals>.<genexpr>V  s0   øè è € ÐAÐA¨�1˜Ÿ	š	™œÐ#ÐAÐAÐAÐAÐAÐAr   )zus.úglobal.r(  rË   r   )	zus.anthropic.claude-sonnet-4-6zus.anthropic.claude-opus-4-6zus.anthropic.claude-haiku-4-5zus.amazon.nova-prozus.amazon.nova-litezus.amazon.nova-microzdeepseek.v3zus.meta.llama4-maverickzus.meta.llama4-scoutc                 ó´   •— | d         }t          ‰¦  «        D ]!\  }}|                     |¦  «        rd||fc S Œ"|                     d¦  «        rdd|fS dd|fS )Nr´   r   r˜  r   r!   )r*   r,   )rÄ  rè  r<   ÚrecÚ_RECOMMENDEDs       €r   Ú	_sort_keyz&_model_flow_bedrock.<locals>._sort_keyv  s~   ø€ Ø�D”'ˆCÝ# LÑ1Ô1ð 'ð '‘��3Ø—>’> #Ñ&Ô&ð 'Ø˜q #˜;Ð&Ð&Ð&ð'à�~Š~˜iÑ(Ô(ð #Ø˜1˜c�{Ð"Ø�q˜#�;Ðr   )rž   c                 ó   — g | ]
}|d          ‘ŒS )r´   rÜ   ©ry   rÄ  s     r   rß   z'_model_flow_bedrock.<locals>.<listcomp>€  s   € Ð/Ð/Ð/ !�a˜”gÐ/Ð/Ð/r   rE  z text model(s) (filtered from z total)r›  z  Using z, curated models (live discovery unavailable)zJ  No models found. Check IAM permissions for bedrock:ListFoundationModels.r‚  r‡  rm   r   r   zhttps://bedrock-runtime.z.amazonaws.comr€   r|  rq  rˆ  z (via AWS Bedrock, rÖ   r‰  )!r…   r%  r?  r@  r„   rS   rñ  r®  r—  Úagent.bedrock_adapterrŽ  r�  r�  r‘  r   r   r  r1   r  r  rŒ  rŽ   rµ  Úsetr,   r-   ÚaddÚsortr+   r†   r‡   rˆ   rk  )!rÅ  rÆ  r%  r?  r@  rS   rñ  r—  rŽ  r�  r�  r‘  Úauth_varr|  Úregion_inputrq  Úauth_choicerO  Ú_EXCLUDE_PREFIXESÚ_EXCLUDE_SUBSTRINGSr  rÄ  Úprofile_base_idsÚbaser$  rœ  r,  r-  r–   rm   r‹  r›  rè  s!                                  @@r   rÁ  rÁ  ü  sÿ  øø€ ðð ð ð ð ð ð ð ð ð ð
 ;Ð:Ð:Ð:Ð:Ð:Ð:Ð:Ø2Ð2Ð2Ð2Ð2Ð2ðð	
ð 	
ð 	
ð 	
ð 	
ð 	
ð 	
ð 	
ð 	
ð 	
ð 	
ð 	
ð 	
øõ ð ð ð ÝÐ>Ñ?Ô?Ð?ÝÐ%Ñ&Ô&Ð&Ý‰ŒˆØˆˆð	øøøð ÐÑ Ô ð ÝÐLÑMÔMÐMÝÐUÑVÔVÐVÝ‰Œˆà'Ð'Ñ)Ô)€HØð NÝÐ2 HÐ2Ð2Ð2Ñ3Ô3Ð3Ð3åÐLÑMÔMÐMÝ	�G„G€Gð ,Ð+Ñ-Ô-€NðÝÐA¨nÐAÐAÐAÑBÔB×HÒHÑJÔJˆˆøÝ�xÐ(ð ð ð Ý‰ŒˆØˆˆðøøøð Ð+˜^€Fõ 
Ð
+Ñ,Ô,Ð,Ý	�G„G€GÝ	Ð
5Ñ6Ô6Ð6Ý	Ð
NÑOÔOÐOÝ	Ð
"Ñ#Ô#Ð#Ý	Ð
HÑIÔIÐIÝ	Ð
AÑBÔBÐBÝ	�G„G€GðÝÐ,Ñ-Ô-×3Ò3Ñ5Ô5ˆˆøÝ�xÐ(ð ð ð Ý‰ŒˆØˆˆðøøøð �cÒÐÝ# F¨F°MÑBÔBÐBØˆõ 
Ð
0 VÐ
0Ð
0Ð
0Ñ1Ô1Ð1Ø)Ð)¨&Ñ1Ô1€Kàñ Ið	
Ðð IÐØˆØð 	ð 	ˆAØ�D”'ˆCÝÐ@Ð@Ð@Ð@Ð.?Ð@Ñ@Ô@Ñ@Ô@ð ØÝÐAÐAÐAÐAÐ-@ÐAÑAÔAÑAÔAð ØØ�OŠO˜AÑÔÐÐõ ™5œ5ÐØð 	+ð 	+ˆAØ�D”'ˆCØ�~Š~Ð0Ñ1Ô1ð +Ø/2°c¸!¸"¸"´g¨~¨~�s—y’y  aÑ(Ô(¨Ô+Ð+À3�Ø ×$Ò$ TÑ*Ô*Ð*øàˆØð 	ð 	ˆAØ�D”'ˆCØ—>’>Ð"4Ñ5Ô5ð ¸#ÐAQÐ:QÐ:QØØ�NŠN˜1ÑÔÐÐð

ð 

ð 

ˆð	ð 	ð 	ð 	ð 	ð 	�Š˜ˆÑ#Ô#Ð#Ø/Ð/ wÐ/Ñ/Ô/ˆ
ÝØ_•s˜:‘”Ð_Ð_ÅcÈ+ÑFVÔFVÐ_Ð_Ð_ñ	
ô 	
ð 	
ð 	
ð *Ð%Ô)¨)°RÑ8Ô8ˆ
Øð 	ÝØX�3˜z™?œ?ÐXÐXÐXñô ð ð õ Ø\ñô ð ð ˆFð ð Ø*Ð*¨:À]ÐSÑSÔSˆˆð	Ý˜^Ñ,Ô,×2Ò2Ñ4Ô4ˆHˆHøÝ!¥8Ð,ð 	ð 	ð 	ØˆHˆHˆHð	øøøð ð ØÐ˜8Ñ$Ô$Ð$àˆk‰mŒmˆØ—’˜Ñ Ô ˆÝ˜%¥Ñ&Ô&ð 	!Ø*/Ð7�Y Ð&Ð&°RˆEØ ˆC�‰LØ%ˆˆjÑØM°vÐMÐMÐMˆˆjÑØ�	Š	�*˜dÑ#Ô#Ð#à—g’g˜i¨Ñ,Ô,ˆÝ˜+¥tÑ,Ô,ð 	ØˆKØ &ˆ�HÑØ$ˆˆI‰àˆ�CÑÔÐØÐÑÔÐåÐO¨ÐOÐOÀfÐOÐOÐOÑPÔPÐPÐPÐPåˆnÑÔÐÐÐsE   œ) ©6A#Á"A#Ã$%D
 Ä
D-Ä,D-Æ+!G ÇG0Ç/G0Ï,!P ÐP$Ð#P$c                 óŠ  ‡‡'— ddl m}m}m}m} ddlm}m}m}	m	}
 ddl
m}m}mŠ' |‰         }|j        r|j        d         nd}|j        pd}d}|j        D ]&} ||¦  «        pt!          j        |d¦  «        }|r nŒ'|s¯t%          d|j        › d�¦  «         |r”	 ddl}|                     |› d	�¦  «                             ¦   «         }n&# t,          t.          f$ r t%          ¦   «          Y dS w xY w|st%          d
¦  «         dS  |||¦  «         |}t%          d¦  «         t%          ¦   «          n1t%          d|j        › d|dd…         › d�¦  «         t%          ¦   «          ‰dk    �rS|�rP	 ddlm} n# t4          $ r d}Y nw xY w|��3t%          d¦  «         |r ||¦  «        ndpt!          j        |pdd¦  «        p|j        } |||¦  «        }|dk    r²t%          ¦   «          t%          d¦  «         t%          d¦  «         t%          d¦  «         t%          d¦  «         t%          ¦   «          t%          d¦  «         t%          d¦  «         t%          ¦   «          t%          d¦  «         t%          ¦   «          t%          d¦  «         dS |dk    rt%          d¦  «         nt%          d¦  «         t%          ¦   «          d}|r  ||¦  «        pt!          j        |d¦  «        }|p|j        }	 t9          d|› d �¦  «                             ¦   «         }n'# t,          t.          f$ r t%          ¦   «          d}Y nw xY w|r5|r3|                     d!¦  «        st%          d"¦  «         n |||¦  «         |}‰d#k    rHdd$l
m} |p|r ||¦  «        nd} |||¬%¦  «        }|r t%          d&t?          |¦  «        › d'�¦  «         �nœtA          j!        ‰g ¦  «        }g }	 dd(l"m#}  |‰¦  «        }n# t4          $ r Y nw xY w|rš|rud)„ |D ¦   «         } tI          |¦  «        }!|D ]T}"|" %                    ¦   «         | vr<|! &                    |"¦  «         |  '                    |" %                    ¦   «         ¦  «         ŒU|!}n|}t%          d&t?          |¦  «        › d*�¦  «         nÆ|r6t?          |¦  «        dk    r#|}t%          d+t?          |¦  «        › d,�¦  «         nŽ|p|r ||¦  «        nd} |||¦  «        }#|#rKt?          |#¦  «        t?          |¦  «        k    r+|#}t%          d&t?          |¦  «        › d-|j        › d.�¦  «         n$|}|r t%          d+t?          |¦  «        › d,�¦  «         ‰d/v rLˆ'ˆfd0„|D ¦   «         } ‰'‰|¦  «        }tI          tP           )                    d1„ |D ¦   «         ¦  «        ¦  «        }|r |||¬2¦  «        }$n<	 t9          d3¦  «                             ¦   «         }$n# t,          t.          f$ r d}$Y nw xY w|$rÂ‰d/v r ‰'‰|$¦  «        }$ ||$¦  «          |	¦   «         }%|% !                    d4¦  «        }&tU          |&tP          ¦  «        s|&rd5|&ini }&|&|%d4<   ‰|&d6<   ||&d7<   ‰d/v r |‰|$¦  «        |&d8<   n|& +                    d8d¦  «          |
|%¦  «          |¦   «          t%          d9|$› d:|j        › d;�¦  «         dS t%          d<¦  «         dS )=zCGeneric flow for API-key providers (z.ai, MiniMax, OpenCode, etc.).r   rw  rÖ  )rŽ  Úopencode_model_api_modeÚnormalize_opencode_model_idrn   r_  r`  Nra  rA  rB  r¹   rb  rÍ   rc  r�  )Úprobe_gemini_tierz  Checking Gemini API tier...ÚfreeuW   â�Œ This Google API key is on the free tier (<= 250 requests/day for gemini-2.5-flash).z[   Hermes typically makes 3-10 API calls per user turn (tool iterations + auxiliary tasks),zO   so the free tier is exhausted after a handful of messages and cannot sustainz   an agent session.zX   To use Gemini with Hermes, enable billing on your Google Cloud project and regeneratezK   the key in a billing-enabled project: https://aistudio.google.com/apikeyzY   Alternatives with workable free usage: DeepSeek, OpenRouter (free models), Groq, Nous.z*Not saving Gemini as the default provider.Úpaidu     Tier check: paid âœ“z3  Tier check: could not verify (proceeding anyway).r0  r  r¤  uM     Invalid URL â€” must start with http:// or https://. Keeping current value.r¬  )Úfetch_ollama_cloud_models)ru   r€   rE  z model(s) from Ollama Cloud)Úlist_agentic_modelsc                 ó6   — h | ]}|                      ¦   «         ’ŒS rÜ   r—  rž  s     r   ú	<setcomp>z/_model_flow_api_key_provider.<locals>.<setcomp>T  s    € Ð7Ð7Ð7 a˜Ÿš™	œ	Ð7Ð7Ð7r   z" model(s) from models.dev registryr†  re  ry  rz  >   r¦  r¥  c                 ó(   •— g | ]} ‰‰|¦  «        ‘ŒS rÜ   rÜ   )ry   rè  r¬  r¡   s     €€r   rß   z0_model_flow_api_key_provider.<locals>.<listcomp>u  s4   ø€ ð 
ð 
ð 
Ø>AÐ'Ð'¨°SÑ9Ô9ð
ð 
ð 
r   c              3   ó   K  — | ]}|¯|V — Œ	d S rw   rÜ   )ry   rè  s     r   r{   z/_model_flow_api_key_provider.<locals>.<genexpr>y  s'   è è € Ð'IÐ'I°ÀSÐ'I¨Ð'IÐ'IÐ'IÐ'IÐ'IÐ'Ir   r‚  r  rm   r   r   r€   r|  rG  rµ  rÖ   r�  ),r…   ro   r%  r?  r@  r„   r3  r4  rS   rñ  r®  rŽ  r«  r¬  r�   rf  r8   rx   r   r?   r1  r1   r  r  Úagent.gemini_native_adapterr­  r7   rJ  r  r,   r°  r+   r—  r†   Úagent.models_devr±  rë   rÅ   rµ  r¡  rˆ   r*  r‡   rk  )(rÅ  r¡   rÆ  ro   r%  r?  r@  r3  r4  rS   rñ  rŽ  r«  r›   r{  rg  rh  ri  r1  rL  r­  Ú
probe_baseÚtierr{  rN  Úoverrider°  Úapi_key_for_prober,  ÚcuratedÚmdev_modelsr±  ÚseenÚmergedrÄ  rO  r-  r–   rm   r¬  s(    `                                     @r   rÃ  rÃ  ³  sÄ	  øø€ ðð ð ð ð ð ð ð ð ð ð ð ðð ð ð ð ð ð ð ð ð ð ð ðð ð ð ð ð ð ð ð ð ð   Ô,€GØ-4Ô-EÐMˆgÔ& qÔ)Ð)È2€GØÔ+Ð1¨r€Lð €LØÔ&ð ð ˆØ$�} RÑ(Ô(Ð=­B¬I°b¸"Ñ,=Ô,=ˆØð 	ØˆEð	ð ð ÝÐ6�G”LÐ6Ð6Ð6Ñ7Ô7Ð7Øð 	ðØ���à!Ÿ/š/¨WÐ*MÐ*MÐ*MÑNÔN×TÒTÑVÔV��øÝ%¥xÐ0ð ð ð Ý‘”�Ø��ðøøøð ð Ý�lÑ#Ô#Ð#Ø�ØˆN˜7 GÑ,Ô,Ð,Ø"ˆLÝÐ"Ñ#Ô#Ð#Ý‰GŒGˆGøåÐD�7”<ÐDÐD¨<¸¸¸Ô+;ÐDÐDÐDÑEÔEÐEÝ‰Œˆð �hÒÑ <Ñð	%ØEÐEÐEÐEÐEÐEÐEøÝð 	%ð 	%ð 	%Ø $ÐÐÐð	%øøøàÑ(ÝÐ1Ñ2Ô2Ð2à0<ÐD��˜|Ñ,Ô,Ð,À"ð .Ý”9˜\Ð/¨R°Ñ4Ô4ð.àÔ-ð ð
 %Ð$ \°:Ñ>Ô>ˆDØ�vŠ~ˆ~Ý‘”�ÝðBñô ð õ ð;ñô ð õ ð2ñô ð õ Ð,Ñ-Ô-Ð-Ý‘”�Ýð:ñô ð õ ð9ñô ð õ ‘”�Ýð<ñô ð õ ‘”�ÝÐBÑCÔCÐCØ�Ø�vŠ~ˆ~ÝÐ.Ñ/Ô/Ð/Ð/õ
 ÐKÑLÔLÐLÝ‰GŒGˆGð €LØð RØ$�} \Ñ2Ô2ÐQµb´iÀÈbÑ6QÔ6QˆØ!Ð? WÔ%?€NðÝÐ9 nÐ9Ð9Ð9Ñ:Ô:×@Ò@ÑBÔBˆˆøÝ�xÐ(ð ð ð Ý‰ŒˆØˆˆˆðøøøð ð &�Lð &Ø×"Ò"Ð#:Ñ;Ô;ð 	&ÝØ_ñô ð ð ð ˆN˜<¨Ñ2Ô2Ð2Ø%ˆNð �nÒ$Ð$Ø?Ð?Ð?Ð?Ð?Ð?à(ÐWÀwÐ-V¨]¨]¸7Ñ-CÔ-CÐ-CÐTVÐØ.Ð.Ø%°ð
ñ 
ô 
ˆ
ð ð 	KÝÐI�S ™_œ_ÐIÐIÐIÑJÔJÐJùå"Ô& {°BÑ7Ô7ˆð ˆð	Ø<Ð<Ð<Ð<Ð<Ð<à-Ð-¨kÑ:Ô:ˆKˆKøÝð 	ð 	ð 	ØˆDð	øøøð ð !	ð ð 	)Ø7Ð7¨;Ð7Ñ7Ô7�Ý˜kÑ*Ô*�Ø ð ,ð ,�AØ—w’w‘y”y¨Ð,Ð,ØŸš aÑ(Ô(Ð(ØŸš §¢¡¤Ñ+Ô+Ð+øØ#�
�
à(�
ÝÐP�S ™_œ_ÐPÐPÐPÑQÔQÐQÐQØð 	�˜W™œ¨Ò*Ð*à ˆJÝØk�S ™_œ_ÐkÐkÐkñô ð ð ð !-ð !Ø*1Ð9��˜gÑ&Ô&Ð&°rð ð +Ð*Ð+<¸nÑMÔMˆKØð �s ;Ñ/Ô/µ3°w±<´<Ò?Ð?Ø(�
ÝÐS¥ Z¡¤ÐSÐSÀÄÐSÐSÐSÑTÔTÐTÐTà$�
Øð ÝØs¥S¨¡_¤_ÐsÐsÐsñô ð ð
 Ð5Ð5Ð5ð
ð 
ð 
ð 
ð 
ØEOð
ñ 
ô 
ˆ
ð 4Ð3°KÀÑOÔOˆÝ�$Ÿ-š-Ð'IÐ'I°zÐ'IÑ'IÔ'IÑIÔIÑJÔJˆ
àð Ø*Ð*¨:À]ÐSÑSÔSˆˆð	Ý˜^Ñ,Ô,×2Ò2Ñ4Ô4ˆHˆHøÝ!¥8Ð,ð 	ð 	ð 	ØˆHˆHˆHð	øøøð ð ØÐ9Ð9Ð9Ø2Ð2°;ÀÑIÔIˆHàÐ˜8Ñ$Ô$Ð$ð ˆk‰mŒmˆØ—’˜Ñ Ô ˆÝ˜%¥Ñ&Ô&ð 	!Ø*/Ð7�Y Ð&Ð&°RˆEØ ˆC�‰LØ'ˆˆjÑØ*ˆˆjÑØÐ9Ð9Ð9Ø 7Ð 7¸ÀXÑ NÔ NˆE�*ÑÐà�IŠI�j $Ñ'Ô'Ð'Øˆ�CÑÔÐØÐÑÔÐåÐF xÐFÐF°w´|ÐFÐFÐFÑGÔGÐGÐGÐGåˆlÑÔÐÐÐsZ   Â.C ÃC+Ã*C+Å)E0 Å0E?Å>E?Ë&%L Ì!L0Ì/L0ÏO" Ï"
O/Ï.O/Ö5!W ×W-×,W-c                 ó  ‡ ‡‡‡	— ddl m}mŠmŠ ddlm}mŠ	 dt          fˆˆˆ ˆ	fd„}	 t          ¦   «          t          d¦  «         t          d¦  «         t          ¦   «           |¦   «         }|r* |¦   «         rdS  ||‰ ¬	¦  «         t          d
¦  «         dS t          ¦   «          t          d¦  «         t          ¦   «          	 ddl	}| 	                    d¦  «         
                    ¦   «         }n&# t          t          f$ r t          ¦   «          Y dS w xY w|r ||‰ ¬	¦  «         t          d¦  «         dS t          d¦  «         dS # t          $ �r7 t          ¦   «          t          d¦  «         t          ¦   «          t          d¦  «         t          ¦   «          t          d¦  «         t          d¦  «         t          d¦  «         t          d¦  «         t          ¦   «          t          d¦  «         t          ¦   «          	 ddl	}| 	                    d¦  «         
                    ¦   «         }n'# t          t          f$ r t          ¦   «          Y Y dS w xY w|r ||‰ ¬	¦  «         t          d¦  «         Y dS t          d¦  «         Y dS w xY w)zNRun the Claude OAuth setup-token flow. Returns True if credentials were saved.r   )Úrun_oauth_setup_tokenr�   r‚   )Úsave_anthropic_oauth_tokenÚ%use_anthropic_claude_code_credentialsr   c                  ó  •— 	  ‰¦   «         } n# t           $ r d } Y nw xY w| rk ‰| ¦  «        s"t          |                      d¦  «        ¦  «        r> ‰‰¬¦  «         t          d¦  «         ddlm} t          d |¦   «         › d�¦  «         dS d	S )
Nrƒ   ©Úsave_fnu%     âœ“ Claude Code credentials linked.r   ©Údisplay_hermes_homez]    Hermes will use Claude's credential store directly instead of copying a setup-token into z/.env.TF)r7   r°  r†   r   r.   rÈ  )r©   Ú_dhh_fnr‚   r�   r4  rÃ  s     €€€€r   Ú._activate_claude_code_credentials_if_availablezQ_run_anthropic_oauth_flow.<locals>._activate_claude_code_credentials_if_available©  sì   ø€ ð	Ø0Ð0Ñ2Ô2ˆEˆEøÝð 	ð 	ð 	ØˆEˆEˆEð	øøøàð 
	Ø&Ð& uÑ-Ô-ð
	Ý15°e·i²iÀÑ6OÔ6OÑ1PÔ1Pð
	ð 2Ð1¸.ÐIÑIÔIÐIÝÐ9Ñ:Ô:Ð:ØGÐGÐGÐGÐGÐGåð BÐpwÐpwÑpyÔpyð  Bð  Bð  Bñô ð ð �4Øˆus   ƒ
 Žœu<     Running 'claude setup-token' â€” follow the prompts below.z9  A browser window will open for you to authorize access.TrÅ  u     âœ“ OAuth credentials saved.z8  If the setup-token was displayed above, paste it here:Nz*  Paste setup-token (or Enter to cancel): Fu     âœ“ Setup-token saved.u)     âš  Could not detect saved credentials.z/  The 'claude' CLI is required for OAuth login.z  To install and authenticate:zE    1. Install Claude Code:  npm install -g @anthropic-ai/claude-codez/    2. Run:                  claude setup-tokenz.    3. Follow the browser prompts to authorizez)    4. Re-run:               hermes modelz8  Or paste an existing setup-token now (sk-ant-oat-...):z$  Setup-token (or Enter to cancel): u2     Cancelled â€” install Claude Code and try again.)r”   rÁ  r�   r‚   r„   rÂ  rÃ  r°  r   r1  r1   r  r  r6   )
r4  rÁ  rÂ  rÊ  rK  r1  Úmanual_tokenr‚   r�   rÃ  s
   `      @@@r   Ú_run_anthropic_oauth_flowrÌ  �  sK  øøøø€ ðð ð ð ð ð ð ð ð ð ð
ð ð ð ð ð ð ð ð
½Dð ð ð ð ð ð ð ð ð ð$<Ý‰ŒˆÝÐLÑMÔMÐMÝÐIÑJÔJÐJÝ‰ŒˆØ%Ð%Ñ'Ô'ˆØð 	Ø=Ð=Ñ?Ô?ð Ø�tØ&Ð& u°nÐEÑEÔEÐEÝÐ2Ñ3Ô3Ð3Ø�4õ 	‰ŒˆÝÐHÑIÔIÐIÝ‰Œˆð	ØˆNˆNˆNà"Ÿ?š?Ø<ñô çŠe‰gŒgð ˆLøõ "¥8Ð,ð 	ð 	ð 	Ý‰GŒGˆGØ�5�5ð	øøøð ð 	Ø&Ð& |¸^ÐLÑLÔLÐLÝÐ,Ñ-Ô-Ð-Ø�4åÐ9Ñ:Ô:Ð:Øˆuøåð ñ ð å‰ŒˆÝÐ?Ñ@Ô@Ð@Ý‰ŒˆÝÐ.Ñ/Ô/Ð/Ý‰ŒˆÝÐUÑVÔVÐVÝÐ?Ñ@Ô@Ð@ÝÐ>Ñ?Ô?Ð?ÝÐ9Ñ:Ô:Ð:Ý‰ŒˆÝÐHÑIÔIÐIÝ‰Œˆð	ØˆNˆNˆNà—O’OÐ$JÑKÔK×QÒQÑSÔSˆEˆEøÝ!¥8Ð,ð 	ð 	ð 	Ý‰GŒGˆGØ�5�5�5ð	øøøð ð 	Ø&Ð& u°nÐEÑEÔEÐEÝÐ,Ñ-Ô-Ð-Ø�4�4ÝÐBÑCÔCÐCØˆuˆuð5øøøss   ¨AE Á:E Â+E Ã+C0 Ã/E Ã0DÄE ÄDÄ!E Ä6E ÅB:J	È+H.È-J	È.IÉJ	ÉIÉ!J	É6J	ÊJ	c                 óê  — ddl m}m}m} ddlm}m}m}m} ddl	m
}	 ddl m}
  |
¦   «         }d}	 ddlm}m}m}m}  |¦   «         }|r ||¦  «        rd}n# t"          $ r Y nw xY wd}|r ||¦  «        r|sd}t%          |¦  «        r| p|}| }|rÅ|rt'          d	|d
d…         › d�¦  «         n|rt'          d¦  «         t'          ¦   «          t'          d¦  «         t'          d¦  «         t'          d¦  «         t'          ¦   «          	 t)          d¦  «                             ¦   «         }n# t,          t.          f$ r d}Y nw xY w|dk    rd}n|dk    rd
S |�rŒt'          ¦   «          t'          d¦  «         t'          ¦   «          t'          d¦  «         t'          d¦  «         t'          d¦  «         t'          ¦   «          	 t)          d¦  «                             ¦   «         }n&# t,          t.          f$ r t'          ¦   «          Y d
S w xY w|dk    rt1          |¦  «        sd
S nÅ|dk    r®t'          ¦   «          t'          d¦  «         t'          ¦   «          	 dd
l}|                     d¦  «                             ¦   «         }n&# t,          t.          f$ r t'          ¦   «          Y d
S w xY w|st'          d¦  «         d
S  |||¬¦  «         t'          d¦  «         nt'          d¦  «         d
S t'          ¦   «           |	j        dg ¦  «        }|r |||¬¦  «        }n<	 t)          d ¦  «                             ¦   «         }n# t,          t.          f$ r d
}Y nw xY w|r‘ ||¦  «          |¦   «         }|                     d!¦  «        }t7          |t8          ¦  «        s|rd"|ini }||d!<   d|d#<   |                     d$d
¦  «          ||¦  «          |¦   «          t'          d%|› d&�¦  «         d
S t'          d'¦  «         d
S )(uR   Flow for Anthropic provider â€” OAuth subscription, API key, or Claude Code creds.r   r>  )r4  rS   rñ  Úsave_anthropic_api_keyr–  )Úget_anthropic_keyF)r�   r‚   Ú_is_oauth_tokenÚ+_resolve_claude_code_token_from_credentialsTz  Anthropic credentials: Nr„  rc  u.     Claude Code credentials: âœ“ (auto-detected)rz  r{  r|  r}  rÑ  r~  r€  r’  z0    1. Claude Pro/Max subscription (OAuth login)z(    2. Anthropic API key (pay-per-token)z>  Get an API key at: https://platform.claude.com/settings/keysz  API key (sk-ant-...): r7  rÅ  r…  r‰  r˜  r‚  z-Model name (e.g., claude-sonnet-4-20250514): rm   r   r   r€   rG  z (via Anthropic)r�  )r…   r%  r?  r@  r„   r4  rS   rñ  rÎ  r®  r—  rÏ  r”   r�   r‚   rÐ  rÑ  r7   r°  r   r  r1   r  r  rÌ  r1  r†   r‡   rˆ   rk  )rÅ  rÆ  r%  r?  r@  r4  rS   rñ  rÎ  r—  rÏ  rh  Úcc_availabler�   r‚   rÐ  rÑ  Úcc_credsÚexisting_is_stale_oauthÚ	has_credsÚ
needs_authrG  r1  ru   r,  r-  r–   rm   s                               r   r¾  r¾  ú  s   € ðð ð ð ð ð ð ð ð ð ð
ð ð ð ð ð ð ð ð ð ð ð ð 3Ð2Ð2Ð2Ð2Ð2ð 2Ð1Ð1Ð1Ð1Ð1à$Ð$Ñ&Ô&€LØ€Lðð	
ð 	
ð 	
ð 	
ð 	
ð 	
ð 	
ð 	
ð 	
ð 	
ð 	
ð 	
ð 0Ð/Ñ1Ô1ˆØð 	 Ð2Ð2°8Ñ<Ô<ð 	 ØˆLøøÝð ð ð Øˆðøøøð $ÐØð '˜˜¨Ñ5Ô5ð '¸lð 'Ø"&Ðå�lÑ#Ô#ÐCÐ,CÐ(CÐTÈ€IØ�€Jàð àð 	DÝÐH¨l¸3¸B¸3Ô.?ÐHÐHÐHÑIÔIÐIÐIØð 	DÝÐBÑCÔCÐCÝ‰ŒˆÝÐ/Ñ0Ô0Ð0ÝÐ7Ñ8Ô8Ð8ÝˆoÑÔÐÝ‰Œˆð	ÝÐ/Ñ0Ô0×6Ò6Ñ8Ô8ˆFˆFøÝ!¥8Ð,ð 	ð 	ð 	ØˆFˆFˆFð	øøøð �SŠ=ˆ=ØˆJˆJØ�sŠ]ˆ]ØˆFð ñ &å‰ŒˆÝÐ/Ñ0Ô0Ð0Ý‰ŒˆÝÐ@ÑAÔAÐAÝÐ8Ñ9Ô9Ð9ÝˆoÑÔÐÝ‰Œˆð	ÝÐ/Ñ0Ô0×6Ò6Ñ8Ô8ˆFˆFøÝ!¥8Ð,ð 	ð 	ð 	Ý‰GŒGˆGØˆFˆFð	øøøð �SŠ=ˆ=Ý,¨^Ñ<Ô<ð Ø�ðð �sŠ]ˆ]Ý‰GŒGˆGÝÐRÑSÔSÐSÝ‰GŒGˆGðØ���à!Ÿ/š/Ð*DÑEÔE×KÒKÑMÔM��øÝ%¥xÐ0ð ð ð Ý‘”�Ø��ðøøøð ð Ý�nÑ%Ô%Ð%Ø�Ø"Ð" 7°NÐCÑCÔCÐCÝÐ(Ñ)Ô)Ð)Ð)õ �.Ñ!Ô!Ð!ØˆFÝ	�G„G€Gð &Ð!Ô% k°2Ñ6Ô6€JØð Ø*Ð*¨:À]ÐSÑSÔSˆˆð	ÝÐLÑMÔM×SÒSÑUÔUˆHˆHøÝ!¥8Ð,ð 	ð 	ð 	ØˆHˆHˆHð	øøøð ð ØÐ˜8Ñ$Ô$Ð$ð ˆk‰mŒmˆØ—’˜Ñ Ô ˆÝ˜%¥Ñ&Ô&ð 	!Ø*/Ð7�Y Ð&Ð&°RˆEØ ˆC�‰LØ'ˆˆjÑØ�	Š	�*˜dÑ#Ô#Ð#Øˆ�CÑÔÐØÐÑÔÐåÐA xÐAÐAÐAÑBÔBÐBÐBÐBåˆlÑÔÐÐÐsY   °%A Á
A#Á"A#Ä!D- Ä-EÅEÇ!G# Ç#HÈHÉ+I? É?J"Ê!J"Ì!L8 Ì8MÍMc                 ó(   — ddl m}  || ¦  «         dS )z(Authenticate Hermes CLI with a provider.r   )Úlogin_commandN)r…   rØ  )r   rØ  s     r   Ú	cmd_loginrÙ  …  s*   € à-Ð-Ð-Ð-Ð-Ð-à€M�$ÑÔÐÐÐr   c                 ó(   — ddl m}  || ¦  «         dS )zClear provider authentication.r   )Úlogout_commandN)r…   rÛ  )r   rÛ  s     r   Ú
cmd_logoutrÜ  Œ  s*   € à.Ð.Ð.Ð.Ð.Ð.à€N�4ÑÔÐÐÐr   c                 ó(   — ddl m}  || ¦  «         dS )zManage pooled credentials.r   )Úauth_commandN)Úhermes_cli.auth_commandsrÞ  )r   rÞ  s     r   Úcmd_authrà  “  s*   € à5Ð5Ð5Ð5Ð5Ð5à€L�ÑÔÐÐÐr   c                 ó(   — ddl m}  || ¦  «         dS )zShow status of all components.r   )Úshow_statusN)Úhermes_cli.statusrâ  )r   râ  s     r   Ú
cmd_statusrä  š  s*   € à-Ð-Ð-Ð-Ð-Ð-à€K�ÑÔÐÐÐr   c                 ó(   — ddl m}  || ¦  «         dS )zCron job management.r   )Úcron_commandN)Úhermes_cli.cronræ  )r   ræ  s     r   Úcmd_cronrè  ¡  s*   € à,Ð,Ð,Ð,Ð,Ð,à€L�ÑÔÐÐÐr   c                 ó(   — ddl m}  || ¦  «         dS )z Webhook subscription management.r   )Úwebhook_commandN)Úhermes_cli.webhookrê  )r   rê  s     r   Úcmd_webhookrì  ¨  r/  r   c                 óÔ   — t          | dd¦  «        }|dv rt          dt          j        ¬¦  «         dS |dk    rdd	lm}  || ¦  «        S t          d
|› �t          j        ¬¦  «         dS )uè   Slack integration helpers.

    Dispatches ``hermes slack <subcommand>``. Currently supports:
      manifest â€” print or write a Slack app manifest with every gateway
                 command registered as a first-class slash.
    Úslack_commandN)Nrn   zËusage: hermes slack <subcommand>

subcommands:
  manifest   Generate a Slack app manifest with every gateway
             command registered as a native slash

Run `hermes slack manifest -h` for details.r   r   Úmanifestr   )Úslack_manifest_commandzUnknown slack subcommand: )r  r   r   r   Úhermes_cli.slack_clirð  )r   rÌ  rð  s      r   Ú	cmd_slackrò  ¯  s›   € õ �$˜¨Ñ
.Ô
.€CØ
ˆjÐÐåð:õ ”ð		
ñ 		
ô 		
ð 		
ð ˆqà
ˆjÒÐØ?Ð?Ð?Ð?Ð?Ð?à%Ð% dÑ+Ô+Ð+å	Ð
, sÐ
,Ð
,µ3´:Ð>Ñ>Ô>Ð>Øˆ1r   c                 ó(   — ddl m}  || ¦  «         dS )z%Shell-hook inspection and management.r   )Úhooks_commandN)Úhermes_cli.hooksrô  )r   rô  s     r   Ú	cmd_hooksrö  Î  s*   € à.Ð.Ð.Ð.Ð.Ð.Ø€M�$ÑÔÐÐÐr   c                 ó(   — ddl m}  || ¦  «         dS )z%Check configuration and dependencies.r   )Ú
run_doctorN)Úhermes_cli.doctorrø  )r   rø  s     r   Ú
cmd_doctorrú  Ô  ó*   € à,Ð,Ð,Ð,Ð,Ð,à€JˆtÑÔÐÐÐr   c                 ó(   — ddl m}  || ¦  «         dS )z)Dump setup summary for support/debugging.r   )Úrun_dumpN)Úhermes_cli.dumprý  )r   rý  s     r   Úcmd_dumprÿ  Û  s%   € à(Ð(Ð(Ð(Ð(Ð(à€HˆT�N„N€N€N€Nr   c                 ó(   — ddl m}  || ¦  «         dS )z!Debug tools (share report, etc.).r   )Ú	run_debugN)Úhermes_cli.debugr  )r   r  s     r   Ú	cmd_debugr  â  s%   € à*Ð*Ð*Ð*Ð*Ð*à€Iˆd�O„O€O€O€Or   c                 ó(   — ddl m}  || ¦  «         dS )zConfiguration management.r   )Úconfig_commandN)r„   r  )r   r  s     r   Ú
cmd_configr  é  s*   € à0Ð0Ð0Ð0Ð0Ð0à€N�4ÑÔÐÐÐr   c                 óp   — t          | dd¦  «        rddlm}  || ¦  «         dS ddlm}  || ¦  «         dS )z,Back up Hermes home directory to a zip file.ÚquickFr   )Úrun_quick_backup)Ú
run_backupN)r  Úhermes_cli.backupr	  r
  )r   r	  r
  s      r   Ú
cmd_backupr  ð  sg   € åˆt�W˜eÑ$Ô$ð Ø6Ð6Ð6Ð6Ð6Ð6àÐ˜ÑÔÐÐÐà0Ð0Ð0Ð0Ð0Ð0àˆ
�4ÑÔÐÐÐr   c                 ó(   — ddl m}  || ¦  «         dS )z(Restore a Hermes backup from a zip file.r   )Ú
run_importN)r  r  )r   r  s     r   Ú
cmd_importr  ü  rû  r   c           	      ó<  — t          dt          › dt          › d�¦  «         t          dt          › �¦  «         t          dt          j                             ¦   «         d         › �¦  «         	 ddl}t          d|j        › �¦  «         n# t          $ r t          d	¦  «         Y nw xY w	 dd
l	m
} ddlm}  |¦   «         }|r3|dk    r-|dk    rdnd}t          d|› d|› d |¦   «         › d�¦  «         dS |dk    rt          d¦  «         dS dS # t          $ r Y dS w xY w)zShow version.zHermes Agent vrˆ  rÖ   z	Project: zPython: r   NzOpenAI SDK: zOpenAI SDK: Not installed)Úcheck_for_updates©Úrecommended_update_commandr   ÚcommitÚcommitszUpdate available: r¼   u    behind â€” run 'ú'z
Up to date)r   rY   rZ   r°  r   Úversionr-   Úopenair   r  r  r„   r  r7   )r   r  r  r  ÚbehindÚcommits_words         r   Úcmd_versionr    s·  € å	Ð
=�;Ð
=Ð
=Õ*:Ð
=Ð
=Ð
=Ñ>Ô>Ð>Ý	Ð
$•lÐ
$Ð
$Ñ%Ô%Ð%õ 
Ð
-•S”[×&Ò&Ñ(Ô(¨Ô+Ð
-Ð
-Ñ.Ô.Ð.ð+ØˆˆˆåÐ1˜VÔ/Ð1Ð1Ñ2Ô2Ð2Ð2øÝð +ð +ð +ÝÐ)Ñ*Ô*Ð*Ð*Ð*ð+øøøðØ7Ð7Ð7Ð7Ð7Ð7Ø@Ð@Ð@Ð@Ð@Ð@à"Ð"Ñ$Ô$ˆØð 	 �f˜q’j�jØ'-°¢{ {˜8˜8¸	ˆLÝð8 Vð 8ð 8¨lð 8ð 8Ø2Ð2Ñ4Ô4ð8ð 8ð 8ñô ð ð ð ð �qŠ[ˆ[Ý�,ÑÔÐÐÐð ˆ[øåð ð ð Øˆˆðøøøs+   Á-B	 Â	B%Â$B%Â)A	D Ã4D Ä
DÄDc                 óF   — t          d¦  «         ddlm}  || ¦  «         dS )zUninstall Hermes Agent.Ú	uninstallr   )Úrun_uninstallN)r   Úhermes_cli.uninstallr  )r   r  s     r   Úcmd_uninstallr   %  s8   € å�ÑÔÐØ2Ð2Ð2Ð2Ð2Ð2à€M�$ÑÔÐÐÐr   c                 ó&  — d}t          j        | ¦  «        D ]y\  }}}d„ |D ¦   «         |dd…<   t           j                             |¦  «        dk    r?	 t	          j        |¦  «         |dz  }n# t          $ r Y nw xY w|                     ¦   «          Œz|S )a~  Remove all __pycache__ directories under *root*.

    Stale .pyc files can cause ImportError after code updates when Python
    loads a cached bytecode file that references names that no longer exist
    (or don't yet exist) in the updated source.  Clearing them forces Python
    to recompile from the .py source on next import.

    Returns the number of directories removed.
    r   c                 ó   — g | ]}|d v¯|‘Œ	S ))Úvenvz.venvru  ú.gitz
.worktreesrÜ   )ry   rŒ  s     r   rß   z)_clear_bytecode_cache.<locals>.<listcomp>:  s.   € ð 
ð 
ð 
àØÐOÐOÐOð àOÐOÐOr   NÚ__pycache__r   )r8   r’  r”  ÚbasenamerK  rE  r3   rì   )rs  r  r˜  r™  rŸ   s        r   Ú_clear_bytecode_cacher'  -  sÀ   € ð €GÝ "¤¨¡¤ð ð Ñˆ�˜1ð
ð 
àð
ñ 
ô 
ˆ���‰õ
 Œ7×Ò˜GÑ$Ô$¨Ò5Ð5ðÝ”˜gÑ&Ô&Ð&Ø˜1‘��øÝð ð ð Ø�ðøøøà�NŠNÑÔÐøØ€Ns   ÁA,Á,
A9Á8A9ç     Àr@Úprompt_textr   r4  c                 óº  — ddl }ddl}ddlm}  |¦   «         }|dz  }|dz  }|                     d¬¦  «         | |t          |                     ¦   «         ¦  «        dœ}	|                     d	¦  «        }
|
                     | 	                    |	¦  «        ¦  «         |
 
                    |¦  «         t          j        ¦   «         |z   }t          j        ¦   «         |k     r¯|                     ¦   «         rp	 |                     ¦   «                              ¦   «         }|                     d¬¦  «         |                     d¬¦  «         |r|n|S # t           t"          f$ r Y nw xY wt          j        d
¦  «         t          j        ¦   «         |k     °¯|                     d¬¦  «         |                     d¬¦  «         t'          dt)          |¦  «        › d|›d�¦  «         |S )aw  File-based IPC prompt for gateway mode.

    Writes a prompt marker file so the gateway can forward the question to the
    user, then polls for a response file.  Falls back to *default* on timeout.

    Used by ``hermes update --gateway`` so interactive prompts (stash restore,
    config migration) are forwarded to the messenger instead of being silently
    skipped.
    r   NrD   z.update_prompt.jsonz.update_responseT)Ú
missing_ok)Úpromptr   r´   z.tmpç      à?z  (no response after zs, using default: rÖ   )r’   Úuuidr.   rE   Úunlinkr‰   Úuuid4Úwith_suffixÚ
write_textÚdumpsrB  ra   Ú	monotonicr/   r0   r1   r3   r5   Úsleepr   rc   )r)  r   r4  Ú_jsonÚ_uuidrE   r±  Úprompt_pathÚresponse_pathÚpayloadÚtmpÚdeadlineÚanswers                r   Ú_gateway_promptr>  I  s  € ð ÐÐÐØÐÐÐØ0Ð0Ð0Ð0Ð0Ð0àˆ?ÑÔ€DØÐ.Ñ.€KØÐ-Ñ-€Mð ×Ò DÐÑ)Ô)Ð)ð ØÝ�%—+’+‘-”-Ñ Ô ðð €Gð
 ×
!Ò
! &Ñ
)Ô
)€CØ‡N‚N�5—;’;˜wÑ'Ô'Ñ(Ô(Ð(Ø‡K‚K�ÑÔÐõ ŒÑ Ô  7Ñ*€HÝ
Œ/Ñ
Ô
˜hÒ
&Ð
&Ø×ÒÑ!Ô!ð 	ðØ&×0Ò0Ñ2Ô2×8Ò8Ñ:Ô:�Ø×$Ò$°Ð$Ñ5Ô5Ð5Ø×"Ò"¨dÐ"Ñ3Ô3Ð3Ø!'Ð4�v�v¨WÐ4øÝ�ZÐ(ð ð ð Ø�ðøøøåŒ�CÑÔÐõ Œ/Ñ
Ô
˜hÒ
&Ð
&ð ×Ò $ÐÑ'Ô'Ð'Ø×Ò DÐÑ)Ô)Ð)Ý	Ð
N¥# g¡,¤,Ð
NÐ
NÀ'Ð
NÐ
NÐ
NÑOÔOÐOØ€Ns   Ã2AE
 Å
EÅE©ÚfatalÚweb_dirr@  c                ó>  — | dz                        ¦   «         sdS t          j        d¦  «        }|s#|rt          d¦  «         t          d¦  «         | S t          d¦  «         t	          j        |ddg| d¬	¦  «        }|j        d
k    r1t          d|rdnd› d�|rdndz   ¦  «         |rt          d¦  «         dS t	          j        |ddg| d¬	¦  «        }|j        d
k    r1t          d|rdnd› d�|rdndz   ¦  «         |rt          d¦  «         dS t          d¦  «         dS )aM  Build the web UI frontend if npm is available.

    Args:
        web_dir: Path to the ``web/`` source directory.
        fatal: If True, print error guidance and return False on failure
               instead of a soft warning (used by ``hermes web``).

    Returns True if the build succeeded or was skipped (no package.json).
    rw  Tr§  z3Web UI frontend not built and npm is not available.zBInstall Node.js, then run:  cd web && npm install && npm run buildu   â†’ Building web UI...rË  rÌ  ©rÒ  r2  r   r¹   u   âœ—u   âš z Web UI npm install failedrn   z# (hermes web will not be available)z7  Run manually:  cd web && npm install && npm run buildFr6  rÕ  z Web UI build failedu     âœ“ Web UI built)r/   rK  rL  r   r5  r6  rM  )rA  r@  r§  Úr1Úr2s        r   Ú_build_web_uirF  {  s–  € ð �nÑ$×,Ò,Ñ.Ô.ð Øˆtå
Œ,�uÑ
Ô
€CØð Øð 	XÝÐGÑHÔHÐHÝÐVÑWÔWÐWØˆyÐÝ	Ð
"Ñ#Ô#Ð#Ý	Œ˜˜i¨Ð4¸'ÐRVÐ	WÑ	WÔ	W€BØ	„}˜ÒÐÝØF˜%Ð*�� UÐFÐFÐFØÐEˆrˆrÐ EñGñ	
ô 	
ð 	
ð ð 	MÝÐKÑLÔLÐLØˆuÝ	Œ˜˜e WÐ-°7È4Ð	PÑ	PÔ	P€BØ	„}˜ÒÐÝØ@˜%Ð*�� UÐ@Ð@Ð@ØÐEˆrˆrÐ EñGñ	
ô 	
ð 	
ð ð 	MÝÐKÑLÔLÐLØˆuÝ	Ð
ÑÔÐØˆ4r   c           	      ó„  — ddl }ddl}ddlm} d}d|› d�}t	          d¦  «         	 |                     d¬	¦  «        }t          j                             |d
|› d�¦  «        } |||¦  «         t	          d¦  «         | 	                    |d¦  «        5 }t          j         
                    |¦  «        }	|                     ¦   «         D ]„}
t          j         
                    t          j                             ||
j        ¦  «        ¦  «        }|                     |	t          j        z   ¦  «        s||	k    rt          d|
j        › d�¦  «        ‚Œ…|                     |¦  «         ddd¦  «         n# 1 swxY w Y   t          j                             |d
|› �¦  «        }t          j                             |¦  «        s`t          j        |¦  «        D ]K}t          j                             ||¦  «        }t          j                             |¦  «        r
|dk    r|} nŒLh d£}d}t          j        |¦  «        D ]Û}||v rŒt          j                             ||¦  «        }t          j                             t'          t(          ¦  «        |¦  «        }t          j                             |¦  «        rIt          j                             |¦  «        rt-          j        |¦  «         t-          j        ||¦  «         nt-          j        ||¦  «         |dz  }ŒÜt	          d|› d�¦  «         t-          j        |d¬¦  «         n=# t4          $ r0}t	          d|› �¦  «         t7          j        d¦  «         Y d}~nd}~ww xY wt;          t(          ¦  «        }|rt	          d|› d|dk    rdnd› �¦  «         t	          d¦  «         t-          j        d¦  «        }|r;i t          j        ¥dt'          t(          dz  ¦  «        i¥}tA          |dg|¬ ¦  «         n�t6          j!        d!dg}	 tE          j#        |d"gz   t(          dd¬#¦  «         n@# tD          j$        $ r. tE          j#        t6          j!        d!d$d%d&gt(          d¬'¦  «         Y nw xY wtA          |¦  «         tK          ¦   «          tM          t(          d(z  ¦  «         	 dd)l'm(} t	          d*¦  «          |d¬+¦  «        }|d,         rAt	          d-tS          |d,         ¦  «        › d.d/                     |d,         ¦  «        › �¦  «         | *                    d0¦  «        rAt	          d1tS          |d0         ¦  «        › d2d/                     |d0         ¦  «        › �¦  «         | *                    d3¦  «        r&t	          d4tS          |d3         ¦  «        › d5�¦  «         | *                    d6¦  «        r&t	          d7tS          |d6         ¦  «        › d8�¦  «         |d,         s$| *                    d0¦  «        st	          d9¦  «         n# t4          $ r Y nw xY wt	          ¦   «          t	          d:¦  «         dS );zÀUpdate Hermes Agent by downloading a ZIP archive.

    Used on Windows when git file I/O is broken (antivirus, NTFS filter
    drivers causing 'Invalid argument' errors on file creation).
    r   N)Úurlretriever  z@https://github.com/NousResearch/hermes-agent/archive/refs/heads/z.zipu!   â†’ Downloading latest version...zhermes-update-)Úprefixzhermes-agent-u   â†’ Extracting...ÚrzZip-slip detected: z escapes extraction directoryÚ__MACOSX>   r#  ru  rG   r$  r   u   âœ“ Updated z items from ZIPTr?  u   âœ— ZIP update failed: õ     âœ“ Cleared ú stale __pycache__ directorr  Úiesõ#   â†’ Updating Python dependencies...ÚuvÚVIRTUAL_ENVr#  Úpip©r„  ú-mú	--version©rÒ  r­  r2  Ú	ensurepipú	--upgradeú--default-pip©rÒ  r­  Úwebr  õ   â†’ Syncing bundled skills...r  Úcopiedú  + ú new: ú, Úupdatedõ     â†‘ ú
 updated: Úuser_modifiedú  ~ ú user-modified (kept)Úcleanedõ     âˆ’ ú removed from manifestõ     âœ“ Skills are up to dateõ   âœ“ Update complete!)+ÚtempfileÚzipfileÚurllib.requestrH  r   Úmkdtempr8   r”  rN  ÚZipFileÚrealpathÚinfolistÚfilenamer,   Úsepr5   Ú
extractallÚisdirÚlistdirr‰   r°  r/   rK  rE  ÚcopytreeÚcopy2r7   r   r   r'  rL  r9   Ú3_install_python_dependencies_with_optional_fallbackrð  r5  r6  ÚCalledProcessErrorÚ_update_node_dependenciesrF  r  r  r+   r†   )r   rl  rm  rH  ÚbranchÚzip_urlÚtmp_dirÚzip_pathÚzfÚtmp_dir_realÚmemberÚmember_pathÚ	extractedrŒ  Ú	candidateÚpreserveÚupdate_countr@  r   Údstr)  r  Úuv_binÚuv_envÚpip_cmdr  r»  s                              r   Ú_update_via_zipr�  ¥  sò  € ð €O€O€OØ€N€N€NØ*Ð*Ð*Ð*Ð*Ð*à€FàWÈ6ÐWÐWÐWð õ 
Ð
-Ñ.Ô.Ð.ð5Ø×"Ò"Ð*:Ð"Ñ;Ô;ˆÝ”7—<’< Ð)E¸Ð)EÐ)EÐ)EÑFÔFˆØˆ�G˜XÑ&Ô&Ð&åÐ!Ñ"Ô"Ð"Ø�_Š_˜X sÑ+Ô+ð 	#¨råœ7×+Ò+¨GÑ4Ô4ˆLØŸ+š+™-œ-ð ð �Ý œg×.Ò.­r¬w¯|ª|¸GÀVÄ_Ñ/UÔ/UÑVÔV�à#×.Ò.¨|½b¼fÑ/DÑEÔEðà# |Ò3Ð3å$Ø\¨f¬oÐ\Ð\Ð\ñô ð øð �MŠM˜'Ñ"Ô"Ð"ð	#ð 	#ð 	#ñ 	#ô 	#ð 	#ð 	#ð 	#ð 	#ð 	#ð 	#øøøð 	#ð 	#ð 	#ð 	#õ ”G—L’L Ð*B¸&Ð*BÐ*BÑCÔCˆ	ÝŒw�}Š}˜YÑ'Ô'ð 	å”Z Ñ(Ô(ð ð �ÝœGŸLšL¨°!Ñ4Ô4�	Ý”7—=’= Ñ+Ô+ð °°Z²°Ø )�IØ�Eøð <Ð;Ð;ˆØˆÝ”J˜yÑ)Ô)ð 	ð 	ˆDØ�xÐÐØÝ”'—,’,˜y¨$Ñ/Ô/ˆCÝ”'—,’,�s¥<Ñ0Ô0°$Ñ7Ô7ˆCÝŒw�}Š}˜SÑ!Ô!ð 'Ý”7—>’> #Ñ&Ô&ð 'Ý”M #Ñ&Ô&Ð&Ý”  SÑ)Ô)Ð)Ð)å”˜S #Ñ&Ô&Ð&Ø˜AÑˆLˆLåÐ:˜\Ð:Ð:Ð:Ñ;Ô;Ð;õ 	Œ�g¨TÐ2Ñ2Ô2Ð2Ð2øåð ð ð ÝÐ+¨Ð+Ð+Ñ,Ô,Ð,ÝŒ�‰Œˆˆˆˆˆˆøøøøðøøøõ
 $¥LÑ1Ô1€GØð 
ÝØa˜WÐaÐaÈÐSTÊÈÀÀÐZ_ÐaÐañ	
ô 	
ð 	
õ 
Ð
/Ñ0Ô0Ð0åŒ\˜$ÑÔ€FØð EØJ•B”JÐJ ­sµ<À&Ñ3HÑ/IÔ/IÐJÐJˆÝ;¸VÀU¸OÐQWÐXÑXÔXÐXÐXõ ”> 4¨Ð/ˆð	ÝŒNØ˜;˜-Ñ'Ý ØØ#ð	ñ ô ð ð øõ Ô,ð 	ð 	ð 	ÝŒNÝ”  {°KÀÐQÝ Øðñ ô ð ð ð ð	øøøõ 	<¸GÑDÔDÐDåÑÔÐÝ•, Ñ&Ñ'Ô'Ð'ðØ1Ð1Ð1Ð1Ð1Ð1åÐ-Ñ.Ô.Ð.Ø� 4Ð(Ñ(Ô(ˆØ�(Ôð 	UÝÐS�˜V HÔ-Ñ.Ô.ÐSÐS°d·i²iÀÀxÔ@PÑ6QÔ6QÐSÐSÑTÔTÐTØ�:Š:�iÑ Ô ð 	ÝØY�˜V IÔ.Ñ/Ô/ÐYÐY¸4¿9º9ÀVÈIÔEVÑ;WÔ;WÐYÐYñô ð ð �:Š:�oÑ&Ô&ð 	NÝÐL�˜V OÔ4Ñ5Ô5ÐLÐLÐLÑMÔMÐMØ�:Š:�iÑ Ô ð 	KÝÐI�3˜v iÔ0Ñ1Ô1ÐIÐIÐIÑJÔJÐJØ�hÔð 	1¨¯
ª
°9Ñ(=Ô(=ð 	1ÝÐ/Ñ0Ô0Ð0øøÝð ð ð Øˆðøøøõ 
�G„G€GÝ	Ð
 Ñ!Ô!Ð!Ð!Ð!sc   §A+L9 ÂCE,Å L9 Å,E0Å0L9 Å3E0Å4GL9 Ì9
M3Í&M.Í.M3Ð!P; Ð;:Q8Ñ7Q8Ò0E"X Ø
X ØX Úgit_cmdrÒ  c                 ó^  — t          j        | ddgz   |ddd¬¦  «        }|j                             ¦   «         sd S t          j        | ddgz   |dd¬¦  «        }|j                             ¦   «         r*t	          d¦  «         t          j        | d	gz   |d¬
¦  «         ddlm}m}  |j        |j        ¦  «         	                    d¦  «        }t	          d¦  «         t          j        | dddd|gz   |d¬¦  «         t          j        | g d¢z   |ddd¬¦  «        j                             ¦   «         }|S )Nr¢   z--porcelainT©rÒ  r2  r3  r­  zls-filesz
--unmergedrÖ  u?   â†’ Clearing unmerged index entries from a previous conflict...ÚresetrC  r   )rX   Útimezonez%hermes-update-autostash-%Y%m%d-%H%M%Su8   â†’ Local changes detected â€” stashing before update...ÚstashÚpushz--include-untrackedrT  rZ  )ú	rev-parsez--verifyz
refs/stash)
r5  r6  r´  r1   r   rX   r’  ÚnowÚutcre   )rŽ  rÒ  r¢   ÚunmergedrX   r’  Ú
stash_nameÚ	stash_refs           r   Ú_stash_local_changes_if_neededr›  -  s�  € ÝŒ^Ø�8˜]Ð+Ñ+ØØØØðñ ô €Fð Œ=×ÒÑ Ô ð Øˆtõ Œ~Ø�:˜|Ð,Ñ,ØØØð	ñ ô €Hð „×ÒÑÔð JÝÐOÑPÔPÐPÝŒ�w ' Ñ*°ÀDÐIÑIÔIÐIà+Ð+Ð+Ð+Ð+Ð+Ð+Ð+à�”˜hœlÑ+Ô+×4Ò4Ø/ñô €Jõ 
Ð
DÑEÔEÐEÝ„NØ�7˜FÐ$9¸4ÀÐLÑLØØðñ ô ð õ
 ”ØÐ9Ð9Ð9Ñ9ØØØØðñ ô ô �UŠU‰WŒWð ð Ðr   rš  c                 ó  — t          j        | g d¢z   |ddd¬¦  «        }|j                             ¦   «         D ]I}|                     d¦  «        \  }}}|                     ¦   «         |k    r|                     ¦   «         c S ŒJd S )N)r“  rë   z--format=%gd %HTr�  r¼   )r5  r6  r´  r�   r�   r1   )rŽ  rÒ  rš  Ú
stash_listr�   ÚselectorrŸ   r  s           r   Ú_resolve_stash_selectorrŸ  [  s    € õ ”ØÐ6Ð6Ð6Ñ6ØØØØðñ ô €Jð Ô!×,Ò,Ñ.Ô.ð $ð $ˆØ"Ÿnšn¨SÑ1Ô1Ñˆ�!�VØ�<Š<‰>Œ>˜YÒ&Ð&Ø—>’>Ñ#Ô#Ð#Ð#Ð#ð 'àˆ4r   Ústash_selectorc                 ó”   — t          d¦  «         t          d¦  «         |rt          d|› �¦  «         d S t          d| › d�¦  «         d S )NzS  Check `git status` first so you don't accidentally reapply the same change twice.z@  Find the saved entry with: git stash list --format='%gd %H %s'z!  Remove it with: git stash drop z  Look for commit z7, then drop its selector with: git stash drop stash@{N})r   )rš  r   s     r   Ú_print_stash_cleanup_guidancer¢  l  sy   € õ 
Ø]ñô ð õ 
Ð
LÑMÔMÐMØð 
ÝÐB°.ÐBÐBÑCÔCÐCÐCÐCåØe ÐeÐeÐeñ	
ô 	
ð 	
ð 	
ð 	
r   Úprompt_userc                 óp  — |rÁt          ¦   «          t          d¦  «         t          d¦  «         t          d¦  «         t          d¦  «         |� |dd¦  «        }n2t          ¦   «                              ¦   «                              ¦   «         }|dvr2t          d¦  «         t          d¦  «         t          d	|› �¦  «         d
S t          d¦  «         t	          j        | dd|gz   |dd¬¦  «        }t	          j        | g d¢z   |dd¬¦  «        }t          |j                             ¦   «         ¦  «        }|j        dk    s|�r@t          d¦  «         |j                             ¦   «         r&t          |j                             ¦   «         ¦  «         |j	                             ¦   «         r&t          |j	                             ¦   «         ¦  «         |j                             ¦   «         }	|	r8t          d¦  «         |	 
                    ¦   «         D ]}
t          d|
› �¦  «         Œt          d¦  «         t          d|› �¦  «         t	          j        | g d¢z   |d¬¦  «         t          d¦  «         t          d|› �¦  «         d
S t          | ||¦  «        }|€.t          d¦  «         t          d¦  «         t          |¦  «         nÕt	          j        | dd|gz   |dd¬¦  «        }|j        dk    r¬t          d¦  «         |j                             ¦   «         r&t          |j                             ¦   «         ¦  «         |j	                             ¦   «         r&t          |j	                             ¦   «         ¦  «         t          d¦  «         t          ||¦  «         t          d¦  «         t          d ¦  «         dS )!Nu/   âš  Local changes were stashed before updating.zL  Restoring them may reapply local customizations onto the updated codebase.z=  Review the result afterward if Hermes behaves unexpectedly.z Restore local changes now? [Y/n]r  r   z Skipped restoring local changes.z.Your changes are still preserved in git stash.z'Restore manually with: git stash apply Fu   â†’ Restoring local changes...r“  ÚapplyTrÖ  )Údiffz--name-onlyz--diff-filter=Ur   uF   âœ— Update pulled new code, but restoring local changes hit conflicts.z
Conflicted files:u     â€¢ u8   
Your stashed changes are preserved â€” nothing is lost.z  Stash ref: )r‘  ú--hardÚHEADrC  z"Working tree reset to clean state.z1Restore your changes later with: git stash apply uR   âš  Local changes were restored, but Hermes couldn't find the stash entry to drop.zT  The stash was left in place. You can remove it manually after checking the result.ÚdropuP   âš  Local changes were restored, but Hermes couldn't drop the saved stash entry.u?   âš  Local changes were restored on top of the updated codebase.zB  Review `git diff` / `git status` if Hermes behaves unexpectedly.)r   r  r1   rÅ   r5  r6  r°  r´  rM  r   r�   rŸ  r¢  )rŽ  rÒ  rš  r£  Úinput_fnrL  Úrestorer˜  Úhas_conflictsÚconflicted_filesÚfr   r©  s                r   Ú_restore_stashed_changesr¯  {  s"  € ð ð Ý‰ŒˆÝÐ?Ñ@Ô@Ð@ÝØZñ	
ô 	
ð 	
õ 	ÐMÑNÔNÐNÝÐ0Ñ1Ô1Ð1ØÐØ�xÐ BÀCÑHÔHˆHˆHå‘w”w—}’}‘”×,Ò,Ñ.Ô.ˆHØÐ+Ð+Ð+ÝÐ4Ñ5Ô5Ð5ÝÐBÑCÔCÐCÝÐG¸IÐGÐGÑHÔHÐHØ�5å	Ð
*Ñ+Ô+Ð+ÝŒnØ�7˜G YÐ/Ñ/ØØØð	ñ ô €Gõ Œ~ØÐ<Ð<Ð<Ñ<ØØØð	ñ ô €Hõ ˜œ×.Ò.Ñ0Ô0Ñ1Ô1€MàÔ˜QÒÐ -ÑÝÐVÑWÔWÐWØŒ>×ÒÑ!Ô!ð 	*Ý�'”.×&Ò&Ñ(Ô(Ñ)Ô)Ð)ØŒ>×ÒÑ!Ô!ð 	*Ý�'”.×&Ò&Ñ(Ô(Ñ)Ô)Ð)ð $œ?×0Ò0Ñ2Ô2ÐØð 	$ÝÐ'Ñ(Ô(Ð(Ø%×0Ò0Ñ2Ô2ð $ð $�Ý�l˜q�l�lÑ#Ô#Ð#Ð#åÐIÑJÔJÐJÝÐ)˜iÐ)Ð)Ñ*Ô*Ð*õ
 	ŒØÐ1Ð1Ð1Ñ1ØØð	
ñ 	
ô 	
ð 	
õ
 	Ð2Ñ3Ô3Ð3ÝÐMÀ)ÐMÐMÑNÔNÐNð ˆuå,¨W°c¸9ÑEÔE€NØÐÝØ`ñ	
ô 	
ð 	
õ 	Øbñ	
ô 	
ð 	
õ 	& iÑ0Ô0Ð0Ð0åŒ~Ø�w ¨Ð7Ñ7ØØØð	
ñ 
ô 
ˆð Œ?˜aÒÐÝØbñô ð ð Œ{× Ò Ñ"Ô"ð +Ý�d”k×'Ò'Ñ)Ô)Ñ*Ô*Ð*ØŒ{× Ò Ñ"Ô"ð +Ý�d”k×'Ò'Ñ)Ô)Ñ*Ô*Ð*ÝØfñô ð õ *¨)°^ÑDÔDÐDå	Ð
KÑLÔLÐLÝ	Ð
NÑOÔOÐOØˆ4r   >   ú(git@github.com:NousResearch/hermes-agentú,git@github.com:NousResearch/hermes-agent.gitú,https://github.com/NousResearch/hermes-agentú0https://github.com/NousResearch/hermes-agent.gitr³  z.skip_upstream_promptc                 ó¬   — 	 t          j        | g d¢z   |dd¬¦  «        }|j        dk    r|j                             ¦   «         S n# t
          $ r Y nw xY wdS )z5Get the URL of the origin remote, or None if not set.)Úremoteúget-urlÚoriginTrÖ  r   N)r5  r6  rM  r´  r1   r7   ©rŽ  rÒ  r»  s      r   Ú_get_origin_urlr¹  õ  sƒ   € ð
Ý”ØÐ5Ð5Ð5Ñ5ØØØð	
ñ 
ô 
ˆð Ô Ò!Ð!Ø”=×&Ò&Ñ(Ô(Ð(ð "øåð ð ð Øˆðøøøàˆ4s   ‚A A Á
AÁAÚ
origin_urlc                 ó  — | sdS |                       d¦  «        }|                     d¦  «        r
|dd…         }t          D ]?}|                      d¦  «        }|                     d¦  «        r
|dd…         }||k    r dS Œ@dS )zDCheck if the origin remote points to a fork (not the official repo).FrÔ   r$  NéüÿÿÿT)r¯  r“  ÚOFFICIAL_REPO_URLS)rº  ro  ÚofficialÚofficial_normalizeds       r   Ú_is_forkrÀ    s¨   € àð Øˆuà×"Ò" 3Ñ'Ô'€JØ×Ò˜6Ñ"Ô"ð %Ø   ”_ˆ
Ý&ð ð ˆØ&Ÿošo¨cÑ2Ô2ÐØ×'Ò'¨Ñ/Ô/ð 	;Ø"5°c°r°cÔ":ÐØÐ,Ò,Ð,Ø�5�5ð -àˆ4r   c                 óv   — 	 t          j        | g d¢z   |dd¬¦  «        }|j        dk    S # t          $ r Y dS w xY w)z-Check if an 'upstream' remote already exists.)rµ  r¶  ÚupstreamTrÖ  r   F©r5  r6  rM  r7   r¸  s      r   Ú_has_upstream_remoterÄ    sg   € ð	Ý”ØÐ7Ð7Ð7Ñ7ØØØð	
ñ 
ô 
ˆð Ô  AÒ%Ð%øÝð ð ð Øˆuˆuðøøøó   ‚'* ª
8·8c                 ó„   — 	 t          j        | dddt          gz   |dd¬¦  «        }|j        dk    S # t          $ r Y dS w xY w)zHAdd the official repo as the 'upstream' remote. Returns True on success.rµ  r¡  rÂ  TrÖ  r   F)r5  r6  ÚOFFICIAL_REPO_URLrM  r7   r¸  s      r   Ú_add_upstream_remoterÈ  $  sj   € ð	Ý”Ø�x ¨
Õ4EÐFÑFØØØð	
ñ 
ô 
ˆð Ô  AÒ%Ð%øÝð ð ð Øˆuˆuðøøøs   ‚.1 ±
?¾?r©  Úheadc                 óÒ   — 	 t          j        | dd|› d|› �gz   |dd¬¦  «        }|j        dk    r&t          |j                             ¦   «         ¦  «        S n# t          $ r Y nw xY wdS )zDCount commits on `head` that are not on `base`. Returns -1 on error.úrev-listú--countz..TrÖ  r   rÊ   )r5  r6  rM  rc   r´  r1   r7   )rŽ  rÒ  r©  rÉ  r»  s        r   Ú_count_commits_betweenrÍ  2  s™   € ð
Ý”Ø�z 9°Ð.?Ð.?¸Ð.?Ð.?Ð@Ñ@ØØØð	
ñ 
ô 
ˆð Ô Ò!Ð!Ý�v”}×*Ò*Ñ,Ô,Ñ-Ô-Ð-ð "øåð ð ð Øˆðøøøàˆ2s   ‚AA Á
A$Á#A$c                  óV   — ddl m}   | ¦   «         t          z                       ¦   «         S )z2Check if user previously declined to add upstream.r   rD   )r.   rE   ÚSKIP_UPSTREAM_PROMPT_FILEr/   rD   s    r   Ú_should_skip_upstream_promptrÐ  B  s4   € à0Ð0Ð0Ð0Ð0Ð0àˆOÑÔÕ 9Ñ9×AÒAÑCÔCÐCr   c                  ó~   — 	 ddl m}   | ¦   «         t          z                       ¦   «          dS # t          $ r Y dS w xY w)z3Create marker file to skip future upstream prompts.r   rD   N)r.   rE   rÏ  Útouchr7   rD   s    r   Ú_mark_skip_upstream_promptrÓ  I  sa   € ðØ4Ð4Ð4Ð4Ð4Ð4à	ˆÑ	Ô	Õ6Ñ	6×=Ò=Ñ?Ô?Ð?Ð?Ð?øÝð ð ð Øˆˆðøøøs   ‚*. ®
<»<c                 óv   — 	 t          j        | g d¢z   |dd¬¦  «        }|j        dk    S # t          $ r Y dS w xY w)znAttempt to push updated main to origin (sync fork).

    Returns True if push succeeded, False otherwise.
    )r”  r·  r  z--force-with-leaseTrÖ  r   FrÃ  r¸  s      r   Ú_sync_fork_with_upstreamrÕ  S  sg   € ð
	Ý”ØÐFÐFÐFÑFØØØð	
ñ 
ô 
ˆð Ô  AÒ%Ð%øÝð ð ð ØˆuˆuðøøørÅ  c                 ó   — t          | |¦  «        }|�st          ¦   «         rdS t          ¦   «          t          d¦  «         t          d¦  «         t          ¦   «          	 t          d¦  «                             ¦   «                              ¦   «         }n'# t          t          f$ r t          ¦   «          d}Y nw xY w|dv rBt          d¦  «         t          | |¦  «        rt          d¦  «         d	}n0t          d
¦  «         dS t          d¦  «         t          ¦   «          dS t          ¦   «          t          d¦  «         	 t          j        | g d¢z   |d	d	¬¦  «         n%# t          j        $ r t          d¦  «         Y dS w xY wt          | |dd¦  «        }t          | |dd¦  «        }|dk     s|dk     rt          d¦  «         dS |dk    rPt          ¦   «          t          d|› d�¦  «         t          d¦  «         t          d¦  «         t          d¦  «         dS |dk    rt          d¦  «         dS t          ¦   «          t          d|› d�¦  «         t          d¦  «         	 t          j        | g d¢z   |d	¬¦  «         n%# t          j        $ r t          d¦  «         Y dS w xY wt          d ¦  «         t          d!¦  «         t          | |¦  «        rt          d"¦  «         dS t          d#¦  «         t          d$¦  «         dS )%a[  Check if fork is behind upstream and sync if safe.

    This implements the fork upstream sync logic:
    - If upstream remote doesn't exist, ask user if they want to add it
    - Compare origin/main with upstream/main
    - If origin/main is strictly behind upstream/main, pull from upstream
    - Try to sync fork back to origin if possible
    Nu=   â„¹ Your fork is not tracking the official Hermes repository.zA  This means you may miss updates from NousResearch/hermes-agent.z/Add official repo as 'upstream' remote? [Y/n]: rÿ  r   u   â†’ Adding upstream remote...uF     âœ“ Added upstream: https://github.com/NousResearch/hermes-agent.gitTu<     âœ— Failed to add upstream remote. Skipping upstream sync.zg  Skipped. Run 'git remote add upstream https://github.com/NousResearch/hermes-agent.git' to add later.u   â†’ Fetching upstream...)ÚfetchrÂ  ú--quiet)rÒ  r2  r­  u7     âœ— Failed to fetch upstream. Skipping upstream sync.zupstream/mainzorigin/mainr   u9     âœ— Could not compare branches. Skipping upstream sync.u   â„¹ Your fork has z commit(s) not on upstream.z2  Skipping upstream sync to preserve your changes.z-  If you want to merge upstream changes, run:z    git pull upstream mainu&     âœ“ Fork is up to date with upstreamu   â†’ Fork is z commit(s) behind upstreamu   â†’ Pulling from upstream...)Úpullú	--ff-onlyrÂ  r  rZ  uO     âœ— Failed to pull from upstream. You may need to resolve conflicts manually.u     âœ“ Updated from upstreamu   â†’ Syncing fork...u     âœ“ Fork synced with upstreamuL     â„¹ Got updates from upstream but couldn't push to fork (no write access?)zF    Your local repo is updated, but your fork on GitHub may be behind.)rÄ  rÐ  r   r  r1   rÅ   r  r  rÈ  rÓ  r5  r6  r{  rÍ  rÕ  )rŽ  rÒ  Úhas_upstreamrL  Úorigin_aheadÚupstream_aheads         r   Ú_sync_with_upstream_if_neededrÞ  d  sÔ  € õ (¨°Ñ5Ô5€Làñ !å'Ñ)Ô)ð 	ØˆFõ 	‰ŒˆÝÐMÑNÔNÐNÝÐQÑRÔRÐRÝ‰Œˆð	åÐGÑHÔH×NÒNÑPÔP×VÒVÑXÔXð ˆHøõ Õ+Ð,ð 	ð 	ð 	Ý‰GŒGˆGØˆHˆHˆHð	øøøð Ð'Ð'Ð'ÝÐ1Ñ2Ô2Ð2Ý# G¨SÑ1Ô1ð ÝØ\ñô ð ð  $��åÐTÑUÔUÐUØ�åØyñô ð õ 'Ñ(Ô(Ð(ØˆFõ 
�G„G€GÝ	Ð
$Ñ%Ô%Ð%ð	ÝŒØÐ6Ð6Ð6Ñ6ØØØð		
ñ 	
ô 	
ð 	
ð 	
øõ Ô(ð ð ð ÝÐGÑHÔHÐHØˆˆðøøøõ
 *¨'°3¸ÈÑWÔW€LÝ+Ø��m _ñô €Nð �aÒÐ˜>¨AÒ-Ð-ÝÐIÑJÔJÐJØˆð �aÒÐÝ‰ŒˆÝÐL <ÐLÐLÐLÑMÔMÐMÝÐBÑCÔCÐCÝÐ=Ñ>Ô>Ð>ÝÐ*Ñ+Ô+Ð+Øˆð ˜ÒÐÝÐ6Ñ7Ô7Ð7Øˆõ 
�G„G€GÝ	Ð
C˜Ð
CÐ
CÐ
CÑDÔDÐDÝ	Ð
(Ñ)Ô)Ð)ð
ÝŒØÐ?Ð?Ð?Ñ?ØØð	
ñ 	
ô 	
ð 	
ð 	
øõ
 Ô(ð ð ð ÝØ]ñ	
ô 	
ð 	
ð 	ˆˆð	øøøõ 
Ð
'Ñ(Ô(Ð(õ 
Ð
Ñ Ô Ð Ý ¨Ñ-Ô-ð XÝÐ/Ñ0Ô0Ð0Ð0Ð0åØZñ	
ô 	
ð 	
õ 	ÐVÑWÔWÐWÐWÐWs6   Á3B Â!B7Â6B7Ä=E ÅE=Å<E=ÉI< É<JÊJc                  óŒ  — g } ddl m}  |¦   «         }|                      |¦  «         |dz  }|                     ¦   «         r@|                     ¦   «         D ]+}|                     ¦   «         r|                      |¦  «         Œ,| D ]@}	 |dz  }|                     ¦   «         r|                     ¦   «          Œ1# t          $ r Y Œ=w xY wdS )u  Delete the update-check cache for ALL profiles so no banner
    reports a stale "commits behind" count after a successful update.

    The git repo is shared across profiles â€” when one profile runs
    ``hermes update``, every profile is now current.
    r   r#   Úprofilesz.update_checkN)r.   r$   rµ  r¸  Úiterdirr/   r/  r7   )Úhomesr$   Údefault_homeÚprofiles_rootr–  r±  Ú
cache_files          r   Ú_invalidate_update_cacheræ  Ö  s  € ð €Eà8Ð8Ð8Ð8Ð8Ð8à*Ð*Ñ,Ô,€LØ	‡L‚L�ÑÔÐà  :Ñ-€MØ×ÒÑÔð $Ø"×*Ò*Ñ,Ô,ð 	$ð 	$ˆEØ�|Š|‰~Œ~ð $Ø—’˜UÑ#Ô#Ð#øØð ð ˆð	Ø Ñ/ˆJØ× Ò Ñ"Ô"ð $Ø×!Ò!Ñ#Ô#Ð#øøÝð 	ð 	ð 	ØˆDð	øøøðð s   Â-B4Â4
CÃ Cc                  ó4  — 	 ddl } t          dz                       d¦  «        5 }|                      |¦  «                             di ¦  «        }ddd¦  «         n# 1 swxY w Y   n# t
          $ r g cY S w xY w|                     di ¦  «        }t          |t          ¦  «        sg S |                     dg ¦  «        }g }|D ]Y}d|v rSd	|v rO|                     dd
¦  «        d
                              d	d
¦  «        d         }||v r| 	                    |¦  «         ŒZ|S )u7  Return the optional extras referenced by the ``all`` group.

    Only extras that ``[all]`` actually pulls in are retried individually.
    Extras outside ``[all]`` (e.g. ``rl``, ``yc-bench``) are intentionally
    excluded â€” they have heavy or platform-specific deps that most users
    never installed.
    r   Nzpyproject.tomlÚrbÚprojectzoptional-dependenciesÚallú[ú]r   )
Útomllibr°  ÚopenÚloadr†   r7   r‡   rˆ   r-   rµ  )rí  Úhandleré  Úoptional_depsÚall_refsÚ
referencedÚrefr?   s           r   Ú!_load_installable_optional_extrasrõ  ò  s~  € ðØˆˆˆåÐ-Ñ-×3Ò3°DÑ9Ô9ð 	>¸VØ—l’l 6Ñ*Ô*×.Ò.¨y¸"Ñ=Ô=ˆGð	>ð 	>ð 	>ñ 	>ô 	>ð 	>ð 	>ð 	>ð 	>ð 	>ð 	>øøøð 	>ð 	>ð 	>ð 	>øøåð ð ð Øˆ	ˆ	ˆ	ðøøøð —K’KÐ 7¸Ñ<Ô<€MÝ�m¥TÑ*Ô*ð Øˆ	ð × Ò  ¨Ñ+Ô+€HØ€JØð (ð (ˆØ�#ˆ:ˆ:˜# ˜*˜*Ø—9’9˜S !Ñ$Ô$ QÔ'×-Ò-¨c°1Ñ5Ô5°aÔ8ˆDØ�}Ð$Ð$Ø×!Ò! $Ñ'Ô'Ð'øàÐs4   ‚!A% £*AÁA% ÁAÁA% Á AÁ!A% Á%A4Á3A4rS  Úinstall_cmd_prefixr„  c          	      óv  — 	 t          j        | g d¢z   t          d|¬¦  «         dS # t           j        $ r t	          d¦  «         Y nw xY wt          j        | g d¢z   t          d|¬¦  «         g }g }t          ¦   «         D ]j}	 t          j        | ddd	|› d
�dgz   t          d|¬¦  «         |                     |¦  «         ŒA# t           j        $ r |                     |¦  «         Y Œgw xY w|r%t	          dd                     |¦  «        › �¦  «         |r't	          dd                     |¦  «        › �¦  «         dS dS )zKInstall base deps plus as many optional extras as the environment supports.)rË  rI  z.[all]rØ  T)rÒ  r­  r„  Nu`     âš  Optional extras failed, reinstalling base dependencies and retrying extras individually...)rË  rI  r(  rØ  rË  rI  z.[rì  rØ  u0     âœ“ Reinstalled optional extras individually: r`  u1     âš  Skipped optional extras that still failed: )r5  r6  r°  r{  r   rõ  rµ  rN  )rö  r„  Úfailed_extrasÚinstalled_extrasr¿  s        r   rz  rz    sÝ  € ð
ÝŒØÐ!GÐ!GÐ!GÑGÝØØð		
ñ 	
ô 	
ð 	
ð 	ˆøÝÔ(ð 
ð 
ð 
ÝØnñ	
ô 	
ð 	
ð 	
ð 	
ð
øøøõ
 „NØÐ>Ð>Ð>Ñ>ÝØØð	ñ ô ð ð  "€MØ"$ÐÝ2Ñ4Ô4ð 
(ð 
(ˆð		(ÝŒNØ" i°°}¸E°}°}°}ÀiÐ%PÑPÝ ØØð	ñ ô ð ð ×#Ò# EÑ*Ô*Ð*Ð*øÝÔ,ð 	(ð 	(ð 	(Ø× Ò  Ñ'Ô'Ð'Ð'Ð'ð	(øøøð ð 
ÝØ\¸t¿yºyÐIYÑ?ZÔ?ZÐ\Ð\ñ	
ô 	
ð 	
ð ð 
ÝØZÀÇ	Â	È-Ñ@XÔ@XÐZÐZñ	
ô 	
ð 	
ð 	
ð 	
ð
ð 
s!   ‚"& ¦AÁAÂ=B?Â?$C&Ã%C&c            	      ó   — t          j        d¦  «        } | sd S dt          fdt          dz  ff}t          d„ |D ¦   «         ¦  «        sd S t	          d¦  «         |D ]³\  }}|dz                       ¦   «         sŒt          j        | ddd	d
dg|ddd¬¦  «        }|j        dk    rt	          d|› �¦  «         ŒZt	          d|› �¦  «         |j	        pd 
                    ¦   «         }|r*t	          d|                     ¦   «         d         › �¦  «         Œ´d S )Nr§  z	repo rootrà  c              3   óJ   K  — | ]\  }}|d z                        ¦   «         V — ŒdS )rw  N©r/   )ry   rŸ   r”  s      r   r{   z,_update_node_dependencies.<locals>.<genexpr>N  s7   è è € ÐEÐE±G°A°t��~Ñ%×-Ò-Ñ/Ô/ÐEÐEÐEÐEÐEÐEr   u$   â†’ Updating Node.js dependencies...rw  rË  rÌ  rÍ  rÎ  rÏ  TFr�  r   õ     âœ“ u     âš  npm install failed in rn   r±  rÊ   )rK  rL  r°  rŽ   r   r/   r5  r6  rM  r   r1   r�   )r§  Úpathsr  r”  r»  r   s         r   r|  r|  E  sg  € Ý
Œ,�uÑ
Ô
€CØð Øˆð 
•lÐ#Ø	•< (Ñ*Ð+ð€Eõ ÐEÐE¸uÐEÑEÔEÑEÔEð Øˆå	Ð
0Ñ1Ô1Ð1Øð 4ð 4‰ˆˆtØ�~Ñ%×-Ò-Ñ/Ô/ð 	Øå”Ø�)˜Z¨°lÐDVÐWØØØØð
ñ 
ô 
ˆð Ô Ò!Ð!ÝÐ"˜5Ð"Ð"Ñ#Ô#Ð#ØåÐ4¨UÐ4Ð4Ñ5Ô5Ð5Ø”-Ð% 2×,Ò,Ñ.Ô.ˆØð 	4ÝÐ2˜×*Ò*Ñ,Ô,¨RÔ0Ð2Ð2Ñ3Ô3Ð3øð%4ð 4r   c                   ó6   — e Zd ZdZd„ Zd„ Zd„ Zd„ Zd„ Zd„ Z	dS )	Ú_UpdateOutputStreamuÎ  Stream wrapper used during ``hermes update`` to survive terminal loss.

    Wraps the process's original stdout/stderr so that:

    * Every write is also mirrored to an append-only log file
      (``~/.hermes/logs/update.log``) that users can inspect after the
      terminal disconnects.
    * Writes to the original stream that fail with ``BrokenPipeError`` /
      ``OSError`` / ``ValueError`` (closed file) no longer cascade into
      process exit â€” the update keeps going, only the on-screen output
      stops.

    Combined with ``SIGHUP -> SIG_IGN`` installed by
    ``_install_hangup_protection``, this makes ``hermes update`` safe to
    run in a plain SSH session that might disconnect mid-install.
    c                 ó0   — || _         || _        d| _        d S ©NF)Ú	_originalÚ_logÚ_original_broken)ÚselfÚoriginalÚlog_files      r   Ú__init__z_UpdateOutputStream.__init__y  s   € Ø!ˆŒØˆŒ	Ø %ˆÔÐÐr   c                 ó¨  — | j         �,	 | j                              |¦  «         n# t          $ r Y nw xY w| j        r-t	          |t
          t          f¦  «        rt          |¦  «        ndS 	 | j                             |¦  «        S # t          t          t          f$ r7 d| _        t	          |t
          t          f¦  «        rt          |¦  «        ndcY S w xY w)Nr   T)r  Úwriter7   r  r‡   r‰   Úbytesr+   r  ÚBrokenPipeErrorr3   r5   )r  Údatas     r   r  z_UpdateOutputStream.write~  sì   € àŒ9Ð ðØ”	—’ Ñ%Ô%Ð%Ð%øÝð ð ð à�ðøøøð Ô ð 	FÝ *¨4µ#µu°Ñ >Ô >ÐE•3�t‘9”9�9ÀAÐEð	FØ”>×'Ò'¨Ñ-Ô-Ð-øÝ¥­*Ð5ð 	Fð 	Fð 	Fð %)ˆDÔ!Ý *¨4µ#µu°Ñ >Ô >ÐE•3�t‘9”9�9ÀAÐEÐEÐEð		Føøøs   ‰$ ¤
1°1Á)B ÂACÃCc                 óú   — | j         �+	 | j                              ¦   «          n# t          $ r Y nw xY w| j        rd S 	 | j                             ¦   «          d S # t
          t          t          f$ r d| _        Y d S w xY w)NT)r  Úflushr7   r  r  r  r3   r5   ©r  s    r   r  z_UpdateOutputStream.flush’  s¦   € ØŒ9Ð ðØ”	—’Ñ!Ô!Ð!Ð!øÝð ð ð Ø�ðøøøàÔ ð 	ØˆFð	)ØŒN× Ò Ñ"Ô"Ð"Ð"Ð"øÝ¥­*Ð5ð 	)ð 	)ð 	)Ø$(ˆDÔ!Ð!Ð!Ð!ð	)øøøs   ‰# £
0¯0½A ÁA:Á9A:c                 ój   — | j         rdS 	 | j                             ¦   «         S # t          $ r Y dS w xY wr  )r  r  r   r7   r  s    r   r   z_UpdateOutputStream.isattyŸ  sM   € ØÔ ð 	Ø�5ð	Ø”>×(Ò(Ñ*Ô*Ð*øÝð 	ð 	ð 	Ø�5�5ð	øøøs   ‹$ ¤
2±2c                 ó4   — | j                              ¦   «         S rw   )r  Úfilenor  s    r   r  z_UpdateOutputStream.fileno§  s   € ð Œ~×$Ò$Ñ&Ô&Ð&r   c                 ó,   — t          | j        |¦  «        S rw   )r  r  )r  r?   s     r   Ú__getattr__z_UpdateOutputStream.__getattr__¬  s   € Ý�t”~ tÑ,Ô,Ð,r   N)
Ú__name__Ú
__module__Ú__qualname__Ú__doc__r	  r  r  r   r  r  rÜ   r   r   r   r   g  s{   € € € € € ðð ð"&ð &ð &ð
Fð Fð Fð()ð )ð )ðð ð ð'ð 'ð 'ð
-ð -ð -ð -ð -r   r   Úgateway_modec                 ó´  — t           j        t           j        dddœ}| r|S ddl}t	          |d¦  «        r9	 |                     |j        |j        ¦  «         n# t          t          f$ r Y nw xY w	 ddl	m
}  |¦   «         dz  }|                     dd¬	¦  «         |d
z  }t          |ddd¬¦  «        }ddl}|                     d|j                             ¦   «                              d¬¦  «        › d�¦  «         ||d<   t#          |d         |¦  «        t           _        t#          |d         |¦  «        t           _        d|d<   n# t$          $ r d|d<   Y nw xY w|S )u$  Protect ``cmd_update`` from SIGHUP and broken terminal pipes.

    Users commonly run ``hermes update`` in an SSH session or a terminal
    that may close mid-install.  Without protection, ``SIGHUP`` from the
    terminal kills the Python process during ``pip install`` and leaves
    the venv half-installed; the documented workaround ("use screen /
    tmux") shouldn't be required for something as routine as an update.

    Protections installed:

    1. ``SIGHUP`` is set to ``SIG_IGN``.  POSIX preserves ``SIG_IGN``
       across ``exec()``, so pip and git subprocesses also stop dying on
       hangup.
    2. ``sys.stdout`` / ``sys.stderr`` are wrapped to mirror output to
       ``~/.hermes/logs/update.log`` and to silently absorb
       ``BrokenPipeError`` when the terminal vanishes.

    ``SIGINT`` (Ctrl-C) and ``SIGTERM`` (systemd shutdown) are
    **intentionally left alone** â€” those are legitimate cancellation
    signals the user or OS sent on purpose.

    In gateway mode (``hermes update --gateway``) the update is already
    spawned detached from a terminal, so this function is a no-op.

    Returns a dict that ``cmd_update`` can pass to
    ``_finalize_update_output`` on exit.  Returning a dict rather than a
    tuple keeps the call site forward-compatible with future additions.
    NF)Úprev_stdoutÚprev_stderrr  Ú	installedr   ÚSIGHUPrD   ÚlogsTr<  z
update.logÚar   rJ   )Ú	bufferingrL   z
=== hermes update started Úseconds)Útimespecz ===
r  r  r  r  )r   r´  r   ÚsignalÚhasattrr   ÚSIG_IGNr5   r3   r„   rE   rD  rî  rX   r  r–  Ú	isoformatr   r7   )r  rl  Ú_signalÚ_get_hermes_homeÚlogs_dirÚlog_pathr  Ú_dts           r   Ú_install_hangup_protectionr/  °  sÎ  € õ< ”zÝ”zØØð	ð €Eð ð ØˆàÐÐÐõ ˆw˜Ñ!Ô!ð ð	Ø�NŠN˜7œ>¨7¬?Ñ;Ô;Ð;Ð;øÝ�GÐ$ð 	ð 	ð 	ð ˆDð	øøøð!ð 	JÐIÐIÐIÐIÐIà#Ð#Ñ%Ô%¨Ñ.ˆØ�Š˜t¨dˆÑ3Ô3Ð3Ø˜lÑ*ˆÝ˜ #°¸WÐEÑEÔEˆàÐÐÐà�ŠðHØŒ|×ÒÑ!Ô!×+Ò+°YÐ+Ñ?Ô?ðHð Hð Hñ	
ô 	
ð 	
ð
 %ˆˆjÑÝ(¨¨}Ô)=¸xÑHÔH�Œ
Ý(¨¨}Ô)=¸xÑHÔH�Œ
Ø!ˆˆkÑÐøÝð !ð !ð !ð !ˆˆjÑÐÐð!øøøð
 €Ls$   µ A ÁA*Á)A*Á.CE ÅEÅEc                 óÎ  — | sdS |                       d¦  «        rx	 |                       dt          j        ¦  «        t          _        n# t          $ r Y nw xY w	 |                       dt          j        ¦  «        t          _        n# t          $ r Y nw xY w|                       d¦  «        }|�<	 |                     ¦   «          |                     ¦   «          dS # t          $ r Y dS w xY wdS )zWRestore stdio and close the update.log handle opened by ``_install_hangup_protection``.Nr  r  r  r  )r†   r   r´  r7   r   r  r)  )rl  r  s     r   Ú_finalize_update_outputr1    s  € àð ØˆØ‡y‚y�ÑÔð ð	ØŸš =µ#´*Ñ=Ô=�CŒJˆJøÝð 	ð 	ð 	ØˆDð	øøøð	ØŸš =µ#´*Ñ=Ô=�CŒJˆJøÝð 	ð 	ð 	ØˆDð	øøøà�yŠy˜Ñ$Ô$€HØÐð	Ø�NŠNÑÔÐØ�NŠNÑÔÐÐÐøÝð 	ð 	ð 	ØˆDˆDð	øøøð	 Ðs5   ›*A Á
AÁAÁ*B Â
BÂBÂ*(C Ã
C"Ã!C"c                  ó   — t           dz  } |                      ¦   «         s#t          d¦  «         t          j        d¦  «         dg}t          j        dk    rg d¢}t          d¦  «         t          j        |dd	gz   t           d
d
¬¦  «        }|j        dk    r˜|j	         
                    ¦   «         }d|v sd|v rt          d¦  «         nSd|v sd|v rt          d¦  «         n;t          d¦  «         |r*t          d|                     ¦   «         d         › �¦  «         t          j        d¦  «         t          j        |g d¢z   t           d
d
d
¬¦  «        }t          |j         
                    ¦   «         ¦  «        }|dk    rt          d¦  «         d S |dk    rdnd}t          d|› d|› d�¦  «         ddlm} t          d |¦   «         › d�¦  «         d S )!zIImplement ``hermes update --check``: fetch and report without installing.r$  u6   âœ— Not a git repository â€” cannot check for updates.r   ÚgitÚwin32©r3  r¬  úwindows.appendAtomically=falseu   â†’ Fetching from origin...r×  r·  TrÖ  r   úCould not resolve hostúunable to accessõ9   âœ— Network error â€” cannot reach the remote repository.úAuthentication failedúcould not read UsernameõD   âœ— Authentication failed â€” check your git credentials or SSH key.u    âœ— Failed to fetch from origin.r¹   )rË  zHEAD..origin/mainrÌ  r�  u   âœ“ Already up to date.r  r  u   âš• Update available: r¼   z behind origin/main.r  z  Run 'z' to install.N)r°  r/   r   r   r   Úplatformr5  r6  rM  r   r1   r�   rc   r´  r„   r  )Úgit_dirrŽ  Úfetch_resultr   Ú
rev_resultr  r  r  s           r   Ú_cmd_update_checkrA    s0  € å˜VÑ#€GØ�>Š>ÑÔð ÝÐFÑGÔGÐGÝŒ�‰Œˆàˆg€GÝ
„|�wÒÐØAÐAÐAˆå	Ð
'Ñ(Ô(Ð(Ý”>Ø�7˜HÐ%Ñ%ÝØØð	ñ ô €Lð Ô !Ò#Ð#ØÔ$×*Ò*Ñ,Ô,ˆØ# vÐ-Ð-Ð1CÀvÐ1MÐ1MÝÐMÑNÔNÐNÐNØ$¨Ð.Ð.Ð2KÈvÐ2UÐ2UÝÐXÑYÔYÐYÐYåÐ4Ñ5Ô5Ð5Øð 5ÝÐ3˜6×,Ò,Ñ.Ô.¨qÔ1Ð3Ð3Ñ4Ô4Ð4ÝŒ�‰Œˆå”ØÐ>Ð>Ð>Ñ>ÝØØØðñ ô €Jõ �Ô"×(Ò(Ñ*Ô*Ñ+Ô+€Fà�‚{€{ÝÐ'Ñ(Ô(Ð(Ð(Ð(à#)¨Q¢; ;�x�x°IˆÝÐR vÐRÐR°ÐRÐRÐRÑSÔSÐSØ@Ð@Ð@Ð@Ð@Ð@ÝÐCÐ2Ð2Ñ4Ô4ÐCÐCÐCÑDÔDÐDÐDÐDr   c            
      ót  — t           j        dk    rdS 	 t          j        ¦   «         dk    rdS n# t          $ r Y dS w xY wt          d¦  «        } |                      ¦   «         s|                      ¦   «         sdS t          j         	                    d¦  «        pd}	 t          j        ddd	|› �d
t          j         	                    dd¦  «        › �ddddgddd¬¦  «        }n# t          t          j        f$ r Y dS w xY w|j        dk    rdS d}d}d}dD �]}t          |¦  «        |z  }|                     ¦   «         sŒ*	 |                     d¬¦  «        }n# t"          $ r Y ŒNw xY wt%          d„ |                     ¦   «         D ¦   «         ¦  «        }	|	rŒ€	 |                     dd¬¦  «        5 }
|
                     d|z   dz   |z   dz   ¦  «         ddd¦  «         n# 1 swxY w Y   n,# t"          $ r}t-          d|› d|› �¦  «         Y d}~Œöd}~ww xY wt-          d |› �¦  «         d}�Œ|rt-          d!¦  «         dS dS )"aH  Ensure /usr/local/bin is on PATH for RHEL-family root non-login shells.

    Mirrors the post-symlink probe added to ``scripts/install.sh`` so that
    existing FHS-layout root installs on RHEL/CentOS/Rocky/Alma 8+ get
    repaired on ``hermes update`` without requiring a reinstall.  The
    installer's assumption that ``/usr/local/bin`` is on PATH for every
    standard shell breaks on those distros in non-login interactive shells
    (su, sudo -s, tmux panes, some web terminals): /etc/bashrc doesn't
    add /usr/local/bin and /root/.bash_profile doesn't either.  Symptom:
    ``hermes`` prints ``command not found`` even though the symlink lives
    at /usr/local/bin/hermes.

    Silent no-op on: non-Linux, non-root, non-FHS installs, and any system
    where ``bash -i -c 'command -v hermes'`` already resolves.  Idempotent.
    ÚlinuxNr   z/usr/local/bin/hermesÚHOMEz/rootr„  rD  zHOME=zTERM=rE  Údumbr«  r¬  zcommand -v hermesTr×   r1  z"export PATH="/usr/local/bin:$PATH"uK   # Hermes Agent â€” ensure /usr/local/bin is on PATH (RHEL non-login shells)F)z.bashrcz.bash_profilerB  )Úerrorsc              3   óv   K  — | ]4}d |v o+d|v o'|                      ¦   «                              d¦  «         V — Œ5dS )z/usr/local/binr®  r|   N)Úlstripr,   )ry   r�   s     r   r{   z)_ensure_fhs_path_guard.<locals>.<genexpr>…  sj   è è € ð 
ð 
ð ð  Ð$ð 2Ø˜$�ð2à—K’K‘M”M×,Ò,¨SÑ1Ô1Ð1ð
ð 
ð 
ð 
ð 
ð 
r   r"  rJ   rK   rÓ  u     âš  Could not update r+  u&     âœ“ Added /usr/local/bin to PATH in z?    (reload your shell or run 'source ~/.bashrc' to pick it up))r   r=  r8   ÚgeteuidÚAttributeErrorr   Ú
is_symlinkr/   r9   r†   r5  r6  r6   r7  rM  ry  r0   r3   rŽ   r�   rî  r  r   )Úfhs_linkr±  rS  Ú	path_lineÚpath_commentÚ	wrote_anyr†  r–   ÚexistingÚalready_guardedr®  r)  s               r   Ú_ensure_fhs_path_guardrR  G  sJ  € õ  „|�wÒÐØˆðÝŒ:‰<Œ<˜1ÒÐØˆFð øåð ð ð Øˆˆðøøøõ Ð+Ñ,Ô,€HØ×ÒÑ Ô ð ¨¯ªÑ):Ô):ð Øˆõ
 Œ:�>Š>˜&Ñ!Ô!Ð, W€Dð	Ý”Ø�DØ�Tˆ^ˆ^Ø5•R”Z—^’^ F¨FÑ3Ô3Ð5Ð5Ø�T˜4Ð!4ð6ð   d°Bð
ñ 
ô 
ˆˆøõ �zÔ8Ð9ð ð ð ØˆˆðøøøàÔ˜1ÒÐØˆà4€Ið	"ð ð €IØ1ð ñ ˆ	Ý�4‰jŒj˜9Ñ$ˆØ�{Š{‰}Œ}ð 	Øð	Ø—}’}¨I�}Ñ6Ô6ˆHˆHøÝð 	ð 	ð 	ØˆHð	øøøõ ð 
ð 
ð !×+Ò+Ñ-Ô-ð	
ñ 
ô 
ñ 
ô 
ˆð ð 	Øð	Ø—’˜#¨�Ñ0Ô0ð G°AØ—’˜˜|Ñ+¨dÑ2°YÑ>ÀÑEÑFÔFÐFðGð Gð Gñ Gô Gð Gð Gð Gð Gð Gð Gøøøð Gð Gð Gð Gøøåð 	ð 	ð 	ÝÐ6¨CÐ6Ð6°1Ð6Ð6Ñ7Ô7Ð7ØˆHˆHˆHˆHøøøøð	øøøõ 	Ð<°sÐ<Ð<Ñ=Ô=Ð=Øˆ	‰	Øð QÝÐOÑPÔPÐPÐPÐPðQð Qsm   ”. ®
<»<ÂAC ÃC9Ã8C9Ä<EÅ
E ÅE ÆG#Æ)"GÇG#ÇG	ÇG#ÇG	ÇG#Ç#
HÇ-HÈHc                 ó2  — ddl m}m}  |¦   «         r |d¦  «         dS t          | dd¦  «        rt	          ¦   «          dS t          | dd¦  «        }t          |¬¦  «        }	 t          | |¬¦  «         t          |¦  «         dS # t          |¦  «         w xY w)	zæUpdate Hermes Agent to the latest version.

    Thin wrapper around ``_cmd_update_impl``: installs hangup protection,
    runs the update, then restores stdio on the way out (even on
    ``sys.exit`` or unhandled exceptions).
    r   )Ú
is_managedÚmanaged_errorzupdate Hermes AgentNr­  FÚgateway)r  )r„   rT  rU  r  rA  r/  Ú_cmd_update_implr1  )r   rT  rU  r  Ú_update_io_states        r   Ú
cmd_updaterY  ™  sÌ   € ð <Ð;Ð;Ð;Ð;Ð;Ð;Ð;à€z�|„|ð ØˆÐ+Ñ,Ô,Ð,Øˆåˆt�W˜eÑ$Ô$ð ÝÑÔÐØˆå˜4 ¨EÑ2Ô2€Lõ
 2¸|ÐLÑLÔLÐð2Ý˜¨LÐ9Ñ9Ô9Ð9åÐ 0Ñ1Ô1Ð1Ð1Ð1øÕÐ 0Ñ1Ô1Ð1Ð1øøøs   Á#B ÂBc                 ó€+  ‡`— |rd×d„nd}t          d¦  «         t          ¦   «          d}t          dz  }|                     ¦   «         sEt          j        dk    rd}n2t          d	¦  «         t          d
¦  «         t          j        d¦  «         t          j        dk    r3|                     ¦   «         rt          j        g d¢t          dd¬¦  «         dg}t          j        dk    rg d¢}t          |t          ¦  «        }t          |¦  «        }|r/t          d¦  «         t          d|› �¦  «         t          ¦   «          |rt          | ¦  «         dS 	 t          d¦  «         t          j        |ddgz   t          dd¬¦  «        }|j        dk    rÆ|j                             ¦   «         }	d|	v sd|	v r>t          d¦  «         t          |	rd|	                     ¦   «         d         › �nd¦  «         nSd|	v sd|	v rt          d¦  «         n;t          d¦  «         |	r*t          d|	                     ¦   «         d         › �¦  «         t          j        d¦  «         t          j        |g d¢z   t          ddd¬¦  «        }
|
j                             ¦   «         }d }|d k    rZ|d!k    rd"nd#|› d$�}t          d%|› d&�¦  «         t!          |t          ¦  «        }t          j        |d'd gz   t          ddd¬¦  «         nt!          |t          ¦  «        }|duo=|p;t          j                             ¦   «         ot          j                             ¦   «         }t          j        |d(d)|› �d*gz   t          ddd¬¦  «        }
t'          |
j                             ¦   «         ¦  «        }|dk    rat)          ¦   «          |�t+          |t          |||¬+¦  «         |d,vr#t          j        |d'|gz   t          ddd¬¦  «         t          d-¦  «         dS t          d.|› d/�¦  «         t          d0¦  «         d}	 t          j        |d1d2d|gz   t          dd¬¦  «        }|j        dk    r¸t          d3¦  «         t          j        |d4d5d6|› �gz   t          dd¬¦  «        }|j        dk    rxt          d7|› d8�¦  «         |j                             ¦   «         r)t          d|j                             ¦   «         › �¦  «         t          d9¦  «         t          j        d¦  «         d}|�>|s#t          d:|› d;�¦  «         t          d<¦  «         n`t+          |t          |||¬+¦  «         nF# |�?|s#t          d:|› d;�¦  «         t          d<¦  «         w t+          |t          |||¬+¦  «         w w xY wt)          ¦   «          t-          t          ¦  «        }|rt          d=|› d>|dk    rd?nd@› �¦  «         |r|d k    rt/          |t          ¦  «         t          dA¦  «         t1          j        dB¦  «        }|r;i t4          j        ¥dCt9          t          dDz  ¦  «        i¥}t;          |dEg|¬F¦  «         n�t          j        dGdEg}	 t          j        |dHgz   t          dd¬¦  «         n@# t          j        $ r. t          j        t          j        dGdIdJdKgt          d¬L¦  «         Y nw xY wt;          |¦  «         tA          ¦   «          tC          t          dMz  ¦  «         t          ¦   «          t          dN¦  «         	 ddl"}ddl#}| $                    |¦  «         n# tJ          $ r Y nw xY w	 ddOl&m'} t          ¦   «          t          dP¦  «          |d¬Q¦  «        }
|
dR         rAt          dStQ          |
dR         ¦  «        › dTdU )                    |
dR         ¦  «        › �¦  «         |
 *                    dV¦  «        rAt          dWtQ          |
dV         ¦  «        › dXdU )                    |
dV         ¦  «        › �¦  «         |
 *                    dY¦  «        r&t          dZtQ          |
dY         ¦  «        › d[�¦  «         |
 *                    d\¦  «        r&t          d]tQ          |
d\         ¦  «        › d^�¦  «         |
dR         s$|
 *                    dV¦  «        st          d_¦  «         n2# tJ          $ r%}tV           ,                    d`|¦  «         Y d}~nd}~ww xY w	 ddal-m.}m/}m0}  |¦   «         Š`ˆ`fdb„ |¦   «         D ¦   «         }|�r^t          ¦   «          t          dc¦  «         |D �]=} 	  || j1        d¬Q¦  «        }!|!rÖtQ          |! *                    dRg ¦  «        ¦  «        }"tQ          |! *                    dVg ¦  «        ¦  «        }#tQ          |! *                    dYg ¦  «        ¦  «        }$g }%|"r|% 2                    dd|"› de�¦  «         |#r|% 2                    df|#› dg�¦  «         |$r|% 2                    dh|$› di�¦  «         |%rdU )                    |%¦  «        ndj}&ndk}&t          d| j3        › dl|&› �¦  «         �Œ# tJ          $ r&}'t          d| j3        › dm|'› d;�¦  «         Y d}'~'�Œ7d}'~'ww xY wn# tJ          $ r Y nw xY w	 ddnl4m5}(  |(¦   «         })|)rt          do|)› dp�¦  «         n# tJ          $ r Y nw xY wt          ¦   «          t          dq¦  «         ddrl6m7}*m8}+m9},m:}-  |*d¬s¦  «        }. |+¦   «         }/ |,¦   «         \  }0}1|.p|/p|0|1k     }2|2�rºt          ¦   «          |.r t          dttQ          |.¦  «        › du�¦  «         |/r t          dvtQ          |/¦  «        › dw�¦  «         t          ¦   «          |r5tw          dxdy¦  «                             ¦   «          <                    ¦   «         }3n¤t          j                             ¦   «         rt          j                             ¦   «         s!t          dz¦  «         t          d{¦  «         dy}3nG	 t{          d|¦  «                             ¦   «          <                    ¦   «         }3n# t|          $ r dy}3Y nw xY w|3d}v r]t          ¦   «           |-| d¬~¦  «        }4|4d         s|4d€         rt          ¦   «          t          d�¦  «         |r|.rt          d‚¦  «         n-t          ¦   «          t          dƒ¦  «         nt          d„¦  «         t          ¦   «          t          d…¦  «         	 t          ¦   «          n2# tJ          $ r%}tV           ,                    d†|¦  «         Y d}~nd}~ww xY w|r8t�          ¦   «         d‡z  }5	 |5 A                    dˆ¦  «         n# t„          $ r Y nw xY w	 dd‰lCmD}6mE}7mF}8mG}9mH}:mI}; ddlJ}<	 dØd‹t–          dŒt8          d�t˜          dŽtš          fd�„}=	 dÙd‹t–          dŒt8          d‘t˜          dŽt˜          fd’„}>	 dd“l#mN}? n# tJ          $ r d”}?Y nw xY wd}@	 dd•l6mO}A  |A¦   «          *                    d–¦  «        pi }B|B *                    d—¦  «        }@n# tJ          $ r Y nw xY w	 |@�t™          |@¦  «        nt™          |?¦  «        }Cn&# t           t¢          f$ r t™          |?¦  «        }CY nw xY wt¥          |Cd˜¦  «        d™z   }Cg }Dt§          ¦   «         }E |7¦   «         �r)	  |8¦   «          n# tJ          $ r Y nw xY wdšd›dœgfd�d›gffD �] \  }F}G	 t          j        |Gg dž¢z   dddŸ¬ ¦  «        }
|
j                             ¦   «                              ¦   «         D �]’}H|H T                    ¦   «         }%|%sŒ|%d         }I|I U                    d¡¦  «        sŒ8|I V                    d¡¦  «        }Jt          j        |Gd¢|Jgz   ddd£¬ ¦  «        }K|Kj                             ¦   «         d¤k    rŒˆd}L	 t          j        |Gd¥|Jd¦d§gz   ddd£¬ ¦  «        }Mt'          |Mj        pd                     ¦   «         pd¦  «        }Ln$# t¢          t          jW        t°          f$ r d}LY nw xY wd}N|Ldk    r0t          d¨|J› d©t'          |C¦  «        › dª�¦  «          |;|L|C¬«¦  «        }N|NrY |>|G|Jd�¬¬¦  «        }Ot¥          dŠ|OdŠz   ¦  «        }P |=|G|J|P¬­¦  «        r|D 2                    |J¦  «         �Œyt          d®|J› d¯�¦  «         t          j        |Gd°|Jgz   ddd±¬ ¦  «        }Q|Qj        dk    r² |=|G|JdŠ¬­¦  «        r|D 2                    |J¦  «         �ŒÙt          d®|J› d²�¦  «         t          j        |Gd°|Jgz   ddd±¬ ¦  «        }R |=|G|JdŠ¬­¦  «        r*|D 2                    |J¦  «         t          d³|J› d´�¦  «         �ŒAt          dµ|J› d¶|J› d·|Fdšk    rd¸nd› d¹|J› �¦  «         �Œft          dº|J› dl|Qj                             ¦   «         › �¦  «         �Œ”�Œå# t°          t          jW        f$ r Y �Œþw xY w |6¦   «         rö	 dd»lCmY}SmZ}Tm[}U  |U¦   «         }V|V                     ¦   «         rªt          j        d¼d½ |T¦   «         gddd£¬ ¦  «        }K|Kj        dk    r|	  |S¦   «          |D 2                     |T¦   «         ¦  «         nS# t          j        $ rA}t¹          |d¾d¦  «        pd                     ¦   «         }	t          d¿|	› �¦  «         Y d}~nd}~ww xY wn"# t°          t          jW        tº          f$ r Y nw xY w |:¦   «         }W |9|Wd¬À¦  «        }X|XD ]I}Y	 t5          j^        |Y|<j_        ¦  «         |E `                    |Y¦  «         Œ3# tÂ          tÄ          f$ r Y ŒFw xY w|Ds|Erxt          ¦   «          |DD ]}Zt          dÁ|Z› �¦  «         Œ|ErQt          dÂtQ          |E¦  «        › dÃ�¦  «         t          dÄ¦  «         tQ          |E¦  «        dk    rt          dÅ¦  «         |Ds|Es	 n2# tJ          $ r%}tV           ,                    dÆ|¦  «         Y d}~nd}~ww xY w	 ddÇlCmc}[md}\mE}7  |7¦   «         rÉ |[¦   «         r¿t          ¦   «          t          dÈ¦  «          |\¦   «         D ]"\  }]}^}_|_rd�ndš}Ft          dÉ|^› dÊ|F› dË�¦  «         Œ#t          ¦   «          t          dÌ¦  «         t          dÍ¦  «         t          dÎ¦  «         t          ¦   «          t          dÏ¦  «         t          ¦   «          t          dÐ¦  «         n2# tJ          $ r%}tV           ,                    dÑ|¦  «         Y d}~nd}~ww xY wt          ¦   «          t          dÒ¦  «         t          dÓ¦  «         dS # t          j        $ r†}t          j        dk    r?t          dÔ|› �¦  «         t          dÕ¦  «         t          ¦   «          t          | ¦  «         n,t          dÖ|› �¦  «         t          j        d¦  «         Y d}~dS Y d}~dS d}~ww xY w)Úuj   Body of ``cmd_update`` â€” kept separate so the wrapper can always
    restore stdio even on ``sys.exit``.rn   c                 ó"   — t          | |¦  «        S rw   )r>  )r,  r   s     r   ú<lambda>z"_cmd_update_impl.<locals>.<lambda>»  s   € ¥O°F¸GÑ$DÔ$D€ r   Nu   âš• Updating Hermes Agent...Fr$  r4  Tu+   âœ— Not a git repository. Please reinstall:zg  curl -fsSL https://raw.githubusercontent.com/NousResearch/hermes-agent/main/scripts/install.sh | bashr   )r3  r¬  r6  rÅ  zwindows.appendAtomicallyÚfalserV  r3  r5  u   âš  Updating from fork:r¹   u   â†’ Fetching updates...r×  r·  rÖ  r   r7  r8  r9  r:  r;  r<  u(   âœ— Failed to fetch updates from origin.)r•  z--abbrev-refr¨  r�  r  r¨  zdetached HEADzbranch 'r  u     âš  Currently on u$    â€” switching to main for update...ÚcheckoutrË  zHEAD..origin/rÌ  )r£  rª  )r  r¨  u   âœ“ Already up to date!u
   â†’ Found z new commit(s)u   â†’ Pulling updates...rÙ  rÚ  uP     âš  Fast-forward not possible (history diverged), resetting to match remote...r‘  r§  zorigin/u   âœ— Failed to reset to origin/r(  z@  Try manually: git fetch origin && git reset --hard origin/mainu1     â„¹ï¸�  Local changes preserved in stash (ref: rÖ   z(  Restore manually with: git stash applyrL  rM  r  rN  rO  rP  rQ  r#  rR  rS  rT  rU  rW  rX  rY  rZ  r[  u   âœ“ Code updated!r  r\  r  r]  r^  r_  r`  ra  rb  rc  rd  re  rf  rg  rh  ri  rj  z$Skills sync during update failed: %s)Úlist_profilesÚget_active_profile_nameÚseed_profile_skillsc                 ó*   •— g | ]}|j         ‰k    ¯|‘ŒS rÜ   ©r?   )ry   r…  r¥   s     €r   rß   z$_cmd_update_impl.<locals>.<listcomp>è  s%   ø€ ÐMÐMÐM A¸A¼FÀfÒ<LÐ<L˜aÐ<LÐ<LÐ<Lr   u/   â†’ Syncing bundled skills to other profiles...ú+z newu   â†‘z updatedú~z user-modifiedz
up to datezsync failedr+  z	: error ()Úsync_honcho_profiles_quietz
-> Honcho: synced z profile(s)u-   â†’ Checking configuration for new options...)Úget_missing_env_varsÚget_missing_config_fieldsÚcheck_config_versionÚmigrate_config)Úrequired_onlyu
     âš ï¸�  z+ new required setting(s) need configurationu
     â„¹ï¸�  z new config option(s) availablez2Would you like to configure new options now? [Y/n]rÿ  uC     â„¹ Non-interactive session â€” skipping config migration prompt.zJ    Run 'hermes config migrate' later to apply any new config/env options.z-Would you like to configure them now? [Y/n]: r   )Úinteractiver  Ú	env_addedÚconfig_addedu   âœ“ Configuration updated!u:     â„¹ API keys require manual entry: hermes config migratez8Skipped. Run 'hermes config migrate' later to configure.u!     âœ“ Configuration is up to daterk  zFHS PATH guard check failed: %sz.update_exit_codeÚ0)Úis_macosÚsupports_systemd_servicesÚ_ensure_user_systemd_envÚfind_gateway_pidsÚ_get_service_pidsÚ_graceful_restart_via_sigusr1ç      $@Ú
scope_cmd_Ú	svc_name_r4  r   c                 ó\  — t          j        ¦   «         t          |d¦  «        z   }	 	 t          j        | d|gz   ddd¬¦  «        }|j                             ¦   «         dk    rdS n# t          t          j        f$ r Y nw xY wt          j        ¦   «         |k    rdS t          j	        d¦  «         Œˆ)az  Poll ``systemctl is-active`` until the unit reports active.

                systemd's Stopped -> Started transition after a graceful exit
                (or a hard restart) is not instantaneous; a one-shot check
                races that window and falsely reports the unit as down.
                Poll every 0.5s up to ``timeout`` seconds before giving up.
                r-  Tú	is-activerÎ   r1  r¥   F)
ra   r4  r½   r5  r6  r´  r1   r6   r7  r5  )rw  rx  r4  r<  Ú_verifys        r   Ú_wait_for_service_activez2_cmd_update_impl.<locals>._wait_for_service_active€  sÎ   € õ !œ?Ñ,Ô,­s°7¸CÑ/@Ô/@Ñ@�ð%ðÝ",¤.Ø&¨+°yÐ)AÑAØ+/°dÀAð#ñ #ô #˜ð #œ>×/Ò/Ñ1Ô1°XÒ=Ð=Ø#' 4ð >øå-­zÔ/HÐIð ð ð Ø˜ðøøøå”Ñ(Ô(¨HÒ4Ð4Ø$˜uÝ”K Ñ$Ô$Ð$ð%s   §:A$ Á$A=Á<A=ç        r   c           
      óÈ  — 	 t          j        | d|ddgz   ddd¬¦  «        }n# t          t           j        f$ r |cY S w xY w|j        pd                     ¦   «         }|r|dk    r|S d	}d
}|                     ¦   «         D ]`}dD ][\  }}	|                     |¦  «        rA	 |t          |dt          |¦  «         …         ¦  «        |	z  z  }d}n# t          $ r Y nw xY w nŒ\Œa|r|n|S )aª  Read the unit's ``RestartUSec`` (RestartSec) in seconds.

                After a graceful exit-75, systemd waits ``RestartSec`` before
                respawning the unit.  Callers that poll for ``is-active``
                must use a timeout >= ``RestartSec`` + transition slack, or
                they'll give up *during* the cooldown window and wrongly
                conclude the unit didn't relaunch.
                rþ  z--property=RestartUSecú--valueTrÎ   r1  rn   Úinfinityr}  F))Úmsgü©ñÒMbP?)Úusg�íµ ÷Æ°>)r÷   ç      N@)r¾   g      ð?N)r5  r6  r6   r7  r´  r1   r-   r“  Úfloatr+   r5   )
rw  rx  r   Ú_showÚrawr  ÚmatchedÚpartÚ_sufÚ_mults
             r   Ú_service_restart_secz._cmd_update_impl.<locals>._service_restart_sec™  sZ  € ð	#Ý&œNØ"Ø" IØ4°ið&ñ ð (,°$Àðñ ô �E�Eøõ *­:Ô+DÐEð #ð #ð #Ø"�N�N�Nð#øøøà”|Ð) r×0Ò0Ñ2Ô2�ð ð #˜c ZÒ/Ð/Ø"�NØ�Ø�ØŸIšI™KœKð "ð "�Dð(ð "ð "™˜˜eð  Ÿ=š=¨Ñ.Ô.ð "ð%Ø %­¨t°Lµs¸4±y´y°j°LÔ/AÑ)BÔ)BÀUÑ)JÑ J Ø*.  øÝ#-ð %ð %ð %Ø $ ð%øøøà!˜Eð"øð !(Ð4�u�u¨WÐ4s   ‚" ¢=¼=Â-C
Ã

CÃC)Ú%DEFAULT_GATEWAY_RESTART_DRAIN_TIMEOUTrƒ  rR   r  Úrestart_drain_timeoutg      >@rY  ÚuserÚ	systemctlz--userÚsystem)z
list-unitszhermes-gateway*z--plainz--no-legendz
--no-pagerr×   r1  z.servicerz  rÎ   r¥   rþ  z--property=MainPIDr  u     â†’ z: draining (up to zs)...)Údrain_timeoutr�  )r4  rY  u0    drained but didn't relaunch â€” forcing restartÚrestartr0  z  died after restart, retrying...rý  z recovered on retryr9  zL failed to stay running after restart.
    Check logs: journalctl --user -u z5 --since '2 min ago'
    Restart manually: systemctl z--user zrestart u     âš  Failed to restart )Úlaunchd_restartÚget_launchd_labelÚget_launchd_plist_pathÚ	launchctlrë   r   u     âš  Gateway restart failed: )Úexclude_pidsÚall_profilesu     âœ“ Restarted u     â†’ Stopped z manual gateway process(es)z(    Restart manually: hermes gateway runz;    (or: hermes -p <profile> gateway run  for each profile)z(Gateway restart during update failed: %s)Úhas_legacy_hermes_unitsÚ_find_legacy_hermes_unitsrq  u+   âš  Legacy Hermes gateway unit(s) detected:r±  z  (z scope)z;  These pre-rename units (hermes.service) fight the currentz<  hermes-gateway.service for the bot token and cause SIGTERMz  flap loops. Remove them with:z!    hermes gateway migrate-legacyz)  (add `sudo` if any are in system scope)z*Legacy unit check during update failed: %sz-Tip: You can now select a provider and model:z7  hermes model              # Select provider and modelu   âš  Git update failed: u#   â†’ Falling back to ZIP download...u   âœ— Update failed: ©rn   )rv  )r}  )er   r°  r/   r   r=  r   r5  r6  r¹  rÀ  r�  rM  r   r1   r�   r´  r›  r   r   rc   ræ  r¯  r'  rÞ  rK  rL  r8   r9   r‰   rz  rð  r{  r|  rF  Ú	importlibr.   Úreloadr7   r  r  r+   rN  r†   ÚloggerÚdebugr4   r_  r`  ra  r”  rµ  r?   Úplugins.memory.honcho.clirf  r„   rg  rh  ri  rj  r>  rÅ   r  r  rR  rE   r2  r3   r-  rp  rq  rr  rs  rt  ru  r&  rë   r„  r°  rŒ  rS   Ú	TypeErrorr5   r½   r   r-   r“  Úremovesuffixr7  r6   r“  r”  r•  r  r   ÚkillÚSIGTERMr¡  ÚProcessLookupErrorÚPermissionErrorr™  rš  )ar   r  Úgw_input_fnÚuse_zip_updater>  rŽ  rº  Úis_forkr?  r   r»  Úcurrent_branchr}  r  Úauto_stash_refÚprompt_for_restoreÚcommit_countÚupdate_succeededÚpull_resultÚreset_resultr  rŠ  r‹  rŒ  rœ  Ú_hcr  r)  r_  r`  ra  Úother_profilesr…  rJ  r]  ra  Úmodifiedr¼  r¢   Úperf  Úsyncedrg  rh  ri  rj  Úmissing_envÚmissing_configÚcurrent_verÚ
latest_verÚneeds_migrationrL  ÚresultsÚ_exit_code_pathrp  rq  rr  rs  rt  ru  r*  r|  r‹  Ú_DEFAULT_DRAINÚ
_cfg_drainrS   Ú
_cfg_agentÚ_drain_budgetÚrestarted_servicesÚkilled_pidsrW  Ú	scope_cmdr�   ÚunitÚsvc_namer­  Ú	_main_pidr…  Ú_graceful_okÚ_restart_secÚ_post_drain_timeoutr’  Úretryr“  r”  r•  Ú
plist_pathÚservice_pidsÚmanual_pidsÚpidÚsvcr™  rš  r?   r”  Úis_sysr¥   sa                                                                                                   @r   rW  rW  ¶  sÑ  ø€ ð ð	Ð	DÐ	DÐ	DÐ	Dàð õ 
Ð
(Ñ)Ô)Ð)Ý	�G„G€Gð €NÝ˜VÑ#€Gà�>Š>ÑÔð ÝŒ<˜7Ò"Ð"Ø!ˆNˆNåÐ?Ñ@Ô@Ð@ÝØyñô ð õ ŒH�Q‰KŒKˆKõ „|�wÒÐ 7§>¢>Ñ#3Ô#3ÐÝŒðð ð õ ØØð	
ñ 	
ô 	
ð 	
ð ˆg€GÝ
„|�wÒÐØAÐAÐAˆõ ! ­,Ñ7Ô7€JÝ�zÑ"Ô"€Gàð ÝÐ'Ñ(Ô(Ð(ÝÐ�:ÐÐÑ Ô Ð Ý‰Œˆàð å˜ÑÔÐØˆðlåÐ'Ñ(Ô(Ð(Ý!”~Ø�w Ð)Ñ)ÝØØð	
ñ 
ô 
ˆð Ô" aÒ'Ð'Ø!Ô(×.Ò.Ñ0Ô0ˆFØ'¨6Ð1Ð1Ð5GÈ6Ð5QÐ5QÝÐQÑRÔRÐRÝ°vÐEÐ3˜6×,Ò,Ñ.Ô.¨qÔ1Ð3Ð3Ð3À2ÑFÔFÐFÐFà'¨6Ð1Ð1Ð5NÐRXÐ5XÐ5XåØZñô ð ð õ ÐAÑBÔBÐBØð 9ÝÐ7˜v×0Ò0Ñ2Ô2°1Ô5Ð7Ð7Ñ8Ô8Ð8ÝŒH�Q‰KŒKˆKõ ”ØÐ;Ð;Ð;Ñ;ÝØØØð
ñ 
ô 
ˆð  œ×,Ò,Ñ.Ô.ˆð ˆð ˜VÒ#Ð#ð " VÒ+Ð+ð  �à1 Ð1Ð1Ð1ð õ
 ÐS¨ÐSÐSÐSÑTÔTÐTå;¸GÅ\ÑRÔRˆNÝŒNØ˜: vÐ.Ñ.Ý Ø#ØØðñ ô ð ð õ <¸GÅ\ÑRÔRˆNà+°4Ð7ð 
ØÐH�SœY×-Ò-Ñ/Ô/ÐGµC´J×4EÒ4EÑ4GÔ4Gð 	õ
 ”Ø�zÐ#;°6Ð#;Ð#;¸YÐGÑGÝØØØð
ñ 
ô 
ˆõ ˜6œ=×.Ò.Ñ0Ô0Ñ1Ô1ˆà˜1ÒÐÝ$Ñ&Ô&Ð&àÐ)Ý(ØÝ Ø"Ø 2Ø(ðñ ô ð ð Ð%5Ð5Ð5Ý”Ø˜z¨>Ð:Ñ:Ý$Ø#'ØØðñ ô ð õ Ð+Ñ,Ô,Ð,ØˆFåÐ7˜<Ð7Ð7Ð7Ñ8Ô8Ð8åÐ&Ñ'Ô'Ð'Ø Ðð-	Ý$œ.Ø˜6 ;°¸&ÐAÑAÝ Ø#Øð	ñ ô ˆKð Ô%¨Ò*Ð*õ Øfñô ð õ  *œ~Ø˜w¨Ð2D¸FÐ2DÐ2DÐEÑEÝ$Ø#'Øð	 ñ  ô  �ð  Ô*¨aÒ/Ð/ÝÐD¸6ÐDÐDÐDÑEÔEÐEØ#Ô*×0Ò0Ñ2Ô2ð BÝÐ@ <Ô#6×#<Ò#<Ñ#>Ô#>Ð@Ð@ÑAÔAÐAÝØZñô ð õ ”H˜Q‘K”K�KØ#ÐàÐ)ð (ð ÝØ]ÈNÐ]Ð]Ð]ñô ð õ ÐEÑFÔFÐFÐFå,ØÝ$Ø&Ø$6Ø!,ðñ ô ð øøð Ð)ð (ð ÝØ]ÈNÐ]Ð]Ð]ñô ð õ ÐEÑFÔFÐFÐFå,ØÝ$Ø&Ø$6Ø!,ðñ ô ð ð ð *øøøõ" 	!Ñ"Ô"Ð"õ
 (­Ñ5Ô5ˆØð 	ÝØe ÐeÐeÈGÐWXÊLÈLÀSÀSÐ^cÐeÐeñô ð ð
 ð 	A�v Ò'Ð'Ý)¨'µ<Ñ@Ô@Ð@õ
 	Ð3Ñ4Ô4Ð4Ý”˜dÑ#Ô#ˆØð 	IØN�œ
ÐN Mµ3µ|ÀfÑ7LÑ3MÔ3MÐNÐNˆFÝ?Ø˜� Vðñ ô ð ð õ ”~ t¨UÐ3ˆGðÝ”Ø˜{˜mÑ+Ý$ØØ#'ð	ñ ô ð ð øõ Ô0ð ð ð Ý”Ý”^ T¨;¸À_ÐUÝ$Øðñ ô ð ð ð ðøøøõ @ÀÑHÔHÐHå!Ñ#Ô#Ð#Ý•l UÑ*Ñ+Ô+Ð+å‰ŒˆÝÐ!Ñ"Ô"Ð"ð	ØÐÐÐØ*Ð*Ð*Ð*à×Ò˜SÑ!Ô!Ð!Ð!øÝð 	ð 	ð 	ØˆDð	øøøð	DØ5Ð5Ð5Ð5Ð5Ð5å‰GŒGˆGÝÐ1Ñ2Ô2Ð2Ø �[ tÐ,Ñ,Ô,ˆFØ�hÔð YÝÐW�S ¨Ô!1Ñ2Ô2ÐWÐW¸$¿)º)ÀFÈ8ÔDTÑ:UÔ:UÐWÐWÑXÔXÐXØ�zŠz˜)Ñ$Ô$ð ÝØ]�S ¨	Ô!2Ñ3Ô3Ð]Ð]¸t¿yºyÈÐPYÔIZÑ?[Ô?[Ð]Ð]ñô ð ð �zŠz˜/Ñ*Ô*ð RÝÐP�S ¨Ô!8Ñ9Ô9ÐPÐPÐPÑQÔQÐQØ�zŠz˜)Ñ$Ô$ð OÝÐM�s 6¨)Ô#4Ñ5Ô5ÐMÐMÐMÑNÔNÐNØ˜(Ô#ð 5¨F¯JªJ°yÑ,AÔ,Að 5ÝÐ3Ñ4Ô4Ð4øøÝð 	Dð 	Dð 	DÝ�LŠLÐ?ÀÑCÔCÐCÐCÐCÐCÐCÐCøøøøð	Døøøð!	ðð ð ð ð ð ð ð ð ð ð -Ð,Ñ.Ô.ˆFØMÐMÐMÐM¨¨©¬ÐMÑMÔMˆNØñ ;Ý‘”�ÝÐGÑHÔHÐHØ'ð ;ñ ;�Að;Ø/Ð/°´¸dÐCÑCÔC˜Øð 3Ý%(¨¯ª¨x¸Ñ)<Ô)<Ñ%=Ô%=˜FÝ&)¨!¯%ª%°	¸2Ñ*>Ô*>Ñ&?Ô&?˜GÝ'*¨1¯5ª5°À"Ñ+EÔ+EÑ'FÔ'F˜HØ$&˜EØ%ð ?Ø %§¢Ð-=°Ð-=Ð-=Ð-=Ñ >Ô >Ð >Ø&ð FØ %§¢Ð-D°7Ð-DÐ-DÐ-DÑ EÔ EÐ EØ'ð KØ %§¢Ð-I°Ð-IÐ-IÐ-IÑ JÔ JÐ JØ9>Ð%P T§Y¢Y¨uÑ%5Ô%5Ð%5ÀL˜F˜Fà%2˜FÝÐ5 1¤6Ð5Ð5¨VÐ5Ð5Ñ6Ô6Ð6Ñ6øÝ$ð ;ð ;ð ;ÝÐ9 1¤6Ð9Ð9°BÐ9Ð9Ð9Ñ:Ô:Ð:Ð:Ð:Ð:Ð:Ñ:øøøøð;øøøøøåð 	ð 	ð 	ØˆDð	øøøð	ØLÐLÐLÐLÐLÐLà/Ð/Ñ1Ô1ˆFØð BÝÐ@¨VÐ@Ð@Ð@ÑAÔAÐAøøÝð 	ð 	ð 	ØˆDð	øøøõ 	‰ŒˆÝÐ=Ñ>Ô>Ð>ð	
ð 	
ð 	
ð 	
ð 	
ð 	
ð 	
ð 	
ð 	
ð 	
ð 	
ð 	
ð +Ð*¸Ð>Ñ>Ô>ˆØ2Ð2Ñ4Ô4ˆØ"6Ð"6Ñ"8Ô"8Ñˆ�Zà%ÐS¨ÐS¸;ÈÒ;Sˆàñ 1	7Ý‰GŒGˆGØð ÝØ^¥ [Ñ!1Ô!1Ð^Ð^Ð^ñô ð ð ð YÝÐW¥3 ~Ñ#6Ô#6ÐWÐWÐWÑXÔXÐXå‰GŒGˆGØð #å#ØLÈcñô ÷ ’U‘W”Wß’U‘W”Wð �õ ”i×&Ò&Ñ(Ô(ð #­S¬Z×->Ò->Ñ-@Ô-@ð #ÝÐ[Ñ\Ô\Ð\ÝØ`ñô ð ð ��ð#åÐMÑNÔNßš™œßš™œð �Høõ
  ð #ð #ð #Ø"�H�H�Hð#øøøð Ð+Ð+Ð+Ý‘”�ð )˜.¸Ð5EÈUÐSÑSÔS�à˜;Ô'ð 8¨7°>Ô+Bð 8Ý‘G”G�GÝÐ6Ñ7Ô7Ð7Øð X Kð XÝÐVÑWÔWÐWøå‘”�ÝÐPÑQÔQÐQÐQåÐ5Ñ6Ô6Ð6å‰ŒˆÝÐ$Ñ%Ô%Ð%ð	?Ý"Ñ$Ô$Ð$Ð$øÝð 	?ð 	?ð 	?Ý�LŠLÐ:¸AÑ>Ô>Ð>Ð>Ð>Ð>Ð>Ð>øøøøð	?øøøð& ð 	Ý-Ñ/Ô/Ð2EÑEˆOðØ×*Ò*¨3Ñ/Ô/Ð/Ð/øÝð ð ð Ø�ðøøøðC	Hðð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð %Ð$Ð$Ð$ð DHð%ð %Ý ð%Ý-0ð%Ý;@ð%åð%ð %ð %ð %ð4 DGð*5ð *5Ý ð*5Ý-0ð*5Ý;@ð*5åð*5ð *5ð *5ð *5ðd&ðð ð ð ð ð ð øõ ð &ð &ð &Ø!%���ð&øøøàˆJðØ9Ð9Ð9Ð9Ð9Ð9Ø)˜k™mœm×/Ò/°Ñ8Ô8Ð>¸B�
Ø'Ÿ^š^Ð,CÑDÔD�
�
øÝð ð ð Ø�ðøøøð6Ø5?Ð5K¥ jÑ 1Ô 1Ð 1ÕQVÐWeÑQfÔQf��øÝ�zÐ*ð 6ð 6ð 6Ý % nÑ 5Ô 5���ð6øøøõ   ¨tÑ4Ô4°tÑ;ˆMà!#ÐÝ™%œ%ˆKð )Ð(Ñ*Ô*ñ UðØ,Ð,Ñ.Ô.Ð.Ð.øÝ ð ð ð Ø�Dðøøøð ˜k¨8Ð4Ð5Ø ˜}Ð-ð)ð Oñ OÑ$�E˜9ðKÝ!+¤Ø%ðð ð ñð ,0Ø!%Ø$&ð"ñ "ô "˜ð %+¤M×$7Ò$7Ñ$9Ô$9×$DÒ$DÑ$FÔ$Fð {"ñ {"˜DØ$(§J¢J¡L¤L˜EØ#(ð )Ø (Ø#(Ø !ô$˜Dð $(§=¢=°Ñ#<Ô#<ð )Ø (Ø'+×'8Ò'8¸Ñ'DÔ'D˜Hå$.¤NØ )¨[¸(Ð,CÑ CØ/3Ø%)Ø()ð	%ñ %ô %˜Eð  %œ|×1Ò1Ñ3Ô3°xÒ?Ð?Ø (ð )*˜Ið
.Ý(2¬Ø$-Ø(.°Ø(<¸ið1&ñ %&ð 48¸dÈAð)"ñ )"ô )" õ -0°´Ð1CÀ×0JÒ0JÑ0LÔ0LÐ0QÐPQÑ,RÔ,R 	 	øÝ$.µ
Ô0IÕK\Ð#]ð .ð .ð .Ø,- 	 	 	ð.øøøð ,1˜LØ(¨1š}˜}Ý %Ø$b¨XÐ$bÐ$bÍÈ]ÑI[ÔI[Ð$bÐ$bÐ$bñ!"ô !"ð !"ð 0MÐ/LØ$-¸]ð0"ñ 0"ô 0" ð  ,ð "ð 0DÐ/CØ$-¨xÀð0"ñ 0"ô 0" õ 7:Ø$(¨,¸Ñ*=ñ7"ô 7"Ð 3ð $<Ð#;Ø$-¨xØ,?ð$"ñ $"ô $"ð !-ð %7×$=Ò$=¸hÑ$GÔ$GÐ$GÙ$,õ
 !&Ø$g¨XÐ$gÐ$gÐ$gñ!"ô !"ð !"õ '1¤nØ )¨Y¸Ð,AÑ AØ/3Ø%)Ø(*ð	'ñ 'ô '˜Gð  'Ô1°QÒ6Ð6ð $<Ð#;Ø$-¨xÀð$"ñ $"ô $"ð !*ð %7×$=Ò$=¸hÑ$GÔ$GÐ$GÑ$Gõ
 %*Ø([°Ð([Ð([Ð([ñ%&ô %&ð %&õ -7¬NØ(1°YÀÐ4IÑ(IØ7;Ø-1Ø02ð	-&ñ -&ô -& Eð (@Ð'?Ø(1°8ÀTð(&ñ (&ô (&ð 
%*ð );×(AÒ(AÀ(Ñ(KÔ(KÐ(KÝ(-Ð.T°xÐ.TÐ.TÐ.TÑ(UÔ(UÐ(UÑ(Uå(-ð-H°Xð -Hð -HØT\ð-Hð -Hà\aÐekÒ\kÐ\kÈyÈyÐqsð-Hð -Hð ~Fð-Hð -Hñ)*ô )*ð )*ñ )*õ !&Ø$c¸xÐ$cÐ$cÈ7Ì>×K_ÒK_ÑKaÔKaÐ$cÐ$cñ!"ô !"ð !"ñ !"ñs{"øõx .­zÔ/HÐIð ð ð Ø™ðøøøð ˆx‰zŒzð ððð ð ð ð ð ð ð ð ð ð "8Ð!7Ñ!9Ô!9�JØ!×(Ò(Ñ*Ô*ð QÝ *¤Ø(¨&Ð2CÐ2CÑ2EÔ2EÐFØ+/Ø!%Ø$%ð	!ñ !ô !˜ð !Ô+¨qÒ0Ð0ðQØ / Ñ 1Ô 1Ð 1Ø 2× 9Ò 9Ð:KÐ:KÑ:MÔ:MÑ NÔ NÐ NÐ NøÝ#-Ô#@ð Qð Qð QÝ*1°!°X¸rÑ*BÔ*BÐ*HÀb×)OÒ)OÑ)QÔ)Q Ý %Ð&OÀvÐ&OÐ&OÑ PÔ PÐ PÐ PÐ PÐ PÐ PÐ PøøøøðQøøøøøõ *­:Ô+DÅkÐRð ð ð Ø�Dðøøøð -Ð,Ñ.Ô.ˆLØ+Ð+Ø)¸ðñ ô ˆKð #ð ð �ðÝ”G˜C ¤Ñ1Ô1Ð1Ø—O’O CÑ(Ô(Ð(Ð(øÝ*­OÐ<ð ð ð Ø�Dðøøøð "ð  [ð Ý‘”�Ø-ð 4ð 4�CÝÐ2¨SÐ2Ð2Ñ3Ô3Ð3Ð3Øð ÝÐX­3¨{Ñ+;Ô+;ÐXÐXÐXÑYÔYÐYÝÐDÑEÔEÐEå˜;Ñ'Ô'¨!Ò+Ð+ÝØYñô ð ð &ð ¨kð àøøåð 	Hð 	Hð 	HÝ�LŠLÐCÀQÑGÔGÐGÐGÐGÐGÐGÐGøøøøð	Høøøð	Jðð ð ð ð ð ð ð ð ð ð )Ð(Ñ*Ô*ð CÐ/FÐ/FÑ/HÔ/Hð CÝ‘”�ÝÐCÑDÔDÐDØ*CÐ*CÑ*EÔ*Eð :ð :Ñ&�D˜$ Ø(.Ð:˜H˜H°F�EÝÐ8 Ð8Ð8¨%Ð8Ð8Ð8Ñ9Ô9Ð9Ð9Ý‘”�ÝÐSÑTÔTÐTÝÐTÑUÔUÐUÝÐ7Ñ8Ô8Ð8Ý‘”�ÝÐ9Ñ:Ô:Ð:Ý‘”�ÝÐAÑBÔBÐBøøÝð 	Jð 	Jð 	JÝ�LŠLÐEÀqÑIÔIÐIÐIÐIÐIÐIÐIøøøøð	Jøøøõ 	‰ŒˆÝÐ=Ñ>Ô>Ð>ÝÐGÑHÔHÐHÐHÐHøåÔ(ð ð ð ÝŒ<˜7Ò"Ð"ÝÐ/¨AÐ/Ð/Ñ0Ô0Ð0ÝÐ7Ñ8Ô8Ð8Ý‰GŒGˆGÝ˜DÑ!Ô!Ð!Ð!åÐ+¨Ð+Ð+Ñ,Ô,Ð,ÝŒH�Q‰KŒKˆKˆKˆKˆKˆKˆKˆKð "Ð!Ð!Ð!Ð!Ð!øøøøðøøøs¿  ÅJ)AT( Ï:$AT( ÐC)U	 ÔAAT( Õ	AVÖCAT( Ù!Y? Ù>AT( Ù?:Z<Ú9AT( Ú;Z<Ú<AAT( Ü\/ Ü.AT( Ü/
\<Ü9AT( Ü;\<Ü<AT( Ý E0b1 â0AT( â1
c â;cãAT( ãc ã AT( ã$Ai0 ä4Dh<è:i0 è<
i,éi'é!i0 é'i,é,i0 é/AT( é0
i=é:AT( é<i=é=AT( ê%j' ê&AT( ê'
j4ê1AT( ê3j4ê4EAT( ð3p9 ð8AT( ð9qñAT( ñqñB.AT( ó7t ôAT( ô
t5ôt0ô+AT( ô0t5ô5AT( õu" õ!AT( õ"
u/õ,AT( õ.u/õ/AT( õ3AAN7 ÷w ÷AN7 ÷w"÷AN7 ÷!w"÷"AN7 ÷(:x# ø"AN7 ø#
x0ø-AN7 ø/x0ø0AN7 ø4 y ùAN7 ù y8ù5AN7 ù7y8ù81AN7 ú*
z5 ú4AN7 ú5
{ú?AN7 û{ûAN7 ûCAF5þ*A	4ÿ3AF5ÿ4A@Á@AF5Á@A@Á@FAF5ÁF3AN7 ÁF5AGÁGAN7 ÁGAGÁGAN7 ÁGAAJ0 ÁH4'AI ÁIAJ0 ÁIAJ,ÁI+7AJ'ÁJ"AJ0 ÁJ'AJ,ÁJ,AJ0 ÁJ/AN7 ÁJ0AKÁKAN7 ÁKAKÁKAN7 ÁK./ALÁLAN7 ÁLAL2ÁL/AN7 ÁL1AL2ÁL2BAN7 ÁN6AT( ÁN7
AO&ÁOAO!ÁOAT( ÁO!AO&ÁO&AT( ÁO*CAS ÁSAT( ÁS
AS7ÁSAS2ÁS-AT( ÁS2AS7ÁS7/AT( ÁT(AV=ÁT7A5AV8ÁV8AV=r)   c                 óh  — h d£}h d£}g }d}|t          | ¦  «        k     �r| |         }||v r×|                     |¦  «         |dz  }g }|t          | ¦  «        k     r}| |                              d¦  «        sb| |         |vrX|                     | |         ¦  «         |dz  }|t          | ¦  «        k     r%| |                              d¦  «        s
| |         |v°X|r(|                     d                     |¦  «        ¦  «         n|                     |¦  «         |dz  }|t          | ¦  «        k     �°|S )a»  Join unquoted multi-word session names after -c/--continue and -r/--resume.

    When a user types ``hermes -c Pokemon Agent Dev`` without quoting the
    session name, argparse sees three separate tokens.  This function merges
    them into a single argument so argparse receives
    ``['-c', 'Pokemon Agent Dev']`` instead.

    Tokens are collected after the flag until we hit another flag (``-*``)
    or a known top-level subcommand.
    >#   Úacprã  r¤   ÚchatÚclawÚcronÚdumpr!  rŸ  Úloginrm   ÚsetupÚtoolsÚbackuprÅ  ÚdoctorÚhonchoÚimportÚlogoutÚmemoryr  r¢   rŒ   rV  ÚpairingÚpluginsÚprofiler  ÚwebhookÚinsightsr«   r1  Ú	dashboardr  Ú
completion>   r¬  ú-rú--resumeú
--continuer   r   rz  r¼   )r+   rµ  r,   rN  )r)   Ú_SUBCOMMANDSÚ_SESSION_FLAGSr»  r<   rK  r¼  s          r   Ú_coalesce_session_name_argsrì  æ  sY  € ð$ð $ð $€LðJ <Ð;Ð;€Nà€FØ	€AØ
�c�$‰iŒiŠ-‰-Ø�Q”ˆØ�NÐ"Ð"Ø�MŠM˜%Ñ Ô Ð Ø�‰FˆAàˆEà•C˜‘I”I’�Ø˜Qœ×*Ò*¨3Ñ/Ô/ð à˜”G <Ð/Ð/à—’˜T !œWÑ%Ô%Ð%Ø�Q‘�ð •C˜‘I”I’�Ø˜Qœ×*Ò*¨3Ñ/Ô/ð à˜”G <Ð/Ð/ð ð /Ø—’˜cŸhšh u™oœoÑ.Ô.Ð.øà�MŠM˜%Ñ Ô Ð Ø�‰FˆAð% �c�$‰iŒiŠ-‰-ð& €Mr   c                 ó‚  — ddl m}m}m}m}m}m}m}m}m	}	m
}
m} ddlm} t          | dd¦  «        }|€ý |¦   «         } |¦   «         }t          d|› �¦  «         t          d|› �¦  «          |¦   «         }|D ]¨}|j        |k    s|dk    r•|j        rŽ|j        r,t          d	|j        › �|j        rd
|j        › d�ndz   ¦  «         t          d|j        rdnd› �¦  «         t          d|j        › d�¦  «         |j        rt          d|j        › d|j        › �¦  «          nŒ©t          ¦   «          dS |dk    rì |¦   «         } |¦   «         }|st          d¦  «         dS t          ddd›ddd›ddd›dd› �¦  «         t          dd› d d!› d d"› d d#› �¦  «         |D ]y}|j        |k    s|dk    r	|j        rd$nd%}|j        }|j        pd&dd'…         }|j        rdnd}|j        r|j        nd&}|j        rd&}t          |› |d(›d|d›d|d›d|› �¦  «         Œzt          ¦   «          dS |d)k    r„| j        }	  ||¦  «         |dk    rt          d*¦  «         nt          d+|› �¦  «         dS dS # t0          t2          f$ r1}t          d,|› �¦  «         t5          j        d-¦  «         Y d}~dS d}~ww xY w|d.k    �ra| j        }t          | d/d0¦  «        }t          | d1d0¦  «        }t          | d2d0¦  «        }	 t          | d3d¦  «        } ||||||¬4¦  «        }t          d5|› d6|› �¦  «         |s|rDt          | d3d¦  «        p	 |¦   «         }|rt          d7|› d8�¦  «         nt          d9|› d8�¦  «         |s|r6	 dd:lm}  ||¦  «        rt          d;|› d�¦  «         n# t<          $ r Y nw xY w|se ||¦  «        } | r6t?          |                       d<g ¦  «        ¦  «        }!t          |!› d=�¦  «         n"t          d> !                    |¦  «        ¦  «         |s« ||¦  «        }"|"r<t          d?|› d@|"› �¦  «         t          dA|› dB�¦  «         t          dC|› dD�¦  «         nb ||¦  «        }#|#rUt          dE|#› �¦  «          |
¦   «         s9t          dF |¦   «         › dG�¦  «         t          dH¦  «         t          dI¦  «         	 dJtE          | #                    tI          j%        ¦   «         ¦  «        ¦  «        z   }$n# t0          $ r tE          |¦  «        }$Y nw xY wt          dK¦  «         t          d%|› dL�¦  «         t          d%|› dM�¦  «         t          d%|› dN�¦  «         |s|r't          dO|$› dP�¦  «         t          dQ|$› dR�¦  «         n5t          dS|› dT�¦  «         t          dU¦  «         t          dQ|$› dV�¦  «         t          ¦   «          dS # t0          tL          t2          f$ r1}t          d,|› �¦  «         t5          j        d-¦  «         Y d}~dS d}~ww xY w|dWk    rm| j        }t          | dXd0¦  «        }%	  |||%¬Y¦  «         dS # t0          t2          f$ r1}t          d,|› �¦  «         t5          j        d-¦  «         Y d}~dS d}~ww xY w|dZk    �rz| j        }dd[l m'}&m(}'m)}(m*})m+}*  |'|¦  «        s't          d\|› d]�¦  «         t5          j        d-¦  «          |&|¦  «        } |(|¦  «        \  }}+ |)|¦  «        } |*|¦  «        }, |¦   «         |z  }-t          d^|› �¦  «         t          d_|› �¦  «         |rt          d`|› �|+rd
|+› d�ndz   ¦  «         t          da|rdnd› �¦  «         t          db|,› �¦  «         t          dc|ddz   ,                    ¦   «         rdendf› �¦  «         t          dg|dhz   ,                    ¦   «         rdendf› �¦  «         |- ,                    ¦   «         rt          di|-› �¦  «         t          ¦   «          dS |djk    �r4| j        }t          | dkd0¦  «        }.t          | dld¦  «        }/ddml m(}'  |'|¦  «        s't          d\|› d]�¦  «         t5          j        d-¦  «         |/p|}0|.r5 |	|0¦  «        rt          dn|0› do�¦  «         dS t          dp|0› dq�¦  «         dS  ||0¦  «        }"|"r&t          d,|"› �¦  «         t5          j        d-¦  «          ||0¦  «        }#|#rT|/r|# -                    dr|› ds�¦  «         t          dt|#› �¦  «          |
¦   «         st          du |¦   «         › dG�¦  «         dS dS dS |dvk    rœddwl m.}1 	  |1| j/        | j0        ¦  «        }2t          dx| j/        › dy| j0        › �¦  «         t          dz|2› d{�¦  «         dS # t0          tL          t2          f$ r1}t          d,|› �¦  «         t5          j        d-¦  «         Y d}~dS d}~ww xY w|d|k    r‚dd}l m1}3 | j        }| j2        p|› d~�}4	  |3||4¦  «        }5t          d|› d€|5› �¦  «         dS # t0          t2          f$ r1}t          d,|› �¦  «         t5          j        d-¦  «         Y d}~dS d}~ww xY w|d�k    rËdd‚l m3}6 	  |6| j4        t          | dƒd¦  «        ¬„¦  «        }|j        }t          d…|› d†|› �¦  «          ||¦  «        }"|"s ||¦  «        }#|#rt          d‡|#› �¦  «         t          ¦   «          dS # t0          tL          t2          f$ r1}t          d,|› �¦  «         t5          j        d-¦  «         Y d}~dS d}~ww xY wdS )ˆu;   Profile management â€” create, delete, list, switch, alias.r   )r_  Úcreate_profileÚdelete_profilera  Úset_active_profiler`  Úcheck_alias_collisionÚcreate_wrapper_scriptÚremove_wrapper_scriptÚ_is_wrapper_dir_in_pathÚ_get_wrapper_dirrÇ  Úprofile_actionNz
Active profile: zPath:           r   zModel:          rˆ  rÖ   rn   zGateway:        ÚrunningÚstoppedzSkills:         z
 installedzAlias:          u    â†’ hermes -p rë   zNo profiles found.z
 ÚProfilez<16r¼   ÚModelz<28ÚGatewayz<12ÚAliasu-   â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€r±  uQ   â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€u!   â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€u$   â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€u    â—†r¹   õ   â€”é   z<15Úusez Switched to: default (~/.hermes)zSwitched to: r'   r   ÚcreateÚcloneFÚ	clone_allÚno_aliasÚ
clone_from)r?   r  r  Úclone_configr  z

Profile 'z' created at zFull copy from r(  z"Cloned config, .env, SOUL.md from )Úclone_honcho_for_profilezHoncho config cloned (peer: r]  z bundled skills synced.u9   âš  Skills could not be seeded. Run `{} update` to retry.u   
âš  Cannot create alias 'u   ' â€” z/  Choose a custom alias:  hermes profile alias z --name <custom>z$  Or access via flag:     hermes -p z chatzWrapper created: u   
âš  z is not in your PATH.z3  Add to your shell config (~/.bashrc or ~/.zshrc):z(    export PATH="$HOME/.local/bin:$PATH"z~/z
Next steps:z0 setup              Configure API keys and modelz" chat               Start chattingz/ gateway start      Start the messaging gatewayz
  Edit z/.env for different API keysz  Edit z"/SOUL.md for different personalityu.   
  âš  This profile has no API keys yet. Run 'z setup' first,z8    or it will inherit keys from your shell environment.z!/SOUL.md to customize personalityÚdeleter  )r  rþ  )Úget_profile_dirÚprofile_existsÚ_read_config_modelÚ_check_gateway_runningÚ_count_skillszError: Profile 'z' does not exist.z

Profile: z	Path:    z	Model:   z	Gateway: z	Skills:  z	.env:    rG   r/   znot configuredz	SOUL.md: zSOUL.mdz	Alias:   ÚaliasÚremoveÚ
alias_name)r	  u   âœ“ Removed alias 'r  z
No alias 'z' found to remove.z#!/bin/sh
exec hermes -p z "$@"
u   âœ“ Alias created: u   âš  Úrename)Úrename_profilez
Profile renamed: rÓ   zPath: rÓ  Úexport)Úexport_profilez.tar.gzu   âœ“ Exported 'z' to rÝ  )Úimport_profileÚimport_namerc  u   âœ“ Imported profile 'z' at z  Wrapper created: )5r4   r_  rî  rï  ra  rð  r`  rñ  rò  ró  rô  rõ  r.   rÈ  r  r   r?   Ú
is_defaultrm   r   Úgateway_runningÚskill_countÚ
alias_pathr:   r5   r6   r   r   r   r  r7   r+   r†   Úformatr‰   Úrelative_tor   r±  ÚFileExistsErrorr  r	  r
  r  r  r/   r2  r  Úold_nameÚnew_namer  Úoutputr  Úarchive)7r   r_  rî  rï  ra  rð  r`  rñ  rò  ró  rô  rõ  rÈ  r
   r:   Údhhrà  r…  r¥   r}  r?   rm   Úgwr  r)  r  r  r  r  Úprofile_dirÚsource_labelr  r»  r]  Ú	collisionÚwrapper_pathÚprofile_dir_displayr  r  r	  r
  r  r  r   r  r  r  Úcustom_namer  r  Únew_dirr  r  Úresult_pathr  s7                                                          r   Úcmd_profiler+  0  s{  € ðð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð 5Ð4Ð4Ð4Ð4Ð4å�TÐ+¨TÑ2Ô2€Fà€~à.Ð.Ñ0Ô0ˆØ!Ð!Ñ#Ô#ˆÝÐ1 <Ð1Ð1Ñ2Ô2Ð2ÝÐ& Ð&Ð&Ñ'Ô'Ð'à �=‘?”?ˆØð 	ð 	ˆAØŒv˜Ò%Ð%¨,¸)Ò*CÐ*CÈÌÐ*CØ”7ð ÝØ4¨1¬7Ð4Ð4Ø12´ÐCÐ- ¤
Ð-Ð-Ð-Ð-ÀñEñô ð õ ØV°AÔ4EÐ'T y yÈ9ÐVÐVñô ð õ ÐB¨¬ÐBÐBÐBÑCÔCÐCØ”<ð NÝÐL¨Q¬VÐLÐLÀAÄFÐLÐLÑMÔMÐMØ�øÝ‰ŒˆØˆà�ÒÐØ �=‘?”?ˆØ(Ð(Ñ*Ô*ˆàð 	ÝÐ&Ñ'Ô'Ð'ØˆFõ 	ÐK�IÐKÐKÐK GÐKÐKÐK°)ÐKÐKÐKÀ'ÐKÐKÑLÔLÐLÝÐN�*ÐNÐN *ÐNÐN°*ÐNÐNÀ*ÐNÐNÑOÔOÐOàð 	Fð 	FˆAð ”F˜fÒ$Ð$¨°9Ò)<Ð)<ÀÄÐ)<ð �àð ð
 ”6ˆDØ”WÐ%  s¨ sÔ+ˆEØÔ/Ð>��°YˆBØœlÐ5�A”F�F°ˆEØŒ|ð Ø�Ý�VÐD˜TÐDÐDÐD¨ÐDÐDÐD°BÐDÐDÐD¸UÐDÐDÑEÔEÐEÐEÝ‰Œˆˆˆà	�5ŠˆØÔ ˆð	ØÐ˜tÑ$Ô$Ð$Ø�yÒ Ð ÝÐ9Ñ:Ô:Ð:Ð:åÐ, dÐ,Ð,Ñ-Ô-Ð-Ð-Ð-ð ;Ð:øõ Õ-Ð.ð 	ð 	ð 	Ý�-˜A�-�-Ñ Ô Ð ÝŒH�Q‰KŒKˆKˆKˆKˆKˆKˆKˆKøøøøð	øøøð 
�8Ò	Ñ	ØÔ ˆÝ˜˜g uÑ-Ô-ˆÝ˜D +¨uÑ5Ô5ˆ	Ý˜4 ¨UÑ3Ô3ˆðX	Ý   |°TÑ:Ô:ˆJà(˜.ØØ%Ø#Ø"Ø!ðñ ô ˆKõ Ð@ Ð@Ð@°;Ð@Ð@ÑAÔAÐAàð P˜	ð På˜D ,°Ñ5Ô5ÐRÐ9PÐ9PÑ9RÔ9Rð ð ð PÝÐ;¨LÐ;Ð;Ð;Ñ<Ô<Ð<Ð<åÐN¸|ÐNÐNÐNÑOÔOÐOð ð ˜	ð ðØRÐRÐRÐRÐRÐRà/Ð/°Ñ5Ô5ð FÝÐD¸TÐDÐDÐDÑEÔEÐEøøÝ ð ð ð Ø�Dðøøøð ð 
Ø,Ð,¨[Ñ9Ô9�Øð Ý  §¢¨H°bÑ!9Ô!9Ñ:Ô:�FÝ˜VÐ<Ð<Ð<Ñ=Ô=Ð=Ð=åØS×ZÒZØ ñô ñô ð ð ð OØ1Ð1°$Ñ7Ô7�	Øð OÝÐO¸ÐOÐOÀIÐOÐOÑPÔPÐPÝØ`È$Ð`Ð`Ð`ñô ð õ ÐLÀÐLÐLÐLÑMÔMÐMÐMà#8Ð#8¸Ñ#>Ô#>�LØ#ð OÝÐ@°,Ð@Ð@ÑAÔAÐAØ6Ð6Ñ8Ô8ð OÝ!Ð"TÐ+;Ð+;Ñ+=Ô+=Ð"TÐ"TÐ"TÑUÔUÐUÝ!Ø Vñô ð õ "Ð"MÑNÔNÐNð7Ø&*­S°×1HÒ1HÍÌÉÌÑ1UÔ1UÑ-VÔ-VÑ&VÐ#Ð#øÝð 7ð 7ð 7Ý&)¨+Ñ&6Ô&6Ð#Ð#Ð#ð7øøøõ Ð"Ñ#Ô#Ð#ÝÐM�tÐMÐMÐMÑNÔNÐNÝÐ?�tÐ?Ð?Ð?Ñ@Ô@Ð@ÝÐL�tÐLÐLÐLÑMÔMÐMØð X˜	ð XÝÐSÐ"5ÐSÐSÐSÑTÔTÐTÝÐWÐ 3ÐWÐWÐWÑXÔXÐXÐXåØZÀdÐZÐZÐZñô ð õ ÐQÑRÔRÐRÝÐVÐ 3ÐVÐVÐVÑWÔWÐWÝ‰GŒGˆGˆGˆGøå�OÕ->Ð?ð 	ð 	ð 	Ý�-˜A�-�-Ñ Ô Ð ÝŒH�Q‰KŒKˆKˆKˆKˆKˆKˆKˆKøøøøð	øøøð 
�8Ò	Ð	ØÔ ˆÝ�d˜E 5Ñ)Ô)ˆð	ØˆN˜4 SÐ)Ñ)Ô)Ð)Ð)Ð)øÝÕ-Ð.ð 	ð 	ð 	Ý�-˜A�-�-Ñ Ô Ð ÝŒH�Q‰KŒKˆKˆKˆKˆKˆKˆKˆKøøøøð	øøøð 
�6Ò	Ñ	ØÔ ˆð	
ð 	
ð 	
ð 	
ð 	
ð 	
ð 	
ð 	
ð 	
ð 	
ð 	
ð 	
ð 	
ð 	
ð ˆ~˜dÑ#Ô#ð 	ÝÐ< TÐ<Ð<Ð<Ñ=Ô=Ð=ÝŒH�Q‰KŒKˆKØ%�o dÑ+Ô+ˆØ,Ð,¨[Ñ9Ô9‰ˆˆxØ#Ð# KÑ0Ô0ˆØ�˜{Ñ+Ô+ˆØ"Ð"Ñ$Ô$ tÑ+ˆåÐ"˜DÐ"Ð"Ñ#Ô#Ð#ÝÐ'˜+Ð'Ð'Ñ(Ô(Ð(Øð 	PÝÐ%˜eÐ%Ð%¸XÐ)MÐ)9¨hÐ)9Ð)9Ð)9Ð)9È2ÑNÑOÔOÐOÝÐ: rÐ8˜)˜)¨yÐ:Ð:Ñ;Ô;Ð;ÝÐ"˜&Ð"Ð"Ñ#Ô#Ð#ÝØ[ [°6Ñ%9×$AÒ$AÑ$CÔ$CÐY˜˜ÐIYÐ[Ð[ñ	
ô 	
ð 	
õ 	Ø^ [°9Ñ%<×$DÒ$DÑ$FÔ$FÐ\˜˜ÐL\Ð^Ð^ñ	
ô 	
ð 	
ð �>Š>ÑÔð 	)ÝÐ'˜gÐ'Ð'Ñ(Ô(Ð(Ý‰Œˆˆˆà	�7Ò	Ñ	ØÔ ˆÝ˜˜x¨Ñ/Ô/ˆÝ˜d L°$Ñ7Ô7ˆà6Ð6Ð6Ð6Ð6Ð6àˆ~˜dÑ#Ô#ð 	ÝÐ< TÐ<Ð<Ð<Ñ=Ô=Ð=ÝŒH�Q‰KŒKˆKà Ð( Dˆ
àð 	LØ$Ð$ ZÑ0Ô0ð CÝÐ9¨JÐ9Ð9Ð9Ñ:Ô:Ð:Ð:Ð:åÐA :ÐAÐAÐAÑBÔBÐBÐBÐBà-Ð-¨jÑ9Ô9ˆIØð ÝÐ+ 	Ð+Ð+Ñ,Ô,Ð,Ý”˜‘”�Ø0Ð0°Ñ<Ô<ˆLØð Làð XØ ×+Ò+Ð,VÈÐ,VÐ,VÐ,VÑWÔWÐWÝÐ:¨LÐ:Ð:Ñ;Ô;Ð;Ø.Ð.Ñ0Ô0ð LÝÐJÐ!1Ð!1Ñ!3Ô!3ÐJÐJÐJÑKÔKÐKÐKÐKðLð Lð
Lð Lð 
�8Ò	Ð	Ø6Ð6Ð6Ð6Ð6Ð6ð	Ø$�n T¤]°D´MÑBÔBˆGÝÐK¨¬ÐKÐK¸D¼MÐKÐKÑLÔLÐLÝÐ&˜7Ð&Ð&Ð&Ñ'Ô'Ð'Ð'Ð'øÝ�OÕ->Ð?ð 	ð 	ð 	Ý�-˜A�-�-Ñ Ô Ð ÝŒH�Q‰KŒKˆKˆKˆKˆKˆKˆKˆKøøøøð	øøøð 
�8Ò	Ð	Ø6Ð6Ð6Ð6Ð6Ð6àÔ ˆØ”Ð0 4Ð 0Ð 0Ð 0ˆð	Ø(˜.¨¨vÑ6Ô6ˆKÝÐ; 4Ð;Ð;¨kÐ;Ð;Ñ<Ô<Ð<Ð<Ð<øÝÕ-Ð.ð 	ð 	ð 	Ý�-˜A�-�-Ñ Ô Ð ÝŒH�Q‰KŒKˆKˆKˆKˆKˆKˆKˆKøøøøð	øøøð 
�8Ò	Ð	Ø6Ð6Ð6Ð6Ð6Ð6ð	Ø(˜.Ø”¥7¨4°ÀÑ#EÔ#Eðñ ô ˆKð Ô#ˆDÝÐC¨4ÐCÐC°kÐCÐCÑDÔDÐDð .Ð-¨dÑ3Ô3ˆIØð @Ø4Ð4°TÑ:Ô:�Øð @ÝÐ>°Ð>Ð>Ñ?Ô?Ð?Ý‰GŒGˆGˆGˆGøÝ�OÕ->Ð?ð 	ð 	ð 	Ý�-˜A�-�-Ñ Ô Ð ÝŒH�Q‰KŒKˆKˆKˆKˆKˆKˆKˆKøøøøð	øøøð# 
Ð	sÝ   È13I( É(J*É9&J%Ê%J*Ë/BW
 Í2$N ÎW
 Î
N$Î!W
 Î#N$Î$DW
 Ò<6S3 Ó2W
 Ó3TÔW
 ÔTÔB9W
 ×
X×!&XØXØ4Y ÙZÙ&Z Ú ZåAf æg#æ2&gçg#è!h) è)i+è:&i&é&i+é;A7k4 ë4l<ì&l7ì7l<c           
      ó0  — 	 ddl }ddl}nq# t          $ rd}t          d¦  «         t          dt          › dt
          j        › d�¦  «         t          d|› �¦  «         t          j        d¦  «         Y d}~nd}~ww xY wd	t          j	        vr-t          t          d
z  d¬¦  «        st          j        d¦  «         ddlm} | j        p"t          j	                             d¦  «        dk    } || j        | j        | j         t%          | dd¦  «        |¬¦  «         dS )zStart the web UI server.r   Nz;Web UI dependencies not installed (need fastapi + uvicorn).zMRe-install the package into this interpreter so metadata updates apply:
  cd z
  zP -m pip install -e .
If `pip` is missing in this venv, use:  uv pip install -e .zImport error: r   ÚHERMES_WEB_DISTr[  Tr?  )Ústart_serverÚHERMES_DASHBOARD_TUIrÑ  r[  F)ÚhostÚportÚopen_browserÚallow_publicÚembedded_chat)ÚfastapiÚuvicornr   r   r°  r   rð  r   r8   r9   rF  Úhermes_cli.web_serverr.  rf  r†   r0  r1  Úno_openr  )r   r5  r6  r)  r.  r4  s         r   Úcmd_dashboardr9  \  sf  € ðØˆˆˆØˆˆˆˆøÝð 	ð 	ð 	ÝÐKÑLÔLÐLÝðJÝ ðJð Jå”ðJð Jð Jñ	
ô 	
ð 	
õ 	Ð"˜qÐ"Ð"Ñ#Ô#Ð#ÝŒ�‰Œˆˆˆˆˆˆøøøøð	øøøð ¥¤
Ð*Ð*Ý�\¨EÑ1¸Ð>Ñ>Ô>ð 	ÝŒH�Q‰KŒKˆKà2Ð2Ð2Ð2Ð2Ð2à”HÐM¥¤
§¢Ð/EÑ FÔ FÈ#Ò M€MØ€LØŒYØŒYØœÐ%Ý˜T :¨uÑ5Ô5Ø#ðñ ô ð ð ð s   ‚ ‹
A9•AA4Á4A9c                 óì   — ddl m}m}m} t	          | dd¦  «        }|dk    rt           ||¦  «        ¦  «         dS |dk    rt           ||¦  «        ¦  «         dS t           ||¦  «        ¦  «         dS )zPrint shell completion script.r   )Úgenerate_bashÚgenerate_zshÚgenerate_fishÚshellr«  ÚzshÚfishN)Úhermes_cli.completionr;  r<  r=  r  r   )r   r   r;  r<  r=  r>  s         r   Úcmd_completionrB  |  s�   € àPÐPÐPÐPÐPÐPÐPÐPÐPÐPå�D˜' 6Ñ*Ô*€EØ�‚~€~Ýˆlˆl˜6Ñ"Ô"Ñ#Ô#Ð#Ð#Ð#Ø	�&ŠˆÝˆmˆm˜FÑ#Ô#Ñ$Ô$Ð$Ð$Ð$åˆmˆm˜FÑ#Ô#Ñ$Ô$Ð$Ð$Ð$r   c                 ó8  — ddl m}m} t          | dd¦  «        pd}|dk    r |¦   «          dS  ||t          | dd¦  «        t          | d	d
¦  «        t          | dd¦  «        t          | dd¦  «        t          | dd¦  «        t          | dd¦  «        ¬¦  «         dS )z!View and filter Hermes log files.r   )Útail_logÚ	list_logsÚlog_namer  rë   NÚlinesr  ÚfollowFÚlevelra  ÚsinceÚ	component)Ú	num_linesrH  rI  ra  rJ  rK  )Úhermes_cli.logsrD  rE  r  )r   rD  rE  rF  s       r   Úcmd_logsrN  ‰  sË   € à3Ð3Ð3Ð3Ð3Ð3Ð3Ð3å�t˜Z¨Ñ1Ô1Ð<°W€Hà�6ÒÐØˆ	‰ŒˆØˆà€HØÝ˜$ ¨Ñ,Ô,Ý�t˜X uÑ-Ô-Ý�d˜G TÑ*Ô*Ý˜˜i¨Ñ.Ô.Ý�d˜G TÑ*Ô*Ý˜$ ¨TÑ2Ô2ðñ ô ð ð ð r   c                  ólm  ‡®‡¯‡°‡±— t          j        ddt           j        d¬¦  «        Š°‰°                     dddd¬	¦  «         ‰°                     d
dddd¬¦  «         ‰°                     dddd¬¦  «         ‰°                     ddd¬¦  «         ‰°                     ddddd¬¦  «         ‰°                     dddddddd ¬!¦  «         ‰°                     d"d#dd$d%¬&¦  «         ‰°                     d'dd$d(¬&¦  «         ‰°                     d)d*d+dd,¬&¦  «         ‰°                     d-dd$d.¬&¦  «         ‰°                     d/dd$d0¬&¦  «         ‰°                     d1dd$d2¬&¦  «         ‰°                     d3dd$d4¬&¦  «         ‰°                     d5dd$d6¬&¦  «         ‰°                     d7d8dd$d9¬:¦  «         ‰°                     d;d<¬=¦  «        } |                      d>d?d@¬A¦  «        }|                     dBdCdD¬E¦  «         |                     dFdG¬E¦  «         |                     dddH¬E¦  «         |                     dIdJdK¬E¦  «         |                     d*d)d+t           j        d,¬&¦  «         |                     dg dL¢ddM¬N¦  «         |                     dOdPddQ¬	¦  «         |                     dRdSddT¬	¦  «         |                     dddUt           j        dV¬¦  «         |                     dddddt           j        dd ¬!¦  «         |                     d"d#dt           j        dW¬&¦  «         |                     d'dt           j        dX¬&¦  «         |                     dYdd$dZ¬&¦  «         |                     d[t          dd\d]¬^¦  «         |                     d-dt           j        d.¬&¦  «         |                     d/dt           j        d0¬&¦  «         |                     d1dt           j        d_¬&¦  «         |                     d3dt           j        d`¬&¦  «         |                     daddb¬¦  «         |                     d5dd$d6¬&¦  «         |                     d7d8dd$d9¬:¦  «         |                     t          ¬c¦  «         |                      dddedf¬A¦  «        }|                     dgdh¬E¦  «         |                     didj¬E¦  «         |                     dkddl¬¦  «         |                     dmddn¬¦  «         |                     doddp¬	¦  «         |                     dqt          drds¬t¦  «         |                     dudv¬E¦  «         |                     dwddx¬	¦  «         |                     t          ¬c¦  «         dydzlm} |                      d{d|d}¬A¦  «        }|                     d~¬¦  «        }|                     d€d�gd‚¬ƒ¦  «         |                     d„d…¬E¦  «         |                     d†d‡gdˆ¬ƒ¦  «         |                     d‰dŠ¬E¦  «         |                     |¬c¦  «         |                      d‹dŒd�¬A¦  «        }|                     dŽ¬¦  «        }|                     d�d�¬E¦  «        }|                     dOdPd‘dyd’¬&¦  «         |                     dBdSdd“¬	¦  «         |                     d”dd•¬	¦  «         t          |¦  «         t          |¦  «         |                     d–d—¬E¦  «        }	|	                     d˜dd™¬	¦  «         |	                     dšdd›¬	¦  «         |                     dœd�¬E¦  «        }
|
                     d˜dd™¬	¦  «         |
                     dšddž¬	¦  «         |                     dŸd ¬E¦  «        }|                     d˜dd™¬	¦  «         |                     dšdd¡¬	¦  «         |                     d¢d£¬E¦  «        }|                     d¤dd¥¬	¦  «         |                     d¦d§dd¨¬	¦  «         |                     d˜dd™¬	¦  «         |                     d©dª¬E¦  «        }|                     d«dd¬¬	¦  «         |                     d˜dd­¬	¦  «         |                     d®d¯d°¬=¦  «         |                     d±d²¬E¦  «        }|                     d˜dd™¬	¦  «         |                     d³d´¬E¦  «         |                     dµd¶d·¬A¦  «        }|                     d¸d¹ddº¬»¦  «         |                     d¼d½d¾dd¿¬»¦  «         |                     t          ¬c¦  «         |                      d³dÀdÁ¬A¦  «        }|                     dÂdg dÃ¢ddÄ¬Å¦  «         |                     dÆddÇ¬	¦  «         |                     dÈddÉ¬	¦  «         |                     dÊddË¬	¦  «         |                     dÌddÍ¬	¦  «         |                     t           ¬c¦  «         |                      dÎdÏdÐ¬A¦  «        }|                     t"          ¬c¦  «         |                      dÑdÒdÓ¬A¦  «        }|                     dÔ¬¦  «        }|                     dÕdÖd×¬A¦  «        }|                     dØddddÙdÚ¬Û¦  «         |                     dÜddÝ¬¦  «         |                     dÞddß¬¦  «         |                     dàddá¬	¦  «         |                     t$          ¬c¦  «         |                      dâdãdä¬A¦  «        }|                     ddådægddç¬N¦  «         |                     dgdè¬E¦  «         |                     didé¬E¦  «         |                     dkddê¬¦  «         |                     dmddë¬¦  «         |                     doddì¬	¦  «         |                     dqt          drdí¬t¦  «         |                     dudî¬E¦  «         |                     dwddï¬	¦  «         |                     t&          ¬c¦  «         |                      dðdñdò¬A¦  «        }|                     dg dó¢ddô¬N¦  «         |                     t(          ¬c¦  «         |                      dõdö¬E¦  «        }|                     d÷¬¦  «        }|                     d„dø¬E¦  «        }|                     dùdú¬E¦  «         |                     dûdüg dý¢dþ¬ÿ¦  «         |                     �d �d¬E¦  «         |                     �d�d¬E¦  «         |                     dg�d¬E¦  «         |                     di�d¬E¦  «         |                     dk�d¬E¦  «         |                     dm�d¬E¦  «         |                     dod�d¬	¦  «         |                     dqt          �d	�¬
¦  «         |                     dwd�d¬	¦  «         |                     du�d¬E¦  «         |                     d€�d¬E¦  «        }|                     dùd�d�¬¦  «         |                     d†�d¬E¦  «        }|                     dù�d¬E¦  «         |                     �d�d¬E¦  «         |                     �d�d¬E¦  «        }|                     dù�d¬E¦  «         |                     d¢�d¬E¦  «        }|                     dù�d¬E¦  «         |                     dð�d¬E¦  «        }|                     dù�d¬E¦  «         |                     �d�d¬E¦  «        }|                     �ddg �d¢dâ�¬¦  «         |                     dk�d¬E¦  «         |                     �d�d¬E¦  «         |                     dm�d ¬E¦  «         |                     doddì¬	¦  «         |                     dqt          �d!�¬
¦  «         |                     t*          ¬c¦  «         |                      d¢�d"�d#¬A¦  «        } |                      dšd�d$¬	¦  «         |                      d¤d�d%¬	¦  «         |                      t,          ¬c¦  «         |                      �d&�d'�d(¬A¦  «        }!|!                     �d)¬¦  «        }"|"                     d€�d*¬E¦  «        }#|#                     dšd�d+¬	¦  «         |"                     �d,d„g�d-¬ƒ¦  «        }$|$                     �d.�d/¬E¦  «         |$                     �d0d�d1�¬¦  «         |$                     dÜ�d2¬E¦  «         |$                     �d3�d4¬E¦  «         |$                     �d5t          �d6�¬
¦  «         |$                     �d7�d8d+�d9¬»¦  «         |$                     �d:�d;¬E¦  «         |$                     �d<�d=¬E¦  «         |"                     �d>�d?¬E¦  «        }%|%                     �d@�dA¬E¦  «         |%                     �dB�dC¬E¦  «         |%                     �dD�dE¬E¦  «         |%                     dÜ�dF¬E¦  «         |%                     �d3�dG¬E¦  «         |%                     �d5t          �dH�¬
¦  «         |%                     �d7�d8d+�dI¬»¦  «         |%                     �dJ�dKd+�dL¬»¦  «         |%                     �dM�dNd+�dO¬»¦  «         |%                     �dPd�dQ¬	¦  «         |%                     �d:�dR¬E¦  «         |%                     �d<�dS¬E¦  «         |"                     �dT�dU¬E¦  «        }&|&                     �d@�dV¬E¦  «         |"                     �dW�dX¬E¦  «        }'|'                     �d@�dY¬E¦  «         |"                     d��dZ¬E¦  «        }(|(                     �d@�d[¬E¦  «         t          |(¦  «         |"                     d†d‡�d\g�d]¬ƒ¦  «        })|)                     �d@�d^¬E¦  «         |"                     d¢�d_¬E¦  «         |"                     �d`�da¬E¦  «        }*t          |*¦  «         t          |!¦  «         |!                     t.          ¬c¦  «         |                      �db�dc�dd¬A¦  «        }+|+                     �de¬¦  «        },|,                     �dfd„g�dg¬ƒ¦  «        }-|-                     �dh�di¬E¦  «         |-                     �dD�dj�dk¬¦  «         |-                     �dl�dj�dm¬¦  «         |-                     dÞ�dj�dn¬¦  «         |-                     d)�dj�do¬¦  «         |-                     �d3�dp�dq¬¦  «         |-                     �dr�dj�ds¬¦  «         |-                     �dt�dj�du¬¦  «         |-                     �dvd�dw¬	¦  «         |,                     d€d�g�dx¬ƒ¦  «         |,                     d†d‡g�dy¬ƒ¦  «        }.|.                     �dh�dz¬E¦  «         |,                     �d{�d|¬E¦  «        }/|/                     �dh�d}¬E¦  «         |/                     �d~�dj�d¬¦  «         |+                     t0          ¬c¦  «         |                      �d€�d��d‚¬A¦  «        }0|0                     �dƒ¬¦  «        }1|1                     d€d�g�d„¬ƒ¦  «         |1                     �d{�d…¬E¦  «        }2|2                     �d†�d‡¬E¦  «         |2                     �dˆ�d‰d�dŠ�¬‹¦  «         |2                     �dŒ�d�d�dŽ�¬‹¦  «         |1                     �d�d†d‡g�d�¬ƒ¦  «        }3|3                     d;�d‘¬E¦  «         |1                     �d’�d“¬E¦  «         |0                     t2          ¬c¦  «         |                      �d’�d”�d•¬A¦  «        }4|4                     �d–d�d—¬	¦  «         |4                     t4          ¬c¦  «         |                      �d˜�d™�dš¬A¦  «        }5|5                     �d›d�dœ¬	¦  «         |5                     t6          ¬c¦  «         |                      �d��dž�dŸt           j        �d �¬¡¦  «        }6|6                     �d¢¬¦  «        }7|7                     �d£�d¤¬E¦  «        }8|8                     �d¥t          �d¦�d§¬t¦  «         |8                     �d¨t          �d©�dª¬t¦  «         |8                     �d«d�d¬¬	¦  «         |7                     �d\�d­¬E¦  «        }9|9                     �d®�d¯g �d°�¬±¦  «         |6                     t8          ¬c¦  «         |                      �d²�d³�d´¬A¦  «        }:|:                     �dµ�d¶�d·¬E¦  «         |:                     dBdÌd�d¸¬	¦  «         |:                     d¦�d �d¹¬E¦  «         |:                     t:          ¬c¦  «         |                      �dº�d»�d¼¬A¦  «        };|;                     �d½�d¾¬E¦  «         |;                     d«�d¿d�dÀ¬	¦  «         |;                     t<          ¬c¦  «         |                      �dÁ�dÂ�dÃ¬A¦  «        }<|<                     �dÄ¬¦  «        }=|=                     �dÅ�dÆ¬E¦  «         |=                     �d>�dÇ¬E¦  «         |=                     �dÈ�dÉ¬E¦  «        }>|>                     �dÊd�dË�¬¦  «         |>                     �dÌd�dÍ�¬¦  «         |=                     �dÎ�dÏ¬E¦  «         |=                     �dÐ�dÑ¬E¦  «         |=                     �dÒ�dÓ¬E¦  «         |=                     �dÔ�dÕ¬E¦  «         |<                     t>          ¬c¦  «         |                      �dÖ�d×�dØ¬A¦  «        }?|?                     �dÙ¬¦  «        }@|@                     d€�dÚ¬E¦  «         |@                     �dÛ�dÜ¬E¦  «        }A|A                     �dÝ�dÞ¬E¦  «         |A                     �dß�dà¬E¦  «         |@                     �d��dá¬E¦  «        }B|B                     �dÝ�dâ¬E¦  «         |B                     �dã�dä¬E¦  «         |@                     �då�dæ¬E¦  «         �dç„ }C|?                     |C¬c¦  «         |                      �d8�dè�dé¬A¦  «        }D|D                     �dê¬¦  «        }E|E                     �dë�dì¬E¦  «        }F|F                     �dít          �dî�dï¬t¦  «         |F                     �dðt          �dñ�dò¬t¦  «         |F                     da�dóg �dô¢�dõ�¬ö¦  «         |E                     �d÷�dø¬E¦  «        }G|G                     �dù�dú¬E¦  «         |G                     da�dóg �dô¢�¬û¦  «         |G                     �düt          �dý�dþ¬t¦  «         |E                     d©�dÿ¬E¦  «        }H|H                     �d �d¬E¦  «         |H                     �d�dj�d¬¦  «         |H                     d«d�d¬	¦  «         |H                     d½d¼d�d¬	¦  «         |E                     �d�d¬E¦  «        }I|I                     �d �d¬E¦  «         |E                     d€�d	¬E¦  «        }J|J                     da�dóg �d
¢�¬û¦  «         |J                     �dd�d¬	¦  «         |E                     �dÒ�d¬E¦  «        }K|K                     �dhd�d�¬¦  «         |E                     �d�d¬E¦  «        }L|L                     �dhd�d�¬¦  «         |E                     �d�d¬E¦  «        }M|M                     �dhd�d�¬¦  «         |E                     d±�d¬E¦  «        }N|N                     �dh�d¬E¦  «         |E                     �d�d�d¬A¦  «        }O|O                     �dh�d¬E¦  «         |O                     �dd�d¬	¦  «         |O                     d½d¼d�d¬	¦  «         |E                     �d�d¬E¦  «        }P|P                     �d�d ¬E¦  «         |P                     �d!�d"�d"�d#g�d$�¬ö¦  «         |P                     �d%�dj�d&¬¦  «         |E                     �d'�d(¬E¦  «        }Q|Q                     �d)¬¦  «        }R|R                     �d*�d+¬E¦  «        }S|S                     �d,�d-¬E¦  «         |R                     �dº�d.¬E¦  «        }T|T                     �d/�d0¬E¦  «         |T                     d«d�d1¬	¦  «         |E                     �d2�d3¬E¦  «        }U|U                     �d4¬¦  «        }V|V                     d€�d5¬E¦  «         |V                     d„�d6¬E¦  «        }W|W                     �d7�d8¬E¦  «         |V                     d†�d9¬E¦  «        }X|X                     �dh�d:¬E¦  «         |E                     �dÁ�d;¬E¦  «         �d<„ }Y|D                     |Y¬c¦  «         |                      �d=�d>�d?¬A¦  «        }Z|Z                     �d@¬¦  «        }[|[                     d©�dA¬E¦  «        }\|\                     �d �dB¬E¦  «         |\                     d«�d¿d�dC¬	¦  «         |\                      ¦   «         }]|]                     �dDd�dE¬	¦  «         |]                     �dFd�dG¬	¦  «         |[                     �d�dH¬E¦  «        }^|^                     �dh�dI¬E¦  «         |[                     d†d‡d±g�dJ¬ƒ¦  «        }_|_                     �dh�dK¬E¦  «         |[                     d€d�g�dL¬ƒ¦  «         |[                     �dM�dN¬E¦  «        }`|`                     �dh�dO¬E¦  «         |[                     �dP�dQ¬E¦  «        }a|a                     �dh�dR¬E¦  «         �dS„ }b|Z                     |b¬c¦  «         	 dy�dTl!m"}c  |c¦   «         D ]e}d|                      |d�dh         |d�dU         |d #                    �dV�dj¦  «        tI          �dW¦  «        j        �¬X¦  «        }e |d�dY         |e¦  «         ŒfnE# tJ          $ r8}ftM          j'        tP          ¦  «         )                    �dZ|f¦  «         Y d}f~fnd}f~fww xY w|                      �d[�d\�d]¬A¦  «        }g|g                     �d^¬¦  «        }h|h                     d³�d_¬E¦  «         |h                     d¢�d`¬E¦  «         |h                     �da�db¬E¦  «         |h                     �d�dc¬E¦  «        }i|i                     d½d¼d�dd¬	¦  «         |i                     �deg �df¢�dó�dg¬N¦  «         �dh„ }j|g                     |j¬c¦  «         |                      �di�dj�dk¬A¦  «        }k|k                     �dld�dm¬	¦  «         |k                     �dn¬¦  «        }l|l                     d€�do¬E¦  «        }m|m                     �dp�dq�dr¬¦  «         |l                     �dP�ds¬E¦  «        }n|n                     �dt�du�dv�dw�¬x¦  «         |n                     �dp�dq�dy¬¦  «         |l                     �dM�dz¬E¦  «        }o|o                     �dt�du�dv�d{�¬x¦  «         |o                     �dp�dq�dy¬¦  «         �d|„ }p|k                     |p¬c¦  «         |                      �d}�d~�d¬A¦  «        }q|q                     �d€¬¦  «        }r|r                     �d��d‚¬E¦  «        }s|s                     dOdPd�dƒ¬	¦  «         t          |s¦  «         |r                     d„�d„¬E¦  «        }t|t                     �dh�d…¬E¦  «         |t                     �d†�d‡¬E¦  «         |t                     �dˆ�d‰¬E¦  «         |t                     �dŠ�d¯g �d‹�¬±¦  «         |t                     �dŒ�d��dŽg�d��¬�¦  «         |t                     �d‘�d’¬E¦  «         |t                     �d“�d¯g �d”�¬±¦  «         |r                     d†d‡g�d•¬ƒ¦  «        }u|u                     �dh�d–¬E¦  «         |r                     d€d�g�d—¬ƒ¦  «         |r                     �d{�d˜¬E¦  «        }v|v                     �dh�d™¬E¦  «         |r                     �dš�dÁg�d›¬ƒ¦  «        }w|w                     �dh�dœ¬E¦  «         |r                     dâ�d�¬E¦  «        }x|x                     �dh�dž¬E¦  «         t          |q¦  «         �dŸ„ }y|q                     |y¬c¦  «         |                      �d �d¡�d¢¬A¦  «        Š±‰±                     �d£¬¦  «        }z|z                     d€�d¤¬E¦  «        }{|{                     da�d¥¬E¦  «         |{                     �düt          �dñ�d¦¬t¦  «         |z                     �d*�d§¬E¦  «        }|||                     �d,�d¨¬E¦  «         ||                     da�d©¬E¦  «         ||                     �dª�d«¬E¦  «         |z                     �d\�d¬¬E¦  «        }}|}                     �d­�d®¬E¦  «         |}                     d½d¼d�d¯¬	¦  «         |z                     �d°�d±¬E¦  «        }~|~                     �d²t          �d³�d´¬t¦  «         |~                     da�dµ¬E¦  «         |~                     d½d¼d�d¯¬	¦  «         |z                     �d¶�d·¬E¦  «         |z                     �d¸�d¹¬E¦  «        }|                     �d­�dº¬E¦  «         |                     �d»�du�d¼�¬¦  «         |z                     �dë�d½¬E¦  «        }€|€                     da�d¥¬E¦  «         |€                     �düt          �d¾�d¿¬t¦  «         �d0tT          �dÀtV          f�dÁ„Š®ˆ®ˆ±f�dÂ„}�‰±                     |�¬c¦  «         |                      �dÃ�dÄ�dÅ¬A¦  «        }‚|‚                     �dÆt          �dÇ�dÈ¬t¦  «         |‚                     da�dÉ¬E¦  «         �dÊ„ }ƒ|‚                     |ƒ¬c¦  «         |                      �dË�dÌ�dÍ¬A¦  «        }„|„                     �dÎ¬¦  «        }…|…                     �dÔ�dÏ�dÐ¬A¦  «        }†|†                     da�dÑ¬E¦  «         |†                     d¸d�dÒ¬	¦  «         |†                     �d‘�dÓ�dÔg�dÔ�dÕ¬N¦  «         |†                     �dÖd�d×¬	¦  «         |†                     �dØd�dÙ¬	¦  «         |†                     �dÚ�dÛ¬E¦  «         |†                     �dÜg �dÝ¢�dÞ�dß¬N¦  «         |†                     d½d¼d�dà¬	¦  «         |…                     �dá�dâg�dã�dä�¬å¦  «        }‡|‡                     da�dæ¬E¦  «         |‡                     d¸d�dç¬	¦  «         |‡                     d½d¼d�dà¬	¦  «         �dè„ }ˆ|„                     |ˆ¬c¦  «         |                      �dé�dê¬E¦  «        }‰|‰                     tX          ¬c¦  «         |                      �d�dë�dì¬A¦  «        }Š|Š                     �dídd$�dî¬&¦  «         |Š                     �dïdd$�dð¬&¦  «         |Š                     tZ          ¬c¦  «         |                      d±�dñ�dò¬A¦  «        }‹|‹                     d§d�dó¬	¦  «         |‹                     d½d¼d�dà¬	¦  «         |‹                     t\          ¬c¦  «         |                      �dô�dõ�dö¬A¦  «        }Œt          |Œ¦  «         �d÷„ }�|Œ                     |�¬c¦  «         |                      �dø�dù¬E¦  «        }Ž|Ž                     �dú¬¦  «        }�|�                     d€�dû¬E¦  «         |�                     �dü�dý¬E¦  «        }�|�                     �dþ�dÿ¬E¦  «         |�                     �d,�d ¬E¦  «        }‘|‘                     �dþ�d¬E¦  «         |‘                     �dd�d¬	¦  «         |‘                     �dd�d¬	¦  «         |‘                     �d�d�d�¬	¦  «         |‘                     �d
d�d¬	¦  «         |�                     �d\�d¬E¦  «        }’|’                     �dþ�d¬E¦  «         |’                     d¼d½d�dd¬	¦  «         |�                     �dÅ�d¬E¦  «        }“|“                     �dþ�d¬E¦  «         |�                     �d�d¬E¦  «        }”|”                     �dþ�d¬E¦  «         |”                     �dd�d¬	¦  «         |”                     dÜ�d�dv�d�¬¦  «         |�                     �d¸�d¬E¦  «        }•|•                     �d�d¬E¦  «         |•                     �d�d¬E¦  «         |�                     �d*�d¬E¦  «        }–|–                     �dþ�d¬E¦  «         |–                     �dµ�d¶d�d¬¦  «         |�                     �dº�d ¬E¦  «        }—|—                     �d!�d"¬E¦  «         |—                     dÜ�d#�dv�d$�¬¦  «         |Ž                     t^          ¬c¦  «         |                      �d%�d&¬E¦  «        }˜|˜                     �d'd�d(g �d)¢�d*�¬+¦  «         |˜                     ˆ°f�d,„¬c¦  «         |                      �d-�d.�d/¬A¦  «        }™|™                     �d0t          �d1�d2¬t¦  «         |™                     �d3�d4�d5¬¦  «         |™                     �d6d�d7¬	¦  «         |™                     dwd�d8¬	¦  «         |™                     d5d�d9¬	¦  «         |™                     t`          ¬c¦  «         |                      �d:�d;�d<t           j        �d=�¬¡¦  «        }š|š                     �d>d�d?�d@�¬±¦  «         |š                     �dA�d¥t          �d¾�dB¬t¦  «         |š                     �d¿�dCd�dD¬	¦  «         |š                     �dE�dF�dG�¬	¦  «         |š                     �dH�dI�dJ�¬	¦  «         |š                     �dK�dL�dM�¬	¦  «         |š                     �dN�dv�dO�¬	¦  «         |š                     tb          ¬c¦  «         dy�dPl2m3}›  |›¦   «         }œ|œr8ti          |œtj          j6        �dîd…         ¦  «         tk          j7        �dî¦  «         tq          tj          j6        �dîd…         ¦  «        }�dydl9}žtu          | �dQ¦  «        r&tw          | j<         =                    ¦   «         ¦  «        ntw          ¦   «         Š¯t}          ˆ¯f�dR„|�D ¦   «         ¦  «        }Ÿ|ŸrŸd| _?        tj          j@        } 	 |ž A                    ¦   «         tj          _@        ‰° B                    |�¦  «        }¡| tj          _@        ng# t†          $ r>}¢| tj          _@        |¢jD        dyk    r‚ d$| _?        ‰° B                    |�¦  «        }¡Y d}¢~¢n$d}¢~¢ww xY wd$| _?        ‰° B                    |�¦  «        }¡|¡jE        rtY          |¡¦  «         dS h �dS£}£�d)d��d`hfdŽd�hf�d€�d�hf�dTœ}¤|¤ #                    |¡jF        �dU¦  «        \  }¥}¦|¡jF        |£v s|¥rÇt�          |¡|¥d¦  «        |¦v r´tW          t�          |¡�dVd$¦  «        ¦  «        }§	 dy�dWlHmI}¨  |¨¦   «          n.# tJ          $ r! t”           )                    �dXd�¬Y¦  «         Y nw xY w	 dy�dZl2mK}© dy�d[lLmM}ª  |ª |©¦   «         |§�¬\¦  «         n.# tJ          $ r! t”           )                    �d]d�¬Y¦  «         Y nw xY wt�          |¡�d^d¦  «        rKdy�d_lNmO}« tk          j7         |«|¡jP        t�          |¡ddd¦  «        t�          |¡dùd¦  «        �¬`¦  «        ¦  «         |¡jQ        s|¡jR        rI|¡jF        €Bd>|¡_F        �daD ]&\  }¬}­tu          |¡|¬¦  «        st§          |¡|¬|­¦  «         Œ't          |¡¦  «         dS |¡jF        €;�dbD ]&\  }¬}­tu          |¡|¬¦  «        st§          |¡|¬|­¦  «         Œ't          |¡¦  «         dS tu          |¡�dc¦  «        r|¡ T                    |¡¦  «         dS ‰° U                    ¦   «          dS (d  z Main entry point for hermes CLI.Úhermesz:Hermes Agent - AI assistant with tool-calling capabilitiesaÂ  
Examples:
    hermes                        Start interactive chat
    hermes chat -q "Hello"        Single query mode
    hermes -c                     Resume the most recent session
    hermes -c "my project"        Resume a session by name (latest in lineage)
    hermes --resume <session_id>  Resume a specific session by ID
    hermes setup                  Run setup wizard
    hermes logout                 Clear stored authentication
    hermes auth add <provider>    Add a pooled credential
    hermes auth list              List pooled credentials
    hermes auth remove <p> <t>    Remove pooled credential by index, id, or label
    hermes auth reset <provider>  Clear exhaustion status for a provider
    hermes model                  Select default model
    hermes fallback [list]        Show fallback provider chain
    hermes fallback add           Add a fallback provider (same picker as `hermes model`)
    hermes fallback remove        Remove a fallback provider from the chain
    hermes config                 View configuration
    hermes config edit            Edit config in $EDITOR
    hermes config set model gpt-4 Set a config value
    hermes gateway                Run messaging gateway
    hermes -s hermes-agent-dev,github-auth
    hermes -w                     Start in isolated git worktree
    hermes gateway install        Install gateway background service
    hermes sessions list          List past sessions
    hermes sessions browse        Interactive session picker
    hermes sessions rename ID T   Rename/title a session
    hermes logs                   View agent.log (last 50 lines)
    hermes logs -f                Follow agent.log in real time
    hermes logs errors            View errors.log
    hermes logs --since 1h        Lines from the last hour
    hermes debug share             Upload debug report for support
    hermes update                 Update to latest version

For more help on a command:
    hermes <command> --help
)ÚprogÚdescriptionÚformatter_classÚepilogrU  z-Vr   zShow version and exit)r
   r   z-zz	--oneshotÚPROMPTNa  One-shot mode: send a single prompt and print ONLY the final response text to stdout. No banner, no spinner, no tool previews, no session_id line. Tools, memory, rules, and AGENTS.md in the CWD are loaded as normal; approvals are auto-bypassed. Intended for scripts / pipes.)Úmetavarr   r   rT  z--modelz›Model override for this invocation (e.g. anthropic/claude-sonnet-4.6). Applies to -z/--oneshot and --tui. Also settable via HERMES_INFERENCE_MODEL env var.)r   r   z
--providerz›Provider override for this invocation (e.g. openrouter, anthropic). Applies to -z/--oneshot and --tui. Also settable via HERMES_INFERENCE_PROVIDER env var.rè  rç  ÚSESSIONz(Resume a previous session by ID or titleré  r¬  rø  r^   TÚSESSION_NAMEz=Resume a session by name, or the most recent if no name given)ÚdestÚnargsÚconstr   rV  r   z
--worktreez-wFz5Run in an isolated git worktree (for parallel agents)r	   r   zÏAuto-approve any unseen shell hooks declared in config.yaml without a TTY prompt.  Equivalent to HERMES_ACCEPT_HOOKS=1 or hooks_auto_accept: true in config.yaml.  Use on CI / headless runs that can't prompt.z--skillsz-srµ  zJPreload one or more skills for the session (repeat flag or comma-separate)z--yolozDBypass all dangerous command approval prompts (use at your own risk)z--pass-session-idz3Include the session ID in the agent's system promptz--ignore-user-configzfIgnore ~/.hermes/config.yaml and fall back to built-in defaults (credentials in .env are still loaded)z--ignore-ruleszUSkip auto-injection of AGENTS.md, SOUL.md, .cursorrules, memory, and preloaded skillsz--tuiz1Launch the modern TUI instead of the classic REPLz--devrÁ  z<With --tui: run TypeScript sources via tsx (skip dist build))rY  r
   r   r   rX  zCommand to run)rY  r   rÓ  zInteractive chat with the agentz3Start an interactive chat session with Hermes Agent)r   rR  z-qz--queryz#Single query (non-interactive mode))r   z--imagez5Optional local image path to attach to a single queryz.Model to use (e.g., anthropic/claude-sonnet-4)z-tz
--toolsetsz"Comma-separated toolsets to enable)r_  ra  r’  r“  r–  r—  r˜  r�  rŸ  r¬  r¨  r   r™  r¡  rš  r¢  r£  r¤  r©  rª  r«  z"Inference provider (default: auto))r;  r   r   z-vz	--verbosezVerbose outputz-QrØ  z~Quiet mode for programmatic use: suppress banner, spinner, and tool previews. Only output the final response and session info.Ú
SESSION_IDz/Resume a previous session by ID (shown on exit)zFRun in an isolated git worktree (for parallel agents on the same repo)zžAuto-approve any unseen shell hooks declared in config.yaml without a TTY prompt (see also HERMES_ACCEPT_HOOKS env var and hooks_auto_accept: in config.yaml).z--checkpointsz[Enable filesystem checkpoints before destructive file operations (use /rollback to restore)z--max-turnsÚNzaMaximum tool-calling iterations per conversation turn (default: 90, or agent.max_turns in config))Útyper   rV  r   z°Ignore ~/.hermes/config.yaml and fall back to built-in defaults (credentials in .env are still loaded). Useful for isolated CI runs, reproduction, and third-party integrations.z’Skip auto-injection of AGENTS.md, SOUL.md, .cursorrules, memory, and preloaded skills. Combine with --ignore-user-config for a fully isolated run.z--sourcez†Session source tag for filtering (default: cli). Use 'tool' for third-party integrations that should not appear in user session lists.)Úfuncrm   z!Select default model and providerz>Interactively select your inference provider and default modelz--portal-urlz;Portal base URL for Nous login (default: production portal)z--inference-urlzIInference API base URL for Nous login (default: production inference API)z--client-idz;OAuth client id to use for Nous login (default: hermes-cli)z--scopez%OAuth scope to request for Nous loginz--no-browserzBDo not attempt to open the browser automatically during Nous loginz	--timeoutrY  z<HTTP request timeout in seconds for Nous login (default: 15))r^  r   r   z--ca-bundlez4Path to CA bundle PEM file for Nous TLS verificationz
--insecurez6Disable TLS verification for Nous login (testing only)r   )Úcmd_fallbackÚfallbackz>Manage fallback providers (tried when the primary model fails)zðManage the fallback provider chain.  Fallback providers are tried in order when the primary model fails with rate-limit, overload, or connection errors.  See: https://hermes-agent.nousresearch.com/docs/user-guide/features/fallback-providersÚfallback_command)rY  rë   Úlsz<Show the current fallback chain (default when no subcommand))Úaliasesr   r¡  zOPick a provider + model (same picker as `hermes model`) and append to the chainr  Úrmz&Pick an entry to delete from the chainrì   zRemove all fallback entriesrV  zMessaging gateway managementz:Manage the messaging gateway (Telegram, Discord, WhatsApp)r,  r6  z?Run gateway in foreground (recommended for WSL, Docker, Termux)rö  z2Increase stderr log verbosity (-v=INFO, -vv=DEBUG)zSuppress all stderr log outputz	--replacez:Replace any existing gateway instance (useful for systemd)rB   z6Start the installed systemd/launchd background servicez--systemz-Target the Linux system-level gateway servicez--allzDKill ALL stale gateway processes across all profiles before startingÚstopzStop gateway servicez.Stop ALL gateway processes across all profilesr’  zRestart gateway servicez@Kill ALL gateway processes across all profiles before restartingr¢   zShow gateway statusz--deepzDeep status checkz-lz--fullz9Show full, untruncated service/log output where supportedrË  z7Install gateway as a systemd/launchd background servicez--forcezForce reinstallz8Install as a Linux system-level service (starts at boot)z--run-as-userÚrun_as_userz3User account the Linux system service should run asr  zUninstall gateway servicerØ  zConfigure messaging platformszmigrate-legacyz;Remove legacy hermes.service units from pre-rename installszÖStop, disable, and remove legacy Hermes gateway unit files (e.g. hermes.service) left over from older installs. Profile units (hermes-gateway-<profile>.service) and unrelated third-party services are never touched.z	--dry-runÚdry_runz+List what would be removed without doing it)rY  r
   r   z-yz--yesr  zSkip the confirmation promptzInteractive setup wizardz~Configure Hermes Agent with an interactive wizard. Run a specific section: hermes setup model|tts|terminal|gateway|tools|agentÚsection)rm   ÚttsÚterminalrV  rÙ  r  z7Run a specific setup section instead of the full wizard)rZ  r;  r   r   z--non-interactivez,Non-interactive mode (use defaults/env vars)z--resetzReset configuration to defaultsz--reconfigureu¥   (Default on existing installs.) Re-run the full wizard, showing current values as defaults. Kept for backwards compatibility â€” a bare 'hermes setup' now does this.z--quickzvOn existing installs: only prompt for items that are missing or unset, instead of running the full reconfigure wizard.r1  zSet up WhatsApp integrationz'Configure WhatsApp and pair via QR codeÚslackz5Slack integration helpers (manifest generation, etc.)z%Slack integration helpers for Hermes.rî  rï  zvPrint or write a Slack app manifest with every gateway command registered as a native slash (/btw, /stop, /model, ...)u(  Generate a Slack app manifest that registers every gateway command in COMMAND_REGISTRY as a first-class Slack slash command (matching Discord and Telegram parity). Paste the output into Slack app config â†’ Features â†’ App Manifest â†’ Edit, then Save. Reinstall the app if Slack prompts for it.z--writer®  zdWrite manifest to a file instead of stdout. With no PATH writes to $HERMES_HOME/slack-manifest.json.)rZ  r[  r   rV  r   z--namez$Bot display name (default: "Hermes")z--descriptionz/Bot description shown in Slack's app directory.z--slashes-onlyz]Emit only the features.slash_commands array (for merging into an existing manifest manually).r×  z'Authenticate with an inference providerz2Run OAuth device authorization flow for Hermes CLIr’  r“  z-Provider to authenticate with (default: nous)z,Portal base URL (default: production portal)z:Inference API base URL (default: production inference API)z,OAuth client id to use (default: hermes-cli)zOAuth scope to requestz0Do not attempt to open the browser automaticallyz-HTTP request timeout in seconds (default: 15)z/Path to CA bundle PEM file for TLS verificationz'Disable TLS verification (testing only)rÞ  z.Clear authentication for an inference providerz3Remove stored credentials and reset provider config)r’  r“  Úspotifyz3Provider to log out from (default: active provider)r¤   z"Manage pooled provider credentialsÚauth_actionzAdd a pooled credentialr   z>Provider id (for example: anthropic, openai-codex, openrouter)z--typer‹   )Úoauthzapi-keyru   zCredential type to add)rY  r;  r   z--labelzOptional display labelz	--api-keyz+API key value (otherwise prompted securely)zNous portal base URLzNous inference base URLzOAuth client idzOAuth scope overridez*Do not auto-open a browser for OAuth loginz OAuth/network timeout in seconds)r^  r   z(Disable TLS verification for OAuth loginz Custom CA bundle for OAuth loginzList pooled credentialszOptional provider filter)rZ  r   z1Remove a pooled credential by index, id, or labelzProvider idrp  z*Credential index, entry id, or exact labelr‘  z:Clear exhaustion status for all credentials for a providerzShow auth status for a providerz.Log out a provider and clear stored auth staterm  z)Authenticate Hermes with Spotify via PKCEÚspotify_action)r×  r¢   rÞ  )rZ  r;  r   z7Spotify app client_id (or set HERMES_SPOTIFY_CLIENT_ID)z--redirect-uriz8Allow-listed localhost redirect URI for your Spotify appz!Override requested Spotify scopesz*Callback/token exchange timeout in secondszShow status of all componentsz)Display status of Hermes Agent componentsz'Show all details (redacted for sharing)z!Run deep checks (may take longer)rÕ  zCron job managementzManage scheduled tasksræ  zList scheduled jobszInclude disabled jobsr   zCreate a scheduled jobÚschedulez/Schedule like '30m', 'every 2h', or '0 9 * * *'r,  z2Optional self-contained prompt or task instructionz Optional human-friendly job namez	--deliverzNDelivery target: origin, local, telegram, discord, signal, or platform:chat_idz--repeatzOptional repeat countz--skillr  z.Attach a skill. Repeat to add multiple skills.z--scriptzIPath to a Python script whose stdout is injected into the prompt each runz	--workdirzÜAbsolute path for the job to run from. Injects AGENTS.md / CLAUDE.md / .cursorrules from that directory and uses it as the cwd for terminal/file/code_exec tools. Omit to preserve old behaviour (no project context files).ÚeditzEdit an existing scheduled jobÚjob_idzJob ID to editz
--schedulezNew schedulez--promptzNew prompt/task instructionzNew job namezNew delivery targetzNew repeat countzIReplace the job's skills with this set. Repeat to attach multiple skills.z--add-skillÚ
add_skillsz?Append a skill without replacing the existing list. Repeatable.z--remove-skillÚremove_skillsz-Remove a specific attached skill. Repeatable.z--clear-skillsz'Remove all attached skills from the jobzfPath to a Python script whose stdout is injected into the prompt each run. Pass empty string to clear.zqAbsolute path for the job to run from (injects AGENTS.md etc. and sets terminal cwd). Pass empty string to clear.ÚpausezPause a scheduled jobzJob ID to pauserù  zResume a paused jobzJob ID to resumez$Run a job on the next scheduler tickzJob ID to triggerr  zRemove a scheduled jobzJob ID to removez"Check if cron scheduler is runningÚtickzRun due jobs once and exitrã  z$Manage dynamic webhook subscriptionszPCreate, list, and remove webhook subscriptions for event-driven agent activationÚwebhook_actionÚ	subscribezCreate a webhook subscriptionr?   z*Route name (used in URL: /webhooks/<name>)rn   z0Prompt template with {dot.notation} payload refsz--eventsz%Comma-separated event types to acceptzWhat this subscription doesz#Comma-separated skill names to loadÚlogz4Delivery target: log, telegram, discord, slack, etc.z--deliver-chat-idz*Target chat ID for cross-platform deliveryz--secretz'HMAC secret (auto-generated if omitted)z--deliver-onlyuŠ   Skip the agent â€” deliver the rendered prompt directly as the message. Zero LLM cost. Requires --deliver to be a real target (not 'log').zList all dynamic subscriptionszRemove a subscriptionzSubscription name to removeÚtestz#Send a test POST to a webhook routezSubscription name to testz	--payloadz,JSON payload to send (default: test payload)Úhooksz%Inspect and manage shell-script hooksz·Inspect shell-script hooks declared in ~/.hermes/config.yaml, test them against synthetic payloads, and manage the first-use consent allowlist at ~/.hermes/shell-hooks-allowlist.json.Úhooks_actionz?List configured hooks with matcher, timeout, and consent statusz<Fire every hook matching <event> against a synthetic payloadÚeventzAHook event name (e.g. pre_tool_call, pre_llm_call, subagent_stop)z
--for-toolÚfor_toolz^Only fire hooks whose matcher matches this tool name (used for pre_tool_call / post_tool_call))rY  r   r   z--payload-fileÚpayload_filezYPath to a JSON file whose contents are merged into the synthetic payload before executionÚrevokezCRemove a command's allowlist entries (takes effect on next restart)z?The exact command string to revoke (as declared in config.yaml)rÛ  zeCheck each configured hook: exec bit, allowlist, mtime drift, JSON validity, and synthetic run timingz$Check configuration and dependenciesz'Diagnose issues with Hermes Agent setupz--fixz#Attempt to fix issues automaticallyrÖ  z(Dump setup summary for support/debuggingzyOutput a compact, plain-text summary of your Hermes setup that can be copy-pasted into Discord/GitHub for support contextz--show-keyszOShow redacted API key prefixes (first/last 4 chars) instead of just set/not setrŸ  u7   Debug tools â€” upload logs and system info for supportz›Debug utilities for Hermes Agent. Use 'hermes debug share' to upload a debug report (system info + recent logs) to a paste service and get a shareable URL.aR  Examples:
    hermes debug share              Upload debug report and print URL
    hermes debug share --lines 500  Include more log lines
    hermes debug share --expire 30  Keep paste for 30 days
    hermes debug share --local      Print report locally (no upload)
    hermes debug delete <url>       Delete a previously uploaded paste
)r   rR  rS  rT  Údebug_commandÚsharez@Upload debug report to a paste service and print a shareable URLz--lineséÈ   z:Number of log lines to include per log file (default: 200)z--expireé   z!Paste expiry in days (default: 7)z--localz-Print the report locally instead of uploadingz/Delete a paste uploaded by 'hermes debug share'ÚurlsÚ*z?One or more paste URLs to delete (e.g. https://paste.rs/abc123))rZ  r   r   rÚ  z+Back up Hermes home directory to a zip filez¸Create a zip archive of your entire Hermes configuration, skills, sessions, and data (excludes the hermes-agent codebase). Use --quick for a fast snapshot of just critical state files.z-oz--outputzGOutput path for the zip file (default: ~/hermes-backup-<timestamp>.zip)zNQuick snapshot: only critical state files (config, state.db, .env, auth, cron)z/Label for the snapshot (only used with --quick)rÝ  z'Restore a Hermes backup from a zip filezExtract a previously created Hermes backup into your Hermes home directory, restoring configuration, skills, sessions, and datarm  zPath to the backup zip filez-fz-Overwrite existing files without confirmationrÅ  zView and edit configurationz!Manage Hermes Agent configurationr  rþ  zShow current configurationzOpen config file in editorr   zSet a configuration valuerž   z1Configuration key (e.g., model, terminal.backend)ÚvaluezValue to setr”  zPrint config file pathzenv-pathzPrint .env file pathr­  z!Check for missing/outdated configÚmigratezUpdate config with new optionsrà  z.Manage DM pairing codes for user authorizationz/Approve or revoke user access via pairing codesÚpairing_actionzShow pending + approved usersÚapprovezApprove a pairing coder=  z2Platform name (telegram, discord, slack, whatsapp)rô  zPairing code to approvezRevoke user accesszPlatform nameÚuser_idzUser ID to revokezclear-pendingzClear all pending codesc                 ó(   — ddl m}  || ¦  «         d S )Nr   )Úpairing_command)Úhermes_cli.pairingrŽ  )r   rŽ  s     r   Úcmd_pairingzmain.<locals>.cmd_pairingZ!  s*   € Ø6Ð6Ð6Ð6Ð6Ð6àˆ˜ÑÔÐÐÐr   z-Search, install, configure, and manage skillsz–Search, install, inspect, audit, configure, and manage skills from skills.sh, well-known agent skill endpoints, GitHub, ClawHub, and other registries.Úskills_actionÚbrowsez'Browse all available skills (paginated)z--pager   zPage number (default: 1)z--sizer·   zResults per page (default: 20)rê  )rê  r¾  z	skills-shz
well-knownÚgithubÚclawhubÚlobehubzFilter by source (default: all))r   r;  r   ÚsearchzSearch skill registriesrÆ   zSearch query)r   r;  z--limitr×   zMax resultszInstall a skillÚ
identifierz3Skill identifier (e.g. openai/skills/skill-creator)z
--categoryzCategory folder to install intoz$Install despite blocked scan verdictz-Skip confirmation prompt (needed in TUI mode)r?  z"Preview a skill without installingzSkill identifierzList installed skills)rê  ÚhubÚbuiltinÚlocalz--enabled-onlyzcHide disabled skills. Use with -p <profile> to see exactly which skills will load for that profile.z&Check installed hub skills for updatesz&Specific skill to check (default: all)rŒ   zUpdate installed hub skillsz7Specific skill to update (default: all outdated skills)ÚauditzRe-scan installed hub skillsz&Specific skill to audit (default: all)zRemove a hub-installed skillzSkill name to removeuO   Reset a bundled skill â€” clears 'user-modified' tracking so updates work againzäClear a bundled skill's entry from the sync manifest (~/.hermes/skills/.bundled_manifest) so future 'hermes update' runs stop marking it as user-modified. Pass --restore to also replace the current copy with the bundled version.z+Skill name to reset (e.g. google-workspace)z	--restorez<Also delete the current copy and re-copy the bundled versionz-Skip confirmation prompt when using --restoreÚpublishzPublish a skill to a registryÚ
skill_pathzPath to skill directoryz--tor“  r”  zTarget registryz--repoz'Target GitHub repo (e.g. openai/skills)Úsnapshotz"Export/import skill configurationsÚsnapshot_actionr  z!Export installed skills to a filer  z(Output JSON file path (use - for stdout)z%Import and install skills from a filer  zInput JSON file pathz%Force install despite caution verdictÚtapzManage skill sourcesÚ
tap_actionzList configured tapsz!Add a GitHub repo as skill sourceÚrepozGitHub repo (e.g. owner/repo)zRemove a tapzTap name to removeuD   Interactive skill configuration â€” enable/disable individual skillsc                 ó–   — t          | dd ¦  «        dk    r"t          d¦  «         ddlm}  || ¦  «         d S ddlm}  || ¦  «         d S )Nr‘  rÅ  zskills configr   )Úskills_command)r  r   Úhermes_cli.skills_configr¤  Úhermes_cli.skills_hub)r   Úskills_config_commandr¤  s      r   Ú
cmd_skillszmain.<locals>.cmd_skills"  sx   € å�4˜¨$Ñ/Ô/°8Ò;Ð;Ý˜Ñ)Ô)Ð)ØXÐXÐXÐXÐXÐXà!Ð! $Ñ'Ô'Ð'Ð'Ð'à<Ð<Ð<Ð<Ð<Ð<àˆN˜4Ñ Ô Ð Ð Ð r   rá  u0   Manage plugins â€” install, update, remove, listzDInstall plugins from Git repositories, update, remove, or list them.Úplugins_actionz-Install a plugin from a Git URL or owner/repozNGit URL or owner/repo shorthand (e.g. anpicasso/hermes-plugin-chrome-profiles)z$Remove existing plugin and reinstallz--enablez?Auto-enable the plugin after install (skip confirmation prompt)z--no-enablez]Install disabled (skip confirmation prompt); enable later with `hermes plugins enable <name>`z+Pull latest changes for an installed pluginzPlugin name to updatezRemove an installed pluginzPlugin directory name to removezList installed pluginsÚenablezEnable a disabled pluginzPlugin name to enableÚdisablez$Disable a plugin without removing itzPlugin name to disablec                 ó(   — ddl m}  || ¦  «         d S )Nr   )Úplugins_command)Úhermes_cli.plugins_cmdr­  )r   r­  s     r   Úcmd_pluginszmain.<locals>.cmd_plugins["  s*   € Ø:Ð:Ð:Ð:Ð:Ð:àˆ˜ÑÔÐÐÐr   )Údiscover_plugin_cli_commandsr   rR  r   )r   rR  rS  Úsetup_fnzPlugin CLI discovery failed: %srß  z"Configure external memory providerzûSet up and manage external memory provider plugins.

Available providers: honcho, openviking, mem0, hindsight,
holographic, retaindb, byterover.

Only one external provider can be active at a time.
Built-in memory (MEMORY.md/USER.md) is always active.Úmemory_commandz0Interactive provider selection and configurationz#Show current memory provider configÚoffz)Disable external provider (built-in only)z1Erase all built-in memory (MEMORY.md and USER.md)zSkip confirmation promptz--target)rê  rß  rŽ  z:Which store to reset: 'all' (default), 'memory', or 'user'c           
      óÆ  ‡— t          | dd ¦  «        }|dk    ruddlm}m}  |¦   «         }t	          |                     d¦  «        t          ¦  «        si |d<   d|d         d<    ||¦  «         t          d¦  «         t          d	¦  «         d S |d
k    �r»ddlm	}m
}  |¦   «         dz  Št          | dd¦  «        }g }|dv r|                     d¦  «         |dv r|                     d¦  «         ˆfd„|D ¦   «         }	|	st          d |¦   «         › d�¦  «         d S t          d¦  «         |	D ]=\  }
}‰|
z  }|                     ¦   «         j        }t          d|
› d|› d|d›d�¦  «         Œ>t          | dd¦  «        ss	 t          d¦  «                             ¦   «                              ¦   «         }n'# t"          t$          f$ r t          d¦  «         Y d S w xY w|dk    rt          d ¦  «         d S |	D ]2\  }
}‰|
z                       ¦   «          t          d!|
› d|› d"�¦  «         Œ3t          d#¦  «         t          d$ |¦   «         › d�¦  «         d S dd%lm}  || ¦  «         d S )&Nr²  r³  r   rð  rß  rn   r   u%   
  âœ“ Memory provider: built-in onlyz  Saved to config.yaml
r‘  )rE   rÈ  Úmemoriesrp  rê  )rê  rß  )z	MEMORY.mdzagent notes)rê  rŽ  )zUSER.mdzuser profilec                 óL   •— g | ] \  }}‰|z                        ¦   «         ¯||f‘Œ!S rÜ   rü  )ry   r®  r   Úmem_dirs      €r   rß   z,main.<locals>.cmd_memory.<locals>.<listcomp>²"  sF   ø€ ð ð ð Ù%˜a ¸GÀa¹K×;OÒ;OÑ;QÔ;QðØ�D�	ðð ð r   u1   
  Nothing to reset â€” no memory files found in z/memories/
z:
  This will permanently erase the following memory files:u       â—† rˆ  u   ) â€” r²  z bytesr  Fz
  Type 'yes' to confirm: z
  Cancelled.
z  Cancelled.
u     âœ“ Deleted rÖ   zE
  Memory reset complete. New sessions will start with a blank slate.z  Files were in: )r²  )r  r„   rS   rñ  r‡   r†   rˆ   r   r.   rE   rÈ  rµ  rz  Úst_sizer  r1   rÅ   r  r  r/  Úhermes_cli.memory_setupr²  )r   rÌ  rS   rñ  rÅ  rE   rÈ  rp  Úfiles_to_resetrP  r®  r   r”  Úsizer=  r²  r·  s                   @r   Ú
cmd_memoryzmain.<locals>.cmd_memoryš"  sT  ø€ Ý�dÐ,¨dÑ3Ô3ˆØ�%Š<ˆ<ØBÐBÐBÐBÐBÐBÐBÐBà �[‘]”]ˆFÝ˜fŸjšj¨Ñ2Ô2µDÑ9Ô9ð &Ø#%��xÑ Ø+-ˆF�8Ô˜ZÑ(ØˆK˜ÑÔÐÝÐ:Ñ;Ô;Ð;ÝÐ,Ñ-Ô-Ð-Ð-Ð-Ø�GŠ^‰^ØMÐMÐMÐMÐMÐMÐMÐMà%�oÑ'Ô'¨*Ñ4ˆGÝ˜T 8¨UÑ3Ô3ˆFØˆNØÐ*Ð*Ð*Ø×%Ò%Ð&BÑCÔCÐCØ˜Ð(Ð(Ø×%Ò%Ð&AÑBÔBÐBðð ð ð Ø)7ðñ ô ˆHð ð ÝØlÐI\ÐI\ÑI^ÔI^ÐlÐlÐlñô ð ð �åÐPÑQÔQÐQØ#ð Bð B‘��4Ø ‘{�Ø—y’y‘{”{Ô*�ÝÐ@ Ð@Ð@ dÐ@Ð@°$Ð@Ð@Ð@Ð@ÑAÔAÐAÐAå˜4 ¨Ñ.Ô.ð ðÝ"Ð#@ÑAÔA×GÒGÑIÔI×OÒOÑQÔQ�F�FøÝ Õ"3Ð4ð ð ð ÝÐ,Ñ-Ô-Ð-Ø�F�Fðøøøð ˜U’?�?ÝÐ*Ñ+Ô+Ð+Ø�Fà#ð 5ð 5‘��4Ø˜1‘×$Ò$Ñ&Ô&Ð&ÝÐ3 qÐ3Ð3¨DÐ3Ð3Ð3Ñ4Ô4Ð4Ð4åØYñô ð õ ÐIÐ&9Ð&9Ñ&;Ô&;ÐIÐIÐIÑJÔJÐJÐJÐJà>Ð>Ð>Ð>Ð>Ð>àˆN˜4Ñ Ô Ð Ð Ð s   Å=3F1 Æ1 GÇGrÙ  z.Configure which tools are enabled per platforma  Enable, disable, or list tools for CLI, Telegram, Discord, etc.

Built-in toolsets use plain names (e.g. web, memory).
MCP tools use server:tool notation (e.g. github:create_issue).

Run 'hermes tools' with no subcommand for the interactive configuration UI.z	--summaryz6Print a summary of enabled tools per platform and exitÚtools_actionz0Show all tools and their enabled/disabled statusz
--platformrP   zPlatform to show (default: cli)zDisable toolsets or MCP toolsÚnamesrd  ÚNAMEz7Toolset name (e.g. web) or MCP tool in server:tool form)rZ  rV  r   z#Platform to apply to (default: cli)zEnable toolsets or MCP toolsz,Toolset name or MCP tool in server:tool formc                 ó–   — t          | dd ¦  «        }|dv rddlm}  || ¦  «         d S t          d¦  «         ddlm}  || ¦  «         d S )Nr½  )rë   r«  rª  r   )Útools_disable_enable_commandrÙ  )Útools_command)r  Úhermes_cli.tools_configrÁ  r   rÂ  )r   r
   rÁ  rÂ  s       r   Ú	cmd_toolszmain.<locals>.cmd_tools#  s~   € Ý˜˜~¨tÑ4Ô4ˆØÐ2Ð2Ð2ØLÐLÐLÐLÐLÐLà(Ð(¨Ñ.Ô.Ð.Ð.Ð.å˜Ñ!Ô!Ð!Ø=Ð=Ð=Ð=Ð=Ð=àˆM˜$ÑÔÐÐÐr   rã  z2Manage MCP servers and run Hermes as an MCP serverzôManage MCP server connections and run Hermes as an MCP server.

MCP servers provide additional tools via the Model Context Protocol.
Use 'hermes mcp add' to connect to a new server, or
'hermes mcp serve' to expose Hermes conversations over MCP.Ú
mcp_actionÚservezBRun Hermes as an MCP server (expose conversations to other agents)z Enable verbose logging on stderrz+Add an MCP server (discovery-first install)z Server name (used as config key)z--urlzHTTP/SSE endpoint URLz	--commandzStdio command (e.g. npx)z--argszArguments for stdio commandz--authro  r  zAuth method)r;  r   z--presetzKnown MCP preset namez--envz3Environment variables for stdio servers (KEY=VALUE)zRemove an MCP serverzServer name to removezList configured MCP serverszTest MCP server connectionzServer name to testÚ	configurezToggle tool selectionzServer name to configurez5Force re-authentication for an OAuth-based MCP serverzServer name to re-authenticatec                 ó(   — ddl m}  || ¦  «         d S )Nr   )Úmcp_command)Úhermes_cli.mcp_configrÉ  )r   rÉ  s     r   Úcmd_mcpzmain.<locals>.cmd_mcpj#  s*   € Ø5Ð5Ð5Ð5Ð5Ð5àˆ�DÑÔÐÐÐr   r«   z<Manage session history (list, rename, export, prune, delete)z(View and manage the SQLite session storeÚsessions_actionzList recent sessionsz/Filter by source (cli, telegram, discord, etc.)zMax sessions to showzExport sessions to a JSONL filez)Output JSONL file path (use - for stdout)zFilter by sourcez--session-idzExport a specific sessionzDelete a specific sessionrd  zSession ID to deletezSkip confirmationÚprunezDelete old sessionsz--older-thanéZ   z/Delete sessions older than N days (default: 90)z$Only prune sessions from this sourceÚstatszShow session store statisticsr  zSet or change a session's titlezSession ID to renamer¯   zNew title for the sessionuB   Interactive session picker â€” browse, search, and resume sessionsr  z"Max sessions to load (default: 50)r   c                 óž   — 	 t          | ¦  «                             ¦   «                              ¦   «         dv S # t          t          f$ r Y dS w xY w)z?Prompt for y/N confirmation, safe against non-TTY environments.r;  F)r  r1   rÅ   r  r  )r,  s    r   Ú_confirm_promptzmain.<locals>._confirm_prompt³#  sX   € ð	Ý˜‘=”=×&Ò&Ñ(Ô(×.Ò.Ñ0Ô0°LÐ@Ð@øÝÕ+Ð,ð 	ð 	ð 	Ø�5�5ð	øøøs   ‚47 ·AÁAc           
      óÈ  •— dd l }	 ddlm}  |¦   «         }n*# t          $ r}t	          d|› �¦  «         Y d }~d S d }~ww xY w| j        }t          | dd ¦  «        }|rd ndg}|dk    �r‚|                     | j        || j	        ¬¦  «        }|st	          d¦  «         d S t          d	„ |D ¦   «         ¦  «        }	|	r-t	          d
d›ddd›ddd›dd› �¦  «         t	          d¦  «         n,t	          dd›ddd›ddd›dd› �¦  «         t	          d¦  «         |D ]Ô}
t          |
                     d¦  «        ¦  «        }|	r|
                     dd¦  «        d d…         n|
                     dd¦  «        d d…         }|	rE|
                     d¦  «        pdd d…         }|
d         }t	          |d›d|d›d|d›d|› �¦  «         Œ©|
d         }t	          |d›d|d›d|
d         d›d|› �¦  «         ŒÕ�nä|d k    �r| j        �r
|                     | j        ¦  «        }|st	          d!| j        › d"�¦  «         d S |                     |¦  «        }|st	          d!| j        › d"�¦  «         d S |                     |d#¬$¦  «        d%z   }| j        d&k    r!t$          j                             |¦  «         �n(t+          | j        d'd(¬)¦  «        5 }|                     |¦  «         d d d ¦  «         n# 1 swxY w Y   t	          d*| j        › �¦  «         �nË|                     | j        ¬+¦  «        }| j        d&k    r>|D ]9}
t$          j                             |                     |
d#¬$¦  «        d%z   ¦  «         Œ:�ngt+          | j        d'd(¬)¦  «        5 }|D ]/}
|                     |                     |
d#¬$¦  «        d%z   ¦  «         Œ0	 d d d ¦  «         n# 1 swxY w Y   t	          d,t/          |¦  «        › d-| j        › �¦  «         �nÜ|d.k    r¡|                     | j        ¦  «        }|st	          d!| j        › d"�¦  «         d S | j        s  ‰!d/|› d0�¦  «        st	          d1¦  «         d S |                     |¦  «        rt	          d2|› d3�¦  «         �nOt	          d!| j        › d"�¦  «         �n5|d4k    rv| j        }| j        rd5| j        › d6�nd}| j        s# ‰!d7|› d8|› d9�¦  «        st	          d1¦  «         d S |                     || j        ¬:¦  «        }t	          d;|› d<�¦  «         �n¹|d=k    rÁ|                     | j        ¦  «        }|st	          d!| j        › d"�¦  «         d S d                     | j        ¦  «        }	 |                     ||¦  «        rt	          d!|› d>|› �¦  «         nt	          d!| j        › d"�¦  «         �n# t>          $ r}t	          d?|› �¦  «         Y d }~�núd }~ww xY w|d@k    rýt          | dAdB¦  «        pdB}t          | dd ¦  «        }|rd ndg}|                     |||¬¦  «        }|                      ¦   «          |st	          d¦  «         d S tC          |¦  «        }|st	          d1¦  «         d S t	          dC|› �¦  «         tE          j#        dD¦  «        }|rtI          j%        |dDdE|g¦  «         n.tI          j%        t$          j&        t$          j&        dFdGdE|g¦  «         d S |dHk    rÕ| '                    ¦   «         }| (                    ¦   «         }t	          dI|› �¦  «         t	          dJ|› �¦  «         dKD ]4}| '                    |¬+¦  «        }|dk    rt	          dL|› dM|› dN�¦  «         Œ5|j)        }| *                    ¦   «         r6tH          j+         ,                    |¦  «        dOz  } t	          dP| dQ›dR�¦  «         n‰" -                    ¦   «          |                      ¦   «          d S )SNr   r$  z(Error: Could not open session database: r±   Útoolrë   )r±   Úexclude_sourcesr&  r­   c              3   ó@   K  — | ]}|                      d ¦  «        V — ŒdS )r¯   Nr>  )ry   r¾   s     r   r{   z-main.<locals>.cmd_sessions.<locals>.<genexpr>Ò#  s,   è è € Ð>Ð>°˜QŸUšU 7™^œ^Ð>Ð>Ð>Ð>Ð>Ð>r   ÚTitlez<32r¼   ÚPreviewz<40zLast Activez<13rÒ   uJ  â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€r  rÑ   z<6u  â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€r³   r°   rn   é&   é0   r¯   rý  rÛ  r´   r  z	Session 'z' not found.F)Úensure_asciirÓ  rz  ÚwrJ   rK   zExported 1 session to rg  z	Exported z sessions to r  zDelete session 'z' and all its messages? [y/N] rA  zDeleted session 'rú  rÍ  z from 'r  z%Delete all ended sessions older than z daysz? [y/N] )Úolder_than_daysr±   zPruned z session(s).r  z' renamed to: r'   r’  r&  r  zResuming session: rP  rè  rT  zhermes_cli.mainrÏ  zTotal sessions: zTotal messages: )rP   ÚtelegramÚdiscordr1  rl  r¹   r+  rÕ   i   zDatabase size: z.1fz MB).r’   r'  r%  r7   r   rÌ  r  Úlist_sessions_richr±   r&  rŽ   rh   r†   rd  Úresolve_session_idÚexport_sessionr3  r  r   r´  r  rî  Ú
export_allr+   r  Údelete_sessionÚ
older_thanÚprune_sessionsrN  r¯   Úset_session_titler5   r)  r"  rK  rL  r8   rP  rð  Úsession_countrh  Údb_pathr/   r”  ÚgetsizeÚ
print_help)#r   r6  r%  r*  r)  r
   Ú_sourceÚ_excluder«   Ú
has_titlesr¾   r³   r°   r¯   rÀ   Úresolved_session_idr  r�   r®  ÚdaysÚ
source_msgrö  r&  r±   Ú_browse_excludeÚselected_idr>  r  Úmsgsr   r<  rè  Úsize_mbrÑ  Úsessions_parsers#                                    €€r   Úcmd_sessionszmain.<locals>.cmd_sessionsº#  s_
  ø€ ØÐÐÐð	Ø.Ð.Ð.Ð.Ð.Ð.à�‘”ˆBˆBøÝð 	ð 	ð 	ÝÐ@¸QÐ@Ð@ÑAÔAÐAØˆFˆFˆFˆFˆFøøøøð	øøøð Ô%ˆõ ˜$ ¨$Ñ/Ô/ˆØ"Ð0�4�4¨¨ˆà�VÒÑØ×,Ò,Ø”{°HÀDÄJð -ñ ô ˆHð ð ÝÐ*Ñ+Ô+Ð+Ø�ÝÐ>Ð>°XÐ>Ñ>Ô>Ñ>Ô>ˆJØð "Ý˜ÐQÐQÐQ yÐQÐQÐQ°}ÐQÐQÐQÈ4ÐQÐQÑRÔRÐRÝ�kÑ"Ô"Ð"Ð"å˜ÐNÐNÐN¨ÐNÐNÐN¸UÐNÐNÐNÈÐNÐNÑOÔOÐOÝ�jÑ!Ô!Ð!Øð Uð U�Ý,¨Q¯UªU°=Ñ-AÔ-AÑBÔB�ð "ð3�A—E’E˜) RÑ(Ô(¨¨"¨Ô-Ð-àŸš˜y¨"Ñ-Ô-¨c¨r¨cÔ2ð ð
 ð UØŸUšU 7™^œ^Ð4¨u°c°r°cÔ:�EØ˜Dœ'�CÝ˜UÐNÐNÐN¨ÐNÐNÐN°{ÐNÐNÐNÈÐNÐNÑOÔOÐOÐOà˜Dœ'�CÝ˜WÐSÐSÐS¨;ÐSÐSÐS¸Q¸x¼[ÐSÐSÐSÈcÐSÐSÑTÔTÐTÐTñUð �xÒÑØŒñ QØ&(×&;Ò&;¸D¼OÑ&LÔ&LÐ#Ø*ð ÝÐC d¤oÐCÐCÐCÑDÔDÐDØ�FØ×(Ò(Ð)<Ñ=Ô=�Øð ÝÐC d¤oÐCÐCÐCÑDÔDÐDØ�FØ—{’{ 4°e�{Ñ<Ô<¸tÑC�Ø”; #Ò%Ð%å”J×$Ò$ TÑ*Ô*Ð*Ñ*å˜dœk¨3¸ÐAÑAÔAð &ÀQØŸš ™œ˜ð&ð &ð &ñ &ô &ð &ð &ð &ð &ð &ð &øøøð &ð &ð &ð &åÐ@°4´;Ð@Ð@ÑAÔAÐAÑAàŸ=š=°´˜=Ñ<Ô<�Ø”; #Ò%Ð%à%ð Tð T˜Ýœ
×(Ò(¨¯ª°QÀU¨Ñ)KÔ)KÈdÑ)RÑSÔSÐSÐSñTõ ˜dœk¨3¸ÐAÑAÔAð OÀQØ!)ð Oð O˜AØŸGšG E§K¢K°À KÑ$FÔ$FÈÑ$MÑNÔNÐNÐNðOðOð Oð Oñ Oô Oð Oð Oð Oð Oð Oð Oøøøð Oð Oð Oð Oõ ÐO¥c¨(¡m¤mÐOÐOÀ$Ä+ÐOÐOÑPÔPÐPÑPà�xÒÐØ"$×"7Ò"7¸¼Ñ"HÔ"HÐØ&ð ÝÐ? $¤/Ð?Ð?Ð?Ñ@Ô@Ð@Ø�Ø”8ð Ø&�ØZÐ':ÐZÐZÐZñô ð õ ˜,Ñ'Ô'Ð'Ø�FØ× Ò Ð!4Ñ5Ô5ð AÝÐAÐ*=ÐAÐAÐAÑBÔBÐBÑBåÐ? $¤/Ð?Ð?Ð?Ñ@Ô@Ð@Ñ@à�wÒÐØ”?ˆDØ59´[ÐHÐ1 4¤;Ð1Ð1Ð1Ð1ÀbˆJØ”8ð Ø&�Ø[¸DÐ[Ð[ÀzÐ[Ð[Ð[ñô ð õ ˜,Ñ'Ô'Ð'Ø�FØ×%Ò%°dÀ4Ä;Ð%ÑOÔOˆEÝÐ/˜EÐ/Ð/Ð/Ñ0Ô0Ð0Ñ0à�xÒÐØ"$×"7Ò"7¸¼Ñ"HÔ"HÐØ&ð ÝÐ? $¤/Ð?Ð?Ð?Ñ@Ô@Ð@Ø�Ø—H’H˜TœZÑ(Ô(ˆEð%Ø×'Ò'Ð(;¸UÑCÔCð EÝÐPÐ&9ÐPÐPÈÐPÐPÑQÔQÐQÐQåÐC d¤oÐCÐCÐCÑDÔDÐDùøÝð %ð %ð %Ý�m �m�mÑ$Ô$Ð$Ð$Ð$Ð$Ð$Ñ$øøøøð%øøøð �xÒÐÝ˜D '¨2Ñ.Ô.Ð4°"ˆEÝ˜T 8¨TÑ2Ô2ˆFØ&,Ð:˜d˜d°6°(ˆOØ×,Ò,Ø¨Àeð -ñ ô ˆHð �HŠH‰JŒJˆJØð ÝÐ*Ñ+Ô+Ð+Ø�å0°Ñ:Ô:ˆKØð Ý�lÑ#Ô#Ð#Ø�õ Ð4 {Ð4Ð4Ñ5Ô5Ð5Ýœ hÑ/Ô/ˆJØð Ý”	˜* x°¸[Ð&IÑJÔJÐJÐJõ ”	Ý”NÝ”^ TÐ+<¸jÈ+ÐVñô ð ð ˆFà�wÒÐØ×$Ò$Ñ&Ô&ˆEØ×#Ò#Ñ%Ô%ˆDÝÐ, UÐ,Ð,Ñ-Ô-Ð-ÝÐ+ TÐ+Ð+Ñ,Ô,Ð,ØJð 4ð 4�Ø×$Ò$¨CÐ$Ñ0Ô0�Ø�q’5�5ÝÐ2˜sÐ2Ð2 aÐ2Ð2Ð2Ñ3Ô3Ð3øØ”jˆGØ�~Š~ÑÔð :Ýœ'Ÿ/š/¨'Ñ2Ô2°kÑB�ÝÐ8¨Ð8Ð8Ð8Ð8Ñ9Ô9Ð9øð ×&Ò&Ñ(Ô(Ð(à
�Š‰
Œ
ˆ
ˆ
ˆ
sM   ‡ ˜
?¢:º?Ê=KËK#Ë&K#Í>3N>Î>OÏOÕ,AV2 Ö2
WÖ<W×Wrä  z!Show usage insights and analyticszVAnalyze session history to show token usage, costs, tool patterns, and activity trendsz--daysrÛ  z'Number of days to analyze (default: 30)z1Filter by platform (cli, telegram, discord, etc.)c                 óL  — 	 ddl m} ddlm}  |¦   «         } ||¦  «        }|                     | j        | j        ¬¦  «        }t          |                     |¦  «        ¦  «         | 	                    ¦   «          d S # t          $ r}t          d|› �¦  «         Y d }~d S d }~ww xY w)Nr   r$  )ÚInsightsEngine)rï  r±   zError generating insights: )r'  r%  Úagent.insightsrø  Úgeneraterï  r±   r   Úformat_terminalr)  r7   )r   r%  rø  r*  ÚengineÚreportr)  s          r   Úcmd_insightszmain.<locals>.cmd_insightsr$  sÓ   € ð
	5Ø.Ð.Ð.Ð.Ð.Ð.Ø5Ð5Ð5Ð5Ð5Ð5à�‘”ˆBØ#�^ BÑ'Ô'ˆFØ—_’_¨$¬)¸D¼K�_ÑHÔHˆFÝ�&×(Ò(¨Ñ0Ô0Ñ1Ô1Ð1Ø�HŠH‰JŒJˆJˆJˆJøÝð 	5ð 	5ð 	5ÝÐ3°Ð3Ð3Ñ4Ô4Ð4Ð4Ð4Ð4Ð4Ð4Ð4øøøøð	5øøøs   ‚A8A< Á<
B#ÂBÂB#rÔ  zOpenClaw migration toolszHMigrate settings, memories, skills, and API keys from OpenClaw to HermesÚclaw_actionzMigrate from OpenClaw to Hermesz|Import settings, memories, skills, and API keys from an OpenClaw installation. Always shows a preview before making changes.z1Path to OpenClaw directory (default: ~/.openclaw)u:   Preview only â€” stop after showing what would be migratedz	user-dataÚfullz>Migration preset (default: full). 'user-data' excludes secretsz--overwritez2Overwrite existing files (default: skip conflicts)z--migrate-secretsz@Include allowlisted secrets (TELEGRAM_BOT_TOKEN, API keys, etc.)z--workspace-targetz1Absolute path to copy workspace instructions intoz--skill-conflict)r�  Ú	overwriter  r�  z2How to handle skill name conflicts (default: skip)zSkip confirmation promptsÚcleanuprÎ  z5Archive leftover OpenClaw directories after migrationzQScan for and archive leftover OpenClaw directories to prevent state fragmentation)rd  r   rR  z1Path to a specific OpenClaw directory to clean upz5Preview what would be archived without making changesc                 ó(   — ddl m}  || ¦  «         d S )Nr   )Úclaw_command)Úhermes_cli.clawr  )r   r  s     r   Úcmd_clawzmain.<locals>.cmd_clawÊ$  s*   € Ø0Ð0Ð0Ð0Ð0Ð0àˆ�TÑÔÐÐÐr   r  zShow version informationz)Update Hermes Agent to the latest versionz;Pull the latest changes from git and reinstall dependenciesz	--gatewayzZGateway mode: use file-based IPC for prompts instead of stdin (used internally by /update)z--checkz@Check whether an update is available without installing anythingzUninstall Hermes AgentzJRemove Hermes Agent from your system. Can keep configs/data for reinstall.z=Full uninstall - remove everything including configs and datarÒ  z9Run Hermes Agent as an ACP (Agent Client Protocol) serverzOStart Hermes Agent in ACP mode for editor integration (VS Code, Zed, JetBrains)c                 ó®   — 	 ddl m}  |¦   «          dS # t          $ r6 t          d¦  «         t          d¦  «         t	          j        d¦  «         Y dS w xY w)z%Launch Hermes Agent as an ACP server.r   r  zACP dependencies not installed.z+Install them with:  pip install -e '.[acp]'r   N)Úacp_adapter.entryr  r   r   r   r   )r   Úacp_mains     r   Úcmd_acpzmain.<locals>.cmd_acp	%  st   € ð	Ø:Ð:Ð:Ð:Ð:Ð:àˆH‰JŒJˆJˆJˆJøÝð 	ð 	ð 	ÝÐ3Ñ4Ô4Ð4ÝÐ?Ñ@Ô@Ð@ÝŒH�Q‰KŒKˆKˆKˆKˆKð	øøøs   ‚ ”<AÁArâ  u6   Manage profiles â€” multiple isolated Hermes instancesrö  zList all profilesrÿ  zSet sticky default profiler:   zProfile name (or 'default')zCreate a new profilez&Profile name (lowercase, alphanumeric)z--clonez3Copy config.yaml, .env, SOUL.md from active profilez--clone-allz'Full copy of active profile (all state)z--clone-fromÚSOURCEz.Source profile to clone from (default: active))rV  r   z
--no-aliaszSkip wrapper script creationzDelete a profilezProfile to deletezShow profile detailszProfile to showr  zManage wrapper scriptszProfile namez--removezRemove the wrapper scriptr  z)Custom alias name (default: profile name))rY  rV  r   zRename a profiler  zCurrent profile namer  zNew profile namezExport a profile to archivezProfile to exportz$Output file (default: <name>.tar.gz)zImport a profile from archiver   zPath to .tar.gz archiver  z-Profile name (default: inferred from archive)ræ  z2Print shell completion script (bash, zsh, or fish)r>  r«  )r«  r?  r@  zShell type (default: bash))rZ  r   r;  r   c                 ó$   •— t          | ‰¦  «        S rw   )rB  )r   r   s    €r   r\  zmain.<locals>.<lambda>|%  s   ø€ µ^ÀDÈ&Ñ5QÔ5Q€ r   rå  zStart the web UI dashboardzQLaunch the Hermes Agent web dashboard for managing config, API keys, and sessionsz--portiŸ#  zPort (default 9119)z--hostr«  zHost (default 127.0.0.1)z	--no-openz Don't open browser automaticallyzKAllow binding to non-localhost (DANGEROUS: exposes API keys on the network)zuExpose the in-browser Chat tab (embedded `hermes --tui` via PTY/WebSocket). Alternatively set HERMES_DASHBOARD_TUI=1.r!  z View and filter Hermes log filesz;View, tail, and filter agent.log / errors.log / gateway.loga–  Examples:
    hermes logs                    Show last 50 lines of agent.log
    hermes logs -f                 Follow agent.log in real time
    hermes logs errors             Show last 50 lines of errors.log
    hermes logs gateway -n 100     Show last 100 lines of gateway.log
    hermes logs --level WARNING    Only show WARNING and above
    hermes logs --session abc123   Filter by session ID
    hermes logs --component tools  Only show tool-related lines
    hermes logs --since 1h         Lines from the last hour
    hermes logs --since 30m -f     Follow, starting from 30 min ago
    hermes logs list               List available log files with sizes
rF  r  zPLog to view: agent (default), errors, gateway, or 'list' to show available filesrB  z%Number of lines to show (default: 50)z--followz*Follow the log in real time (like tail -f)z--levelÚLEVELz7Minimum log level to show (DEBUG, INFO, WARNING, ERROR)rA  rÒ   z1Filter lines containing this session ID substringz--sinceÚTIMEz,Show lines since TIME ago (e.g. 1h, 30m, 2d)z--componentz5Filter by component: gateway, agent, tools, cli, cron)Úget_container_exec_infor;  c              3   óJ   •K  — | ]}|                      d ¦  «        °|‰v V — ŒdS )rz  Nrê  )ry   rë  Ú_known_cmdss     €r   r{   zmain.<locals>.<genexpr>&  sM   øè è € ð ð Ø¸¿ºÀcÑ9JÔ9JðØ	ˆ[Ððð ð ð ð ð r   >   NÚrlrÒ  rÓ  )rÕ  rV  rã  )NNÚaccept_hooks)Údiscover_pluginsz&plugin discovery failed at CLI startup)Úexc_inforR   )Úregister_from_config)r  z-shell-hook registration failed at CLI startupÚoneshot)Úrun_oneshot)rm   r   )©rÆ   N©rm   N©r   N©r  N©r  F©r  F)r  r  r  r  r  )rù  N)rø  Nr  r_  )Vr   ÚArgumentParserÚRawDescriptionHelpFormatterr   Úadd_subparsersÚ
add_parserr   rc   Úset_defaultsr*  r„  rX  Úhermes_cli.fallback_cmdr`  r   r.  r  rR  rò  rÙ  rÜ  rà  rä  rè  rì  rö  rú  rÿ  r  r  r  r  Úadd_mutually_exclusive_groupÚplugins.memoryr°  r†   Ú
__import__r7   ÚloggingÚ	getLoggerr  rŸ  r‰   r°  r  rY  r   r+  r9  rN  r„   r  r[  r   r)   r   rì  Úior'  r   r;  ÚkeysrŽ   rÙ  r   ÚStringIOÚ
parse_argsri  rô  r  rX  r  Úhermes_cli.pluginsr  rž  rS   Úagent.shell_hooksr  Úhermes_cli.oneshotr  r  rù  rø  Úsetattrr_  rê  )²Ú
subparsersÚchat_parserÚmodel_parserr`  Úfallback_parserÚfallback_subparsersÚgateway_parserÚgateway_subparsersÚgateway_runÚgateway_startÚgateway_stopÚgateway_restartÚgateway_statusÚgateway_installÚgateway_uninstallÚgateway_migrate_legacyÚsetup_parserÚwhatsapp_parserÚslack_parserÚ	slack_subÚslack_manifestÚlogin_parserÚlogout_parserÚauth_parserÚauth_subparsersÚauth_addÚ	auth_listÚauth_removeÚ
auth_resetÚauth_statusÚauth_logoutÚauth_spotifyÚstatus_parserÚcron_parserÚcron_subparsersÚ	cron_listÚcron_createÚ	cron_editÚ
cron_pauseÚcron_resumeÚcron_runÚcron_removeÚ	cron_tickÚwebhook_parserÚwebhook_subparsersÚwh_subÚwh_rmÚwh_testÚhooks_parserÚhooks_subparsersÚ_hk_testÚ
_hk_revokeÚdoctor_parserÚdump_parserÚdebug_parserÚ	debug_subÚshare_parserÚdelete_parserÚbackup_parserÚimport_parserÚconfig_parserÚconfig_subparsersÚ
config_setÚpairing_parserÚpairing_subÚpairing_approve_parserÚpairing_revoke_parserr�  Úskills_parserÚskills_subparsersÚskills_browseÚskills_searchÚskills_installÚskills_inspectÚskills_listÚskills_checkÚskills_updateÚskills_auditÚskills_uninstallÚskills_resetÚskills_publishÚskills_snapshotÚsnapshot_subparsersÚsnap_exportÚsnap_importÚ
skills_tapÚtap_subparsersÚtap_addÚtap_rmr¨  Úplugins_parserÚplugins_subparsersÚplugins_installÚ_install_enable_groupÚplugins_updateÚplugins_removeÚplugins_enableÚplugins_disabler¯  r°  Úcmd_infoÚplugin_parserÚ_excÚmemory_parserÚ
memory_subÚ_reset_parserr¼  Útools_parserÚ	tools_subÚtools_list_pÚtools_disable_pÚtools_enable_prÄ  Ú
mcp_parserÚmcp_subÚmcp_serve_pÚ	mcp_add_pÚmcp_rm_pÚ
mcp_test_pÚ	mcp_cfg_pÚmcp_login_prË  Úsessions_subparsersÚsessions_listÚsessions_exportÚsessions_deleteÚsessions_pruneÚsessions_renameÚsessions_browserö  Úinsights_parserrþ  Úclaw_parserÚclaw_subparsersÚclaw_migrateÚclaw_cleanupr  Úversion_parserÚupdate_parserÚuninstall_parserÚ
acp_parserr
  Úprofile_parserÚprofile_subparsersÚprofile_useÚprofile_createÚprofile_deleteÚprofile_showÚprofile_aliasÚprofile_renameÚprofile_exportÚprofile_importÚcompletion_parserÚdashboard_parserÚlogs_parserr  r9  Ú_processed_argvÚ_ioÚ_has_cmd_tokenÚ_saved_stderrr   rA   Ú_AGENT_COMMANDSÚ_AGENT_SUBCOMMANDSÚ	_sub_attrÚ_sub_setÚ_accept_hooksr  rS   r  r  r  r   rÑ  r  r   rõ  s²                                                                                                                                                                                 @@@@r   r  r  ž  s€I  øøøø€ åÔ$ØØPÝ Ô<ð$ð	)ñ )ô )€FðV ×ÒØ�T ,Ð5Lð ñ ô ð ð ×ÒØØØØð;ð ñ ô ð ð" ×ÒØØØðcð ñ ô ð ð ×ÒØØðfð	 ñ ô ð ð ×ÒØØØØØ7ð ñ ô ð ð ×ÒØØØØØØØØLð ñ 	ô 	ð 	ð ×ÒØØØØØDð ñ ô ð ð ×ÒØØØð&ð ñ 
ô 
ð 
ð ×ÒØØØØØYð ñ ô ð ð ×ÒØØØØSð	 ñ ô ð ð ×ÒØØØØBð	 ñ ô ð ð ×ÒØØØØuð	 ñ ô ð ð ×ÒØØØØdð	 ñ ô ð ð ×ÒØØØØ@ð	 ñ ô ð ð ×ÒØØØØØKð ñ ô ð ð ×&Ò&¨IÐ<LÐ&ÑMÔM€Jð
 ×'Ò'ØØ.ØIð (ñ ô €Kð
 ×ÒØˆiÐCð ñ ô ð ð ×ÒØÐOð ñ ô ð ð ×ÒØˆiÐNð ñ ô ð ð ×ÒØˆlÐ!Eð ñ ô ð ð ×ÒØØØÝÔ!ØYð ñ ô ð ð ×ÒØð
ð 
ð 
ð. Ø1ð5 ñ ô ð ð8 ×ÒØˆk ,Ð5Eð ñ ô ð ð ×ÒØØØð Nð	 ñ ô ð ð ×ÒØØØÝÔ!Ø>ð ñ ô ð ð ×ÒØØØØØÝÔ!ØØLð ñ 	ô 	ð 	ð ×ÒØØØÝÔ!ØUð ñ ô ð ð ×ÒØØÝÔ!ð2ð ñ 	ô 	ð 	ð ×ÒØØØØjð	 ñ ô ð ð ×ÒØÝØØØpð ñ ô ð ð ×ÒØØÝÔ!ØSð	 ñ ô ð ð ×ÒØØÝÔ!ØBð	 ñ ô ð ð ×ÒØØÝÔ!ð @ð	 ñ ô ð ð ×ÒØØÝÔ!ð bð	 ñ ô ð ð ×ÒØØð Vð ñ ô ð ð
 ×ÒØØØØ@ð	 ñ ô ð ð ×ÒØØØØØKð ñ ô ð ð ×Ò¥(ÐÑ+Ô+Ð+ð
 ×(Ò(ØØ0ØTð )ñ ô €Lð
 ×ÒØØJð ñ ô ð ð ×ÒØØXð ñ ô ð ð ×ÒØØØJð ñ ô ð ð
 ×ÒØ˜4Ð&Mð ñ ô ð ð ×ÒØØØQð ñ ô ð ð
 ×ÒØÝØØKð	 ñ ô ð ð ×ÒØÐRð ñ ô ð ð ×ÒØØØEð ñ ô ð ð
 ×Ò¥9ÐÑ-Ô-Ð-ð
 5Ð4Ð4Ð4Ð4Ð4à ×+Ò+ØØMð`ð	 ,ñ 	ô 	€Oð *×8Ò8Ð>PÐ8ÑQÔQÐØ×"Ò"ØØ�ØKð #ñ ô ð ð
 ×"Ò"ØØ^ð #ñ ô ð ð ×"Ò"ØØ�Ø5ð #ñ ô ð ð
 ×"Ò"ØØ*ð #ñ ô ð ð × Ò  lÐ Ñ3Ô3Ð3ð
  ×*Ò*ØØ+ØPð +ñ ô €Nð
 (×6Ò6Ð<MÐ6ÑNÔNÐð %×/Ò/ØÐUð 0ñ ô €Kð ×ÒØØØØØAð ñ ô ð ð ×ÒØˆi Ð3Sð ñ ô ð ð ×ÒØØØIð ñ ô ð õ
 ˜;Ñ'Ô'Ð'Ý˜>Ñ*Ô*Ð*ð '×1Ò1ØÐNð 2ñ ô €Mð ×ÒØØØ<ð ñ ô ð ð
 ×ÒØØØSð ñ ô ð ð &×0Ò0°Ð>TÐ0ÑUÔU€LØ×ÒØØØ<ð ñ ô ð ð
 ×ÒØØØ=ð ñ ô ð ð )×3Ò3ØÐ1ð 4ñ ô €Oð × Ò ØØØ<ð !ñ ô ð ð
 × Ò ØØØOð !ñ ô ð ð (×2Ò2°8ÐBWÐ2ÑXÔX€NØ×Ò °ÐDWÐÑXÔXÐXØ×ÒØØØØHð	  ñ ô ð ð ×ÒØØØ<ð  ñ ô ð ð )×3Ò3ØÐQð 4ñ ô €Oð × Ò  °<ÐFWÐ ÑXÔXÐXØ× Ò ØØØGð !ñ ô ð ð
 × Ò ØØØBð !ñ ô ð ð +×5Ò5ØÐ5ð 6ñ ô Ðð ×"Ò"ØØØ<ð #ñ ô ð ð ×!Ò! 'Ð0OÐ!ÑPÔPÐPð 0×:Ò:ØØJð6ð	 ;ñ 	ô 	Ðð ×'Ò'ØØØØ:ð	 (ñ ô ð ð ×'Ò'ØØØØØ+ð (ñ ô ð ð ×Ò¥[ÐÑ1Ô1Ð1ð
 ×(Ò(ØØ'ðVð )ñ ô €Lð ×ÒØØØIÐIÐIØØFð ñ ô ð ð ×ÒØØØ;ð ñ ô ð ð
 ×ÒØ˜,Ð-Nð ñ ô ð ð ×ÒØØðFð ñ ô ð ð ×ÒØØðIð ñ ô ð ð ×Ò¥9ÐÑ-Ô-Ð-ð
 !×+Ò+ØØ*Ø=ð ,ñ ô €Oð
 × Ò ¥lÐ Ñ3Ô3Ð3ð
 ×(Ò(ØØDØ;ð )ñ ô €Lð
 ×+Ò+°Ð+ÑAÔA€IØ×)Ò)ØðGðJð *ñ ô €Nð ×ÒØØØØØð;ð  ñ ô ð ð ×ÒØØØ3ð  ñ ô ð ð
 ×ÒØØØ>ð  ñ ô ð ð
 ×ÒØØð4ð  ñ ô ð ð ×Ò¥9ÐÑ-Ô-Ð-ð
 ×(Ò(ØØ6ØHð )ñ ô €Lð
 ×ÒØØ˜Ð(ØØ<ð	 ñ ô ð ð ×ÒØÐKð ñ ô ð ð ×ÒØØIð ñ ô ð ð ×ÒØ˜tÐ*Xð ñ ô ð ð ×Ò˜i°Ð<TÐÑUÔUÐUØ×ÒØØØ?ð ñ ô ð ð
 ×ÒØÝØØ<ð	 ñ ô ð ð ×ÒØÐMð ñ ô ð ð ×ÒØØØ6ð ñ ô ð ð
 ×Ò¥9ÐÑ-Ô-Ð-ð
 ×)Ò)ØØ=ØIð *ñ ô €Mð
 ×ÒØØ3Ð3Ð3ØØBð	 ñ ô ð ð ×Ò¥JÐÑ/Ô/Ð/à×'Ò'ØØ1ð (ñ ô €Kð "×0Ò0°mÐ0ÑDÔD€OØ×)Ò)¨%Ð6OÐ)ÑPÔP€HØ×ÒØØMð ñ ô ð ð ×ÒØØØ/Ð/Ð/Ø%ð	 ñ ô ð ð ×Ò™)Ñ*BÐÑCÔCÐCØ×ÒÙÑGð ñ ô ð ð ×Ò˜.Ñ/EÐÑFÔFÐFØ×ÒÐ+Ñ2KÐÑLÔLÐLØ×Ò˜-Ñ.?ÐÑ@Ô@Ð@Ø×Ò˜)Ñ*@ÐÑAÔAÐAØ×ÒØØÙ9ð ñ ô ð ð
 ×ÒØ�%Ñ&Hñ ñ ô ð ð ×ÒØØÙ7ð ñ ô ð ð
 ×Ò˜-Ñ.PÐÑQÔQÐQØ×*Ò*¨6Ñ8QÐ*ÑRÔR€IØ×Ò˜:¨SÑ7QÑÑRÔRÐRØ!×,Ò,ØÑJð -ñ ô €Kð ×Ò˜Z©mÐÑ<Ô<Ð<Ø×ÒÙÑCð ñ ô ð ð !×+Ò+ÙÑRð ,ñ ô €Jð ×Ò˜J©]ÐÑ;Ô;Ð;Ø!×,Ò,¨XÑ<]Ð,Ñ^Ô^€KØ×Ò˜Z©mÐÑ<Ô<Ð<Ø!×,Ò,¨XÑ<lÐ,ÑmÔm€KØ×Ò˜Z©mÐÑ<Ô<Ð<Ø"×-Ò-©iÑ>iÐ-ÑjÔj€LØ×ÒÑ.°cÐC`ÑC`ÐC`ÐjqÑÑrÔrÐrØ×Ò˜mÑ2kÐÑlÔlÐlØ×ÒÑ.Ñ5oÐÑpÔpÐpØ×Ò˜iÑ.QÐÑRÔRÐRØ×Ò˜n°\ÐHzÐÑ{Ô{Ð{Ø×Ò˜kµÑ<hÑÑiÔiÐiØ×Ò¥(ÐÑ+Ô+Ð+ð
 ×)Ò)ØÙ,Ù?ð *ñ ô €Mð
 ×ÒØ˜Ñ+Tð ñ ô ð ð ×ÒØ˜Ñ,Oð ñ ô ð ð ×Ò¥JÐÑ/Ô/Ð/ð
 ×'Ò'ÙÑ*Ñ8Pð (ñ ô €Kð "×0Ò0±nÐ0ÑEÔE€Oð  ×*Ò*¨6Ñ8MÐ*ÑNÔN€IØ×Ò˜7¨<Ñ>UÐÑVÔVÐVð "×,Ò,Ù˜5˜'Ñ(@ð -ñ ô €Kð ×ÒÙÑJð ñ ô ð ð ×ÒÙ˜Ñ"Vñ ñ ô ð ð ×Ò˜XÑ,NÐÑOÔOÐOØ×ÒÙÙ]ð ñ ô ð ð ×Ò™Z­cÑ8OÑÑPÔPÐPØ×ÒÙÙØÙ=ð	 ñ ô ð ð ×ÒÙÙXð ñ ô ð ð ×ÒÙñ lð ñ ô ð ð  ×*Ò*ÙÑ5ð +ñ ô €Ið ×Ò™8Ñ*:ÐÑ;Ô;Ð;Ø×Ò™<©nÐÑ=Ô=Ð=Ø×Ò™:Ñ,IÐÑJÔJÐJØ×Ò˜8©.ÐÑ9Ô9Ð9Ø×Ò™;Ñ-BÐÑCÔCÐCØ×Ò™:­CÑ6HÑÑIÔIÐIØ×ÒÙÙØÙXð	 ñ ô ð ð ×ÒÙÙØÙNð	 ñ ô ð ð ×ÒÙÙØÙ<ð	 ñ ô ð ð ×ÒÙØÙ6ð ñ ô ð ð
 ×ÒÙÙuð ñ ô ð ð ×ÒÙñ Að ñ ô ð ð !×+Ò+©GÑ:QÐ+ÑRÔR€JØ×Ò™HÑ+<ÐÑ=Ô=Ð=à!×,Ò,©XÑ<QÐ,ÑRÔR€KØ×Ò™XÑ,>ÐÑ?Ô?Ð?à×)Ò)ØÑ:ð *ñ ô €Hð ×Ò™(Ñ)<ÐÑ=Ô=Ð=Ý˜8Ñ$Ô$Ð$à!×,Ò,Ø˜4¡Ð*Ñ1Ið -ñ ô €Kð ×Ò™XÑ,>ÐÑ?Ô?Ð?ð ×Ò˜xÑ.RÐÑSÔSÐSð  ×*Ò*©6Ñ8TÐ*ÑUÔU€IÝ˜9Ñ%Ô%Ð%Ý˜;Ñ'Ô'Ð'Ø×Ò¥(ÐÑ+Ô+Ð+ð
  ×*Ò*ÙÙ3Ùfð +ñ ô €Nð
 (×6Ò6Ñ<LÐ6ÑMÔMÐà×*Ò*Ù˜e˜WÑ+Jð +ñ ô €Fð ×Ò™Ñ%QÐÑRÔRÐRØ
×ÒÙ™BÑ%Wð ñ ô ð ð ×ÒÙ™BÑ%Lð ñ ô ð ð ×Ò˜±Ñ:WÐÑXÔXÐXØ
×ÒØ™BÑ%Jð ñ ô ð ð ×ÒÙÙÙCð ñ ô ð ð
 ×ÒÙÙÙ9ð ñ ô ð ð
 ×ÒÙ™BÑ%Nð ñ ô ð ð ×ÒÙØñð ñ ô ð ð ×!Ò!Ø˜˜Ñ%Eð "ñ ô ð ð ×)Ò)Ø˜4˜&Ñ'>ð *ñ ô €Eð 
×Ò‘vÑ$AÐÑBÔBÐBà ×+Ò+ÙÑ:ð ,ñ ô €Gð ×Ò™Ñ&AÐÑBÔBÐBØ×ÒÙ™RÑ&Tð ñ ô ð ð ×Ò¥[ÐÑ1Ô1Ð1ð
 ×(Ò(ÙÙ4ñIð	 )ñ ô €Lð $×2Ò2¹Ð2ÑGÔGÐà×ÒØ˜˜ÙNð  ñ ô ð ð
  ×*Ò*ÙÙKð +ñ ô €Hð ×ÒÙÙPð ñ ô ð ð ×ÒÙ™:¨tñ8ñ ñ ô ð ð ×ÒÙ™~°tñ1ñ ñ ô ð ð "×,Ò,Ù˜8 TÐ*ÙRð -ñ ô €Jð ×ÒØÙNð ñ ô ð ð
 ×ÒÙñ6ð  ñ ô ð ð ×Ò¥9ÐÑ-Ô-Ð-ð
 ×)Ò)ÙÙ3Ù=ð *ñ ô €Mð
 ×ÒÙ˜Ñ+Pð ñ ô ð ð ×Ò¥JÐÑ/Ô/Ð/ð
 ×'Ò'ÙÙ7ñJð (ñ ô €Kð ×ÒÙØÙ^ð ñ ô ð ð
 ×Ò¥(ÐÑ+Ô+Ð+ð
 ×(Ò(ÙÙFñ+õ !Ô<ññ )ñ ô €Lð  ×+Ò+±Ð+ÑAÔA€IØ×'Ò'ÙÙOð (ñ ô €Lð ×ÒÙÝÙÙIð	 ñ ô ð ð ×ÒÙÝÙÙ0ð	 ñ ô ð ð ×ÒÙØÙ<ð ñ ô ð ð
 ×(Ò(ÙÙ>ð )ñ ô €Mð ×ÒÙÙØÙNñ	 ñ ô ð ð ×Ò¥9ÐÑ-Ô-Ð-ð
 ×)Ò)ÙÙ:ñHð *ñ ô €Mð ×ÒÙÙÙVð ñ ô ð ð
 ×ÒØØØÙ]ð	 ñ ô ð ð ×ÒØ‰iÑOð ñ ô ð ð ×Ò¥JÐÑ/Ô/Ð/ð
 ×)Ò)ÙÙ6ñð *ñ ô €Mð ×Ò™yÑ/LÐÑMÔMÐMØ×ÒØÙØÙ<ð	 ñ ô ð ð ×Ò¥JÐÑ/Ô/Ð/ð
 ×)Ò)ÙÙ*Ù7ð *ñ ô €Mð
 &×4Ò4Ñ:JÐ4ÑKÔKÐð × Ò ¡Ñ.JÐ ÑKÔKÐKð × Ò ¡Ñ.JÐ ÑKÔKÐKð #×-Ò-©eÑ:UÐ-ÑVÔV€JØ×ÒÙ�SÑRñ ñ ô ð ð ×Ò™G¨3±^ÑÑDÔDÐDð × Ò ¡Ñ.FÐ ÑGÔGÐGð × Ò ¡Ñ2HÐ ÑIÔIÐIð × Ò ¡Ñ/RÐ ÑSÔSÐSð × Ò ¡Ñ1QÐ ÑRÔRÐRà×Ò¥JÐÑ/Ô/Ð/ð
  ×*Ò*ÙÙ=ÙEð +ñ ô €Nð
 !×/Ò/Ñ5EÐ/ÑFÔF€Kà×Ò˜6Ñ(GÐÑHÔHÐHà(×3Ò3ÙÑ0ð 4ñ ô Ðð ×'Ò'ÙÑMð (ñ ô ð ð ×'Ò'©Ñ5NÐ'ÑOÔOÐOà'×2Ò2±8ÑBVÐ2ÑWÔWÐØ×&Ò&¡z¹Ð&ÑHÔHÐHØ×&Ò&¡yÑ7JÐ&ÑKÔKÐKà×Ò™?Ñ1JÐÑKÔKÐKñð ð ð
 ×Ò [ÐÑ1Ô1Ð1ð
 ×)Ò)ÙÙ<ñ mð *ñ ô €Mð
 &×4Ò4¹/Ð4ÑJÔJÐà%×0Ò0ÙÑ@ð 1ñ ô €Mð ×ÒÙ•s¡AÑ,Fð ñ ô ð ð ×ÒÙ•s¡BÑ-Mð ñ ô ð ð ×ÒØÙð
ñ 
ð 
ñ /ñ ñ ô ð ð &×0Ò0ÙÑ0ð 1ñ ô €Mð ×Ò™w©^ÐÑ<Ô<Ð<Ø×ÒØÙð
ñ 
ð 
ñ ñ ô ð ð ×Ò™y­s¹BÁ]ÐÑSÔSÐSà&×1Ò1°)ÑBSÐ1ÑTÔT€NØ×ÒÙÑPð  ñ ô ð ð ×ÒÙ™bÑ'Hð  ñ ô ð ð ×ÒØ˜,Ñ-Sð  ñ ô ð ð ×ÒØØØÙ<ð	  ñ ô ð ð '×1Ò1ÙÑ<ð 2ñ ô €Nð ×Ò¡Ñ3EÐÑFÔFÐFà#×.Ò.¨vÑ<SÐ.ÑTÔT€KØ×ÒØ™EÐ+MÑ+MÐ+Mñ ñ ô ð ð ×ÒÙØñ8ð ñ ô ð ð %×/Ò/ÙÑ>ð 0ñ ô €Lð ×ÒÙ�cÑ Hñ ñ ô ð ð &×0Ò0ÙÑ4ð 1ñ ô €Mð ×ÒÙØÙFñ ñ ô ð ð %×/Ò/ÙÑ4ð 0ñ ô €Lð ×ÒÙ�cÑ Hñ ñ ô ð ð )×3Ò3ØÑ8ð 4ñ ô Ðð ×!Ò!¡&Ñ/EÐ!ÑFÔFÐFà$×/Ò/ÙÙ^ñAð	 0ñ ô €Lð ×ÒÙÑBð ñ ô ð ð ×ÒÙØÙKð ñ ô ð ð
 ×ÒØØØÙ<ð	 ñ ô ð ð '×1Ò1ÙÑ7ð 2ñ ô €Nð ×Ò¡Ñ3LÐÑMÔMÐMØ×ÒÙ™©8±YÐ*?ÑFWñ  ñ ô ð ð ×ÒÙ™"Ñ#Lð  ñ ô ð ð (×2Ò2ÙÑ=ð 3ñ ô €Oð *×8Ò8Ñ>OÐ8ÑPÔPÐØ%×0Ò0ÙÑ:ð 1ñ ô €Kð ×Ò™XÑ,VÐÑWÔWÐWØ%×0Ò0ÙÑ>ð 1ñ ô €Kð ×Ò™WÑ+AÐÑBÔBÐBØ×ÒØ˜,Ñ-Tð ñ ô ð ð #×-Ò-©eÑ:PÐ-ÑQÔQ€JØ×.Ò.±LÐ.ÑAÔA€NØ×Ò˜fÑ+AÐÑBÔBÐBØ×'Ò'¨Ñ4WÐ'ÑXÔX€GØ×Ò™Ñ&EÐÑFÔFÐFØ×&Ò& x±nÐ&ÑEÔE€FØ
×Ò™Ñ%9ÐÑ:Ô:Ð:ð × Ò ÙÙSð !ñ ô ð ñ

!ð 
!ð 
!ð ×Ò JÐÑ/Ô/Ð/ð
  ×*Ò*ÙÙ?ÙZð +ñ ô €Nð
 (×6Ò6Ñ<LÐ6ÑMÔMÐà(×3Ò3ØÑGð 4ñ ô €Oð × Ò ÙÙ]ð !ñ ô ð ð × Ò ØÙØÙ3ð	 !ñ ô ð ð ,×HÒHÑJÔJÐØ×&Ò&ÙØÙNð 'ñ ô ð ð
 ×&Ò&ÙØÙlð 'ñ ô ð ð (×2Ò2ÙÑDð 3ñ ô €Nð ×Ò¡Ñ-DÐÑEÔEÐEà'×2Ò2Ø˜4 Ð-Ñ4Pð 3ñ ô €Nð ×Ò¡Ñ-NÐÑOÔOÐOà×!Ò! &°4°&Ñ?WÐ!ÑXÔXÐXà'×2Ò2ÙÑ1ð 3ñ ô €Nð ×Ò¡Ñ-DÐÑEÔEÐEà(×3Ò3ÙÑ>ð 4ñ ô €Oð × Ò ¡Ñ.FÐ ÑGÔGÐGñð ð ð
 ×Ò [ÐÑ1Ô1Ð1ðSØ?Ñ?Ð?Ð?Ð?Ð?à4Ð4Ñ6Ô6ð 	0ð 	0ˆHØ&×1Ò1Ø™Ô Ø™fÔ%Ø$ŸLšL©¹Ñ;Ô;Ý *©:Ñ 6Ô 6Ô Rñ	 2ñ ô ˆMð !ˆH‘ZÔ  Ñ/Ô/Ð/Ð/ð	0øõ ð Sð Sð SÝÔ�(Ñ#Ô#×)Ò)Ñ*KÈTÑRÔRÐRÐRÐRÐRÐRÐRøøøøðSøøøð ×)Ò)ÙÙ1ñDð	 *ñ 
ô 
€Mð ×-Ò-Ñ3CÐ-ÑDÔD€JØ×ÒØÑHð ñ ô ð ð ×Ò˜(Ñ)NÐÑOÔOÐOØ×Ò™%Ñ&QÐÑRÔRÐRØ×)Ò)ÙÙ@ð *ñ ô €Mð ×ÒØØØÙ'ð	 ñ ô ð ð ×ÒÙØ)Ñ)Ð)ÙÙIð	 ñ ô ð ñ<!ð <!ð <!ð| ×Ò JÐÑ/Ô/Ð/ð
 ×(Ò(ÙÙ=ñZð	 )ñ 	ô 	€Lð ×ÒÙØÙEð ñ ô ð ð
 ×+Ò+±Ð+Ñ@Ô@€Ið ×'Ò'ØÙ?ð (ñ ô €Lð ×ÒÙÙÙ.ð ñ ô ð ð  ×*Ò*ÙÙ,ð +ñ ô €Oð × Ò ÙÙÙÙFñ	 !ñ ô ð ð × Ò ÙÙÙ2ð !ñ ô ð ð ×)Ò)ÙÙ+ð *ñ ô €Nð ×ÒÙÙÙÙ;ñ	  ñ ô ð ð ×ÒÙÙÙ2ð  ñ ô ð ñ
 ð 
 ð 
 ð ×Ò 9ÐÑ-Ô-Ð-ð ×&Ò&ÙÙAñJð	 'ñ 	ô 	€Jð ×'Ò'©\Ð'Ñ:Ô:€Gà×$Ò$ÙÙQð %ñ ô €Kð ×ÒØØØÙ/ð	 ñ ô ð õ ˜;Ñ'Ô'Ð'à×"Ò"ØÑAð #ñ ô €Ið ×Ò™6Ñ(JÐÑKÔKÐKØ×Ò™7Ñ)@ÐÑAÔAÐAØ×Ò™;Ñ-GÐÑHÔHÐHØ×ÒÙ™ RÑ.Kñ ñ ô ð ð ×Ò™8©g±xÐ-@Á}ÑÑUÔUÐUØ×Ò™:Ñ,CÐÑDÔDÐDØ×ÒÙÙØÙBñ	 ñ ô ð ð ×!Ò! (°T°FÑAWÐ!ÑXÔX€HØ×Ò™&Ñ'>ÐÑ?Ô?Ð?à×Ò�v¨ vÑ4QÐÑRÔRÐRà×#Ò#¡FÑ1MÐ#ÑNÔN€JØ×Ò™FÑ)>ÐÑ?Ô?Ð?à×"Ò"Ù™h˜ZÑ.Eð #ñ ô €Ið ×Ò™6Ñ(BÐÑCÔCÐCà×$Ò$ØÙDð %ñ ô €Kð ×Ò™VÑ*JÐÑKÔKÐKå˜:Ñ&Ô&Ð&ñð ð ð
 ×Ò ÐÑ)Ô)Ð)ð
 !×+Ò+ÙÙKÙ>ð ,ñ ô €Oð
 *×8Ò8Ñ>OÐ8ÑPÔPÐà'×2Ò2°6Ñ@VÐ2ÑWÔW€MØ×ÒØÑJð ñ ô ð ð ×ÒÙ�¡RÑ.Dð ñ ô ð ð *×4Ò4ÙÑ8ð 5ñ ô €Oð × Ò ÙÑBð !ñ ô ð ð × Ò  Ñ2DÐ ÑEÔEÐEØ× Ò ¡Ñ6QÐ ÑRÔRÐRà)×4Ò4ÙÑ2ð 5ñ ô €Oð × Ò ¡Ñ4JÐ ÑKÔKÐKØ× Ò Ø�˜lÑ1Dð !ñ ô ð ð )×3Ò3±GÑBWÐ3ÑXÔX€NØ×ÒÙÝÙÙ>ð	  ñ ô ð ð ×Ò 
Ñ1WÐÑXÔXÐXØ×ÒØ�˜lÑ1Dð  ñ ô ð ð ×"Ò"¡7Ñ1PÐ"ÑQÔQÐQà)×4Ò4ÙÑ8ð 5ñ ô €Oð × Ò ¡Ñ4JÐ ÑKÔKÐKØ× Ò ¡±Ñ:UÑ ÑVÔVÐVà)×4Ò4ÙÙQð 5ñ ô €Oð × Ò ØÑJð !ñ ô ð ð × Ò Ù�¡RÑ.Rð !ñ ô ð ñ¥ñ ­ð ñ ð ð ðeð eð eñ eð eð eðN × Ò  lÐ Ñ3Ô3Ð3ð
 !×+Ò+ÙÙ0Ùlð ,ñ ô €Oð
 × Ò Ù•s¡BÑ-Vð !ñ ô ð ð × Ò ØÑLð !ñ ô ð ñ5ð 5ð 5ð × Ò  lÐ Ñ3Ô3Ð3ð
 ×'Ò'ÙÙ'Ù^ð (ñ ô €Kð
 "×0Ò0±mÐ0ÑDÔD€Oð #×-Ò-ÙÙ.ñ8ð .ñ ô €Lð ×ÒØÑLð ñ ô ð ð ×ÒØØÙIð ñ ô ð ð
 ×ÒÙÙ™fÐ%ÙÙMð	 ñ ô ð ð ×ÒÙØÙAð ñ ô ð ð
 ×ÒÙØÙOð ñ ô ð ð
 ×ÒÙÑ#Vð ñ ô ð ð ×ÒÙØ/Ñ/Ð/ÙÙAð	 ñ ô ð ð ×ÒØ�˜lÑ1Lð ñ ô ð ð
 #×-Ò-ÙÙ�	ÙDÙgñ	 .ñ ô €Lð ×ÒØÑLð ñ ô ð ð ×ÒØØÙDð ñ ô ð ð
 ×ÒØ�˜lÑ1Lð ñ ô ð ñð ð ð
 ×Ò (ÐÑ+Ô+Ð+ð
  ×*Ò*©9Ñ;UÐ*ÑVÔV€NØ×Ò¥[ÐÑ1Ô1Ð1ð
 ×)Ò)ÙÙ8ÙQð *ñ ô €Mð
 ×ÒÙØØÙið	 ñ ô ð ð ×ÒÙØØÙOð	 ñ ô ð ð ×Ò¥JÐÑ/Ô/Ð/ð
 "×,Ò,ØÙ%Ù`ð -ñ ô Ðð
 ×!Ò!ØØÙLð "ñ ô ð ð
 ×!Ò!Ø�˜lÑ1Lð "ñ ô ð ð ×!Ò!¥}Ð!Ñ5Ô5Ð5ð
 ×&Ò&ÙÙHÙeð 'ñ ô €Jõ
 ˜:Ñ&Ô&Ð&ñ	ð 	ð 	ð ×Ò ÐÑ)Ô)Ð)ð
  ×*Ò*ÙÙEð +ñ ô €Nð (×6Ò6Ñ<LÐ6ÑMÔMÐà×!Ò! &Ñ/BÐ!ÑCÔCÐCØ$×/Ò/ÙÑ0ð 0ñ ô €Kð ×Ò™^Ñ2OÐÑPÔPÐPà'×2Ò2ÙÑ-ð 3ñ ô €Nð ×ÒÙÑEð  ñ ô ð ð ×ÒÙØÙBð  ñ ô ð ð
 ×ÒÙØÙ6ð  ñ ô ð ð
 ×ÒÙÙÙ=ñ  ñ ô ð ð
 ×ÒÙ˜\Ñ0Nð  ñ ô ð ð (×2Ò2±8ÑBTÐ2ÑUÔU€NØ×Ò¡Ñ5HÐÑIÔIÐIØ×ÒØˆg˜lÑ1Kð  ñ ô ð ð &×0Ò0±Ñ>TÐ0ÑUÔU€LØ×Ò™nÑ3DÐÑEÔEÐEà&×1Ò1ÙÑ.ð 2ñ ô €Mð ×Ò™~±NÐÑCÔCÐCØ×ÒÙ˜<Ñ.Ið ñ ô ð ð ×ÒØÙÙÙ8ñ	 ñ ô ð ð (×2Ò2±8ÑBTÐ2ÑUÔU€NØ×Ò¡
Ñ1GÐÑHÔHÐHØ×Ò¡
Ñ1CÐÑDÔDÐDà'×2Ò2ÙÑ4ð 3ñ ô €Nð ×Ò¡Ñ5HÐÑIÔIÐIØ×ÒÙ‰j $Ñ-Sð  ñ ô ð ð (×2Ò2ÙÑ6ð 3ñ ô €Nð ×Ò¡	Ñ0IÐÑJÔJÐJØ×ÒØÙÙÙ<ñ	  ñ ô ð ð ×Ò¥[ÐÑ1Ô1Ð1ð
 #×-Ò-ÙÙAð .ñ ô Ðð ×"Ò"ÙØÙØ'Ñ'Ð'Ù)ñ #ñ ô ð ð ×"Ò"Ð(QÐ(QÑ(QÐ(QÐ"ÑRÔRÐRð
 "×,Ò,ÙÙ)Ùgð -ñ ô Ðð
 ×!Ò!Ù•s¡DÑ/Dð "ñ ô ð ð ×!Ò!Ù™+Ñ,Fð "ñ ô ð ð ×!Ò!Ù˜LÑ/Qð "ñ ô ð ð ×!Ò!ØØÙZð "ñ ô ð ð
 ×!Ò!ØØñ8ð	 "ñ ô ð ð ×!Ò!¥}Ð!Ñ5Ô5Ð5ð
 ×'Ò'ÙÙ/ÙQÝ Ô<ññ (ñ ô €Kð& ×ÒÙØÙÙ_ñ	 ñ ô ð ð ×ÒÙÙÝÙÙ4ð ñ ô ð ð ×ÒÙÙØÙ9ð	 ñ ô ð ð ×ÒÙÙÙFñ ñ ô ð ð
 ×ÒÙÙÙ@ñ ñ ô ð ð
 ×ÒÙÙÙ;ñ ñ ô ð ð
 ×ÒÙÙÙDñ ñ ô ð ð
 ×Ò¥(ÐÑ+Ô+Ð+ð :Ñ9Ð9Ð9Ð9Ð9à,Ð,Ñ.Ô.€NØð Ý˜>­3¬8±A°B°B¬<Ñ8Ô8Ð8õ 	Œ‘‰Œˆå1µ#´(¹1¸2¸2´,Ñ?Ô?€Oð ÐÐÐõ +2°*¹iÑ*HÔ*HÐS�ˆJÔ×#Ò#Ñ%Ô%Ñ&Ô&Ð&ÍcÉeÌeð õ ð ð ñ ð Ø"1ðñ ô ñ ô €Nð ð 2Ø"ˆ
ÔÝœ
ˆð	6ØŸš™œ�CŒJØ×$Ò$ _Ñ5Ô5ˆDØ&�CŒJˆJøÝð 
	6ð 
	6ð 
	6Ø&�CŒJð Œx˜1Š}ˆ}Øð #(ˆJÔØ×$Ò$ _Ñ5Ô5ˆDˆDˆDˆDˆDˆDøøøøð
	6øøøð $ˆ
ÔØ× Ò  Ñ1Ô1ˆð „|ð Ý�DÑÔÐØˆð 2Ñ1Ð1€Oá"¨©v Ð7Ø%¨ wÐ/Ù © yÐ1ñð Ðð
 -×0Ò0°´¹|ÑLÔLÑ€IˆxàŒ˜Ð'Ð'Øð 	(Ý! $¨	°4Ñ8Ô8¸HÐDÐDå�W T©>¸5ÑAÔAÑBÔBˆð	Ø;Ñ;Ð;Ð;Ð;Ð;ØÐÑÔÐÐøÝð 	ð 	ð 	Ý�LŠLÙ8À4ñ ñ ô ð ð ð ð	øøøð	Ø5Ñ5Ð5Ð5Ð5Ð5Ø>Ñ>Ð>Ð>Ð>Ð>Ø Ð   ¡¤¸]ÑKÑKÔKÐKÐKøÝð 	ð 	ð 	Ý�LŠLÙ?Øñ ñ ô ð ð ð ð	øøøõ ˆt‘Y Ñ%Ô%ð Ø2Ñ2Ð2Ð2Ð2Ð2åŒ��ØŒLÝ˜$ ¨Ñ.Ô.Ý˜T :¨tÑ4Ô4ñ
ñ 
ô 
ñ 	ô 	ð 	ð 	Œð �tÔ)ð ¨t¬|Ð/CØˆŒñ
ð 		-ð 		-‰MˆD�'õ ˜4 Ñ&Ô&ð -Ý˜˜d GÑ,Ô,Ð,øÝ�‰ŒˆØˆð „|Ðñ	
ð 	-ð 	-‰MˆD�'õ ˜4 Ñ&Ô&ð -Ý˜˜d GÑ,Ô,Ð,øÝ�‰ŒˆØˆõ ˆt‘VÑÔð Ø�	Š	�$‰Œˆˆˆà×ÒÑÔÐÐÐsq   ÂJA7BL ÂL
BMÂL.BM ÂM BMÃN8?CO8 ÃO8
CQ ÃP4CP;ÃP;CQ ÃS.CT  ÃT (CT+ÃT*CT+ÃT/$CU ÃU(CU?ÃU>CU?Ú__main__)r   N)rP   )F)NFNNrw   r›  )rn   N)rn   rn   NN)rn   r(  )FN)µr  r   r8   rK  r5  r   Úpathlibr   Útypingr   r   r‰   r   rC  r·  r¶  r°  r”  r¹  rC   r„   rE   Úhermes_cli.env_loaderrF   r9   ÚyamlÚ_yaml_earlyÚ	_cfg_pathr/   rî  Ú_fÚ	safe_loadr†   Ú_early_sec_cfgr‡   rˆ   Ú_early_redactrÅ   r7   Úhermes_loggingrO   Ú_setup_loggingrS   Ú_load_config_earlyr.   rT   Ú_apply_ipv4Ú
_early_cfgÚ_netr(  rb   ra   rX   rÜ  rY   rZ   r[   r\   r)  r  rž  rh   r°  rª   rë   r"  r+  r8  r[  rc  rr  r~  r†  rž  r�  rÀ  ÚtuplerÝ  rõ  r*  r.  rR  r  rX  rW  rÄ  rç  Ú__annotations__rì  rô  rc   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¿  rp  ru  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>  rF  r�  r›  rŸ  r¢  r¯  r½  rÇ  rÏ  r¹  rÀ  rÄ  rÈ  rÍ  rÐ  rÓ  rÕ  rÞ  ræ  rõ  rz  r|  r   r/  r1  rA  rR  rY  rW  rì  r+  r9  rB  rN  r  rÜ   r   r   ú<module>rÝ     sÆ  ðð*ð *ð *ðX €€€Ø 	€	€	€	Ø €€€Ø Ð Ð Ð Ø 
€
€
€
Ø Ð Ð Ð Ð Ð Ø Ð Ð Ð Ð Ð ðð ð ð ð˜sð  tð ð ð ð ð$ ˆt�H‰~Œ~Ô$Ô+×3Ò3Ñ5Ô5€Ø „‡‚��3�3�|Ñ$Ô$Ñ %Ô %Ð %ð:ð :ð :ð :ðz Ð Ñ Ô Ð ð .Ð -Ð -Ð -Ð -Ð -Ø 4Ð 4Ð 4Ð 4Ð 4Ð 4à Ð ˜|¨fÑ4Ð 5Ñ 5Ô 5Ð 5ð	Ø b¤jÐ0Ð0Ø"Ð"Ð"Ð"Ø#�OÑ%Ô%¨Ñ5ˆ	Ø×ÒÑÔð 	Ø��i¨'Ð2Ñ2Ô2ð W°bØ"7 +Ô"7¸Ñ";Ô";Ð"A¸r×!FÒ!FÀzÐSUÑ!VÔ!V�ðWð Wð Wñ Wô Wð Wð Wð Wð Wð Wð Wøøøð Wð Wð Wð Wàˆz˜.¨$Ñ/Ô/ð UØ .× 2Ò 2Ð3CÑ DÔ D�Ø Ð,Ø:=¸#¸mÑ:LÔ:L×:RÒ:RÑ:TÔ:T�B”JÐ6Ñ7ØØøøØð 	ð 	ð 	Ø€Dð	øøøð
	Ø>Ð>Ð>Ð>Ð>Ð>à€N˜ÐÑÔÐÐøØð 	ð 	ð 	Ø€Dð	øøøð
	ØCÐCÐCÐCÐCÐCØEÐEÐEÐEÐEÐEà#Ð#Ñ%Ô%€JØ�>Š>˜) RÑ(Ô(€DØ€z�$˜ÑÔð   $§(¢(¨<Ñ"8Ô"8ð  Øˆ˜$ÐÑÔÐØ�D�DøØð 	ð 	ð 	Ø€Dð	øøøð €€€Ø Ð Ð Ð Ø Ð Ð Ð Ð Ð à 4Ð 4Ð 4Ð 4Ð 4Ð 4Ð 4Ð 4Ø EÐ EÐ EÐ EÐ EÐ EÐ EÐ Eà	ˆÔ	˜8Ñ	$Ô	$€ð;˜#ð ;ð ;ð ;ð ;ð$o dð oð oð oð oðdp Tð p¨h°s¬mð pð pð pð pðfð  #ð °(¸3´-ð ð ð ð ðð ˜$ð ¨ð ¸ð ð ð ð ð$Z% tð Z%°tð Z%ð Z%ð Z%ð Z%ðz%¨sð %°xÀ´}ð %ð %ð %ð %ðP1¨°¬ð 1¸$ð 1ð 1ð 1ð 1ðh9 ð 9¨ð 9ð 9ð 9ð 9ð	˜tð 	¨°¬ð 	ð 	ð 	ð 	ð˜tð ¨ð ð ð ð ð4 dð ¨tð ð ð ð ð&60ð 60ð 60ð 60ðrU9˜Dð U9¨4ð U9°E¸$¸s¼)ÀT¸/Ô4Jð U9ð U9ð U9ð U9ðr (,ØØØ"ð	,ð ,Ø ”}ð,àð,ð �CŒ=ð,ð �sŒmð	,ð ,ð ,ð ,ð^Pð Pð Pðfð ð ðJYð JYð JYðZð ð ð)ð )ð )ðo'ð o'ð o'ð o'ðd	
ð 
ð 
ðX	*ð 	*ð 	*€
ˆD��s˜C �}Ô%Ô&ð 	ð 	ñ 	ð $ð ¨3ð ð ð ð ð* ØØðð ð Ø
ðð ðð ð	ð
 ðð ðð 
ðð ð ð ð@˜Cð ð ð ð ð<3"ð 3"ð 3"ð 3"ðlD@˜sð D@ tð D@ð D@ð D@ð D@ðV ð	.Kð .KØ
ð.Kàð.Kð ð.Kð ð	.Kð
 
ð.Kð .Kð .Kð .Kðb'W Cð 'W°4ð 'W¸Dð 'Wð 'Wð 'Wð 'WðT 12ð $ð $ð $ð $ð $ðN8ð 8ð 8ð 8ðv6ð 6ð 6ð 6ðrið ið ið iðXWð Wð Wð Wðv ØðÐ ð(ð (ð (ð (ðVHð Hð Hð HðVCð Cð CðL #ð ¨#ð ð ð ð ð*
/ð 
/ð 
/ð 
/ð ?Cð4Qð 4Qð 4Qð 4QðnBð Bð Bð BðJ=Bð =Bð =Bð@U/ð U/ð U/ðr /Ð .Ð .Ð .Ð .Ð .ð¨ð ð ð ð ð+¨#ð +°$ð +ð +ð +ð +ðUð Uð Uð Uðp|ð |ð |ð |ð~nDð nDð nDð nDðblð lð lð lð^ Cð ¨Cð ð ð ð ð
¨ð 
°ð 
ð 
ð 
ð 
ðnð nð nð nðbUð Uð Uð Uðptð tð tð tðngð gð gð gðTZð Zð ZðzHð Hð Hð HðVð ð ðð ð ðð ð ðð ð ðð ð ðð ð ðð ð ð>ð ð ðð ð ðð ð ðð ð ðð ð ð	ð 	ð 	ðð ð ðð ð ðDð ð ð ð ¨ð ð ð ð ð8/ð / ð /¨sð /À%ð /ÐTWð /ð /ð /ð /ðd 38ð 'ð 'ð '˜4ð '¨4ð '¸Dð 'ð 'ð 'ð 'ðTE"ð E"ð E"ðP+¨D°¬Ið +¸Dð +ÀXÈcÄ]ð +ð +ð +ð +ð\Ø�#ŒYðØ!ðØ.1ðàˆc„]ðð ð ð ð$ 59ð
ð 
Øð
Ø$,¨S¤Mð
à	ð
ð 
ð 
ð 
ð& Øðið iØ�#ŒYðià	ðið ðið ð	ið 
ðið ið ið ið`ð ð Ð ð GÐ Ø3Ð ð˜T #œYð ¨Tð °h¸s´mð ð ð ð ð ˜ #œð ¨4ð ð ð ð ð" $ s¤)ð °$ð ¸4ð ð ð ð ð $ s¤)ð °$ð ¸4ð ð ð ð ð D¨¤Ið °Dð Àð È3ð ÐSVð ð ð ð ð D dð Dð Dð Dð Dðð ð ð d¨3¤ið °dð ¸tð ð ð ð ð"oX¨4°¬9ð oX¸4ð oXÀDð oXð oXð oXð oXðdð ð ð8¨4°¬9ð ð ð ð ðH "&ð/
ð /
ð /
Ø˜Sœ	ð/
ð 
ˆc�3ˆhŒ˜$Ñ	ð/
ð 
ð	/
ð /
ð /
ð /
ðd4ð 4ð 4ð 4ðDF-ð F-ð F-ð F-ð F-ñ F-ô F-ð F-ðRNð N¨Tð Nð Nð Nð Nðbð ð ð,-Eð -Eð -Eð`OQð OQð OQð OQðd2ð 2ð 2ð:m¨ð mð mð mð mð`G dð G¨tð Gð Gð Gð GðTið ið iðX	ð ð ð@
%ð 
%ð 
%ð 
%ðð ð ð*W'ð W'ð W'ðtN ˆzÒÐØ€D�F„F€F€F€Fð Ðs\   Â%;E) Ã 'DÄE) ÄDÄE) ÄDÄAE) Å)E1Å0E1Å5F ÆFÆFÆAG0 Ç0G8Ç7G8