§
    ‰eîip[  ã                   óÞ  — 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ZddlmZ ddl	m
Z
 ddlmZmZmZ ddlmZ ddlmZ ddlmZ dd	lmZ dd
lmZ  ej        e¦  «        ZdZdZdZ dZ!de"fd„Z#de"de"de"fd„Z$de"de"de"fd„Z%ddl&m'Z(m)Z* dZ+dZ,dee"ee"         f         fd„Z-dZ.dee/         fd„Z0dee         fd„Z1dede"dee"         fd„Z2d6dee         dee3         fd „Z4d!Z5da6ee7         e8d"<   d6dee         dee7         fd#„Z9de"fd$„Z:da;ee/         e8d%<    ej<        ¦   «         Z=d&„ Z>d7d(e?dee/         fd)„Z@d*e/de"fd+„ZAd,e"de"fd-„ZB	 	 	 	 	 d8d.ed/e"d0e"d1ee3         d2ee"         d3e"d4e/fd5„ZCdS )9z…Welcome banner, ASCII art, skills summary, and update check for the CLI.

Pure display functions with no HermesCLI state dependency.
é    N)ÚPath)Úget_hermes_home)ÚDictÚListÚOptional)ÚConsole)ÚPanel)ÚTable)Úprint_formatted_text)ÚANSIz[1;38;2;255;215;0mz[1mz[2mz[0mÚtextc                 ó>   — t          t          | ¦  «        ¦  «         dS )z:Print ANSI-colored text through prompt_toolkit's renderer.N)Ú	_pt_printÚ_PT_ANSI)r   s    ú3/home/div/.hermes/hermes-agent/hermes_cli/banner.pyÚcprintr   $   s   € å�h�t‰nŒnÑÔÐÐÐó    ÚkeyÚfallbackÚreturnc                 óp   — 	 ddl m}  |¦   «                              | |¦  «        S # t          $ r |cY S w xY w)z5Get a color from the active skin, or return fallback.r   ©Úget_active_skin)Úhermes_cli.skin_enginer   Ú	get_colorÚ	Exception©r   r   r   s      r   Ú_skin_colorr   -   s[   € ðØ:Ð:Ð:Ð:Ð:Ð:ØˆÑ Ô ×*Ò*¨3°Ñ9Ô9Ð9øÝð ð ð Øˆˆˆðøøøó   ‚#& ¦5´5c                 óp   — 	 ddl m}  |¦   «                              | |¦  «        S # t          $ r |cY S w xY w)z?Get a branding string from the active skin, or return fallback.r   r   )r   r   Úget_brandingr   r   s      r   Ú_skin_brandingr"   6   s[   € ðØ:Ð:Ð:Ð:Ð:Ð:ØˆÑ Ô ×-Ò-¨c°8Ñ<Ô<Ð<øÝð ð ð Øˆˆˆðøøør   )Ú__version__Ú__release_date__u‹  [bold #FFD700]â–ˆâ–ˆâ•—  â–ˆâ–ˆâ•—â–ˆâ–ˆâ–ˆâ–ˆâ–ˆâ–ˆâ–ˆâ•—â–ˆâ–ˆâ–ˆâ–ˆâ–ˆâ–ˆâ•— â–ˆâ–ˆâ–ˆâ•—   â–ˆâ–ˆâ–ˆâ•—â–ˆâ–ˆâ–ˆâ–ˆâ–ˆâ–ˆâ–ˆâ•—â–ˆâ–ˆâ–ˆâ–ˆâ–ˆâ–ˆâ–ˆâ•—       â–ˆâ–ˆâ–ˆâ–ˆâ–ˆâ•—  â–ˆâ–ˆâ–ˆâ–ˆâ–ˆâ–ˆâ•— â–ˆâ–ˆâ–ˆâ–ˆâ–ˆâ–ˆâ–ˆâ•—â–ˆâ–ˆâ–ˆâ•—   â–ˆâ–ˆâ•—â–ˆâ–ˆâ–ˆâ–ˆâ–ˆâ–ˆâ–ˆâ–ˆâ•—[/]
[bold #FFD700]â–ˆâ–ˆâ•‘  â–ˆâ–ˆâ•‘â–ˆâ–ˆâ•”â•�â•�â•�â•�â•�â–ˆâ–ˆâ•”â•�â•�â–ˆâ–ˆâ•—â–ˆâ–ˆâ–ˆâ–ˆâ•— â–ˆâ–ˆâ–ˆâ–ˆâ•‘â–ˆâ–ˆâ•”â•�â•�â•�â•�â•�â–ˆâ–ˆâ•”â•�â•�â•�â•�â•�      â–ˆâ–ˆâ•”â•�â•�â–ˆâ–ˆâ•—â–ˆâ–ˆâ•”â•�â•�â•�â•�â•� â–ˆâ–ˆâ•”â•�â•�â•�â•�â•�â–ˆâ–ˆâ–ˆâ–ˆâ•—  â–ˆâ–ˆâ•‘â•šâ•�â•�â–ˆâ–ˆâ•”â•�â•�â•�[/]
[#FFBF00]â–ˆâ–ˆâ–ˆâ–ˆâ–ˆâ–ˆâ–ˆâ•‘â–ˆâ–ˆâ–ˆâ–ˆâ–ˆâ•—  â–ˆâ–ˆâ–ˆâ–ˆâ–ˆâ–ˆâ•”â•�â–ˆâ–ˆâ•”â–ˆâ–ˆâ–ˆâ–ˆâ•”â–ˆâ–ˆâ•‘â–ˆâ–ˆâ–ˆâ–ˆâ–ˆâ•—  â–ˆâ–ˆâ–ˆâ–ˆâ–ˆâ–ˆâ–ˆâ•—â–ˆâ–ˆâ–ˆâ–ˆâ–ˆâ•—â–ˆâ–ˆâ–ˆâ–ˆâ–ˆâ–ˆâ–ˆâ•‘â–ˆâ–ˆâ•‘  â–ˆâ–ˆâ–ˆâ•—â–ˆâ–ˆâ–ˆâ–ˆâ–ˆâ•—  â–ˆâ–ˆâ•”â–ˆâ–ˆâ•— â–ˆâ–ˆâ•‘   â–ˆâ–ˆâ•‘[/]
[#FFBF00]â–ˆâ–ˆâ•”â•�â•�â–ˆâ–ˆâ•‘â–ˆâ–ˆâ•”â•�â•�â•�  â–ˆâ–ˆâ•”â•�â•�â–ˆâ–ˆâ•—â–ˆâ–ˆâ•‘â•šâ–ˆâ–ˆâ•”â•�â–ˆâ–ˆâ•‘â–ˆâ–ˆâ•”â•�â•�â•�  â•šâ•�â•�â•�â•�â–ˆâ–ˆâ•‘â•šâ•�â•�â•�â•�â•�â–ˆâ–ˆâ•”â•�â•�â–ˆâ–ˆâ•‘â–ˆâ–ˆâ•‘   â–ˆâ–ˆâ•‘â–ˆâ–ˆâ•”â•�â•�â•�  â–ˆâ–ˆâ•‘â•šâ–ˆâ–ˆâ•—â–ˆâ–ˆâ•‘   â–ˆâ–ˆâ•‘[/]
[#CD7F32]â–ˆâ–ˆâ•‘  â–ˆâ–ˆâ•‘â–ˆâ–ˆâ–ˆâ–ˆâ–ˆâ–ˆâ–ˆâ•—â–ˆâ–ˆâ•‘  â–ˆâ–ˆâ•‘â–ˆâ–ˆâ•‘ â•šâ•�â•� â–ˆâ–ˆâ•‘â–ˆâ–ˆâ–ˆâ–ˆâ–ˆâ–ˆâ–ˆâ•—â–ˆâ–ˆâ–ˆâ–ˆâ–ˆâ–ˆâ–ˆâ•‘      â–ˆâ–ˆâ•‘  â–ˆâ–ˆâ•‘â•šâ–ˆâ–ˆâ–ˆâ–ˆâ–ˆâ–ˆâ•”â•�â–ˆâ–ˆâ–ˆâ–ˆâ–ˆâ–ˆâ–ˆâ•—â–ˆâ–ˆâ•‘ â•šâ–ˆâ–ˆâ–ˆâ–ˆâ•‘   â–ˆâ–ˆâ•‘[/]
[#CD7F32]â•šâ•�â•�  â•šâ•�â•�â•šâ•�â•�â•�â•�â•�â•�â•�â•šâ•�â•�  â•šâ•�â•�â•šâ•�â•�     â•šâ•�â•�â•šâ•�â•�â•�â•�â•�â•�â•�â•šâ•�â•�â•�â•�â•�â•�â•�      â•šâ•�â•�  â•šâ•�â•� â•šâ•�â•�â•�â•�â•�â•� â•šâ•�â•�â•�â•�â•�â•�â•�â•šâ•�â•�  â•šâ•�â•�â•�â•�   â•šâ•�â•�[/]u  [#CD7F32]â €â €â €â €â €â €â €â €â €â €â¢€â£€â¡€â €â£€â£€â €â¢€â£€â¡€â €â €â €â €â €â €â €â €â €â €[/]
[#CD7F32]â €â €â €â €â €â €â¢€â£ â£´â£¾â£¿â£¿â£‡â ¸â£¿â£¿â ‡â£¸â£¿â£¿â£·â£¦â£„â¡€â €â €â €â €â €â €[/]
[#FFBF00]â €â¢€â£ â£´â£¶â ¿â ‹â£©â¡¿â£¿â¡¿â »â£¿â¡‡â¢ â¡„â¢¸â£¿â Ÿâ¢¿â£¿â¢¿â£�â ™â ¿â£¶â£¦â£„â¡€â €[/]
[#FFBF00]â €â €â ‰â ‰â �â ¶â Ÿâ ‹â €â ‰â €â¢€â£ˆâ£�â¡ˆâ¢�â£ˆâ£�â¡€â €â ‰â €â ™â »â ¶â ˆâ ‰â ‰â €â €[/]
[#FFD700]â €â €â €â €â €â €â €â €â €â €â£´â£¿â¡¿â ›â¢�â¡ˆâ ›â¢¿â£¿â£¦â €â €â €â €â €â €â €â €â €â €[/]
[#FFD700]â €â €â €â €â €â €â €â €â €â €â ¿â£¿â£¦â£¤â£ˆâ �â¢ â£´â£¿â ¿â €â €â €â €â €â €â €â €â €â €[/]
[#FFBF00]â €â €â €â €â €â €â €â €â €â €â €â ˆâ ‰â »â¢¿â£¿â£¦â¡‰â �â €â €â €â €â €â €â €â €â €â €â €[/]
[#FFBF00]â €â €â €â €â €â €â €â €â €â €â €â €â ˜â¢·â£¦â£ˆâ ›â ƒâ €â €â €â €â €â €â €â €â €â €â €â €[/]
[#CD7F32]â €â €â €â €â €â €â €â €â €â €â €â¢ â£´â ¦â ˆâ ™â ¿â£¦â¡„â €â €â €â €â €â €â €â €â €â €â €[/]
[#CD7F32]â €â €â €â €â €â €â €â €â €â €â €â ¸â£¿â£¤â¡ˆâ �â¢¤â£¿â ‡â €â €â €â €â €â €â €â €â €â €â €[/]
[#B8860B]â €â €â €â €â €â €â €â €â €â €â €â €â €â ‰â ›â ·â „â €â €â €â €â €â €â €â €â €â €â €â €â €[/]
[#B8860B]â €â €â €â €â €â €â €â €â €â €â €â €â¢€â£€â ‘â¢¶â£„â¡€â €â €â €â €â €â €â €â €â €â €â €â €[/]
[#B8860B]â €â €â €â €â €â €â €â €â €â €â €â €â£¿â �â¢°â¡†â ˆâ¡¿â €â €â €â €â €â €â €â €â €â €â €â €[/]
[#B8860B]â €â €â €â €â €â €â €â €â €â €â €â €â ˆâ ³â ˆâ£¡â žâ �â €â €â €â €â €â €â €â €â €â €â €â €[/]
[#B8860B]â €â €â €â €â €â €â €â €â €â €â €â €â €â €â ˆâ €â €â €â €â €â €â €â €â €â €â €â €â €â €â €[/]c                  óè   — 	 ddl m}   | ¦   «         }n# t          $ r i cY S w xY wi }|D ]H}|                     d¦  «        pd}|                     |g ¦  «                             |d         ¦  «         ŒI|S )a  Return skills grouped by category, filtered by platform and disabled state.

    Delegates to ``_find_all_skills()`` from ``tools/skills_tool`` which already
    handles platform gating (``platforms:`` frontmatter) and respects the
    user's ``skills.disabled`` config list.
    r   )Ú_find_all_skillsÚcategoryÚgeneralÚname)Útools.skills_toolr&   r   ÚgetÚ
setdefaultÚappend)r&   Ú
all_skillsÚskills_by_categoryÚskillr'   s        r   Úget_available_skillsr1   b   s­   € ðØ6Ð6Ð6Ð6Ð6Ð6Ø%Ð%Ñ'Ô'ˆ
ˆ
øÝð ð ð Øˆ	ˆ	ˆ	ðøøøð 02ÐØð Jð JˆØ—9’9˜ZÑ(Ô(Ð5¨IˆØ×%Ò% h°Ñ3Ô3×:Ò:¸5À¼=ÑIÔIÐIÐIØÐs   ‚ “"¡"i`T  c            	      óì  — t          ¦   «         } | dz  }| dz  }|dz                       ¦   «         s0t          t          ¦  «        j        j                             ¦   «         }|dz                       ¦   «         sdS t          j        ¦   «         }	 |                     ¦   «         r]t          j        | 	                    ¦   «         ¦  «        }|| 
                    dd¦  «        z
  t          k     r| 
                    d¦  «        S n# t          $ r Y nw xY w	 t          j        g d¢d	d
t          |¦  «        ¬¦  «         n# t          $ r Y nw xY w	 t          j        g d¢d	d	dt          |¦  «        ¬¦  «        }|j        dk    r't#          |j                             ¦   «         ¦  «        }nd}n# t          $ r d}Y nw xY w	 |                     t          j        ||dœ¦  «        ¦  «         n# t          $ r Y nw xY w|S )a  Check how many commits behind origin/main the local repo is.

    Does a ``git fetch`` at most once every 6 hours (cached to
    ``~/.hermes/.update_check``).  Returns the number of commits behind,
    or ``None`` if the check fails or isn't applicable.
    úhermes-agentz.update_checkú.gitNÚtsr   Úbehind)ÚgitÚfetchÚoriginz--quietTé
   )Úcapture_outputÚtimeoutÚcwd)r7   úrev-listú--countzHEAD..origin/mainé   ©r;   r   r<   r=   )r5   r6   )r   Úexistsr   Ú__file__ÚparentÚresolveÚtimeÚjsonÚloadsÚ	read_textr+   Ú_UPDATE_CHECK_CACHE_SECONDSr   Ú
subprocessÚrunÚstrÚ
returncodeÚintÚstdoutÚstripÚ
write_textÚdumps)Úhermes_homeÚrepo_dirÚ
cache_fileÚnowÚcachedÚresultr6   s          r   Úcheck_for_updatesrZ   ~   sH  € õ "Ñ#Ô#€KØ˜^Ñ+€HØ˜Ñ.€Jð �vÑ×%Ò%Ñ'Ô'ð :Ý�‘>”>Ô(Ô/×7Ò7Ñ9Ô9ˆØ�vÑ×%Ò%Ñ'Ô'ð Øˆtõ Œ)‰+Œ+€CðØ×ÒÑÔð 	,Ý”Z 
× 4Ò 4Ñ 6Ô 6Ñ7Ô7ˆFØ�V—Z’Z  aÑ(Ô(Ñ(Õ+FÒFÐFØ—z’z (Ñ+Ô+Ð+øøÝð ð ð ØˆðøøøðÝŒØ1Ð1Ð1Ø¨Ý�H‘”ð	
ñ 	
ô 	
ð 	
ð 	
øõ
 ð ð ð ØˆðøøøðÝ”Ø?Ð?Ð?Ø d°AÝ�H‘”ð
ñ 
ô 
ˆð
 Ô Ò!Ð!Ý˜œ×,Ò,Ñ.Ô.Ñ/Ô/ˆFˆFàˆFøøÝð ð ð ØˆˆˆðøøøðØ×Ò�dœj°¸vÐ)FÐ)FÑGÔGÑHÔHÐHÐHøÝð ð ð Øˆðøøøð €MsJ   ÂA0C? Ã?
DÄDÄ'D8 Ä8
EÅEÅ	AF& Æ&F5Æ4F5Æ9*G$ Ç$
G1Ç0G1c                  óì   — t          ¦   «         } | dz  }|dz                       ¦   «         s0t          t          ¦  «        j        j                             ¦   «         }|dz                       ¦   «         r|ndS )zKReturn the active Hermes git checkout, or None if this isn't a git install.r3   r4   N)r   rB   r   rC   rD   rE   )rT   rU   s     r   Ú_resolve_repo_dirr\   º   sm   € å!Ñ#Ô#€KØ˜^Ñ+€HØ�vÑ×%Ò%Ñ'Ô'ð :Ý�‘>”>Ô(Ô/×7Ò7Ñ9Ô9ˆØ  6Ñ)×1Ò1Ñ3Ô3Ð=ˆ8ˆ8¸Ð=r   rU   Úrevc           	      óÔ   — 	 t          j        ddd|gdddt          | ¦  «        ¬¦  «        }n# t          $ r Y dS w xY w|j        dk    rdS |j        pd	                     ¦   «         }|pdS )
z4Resolve a git revision to an 8-character short hash.r7   z	rev-parsez	--short=8Tr@   rA   Nr   Ú )rK   rL   rM   r   rN   rP   rQ   )rU   r]   rY   Úvalues       r   Ú_git_short_hashra   Ã   s–   € ð	Ý”Ø�K ¨cÐ2ØØØÝ�H‘”ð
ñ 
ô 
ˆˆøõ ð ð ð ØˆtˆtðøøøàÔ˜AÒÐØˆtØŒ]Ð ˜b×'Ò'Ñ)Ô)€EØˆ=�DÐs   ‚*- ­
;º;c           	      ó„  — | pt          ¦   «         } | €dS t          | d¦  «        }t          | d¦  «        }|r|sdS d}	 t          j        g d¢dddt	          | ¦  «        ¬¦  «        }|j        dk    r*t          |j        pd	                     ¦   «         pd	¦  «        }n# t          $ r d}Y nw xY w||t          |d¦  «        d
œS )z8Return upstream/local git hashes for the startup banner.Nzorigin/mainÚHEADr   )r7   r>   r?   zorigin/main..HEADTr@   rA   Ú0)ÚupstreamÚlocalÚahead)r\   ra   rK   rL   rM   rN   rO   rP   rQ   r   Úmax)rU   re   rf   rg   rY   s        r   Úget_git_banner_stateri   Õ   sÿ   € àÐ.Õ,Ñ.Ô.€HØÐØˆtå˜x¨Ñ7Ô7€HÝ˜H fÑ-Ô-€EØð ˜5ð Øˆtà€EðÝ”Ø?Ð?Ð?ØØØÝ�H‘”ð
ñ 
ô 
ˆð Ô Ò!Ð!Ý˜œÐ-¨#×4Ò4Ñ6Ô6Ð=¸#Ñ>Ô>ˆEøøÝð ð ð Øˆˆˆðøøøð !¨5½3¸uÀa¹=¼=ÐIÐIÐIs   ¾AB ÂB+Â*B+z9https://github.com/NousResearch/hermes-agent/releases/tagÚ_latest_release_cachec           	      óV  — t           �	t           pdS | pt          ¦   «         } | €da dS 	 t          j        g d¢dddt	          | ¦  «        ¬¦  «        }n# t
          $ r da Y dS w xY w|j        dk    rda dS |j        pd                     ¦   «         }|sda dS t          › d	|› �}||fa t           S )
u  Return ``(tag, release_url)`` for the latest git tag, or None.

    Local-only â€” runs ``git describe --tags --abbrev=0`` against the
    Hermes checkout. Cached per-process. Release URL always points at the
    canonical NousResearch/hermes-agent repo (forks don't get a link).
    N© )r7   Údescribez--tagsz
--abbrev=0Té   rA   r   r_   ú/)
rj   r\   rK   rL   rM   r   rN   rP   rQ   Ú_RELEASE_URL_BASE)rU   rY   ÚtagÚurls       r   Úget_latest_release_tagrs   õ   s  € õ Ð(Ý$Ð,¨Ð,àÐ.Õ,Ñ.Ô.€HØÐØ "ÐØˆtð
Ý”Ø7Ð7Ð7ØØØÝ�H‘”ð
ñ 
ô 
ˆˆøõ ð ð ð Ø "ÐØˆtˆtðøøøð Ô˜AÒÐØ "ÐØˆtàŒ=Ð˜B×
%Ò
%Ñ
'Ô
'€CØð Ø "ÐØˆtåÐ
&Ð
& Ð
&Ð
&€CØ  #˜JÐÝ Ð s   ¨(A ÁA!Á A!c            
      ó  — dt           › dt          › d�} t          ¦   «         }|s| S |d         }|d         }t          |                     d¦  «        pd¦  «        }|dk    s||k    r| › d|› �S |d	k    rd
nd}| › d|› d|› d|› d|› d�
S )z;Return the version label shown in the startup banner title.zHermes Agent vz (ú)re   rf   rg   r   u    Â· upstream é   ÚcommitÚcommitsu
    Â· local z (+z	 carried )ÚVERSIONÚRELEASE_DATEri   rO   r+   )ÚbaseÚstatere   rf   rg   Úcarried_words         r   Úformat_banner_version_labelr~     sÊ   € à6�GÐ6Ð6¥|Ð6Ð6Ð6€DÝ Ñ"Ô"€EØð Øˆà�ZÔ €HØ�'ŒN€EÝ�—	’	˜'Ñ"Ô"Ð' aÑ(Ô(€Eà�‚z€z�X Ò&Ð&ØÐ/Ð/ XÐ/Ð/Ð/à$¨šz˜z�8�8¨y€LØÐ^Ð^ Ð^Ð^°UÐ^Ð^¸uÐ^Ð^È|Ð^Ð^Ð^Ð^r   Ú_update_resultc                  ó`   — d„ } t          j        | d¬¦  «        }|                     ¦   «          dS )z4Kick off update check in a background daemon thread.c                  óT   — t          ¦   «         at                               ¦   «          d S ©N)rZ   r   Ú_update_check_doneÚsetrl   r   r   Ú_runz#prefetch_update_check.<locals>._run;  s%   € å*Ñ,Ô,ˆÝ×ÒÑ Ô Ð Ð Ð r   T)ÚtargetÚdaemonN)Ú	threadingÚThreadÚstart)r…   Úts     r   Úprefetch_update_checkrŒ   9  s9   € ð!ð !ð !õ 	Ô ¨TÐ2Ñ2Ô2€AØ‡G‚G�I„I€I€I€Ir   ç      à?r<   c                 óF   — t                                | ¬¦  «         t          S )z:Get result of prefetched check. Returns None if not ready.©r<   )rƒ   Úwaitr   r�   s    r   Úget_update_resultr‘   C  s   € å×Ò GÐÑ,Ô,Ð,ÝÐr   Útokensc                 ó  — | dk    r5| dz  }t          |¦  «        }t          ||z
  ¦  «        dk     r|› d�S |d›d�S | dk    r5| dz  }t          |¦  «        }t          ||z
  ¦  «        dk     r|› d�S |d›d�S t          | ¦  «        S )uL   Format a token count for display (e.g. 128000 â†’ '128K', 1048576 â†’ '1M').i@B gš™™™™™©?ÚMz.1fiè  ÚK)ÚroundÚabsrM   )r’   ÚvalÚroundeds      r   Ú_format_context_lengthrš   M  s­   € à�ÒÐØ�yÑ ˆÝ˜‘*”*ˆÝˆs�W‰}ÑÔ Ò$Ð$Ø�=�=�=Ð Øˆ}ˆ}ˆ}ˆ}ÐØ	�5ŠˆØ�u‰nˆÝ˜‘*”*ˆÝˆs�W‰}ÑÔ Ò$Ð$Ø�=�=�=Ð Øˆ}ˆ}ˆ}ˆ}ÐÝˆv‰;Œ;Ðr   Útoolset_namec                 óL   — | sdS |                       d¦  «        r
| dd…         n| S )zANormalize internal/legacy toolset identifiers for banner display.ÚunknownÚ_toolsNiúÿÿÿ)Úendswith)r›   s    r   Ú_display_toolset_namer    ^  s=   € àð Øˆyð × Ò  Ñ*Ô*ð	ˆ�S�b�SÔÐàðr   ÚconsoleÚmodelr=   ÚtoolsÚenabled_toolsetsÚ
session_idÚcontext_lengthc                 óÜ  — ddl m}m}	 |€ddl m} |pg }|pg } |d¬¦  «        \  }
}t	          ¦   «         }t	          ¦   «         }|D ]„}|                     dd¦  «        }|	                     |i ¦  «        }|                     d	g ¦  «        }|                     d
¦  «        r|                     |¦  «         Œo|                     |¦  «         Œ…t          j        d¬¦  «        }| 	                    dd¬¦  «         | 	                    dd¬¦  «         t          dd¦  «        }t          dd¦  «        }t          dd¦  «        }t          dd¦  «        }	 ddlm}  |¦   «         }t          |d¦  «        r|j        r|j        nt          }n# t           $ r d}t          }Y nw xY wd|dg}d|v r|                     d¦  «        d         n|}|                     d¦  «        r
|dd…         }t'          |¦  «        dk    r|dd …         d!z   }|rd"|› d#|› d$t)          |¦  «        › d%�nd}|                     d&|› d$|› d'|› d"|› d#|› d(�¦  «         |                     d)|› d$|› d'�¦  «         |r|                     d)|› d*|› d'�¦  «         d+                     |¦  «        }d,|› d-�g}i }|D ]S} | d.         d         }!t/           ||!¦  «        pd/¦  «        }"|                     |"g ¦  «                             |!¦  «         ŒT|D ]‚}|                     d0|                     dd1¦  «        ¦  «        }#t/          |#¦  «        }$|$|vrg ||$<   |                     d	g ¦  «        D ]'}!|!||$         vr||$                              |!¦  «         Œ(Œƒt3          |                     ¦   «         ¦  «        }%|%dd2…         }&t'          |%¦  «        d2z
  }'|&D �]Þ}"||"         }(g })t3          |(¦  «        D ]Z}*|*|v r|)                     d3|*› d'�¦  «         Œ |*|v r|)                     d4|*› d'�¦  «         Œ>|)                     d&|› d$|*› d'�¦  «         Œ[d5                     |)¦  «        }+t'          d5                     t3          |(¦  «        ¦  «        ¦  «        d6k    �r g },d}-t3          |(¦  «        D ]\}*|-t'          |*¦  «        z   d7z   d8k    r|,                     d!¦  «          n+|,                     |*¦  «         |-t'          |*¦  «        d7z   z  }-Œ]g })|,D ]v}*|*d!k    r|)                     d9¦  «         Œ|*|v r|)                     d3|*› d'�¦  «         Œ<|*|v r|)                     d4|*› d'�¦  «         ŒZ|)                     d&|› d$|*› d'�¦  «         Œwd5                     |)¦  «        }+|                     d)|› d$|"› d:|+› �¦  «         �Œà|'dk    r|                     d)|› d;|'› d<�¦  «         	 dd=lm}.  |.¦   «         }/n# t           $ r g }/Y nw xY w|/r¡|                     d¦  «         |                     d,|› d>�¦  «         |/D ]p}0|0d?         r>|                     d)|› d$|0d         › d@|› dA|0dB         › dC|› dD|› d$|0d	         › dE�¦  «         ŒH|                     d3|0d         › dF|0dB         › dG�¦  «         Œq|                     d¦  «         |                     d,|› dH�¦  «         t;          ¦   «         }1t=          dI„ |1                     ¦   «         D ¦   «         ¦  «        }2|1rÛt3          |1                     ¦   «         ¦  «        D ]¸}3t3          |1|3         ¦  «        }4t'          |4¦  «        d2k    r7|4dd2…         }5d5                     |5¦  «        dJt'          |4¦  «        d2z
  › dK�z   }6nd5                     |4¦  «        }6t'          |6¦  «        dLk    r|6ddM…         d!z   }6|                     d)|› d$|3› dN|› d$|6› d'�	¦  «         Œ¹n|                     d)|› dO�¦  «         |                     d¦  «         |/rt=          dP„ |/D ¦   «         ¦  «        nd}7t'          |¦  «        › dQ�|2› dR�g}8|7r|8                     |7› dS�¦  «         |8                     dT¦  «         	 ddUl m!}9  |9¦   «         }:|:r%|:dVk    r|                     d,|› dW|› d$|:› d'�¦  «         n# t           $ r Y nw xY w|                     d)|› d$dX                     |8¦  «        › d'�¦  «         	 tE          dY¬Z¦  «        };|;r=|;dk    r7dd[l#m$}< |;d\k    rd]nd^}=|                     d_|;› d`|=› da |<¦   «         › db�¦  «         n# t           $ r Y nw xY wd+                     |¦  «        }>| %                    ||>¦  «         tM          dcdd¦  «        }?t          dedf¦  «        }@t          dgdh¦  «        }AtO          ¦   «         }BtQ          ¦   «         }C|Cr|C\  }D}Ed,|@› di|E› d$|B› dj�}Fn	d,|@› d$|B› d'�}FtS          ||F|Ad¬k¦  «        }G|  *                    ¦   «          tW          j,        ¦   «         j-        }H|Hdlk    rP|rt          |dm¦  «        r|j.        r|j.        nt^          }I|  *                    |I¦  «         |  *                    ¦   «          |  *                    |G¦  «         dS )naÞ  Build and print a welcome banner with caduceus on left and info on right.

    Args:
        console: Rich Console instance.
        model: Current model name.
        cwd: Current working directory.
        tools: List of tool definitions.
        enabled_toolsets: List of enabled toolset names.
        session_id: Session identifier.
        get_toolset_for_tool: Callable to map tool name -> toolset name.
        context_length: Model's context window size in tokens.
    r   )Úcheck_tool_availabilityÚTOOLSET_REQUIREMENTSN)Úget_toolset_for_toolT)Úquietr)   r_   r£   Úcheck_fn)r   é   )ÚpaddingÚleftÚcenter)ÚjustifyÚrightÚbanner_accentz#FFBF00Ú
