§
    øžyj$˜  ã                   óx  — 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Zddlm	Z	 ddl
mZ ddlmZ ddlmZmZmZmZ er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dlm Z!m"Z# dZ$dZ%deeee         f         fd„Z&dZ'dZ(dZ)dZ*dedz  defd„Z+dedz  de,fd„Z-dedz  de,fd„Z.ddœd e/e         d!e	d"e0dee         fd#„Z1d$edee0         fd%„Z2d&e	dee0         fd'„Z3dee0         fd(„Z4dee	         fd)„Z5d&e	d*edee         fd+„Z6dBd&ee	         dee7         fd,„Z8d-Z9da:ee;         e<d.<   dBd&ee	         dee;         fd/„Z=defd0„Z>da?ee0         e<d1<    ej@        ¦   «         ZAd2„ ZBdCd"eCdee0         fd4„ZDd5e0defd6„ZEd7edefd8„ZF	 	 	 	 	 	 dDd9d:d;ed!ed<ee7         d=ee         d>ed?e0d@efdA„ZGdS )Ez…Welcome banner, ASCII art, skills summary, and update check for the CLI.

Pure display functions with no HermesCLI state dependency.
é    N)ÚPath)Úurlparse)Úget_hermes_home)ÚTYPE_CHECKINGÚDictÚListÚOptional)ÚConsolez[1;38;2;255;215;0mz[1mz[2mz[0mÚtextc                 óˆ   — ddl m} ddlm} 	  | || ¦  «        ¦  «         dS # t          $ r t          | ¦  «         Y dS w xY w)z:Print ANSI-colored text through prompt_toolkit's renderer.r   )Úprint_formatted_text)ÚANSIN)Úprompt_toolkitr   Úprompt_toolkit.formatted_textr   Ú	ExceptionÚprint)r   Ú	_pt_printÚ_PT_ANSIs      ú7/home/ragecks/.hermes/hermes-agent/hermes_cli/banner.pyÚcprintr   '   sw   € à@Ð@Ð@Ð@Ð@Ð@Ø>Ð>Ð>Ð>Ð>Ð>ðØˆ	�(�(˜4‘.”.Ñ!Ô!Ð!Ð!Ð!øÝð ð ð õ
 	ˆd‰Œˆˆˆˆðøøøs   Ž$ ¤AÁ AÚ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_colorr   )r   r   r   s      r   Ú_skin_colorr   9   s[   € ðØ:Ð:Ð:Ð:Ð:Ð:ØˆÑ Ô ×*Ò*¨3°Ñ9Ô9Ð9øÝð ð ð Øˆˆˆðøøøs   ‚#& ¦5´5)Ú__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_skillsr.   c   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  éÿÿÿÿz0https://github.com/NousResearch/hermes-agent.gitz$github.com/nousresearch/hermes-agentÚurlc                 ó   — | sdS |                       ¦   «         }|                     d¦  «        rd|t          d¦  «        d…         z   }n]|                     d¦  «        rd|t          d¦  «        d…         z   }n-t          |¦  «        }|j        r|j        r|j        › |j        › �}|                      ¦   «                              d¦  «        }|                     d¦  «        r
|dd…         }|                     ¦   «         S )	z>Return ``host/owner/repo`` for common GitHub remote URL forms.Ú zgit@github.com:zgithub.com/Nzssh://git@github.com/ú/ú.gitéüÿÿÿ)	ÚstripÚ
startswithÚlenr   ÚnetlocÚpathÚrstripÚendswithÚlower)r0   ÚvalueÚparseds      r   Ú_canonical_github_remoter@   †   s  € àð ØˆrØ�IŠI‰KŒK€EØ×ÒÐ)Ñ*Ô*ð 4Ø ¥cÐ*;Ñ&<Ô&<Ð&=Ð&=Ô >Ñ>ˆˆØ	×	Ò	Ð1Ñ	2Ô	2ð 4Ø ¥cÐ*AÑ&BÔ&BÐ&CÐ&CÔ DÑDˆˆå˜%‘”ˆØŒ=ð 	4˜Vœ[ð 	4Ø”}Ð3 f¤kÐ3Ð3ˆEØ�KŠK‰MŒM× Ò  Ñ%Ô%€EØ‡~‚~�fÑÔð Ø�c�r�c”
ˆØ�;Š;‰=Œ=Ðó    c                 óª   — | sdS |                       ¦   «                              ¦   «         }|                     d¦  «        p|                     d¦  «        S )NFzgit@zssh://)r6   r=   r7   )r0   r>   s     r   Ú_is_ssh_remoterC   ™   sO   € Øð ØˆuØ�IŠI‰KŒK×ÒÑÔ€EØ×Ò˜FÑ#Ô#ÐA u×'7Ò'7¸Ñ'AÔ'AÐArA   c                 óP   — t          | ¦  «        ot          | ¦  «        t          k    S ©N)rC   r@   Ú_OFFICIAL_REPO_CANONICAL)r0   s    r   Ú_is_official_ssh_remoterG       s$   € Ý˜#ÑÔÐ\Õ#;¸CÑ#@Ô#@ÕD\Ò#\Ð\rA   é   ©ÚtimeoutÚargsÚcwdrJ   c                óÎ   — 	 t          j        dg| ¢dddd|t          |¦  «        ¬¦  «        }n# t          $ r Y d S w xY w|j        dk    rd S |j        pd                     ¦   «         S )NÚgitTúutf-8Úreplace©Úcapture_outputr   ÚencodingÚerrorsrJ   rL   r   r2   ©Ú
subprocessÚrunÚstrr   Ú
returncodeÚstdoutr6   )rK   rL   rJ   Úresults       r   Ú_git_stdoutr\   ¤   s’   € ðÝ”ØˆN�TˆNØØð ØØÝ�C‘”ð
ñ 
ô 
ˆˆøõ ð ð ð ØˆtˆtðøøøàÔ˜AÒÐØˆtØŒMÐ˜R×&Ò&Ñ(Ô(Ð(s   ‚+. ®
<»<Ú	local_revc                 óú   — 	 t          j        ddt          dgddddd¬¦  «        }n# t          $ r Y d	S w xY w|j        d
k    s|j        sd	S |j                             ¦   «         d
         }|sd	S || k    rd
nt          S )z¨Compare an embedded git revision to upstream main via ls-remote.

    Returns 0 if up-to-date, ``UPDATE_AVAILABLE_NO_COUNT`` if behind,
    or ``None`` on failure.
    rN   z	ls-remotezrefs/heads/mainTrO   rP   é
   )rR   r   rS   rT   rJ   Nr   )rV   rW   Ú_UPSTREAM_REPO_URLr   rY   rZ   ÚsplitÚUPDATE_AVAILABLE_NO_COUNT)r]   r[   Úupstream_revs      r   Ú_check_via_revrd   ¹   s±   € ðÝ”Ø�KÕ!3Ð5FÐGØ d°WÀYØð
ñ 
ô 
ˆˆøõ
 ð ð ð ØˆtˆtðøøøàÔ˜AÒÐ V¤]ÐØˆtØ”=×&Ò&Ñ(Ô(¨Ô+€LØð ØˆtØ 	Ò)Ð)ˆ1ˆ1Õ/HÐHs   ‚#& ¦