banner_dimz#B8860BÚbanner_textz#FFF8DCÚsession_borderz#8B8682r   Úbanner_heroro   éÿÿÿÿz.gguféûÿÿÿé   é   z...z [dim u   ]Â·[/] [dim ú]z context[/]ú[z[/]z]Nous Research[/]z[dim z
]Session: Ú
z[bold z]Available Tools[/]ÚfunctionÚotherÚidr�   é   z[red]z[yellow]z, é-   r­   é*   z[dim]...[/]z:[/] z](and z more toolsets...)[/])Úget_mcp_statusz]MCP Servers[/]Ú	connectedz[/] [z](Ú	transportz
)[/] [dim u	   ]â€”[/] [z tool(s)[/]z
[/] [dim](u   )[/] [red]â€” failed[/]z]Available Skills[/]c              3   ó4   K  — | ]}t          |¦  «        V — Œd S r‚   )Úlen©Ú.0Úss     r   ú	<genexpr>z'build_welcome_banner.<locals>.<genexpr>  s(   è è € ÐCÐC !•s˜1‘v”vÐCÐCÐCÐCÐCÐCr   z +z moreé2   é/   z:[/] [z]No skills installed[/]c              3   ó*   K  — | ]}|d          ¯
dV — ŒdS )rÆ   rv   Nrl   rÊ   s     r   rÍ   z'build_welcome_banner.<locals>.<genexpr>  s+   è è € Ð@Ð@˜a°°;´Ð@˜Ð@Ð@Ð@Ð@Ð@Ð@r   z toolsz skillsz MCP serversz/help for commands)Úget_active_profile_nameÚdefaultz]Profile:[/] [u    Â· r�   r�   )Úrecommended_update_commandrv   rw   rx   u   [bold yellow]âš  Ú u%    behind[/][dim yellow] â€” run [bold]z[/bold] to update[/]Ú
agent_namezHermes AgentÚbanner_titlez#FFD700Úbanner_borderz#CD7F32z][link=z
[/link][/])ÚtitleÚborder_styler®   é_   Úbanner_logo)0Úmodel_toolsr¨   r©   rª   r„   r+   Úupdater
   ÚgridÚ