4³4Úrepo_dirc                 ó  — t          g d¢| ¬¦  «        }t          |¦  «        r5t          ddg| ¬¦  «        }|rt          |¦  «        nd}|t          k    rdS |S t          ddg| ¬¦  «        }|dk    }	 g d	¢}|r|d
dgz  }|                     d¦  «         t          j        |ddt          | ¦  «        ¬¦  «         n# t          $ r Y nw xY w|rNt          ddg| ¬¦  «        }t          ddg| ¬¦  «        pt          ddg| ¬¦  «        }|r|sdS ||k    rdnt          S 	 t          j        g d¢dddddt          | ¦  «        ¬¦  «        }|j	        dk    r&t          |j                             ¦   «         ¦  «        S n# t          $ r Y nw xY wdS )z5Count commits behind origin/main in a local checkout.)Úremotezget-urlÚorigin)rL   ú	rev-parseÚHEADNé   z--is-shallow-repositoryÚtrue)rN   Úfetchrh   Úmainz--depthÚ1z--quietTr_   )rR   rJ   rL   Ú
FETCH_HEADúorigin/mainr   )rN   úrev-listú--countzHEAD..origin/mainrO   rP   rH   rQ   )r\   rG   rd   rb   r*   rV   rW   rX   r   rY   ÚintrZ   r6   )	re   Ú
origin_urlÚhead_revÚcheckedÚshallowÚ
is_shallowÚ
fetch_argsÚ
target_revr[   s	            r   Ú_check_via_local_gitr|   Ï   s4  € åÐ<Ð<Ð<À(ÐKÑKÔK€JÝ˜zÑ*Ô*ð Ý ¨VÐ4¸(ÐCÑCÔCˆØ.6Ð@•. Ñ*Ô*Ð*¸DˆØÕ/Ò/Ð/Ø�1Øˆõ ˜;Ð(AÐBÈÐQÑQÔQ€GØ˜FÒ"€Jðð 8Ð7Ð7ˆ
Øð 	+Ø˜9 cÐ*Ñ*ˆJØ×Ò˜)Ñ$Ô$Ð$ÝŒØØ¨Ý�H‘”ð	
ñ 	
ô 	
ð 	
ð 	
øõ
 ð ð ð Øˆðøøøð ð Jõ  ¨VÐ4¸(ÐCÑCÔCˆå˜ lÐ3¸ÐBÑBÔBð GÝ˜K¨Ð7¸XÐFÑFÔFð 	ð ð 	˜zð 	Ø�4Ø 
Ò*Ð*ˆqˆqÕ0IÐIð
Ý”Ø?Ð?Ð?Ø d°WÀYØÝ�H‘”ð	
ñ 
ô 
ˆð Ô Ò!Ð!Ý�v”}×*Ò*Ñ,Ô,Ñ-Ô-Ð-ð "øåð ð ð Øˆðøøøàˆ4s&   Á2AB: Â:
CÃCÄAE7 Å7
FÆFc            	      ó
  — t          ¦   «         } | dz  }t          j                             d¦  «        pd}	 ddlm}m}  | |¦   «         ¦  «        dk    rdS n# t          $ r Y nw xY wt          j        ¦   «         }	 | 	                    ¦   «         r–t          j        |                     d¬¦  «        ¦  «        }||                     d	d¦  «        z
  t          k     rL|                     d