add_columnr   r   r   Úhasattrr·   ÚHERMES_CADUCEUSr   ÚsplitrŸ   rÉ   rš   r-   Újoinr    r,   ÚsortedÚkeysÚtools.mcp_toolrÅ   r1   ÚsumÚvaluesÚhermes_cli.profilesrÑ   r‘   Úhermes_cli.configrÓ   Úadd_rowr"   r~   rs   r	   ÚprintÚshutilÚget_terminal_sizeÚcolumnsrÛ   ÚHERMES_AGENT_LOGO)Jr¡   r¢   r=   r£   r¤   r¥   rª   r¦   r¨   r©   Ú_Úunavailable_toolsetsÚdisabled_toolsÚ
lazy_toolsÚitemr›   Úts_reqÚtools_in_tsÚlayout_tableÚaccentÚdimr   Úsession_colorr   Ú_bskinÚ_heroÚ
left_linesÚmodel_shortÚctx_strÚleft_contentÚright_linesÚtoolsets_dictÚtoolÚ	tool_nameÚtoolsetÚ
toolset_idÚdisplay_nameÚsorted_toolsetsÚdisplay_toolsetsÚremaining_toolsetsÚ
tool_namesÚcolored_namesr)   Ú	tools_strÚshort_namesÚlengthrÅ   Ú
mcp_statusÚsrvr/   Útotal_skillsr'   Úskill_namesÚdisplay_namesÚ
skills_strÚmcp_connectedÚsummary_partsrÑ   Ú_profile_namer6   rÓ   Úcommits_wordÚright_contentrÕ   Útitle_colorÚborder_colorÚversion_labelÚrelease_infoÚ_tagÚ_urlÚtitle_markupÚouter_panelÚ
term_widthÚ_logosJ                                                                             r   Úbuild_welcome_bannerr&  i  sí  € ð$ JÐIÐIÐIÐIÐIÐIÐIØÐ#Ø4Ð4Ð4Ð4Ð4Ð4àˆK�R€EØ'Ð-¨2Ðà5Ð5¸DÐAÑAÔAÑ€AÐÝ‘U”U€Nõ ‘”€JØ$ð /ð /ˆØ—x’x ¨Ñ+Ô+ˆØ%×)Ò)¨,¸Ñ;Ô;ˆØ—h’h˜w¨Ñ+Ô+ˆØ�:Š:�jÑ!Ô!ð 	/Ø×Ò˜kÑ*Ô*Ð*Ð*à×!Ò! +Ñ.Ô.Ð.Ð.å”: fÐ-Ñ-Ô-€LØ×Ò˜F¨HÐÑ5Ô5Ð5Ø×Ò˜G¨VÐÑ4Ô4Ð4õ ˜¨)Ñ4Ô4€FÝ
�l IÑ
.Ô
.€CÝ�} iÑ0Ô0€DÝÐ 0°)Ñ<Ô<€Mð Ø:Ð:Ð:Ð:Ð:Ð:Ø �Ñ"Ô"ˆÝ&-¨f°mÑ&DÔ&DÐpÈÔI[Ðp�Ô"Ð"ÕapˆˆøÝð  ð  ð  ØˆÝˆˆˆð øøøð �e˜R�€JØ*-°¨,¨,�%—+’+˜cÑ"Ô" 2Ô&Ð&¸E€KØ×Ò˜GÑ$Ô$ð 'Ø! # 2 #Ô&ˆÝ
ˆ;ÑÔ˜"ÒÐØ! # 2 #Ô&¨Ñ.ˆØesÐ{Ða�sÐaÐa¨ÐaÐaÕ.DÀ^Ñ.TÔ.TÐaÐaÐaÐaÐy{€GØ×ÒÐi˜&ÐiÐi ;ÐiÐi°7ÐiÐiÀ#ÐiÐiÐSVÐiÐiÐiÑjÔjÐjØ×ÒÐ,˜cÐ,Ð, CÐ,Ð,Ð,Ñ-Ô-Ð-Øð LØ×ÒÐJ -ÐJÐJ¸:ÐJÐJÐJÑKÔKÐKØ—9’9˜ZÑ(Ô(€Là7˜FÐ7Ð7Ð7Ð8€KØ%'€Màð @ð @ˆØ˜Ô$ VÔ,ˆ	Ý'Ð(<Ð(<¸YÑ(GÔ(GÐ(RÈ7ÑSÔSˆØ× Ò  ¨"Ñ-Ô-×4Ò4°YÑ?Ô?Ð?Ð?à$ð >ð >ˆØ—X’X˜d D§H¢H¨V°YÑ$?Ô$?Ñ@Ô@ˆ
Ý,¨ZÑ8Ô8ˆØ˜}Ð,Ð,Ø*,ˆM˜,Ñ'ØŸš '¨2Ñ.Ô.ð 	>ð 	>ˆIØ ¨lÔ ;Ð;Ð;Ø˜lÔ+×2Ò2°9Ñ=Ô=Ð=øð	>õ ˜]×/Ò/Ñ1Ô1Ñ2Ô2€OØ& r¨ rÔ*ÐÝ˜_Ñ-Ô-°Ñ1Ðà#ð !Dñ !DˆØ" 7Ô+ˆ
ØˆÝ˜:Ñ&Ô&ð 	;ð 	;ˆDØ�~Ð%Ð%Ø×$Ò$Ð%6¨TÐ%6Ð%6Ð%6Ñ7Ô7Ð7Ð7Ø˜Ð#Ð#Ø×$Ò$Ð%9°Ð%9Ð%9Ð%9Ñ:Ô:Ð:Ð:à×$Ò$Ð%9¨Ð%9Ð%9°Ð%9Ð%9Ð%9Ñ:Ô:Ð:Ð:à—I’I˜mÑ,Ô,ˆ	Ýˆt�yŠy� 
Ñ+Ô+Ñ,Ô,Ñ-Ô-°Ò2Ñ2ØˆKØˆFÝ˜zÑ*Ô*ð (ð (�Ø�C ™IœIÑ%¨Ñ)¨BÒ.Ð.Ø×&Ò& uÑ-Ô-Ð-Ø�EØ×"Ò" 4Ñ(Ô(Ð(Ø�#˜d™)œ) a™-Ñ'��ØˆMØ#ð ?ð ?�Ø˜5’=�=Ø!×(Ò(¨Ñ7Ô7Ð7Ð7Ø˜^Ð+Ð+Ø!×(Ò(Ð):°Ð):Ð):Ð):Ñ;Ô;Ð;Ð;Ø˜ZÐ'Ð'Ø!×(Ò(Ð)=°DÐ)=Ð)=Ð)=Ñ>Ô>Ð>Ð>à!×(Ò(Ð)=¨TÐ)=Ð)=°DÐ)=Ð)=Ð)=Ñ>Ô>Ð>Ð>ØŸ	š	 -Ñ0Ô0ˆIà×ÒÐB 3ÐBÐB¨ÐBÐB°yÐBÐBÑCÔCÐCÑCà˜AÒÐØ×ÒÐW 3ÐWÐWÐ.@ÐWÐWÐWÑXÔXÐXðØ1Ð1Ð1Ð1Ð1Ð1Ø#�^Ñ%Ô%ˆ
ˆ
øÝð ð ð Øˆ
ˆ
ˆ
ðøøøð ð Ø×Ò˜2ÑÔÐØ×ÒÐ; FÐ;Ð;Ð;Ñ<Ô<Ð<Øð 
	ð 
	ˆCØ�;Ôð 	Ø×"Ò"ðK˜Cð Kð K # f¤+ð Kð K°Dð Kð K¸CÀÔ<Lð Kð KØðKð KØ*.ðKð KØ14°W´ðKð Kð Kñô ð ð ð
 ×"Ò"ð*˜C œKð *ð *°3°{Ô3Cð *ð *ð *ñô ð ð ð
 ×Ò�rÑÔÐØ×ÒÐ< Ð<Ð<Ð<Ñ=Ô=Ð=Ý-Ñ/Ô/ÐÝÐCÐCÐ'9×'@Ò'@Ñ'BÔ'BÐCÑCÔCÑCÔC€Làð AÝÐ1×6Ò6Ñ8Ô8Ñ9Ô9ð 		Uð 		UˆHÝ Ð!3°HÔ!=Ñ>Ô>ˆKÝ�;ÑÔ !Ò#Ð#Ø +¨B¨Q¨B¤�Ø!ŸYšY }Ñ5Ô5Ð8X½SÀÑ=MÔ=MÐPQÑ=QÐ8XÐ8XÐ8XÑX�
�
à!ŸYšY {Ñ3Ô3�
Ý�:‰Œ Ò#Ð#Ø'¨¨¨œ_¨uÑ4�
Ø×ÒÐS sÐSÐS¨XÐSÐS¸TÐSÐSÀJÐSÐSÐSÑTÔTÐTÐTð		Uð 	×ÒÐ? 3Ð?Ð?Ð?Ñ@Ô@Ð@à×Ò�rÑÔÐØDNÐU•CÐ@Ð@ :Ð@Ñ@Ô@Ñ@Ô@Ð@ÐTU€MÝ˜E™
œ
Ð*Ð*Ð*¨|Ð,DÐ,DÐ,DÐE€MØð =Ø×Ò Ð;Ð;Ð;Ñ<Ô<Ð<Ø×ÒÐ-Ñ.Ô.Ð.ðØ?Ð?Ð?Ð?Ð?Ð?Ø/Ð/Ñ1Ô1ˆØð 	Y˜]¨iÒ7Ð7Ø×ÒÐW¨ÐWÐW¸dÐWÐWÀ]ÐWÐWÐWÑXÔXÐXøøÝð ð ð Øˆðøøøð ×ÒÐD˜sÐDÐD V§[¢[°Ñ%?Ô%?ÐDÐDÐDÑEÔEÐEð
Ý"¨3Ð/Ñ/Ô/ˆØð 	�f˜q’j�jØDÐDÐDÐDÐDÐDØ'-°¢{ {˜8˜8¸	ˆLØ×Òða Fð að a¨\ð að aØ.HÐ.HÑ.JÔ.Jðað að añô ð øøõ ð ð ð Øˆðøøøð —I’I˜kÑ*Ô*€MØ×Ò˜ }Ñ5Ô5Ð5å ¨nÑ=Ô=€JÝ˜n¨iÑ8Ô8€KÝ˜°	Ñ:Ô:€LÝ/Ñ1Ô1€MÝ)Ñ+Ô+€LØð AØ!‰
ˆˆdØT ÐTÐT°DÐTÐT¸=ÐTÐTÐTˆˆà@ Ð@Ð@¨mÐ@Ð@Ð@ˆÝØØØ!Øð	ñ ô €Kð ‡M‚M�O„O€OÝÔ)Ñ+Ô+Ô3€JØ�RÒÐØ&,Ð}µ¸ÀÑ1OÔ1OÐ}ÐTZÔTfÐ}�Ô"Ð"Õl}ˆØ�Š�eÑÔÐØ�Š‰ŒˆØ‡M‚M�+ÑÔÐÐÐsI   Å5F ÆFÆFÖ:W ×W×Wá7b â
bâbãAd ä
d+ä*d+r‚   )r�   )NNNNN)DÚ__doc__rG   Úloggingrí   rK   rˆ   rF   Úpathlibr   Úhermes_constantsr   Útypingr   r   r   Úrich.consoler   Ú
rich.panelr	   Ú
rich.tabler
   Úprompt_toolkitr   r   Úprompt_toolkit.formatted_textr   r   Ú	getLoggerÚ__name__ÚloggerÚ_GOLDÚ_BOLDÚ_DIMÚ_RSTrM   r   r   r"   Ú
hermes_clir#   ry   r$   rz   rð   rá   r1   rJ   rO   rZ   r\   ra   Údictri   rp   rj   ÚtupleÚ__annotations__rs   r~   r   ÚEventrƒ   rŒ   Úfloatr‘   rš   r    r&  rl   r   r   ú<module>r>     s  ððð ð ð
 €€€Ø €€€Ø €€€Ø Ð Ð Ð Ø Ð Ð Ð Ø €€€Ø Ð Ð Ð Ð Ð Ø ,Ð ,Ð ,Ð ,Ð ,Ð ,Ø 'Ð 'Ð 'Ð 'Ð 'Ð 'Ð 'Ð 'Ð 'Ð 'à  Ð  Ð  Ð  Ð  Ð  Ø Ð Ð Ð Ð Ð Ø Ð Ð Ð Ð Ð à <Ð <Ð <Ð <Ð <Ð <Ø :Ð :Ð :Ð :Ð :Ð :à	ˆÔ	˜8Ñ	$Ô	$€ð 	!€Ø€Ø€Ø€ð�ð ð ð ð ð�Sð  Cð ¨Cð ð ð ð ð˜ð  sð ¨sð ð ð ð ð PÐ OÐ OÐ OÐ OÐ OÐ OÐ OðFÐ ðj€ð,˜d 3¨¨S¬	 >Ô2ð ð ð ð ð2 'Ð ð9˜8 Cœ=ð 9ð 9ð 9ð 9ðx>˜8 Dœ>ð >ð >ð >ð >ð˜dð ¨ð °¸#´ð ð ð ð ð$Jð J 8¨D¤>ð J¸XÀd¼^ð Jð Jð Jð Jð8 PÐ Ø)-Ð �x ”Ð -Ð -Ñ -ð'!ð '! X¨d¤^ð '!¸xÈ¼ð '!ð '!ð '!ð '!ðT_ Sð _ð _ð _ð _ð, !%€�˜”Ð $Ð $Ñ $Ø$�Y”_Ñ&Ô&Ð ðð ð ðð ˜uð ¨x¸¬}ð ð ð ð ð 3ð ¨3ð ð ð ð ð"¨ð °ð ð ð ð ð .2Ø7;Ø+/Ø.2Ø/3ðcð c 'ð c°#ð c¸Cð cØ $ T¤
ðcà+/°¬9ðcð &)ðcð
 *-ðcð cð cð cð cð cr   