¦  «        |k    r3|                     d¦  «        t          k    r|                     d¦  «        S n# t          $ r Y nw xY w|rt          |¦  «        }nut!          t"          ¦  «        j        j                             ¦   «         }|dz   	                    ¦   «         s| dz  }|dz   	                    ¦   «         sd}nt)          |¦  «        }	 |                     t          j        |||t          dœ¦  «        d¬¦  «         n# t          $ r Y nw xY w|S )a×  Check whether a Hermes update is available.

    Two paths: if ``HERMES_REVISION`` is set (nix builds embed it), compare
    it to upstream main via ``git ls-remote``. Otherwise look for a local
    git checkout and count commits behind ``origin/main``.

    Returns the number of commits behind, ``UPDATE_AVAILABLE_NO_COUNT`` (-1)
    if behind but the count is unknown, ``0`` if up-to-date, or ``None`` if
    the check failed or doesn't apply. Cached for 6 hours.
    z.update_checkÚHERMES_REVISIONNr   )Údetect_install_methodÚget_project_rootÚdockerrO   )rS   ÚtsÚrevÚverÚbehindr4   úhermes-agent)r‚   r…   rƒ   r„   )r   ÚosÚenvironr(   Úhermes_cli.configr   r€   r   ÚtimeÚexistsÚjsonÚloadsÚ	read_textÚ_UPDATE_CHECK_CACHE_SECONDSÚVERSIONrd   r   Ú__file__ÚparentÚresolver|   Ú
write_textÚdumps)	Úhermes_homeÚ
cache_fileÚembedded_revr   r€   ÚnowÚcachedr…   re   s	            r   Úcheck_for_updatesr›     sW  € õ "Ñ#Ô#€KØ˜Ñ.€JÝ”:—>’>Ð"3Ñ4Ô4Ð<¸€LðØMÐMÐMÐMÐMÐMÐMÐMØ Ð Ð!1Ð!1Ñ!3Ô!3Ñ4Ô4¸Ò@Ð@Ø�4ð Aøåð ð ð Øˆðøøøõ
 Œ)‰+Œ+€Cð
Ø×ÒÑÔð 	,Ý”Z 
× 4Ò 4¸gÐ 4Ñ FÔ FÑGÔGˆFà�f—j’j  qÑ)Ô)Ñ)Õ,GÒGÐGØ—J’J˜uÑ%Ô%¨Ò5Ð5Ø—J’J˜uÑ%Ô%­Ò0Ð0à—z’z (Ñ+Ô+Ð+øøÝð ð ð Øˆðøøøð ð 4Ý Ñ-Ô-ˆˆõ
 �‘>”>Ô(Ô/×7Ò7Ñ9Ô9ˆØ˜6Ñ!×)Ò)Ñ+Ô+ð 	4Ø" ^Ñ3ˆHØ˜6Ñ!×)Ò)Ñ+Ô+ð 	4ð ˆFˆFå)¨(Ñ3Ô3ˆFðØ×ÒÝŒJ˜c¨V¸LÕQXÐYÐYÑZÔZØð 	ñ 	
ô 	
ð 	
ð 	
øõ ð ð ð Øˆðøøøð €Ms6   ¶A Á
A%Á$A%Á<B)D' Ä'
D4Ä3D4Æ?3G3 Ç3
H Ç?H c                  óì   — t          t          ¦  «        j        j                             ¦   «         } | dz                       ¦   «         st          ¦   «         }|dz  } | dz                       ¦   «         r| ndS )zúReturn the active Hermes git checkout, or None if this isn't a git install.

    Prefers the running code's location over the profile-scoped path
    because ``$HERMES_HOME/hermes-agent/`` may be a stale copy carried
    over by ``--clone-all``.
    r4   r†   N)r   r‘   r’   r“   r‹   r   )re   r–   s     r   Ú_resolve_repo_dirr�   \  so   € õ •H‰~Œ~Ô$Ô+×3Ò3Ñ5Ô5€HØ�vÑ×%Ò%Ñ'Ô'ð 0Ý%Ñ'Ô'ˆØ Ñ/ˆØ  6Ñ)×1Ò1Ñ3Ô3Ð=ˆ8ˆ8¸Ð=rA   rƒ   c                 óØ   — 	 t          j        ddd|gdd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.rN   ri   z	--short=8TrO   rP   rH   rQ   Nr   r2   rU   )re   rƒ   r[   r>   s       r   Ú_git_short_hashrŸ   j  sœ   € ðÝ”Ø�K ¨cÐ2ØØØØØÝ�H‘”ð
ñ 
ô 
ˆˆøõ ð ð ð ØˆtˆtðøøøàÔ˜AÒÐØˆtØŒ]Ð ˜b×'Ò'Ñ)Ô)€EØˆ=�DÐs   ‚,/ ¯
=¼=c                 ó8  — | pt          ¦   «         } | €.	 ddlm}  |d¬¦  «        }|r||ddœS n# t          $ r Y nw xY wdS t	          | d¦  «        }t	          | d¦  «        }|r|s.	 ddlm}  |d¬¦  «        }|r||ddœS n# t          $ r Y nw xY wdS d}	 t          j        g d	¢d
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 )u�  Return upstream/local git hashes for the startup banner.

    For source installs and dev images this runs ``git rev-parse`` against
    the active checkout.  When no checkout is available â€” the canonical case
    is the published Docker image, which excludes ``.git`` from the build
    context â€” we fall back to the baked-in build SHA (see
    ``hermes_cli/build_info.py``) and return it as a frozen
    ``upstream == local`` state with ``ahead=0``.  A built image is by
    definition pinned to one commit, so "ahead" is always zero and the
    banner correctly shows ``Â· upstream <sha>`` with no carried-commits
    annotation.
    Nr   )Úget_build_shaé   )Úshort)ÚupstreamÚlocalÚaheadrq   rj   )rN   rr   rs   zorigin/main..HEADTrO   rP   rH   rQ   Ú0)r�   Úhermes_cli.build_infor¡   r   rŸ   rV   rW   rX   rY   rt   rZ   r6   Úmax)re   r¡   Úbakedr¤   r¥   r¦   r[   s          r   Úget_git_banner_stater«   ~  s×  € ð Ð.Õ,Ñ.Ô.€HØÐð	Ø;Ð;Ð;Ð;Ð;Ð;Ø!�M¨Ð*Ñ*Ô*ˆEØð GØ$)°EÀAÐFÐFÐFðGøåð 	ð 	ð 	ØˆDð	øøøàˆtå˜x¨Ñ7Ô7€HÝ˜H fÑ-Ô-€EØð 
˜5ð 
ð	Ø;Ð;Ð;Ð;Ð;Ð;Ø!�M¨Ð*Ñ*Ô*ˆEØð GØ$)°EÀAÐFÐFÐFðGøåð 	ð 	ð 	ØˆDð	øøøàˆtà€EðÝ”Ø?Ð?Ð?ØØØØØÝ�H‘”ð
ñ 
ô 
ˆð Ô Ò!Ð!Ý˜œÐ-¨#×4Ò4Ñ6Ô6Ð=¸#Ñ>Ô>ˆEøøÝð ð ð Øˆˆˆðøøøð !¨5½3¸uÀa¹=¼=ÐIÐIÐIs1   ”/ ¯
<»<Á&B Â
BÂBÂAC6 Ã6DÄDz9https://github.com/NousResearch/hermes-agent/releases/tagÚ_latest_release_cachec                 óZ  — t           �	t           pdS | pt          ¦   «         } | €da dS 	 t          j        g d¢d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© )rN   Údescribez--tagsz
--abbrev=0TrO   rP   é   rQ   r   r2   r3   )
r¬   r�   rV   rW   rX   r   rY   rZ   r6   Ú_RELEASE_URL_BASE)re   r[   Útagr0   s       r   Úget_latest_release_tagr³   ¼  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 (ú)r¤   r¥   r¦   r   u    Â· upstream rk   ÚcommitÚcommitsu
    Â· local z (+z	 carried )r�   ÚRELEASE_DATEr«   rt   r(   )ÚbaseÚstater¤   r¥   r¦   Ú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Ð^Ð^È|Ð^Ð^Ð^Ð^rA   Ú_update_resultc                  ó`   — d„ } t          j        | d¬¦  «        }|                     ¦   «          dS )z4Kick off update check in a background daemon thread.c                  óT   — t          ¦   «         at                               ¦   «          d S rE   )r›   r½   Ú_update_check_doneÚsetr®   rA   r   Ú_runz#prefetch_update_check.<locals>._run  s%   € å*Ñ,Ô,ˆÝ×ÒÑ Ô Ð Ð Ð rA   T)ÚtargetÚdaemonN)Ú	threadingÚThreadÚstart)rÂ   Úts     r   Úprefetch_update_checkrÉ     s9   € ð!ð !ð !õ 	Ô ¨TÐ2Ñ2Ô2€AØ‡G‚G�I„I€I€I€IrA   ç      à?c                 óF   — t                                | ¬¦  «         t          S )z:Get result of prefetched check. Returns None if not ready.rI   )rÀ   Úwaitr½   rI   s    r   Úget_update_resultrÍ     s   € å×Ò GÐÑ,Ô,Ð,ÝÐrA   Ú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ÚabsrX   )rÎ   ÚvalÚroundeds      r   Ú_format_context_lengthrÖ     s­   € à�ÒÐØ�yÑ ˆÝ˜‘*”*ˆÝˆs�W‰}ÑÔ Ò$Ð$Ø�=�=�=Ð Øˆ}ˆ}ˆ}ˆ}ÐØ	�5ŠˆØ�u‰nˆÝ˜‘*”*ˆÝˆs�W‰}ÑÔ Ò$Ð$Ø�=�=�=Ð Øˆ}ˆ}ˆ}ˆ}ÐÝˆv‰;Œ;ÐrA   Útoolset_namec                 óL   — | sdS |                       d¦  «        r
| dd…         n| S )zANormalize internal/legacy toolset identifiers for banner display.ÚunknownÚ_toolsNiúÿÿÿ)r<   )r×   s    r   Ú_display_toolset_namerÛ   '  s=   € àð Øˆyð × Ò  Ñ*Ô*ð	ˆ�S�b�SÔÐàðrA   Úconsoler
   ÚmodelÚtoolsÚenabled_toolsetsÚ
session_idÚcontext_lengthÚproviderc	                 ó’  ‡f— ddl m}	m}
 ddlm} ddlm} |€ddl m} |pg }|pg } |	d¬¦  «        \  }}d	„ |D ¦   «         Šf‰frˆffd
„|D ¦   «         }t          ¦   «         }t          ¦   «         }|D ]„}| 	                    dd¦  «        }|
 	                    |i ¦  «        }| 	                    dg ¦  «        }| 	                    d¦  «        r| 
                    |¦  «         Œo| 
                    |¦  «         Œ…|                     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}|pd                     ¦   «                              ¦   «         dk    �rH|}d}	 dd lm}  dd!lm}!  |! | ¦   «          	                    d¦  «        pi ¦  «        }"|" 	                    d"i ¦  «         	                    |¦  «        }#|#r\|# 	                    d#¦  «        pi }$t5          |$ 	                    d$¦  «        pd¦  «        }%d%|%v r|%                     d%¦  «        d&         n|%}n# t&          $ r d}Y nw xY wt9          |¦  «        d'k    r|dd(…         d)z   }|rd*|› d+|› d,|› d-�nd}&|rd*|› d+|› d.t;          |¦  «        › d/�nd}'|                     d0|› d1|› d-|&› |'› d*|› d+|› d2�¦  «         nþ|pd                     ¦   «         r,|pd                     ¦   «                              ¦   «         d3k    r|                     d4|› d5�¦  «         n¢d%|v r|                     d%¦  «        d&         n|}(|(                     d6¦  «        r
|(dd7…         }(t9          |(¦  «        d'k    r|(dd(…         d)z   }(|rd*|› d+|› d.t;          |¦  «        › d/�nd}'|                     d0|› d.|(› d-|'› d*|› d+|› d2�¦  «         tA          j!        d8¦  «        r|                     d9|› d:�¦  «         |                     d;|› d.|› d-�¦  «         |r|                     d;|› d<|› d-�¦  «         d= "                    |¦  «        })d>|› d?�g}*i }+|D ]S},|,d@         d         }-tG           ||-¦  «        pdA¦  «        }.|+ $                    |.g ¦  «                             |-¦  «         ŒT|D ]‚}| 	                    dB| 	                    dd3¦  «        ¦  «        }/tG          |/¦  «        }0|0|+vrg |+|0<   | 	                    dg ¦  «        D ]'}-|-|+|0         vr|+|0                              |-¦  «         Œ(ŒƒtK          |+ &                    ¦   «         ¦  «        }1|1ddC…         }2t9          |1¦  «        dCz
  }3|2D �]Þ}.|+|.         }4g }5tK          |4¦  «        D ]Z}6|6|v r|5                     dD|6› d-�¦  «         Œ |6|v r|5                     dE|6› d-�¦  «         Œ>|5                     d0|› d.|6› d-�¦  «         Œ[dF "                    |5¦  «        }7t9          dF "                    tK          |4¦  «        ¦  «        ¦  «        dGk    �r g }8d}9tK          |4¦  «        D ]\}6|9t9          |6¦  «        z   dHz   dIk    r|8                     d)¦  «          n+|8                     |6¦  «         |9t9          |6¦  «        dHz   z  }9Œ]g }5|8D ]v}6|6d)k    r|5                     dJ¦  «         Œ|6|v r|5                     dD|6› d-�¦  «         Œ<|6|v r|5                     dE|6› d-�¦  «         ŒZ|5                     d0|› d.|6› d-�¦  «         ŒwdF "                    |5¦  «        }7|*                     d;|› d.|.› dK|7› �¦  «         �Œà|3dk    r|*                     d;|› dL|3› dM�¦  «         	 ddNl'm(}:  |:¦   «         };n# t&          $ r g };Y nw xY w|;�rj|*                     d¦  «         |*                     d>|› dO�¦  «         |;D �]8}<|< 	                    dP¦  «        }=|<dQ         r>|*                     d;|› d.|<d         › dR|› dS|<dT         › dU|› dV|› d.|<d         › dW�¦  «         Œ^|< 	                    dX¦  «        s|=dXk    r/|*                     d;|› d.|<d         › dY|<dT         › dU|› dZ�	¦  «         Œ¨|=d[k    r,|*                     d;|› d.|<d         › dY|<dT         › d\�¦  «         ŒÚ|=d]k    r0|*                     d;|› d.|<d         › dY|<dT         › dU|› d^�	¦  «         �Œ|*                     dD|<d         › dY|<dT         › d_�¦  «         �Œ:|*                     d¦  «         |*                     d>|› d`�¦  «         ‰f pda‰fv }>|>r:tS          ¦   «         }?tU          db„ |? +                    ¦   «         D ¦   «         ¦  «        }@ni }?d}@tY          j-        ¦   «         j.        }At_          ta          |Adcz  ¦  «        ddz
  de¦  «        }B|>s|*                     d;|› df�¦  «         �n„|?�rhtK          |? &                    ¦   «         ¦  «        D �]D}CtK          |?|C         ¦  «        }Dt9          |C¦  «        dHz   }Et_          |B|Ez
  dg¦  «        }Fg d}9}Gtc          |D¦  «        D ]¼\  }H}6|GrdFnd}It9          |I¦  «        t9          |6¦  «        z   }Jt9          |D¦  «        |Hdhz   z
  }K|Kdk    rt9          di|K› dj�¦  «        nd}L|GrF|9|Jz   |Lz   |Fk    r:t9          |D¦  «        t9          |G¦  «        z
  }M|G                     dk|M› dj�¦  «          n|G                     |6¦  «         |9|Jz  }9Œ½dF "                    |G¦  «        }N|*                     d;|› d.|C› dl|› d.|N› d-�	¦  «         �ŒFn|*                     d;|› dm�¦  «         |*                     d¦  «         |;rtU          dn„ |;D ¦   «         ¦  «        nd}Ot9          |¦  «        › do�|@› dp�g}P|Or|P                     |O› dq�¦  «         |P                     dr¦  «         	 ddsl2m3}Q dd lm}R  |Q |R¦   «         ¦  «        dtk    r|*                     d>|› du|› dv|› dw�¦  «         n# t&          $ r Y nw xY w	 ddxl4m5}S  |S¦   «         }T|Tr%|Tdyk    r|*                     d>|› dz|› d.|T› d-�¦  «         n# t&          $ r Y nw xY w|*                     d;|› d.d{ "                    |P¦  «        › d-�¦  «         	 tm          d|¬}¦  «        }U|U�r|Udk    rldd~lm7}Vm8}W |Udk    r2|Udhk    rdnd€}X|*                     d�|U› d‚|X› dƒ |W¦   «         › d„�¦  «         n, |V¦   «         }Yd…}Z|Yr	|Zd†|Y› d‡�z  }Z|*                     |Z¦  «         n# t&          $ r Y nw xY wd= "                    |*¦  «        }[| 9                    |)|[¦  «         t          dˆd‰¦  «        }\t          dŠd‹¦  «        }]tu          ¦   «         }^tw          ¦   «         }_|_r|_\  }`}ad>|\› dŒ|a› d.|^› d��}bn	d>|\› d.|^› d-�}b |||b|]d¬Ž¦  «        }c|  <                    ¦   «          tY          j-        ¦   «         j.        }d|dd�k    rP|rt!          |d�¦  «        r|j=        r|j=        nt|          }e|  <                    |e¦  «         |  <                    ¦   «          |  <                    |c¦  «         dS )‘a�  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.
        provider: Active provider id. When ``"moa"``, ``model`` is a MoA
            preset name and the banner renders the aggregator instead of a
            bare model slug.
    r   )Úcheck_tool_availabilityÚTOOLSET_REQUIREMENTS)ÚPanel)ÚTableN)Úget_toolset_for_toolT)Úquietc                 ó,   — h | ]}t          |¦  «        ’ŒS r®   )rX   )Ú.0rÈ   s     r   ú	<setcomp>z'build_welcome_banner.<locals>.<setcomp>X  s   € Ð4Ð4Ð4˜a•3�q‘6”6Ð4Ð4Ð4rA   c                 ó†   •— g | ]=}t          |                     d |                     dd¦  «        ¦  «        ¦  «        ‰v ¯;|‘Œ>S )Úidr&   r2   )rX   r(   )rë   ÚitemÚ_enabled_tss     €r   ú
<listcomp>z(build_welcome_banner.<locals>.<listcomp>Z  sR   ø€ ð  
ð  
ð  
ØÝ�4—8’8˜D $§(¢(¨6°2Ñ"6Ô"6Ñ7Ô7Ñ8Ô8¸KÐGÐGð ØGÐGÐGrA   r&   r2   rÞ   Úcheck_fn)r   é   )ÚpaddingÚleftÚcenter)ÚjustifyÚrightÚbanner_accentz#FFBF00Ú
banner_dimz#B8860BÚbanner_textz#FFF8DCÚsession_borderz#8B8682r   Úbanner_heroÚmoa)Úload_config)Únormalize_moa_configÚpresetsÚ
aggregatorrÝ   r3   r/   é   é   z...z [dim u   ]Â·[/] [dim z]agg z[/]Ú]z context[/]Ú[z]MoA: z]Nous Research[/]rÙ   z&[bold red]no model configured[/] [dim u"   ]â€” run /model or hermes setup[/]z.gguféûÿÿÿÚHERMES_YOLO_MODEu    [bold red]âš  YOLO mode[/] [dim u%   ]â€” all approval prompts bypassed[/]z[dim z
]Session: Ú
z[bold z]Available Tools[/]ÚfunctionÚotherrî   r¢   z[red]z[yellow]z, é-   ró   é*   z[dim]...[/]z:[/] z](and z more toolsets...)[/])Úget_mcp_statusz]MCP Servers[/]ÚstatusÚ	connectedz[/] [z](Ú	transportz
)[/] [dim u	   ]â€”[/] [z tool(s)[/]Údisabledz
[/] [dim](u   ]â€” disabled[/]Ú
connectingu   )[/] [yellow]â€” connecting[/]Ú
configuredu   ]â€” configured[/]u   )[/] [red]â€” failed[/]z]Available Skills[/]Úskillsc              3   ó4   K  — | ]}t          |¦  «        V — Œd S rE   )r8   ©rë   Úss     r   ú	<genexpr>z'build_welcome_banner.<locals>.<genexpr>  s(   è è € ÐGÐG a�3˜q™6œ6ÐGÐGÐGÐGÐGÐGrA   g333333ã?r_   é   z]Skills toolset disabled[/]é   rk   z, +z moreú+z:[/] [z]No skills installed[/]c              3   ó*   K  — | ]}|d          ¯
dV — ŒdS )r  rk   Nr®   r  s     r   r  z'build_welcome_banner.<locals>.<genexpr>>  s+   è è € Ð@Ð@˜a°°;´Ð@˜Ð@Ð@Ð@Ð@Ð@Ð@rA   z toolsz skillsz MCP serversz/help for commands)Úget_current_runtimeÚcodex_app_serverz]Runtime:[/] [z]codex app-server[/] [dim z,](terminal/file ops/MCP run inside codex)[/])Úget_active_profile_nameÚdefaultz]Profile:[/] [u    Â· rÊ   rI   )Úget_managed_update_commandÚrecommended_update_commandr¶   r·   u   [bold yellow]âš  Ú u%    behind[/][dim yellow] â€” run [bold]z[/bold] to update[/]u$   [bold yellow]âš  update available[/]u   [dim yellow] â€” run [bold]z
[/bold][/]Úbanner_titlez#FFD700Úbanner_borderz#CD7F32z][link=z
[/link][/])ÚtitleÚborder_stylerô   é_   Úbanner_logo)?Úmodel_toolsrä   rå   Ú
rich.panelræ   Ú
rich.tablerç   rè   rÁ   r(   ÚupdateÚgridÚ
add_columnr   r   r   Úhasattrrý   ÚHERMES_CADUCEUSr   r6   r=   r‰   rÿ   Úhermes_cli.moa_configr   rX   ra   r8   rÖ   r*   r<   r‡   ÚgetenvÚjoinrÛ   r)   ÚsortedÚkeysÚtools.mcp_toolr  r.   ÚsumÚvaluesÚshutilÚget_terminal_sizeÚcolumnsr©   rt   Ú	enumerateÚhermes_cli.codex_runtime_switchr  Úhermes_cli.profilesr   rÍ   r"  r#  Úadd_rowr¼   r³   r   r*  ÚHERMES_AGENT_LOGO)grÜ   rÝ   rL   rÞ   rß   rà   rè   rá   râ   rä   rå   ræ   rç   Ú_Úunavailable_toolsetsÚdisabled_toolsÚ
lazy_toolsrï   r×   Úts_reqÚtools_in_tsÚlayout_tableÚaccentÚdimr   Úsession_colorr   Ú_bskinÚ_heroÚ
left_linesÚpreset_nameÚ	agg_labelrÿ   r   Ú_moaÚ_presetÚ_aggÚ_amÚagg_strÚctx_strÚmodel_shortÚ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  Ú_skills_enabledr,   Útotal_skillsÚ
_term_colsÚ_right_col_widthr$   Úskill_namesÚ_prefix_lenÚ_availÚpartsÚiÚ_sepÚ_neededÚ_afterÚ_ind_lenÚ	remainingÚ
skills_strÚmcp_connectedÚsummary_partsr  Ú	_load_cfgr   Ú_profile_namer…   r"  r#  Úcommits_wordÚmanaged_cmdÚlineÚright_contentÚtitle_colorÚborder_colorÚversion_labelÚrelease_infoÚ_tagÚ_urlÚtitle_markupÚouter_panelÚ
term_widthÚ_logorð   sg                                                                                                         @r   Úbuild_welcome_bannerrŒ  2  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Ðð 5Ð4Ð#3Ð4Ñ4Ô4€KØð 
ð 
ð  
ð  
ð  
Ø1ð 
ñ  
ô  
Ðõ ‘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Øˆ�B×ÒÑÔ×%Ò%Ñ'Ô'¨5Ò0Ñ0ð ˆØˆ	ð	Ø5Ð5Ð5Ð5Ð5Ð5ØBÐBÐBÐBÐBÐBà'Ð'¨¨©¬×(9Ò(9¸%Ñ(@Ô(@Ð(FÀBÑGÔGˆDØ—h’h˜y¨"Ñ-Ô-×1Ò1°+Ñ>Ô>ˆGØð FØ—{’{ <Ñ0Ô0Ð6°B�Ý˜$Ÿ(š( 7Ñ+Ô+Ð1¨rÑ2Ô2�Ø25¸°*°*˜CŸIšI c™NœN¨2Ô.Ð.À#�	øøÝð 	ð 	ð 	ØˆIˆIˆIð	øøøåˆ{ÑÔ˜bÒ Ð Ø% c r cÔ*¨UÑ2ˆKØHQÐYÐD˜3ÐDÐD¨CÐDÐD°iÐDÐDÐDÐDÐWYˆØiwÐÐe˜3ÐeÐe¨CÐeÐeÕ2HÈÑ2XÔ2XÐeÐeÐeÐeÐ}ˆØ×ÒÐ{˜fÐ{Ð{¨KÐ{Ð{¸GÐ{ÀWÐ{Ð{ÐTWÐ{Ð{ÐehÐ{Ð{Ð{Ñ|Ô|Ð|Ð|à�˜×"Ò"Ñ$Ô$ð 	s¨¨°"×(;Ò(;Ñ(=Ô(=×(CÒ(CÑ(EÔ(EÈÒ(RÐ(Rð ×Òð@Øð@ð @ð @ñô ð ð ð
 36¸°,°,˜%Ÿ+š+ cÑ*Ô*¨2Ô.Ð.ÀEˆKØ×#Ò# GÑ,Ô,ð /Ø)¨#¨2¨#Ô.�Ý�;ÑÔ "Ò$Ð$Ø)¨#¨2¨#Ô.°Ñ6�Øm{ð  DÐi˜sÐiÐi°ÐiÐiÕ6LÈ^Ñ6\Ô6\ÐiÐiÐiÐið  BDˆGØ×ÒÐq &ÐqÐq¨;ÐqÐq¸7ÐqÐqÈ#ÐqÐqÐ[^ÐqÐqÐqÑrÔrÐrå	„yÐ#Ñ$Ô$ð iØ×ÒÐg¸SÐgÐgÐgÑhÔhÐhØ×ÒÐ,˜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Ø—W’W˜XÑ&Ô&ˆFØ�;Ôð Ø×"Ò"ðK˜Cð Kð K # f¤+ð Kð K°Dð Kð K¸CÀÔ<Lð Kð KØðKð KØ*.ðKð KØ14°W´ðKð Kð Kñô ð ð ð —’˜Ñ$Ô$ð ¨°*Ò(<Ð(<Ø×"Ò"ð2˜Cð 2ð 2 # f¤+ð 2ð 2¸¸[Ô9Ið 2ð 2Øð2ð 2ð 2ñô ð ð ð ˜<Ò'Ð'Ø×"Ò"ð1˜Cð 1ð 1 # f¤+ð 1ð 1¸¸[Ô9Ið 1ð 1ð 1ñô ð ð ð ˜<Ò'Ð'Ø×"Ò"ð4˜Cð 4ð 4 # f¤+ð 4ð 4¸¸[Ô9Ið 4ð 4Øð4ð 4ð 4ñô ð ñ ð
 ×"Ò"ð*˜C œKð *ð *°3°{Ô3Cð *ð *ð *ñô ð ñ ð
 ×Ò�rÑÔÐØ×ÒÐ< Ð<Ð<Ð<Ñ=Ô=Ð=ð
 '�ÐD¨H¸Ð,C€OØð Ý1Ñ3Ô3ÐÝÐGÐGÐ+=×+DÒ+DÑ+FÔ+FÐGÑGÔGÑGÔGˆˆàÐØˆõ Ô)Ñ+Ô+Ô3€JÝ�3˜z¨CÑ/Ñ0Ô0°2Ñ5°rÑ:Ô:Ðàð AØ×ÒÐC 3ÐCÐCÐCÑDÔDÐDÑDØ	ñ AÝÐ1×6Ò6Ñ8Ô8Ñ9Ô9ð 	Uñ 	UˆHÝ Ð!3°HÔ!=Ñ>Ô>ˆKå˜h™-œ-¨!Ñ+ˆKÝÐ)¨KÑ7¸Ñ<Ô<ˆFà �6ˆEÝ$ [Ñ1Ô1ð "ð "‘��4Ø$Ð,�t�t¨"�Ý˜d™)œ)¥c¨$¡i¤iÑ/�å˜[Ñ)Ô)¨Q°©UÑ3�Ø7=À²z°z�3Ð2 VÐ2Ð2Ð2Ñ3Ô3Ð3Àq�Øð ˜V gÑ-°Ñ8¸6ÒAÐAÝ # KÑ 0Ô 0µ3°u±:´:Ñ =�IØ—L’LÐ!5 YÐ!5Ð!5Ð!5Ñ6Ô6Ð6Ø�EØ—’˜TÑ"Ô"Ð"Ø˜'Ñ!��ØŸš 5Ñ)Ô)ˆJØ×ÒÐ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Øð =Ø×Ò Ð;Ð;Ð;Ñ<Ô<Ð<Ø×ÒÐ-Ñ.Ô.Ð.ð	ØGÐGÐGÐGÐGÐGØ>Ð>Ð>Ð>Ð>Ð>ØÐ˜y˜y™{œ{Ñ+Ô+Ð/AÒAÐAØ×ÒðJ˜ð Jð J¨tð Jð JØðJð Jð Jñô ð øøõ ð ð ð ØˆðøøøðØ?Ð?Ð?Ð?Ð?Ð?Ø/Ð/Ñ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Ð/Ñ/Ô/ˆØÐ &¨A¢+ +Ø`Ð`Ð`Ð`Ð`Ð`Ð`Ð`Ø˜ŠzˆzØ+1°Qª;¨;˜x˜x¸I�Ø×"Ò"ðe¨ð eð e°ð eð eØ2LÐ2LÑ2NÔ2Nðeð eð eñô ð ð ð 9Ð8Ñ:Ô:�Ø=�Øð RØÐQ¸+ÐQÐQÐQÑQ�DØ×"Ò" 4Ñ(Ô(Ð(øøÝð ð ð Øˆðøøøð —I’I˜kÑ*Ô*€MØ×Ò˜ }Ñ5Ô5Ð5å˜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�+ÑÔÐÐÐso   Å95F/ Æ/GÇGÇ?B;J; Ê;K
Ë	K
ß"_3 ß3`à`ð<Aq? ñ?
ròrò7s ó
sósôBv ö
vövrE   )rÊ   )NNNNNN)HÚ__doc__rŒ   Úloggingr‡   r;  rV   rÅ   rŠ   Úpathlibr   Úurllib.parser   Úhermes_constantsr   Útypingr   r   r   r	   Úrich.consoler
   Ú	getLoggerÚ__name__ÚloggerÚ_GOLDÚ_BOLDÚ_DIMÚ_RSTrX   r   r   Ú
hermes_clir    r�   r!   r¸   rB  r2  r.   r�   rb   r`   rF   r@   ÚboolrC   rG   Úlistrt   r\   rd   r|   r›   r�   rŸ   Údictr«   r±   r¬   ÚtupleÚ__annotations__r³   r¼   r½   ÚEventrÀ   rÉ   ÚfloatrÍ   rÖ   rÛ   rŒ  r®   rA   r   ú<module>r£     s  ððð ð ð €€€Ø €€€Ø 	€	€	€	Ø €€€Ø Ð Ð Ð Ø Ð Ð Ð Ø €€€Ø Ð Ð Ð Ð Ð Ø !Ð !Ð !Ð !Ð !Ð !Ø ,Ð ,Ð ,Ð ,Ð ,Ð ,Ø 6Ð 6Ð 6Ð 6Ð 6Ð 6Ð 6Ð 6Ð 6Ð 6Ð 6Ð 6ð ð %Ø$Ð$Ð$Ð$Ð$Ð$à	ˆÔ	˜8Ñ	$Ô	$€ð 	!€Ø€Ø€Ø€ð�ð ð ð ð ð$�Sð  Cð ¨Cð ð ð ð ð PÐ OÐ OÐ OÐ OÐ OÐ OÐ OðFÐ ðj€ð,˜d 3¨¨S¬	 >Ô2ð ð ð ð ð2 'Ð ð Ð àGÐ ØAÐ ð #¨¡*ð °ð ð ð ð ð&B˜˜d™
ð B tð Bð Bð Bð Bð]  t¡ð ]°ð ]ð ]ð ]ð ]ð ?@ð )ð )ð )�d˜3”ið )¨ð )¸ð )ÀHÈSÄMð )ð )ð )ð )ð*I˜cð I h¨s¤mð Ið Ið Ið Ið,B 4ð B¨H°S¬Mð Bð Bð Bð BðJE˜8 Cœ=ð Eð Eð Eð EðP>˜8 Dœ>ð >ð >ð >ð >ð˜dð ¨ð °¸#´ð ð ð ð ð(7Jð 7J 8¨D¤>ð 7J¸XÀd¼^ð 7Jð 7Jð 7Jð 7Jðt PÐ Ø)-Ð �x ”Ð -Ð -Ñ -ð)!ð )! X¨d¤^ð )!¸xÈ¼ð )!ð )!ð )!ð )!ðX_ Sð _ð _ð _ð _ð, !%€�˜”Ð $Ð $Ñ $Ø$�Y”_Ñ&Ô&Ð ðð ð ðð ˜uð ¨x¸¬}ð ð ð ð ð 3ð ¨3ð ð ð ð ð"¨ð °ð ð ð ð ð .2Ø7;Ø+/Ø.2Ø/3Ø)-ðYð Y )ð Y°Cð Y¸cð YØ $ T¤
ðYà+/°¬9ðYð &)ðYð
 *-ðYð $'ðYð Yð Yð Yð Yð YrA   